{
  "version": 3,
  "sources": ["../../../node_modules/is-docker/index.js", "../../../node_modules/is-wsl/index.js", "../../../node_modules/define-lazy-prop/index.js", "../../../node_modules/open/index.js", "../../../node_modules/electron-squirrel-startup/node_modules/ms/index.js", "../../../node_modules/electron-squirrel-startup/node_modules/debug/src/debug.js", "../../../node_modules/electron-squirrel-startup/node_modules/debug/src/browser.js", "../../../node_modules/electron-squirrel-startup/node_modules/debug/src/node.js", "../../../node_modules/electron-squirrel-startup/node_modules/debug/src/index.js", "../../../node_modules/electron-squirrel-startup/index.js", "../../../src/app/ICreatorToolsData.ts", "../../../src/storage/IFile.ts", "../../../src/app/IProjectData.ts", "../../../src/app/IProjectItemData.ts", "../../../src/dataform/IField.ts", "../../../node_modules/jsonify/lib/parse.js", "../../../node_modules/jsonify/lib/stringify.js", "../../../node_modules/jsonify/index.js", "../../../node_modules/isarray/index.js", "../../../node_modules/object-keys/isArguments.js", "../../../node_modules/object-keys/implementation.js", "../../../node_modules/object-keys/index.js", "../../../node_modules/es-object-atoms/index.js", "../../../node_modules/es-errors/index.js", "../../../node_modules/es-errors/eval.js", "../../../node_modules/es-errors/range.js", "../../../node_modules/es-errors/ref.js", "../../../node_modules/es-errors/syntax.js", "../../../node_modules/es-errors/type.js", "../../../node_modules/es-errors/uri.js", "../../../node_modules/math-intrinsics/abs.js", "../../../node_modules/math-intrinsics/floor.js", "../../../node_modules/math-intrinsics/max.js", "../../../node_modules/math-intrinsics/min.js", "../../../node_modules/math-intrinsics/pow.js", "../../../node_modules/math-intrinsics/round.js", "../../../node_modules/math-intrinsics/isNaN.js", "../../../node_modules/math-intrinsics/sign.js", "../../../node_modules/gopd/gOPD.js", "../../../node_modules/gopd/index.js", "../../../node_modules/es-define-property/index.js", "../../../node_modules/has-symbols/shams.js", "../../../node_modules/has-symbols/index.js", "../../../node_modules/get-proto/Reflect.getPrototypeOf.js", "../../../node_modules/get-proto/Object.getPrototypeOf.js", "../../../node_modules/function-bind/implementation.js", "../../../node_modules/function-bind/index.js", "../../../node_modules/call-bind-apply-helpers/functionCall.js", "../../../node_modules/call-bind-apply-helpers/functionApply.js", "../../../node_modules/call-bind-apply-helpers/reflectApply.js", "../../../node_modules/call-bind-apply-helpers/actualApply.js", "../../../node_modules/call-bind-apply-helpers/index.js", "../../../node_modules/dunder-proto/get.js", "../../../node_modules/get-proto/index.js", "../../../node_modules/hasown/index.js", "../../../node_modules/get-intrinsic/index.js", "../../../node_modules/define-data-property/index.js", "../../../node_modules/has-property-descriptors/index.js", "../../../node_modules/set-function-length/index.js", "../../../node_modules/call-bind-apply-helpers/applyBind.js", "../../../node_modules/call-bind/index.js", "../../../node_modules/call-bound/index.js", "../../../node_modules/json-stable-stringify/index.js", "../../../src/core/Utilities.ts", "../../../node_modules/ste-core/dist/dispatching/DispatcherBase.js", "../../../node_modules/ste-core/dist/dispatching/DispatchError.js", "../../../node_modules/ste-core/dist/dispatching/DispatcherWrapper.js", "../../../node_modules/ste-core/dist/dispatching/EventListBase.js", "../../../node_modules/ste-core/dist/management/EventManagement.js", "../../../node_modules/ste-core/dist/handling/HandlingBase.js", "../../../node_modules/ste-core/dist/dispatching/PromiseDispatcherBase.js", "../../../node_modules/ste-core/dist/events/PromiseSubscription.js", "../../../node_modules/ste-core/dist/events/Subscription.js", "../../../node_modules/ste-core/dist/dispatching/SubscriptionChangeEventHandler.js", "../../../node_modules/ste-core/dist/index.js", "../../../node_modules/ste-events/dist/EventDispatcher.js", "../../../node_modules/ste-events/dist/EventList.js", "../../../node_modules/ste-events/dist/EventHandlingBase.js", "../../../node_modules/ste-events/dist/NonUniformEventList.js", "../../../node_modules/ste-events/dist/index.js", "../../../src/core/AppServiceProxy.ts", "../../../src/core/Log.ts", "../../../src/storage/IFileDifference.ts", "../../../src/storage/IFolderDifference.ts", "../../../node_modules/process-nextick-args/index.js", "../../../node_modules/readable-stream/node_modules/isarray/index.js", "../../../node_modules/readable-stream/lib/internal/streams/stream.js", "../../../node_modules/readable-stream/node_modules/safe-buffer/index.js", "../../../node_modules/core-util-is/lib/util.js", "../../../node_modules/inherits/inherits_browser.js", "../../../node_modules/inherits/inherits.js", "../../../node_modules/readable-stream/lib/internal/streams/BufferList.js", "../../../node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/util-deprecate/node.js", "../../../node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/string_decoder/node_modules/safe-buffer/index.js", "../../../node_modules/string_decoder/lib/string_decoder.js", "../../../node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/readable-stream/readable.js", "../../../node_modules/jszip/lib/support.js", "../../../node_modules/jszip/lib/base64.js", "../../../node_modules/jszip/lib/nodejsUtils.js", "../../../node_modules/immediate/lib/index.js", "../../../node_modules/lie/lib/index.js", "../../../node_modules/jszip/lib/external.js", "../../../node_modules/setimmediate/setImmediate.js", "../../../node_modules/jszip/lib/utils.js", "../../../node_modules/jszip/lib/stream/GenericWorker.js", "../../../node_modules/jszip/lib/utf8.js", "../../../node_modules/jszip/lib/stream/ConvertWorker.js", "../../../node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js", "../../../node_modules/jszip/lib/stream/StreamHelper.js", "../../../node_modules/jszip/lib/defaults.js", "../../../node_modules/jszip/lib/stream/DataWorker.js", "../../../node_modules/jszip/lib/crc32.js", "../../../node_modules/jszip/lib/stream/Crc32Probe.js", "../../../node_modules/jszip/lib/stream/DataLengthProbe.js", "../../../node_modules/jszip/lib/compressedObject.js", "../../../node_modules/jszip/lib/zipObject.js", "../../../node_modules/jszip/node_modules/pako/lib/utils/common.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/trees.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/adler32.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/crc32.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/messages.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/deflate.js", "../../../node_modules/jszip/node_modules/pako/lib/utils/strings.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/zstream.js", "../../../node_modules/jszip/node_modules/pako/lib/deflate.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/inffast.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/inftrees.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/inflate.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/constants.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/gzheader.js", "../../../node_modules/jszip/node_modules/pako/lib/inflate.js", "../../../node_modules/jszip/node_modules/pako/index.js", "../../../node_modules/jszip/lib/flate.js", "../../../node_modules/jszip/lib/compressions.js", "../../../node_modules/jszip/lib/signature.js", "../../../node_modules/jszip/lib/generate/ZipFileWorker.js", "../../../node_modules/jszip/lib/generate/index.js", "../../../node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js", "../../../node_modules/jszip/lib/object.js", "../../../node_modules/jszip/lib/reader/DataReader.js", "../../../node_modules/jszip/lib/reader/ArrayReader.js", "../../../node_modules/jszip/lib/reader/StringReader.js", "../../../node_modules/jszip/lib/reader/Uint8ArrayReader.js", "../../../node_modules/jszip/lib/reader/NodeBufferReader.js", "../../../node_modules/jszip/lib/reader/readerFor.js", "../../../node_modules/jszip/lib/zipEntry.js", "../../../node_modules/jszip/lib/zipEntries.js", "../../../node_modules/jszip/lib/load.js", "../../../node_modules/jszip/lib/index.js", "../../../src/storage/IStorage.ts", "../../../node_modules/js-md5/src/md5.js", "../../../node_modules/esprima/dist/esprima.js", "../../../node_modules/array-timsort/src/index.js", "../../../node_modules/comment-json/src/common.js", "../../../node_modules/comment-json/src/array.js", "../../../node_modules/comment-json/src/parse.js", "../../../node_modules/comment-json/src/stringify.js", "../../../node_modules/comment-json/src/index.js", "../../../src/core/JsonUtilities.ts", "../../../src/storage/FileBase.ts", "../../../src/storage/ZipFile.ts", "../../../src/storage/AllFolderFileIterator.ts", "../../../src/storage/FolderBase.ts", "../../../src/storage/ZipFolder.ts", "../../../src/storage/StorageBase.ts", "../../../src/core/SecurityUtilities.ts", "../../../src/storage/ZipStorage.ts", "../../../src/storage/DifferenceSet.ts", "../../../src/storage/File.ts", "../../../src/storage/Folder.ts", "../../../src/storage/Storage.ts", "../../../node_modules/obscenity/dist/util/Char.js", "../../../node_modules/obscenity/dist/censor/BuiltinStrategies.js", "../../../node_modules/obscenity/dist/util/Interval.js", "../../../node_modules/obscenity/dist/matcher/MatchPayload.js", "../../../node_modules/obscenity/dist/censor/TextCensor.js", "../../../node_modules/obscenity/dist/matcher/BlacklistedTerm.js", "../../../node_modules/obscenity/dist/dataset/DataSet.js", "../../../node_modules/obscenity/dist/pattern/Nodes.js", "../../../node_modules/obscenity/dist/pattern/Util.js", "../../../node_modules/obscenity/dist/transformer/TransformerSet.js", "../../../node_modules/obscenity/dist/util/CharacterIterator.js", "../../../node_modules/obscenity/dist/matcher/IntervalCollection.js", "../../../node_modules/obscenity/dist/matcher/regexp/RegExpMatcher.js", "../../../node_modules/obscenity/dist/matcher/Matcher.js", "../../../node_modules/obscenity/dist/pattern/ParserError.js", "../../../node_modules/obscenity/dist/pattern/Parser.js", "../../../node_modules/obscenity/dist/pattern/Pattern.js", "../../../node_modules/obscenity/dist/transformer/Transformers.js", "../../../node_modules/obscenity/dist/transformer/collapse-duplicates/transformer.js", "../../../node_modules/obscenity/dist/transformer/collapse-duplicates/index.js", "../../../node_modules/obscenity/dist/transformer/remap-characters/index.js", "../../../node_modules/obscenity/dist/transformer/resolve-confusables/confusables.js", "../../../node_modules/obscenity/dist/transformer/resolve-confusables/index.js", "../../../node_modules/obscenity/dist/transformer/resolve-leetspeak/dictionary.js", "../../../node_modules/obscenity/dist/transformer/resolve-leetspeak/index.js", "../../../node_modules/obscenity/dist/transformer/to-ascii-lowercase/index.js", "../../../node_modules/obscenity/dist/preset/english.js", "../../../node_modules/obscenity/dist/transformer/skip-non-alphabetic/index.js", "../../../node_modules/obscenity/dist/index.js", "../../../node_modules/obscenity/dist/index.mjs", "../../../src/storage/BasicValidators.ts", "../../../src/storage/StorageUtilities.ts", "../../../src/script/ScriptGen.ts", "../../../src/minecraft/ManagedComponent.ts", "../../../src/minecraft/ManagedComponentGroup.ts", "../../../node_modules/axios/lib/helpers/bind.js", "../../../node_modules/axios/lib/utils.js", "../../../node_modules/axios/lib/core/AxiosError.js", "../../../node_modules/delayed-stream/lib/delayed_stream.js", "../../../node_modules/combined-stream/lib/combined_stream.js", "../../../node_modules/form-data/node_modules/mime-db/db.json", "../../../node_modules/form-data/node_modules/mime-db/index.js", "../../../node_modules/form-data/node_modules/mime-types/index.js", "../../../node_modules/asynckit/lib/defer.js", "../../../node_modules/asynckit/lib/async.js", "../../../node_modules/asynckit/lib/abort.js", "../../../node_modules/asynckit/lib/iterate.js", "../../../node_modules/asynckit/lib/state.js", "../../../node_modules/asynckit/lib/terminator.js", "../../../node_modules/asynckit/parallel.js", "../../../node_modules/asynckit/serialOrdered.js", "../../../node_modules/asynckit/serial.js", "../../../node_modules/asynckit/index.js", "../../../node_modules/has-tostringtag/shams.js", "../../../node_modules/es-set-tostringtag/index.js", "../../../node_modules/form-data/lib/populate.js", "../../../node_modules/form-data/lib/form_data.js", "../../../node_modules/axios/lib/platform/node/classes/FormData.js", "../../../node_modules/axios/lib/helpers/toFormData.js", "../../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js", "../../../node_modules/axios/lib/helpers/buildURL.js", "../../../node_modules/axios/lib/core/InterceptorManager.js", "../../../node_modules/axios/lib/defaults/transitional.js", "../../../node_modules/axios/lib/platform/node/classes/URLSearchParams.js", "../../../node_modules/axios/lib/platform/node/index.js", "../../../node_modules/axios/lib/platform/common/utils.js", "../../../node_modules/axios/lib/platform/index.js", "../../../node_modules/axios/lib/helpers/toURLEncodedForm.js", "../../../node_modules/axios/lib/helpers/formDataToJSON.js", "../../../node_modules/axios/lib/defaults/index.js", "../../../node_modules/axios/lib/helpers/parseHeaders.js", "../../../node_modules/axios/lib/core/AxiosHeaders.js", "../../../node_modules/axios/lib/core/transformData.js", "../../../node_modules/axios/lib/cancel/isCancel.js", "../../../node_modules/axios/lib/cancel/CanceledError.js", "../../../node_modules/axios/lib/core/settle.js", "../../../node_modules/axios/lib/helpers/isAbsoluteURL.js", "../../../node_modules/axios/lib/helpers/combineURLs.js", "../../../node_modules/axios/lib/core/buildFullPath.js", "../../../node_modules/proxy-from-env/index.js", "../../../node_modules/ms/index.js", "../../../node_modules/debug/src/common.js", "../../../node_modules/debug/src/browser.js", "../../../node_modules/has-flag/index.js", "../../../node_modules/supports-color/index.js", "../../../node_modules/debug/src/node.js", "../../../node_modules/debug/src/index.js", "../../../node_modules/follow-redirects/debug.js", "../../../node_modules/follow-redirects/index.js", "../../../node_modules/axios/lib/env/data.js", "../../../node_modules/axios/lib/helpers/parseProtocol.js", "../../../node_modules/axios/lib/helpers/fromDataURI.js", "../../../node_modules/axios/lib/helpers/AxiosTransformStream.js", "../../../node_modules/axios/lib/helpers/readBlob.js", "../../../node_modules/axios/lib/helpers/formDataToStream.js", "../../../node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js", "../../../node_modules/axios/lib/helpers/callbackify.js", "../../../node_modules/axios/lib/helpers/shouldBypassProxy.js", "../../../node_modules/axios/lib/helpers/speedometer.js", "../../../node_modules/axios/lib/helpers/throttle.js", "../../../node_modules/axios/lib/helpers/progressEventReducer.js", "../../../node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js", "../../../node_modules/axios/lib/adapters/http.js", "../../../node_modules/axios/lib/helpers/isURLSameOrigin.js", "../../../node_modules/axios/lib/helpers/cookies.js", "../../../node_modules/axios/lib/core/mergeConfig.js", "../../../node_modules/axios/lib/helpers/resolveConfig.js", "../../../node_modules/axios/lib/adapters/xhr.js", "../../../node_modules/axios/lib/helpers/composeSignals.js", "../../../node_modules/axios/lib/helpers/trackStream.js", "../../../node_modules/axios/lib/adapters/fetch.js", "../../../node_modules/axios/lib/adapters/adapters.js", "../../../node_modules/axios/lib/core/dispatchRequest.js", "../../../node_modules/axios/lib/helpers/validator.js", "../../../node_modules/axios/lib/core/Axios.js", "../../../node_modules/axios/lib/cancel/CancelToken.js", "../../../node_modules/axios/lib/helpers/spread.js", "../../../node_modules/axios/lib/helpers/isAxiosError.js", "../../../node_modules/axios/lib/helpers/HttpStatusCode.js", "../../../node_modules/axios/lib/axios.js", "../../../node_modules/axios/index.js", "../../../src/minecraft/BlockRenderType.ts", "../../../node_modules/exifr/dist/full.umd.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/decode/assert.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/decode/byteStreamReader.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/decode/text.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/decode/validate.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/decode/decoder.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/public/tga.js", "../../../src/core/ImageCodec.ts", "../../../src/minecraft/TextureDefinition.ts", "../../../src/minecraft/ItemTextureCatalogDefinition.ts", "../../../src/minecraft/INbtTag.ts", "../../../src/minecraft/NbtBinaryTag.ts", "../../../src/minecraft/IBlockTypePropertyData.ts", "../../../src/minecraft/BlockProperty.ts", "../../../src/minecraft/components/IntAttributeComponent.ts", "../../../src/minecraft/components/FloatAttributeComponent.ts", "../../../src/minecraft/ComponentProperty.ts", "../../../src/minecraft/ComponentizedBase.ts", "../../../src/minecraft/Block.ts", "../../../src/minecraft/BlockVolumeLine.ts", "../../../src/minecraft/BlockVolumePlane.ts", "../../../src/minecraft/BlockLocation.ts", "../../../src/minecraft/Location.ts", "../../../src/minecraft/Rotation.ts", "../../../src/minecraft/Entity.ts", "../../../src/minecraft/BlockVolume.ts", "../../../src/core/DataUtilities.ts", "../../../src/minecraft/NbtBinary.ts", "../../../src/minecraft/InventorySlot.ts", "../../../src/minecraft/ComponentBase.ts", "../../../src/minecraft/components/EntityInventoryComponent.ts", "../../../src/minecraft/Structure.ts", "../../../src/app/ProjectContent.ts", "../../../src/minecraft/ResourceManifestDefinition.ts", "../../../src/minecraft/BehaviorManifestDefinition.ts", "../../../src/minecraft/SkinManifestDefinition.ts", "../../../src/minecraft/PersonaManifestDefinition.ts", "../../../src/minecraft/DesignManifestDefinition.ts", "../../../src/minecraft/Pack.ts", "../../../src/devproject/NpmPackageDefinition.ts", "../../../src/minecraft/IMolangNode.ts", "../../../src/minecraft/MolangNode.ts", "../../../src/minecraft/Molang.ts", "../../../src/minecraft/ManagedPermutation.ts", "../../../src/minecraft/ModelGeometryDefinition.ts", "../../../node_modules/esprima-next/dist/esprima.js", "../../../src/core/ContentIndex.ts", "../../../src/minecraft/BlocksCatalogDefinition.ts", "../../../src/minecraft/TerrainTextureCatalogDefinition.ts", "../../../src/minecraft/TypeScriptDefinition.ts", "../../../src/minecraft/BlockTypeDefinition.ts", "../../../src/info/IInfoItemData.ts", "../../../src/info/ProjectInfoItem.ts", "../../../src/updates/IUpdateResult.ts", "../../../src/updates/ProjectUpdateResult.ts", "../../../src/devproject/EnvSettings.ts", "../../../src/manager/ScriptModuleManager.ts", "../../../src/devproject/VsCodeTasksDefinition.ts", "../../../src/devproject/VsCodeLaunchDefinition.ts", "../../../src/manager/VsCodeFileManager.ts", "../../../src/minecraft/WorldTemplateManifestDefinition.ts", "../../../src/core/versioning/SemanticVersion.ts", "../../../src/core/versioning/MinecraftVersionRules.ts", "../../../src/manager/MinEngineVersionManager.ts", "../../../src/manager/BaseGameVersionManager.ts", "../../../src/info/PackMetaDataInfoGenerator.ts", "../../../src/info/CooperativeAddOnRequirementsGenerator.ts", "../../../src/minecraft/AnimationResourceDefinition.ts", "../../../src/dataform/DataFormProcessor.ts", "../../../src/minecraft/RenderControllerSetDefinition.ts", "../../../src/minecraft/AnimationBehaviorDefinition.ts", "../../../src/minecraft/AnimationControllerBehaviorDefinition.ts", "../../../src/minecraft/AnimationControllerResourceDefinition.ts", "../../../src/minecraft/BiomeBehaviorDefinition.ts", "../../../src/minecraft/BiomeResourceDefinition.ts", "../../../src/minecraft/EntityTypeResourceDefinition.ts", "../../../src/minecraft/FlipbookTextureCatalogDefinition.ts", "../../../src/minecraft/JigsawProcessorListDefinition.ts", "../../../src/minecraft/JigsawTemplatePoolDefinition.ts", "../../../src/minecraft/JigsawStructureDefinition.ts", "../../../src/minecraft/JigsawStructureSetDefinition.ts", "../../../src/minecraft/MusicDefinitionCatalogDefinition.ts", "../../../src/minecraft/SoundCatalogDefinition.ts", "../../../src/minecraft/TextureSetDefinition.ts", "../../../src/minecraft/MinecraftDefinitions.ts", "../../../src/minecraft/AttachableResourceDefinition.ts", "../../../src/minecraft/ItemTypeDefinition.ts", "../../../src/info/StrictPlatformInfoGenerator.ts", "../../../src/minecraft/Material.ts", "../../../src/info/CooperativeAddOnItemRequirementsGenerator.ts", "../../../src/info/PathLengthFileGenerator.ts", "../../../src/info/ItemCountsInfoGenerator.ts", "../../../src/info/IProjectInfoData.ts", "../../../src/core/Constants.ts", "../../../src/app/Status.ts", "../../../src/info/SummaryInfoGenerator.ts", "../../../src/core/HashUtilities.ts", "../../../src/analytics/TelemetryConstants.ts", "../../../src/analytics/Telemetry.ts", "../../../src/info/InfoGeneratorTopicUtilities.ts", "../../../src/minecraft/ParticleEffectResourceDefinition.ts", "../../../src/minecraft/FogResourceDefinition.ts", "../../../src/minecraft/RecipeBehaviorDefinition.ts", "../../../src/minecraft/SpawnRulesBehaviorDefinition.ts", "../../../src/info/CrossReferenceIndexGenerator.ts", "../../../src/minecraft/FeatureDefinition.ts", "../../../src/info/TypesInfoGenerator.ts", "../../../src/info/ProjectInfoSet.ts", "../../../src/info/ProjectInfoUtilities.ts", "../../../src/info/PackInfoGenerator.ts", "../../../src/info/LineSizeInfoGenerator.ts", "../../../src/dataform/ICondition.ts", "../../../src/dataform/ISummarizerToken.ts", "../../../src/dataform/SummarizerEvaluator.ts", "../../../src/dataform/DataFormUtilities.ts", "../../../src/dataform/FieldUtilities.ts", "../../../src/dataform/DataFormValidator.ts", "../../../src/info/FormSchemaItemInfoGenerator.ts", "../../../src/info/UnknownItemGenerator.ts", "../../../src/info/UnknownFileGenerator.ts", "../../../src/minecraft/WorldLevelDat.ts", "../../../node_modules/pako/dist/pako.esm.mjs", "../../../src/minecraft/Varint.ts", "../../../src/minecraft/LevelKeyValue.ts", "../../../src/minecraft/LevelDbIndex.ts", "../../../src/minecraft/LevelDb.ts", "../../../src/minecraft/BlockPalette.ts", "../../../src/minecraft/blockActors/BlockActor.ts", "../../../src/minecraft/blockActors/GenericBlockActor.ts", "../../../src/minecraft/blockActors/ChestBlockActor.ts", "../../../src/minecraft/blockActors/BedBlockActor.ts", "../../../src/minecraft/blockActors/FrameBlockActor.ts", "../../../src/minecraft/blockActors/NoteBlockActor.ts", "../../../src/minecraft/blockActors/SignBlockActor.ts", "../../../src/minecraft/blockActors/StructureBlockActor.ts", "../../../src/minecraft/blockActors/CauldronBlockActor.ts", "../../../src/minecraft/blockActors/CampfireBlockActor.ts", "../../../src/minecraft/blockActors/BeehiveBlockActor.ts", "../../../src/minecraft/blockActors/CommandBlockActor.ts", "../../../src/minecraft/blockActors/MobSpawnerBlockActor.ts", "../../../src/minecraft/blockActors/HopperBlockActor.ts", "../../../src/minecraft/blockActors/ComparatorBlockActor.ts", "../../../src/minecraft/blockActors/BlockActorFactory.ts", "../../../src/minecraft/ChunkEntity.ts", "../../../src/minecraft/WorldChunk.ts", "../../../src/minecraft/Anchor.ts", "../../../src/minecraft/AnchorSet.ts", "../../../src/minecraft/ActorItem.ts", "../../../src/minecraft/WorldChunkCache.ts", "../../../src/minecraft/MCWorld.ts", "../../../src/info/WorldItemInfoGenerator.ts", "../../../src/info/JsonFileTagsInfoGenerator.ts", "../../../src/app/CommandStructure.ts", "../../../src/app/ICommand.ts", "../../../src/app/toolcommands/IToolCommand.ts", "../../../src/app/toolcommands/IToolCommandContext.ts", "../../../src/app/toolcommands/ToolCommandParser.ts", "../../../src/app/toolcommands/ToolCommandRegistry.ts", "../../../src/app/IGalleryItem.ts", "../../../src/app/toolcommands/AutocompleteProviders.ts", "../../../src/app/toolcommands/commands/HelpCommand.ts", "../../../src/github/GitHubFile.ts", "../../../src/github/GitHubFolder.ts", "../../../src/github/GitHubStorage.ts", "../../../src/storage/HttpFile.ts", "../../../src/storage/HttpFolder.ts", "../../../src/storage/HttpStorage.ts", "../../../node_modules/esbuild-wasm/lib/main.js", "../../../src/app/ProjectBuild.ts", "../../../src/app/gallery/GalleryReader.ts", "../../../src/app/ProjectExporter.ts", "../../../src/app/toolcommands/commands/CreateCommand.ts", "../../../src/minecraft/PngEncoder.ts", "../../../src/minecraft/ItemTextureTemplates.ts", "../../../src/minecraft/traits/ContentTraits.ts", "../../../src/minecraft/traits/HumanoidEntityTrait.ts", "../../../src/minecraft/traits/QuadrupedEntityTrait.ts", "../../../src/minecraft/traits/QuadrupedSmallEntityTrait.ts", "../../../src/minecraft/traits/FlyingEntityTrait.ts", "../../../src/minecraft/traits/AquaticEntityTrait.ts", "../../../src/minecraft/traits/ArthropodEntityTrait.ts", "../../../src/minecraft/traits/SlimeEntityTrait.ts", "../../../src/minecraft/traits/HostileEntityTrait.ts", "../../../src/minecraft/traits/PassiveEntityTrait.ts", "../../../src/minecraft/traits/NeutralEntityTrait.ts", "../../../src/minecraft/traits/BossEntityTrait.ts", "../../../src/minecraft/traits/WandersEntityTrait.ts", "../../../src/minecraft/traits/FleesDaylightEntityTrait.ts", "../../../src/minecraft/traits/MeleeAttackerEntityTrait.ts", "../../../src/minecraft/traits/RangedAttackerEntityTrait.ts", "../../../src/minecraft/traits/ExploderEntityTrait.ts", "../../../src/minecraft/traits/TameableEntityTrait.ts", "../../../src/minecraft/traits/RideableEntityTrait.ts", "../../../src/minecraft/traits/BreedableEntityTrait.ts", "../../../src/minecraft/traits/LeasableEntityTrait.ts", "../../../src/minecraft/traits/TraderEntityTrait.ts", "../../../src/minecraft/traits/UndeadEntityTrait.ts", "../../../src/minecraft/traits/BabyVariantEntityTrait.ts", "../../../src/minecraft/traits/TeleporterEntityTrait.ts", "../../../src/minecraft/traits/StoneMaterialBlockTrait.ts", "../../../src/minecraft/traits/WoodMaterialBlockTrait.ts", "../../../src/minecraft/traits/MetalMaterialBlockTrait.ts", "../../../src/minecraft/traits/SoftMaterialBlockTrait.ts", "../../../src/minecraft/traits/DoorBlockTrait.ts", "../../../src/minecraft/traits/TrapdoorBlockTrait.ts", "../../../src/minecraft/traits/ButtonBlockTrait.ts", "../../../src/minecraft/traits/LeverBlockTrait.ts", "../../../src/minecraft/traits/CraftingStationBlockTrait.ts", "../../../src/minecraft/traits/RedstoneProducerBlockTrait.ts", "../../../src/minecraft/traits/RotatableHorizontalBlockTrait.ts", "../../../src/minecraft/traits/RotatableAllBlockTrait.ts", "../../../src/minecraft/traits/SlabBlockTrait.ts", "../../../src/minecraft/traits/StairsBlockTrait.ts", "../../../src/minecraft/traits/FenceBlockTrait.ts", "../../../src/minecraft/traits/LightSourceBlockTrait.ts", "../../../src/minecraft/traits/VariableLightBlockTrait.ts", "../../../src/minecraft/traits/PassableBlockTrait.ts", "../../../src/minecraft/traits/TransparentBlockTrait.ts", "../../../src/minecraft/traits/GravityAffectedBlockTrait.ts", "../../../src/minecraft/traits/CropBlockTrait.ts", "../../../src/minecraft/traits/FlammableBlockTrait.ts", "../../../src/minecraft/traits/ExplosionResistantBlockTrait.ts", "../../../src/minecraft/traits/SlipperyBlockTrait.ts", "../../../src/minecraft/traits/SwordItemTrait.ts", "../../../src/minecraft/traits/PickaxeItemTrait.ts", "../../../src/minecraft/traits/AxeItemTrait.ts", "../../../src/minecraft/traits/ShovelItemTrait.ts", "../../../src/minecraft/traits/HoeItemTrait.ts", "../../../src/minecraft/traits/HelmetItemTrait.ts", "../../../src/minecraft/traits/ChestplateItemTrait.ts", "../../../src/minecraft/traits/LeggingsItemTrait.ts", "../../../src/minecraft/traits/BootsItemTrait.ts", "../../../src/minecraft/traits/FoodItemTrait.ts", "../../../src/minecraft/traits/DrinkItemTrait.ts", "../../../src/minecraft/traits/ThrowableItemTrait.ts", "../../../src/minecraft/traits/StackableItemTrait.ts", "../../../src/minecraft/traits/NonStackableItemTrait.ts", "../../../src/minecraft/traits/FuelItemTrait.ts", "../../../src/minecraft/traits/GlintingItemTrait.ts", "../../../src/minecraft/traits/RepairableItemTrait.ts", "../../../src/minecraft/traits/CooldownItemTrait.ts", "../../../src/minecraft/traits/MusicDiscItemTrait.ts", "../../../src/minecraft/traits/index.ts", "../../../src/minecraft/IMcpModelDesign.ts", "../../../src/minecraft/NoiseGenerationUtilities.ts", "../../../src/minecraft/TextureEffects.ts", "../../../src/minecraft/TexturedRectangleGenerator.ts", "../../../src/minecraft/ModelDesignUtilities.ts", "../../../src/minecraft/ModelDesignTemplates.ts", "../../../src/minecraft/ContentGenerator.ts", "../../../src/minecraft/ContentWriter.ts", "../../../src/app/toolcommands/commands/AddCommand.ts", "../../../src/app/toolcommands/commands/RemoveCommand.ts", "../../../src/app/toolcommands/commands/RenameCommand.ts", "../../../src/app/toolcommands/commands/ScriptCommand.ts", "../../../src/app/toolcommands/commands/OpenSampleCommand.ts", "../../../src/app/toolcommands/commands/ValidateCommand.ts", "../../../src/app/toolcommands/commands/InfoCommand.ts", "../../../src/app/toolcommands/commands/ExportCommand.ts", "../../../src/app/toolcommands/commands/DeployCommand.ts", "../../../src/app/toolcommands/commands/SwitchModeCommand.ts", "../../../src/app/toolcommands/commands/ToggleInspectorCommand.ts", "../../../src/app/toolcommands/commands/ReloadProjectCommand.ts", "../../../src/app/toolcommands/commands/OpenFileCommand.ts", "../../../src/app/toolcommands/commands/FormatDocumentCommand.ts", "../../../src/app/toolcommands/commands/OpenSettingsCommand.ts", "../../../src/app/toolcommands/commands/index.ts", "../../../src/app/toolcommands/index.ts", "../../../src/app/CommandRegistry.ts", "../../../src/minecraft/Dialogue.ts", "../../../src/info/WorldDataInfoGenerator.ts", "../../../src/minecraft/JsonUIResourceDefinition.ts", "../../../src/info/TextureInfoGenerator.ts", "../../../src/info/PackSizeInfoGenerator.ts", "../../../src/info/TextureImageInfoGenerator.ts", "../../../src/manager/FormatVersionManager.ts", "../../../src/info/AnimationResourceInfoGenerator.ts", "../../../src/info/UnlinkedItemInfoGenerator.ts", "../../../src/info/GeometryInfoGenerator.ts", "../../../src/info/TextureReferenceInfoGenerator.ts", "../../../src/info/ValidFileGenerator.ts", "../../../src/manager/BlocksCatalogManager.ts", "../../../src/manager/EntityTypeManager.ts", "../../../src/manager/ItemTypeManager.ts", "../../../src/info/SharingInfoGenerator.ts", "../../../src/info/projectGenerators/CheckVanillaDuplicatesInfoGenerator.ts", "../../../src/info/fileGenerators/CheckNoBOMGenerator.ts", "../../../src/info/MCFunctionInfoGenerator.ts", "../../../src/storage/ImageUtilites.ts", "../../../src/info/projectGenerators/CheckPackIconsGenerator.ts", "../../../src/core/async/AsyncUtilities.ts", "../../../src/info/projectGenerators/CheckWorldIconsGenerator.ts", "../../../node_modules/zod/v3/helpers/util.js", "../../../node_modules/zod/v3/ZodError.js", "../../../node_modules/zod/v3/locales/en.js", "../../../node_modules/zod/v3/errors.js", "../../../node_modules/zod/v3/helpers/parseUtil.js", "../../../node_modules/zod/v3/helpers/typeAliases.js", "../../../node_modules/zod/v3/helpers/errorUtil.js", "../../../node_modules/zod/v3/types.js", "../../../node_modules/zod/v3/external.js", "../../../node_modules/zod/index.js", "../../../src/minecraft/ISoundDefinitionCatalog.ts", "../../../src/info/projectGenerators/SoundDefinitionsInfoGenerator.ts", "../../../src/info/ScriptInfoGenerator.ts", "../../../src/info/projectGenerators/CheckParticleIdentifierGenerator.ts", "../../../src/minecraft/skins/Skin.ts", "../../../src/info/tests/TestDefinition.ts", "../../../node_modules/json-schema/lib/validate.js", "../../../src/jsonschema/SchemaValidation.ts", "../../../src/minecraft/skins/SkinPack.ts", "../../../src/minecraft/textures/ModelSegments.ts", "../../../src/minecraft/textures/TextureUtilities.ts", "../../../src/info/projectGenerators/CheckSkinPackJsonGenerator.ts", "../../../src/info/CommunitySchemaItemInfoGenerator.ts", "../../../src/info/JsonSchemaItemInfoGenerator.ts", "../../../src/info/projectGenerators/data/ForbiddenFiles.ts", "../../../src/info/projectGenerators/CheckForbiddenFiles.ts", "../../../src/info/projectGenerators/CheckProjectIntegrityGenerator.ts", "../../../src/core/ArrayUtilities.ts", "../../../src/info/projectGenerators/CheckBetaFeaturesGenerator.ts", "../../../src/info/projectGenerators/CheckExperimentalFlagInfoGenerator.ts", "../../../src/info/projectGenerators/CheckFeatureDeprecationInfoGenerator.ts", "../../../src/info/projectGenerators/CheckGeometryFormatInfoGenerator.ts", "../../../src/app/localization/LocalizationCatalog.ts", "../../../src/info/projectGenerators/CheckLangFilesGenerator.ts", "../../../src/info/registration/RegistrationData.ts", "../../../src/app/Versioning.ts", "../../../src/core/ObjectUtilities.ts", "../../../src/minecraft/manifests/JsonManifest.ts", "../../../src/minecraft/manifests/Manifest.ts", "../../../src/info/projectGenerators/checkManifest/CheckManifestData.ts", "../../../src/info/projectGenerators/checkManifest/CheckManifestGenerator.ts", "../../../src/info/projectGenerators/CheckResourcePackDependenciesGenerator.ts", "../../../src/info/projectGenerators/CheckWorldPackReferencesGenerator.ts", "../../../src/info/CustomDimensionWorldDataInfoGenerator.ts", "../../../src/info/registration/GeneratorRegistrations.ts", "../../../src/updates/ProjectUpdateRunner.ts", "../../../src/devproject/EslintConfig.ts", "../../../src/devproject/JustConfig.ts", "../../../src/app/ProjectStandard.ts", "../../../src/actions/IActionSetData.ts", "../../../src/actions/ActionError.ts", "../../../src/actions/ActionSetScope.ts", "../../../src/dataform/DataFormFile.ts", "../../../src/actions/Action.ts", "../../../src/actions/BlockBreakAction.ts", "../../../src/actions/GroupAction.ts", "../../../src/actions/IScriptGenerationContext.ts", "../../../src/actions/BlockExplodeAction.ts", "../../../src/actions/BlockSetAction.ts", "../../../src/actions/EntityDieAction.ts", "../../../src/actions/EntitySpawnAction.ts", "../../../src/actions/GeneralAction.ts", "../../../src/actions/IAction.ts", "../../../src/actions/ItemSpawnAction.ts", "../../../src/actions/ParticleSpawnAction.ts", "../../../src/actions/PlayerJoinAction.ts", "../../../src/actions/RandomizeGroupAction.ts", "../../../src/actions/SequenceGroupAction.ts", "../../../src/actions/SoundPlayAction.ts", "../../../src/actions/TestIdleAction.ts", "../../../src/actions/TestSimulatedPlayerMoveAction.ts", "../../../src/actions/TestSimulatedPlayerSpawnAction.ts", "../../../src/actions/TickGroupAction.ts", "../../../src/actions/WorldSendMessageAction.ts", "../../../src/actions/ActionSetCatalog.ts", "../../../src/actions/ActionGroup.ts", "../../../src/actions/ActionSet.ts", "../../../src/script/ActionSetScriptGenerator.ts", "../../../src/worldtest/WorldTestArea.ts", "../../../src/worldtest/WorldTest.ts", "../../../src/script/WorldTestManager.ts", "../../../src/devproject/VsCodeExtensionsDefinition.ts", "../../../src/devproject/VsCodeSettingsDefinition.ts", "../../../src/devproject/PrettierRcConfig.ts", "../../../src/app/ProjectAutogeneration.ts", "../../../src/app/ProjectUtilities.ts", "../../../src/app/ProjectItemTypeInfo.ts", "../../../src/app/project/projectItems/ProjectItemValues.ts", "../../../src/app/ProjectItemUtilities.ts", "../../../src/design/IImageEdits.ts", "../../../src/core/ColorUtilities.ts", "../../../src/design/ImageItem.ts", "../../../src/design/ImageEditsDefinition.ts", "../../../src/app/ProjectItemInference.ts", "../../../src/minecraft/FeatureRuleDefinition.ts", "../../../src/minecraft/LootTableBehaviorDefinition.ts", "../../../src/minecraft/SkinCatalogDefinition.ts", "../../../src/app/RelationsIndex.ts", "../../../src/app/ProjectItemRelations.ts", "../../../src/app/ProjectCreateManager.ts", "../../../src/app/ProjectItemCreateManager.ts", "../../../src/minecraft/AudioDefinition.ts", "../../../src/minecraft/SoundDefinitionCatalogDefinition.ts", "../../../src/minecraft/VanillaGeometryTransforms.ts", "../../../src/minecraft/MolangEvaluator.ts", "../../../src/minecraft/RenderControllerResolver.ts", "../../../src/minecraft/IMolangContext.ts", "../../../src/minecraft/VanillaProjectManager.ts", "../../../src/minecraft/MinecraftUtilities.ts", "../../../src/minecraft/BlockType.ts", "../../../src/minecraft/IBlockBaseTypeData.ts", "../../../src/minecraft/BlockBaseType.ts", "../../../src/devproject/NpmModule.ts", "../../../src/langcore/javascript/ScriptModuleInfo.ts", "../../../src/minecraft/Database.ts", "../../../src/minecraft/EntityTypeDefinition.ts", "../../../src/app/IProjectItemVariant.ts", "../../../src/app/ProjectItemVariant.ts", "../../../src/app/ProjectVariant.ts", "../../../src/app/ProjectItem.ts", "../../../src/minecraft/IWorldSettings.ts", "../../../src/minecraft/Lang.ts", "../../../src/minecraft/LocManager.ts", "../../../src/analytics/TelemetryStub.ts", "../../../src/app/ProjectDeploySync.ts", "../../../src/app/LookupUtilities.ts", "../../../src/app/ProjectLookupUtilities.ts", "../../../src/app/IProjectWorkerManager.ts", "../../../src/app/Project.ts", "../../../node_modules/universal-user-agent/index.js", "../../../node_modules/before-after-hook/lib/register.js", "../../../node_modules/before-after-hook/lib/add.js", "../../../node_modules/before-after-hook/lib/remove.js", "../../../node_modules/before-after-hook/index.js", "../../../node_modules/@octokit/endpoint/dist-bundle/index.js", "../../../node_modules/fast-content-type-parse/index.js", "../../../node_modules/@octokit/request-error/dist-src/index.js", "../../../node_modules/@octokit/request/dist-bundle/index.js", "../../../node_modules/@octokit/graphql/dist-bundle/index.js", "../../../node_modules/@octokit/auth-token/dist-bundle/index.js", "../../../node_modules/@octokit/core/dist-src/version.js", "../../../node_modules/@octokit/core/dist-src/index.js", "../../../node_modules/@octokit/plugin-request-log/dist-src/version.js", "../../../node_modules/@octokit/plugin-request-log/dist-src/index.js", "../../../node_modules/@octokit/plugin-paginate-rest/dist-bundle/index.js", "../../../node_modules/@octokit/src/version.ts", "../../../node_modules/@octokit/src/generated/endpoints.ts", "../../../node_modules/@octokit/src/endpoints-to-methods.ts", "../../../node_modules/@octokit/src/index.ts", "../../../node_modules/@octokit/rest/dist-src/version.js", "../../../node_modules/@octokit/rest/dist-src/index.js", "../../../src/github/GitHubManager.ts", "../../../src/minecraft/CommandArgument.ts", "../../../src/minecraft/Command.ts", "../../../src/app/CommandRunner.ts", "../../../src/app/CreatorToolsAuthentication.ts", "../../../src/app/IMinecraft.ts", "../../../src/minecraft/GameStateManager.ts", "../../../src/app/RemoteMinecraft.ts", "../../../src/clientapp/ProcessHostedProxyMinecraft.ts", "../../../src/clientapp/MinecraftGameProxyMinecraft.ts", "../../../src/app/Package.ts", "../../../src/app/DeploymentStorageMinecraft.ts", "../../../src/electronclient/ElectronFile.ts", "../../../src/electronclient/ElectronFolder.ts", "../../../src/electronclient/ElectronStorage.ts", "../../../src/app/DeploymentTarget.ts", "../../../src/app/CreatorTools.ts", "../../../node_modules/localforage/dist/localforage.js", "../../../src/storage/BrowserFile.ts", "../../../src/storage/BrowserFolder.ts", "../../../src/storage/BrowserStorage.ts", "../../../src/app/CreatorToolsCommands.ts", "../../../src/app/CreatorToolsHost.ts", "../../../src/storage/IFolder.ts", "../../../src/local/NodeFile.ts", "../../../src/local/NodeFolder.ts", "../../../src/local/NodeStorage.ts", "../../../node_modules/@rauschma/stringio/ts/src/index.ts", "../../../src/minecraft/Player.ts", "../../../src/local/ModuleConfig.ts", "../../../src/local/ServerConfigManager.ts", "../../../src/local/ServerMessage.ts", "../../../src/minecraft/ServerPropertiesManager.ts", "../../../node_modules/uuid/dist/esm-node/rng.js", "../../../node_modules/uuid/dist/esm-node/stringify.js", "../../../node_modules/uuid/dist/esm-node/native.js", "../../../node_modules/uuid/dist/esm-node/v4.js", "../../../node_modules/uuid/dist/esm-node/index.js", "../../../src/core/ILocalUtilities.ts", "../../../node_modules/pngjs/lib/chunkstream.js", "../../../node_modules/pngjs/lib/interlace.js", "../../../node_modules/pngjs/lib/paeth-predictor.js", "../../../node_modules/pngjs/lib/filter-parse.js", "../../../node_modules/pngjs/lib/filter-parse-async.js", "../../../node_modules/pngjs/lib/constants.js", "../../../node_modules/pngjs/lib/crc.js", "../../../node_modules/pngjs/lib/parser.js", "../../../node_modules/pngjs/lib/bitmapper.js", "../../../node_modules/pngjs/lib/format-normaliser.js", "../../../node_modules/pngjs/lib/parser-async.js", "../../../node_modules/pngjs/lib/bitpacker.js", "../../../node_modules/pngjs/lib/filter-pack.js", "../../../node_modules/pngjs/lib/packer.js", "../../../node_modules/pngjs/lib/packer-async.js", "../../../node_modules/pngjs/lib/sync-inflate.js", "../../../node_modules/pngjs/lib/sync-reader.js", "../../../node_modules/pngjs/lib/filter-parse-sync.js", "../../../node_modules/pngjs/lib/parser-sync.js", "../../../node_modules/pngjs/lib/packer-sync.js", "../../../node_modules/pngjs/lib/png-sync.js", "../../../node_modules/pngjs/lib/png.js", "../../../src/local/ImageCodecNode.ts", "../../../src/local/LocalUtilities.ts", "../../../src/storage/Thumbprint.ts", "../../../src/debugger/DebugMessageStreamParser.ts", "../../../src/debugger/IMinecraftDebugProtocol.ts", "../../../src/debugger/MinecraftDebugClient.ts", "../../../src/local/IWorldBackupData.ts", "../../../src/local/DedicatedServer.ts", "../../../node_modules/ws/lib/constants.js", "../../../node_modules/ws/lib/buffer-util.js", "../../../node_modules/ws/lib/limiter.js", "../../../node_modules/ws/lib/permessage-deflate.js", "../../../node_modules/ws/lib/validation.js", "../../../node_modules/ws/lib/receiver.js", "../../../node_modules/ws/lib/sender.js", "../../../node_modules/ws/lib/event-target.js", "../../../node_modules/ws/lib/extension.js", "../../../node_modules/ws/lib/websocket.js", "../../../node_modules/ws/lib/stream.js", "../../../node_modules/ws/lib/subprotocol.js", "../../../node_modules/ws/lib/websocket-server.js", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/codegen/code.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/codegen/scope.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/codegen/index.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/util.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/names.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/errors.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/validate/boolSchema.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/rules.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/validate/applicability.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/validate/dataType.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/validate/defaults.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/code.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/validate/keyword.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/validate/subschema.ts", "../../../node_modules/fast-deep-equal/index.js", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse/index.js", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/resolve.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/validate/index.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/runtime/validation_error.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/ref_error.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/compile/index.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/dist/refs/data.json", "../../../node_modules/fast-uri/lib/utils.js", "../../../node_modules/fast-uri/lib/schemes.js", "../../../node_modules/fast-uri/index.js", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/runtime/uri.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/core.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/core/id.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/core/ref.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/core/index.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/runtime/ucs2length.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/validation/limitLength.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/validation/pattern.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/validation/required.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/validation/limitItems.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/runtime/equal.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/validation/const.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/validation/enum.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/validation/index.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/items.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/items2020.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/contains.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/properties.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/not.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/allOf.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/if.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/applicator/index.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/format/format.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/format/index.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/metadata.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/draft7.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/discriminator/types.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/vocabularies/discriminator/index.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/dist/refs/json-schema-draft-07.json", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv/lib/ajv.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv-formats/src/formats.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv-formats/src/limit.ts", "../../../node_modules/@modelcontextprotocol/sdk/node_modules/ajv-formats/src/index.ts", "../../../src/app/toolcommands/commands/ServerCommand.ts", "../../../src/electron/main.ts", "../../../src/electron/WindowCommandHandler.ts", "../../../src/electron/DedicatedServerCommandHandler.ts", "../../../src/local/ServerManager.ts", "../../../src/local/ContentLogWatcher.ts", "../../../src/local/MinecraftLogItem.ts", "../../../src/local/HttpServer.ts", "../../../node_modules/ws/wrapper.mjs", "../../../node_modules/zod/v4/core/core.js", "../../../node_modules/zod/v4/core/util.js", "../../../node_modules/zod/v4/core/errors.js", "../../../node_modules/zod/v4/core/parse.js", "../../../node_modules/zod/v4/core/regexes.js", "../../../node_modules/zod/v4/core/checks.js", "../../../node_modules/zod/v4/core/doc.js", "../../../node_modules/zod/v4/core/versions.js", "../../../node_modules/zod/v4/core/schemas.js", "../../../node_modules/zod/v4/locales/en.js", "../../../node_modules/zod/v4/core/registries.js", "../../../node_modules/zod/v4/core/api.js", "../../../node_modules/zod/v4/core/to-json-schema.js", "../../../node_modules/zod/v4/mini/schemas.js", "../../../node_modules/@modelcontextprotocol/sdk/src/server/zod-compat.ts", "../../../node_modules/zod/v4/classic/iso.js", "../../../node_modules/zod/v4/classic/errors.js", "../../../node_modules/zod/v4/classic/parse.js", "../../../node_modules/zod/v4/classic/schemas.js", "../../../node_modules/zod/v4/classic/external.js", "../../../node_modules/@modelcontextprotocol/sdk/src/types.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/interfaces.ts", "../../../node_modules/zod-to-json-schema/dist/esm/Options.js", "../../../node_modules/zod-to-json-schema/dist/esm/Refs.js", "../../../node_modules/zod-to-json-schema/dist/esm/errorMessages.js", "../../../node_modules/zod-to-json-schema/dist/esm/getRelativePath.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/any.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/array.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/branded.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/catch.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/date.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/default.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/effects.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/enum.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/literal.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/string.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/record.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/map.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/never.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/null.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/union.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/number.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/object.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/optional.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/promise.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/set.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js", "../../../node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js", "../../../node_modules/zod-to-json-schema/dist/esm/selectParser.js", "../../../node_modules/zod-to-json-schema/dist/esm/parseDef.js", "../../../node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js", "../../../node_modules/@modelcontextprotocol/sdk/src/server/zod-json-schema-compat.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/shared/protocol.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/validation/ajv-provider.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/server.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/helpers.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/server/index.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/server/completable.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/shared/uriTemplate.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/shared/toolNameValidation.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/mcp-server.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/server/mcp.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/server/stdio.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/shared/stdio.ts", "../../../src/local/MinecraftMcpServer.ts", "../../../node_modules/@hono/node-server/dist/index.mjs", "../../../node_modules/@modelcontextprotocol/sdk/src/server/webStandardStreamableHttp.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/server/streamableHttp.ts", "../../../src/local/HttpUtilities.ts", "../../../src/dataform/DataFormZod.ts", "../../../src/cli/ClUtils.ts", "../../../src/local/LocalEnvironment.ts", "../../../src/cli/core/CommandContextFactory.ts", "../../../src/cli/core/ICommandContext.ts", "../../../src/cli/core/WorkerPool.ts", "../../../src/cli/core/Logger.ts", "../../../src/minecraft/StructureUtilities.ts", "../../../src/minecraft/ContentMetaSchemaZod.ts", "../../../src/minecraft/ContentSchemaInferrer.ts", "../../../src/minecraft/TraitDetector.ts", "../../../src/local/PlaywrightPageRenderer.ts", "../../../src/local/ImageGenerationUtilities.ts", "../../../src/design/ModelDesignDefinition.ts", "../../../src/design/StructureDesignDefinition.ts", "../../../src/app/toolcommands/registerNodeCommands.ts", "../../../src/local/WorldBackupManager.ts", "../../../src/local/ManagedWorld.ts", "../../../src/local/WorldBackup.ts", "../../../src/local/MinecraftWebSocketServer.ts", "../../../src/electron/WebSocketCommandHandler.ts", "../../../src/electron/FileSystemCommandHandler.ts", "../../../src/electron/ContentSourceManager.ts", "../../../src/electron/LocalCommandHandler.ts", "../../../src/electron/ElectronUtils.ts"],
  "sourcesContent": ["'use strict';\nconst fs = require('fs');\n\nlet isDocker;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nmodule.exports = () => {\n\tif (isDocker === undefined) {\n\t\tisDocker = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDocker;\n};\n", "'use strict';\nconst os = require('os');\nconst fs = require('fs');\nconst isDocker = require('is-docker');\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isDocker()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft') ?\n\t\t\t!isDocker() : false;\n\t} catch (_) {\n\t\treturn false;\n\t}\n};\n\nif (process.env.__IS_WSL_TEST__) {\n\tmodule.exports = isWsl;\n} else {\n\tmodule.exports = isWsl();\n}\n", "'use strict';\nmodule.exports = (object, propertyName, fn) => {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = fn();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n};\n", "const path = require('path');\nconst childProcess = require('child_process');\nconst {promises: fs, constants: fsConstants} = require('fs');\nconst isWsl = require('is-wsl');\nconst isDocker = require('is-docker');\nconst defineLazyProperty = require('define-lazy-prop');\n\n// Path to included `xdg-open`.\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\n/**\nGet the mount point for fixed drives in WSL.\n\n@inner\n@returns {string} The mount point.\n*/\nconst getWslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst configMountPoint = /(?<!#.*)root\\s*=\\s*(?<mountPoint>.*)/g.exec(configContent);\n\n\t\tif (!configMountPoint) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = configMountPoint.groups.mountPoint.trim();\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nconst pTryEach = async (array, mapper) => {\n\tlet latestError;\n\n\tfor (const item of array) {\n\t\ttry {\n\t\t\treturn await mapper(item); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tlatestError = error;\n\t\t}\n\t}\n\n\tthrow latestError;\n};\n\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options\n\t};\n\n\tif (Array.isArray(options.app)) {\n\t\treturn pTryEach(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app || {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn pTryEach(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments\n\t\t\t}\n\t\t}));\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || (isWsl && !isDocker())) {\n\t\tconst mountPoint = await getWslDrivesMountPoint();\n\n\t\tcommand = isWsl ?\n\t\t\t`${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe` :\n\t\t\t`${process.env.SYSTEMROOT}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell`;\n\n\t\tcliArguments.push(\n\t\t\t'-NoProfile',\n\t\t\t'-NonInteractive',\n\t\t\t'\u2013ExecutionPolicy',\n\t\t\t'Bypass',\n\t\t\t'-EncodedCommand'\n\t\t);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\tconst encodedArguments = ['Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\t// Double quote with double quotes to ensure the inner quotes are passed through.\n\t\t\t// Inner quotes are delimited for PowerShell interpretation with backticks.\n\t\t\tencodedArguments.push(`\"\\`\"${app}\\`\"\"`, '-ArgumentList');\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.unshift(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(`\"${options.target}\"`);\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(arg => `\"\\`\"${arg}\\`\"\"`);\n\t\t\tencodedArguments.push(appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = Buffer.from(encodedArguments.join(' '), 'utf16le').toString('base64');\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron ||\n\t\t\t\tplatform === 'android' || isBundled || !exeLocalXdgOpen;\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (options.allowNonzeroExitCode && exitCode > 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\treturn subprocess;\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget\n\t});\n};\n\nconst openApp = (name, options) => {\n\tif (typeof name !== 'string') {\n\t\tthrow new TypeError('Expected a `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options || {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments\n\t\t}\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nconst apps = {};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\tlinux: ['google-chrome', 'google-chrome-stable']\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe']\n\t}\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: 'C:\\\\Program Files\\\\Mozilla Firefox\\\\firefox.exe',\n\tlinux: 'firefox'\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe'\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: 'microsoft-edge'\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'\n}));\n\nopen.apps = apps;\nopen.openApp = openApp;\n\nmodule.exports = open;\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n  return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n  // camel-case\n  var prop = key\n    .substring(6)\n    .toLowerCase()\n    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n  // coerce string value into JS value\n  var val = process.env[key];\n  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n  else if (val === 'null') val = null;\n  else val = Number(val);\n\n  obj[prop] = val;\n  return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n *   $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n  util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n             2 === fd ? process.stderr :\n             createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n  return 'colors' in exports.inspectOpts\n    ? Boolean(exports.inspectOpts.colors)\n    : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts)\n    .split('\\n').map(function(str) {\n      return str.trim()\n    }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var name = this.namespace;\n  var useColors = this.useColors;\n\n  if (useColors) {\n    var c = this.color;\n    var prefix = '  \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n    args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n    args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n  } else {\n    args[0] = new Date().toUTCString()\n      + ' ' + name + ' ' + args[0];\n  }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n  return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  if (null == namespaces) {\n    // If you set a process.env field to null or undefined, it gets cast to the\n    // string 'null' or 'undefined'. Just delete instead.\n    delete process.env.DEBUG;\n  } else {\n    process.env.DEBUG = namespaces;\n  }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n  var stream;\n  var tty_wrap = process.binding('tty_wrap');\n\n  // Note stream._type is used for test-module-load-list.js\n\n  switch (tty_wrap.guessHandleType(fd)) {\n    case 'TTY':\n      stream = new tty.WriteStream(fd);\n      stream._type = 'tty';\n\n      // Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    case 'FILE':\n      var fs = require('fs');\n      stream = new fs.SyncWriteStream(fd, { autoClose: false });\n      stream._type = 'fs';\n      break;\n\n    case 'PIPE':\n    case 'TCP':\n      var net = require('net');\n      stream = new net.Socket({\n        fd: fd,\n        readable: false,\n        writable: true\n      });\n\n      // FIXME Should probably have an option in net.Socket to create a\n      // stream from an existing fd which is writable only. But for now\n      // we'll just add this hack and set the `readable` member to false.\n      // Test: ./node test/fixtures/echo.js < /etc/passwd\n      stream.readable = false;\n      stream.read = null;\n      stream._type = 'pipe';\n\n      // FIXME Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    default:\n      // Probably an error on in uv_guess_handle()\n      throw new Error('Implement me. Unknown stream file type!');\n  }\n\n  // For supporting legacy API we put the FD here.\n  stream.fd = fd;\n\n  stream._isStdio = true;\n\n  return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n  debug.inspectOpts = {};\n\n  var keys = Object.keys(exports.inspectOpts);\n  for (var i = 0; i < keys.length; i++) {\n    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n  }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n  module.exports = require('./browser.js');\n} else {\n  module.exports = require('./node.js');\n}\n", "var path = require('path');\nvar spawn = require('child_process').spawn;\nvar debug = require('debug')('electron-squirrel-startup');\nvar app = require('electron').app;\n\nvar run = function(args, done) {\n  var updateExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe');\n  debug('Spawning `%s` with args `%s`', updateExe, args);\n  spawn(updateExe, args, {\n    detached: true\n  }).on('close', done);\n};\n\nvar check = function() {\n  if (process.platform === 'win32') {\n    var cmd = process.argv[1];\n    debug('processing squirrel command `%s`', cmd);\n    var target = path.basename(process.execPath);\n\n    if (cmd === '--squirrel-install' || cmd === '--squirrel-updated') {\n      run(['--createShortcut=' + target + ''], app.quit);\n      return true;\n    }\n    if (cmd === '--squirrel-uninstall') {\n      run(['--removeShortcut=' + target + ''], app.quit);\n      return true;\n    }\n    if (cmd === '--squirrel-obsolete') {\n      app.quit();\n      return true;\n    }\n  }\n  return false;\n};\n\nmodule.exports = check();\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { IWorldSettings } from \"../minecraft/IWorldSettings\";\r\nimport { DeploymentTargetType } from \"./DeploymentTarget\";\r\nimport ICustomTool from \"./ICustomTool\";\r\n\r\nexport enum CreatorToolsEditorViewMode {\r\n  itemsOnLeft = 0,\r\n  itemsOnRight = 1,\r\n  itemsOnLeftAndMinecraftToolbox = 2,\r\n  itemsOnRightAndMinecraftToolbox = 3,\r\n  toolboxFocus = 4,\r\n  mainFocus = 5,\r\n  itemsFocus = 6,\r\n  codeLanding = 7,\r\n}\r\n\r\nexport enum CreatorToolsEditPreference {\r\n  summarized = 0,\r\n  editors = 1,\r\n  raw = 2,\r\n}\r\n\r\nexport enum MinecraftTrack {\r\n  main = 0,\r\n  preview = 1,\r\n  edu = 2,\r\n  eduPreview = 3,\r\n}\r\n\r\nexport enum MinecraftFlavor {\r\n  none = 0,\r\n  remote = 1,\r\n  processHostedProxy = 2,\r\n  minecraftGameProxy = 3,\r\n  deploymentStorage = 4,\r\n}\r\n\r\n// see DedicatedServerCommandHandler to ensure these stay in sync\r\nexport enum DedicatedServerMode {\r\n  auto = 0,\r\n  source = 1,\r\n  direct = 2,\r\n}\r\n\r\nexport enum MinecraftGameConnectionMode {\r\n  localMinecraft = 0,\r\n  localMinecraftPreview = 1,\r\n  remoteMinecraft = 2,\r\n}\r\n\r\nexport enum WindowState {\r\n  regular = 0,\r\n  minimized = 1,\r\n  maximized = 2,\r\n  docked = 3,\r\n}\r\n\r\nexport enum ThemePreference {\r\n  deviceDefault = 0,\r\n  dark = 1,\r\n  light = 2,\r\n}\r\n\r\nexport default interface ICreatorToolsData {\r\n  successfullyConnectedWebSocketToMinecraft: boolean;\r\n  successfullyConnectedToRemoteMinecraft: boolean;\r\n  successfullyStartedMinecraftServer: boolean;\r\n  worldSettings?: IWorldSettings;\r\n  editPreference?: CreatorToolsEditPreference;\r\n  disableFirstRun?: boolean;\r\n  editorWorldSettings?: IWorldSettings;\r\n  autoStartMinecraft: boolean;\r\n  showScreenOnConnect: boolean;\r\n  useEditor?: boolean;\r\n  creator?: string;\r\n  track?: MinecraftTrack;\r\n  formatBeforeSave?: boolean;\r\n  showLivePreview?: boolean;\r\n  itemSidePaneWidth?: number;\r\n  livePreviewWidth?: number;\r\n  toolPaneWidth?: number;\r\n  preferredTextSize?: number;\r\n  preferredSuite?: number;\r\n  defaultDeploymentTarget?: DeploymentTargetType;\r\n  editorViewMode?: CreatorToolsEditorViewMode;\r\n  defaultFunction?: string;\r\n  customTools: ICustomTool[];\r\n  conversionJarPath?: string;\r\n  iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula?: boolean;\r\n  autoStartDedicatedServer?: boolean;\r\n  dedicatedServerMode?: DedicatedServerMode;\r\n  dedicatedServerPath?: string;\r\n  dedicatedServerSlotCount?: number;\r\n  lastActiveMinecraftFlavor?: MinecraftFlavor;\r\n  webSocketMode?: MinecraftGameConnectionMode;\r\n  remoteServerUrl?: string;\r\n  remoteServerPort?: number;\r\n  remoteServerPasscode?: string;\r\n  remoteServerAccessLevel?: RemoteServerAccessLevel;\r\n  windowX?: number;\r\n  windowY?: number;\r\n  collapsedTypes?: number[];\r\n  showMruPane?: boolean;\r\n  mruItemPaths?: string[];\r\n  viewAsFiles?: boolean;\r\n  windowHeight?: number;\r\n  windowWidth?: number;\r\n  windowSlot?: number;\r\n  windowState?: WindowState;\r\n  themePreference?: ThemePreference;\r\n}\r\n\r\nexport enum RemoteServerAccessLevel {\r\n  none = 0,\r\n  displayReadOnly = 1,\r\n  fullReadOnly = 2,\r\n  updateState = 3,\r\n  admin = 4,\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IStorage from \"./IStorage\";\r\nimport IStorageObject from \"./IStorageObject\";\r\nimport IVersionContent from \"./IVersionContent\";\r\nimport { EncodingType } from \"./StorageUtilities\";\r\nimport { IEvent } from \"ste-events\";\r\n\r\nexport enum FileUpdateType {\r\n  regularEdit = 0,\r\n  versionlessEdit = 1,\r\n  externalChange = 2,\r\n  versionRestoration = 3, // we're shifting to a different version (backwards or forwards); do not modify the prior version list\r\n  versionRestorationRetainCurrent = 4, // we're restoring to a prior version, but add the current content to the prior version list\r\n}\r\n\r\nexport default interface IFile extends IStorageObject {\r\n  modified: Date | null;\r\n  modifiedAtLoad: Date | null;\r\n  latestModified: Date | null;\r\n  content: string | Uint8Array | null;\r\n  lastLoadedOrSaved: Date | null;\r\n  isContentLoaded: boolean;\r\n  needsSave: boolean;\r\n  fileContainerStorage: IStorage | null;\r\n  extendedPath: string;\r\n  readonly coreContentLength: number;\r\n  readonly type: string;\r\n  onFileContentUpdated: IEvent<IFile, IFile>;\r\n  priorVersions: IVersionContent[];\r\n  isInErrorState?: boolean;\r\n  errorStateMessage?: string;\r\n\r\n  /**\r\n   * Cache for comment-json parsed object.\r\n   * When set, this contains the parsed JSON with comment metadata preserved as Symbol properties.\r\n   * Use JsonUtilities to work with this cache to ensure comments are preserved through edits.\r\n   */\r\n  commentJsonCache?: unknown;\r\n\r\n  isBinary: boolean;\r\n  isString: boolean;\r\n  canIgnore: boolean;\r\n\r\n  parentFolder: IFolder;\r\n\r\n  dispose(): void;\r\n  unload(): void;\r\n\r\n  scanForChanges(): Promise<void>;\r\n\r\n  getHash(): Promise<string | undefined>;\r\n  getRelativePathFor(file: IFile): string | undefined;\r\n  deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean>;\r\n  moveTo(newStorageRelativePath: string): Promise<boolean>;\r\n  exists(): Promise<boolean>;\r\n  getRootRelativePath(): string | undefined;\r\n  getFolderRelativePath(toFolder: IFolder): string | undefined;\r\n  loadContent(force?: boolean, forceEncoding?: EncodingType): Promise<Date>;\r\n  setObjectContentIfSemanticallyDifferent(\r\n    value: object | null | undefined,\r\n    updateType?: FileUpdateType,\r\n    sourceId?: string\r\n  ): boolean;\r\n  setContentIfSemanticallyDifferent(\r\n    content: string | Uint8Array,\r\n    updateType?: FileUpdateType,\r\n    sourceId?: string\r\n  ): boolean;\r\n  setContent(content: string | Uint8Array, updateType?: FileUpdateType, sourceId?: string): boolean;\r\n  saveContent(force?: boolean): Promise<Date>;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IProjectItemData from \"./IProjectItemData\";\r\nimport IGitHubInfo from \"./IGitHubInfo\";\r\nimport ITool from \"./ITool\";\r\nimport { IWorldSettings } from \"../minecraft/IWorldSettings\";\r\nimport IStatus from \"./Status\";\r\nimport { MinecraftTrack } from \"./ICreatorToolsData\";\r\nimport IProjectVariant from \"./IProjectVariant\";\r\n\r\nexport enum ProjectDataType {\r\n  localStorage = 0,\r\n  clientStorage = 1,\r\n}\r\n\r\nexport enum ProjectFocus {\r\n  general = 0,\r\n  gameTests = 1,\r\n  world = 2,\r\n  focusedCodeSnippet = 3,\r\n  editorExtension = 4,\r\n}\r\n\r\nexport enum ProjectScriptLanguage {\r\n  javaScript = 0,\r\n  typeScript = 1,\r\n}\r\n\r\nexport enum ProjectScriptVersion {\r\n  latestStable = 0,\r\n  stable10 = 1,\r\n  latestBeta = 999,\r\n}\r\n\r\nexport enum ProjectEditPreference {\r\n  default = 0,\r\n  summarized = 1,\r\n  editors = 2,\r\n  raw = 3,\r\n}\r\n\r\nexport enum ProjectRole {\r\n  general = 0,\r\n  documentation = 1,\r\n  meta = 2,\r\n  explorer = 3,\r\n}\r\n\r\nexport default interface IProjectData {\r\n  dataType: ProjectDataType;\r\n  storageBasePath: string;\r\n  name: string;\r\n  title: string;\r\n  shortName?: string;\r\n  creator?: string;\r\n  defaultNamespace?: string;\r\n  scriptEntryPoint?: string;\r\n  description: string;\r\n  focus: ProjectFocus;\r\n  role?: ProjectRole;\r\n  projectFolderTitle?: string;\r\n  variants: { [variant: string]: IProjectVariant };\r\n\r\n  track?: MinecraftTrack;\r\n\r\n  editPreference: ProjectEditPreference;\r\n\r\n  gitHubReferences?: IGitHubInfo[];\r\n\r\n  collapsedStoragePaths?: string[];\r\n\r\n  preferredTools?: ITool[];\r\n\r\n  preferredScriptLanguage?: ProjectScriptLanguage;\r\n  scriptVersion?: ProjectScriptVersion;\r\n\r\n  versionMajor?: number;\r\n  versionMinor?: number;\r\n  versionPatch?: number;\r\n  usesCustomWorldSettings?: boolean;\r\n  worldSettings?: IWorldSettings;\r\n  editorWorldSettings?: IWorldSettings;\r\n  autoDeploymentMode?: number;\r\n\r\n  lastMapDeployedDate?: Date;\r\n  lastMapDeployedHash?: string;\r\n  deployWorldId?: string;\r\n\r\n  showHiddenItems?: boolean;\r\n  showFunctions?: boolean;\r\n  showAssets?: boolean;\r\n  showTypes?: boolean;\r\n  showDevFiles?: boolean;\r\n\r\n  gitHubRepoName?: string;\r\n  gitHubOwner?: string;\r\n  gitHubFolder?: string;\r\n  gitHubBranch?: string;\r\n\r\n  originalGalleryId?: string;\r\n  originalSampleId?: string;\r\n  originalFullPath?: string;\r\n  originalFileList?: string[];\r\n  originalGitHubRepoName?: string;\r\n  originalGitHubOwner?: string;\r\n  originalGitHubBranch?: string;\r\n  originalGitHubFolder?: string;\r\n\r\n  defaultBehaviorPackUniqueId: string;\r\n  defaultBehaviorPackVersion?: number[];\r\n  defaultResourcePackUniqueId: string;\r\n  defaultResourcePackVersion?: number[];\r\n  defaultDataUniqueId: string;\r\n  defaultScriptModuleUniqueId: string;\r\n  contentsModified: Date | null;\r\n  created?: Date | null;\r\n  lastOpened?: Date | null;\r\n\r\n  localFolderPath?: string;\r\n  mainDeployFolderPath?: string;\r\n  localFilePath?: string;\r\n  dataStorageRelativePath: string;\r\n  messages?: IStatus[];\r\n\r\n  /**\r\n   * Base64-encoded PNG image for project preview thumbnail.\r\n   * Used in the project list to show a visual preview of the project.\r\n   * If not set, a default placeholder image will be shown.\r\n   */\r\n  previewImageBase64?: string;\r\n\r\n  chatSession?: any;\r\n\r\n  items: IProjectItemData[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IGitHubInfo from \"./IGitHubInfo\";\r\nimport IProjectItemVariant from \"./IProjectItemVariant\";\r\n\r\nexport const MaxItemTypes = 166;\r\n\r\nexport enum ProjectItemCategory {\r\n  assets,\r\n  logic,\r\n  types,\r\n  build,\r\n  documentation,\r\n  meta,\r\n  package,\r\n  unknown,\r\n  mctools,\r\n}\r\n\r\n// these integer numbers are used in the project data file formats, so do not change them. See ProjectItemUtilities/Sort Order for a more logical sort order.\r\nexport enum ProjectItemType {\r\n  unknown = 0,\r\n  testJs = 1,\r\n  js = 2,\r\n  catalogIndexJs = 3,\r\n  structure = 4,\r\n  behaviorPackManifestJson = 5,\r\n  unknownJson = 6,\r\n  MCWorld = 7,\r\n  MCTemplate = 8,\r\n  MCFunction = 9,\r\n  entityTypeBehavior = 10,\r\n  entityTypeBaseJs = 11, // <--- not in use, in favor of just general .js + generated\r\n  actionSet = 12,\r\n  ts = 13,\r\n  resourcePackManifestJson = 14,\r\n  worldTest = 15,\r\n  worldFolder = 16,\r\n  behaviorPackListJson = 17,\r\n  resourcePackListJson = 18,\r\n  animationBehaviorJson = 19,\r\n  animationControllerBehaviorJson = 20,\r\n  blockTypeBehavior = 21,\r\n  blockMaterialsBehaviorJson = 22,\r\n  itemTypeBehavior = 23,\r\n  lootTableBehavior = 24,\r\n  biomesClientCatalogResource = 25, // legacy mega catalog of biome resources (biomes_client)\r\n  blocksCatalogResourceJson = 26,\r\n  soundCatalog = 27,\r\n  animationResourceJson = 28,\r\n  animationControllerResourceJson = 29,\r\n  entityTypeResource = 30,\r\n  fogResourceJson = 31,\r\n  modelGeometryJson = 32,\r\n  particleJson = 33,\r\n  renderControllerJson = 34,\r\n  ninesliceJson = 35,\r\n  uiJson = 36,\r\n  languagesCatalogJson = 37,\r\n  biomeBehavior = 38,\r\n  dialogueBehaviorJson = 39,\r\n  featureRuleBehavior = 40,\r\n  featureBehavior = 41,\r\n  functionEventJson = 42,\r\n  recipeBehavior = 43,\r\n  spawnRuleBehavior = 44,\r\n  tradingBehaviorJson = 45,\r\n  volumeBehaviorJson = 46,\r\n  attachableResourceJson = 47,\r\n  itemTypeLegacyResource = 48, // note this is the 1.10 definition of item resources, more modern items use attachables?\r\n  materialsResourceJson = 49,\r\n  musicDefinitionJson = 50,\r\n  soundDefinitionCatalog = 51,\r\n  blockTypeResourceJsonDoNotUse = 52, // deprecated - Duplicate of blocksCatalogResourceJson\r\n  MCAddon = 53,\r\n  zip = 54,\r\n  MCPack = 55,\r\n  documentedTypeFolder = 56,\r\n  documentedCommandFolder = 57,\r\n  tsconfigJson = 58,\r\n  packageJson = 59,\r\n  packageLockJson = 60,\r\n  docInfoJson = 61,\r\n  scriptTypesJson = 62,\r\n  commandSetDefinitionJson = 63,\r\n  jsconfigJson = 64,\r\n  docfxJson = 65,\r\n  jsdocJson = 66,\r\n  skinPackManifestJson = 67,\r\n  worldTemplateManifestJson = 68,\r\n  buildProcessedJs = 69,\r\n  entityTypeBaseTs = 70, // <--- not in use, in favor of just general .ts + generated\r\n  blockTypeBaseJs = 71, // <--- not in use, in favor of just general .js + generated\r\n  blockTypeBaseTs = 72, // <--- not in use, in favor of just general .ts + generated\r\n  MCProject = 73,\r\n  image = 74,\r\n  vsCodeLaunchJson = 75,\r\n  vsCodeTasksJson = 76,\r\n  vsCodeSettingsJson = 77,\r\n  vsCodeExtensionsJson = 78,\r\n  lang = 79,\r\n  projectSummaryMetadata = 80,\r\n  tickJson = 81,\r\n  cameraBehaviorJson = 82,\r\n  material = 83,\r\n  materialSetJson = 84,\r\n  materialVertex = 85,\r\n  materialFragment = 86,\r\n  materialGeometry = 87, // NOTE: this is a /materials specific .geometry file, and not a .geo.json type file (which is modelGeometryJson)\r\n  lightingJson = 88,\r\n  textureSetJson = 89,\r\n  flipbookTexturesJson = 91,\r\n  itemTextureJson = 92,\r\n  terrainTextureCatalogResourceJson = 93,\r\n  globalVariablesJson = 94,\r\n  dataForm = 95,\r\n  dimensionJson = 96,\r\n  behaviorPackHistoryListJson = 97,\r\n  resourcePackHistoryListJson = 98,\r\n  texture = 99,\r\n  marketingAssetImage = 100,\r\n  storeAssetImage = 101,\r\n  uiTexture = 102,\r\n  packIconImage = 103,\r\n  textureListJson = 104,\r\n  fileListArrayJson = 105,\r\n  vanillaDataJson = 106,\r\n  engineOrderingJson = 107,\r\n  audio = 108,\r\n  behaviorPackFolder = 109,\r\n  resourcePackFolder = 110,\r\n  skinPackFolder = 111,\r\n  contentIndexJson = 112,\r\n  contentReportJson = 113,\r\n  levelDbLdb = 114,\r\n  levelDbLog = 115,\r\n  levelDbCurrent = 116,\r\n  levelDbManifest = 117,\r\n  levelDat = 118,\r\n  justConfigTs = 119,\r\n  esLintConfigMjs = 120,\r\n  env = 121,\r\n  prettierRcJson = 122,\r\n  skinCatalogJson = 123,\r\n  tagsMetadata = 124,\r\n  personaManifestJson = 125,\r\n  personaPackFolder = 126,\r\n  blockCulling = 127,\r\n  craftingItemCatalog = 128,\r\n  mcToolsProjectPreferences = 129,\r\n  educationJson = 130,\r\n  aimAssistPresetJson = 131,\r\n  colorGradingJson = 132,\r\n  atmosphericsJson = 133,\r\n  pbrJson = 134,\r\n  pointLightsJson = 135,\r\n  waterJson = 136,\r\n  shadowsJson = 137,\r\n  contentsJson = 138,\r\n  jigsawStructureSet = 139,\r\n  jigsawStructure = 140,\r\n  jigsawTemplatePool = 141,\r\n  jigsawProcessorList = 142,\r\n  aimAssistCategoryJson = 143,\r\n  behaviorTreeJson = 144,\r\n  spawnGroupJson = 145,\r\n  designPackManifestJson = 146,\r\n  designPackFolder = 147,\r\n  designTexture = 148,\r\n  personaJson = 149,\r\n  sdlLayout = 150,\r\n  lodJson = 151,\r\n  rendererJson = 152,\r\n  loadingMessagesJson = 153,\r\n  splashesJson = 154,\r\n  cameraResourceJson = 155,\r\n  fontMetadataJson = 156,\r\n  emoticonsJson = 157,\r\n  skinPackGeometryJson = 158,\r\n  skinPackTextureBackCompatJson = 159,\r\n  uniformsJson = 160,\r\n  biomeResource = 161, // new style per-biome JSON files\r\n  levelDatOld = 162,\r\n  jsMap = 163,\r\n  markdownDocumentation = 164,\r\n  voxelShapeBehavior = 165,\r\n}\r\n\r\nexport enum ProjectItemStorageType {\r\n  singleFile = 0,\r\n  folder = 1,\r\n}\r\n\r\nexport enum ProjectItemEditPreference {\r\n  projectDefault = 0,\r\n  forceEditor = 1,\r\n  forceRaw = 2,\r\n}\r\n\r\nexport enum ProjectItemErrorStatus {\r\n  none = 0,\r\n  unprocessable = 1,\r\n}\r\n\r\nexport enum ProjectItemCreationType {\r\n  normal = 0,\r\n  generated = 1,\r\n  build = 2,\r\n  dist = 3,\r\n}\r\n\r\nexport default interface IProjectItemData {\r\n  itemType: ProjectItemType;\r\n  projectPath: string | null | undefined;\r\n  storagePath?: string | null | undefined; // legacy name for projectPath, no longer used.\r\n  variants: { [label: string]: IProjectItemVariant };\r\n  tags: string[];\r\n  name: string;\r\n  source?: string;\r\n  isInWorld?: boolean;\r\n  storageType: ProjectItemStorageType | undefined;\r\n  gitHubReference?: IGitHubInfo;\r\n  creationType?: ProjectItemCreationType;\r\n  editPreference?: ProjectItemEditPreference;\r\n  errorMessage?: string;\r\n  errorStatus?: ProjectItemErrorStatus;\r\n  items?: IProjectItemData[];\r\n\r\n  /**\r\n   * Cached thumbnail as data URL (e.g., \"data:image/svg+xml;base64,...\" or \"data:image/png;base64,...\").\r\n   * Used for geometry models and other items that can have visual previews.\r\n   * Generated in background worker and displayed in ProjectItemList.\r\n   */\r\n  cachedThumbnail?: string;\r\n\r\n  /**\r\n   * Timestamp when the thumbnail was last generated.\r\n   * Used to invalidate cache when file content changes.\r\n   */\r\n  thumbnailGeneratedAt?: number;\r\n\r\n  /**\r\n   * Path to another project item whose thumbnail should be used for this item.\r\n   * For example, entity behavior/resource files link to their geometry model's thumbnail.\r\n   * This is set during relations processing based on item relationships.\r\n   */\r\n  thumbnailLink?: string;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ISimpleReference from \"./ISimpleReference\";\r\nimport ICondition from \"./ICondition\";\r\nimport IFormDefinition, { IFormSample } from \"./IFormDefinition\";\r\n\r\nexport enum FieldExperienceType {\r\n  text = \"text\",\r\n  dropdown = \"dropdown\",\r\n  slider = \"slider\",\r\n}\r\n\r\nexport enum FieldVisualExperience {\r\n  normal = \"normal\",\r\n  deemphasized = \"deemphasized\",\r\n}\r\n\r\nexport enum FieldDataType {\r\n  /**\r\n   * Represents a 32-bit integer value.\r\n   */\r\n  int = \"int\",\r\n  /**\r\n   * Represents a boolean value (true or false).\r\n   */\r\n  boolean = \"boolean\",\r\n  /**\r\n   * Represents a string value.\r\n   */\r\n  string = \"string\",\r\n  /**\r\n   * Represents a floating-point number.\r\n   */\r\n  float = \"float\",\r\n  /**\r\n   * Represents a string that can take on a limited set of values, often used for enumerations.\r\n   */\r\n  stringEnum = \"stringEnum\",\r\n  /**\r\n   * Represents an integer that can take on a limited set of values, often used for enumerations.\r\n   */\r\n  intEnum = \"intEnum\",\r\n  /**\r\n   * Represents a boolean value that can be represented as an integer (0 or 1).\r\n   * This is often used for compatibility with systems that expect boolean values as integers.\r\n   */\r\n  intBoolean = \"intBoolean\",\r\n  /**\r\n   * Represents a numeric value (integer or floating-point).\r\n   */\r\n  number = \"number\",\r\n  /**\r\n   * Represents a string-based value that is chosen from a typically data-driven set of options (a lookup).\r\n   */\r\n  stringLookup = \"stringLookup\",\r\n\r\n  /**\r\n   * Represents an integer-based value that is chosen from a typically data-driven set of options (a lookup).\r\n   */\r\n  intValueLookup = \"intValueLookup\",\r\n\r\n  /**\r\n   * Represents a long integer value, which is typically a 64-bit integer.\r\n   * This is used for larger numeric values that exceed the range of standard integers.\r\n   */\r\n  long = \"long\",\r\n\r\n  /**\r\n   * Represents a point in 3D space, with x, y, and z coordinates.\r\n   */\r\n  point3 = \"point3\",\r\n  /**\r\n   * Represents a point in 3D space, with integer x, y, and z coordinates.\r\n   */\r\n  intPoint3 = \"intPoint3\",\r\n  /**\r\n   * Represents a long-form string, which is typically used for very long text entries.\r\n   * This is often used in contexts where the string may exceed standard length limits.\r\n   */\r\n  longFormString = \"longFormString\",\r\n  /**\r\n   * Represents a collection of objects where each object is identified by a unique string key.\r\n   * For example, { \"foo\": {x: 1, z: 3}, \"bar\": {x:10, y: 4} }\r\n   */\r\n  keyedObjectCollection = \"keyedObjectCollection\",\r\n  /**\r\n   * Represents an array of objects, where each object can have multiple properties.\r\n   * For example, [ { x: 1, id: \"alpha\", z: 3}, { x: 1, id: \"bravo\", z: 3} ]\r\n   */\r\n  objectArray = \"objectArray\",\r\n  /**\r\n   * Represents a generic object that can have any structure.\r\n   */\r\n  object = \"object\",\r\n  /**\r\n   * Represents an array of strings, which is often used for lists of text values.\r\n   */\r\n  stringArray = \"stringArray\",\r\n  /**\r\n   * Represents a range of integers. This can either be represented as a pair of integers on an object with min and max properties, or as a two element array, or as a single integer if the range is collapsed.\r\n   * For example, { \"min\": 0, \"max\": 100 } or [0, 100] or 50.\r\n   */\r\n  intRange = \"intRange\",\r\n  /**\r\n   * Represents a range of floating-point numbers. This can either be represented as a pair of floats on an object with min and max properties, or as a two element array, or as a single float if the range is collapsed.\r\n   * For example, { \"min\": 0.4, \"max\": 99.6 } or [0.4, 99.6] or 48.8.\r\n   */\r\n  floatRange = \"floatRange\",\r\n  /**\r\n   * Represents a filter that is specific to Minecraft, which can be used to filter entities or blocks based on certain criteria.\r\n   * This is fundamentally an object, e.g.,\r\n   * \"filters\": {\r\n   *   \"test\": \"in_lava\", \"subject\": \"self\"\r\n   *  }\r\n   */\r\n  minecraftFilter = \"minecraftFilter\",\r\n  /**\r\n   * Represents a range of floating-point numbers that represent a percentage chance, and the numbers should range between 0.0 and 1.0. This can either be represented as a pair of floats on an object with min and max properties, or as a two element array, or as a single float if the range is collapsed.\r\n   * For example, { \"min\": 0.04, \"max\": 0.996 } or [0.04, 0.996] or 0.488.\r\n   */\r\n  percentRange = \"percentRange\",\r\n\r\n  /**\r\n   * Represents a single Minecraft event trigger, which can be used to specify the identifier and context for an action that should fire.\r\n   */\r\n  minecraftEventTrigger = \"minecraftEventTrigger\",\r\n  /**\r\n   * Represents an array of long-form string that can contain multiple lines of text, often used for detailed descriptions or notes.\r\n   */\r\n  longFormStringArray = \"longFormStringArray\",\r\n  /**\r\n   * Represents a collection of key-value pairs where each key is a string and the value is also a string.\r\n   * For example, { \"foo\": \"blah\", \"barg\" : \"borg\" }\r\n   */\r\n  keyedStringCollection = \"keyedStringCollection\",\r\n  /**\r\n   * Represents a version, which can either be a semantic version string (e.g., \"1.2.3\") or a simple version number or an array of three numbers, for major, minor, and patch version.\r\n   */\r\n  version = \"version\",\r\n  /**\r\n   * Represents a universally unique identifier (UUID), which is a 128-bit number used to uniquely identify information in computer systems.\r\n   * This is typically represented as a string in the format \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\".\r\n   */\r\n  uuid = \"uuid\",\r\n  /**\r\n   * Represents a collection of key-value pairs where each key is a string and the value is a boolean.\r\n   * For example, { \"foo\": true, \"blah\": false }\r\n   */\r\n  keyedBooleanCollection = \"keyedBooleanCollection\",\r\n  /**\r\n   * Represents a collection of key-value pairs where each key is a string and the value is an array of strings.\r\n   * For example, { \"foo\": [\"blah\", \"alpha\"], \"barg\" : [\"borg\"] }\r\n   */\r\n  keyedStringArrayCollection = \"keyedStringArrayCollection\",\r\n  /**\r\n   * Represents an array of keyed string collections, where each element is a collection of key-value pairs.\r\n   * For example, [ { \"blah\": \"alpha\", \"blaz\": \"blay\" }, {\"barg\": \"borg\"} ]\r\n   */\r\n  arrayOfKeyedStringCollection = \"arrayOfKeyedStringCollection\",\r\n  /**\r\n   * Represents a collection of key-value pairs where each key is a string and the value is by itself a keyed string collection of an array of strings.\r\n   * For example, { \"alpha\":  { \"foo\": [\"blah\", \"alpha\"], \"barg\" : [\"borg\"] } }\r\n   */\r\n  keyedKeyedStringArrayCollection = \"keyedKeyedStringArrayCollection\",\r\n  /**\r\n   * Represents a collection of key-value pairs where each key is a string and the value is a number.\r\n   * For example, { \"foo\": 17, \"blah\": 43 }\r\n   */\r\n  keyedNumberCollection = \"keyedNumberCollection\",\r\n  /**\r\n   * Represents an array of numbers.\r\n   */\r\n  numberArray = \"numberArray\",\r\n  /**\r\n   * Represents a checkbox list that is represented as an array of strings.\r\n   */\r\n  checkboxListAsStringArray = \"checkboxListAsStringArray\",\r\n  /**\r\n   * Represents a Molang expression in string form, which is a Minecraft-specific language used for data-driven content.\r\n   */\r\n  molang = \"molang\",\r\n  /**\r\n   * Represents an array of Molang expressions (an array of strings), which can be used to define multiple data-driven behaviors or properties in Minecraft.\r\n   */\r\n  molangArray = \"molangArray\",\r\n  /**\r\n   * Represents a point in 2D space, with x and y coordinates.\r\n   * This is often used for 2D graphical representations or spatial calculations.\r\n   */\r\n  point2 = \"point2\",\r\n  /**\r\n   * Represents a localizable string, which is a string that is a token that is a refence to a localized string in a resource file. Or it can be a string literal (unlocalized)\r\n   */\r\n  localizableString = \"localizableString\",\r\n  /**\r\n   * Represents a keyed collection of numbers, where each key is a string and the value is an array of numbers.\r\n   * For example, { \"foo\": [255, 0.0, 2555], \"barg\" : [128, 0, 0] }\r\n   */\r\n  keyedNumberArrayCollection = \"keyedNumberArrayCollection\",\r\n  /**\r\n   * Represents a reference to a Minecraft event, which can be used to specify the identifier and context for an action that should fire.\r\n   */\r\n  minecraftEventReference = \"minecraftEventReference\",\r\n  /**\r\n   * Represents a location in 3D space, with x, y, and z coordinates but that is intended to be a location in a Minecraft world.\r\n   */\r\n  location = \"location\",\r\n  /**\r\n   * Represents a location in 3D space, with x, y, and z coordinates but that is intended to be a location offset adjustment in a Minecraft world.\r\n   */\r\n  locationOffset = \"locationOffset\",\r\n  /**\r\n   * Represents an array of Minecraft event triggers, which can be used to specify multiple identifiers and contexts for actions that should fire.\r\n   */\r\n  minecraftEventTriggerArray = \"minecraftEventTriggerArray\",\r\n  /**\r\n   * Represents a two dimensional string array, i.e.., string[][], e.g., [ [\"a\", \"b\"], [\"c\", \"d\"] ]\r\n   */\r\n  twoDStringArray = \"twoDStringArray\",\r\n  /**\r\n   * Represents an array where each item can be either a string or an object.\r\n   * This is commonly used for animation references like [\"animation.walk\", { \"animation.jump\": \"query.is_jumping\" }]\r\n   * Each item in the array can be a simple string reference OR an object with conditional properties.\r\n   */\r\n  stringOrObjectArray = \"stringOrObjectArray\",\r\n  /**\r\n   * Represents an array of tuples where each tuple is [string, number].\r\n   * This is used for weighted lists like generate_for_climates: [[\"medium\", 1], [\"cold\", 2]]\r\n   */\r\n  stringNumberTupleArray = \"stringNumberTupleArray\",\r\n  /**\r\n   * Represents a single item that can be either a string or an object (not an array).\r\n   * Used when a field accepts \"animation_name\" OR { \"animation_name\": \"condition\" }\r\n   */\r\n  stringOrObject = \"stringOrObject\",\r\n  /**\r\n   * Represents a two dimensional array where each inner array contains Molang values (string OR number).\r\n   * This is used for gradient colors like: [[1.0, 0.5, 0.5, 1.0], [\"variable.color\", 0.5, 0.5, 1.0]]\r\n   * Schema: Array<Array<string | number>>\r\n   */\r\n  twoDMolangArray = \"twoDMolangArray\",\r\n}\r\n\r\n/**\r\n * Describes the way field values should be converted to a more human-readable format.\r\n */\r\nexport enum FieldValueHumanify {\r\n  none = \"none\",\r\n  general = \"general\",\r\n  minecraft = \"minecraft\",\r\n}\r\n\r\n/**\r\n * Describes the type of message for validator topic fields.\r\n * This aligns with InfoItemType but is simplified for form field definitions.\r\n */\r\nexport enum FieldMessageType {\r\n  /**\r\n   * Informational message - neutral status or aggregated data.\r\n   */\r\n  info = \"info\",\r\n  /**\r\n   * Warning message - potential issue that should be reviewed.\r\n   */\r\n  warning = \"warning\",\r\n  /**\r\n   * Error message - a definite problem that should be fixed.\r\n   */\r\n  error = \"error\",\r\n  /**\r\n   * Recommendation message - a suggestion for improvement.\r\n   */\r\n  recommendation = \"recommendation\",\r\n}\r\n\r\nexport default interface IField {\r\n  /**\r\n   * Unique identifier for the field.\r\n   */\r\n  id: string;\r\n  /**\r\n   * Optional alternate identifier for the field.\r\n   */\r\n  altId?: string;\r\n  /*\r\n   * Optional group identifier for the field.\r\n   */\r\n  groupId?: string;\r\n  /**\r\n   * Optional human-readable title for the field.\r\n   * If the title is functionally equivalent to its Id, the title can be omitted.\r\n   */\r\n  title?: string;\r\n  /**\r\n   * Optional human-readable description for the field.\r\n   * If the description is functionally equivalent to its title, the description can be omitted.\r\n   */\r\n  description?: string;\r\n\r\n  /**\r\n   * For command form fields, the type of command parameter this field represents\r\n   * (e.g., \"SELECTION\", \"POSITION\", \"BLOCKPOS\", \"SET\", \"INT\", \"BOOLEAN\").\r\n   * Used by the command documentation generator to map fields to parameter types.\r\n   */\r\n  commandType?: string;\r\n\r\n  /**\r\n   * Optional human-readable guidance on how to use or fix issues related to this field.\r\n   * For validation rules, this contains tips for how to resolve validation errors or warnings.\r\n   */\r\n  howToUse?: string;\r\n\r\n  /**\r\n   * Optional human-readable description of technical details of the field - for example, any notes\r\n   * on how the field is persisted in JSON, or other technical details.\r\n   * In practice, this is not shown in tools but is shown in technical documentation.\r\n   */\r\n  technicalDescription?: string;\r\n\r\n  /**\r\n   * Optional hint for diagnostic providers to locate this issue in a document.\r\n   * Contains a JSON token or pattern to search for when highlighting this issue.\r\n   * Examples: \"format_version\", \"identifier\", \"minecraft:entity\"\r\n   */\r\n  suggestedLineToken?: string;\r\n\r\n  /**\r\n   * If true, the diagnostic provider should also search for the ProjectInfoItem.data\r\n   * value on the same line as suggestedLineToken. This helps pinpoint the exact line\r\n   * when the data contains a specific value like a version string or identifier.\r\n   */\r\n  suggestedLineShouldHaveData?: boolean;\r\n\r\n  /**\r\n   * Any additional English descriptions about notes for this data of this field definition.\r\n   * .note vs. .note2 vs. .note3 are expected to be different \"topics\" for notes.\r\n   */\r\n  note?: string;\r\n  /**\r\n   * Any additional English descriptions about notes for this data of this field definition.\r\n   * .note vs. .note2 vs. .note3 are expected to be different \"topics\" for notes.\r\n   */\r\n  note2?: string;\r\n  /**\r\n   * Any additional English descriptions about notes for this data of this field definition.\r\n   * .note vs. .note2 vs. .note3 are expected to be different \"topics\" for notes.\r\n   */\r\n  note3?: string;\r\n  /**\r\n   * Whether this field should be defined if it's functionally empty (e.g., an empty string or a 0 item array).\r\n   */\r\n  retainIfEmptyOrDefault?: boolean;\r\n\r\n  /**\r\n   * If this field references an object (e.g., has a dataType of 16 - object or 15 - object Array), this describes the structure of that object.\r\n   */\r\n  subForm?: IFormDefinition;\r\n\r\n  /**\r\n   * Used in override files to request merging of generated subForm content into the override's subForm.\r\n   * When set to true, the generated subForm fields will be merged into the override's existing subForm.\r\n   * Use this when you want to keep your override's subForm fields AND add generated fields.\r\n   * Contrast with having just subForm without mergeSubForm, which replaces the generated subForm entirely.\r\n   */\r\n  mergeSubForm?: boolean;\r\n\r\n  /*\r\n   * If this field references an object (e.g., has a dataType of 16 - object or 15 - object Array), this is an the identifier of that sub-form.\r\n   * This is typically a \"<folder>/<file>\", which maps to folder/file.form.json relative to the form directory root.\r\n   */\r\n  subFormId?: string;\r\n\r\n  /*\r\n   * In certain contexts, allowedKeys provides a list of keys that are allowed in the keyedObjectCollection or keyedStringCollection.\r\n   */\r\n  allowedKeys?: string[];\r\n\r\n  /**\r\n   * Optional version that this field was introduced in the respective object's data structure.\r\n   */\r\n  versionIntroduced?: string;\r\n\r\n  /**\r\n   * Optional version that this field was deprecated and no longer supported, maintained, or recommended in the respective object's data structure.\r\n   */\r\n  versionDeprecated?: string;\r\n\r\n  /** Describes an override set of subFields for the sub form. This should only be supplied in rare cases. */\r\n  subFields?: { [keyName: string]: IField };\r\n  /**\r\n   * If this field references an array of objects, this is the key that maps the array to its corresponding sub-field.\r\n   */\r\n  objectArrayToSubFieldKey?: string;\r\n  /**\r\n   * If this field references an array of objects, this is the key that maps the array to its corresponding title field.\r\n   */\r\n  objectArrayTitleFieldKey?: string;\r\n  /**\r\n   * If this field references an array of objects, this is the key that maps the array length to its sub field length.\r\n   */\r\n  matchObjectArrayLengthToSubFieldLength?: boolean;\r\n  /**\r\n   * If this field references an array of objects, this specifies that objects in the array should map to its corresponding sub-field.\r\n   */\r\n  matchObjectArrayToSubFieldKey?: boolean;\r\n  /**\r\n   * For array types, this specifies that the sub-field should be an array of objects of a fixed length.\r\n   */\r\n  fixedLength?: number;\r\n  /**\r\n   * Description of the field that is used for human-readable purposes.\r\n   * This is typically used to provide a more user-friendly description of the key of this field.\r\n   */\r\n  keyDescription?: string;\r\n  /**\r\n   * Context-specfic identifier for data set to use for lookups for the field.\r\n   */\r\n  lookupId?: string;\r\n  /**\r\n   * If the field is a string related, the minimum length of the string.\r\n   */\r\n  minLength?: number;\r\n  /**\r\n   * If the field is a string related, the maximum length of the string.\r\n   */\r\n  maxLength?: number;\r\n  /**\r\n   * Prototype example of the data structure for new items that are created\r\n   */\r\n  newItemPrototype?: any;\r\n  /**\r\n   * Human-readable name for the field, which is used in the UI to display the field.\r\n   */\r\n  noun?: string;\r\n  /**\r\n   * When sorting this field amongst other fields, this is the priority of the field.\r\n   * Lower numbers are sorted first, and higher numbers are sorted last.\r\n   * If two numbers are tied, then fields are alphabetically sorted by their id.\r\n   */\r\n  priority?: number;\r\n  /**\r\n   * If this field is an array or keyed set, whether new items can be created or existing items can be deleted.\r\n   */\r\n  allowCreateDelete?: boolean;\r\n  /**\r\n   * Whether to display this field as read only.\r\n   */\r\n  readOnly?: boolean;\r\n  /**\r\n   * When displaying the field in a user interface, whether to display the title for the field.\r\n   */\r\n  displayTitle?: boolean;\r\n  /**\r\n   * Whether to force the field to be treated as a string, even if it appears to be another type.\r\n   */\r\n  forceString?: boolean;\r\n  /**\r\n   * If the field is a number, float, or integer, this specifies the minimum value that the field can take.\r\n   */\r\n  minValue?: number;\r\n  /**\r\n   * If the field is a number, float, or integer, this specifies the maximum value that the field can take.\r\n   */\r\n  maxValue?: number;\r\n  /**\r\n   * If the field is a range, this describes the standard step between numbers in the range.\r\n   * This is typically used for sliders or other input methods that allow users to select a value within a range.\r\n   * For example, a step of 5 between 0 and 100 would allow values like 0, 5, 10, ..., 100.\r\n   */\r\n  step?: number;\r\n  /**\r\n   * A placeholder for internal content build processes to signify that this field should NOT be merged in via automatic processes and should not really exist\r\n   * in the final schema.\r\n   */\r\n  isRemoved?: boolean;\r\n\r\n  /**\r\n   * Specifies whether values of this field should be transformed via an algorithm to be more human-readable and \"friendly\".\r\n   */\r\n  humanifyValues?: FieldValueHumanify;\r\n\r\n  /**\r\n   * Specifies whether the samples for this field should be hidden in the target source (UI or documentation).\r\n   * This is typically used for fields whether the samples are not interesting. Eg., \"priority\": 2 as an sample of a priority field.\r\n   */\r\n  hideSamples?: boolean;\r\n\r\n  /**\r\n   * If the field is a number, float, or integer, this specifies a soft, recommended minimum value that the field can take.\r\n   */\r\n  suggestedMinValue?: number;\r\n\r\n  /**\r\n   * If the field is a number, float, or integer, this specifies a soft, recommended maximum value that the field can take.\r\n   */\r\n  suggestedMaxValue?: number;\r\n\r\n  /**\r\n   * References another sibling field by ID whose current value should be used as this field's effective maximum.\r\n   * For example, a \"value\" field with maxValueField: \"max\" will be clamped to the current value of the \"max\" field.\r\n   */\r\n  maxValueField?: string;\r\n\r\n  /**\r\n   * References another sibling field by ID whose current value should be used as this field's effective minimum.\r\n   */\r\n  minValueField?: string;\r\n\r\n  /**\r\n   * A set of context dependent tag strings that can be used to filter or categorize the field.\r\n   */\r\n  tags?: string[];\r\n  /**\r\n   * Specifies whether this field is required to have a value.\r\n   */\r\n  isRequired?: boolean;\r\n  /**\r\n   * Specifies whether this field is deprecated and should not be used in new code.\r\n   */\r\n  isDeprecated?: boolean;\r\n  /**\r\n   * Specifies whether this field is internal and not intended for public use.\r\n   */\r\n  isInternal?: boolean;\r\n  /*\r\n   * Specifies a set of conditions that can be expressed to validate whehter examples of data are correctly formed.\r\n   */\r\n  validity?: ICondition[];\r\n  /*\r\n   * Specifies a set of conditions that can be expressed to validate whehter this field should show, or not.\r\n   */\r\n  visibility?: ICondition[];\r\n  /**\r\n   * Specifies what the default value of this field should be if it's not specified in the data.\r\n   */\r\n  defaultValue?: string | number | boolean | number[] | string[] | object | object[] | null;\r\n  /**\r\n   * Specifies whether visual presentations of this data should have any additional indents\r\n   */\r\n  additionalIndent?: number;\r\n  /**\r\n   * Specifies the visual experience for the field.\r\n   */\r\n  visualExperience?: FieldVisualExperience;\r\n  /**\r\n   * Specifies a particular visual experiene for the field.\r\n   */\r\n  experienceType?: FieldExperienceType;\r\n  /**\r\n   * Specifies the data type of the field, which determines how the data is interpreted and validated.\r\n   */\r\n  dataType: FieldDataType;\r\n  /**\r\n   * Specifies a list of alternate representation for data for this field. For example, a field that is a string can have an alternate representation as a number, and would have an alternate field for it.\r\n   */\r\n  alternates?: IField[];\r\n  /**\r\n   * Specifies whether the data for this field must match the set of defined choices or lookup values.\r\n   */\r\n  mustMatchChoices?: boolean;\r\n  /**\r\n   * Specifies a fixed list of choices for this field.\r\n   */\r\n  choices?: ISimpleReference[];\r\n  /**\r\n   * Specifies a simple list of enum values for stringEnum or intEnum fields.\r\n   * This is a shorthand alternative to choices when you don't need labels/descriptions.\r\n   * If both enumValues and choices are provided, choices takes precedence.\r\n   */\r\n  enumValues?: (string | number)[];\r\n  /**\r\n   * Specifies the data type for additional properties in a keyed collection.\r\n   * When set, this generates additionalProperties schema based on the specified FieldDataType.\r\n   * For example, additionalPropertiesOf: FieldDataType.molangArray would generate\r\n   * additionalProperties with the Molang array schema.\r\n   */\r\n  additionalPropertiesOf?: FieldDataType;\r\n  /**\r\n   * Specifies a set of specific samples of data values for this field.\r\n   */\r\n  samples?: { [path: string]: IFormSample[] };\r\n  /**\r\n   * Specifies a UX variant for how this field should be rendered.\r\n   * This allows different visual experiences for the same data type.\r\n   *\r\n   * Supported variants by data type:\r\n   * - minecraftFilter (dataType 20):\r\n   *   - \"biome\": Simplified biome tag selector with categorized checkboxes\r\n   *\r\n   * The variant editor should auto-detect if existing data is too complex for the\r\n   * simplified view and fall back to the standard editor. A toggle allows users\r\n   * to switch between simplified and advanced modes.\r\n   */\r\n  uxVariant?: string;\r\n  /**\r\n   * Specifies matched values that reference project updaters. Used in mctoolsval forms\r\n   * to associate topic IDs with their corresponding updaters.\r\n   */\r\n  matchedValues?: { [key: string]: string };\r\n  /**\r\n   * For validator topic fields, specifies the type of message (info, warning, error, recommendation).\r\n   * This helps categorize the severity or nature of validation results.\r\n   */\r\n  messageType?: FieldMessageType;\r\n  /**\r\n   * Per-field summarizer for generating human-readable descriptions of this field's value.\r\n   * Used by JSON editor value decorations to show contextual information inline.\r\n   *\r\n   * This allows fields to define how their values should be visualized and summarized,\r\n   * enabling features like:\r\n   * - Health bars for health values\r\n   * - Color swatches for color values\r\n   * - Speed comparisons for movement values\r\n   * - Probability bars for chance values\r\n   *\r\n   * @example\r\n   * // For a health value field\r\n   * \"valueSummarizer\": {\r\n   *   \"type\": \"healthBar\",\r\n   *   \"maxReference\": 100,\r\n   *   \"unit\": \"HP\"\r\n   * }\r\n   *\r\n   * @example\r\n   * // For a movement speed field\r\n   * \"valueSummarizer\": {\r\n   *   \"type\": \"comparison\",\r\n   *   \"references\": [\r\n   *     { \"value\": 0.1, \"label\": \"a Turtle\" },\r\n   *     { \"value\": 0.25, \"label\": \"a Player\" },\r\n   *     { \"value\": 0.3, \"label\": \"a Spider\" }\r\n   *   ]\r\n   * }\r\n   */\r\n  valueSummarizer?: IFieldValueSummarizer;\r\n\r\n  /**\r\n   * Specifies an action to offer on values of this field, such as navigating to a project resource.\r\n   * When set, the data form renderer will add a clickable action button next to each value.\r\n   *\r\n   * Supported actions:\r\n   * - \"openProjectItem\": Treat the value as a resource path and navigate to the matching project item.\r\n   */\r\n  valueAction?: string;\r\n}\r\n\r\n/**\r\n * Defines how a field value should be summarized for visual display in the JSON editor.\r\n */\r\nexport interface IFieldValueSummarizer {\r\n  /**\r\n   * The type of visualization to use.\r\n   */\r\n  type: FieldValueSummarizerType;\r\n\r\n  /**\r\n   * The unit to display after values (e.g., \"HP\", \"blocks/sec\", \"%\").\r\n   */\r\n  unit?: string;\r\n\r\n  /**\r\n   * For bar visualizations, the maximum value for scaling.\r\n   */\r\n  maxReference?: number;\r\n\r\n  /**\r\n   * For comparison-based summarization, reference values to compare against.\r\n   */\r\n  references?: IFieldValueReference[];\r\n\r\n  /**\r\n   * Icon to display (emoji or icon name).\r\n   */\r\n  icon?: string;\r\n\r\n  /**\r\n   * Format string for the value (e.g., \"{value}x\" for scale, \"{value}%\" for percentages).\r\n   */\r\n  format?: string;\r\n\r\n  /**\r\n   * For color values, whether to show a color swatch.\r\n   */\r\n  showColorSwatch?: boolean;\r\n\r\n  /**\r\n   * Custom thresholds for qualitative descriptions.\r\n   */\r\n  thresholds?: IFieldValueThreshold[];\r\n}\r\n\r\n/**\r\n * The type of value summarizer visualization.\r\n */\r\nexport enum FieldValueSummarizerType {\r\n  /**\r\n   * Simple text display with optional unit.\r\n   */\r\n  text = \"text\",\r\n\r\n  /**\r\n   * Health bar visualization (hearts or bar).\r\n   */\r\n  healthBar = \"healthBar\",\r\n\r\n  /**\r\n   * Probability bar visualization (0-100% or 0-1).\r\n   */\r\n  probabilityBar = \"probabilityBar\",\r\n\r\n  /**\r\n   * Scale indicator showing percentage of normal size.\r\n   */\r\n  scale = \"scale\",\r\n\r\n  /**\r\n   * Time visualization (ticks converted to seconds).\r\n   */\r\n  time = \"time\",\r\n\r\n  /**\r\n   * Distance visualization with block unit.\r\n   */\r\n  distance = \"distance\",\r\n\r\n  /**\r\n   * Color swatch for color values.\r\n   */\r\n  color = \"color\",\r\n\r\n  /**\r\n   * Comparison against known reference values.\r\n   */\r\n  comparison = \"comparison\",\r\n\r\n  /**\r\n   * Qualitative description based on thresholds.\r\n   */\r\n  qualitative = \"qualitative\",\r\n}\r\n\r\n/**\r\n * A reference value for comparison-based summarization.\r\n */\r\nexport interface IFieldValueReference {\r\n  /**\r\n   * The reference value.\r\n   */\r\n  value: number;\r\n\r\n  /**\r\n   * Human-readable label for this reference (e.g., \"a Player\", \"an Iron Golem\").\r\n   */\r\n  label: string;\r\n\r\n  /**\r\n   * Optional icon for this reference.\r\n   */\r\n  icon?: string;\r\n}\r\n\r\n/**\r\n * A threshold for qualitative descriptions.\r\n */\r\nexport interface IFieldValueThreshold {\r\n  /**\r\n   * Values at or below this threshold get this description.\r\n   */\r\n  maxValue: number;\r\n\r\n  /**\r\n   * The qualitative description (e.g., \"very low\", \"moderate\", \"extremely high\").\r\n   */\r\n  description: string;\r\n\r\n  /**\r\n   * Optional sentiment for styling.\r\n   */\r\n  sentiment?: \"positive\" | \"negative\" | \"neutral\" | \"warning\";\r\n\r\n  /**\r\n   * Optional icon for this threshold level.\r\n   */\r\n  icon?: string;\r\n}\r\n", "'use strict';\n\nvar at; // The index of the current character\nvar ch; // The current character\nvar escapee = {\n\t'\"': '\"',\n\t'\\\\': '\\\\',\n\t'/': '/',\n\tb: '\\b',\n\tf: '\\f',\n\tn: '\\n',\n\tr: '\\r',\n\tt: '\\t'\n};\nvar text;\n\n// Call error when something is wrong.\nfunction error(m) {\n\tthrow {\n\t\tname: 'SyntaxError',\n\t\tmessage: m,\n\t\tat: at,\n\t\ttext: text\n\t};\n}\n\nfunction next(c) {\n\t// If a c parameter is provided, verify that it matches the current character.\n\tif (c && c !== ch) {\n\t\terror(\"Expected '\" + c + \"' instead of '\" + ch + \"'\");\n\t}\n\n\t// Get the next character. When there are no more characters, return the empty string.\n\n\tch = text.charAt(at);\n\tat += 1;\n\treturn ch;\n}\n\nfunction number() {\n\t// Parse a number value.\n\tvar num;\n\tvar str = '';\n\n\tif (ch === '-') {\n\t\tstr = '-';\n\t\tnext('-');\n\t}\n\twhile (ch >= '0' && ch <= '9') {\n\t\tstr += ch;\n\t\tnext();\n\t}\n\tif (ch === '.') {\n\t\tstr += '.';\n\t\twhile (next() && ch >= '0' && ch <= '9') {\n\t\t\tstr += ch;\n\t\t}\n\t}\n\tif (ch === 'e' || ch === 'E') {\n\t\tstr += ch;\n\t\tnext();\n\t\tif (ch === '-' || ch === '+') {\n\t\t\tstr += ch;\n\t\t\tnext();\n\t\t}\n\t\twhile (ch >= '0' && ch <= '9') {\n\t\t\tstr += ch;\n\t\t\tnext();\n\t\t}\n\t}\n\tnum = Number(str);\n\tif (!isFinite(num)) {\n\t\terror('Bad number');\n\t}\n\treturn num;\n}\n\nfunction string() {\n\t// Parse a string value.\n\tvar hex;\n\tvar i;\n\tvar str = '';\n\tvar uffff;\n\n\t// When parsing for string values, we must look for \" and \\ characters.\n\tif (ch === '\"') {\n\t\twhile (next()) {\n\t\t\tif (ch === '\"') {\n\t\t\t\tnext();\n\t\t\t\treturn str;\n\t\t\t} else if (ch === '\\\\') {\n\t\t\t\tnext();\n\t\t\t\tif (ch === 'u') {\n\t\t\t\t\tuffff = 0;\n\t\t\t\t\tfor (i = 0; i < 4; i += 1) {\n\t\t\t\t\t\thex = parseInt(next(), 16);\n\t\t\t\t\t\tif (!isFinite(hex)) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tuffff = (uffff * 16) + hex;\n\t\t\t\t\t}\n\t\t\t\t\tstr += String.fromCharCode(uffff);\n\t\t\t\t} else if (typeof escapee[ch] === 'string') {\n\t\t\t\t\tstr += escapee[ch];\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstr += ch;\n\t\t\t}\n\t\t}\n\t}\n\terror('Bad string');\n}\n\n// Skip whitespace.\nfunction white() {\n\twhile (ch && ch <= ' ') {\n\t\tnext();\n\t}\n}\n\n// true, false, or null.\nfunction word() {\n\tswitch (ch) {\n\t\tcase 't':\n\t\t\tnext('t');\n\t\t\tnext('r');\n\t\t\tnext('u');\n\t\t\tnext('e');\n\t\t\treturn true;\n\t\tcase 'f':\n\t\t\tnext('f');\n\t\t\tnext('a');\n\t\t\tnext('l');\n\t\t\tnext('s');\n\t\t\tnext('e');\n\t\t\treturn false;\n\t\tcase 'n':\n\t\t\tnext('n');\n\t\t\tnext('u');\n\t\t\tnext('l');\n\t\t\tnext('l');\n\t\t\treturn null;\n\t\tdefault:\n\t\t\terror(\"Unexpected '\" + ch + \"'\");\n\t}\n}\n\n// Parse an array value.\nfunction array() {\n\tvar arr = [];\n\n\tif (ch === '[') {\n\t\tnext('[');\n\t\twhite();\n\t\tif (ch === ']') {\n\t\t\tnext(']');\n\t\t\treturn arr; // empty array\n\t\t}\n\t\twhile (ch) {\n\t\t\tarr.push(value()); // eslint-disable-line no-use-before-define\n\t\t\twhite();\n\t\t\tif (ch === ']') {\n\t\t\t\tnext(']');\n\t\t\t\treturn arr;\n\t\t\t}\n\t\t\tnext(',');\n\t\t\twhite();\n\t\t}\n\t}\n\terror('Bad array');\n}\n\n// Parse an object value.\nfunction object() {\n\tvar key;\n\tvar obj = {};\n\n\tif (ch === '{') {\n\t\tnext('{');\n\t\twhite();\n\t\tif (ch === '}') {\n\t\t\tnext('}');\n\t\t\treturn obj; // empty object\n\t\t}\n\t\twhile (ch) {\n\t\t\tkey = string();\n\t\t\twhite();\n\t\t\tnext(':');\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, key)) {\n\t\t\t\terror('Duplicate key \"' + key + '\"');\n\t\t\t}\n\t\t\tobj[key] = value(); // eslint-disable-line no-use-before-define\n\t\t\twhite();\n\t\t\tif (ch === '}') {\n\t\t\t\tnext('}');\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\tnext(',');\n\t\t\twhite();\n\t\t}\n\t}\n\terror('Bad object');\n}\n\n// Parse a JSON value. It could be an object, an array, a string, a number, or a word.\nfunction value() {\n\twhite();\n\tswitch (ch) {\n\t\tcase '{':\n\t\t\treturn object();\n\t\tcase '[':\n\t\t\treturn array();\n\t\tcase '\"':\n\t\t\treturn string();\n\t\tcase '-':\n\t\t\treturn number();\n\t\tdefault:\n\t\t\treturn ch >= '0' && ch <= '9' ? number() : word();\n\t}\n}\n\n// Return the json_parse function. It will have access to all of the above functions and variables.\nmodule.exports = function (source, reviver) {\n\tvar result;\n\n\ttext = source;\n\tat = 0;\n\tch = ' ';\n\tresult = value();\n\twhite();\n\tif (ch) {\n\t\terror('Syntax error');\n\t}\n\n\t// If there is a reviver function, we recursively walk the new structure,\n\t// passing each name/value pair to the reviver function for possible\n\t// transformation, starting with a temporary root object that holds the result\n\t// in an empty key. If there is not a reviver function, we simply return the\n\t// result.\n\n\treturn typeof reviver === 'function' ? (function walk(holder, key) {\n\t\tvar k;\n\t\tvar v;\n\t\tvar val = holder[key];\n\t\tif (val && typeof val === 'object') {\n\t\t\tfor (k in value) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(val, k)) {\n\t\t\t\t\tv = walk(val, k);\n\t\t\t\t\tif (typeof v === 'undefined') {\n\t\t\t\t\t\tdelete val[k];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tval[k] = v;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn reviver.call(holder, key, val);\n\t}({ '': result }, '')) : result;\n};\n", "'use strict';\n\nvar escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\nvar gap;\nvar indent;\nvar meta = { // table of character substitutions\n\t'\\b': '\\\\b',\n\t'\\t': '\\\\t',\n\t'\\n': '\\\\n',\n\t'\\f': '\\\\f',\n\t'\\r': '\\\\r',\n\t'\"': '\\\\\"',\n\t'\\\\': '\\\\\\\\'\n};\nvar rep;\n\nfunction quote(string) {\n\t// If the string contains no control characters, no quote characters, and no\n\t// backslash characters, then we can safely slap some quotes around it.\n\t// Otherwise we must also replace the offending characters with safe escape sequences.\n\n\tescapable.lastIndex = 0;\n\treturn escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n\t\tvar c = meta[a];\n\t\treturn typeof c === 'string' ? c\n\t\t\t: '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n\t}) + '\"' : '\"' + string + '\"';\n}\n\nfunction str(key, holder) {\n\t// Produce a string from holder[key].\n\tvar i; // The loop counter.\n\tvar k; // The member key.\n\tvar v; // The member value.\n\tvar length;\n\tvar mind = gap;\n\tvar partial;\n\tvar value = holder[key];\n\n\t// If the value has a toJSON method, call it to obtain a replacement value.\n\tif (value && typeof value === 'object' && typeof value.toJSON === 'function') {\n\t\tvalue = value.toJSON(key);\n\t}\n\n\t// If we were called with a replacer function, then call the replacer to obtain a replacement value.\n\tif (typeof rep === 'function') {\n\t\tvalue = rep.call(holder, key, value);\n\t}\n\n\t// What happens next depends on the value's type.\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\treturn quote(value);\n\n\t\tcase 'number':\n\t\t\t// JSON numbers must be finite. Encode non-finite numbers as null.\n\t\t\treturn isFinite(value) ? String(value) : 'null';\n\n\t\tcase 'boolean':\n\t\tcase 'null':\n\t\t\t// If the value is a boolean or null, convert it to a string. Note:\n\t\t\t// typeof null does not produce 'null'. The case is included here in\n\t\t\t// the remote chance that this gets fixed someday.\n\t\t\treturn String(value);\n\n\t\tcase 'object':\n\t\t\tif (!value) {\n\t\t\t\treturn 'null';\n\t\t\t}\n\t\t\tgap += indent;\n\t\t\tpartial = [];\n\n\t\t\t// Array.isArray\n\t\t\tif (Object.prototype.toString.apply(value) === '[object Array]') {\n\t\t\t\tlength = value.length;\n\t\t\t\tfor (i = 0; i < length; i += 1) {\n\t\t\t\t\tpartial[i] = str(i, value) || 'null';\n\t\t\t\t}\n\n\t\t\t\t// Join all of the elements together, separated with commas, and wrap them in brackets.\n\t\t\t\tv = partial.length === 0 ? '[]' : gap\n\t\t\t\t\t? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']'\n\t\t\t\t\t: '[' + partial.join(',') + ']';\n\t\t\t\tgap = mind;\n\t\t\t\treturn v;\n\t\t\t}\n\n\t\t\t// If the replacer is an array, use it to select the members to be stringified.\n\t\t\tif (rep && typeof rep === 'object') {\n\t\t\t\tlength = rep.length;\n\t\t\t\tfor (i = 0; i < length; i += 1) {\n\t\t\t\t\tk = rep[i];\n\t\t\t\t\tif (typeof k === 'string') {\n\t\t\t\t\t\tv = str(k, value);\n\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\tpartial.push(quote(k) + (gap ? ': ' : ':') + v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, iterate through all of the keys in the object.\n\t\t\t\tfor (k in value) {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(value, k)) {\n\t\t\t\t\t\tv = str(k, value);\n\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\tpartial.push(quote(k) + (gap ? ': ' : ':') + v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Join all of the member texts together, separated with commas, and wrap them in braces.\n\n\t\t\tv = partial.length === 0 ? '{}' : gap\n\t\t\t\t? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}'\n\t\t\t\t: '{' + partial.join(',') + '}';\n\t\t\tgap = mind;\n\t\t\treturn v;\n\t\tdefault:\n\t}\n}\n\nmodule.exports = function (value, replacer, space) {\n\tvar i;\n\tgap = '';\n\tindent = '';\n\n\t// If the space parameter is a number, make an indent string containing that many spaces.\n\tif (typeof space === 'number') {\n\t\tfor (i = 0; i < space; i += 1) {\n\t\t\tindent += ' ';\n\t\t}\n\t} else if (typeof space === 'string') {\n\t\t// If the space parameter is a string, it will be used as the indent string.\n\t\tindent = space;\n\t}\n\n\t// If there is a replacer, it must be a function or an array. Otherwise, throw an error.\n\trep = replacer;\n\tif (\n\t\treplacer\n\t\t&& typeof replacer !== 'function'\n\t\t&& (typeof replacer !== 'object' || typeof replacer.length !== 'number')\n\t) {\n\t\tthrow new Error('JSON.stringify');\n\t}\n\n\t// Make a fake root object containing our value under the key of ''.\n\t// Return the result of stringifying the value.\n\treturn str('', { '': value });\n};\n", "'use strict';\n\nexports.parse = require('./lib/parse');\nexports.stringify = require('./lib/stringify');\n", "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n", "'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n", "'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n", "'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n", "'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n", "'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n", "'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n", "'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n", "'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n", "'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n", "'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n", "'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n", "'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n", "'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n", "'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n", "'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n", "'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n", "'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n", "'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n", "'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n", "'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n    var arr = [];\n\n    for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n    }\n    for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n    }\n\n    return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n    var arr = [];\n    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n    }\n    return arr;\n};\n\nvar joiny = function (arr, joiner) {\n    var str = '';\n    for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n            str += joiner;\n        }\n    }\n    return str;\n};\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slicy(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                concatty(args, arguments)\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        }\n        return target.apply(\n            that,\n            concatty(args, arguments)\n        );\n\n    };\n\n    var boundLength = max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = '$' + i;\n    }\n\n    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n", "'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n", "'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n", "'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n", "'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n", "'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n", "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n", "'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\n\nvar gopd = require('gopd');\n\n/** @type {import('.')} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor<unknown>} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n", "'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\treturn !!$defineProperty;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!$defineProperty) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $apply = require('./functionApply');\nvar actualApply = require('./actualApply');\n\n/** @type {import('./applyBind')} */\nmodule.exports = function applyBind() {\n\treturn actualApply(bind, $apply, arguments);\n};\n", "'use strict';\n\nvar setFunctionLength = require('set-function-length');\n\nvar $defineProperty = require('es-define-property');\n\nvar callBindBasic = require('call-bind-apply-helpers');\nvar applyBind = require('call-bind-apply-helpers/applyBind');\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = callBindBasic(arguments);\n\tvar adjustedLength = originalFunction.length - (arguments.length - 1);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + (adjustedLength > 0 ? adjustedLength : 0),\n\t\ttrue\n\t);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\n/** @type {typeof JSON.stringify} */\nvar jsonStringify = (typeof JSON !== 'undefined' ? JSON : require('jsonify')).stringify;\n\nvar isArray = require('isarray');\nvar objectKeys = require('object-keys');\nvar callBind = require('call-bind');\nvar callBound = require('call-bound');\n\nvar $join = callBound('Array.prototype.join');\nvar $indexOf = callBound('Array.prototype.indexOf');\nvar $splice = callBound('Array.prototype.splice');\nvar $sort = callBound('Array.prototype.sort');\n\n/** @type {(n: number, char: string) => string} */\nvar strRepeat = function repeat(n, char) {\n\tvar str = '';\n\tfor (var i = 0; i < n; i += 1) {\n\t\tstr += char;\n\t}\n\treturn str;\n};\n\n/** @type {(parent: import('.').Node, key: import('.').Key, value: unknown) => unknown} */\nvar defaultReplacer = function (_parent, _key, value) { return value; };\n\n/** @type {import('.')} */\nmodule.exports = function stableStringify(obj) {\n\t/** @type {Parameters<import('.')>[1]} */\n\tvar opts = arguments.length > 1 ? arguments[1] : void undefined;\n\tvar space = (opts && opts.space) || '';\n\tif (typeof space === 'number') { space = strRepeat(space, ' '); }\n\tvar cycles = !!opts && typeof opts.cycles === 'boolean' && opts.cycles;\n\t/** @type {undefined | typeof defaultReplacer} */\n\tvar replacer = opts && opts.replacer ? callBind(opts.replacer) : defaultReplacer;\n\tif (opts && typeof opts.collapseEmpty !== 'undefined' && typeof opts.collapseEmpty !== 'boolean') {\n\t\tthrow new TypeError('`collapseEmpty` must be a boolean, if provided');\n\t}\n\tvar collapseEmpty = !!opts && opts.collapseEmpty;\n\n\tvar cmpOpt = typeof opts === 'function' ? opts : opts && opts.cmp;\n\t/** @type {undefined | (<T extends import('.').NonArrayNode>(node: T) => (a: Exclude<keyof T, symbol | number>, b: Exclude<keyof T, symbol | number>) => number)} */\n\tvar cmp = cmpOpt && function (node) {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar get = /** @type {NonNullable<typeof cmpOpt>} */ (cmpOpt).length > 2\n\t\t\t&& /** @type {import('.').Getter['get']} */ function get(k) { return node[k]; };\n\t\treturn function (a, b) {\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\treturn /** @type {NonNullable<typeof cmpOpt>} */ (cmpOpt)(\n\t\t\t\t{ key: a, value: node[a] },\n\t\t\t\t{ key: b, value: node[b] },\n\t\t\t\t// @ts-expect-error TS doesn't understand the optimization used here\n\t\t\t\tget ? /** @type {import('.').Getter} */ { __proto__: null, get: get } : void undefined\n\t\t\t);\n\t\t};\n\t};\n\n\t/** @type {import('.').Node[]} */\n\tvar seen = [];\n\treturn (/** @type {(parent: import('.').Node, key: string | number, node: unknown, level: number) => string | undefined} */\n\t\tfunction stringify(parent, key, node, level) {\n\t\t\tvar indent = space ? '\\n' + strRepeat(level, space) : '';\n\t\t\tvar colonSeparator = space ? ': ' : ':';\n\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tif (node && /** @type {{ toJSON?: unknown }} */ (node).toJSON && typeof /** @type {{ toJSON?: unknown }} */ (node).toJSON === 'function') {\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tnode = /** @type {{ toJSON: Function }} */ (node).toJSON();\n\t\t\t}\n\n\t\t\tnode = replacer(parent, key, node);\n\t\t\tif (node === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof node !== 'object' || node === null) {\n\t\t\t\treturn jsonStringify(node);\n\t\t\t}\n\n\t\t\t/** @type {(out: string[], brackets: '[]' | '{}') => string} */\n\t\t\tvar groupOutput = function (out, brackets) {\n\t\t\t\treturn collapseEmpty && out.length === 0\n\t\t\t\t\t? brackets\n\t\t\t\t\t: (brackets === '[]' ? '[' : '{') + $join(out, ',') + indent + (brackets === '[]' ? ']' : '}');\n\t\t\t};\n\n\t\t\tif (isArray(node)) {\n\t\t\t\tvar out = [];\n\t\t\t\tfor (var i = 0; i < node.length; i++) {\n\t\t\t\t\tvar item = stringify(node, i, node[i], level + 1) || jsonStringify(null);\n\t\t\t\t\tout[out.length] = indent + space + item;\n\t\t\t\t}\n\t\t\t\treturn groupOutput(out, '[]');\n\t\t\t}\n\n\t\t\tif ($indexOf(seen, node) !== -1) {\n\t\t\t\tif (cycles) { return jsonStringify('__cycle__'); }\n\t\t\t\tthrow new TypeError('Converting circular structure to JSON');\n\t\t\t} else {\n\t\t\t\tseen[seen.length] = /** @type {import('.').NonArrayNode} */ (node);\n\t\t\t}\n\n\t\t\t/** @type {import('.').Key[]} */\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tvar keys = $sort(objectKeys(node), cmp && cmp(/** @type {import('.').NonArrayNode} */ (node)));\n\t\t\tvar out = [];\n\t\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\t\tvar key = keys[i];\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tvar value = stringify(/** @type {import('.').Node} */ (node), key, /** @type {import('.').NonArrayNode} */ (node)[key], level + 1);\n\n\t\t\t\tif (!value) { continue; }\n\n\t\t\t\tvar keyValue = jsonStringify(key)\n\t\t\t\t\t+ colonSeparator\n\t\t\t\t\t+ value;\n\n\t\t\t\tout[out.length] = indent + space + keyValue;\n\t\t\t}\n\t\t\t$splice(seen, $indexOf(seen, node), 1);\n\t\t\treturn groupOutput(out, '{}');\n\t\t}({ '': obj }, '', obj, 0)\n\t);\n};\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CreatorToolsHost, { HostType } from \"../app/CreatorToolsHost\";\r\nimport { FieldValueHumanify } from \"../dataform/IField\";\r\nimport AppServiceProxy from \"./AppServiceProxy\";\r\nimport { IErrorable } from \"./IErrorable\";\r\nimport Log from \"./Log\";\r\nimport * as stableStringify from \"json-stable-stringify\";\r\n\r\n// json-stable-stringify may be exported either as a function (CommonJS) or as a default property\r\n// (ES module interop). Create an alias that resolves to the callable function in either case.\r\nconst stableStringifyFunc: (obj: any, options?: any) => string | undefined =\r\n  (stableStringify as any).default ?? (stableStringify as any);\r\n\r\nconst singleComment = Symbol(\"singleComment\");\r\nconst multiComment = Symbol(\"multiComment\");\r\n\r\nconst javascriptStringTranslations: Map<string, string> = new Map<string, string>();\r\n\r\nexport const ObjectKeyAvoidTermList = new Set([\r\n  \"__proto__\",\r\n  \"prototype\",\r\n  \"[[Prototype]]\",\r\n  \"this\",\r\n  \"delete\",\r\n  \"constructor\",\r\n  \"hasOwnProperty\",\r\n  \"isPrototypeOf\",\r\n  \"__defineGetter__\",\r\n  \"__defineSetter__\",\r\n  \"__lookupGetter__\",\r\n  \"__lookupSetter__\",\r\n]);\r\n\r\nexport default class Utilities {\r\n  static _isDebug?: boolean;\r\n  static _isAppSim?: boolean;\r\n  static defaultEncoding = \"UTF-8\";\r\n  static replacementChar = 0xfffd;\r\n\r\n  // note that if the stringToSplit is well formed, it should return untilCount+1 items items in the string[]\r\n  static splitUntil(stringToSplit: string, splitChar: string, untilCount: number): string[] {\r\n    const results: string[] = [];\r\n\r\n    let lastPipe = 0;\r\n    let index = 0;\r\n    let curPipe = stringToSplit.indexOf(splitChar);\r\n\r\n    while (curPipe > 0 && index < untilCount) {\r\n      results.push(stringToSplit.substring(lastPipe, curPipe));\r\n      index++;\r\n      lastPipe = curPipe + 1;\r\n      curPipe = stringToSplit.indexOf(splitChar, lastPipe);\r\n    }\r\n\r\n    results.push(stringToSplit.substring(lastPipe, stringToSplit.length));\r\n\r\n    return results;\r\n  }\r\n\r\n  static parseJson(jsonString: string): object | undefined {\r\n    let obj: object | undefined;\r\n\r\n    try {\r\n      obj = JSON.parse(jsonString);\r\n    } catch (e) {\r\n      return undefined;\r\n    }\r\n\r\n    return obj;\r\n  }\r\n\r\n  static isScientificFloat(value: number) {\r\n    // Ensure it's a number (not NaN, not Infinity)\r\n    if (typeof value !== \"number\" || !isFinite(value)) {\r\n      return false;\r\n    }\r\n\r\n    // Convert to string in default format\r\n    const str = value.toString();\r\n\r\n    // Match scientific notation pattern: e.g., 1.23e4, -5E-3\r\n    return /^[+-]?\\d+(\\.\\d+)?e[+-]?\\d+$/i.test(str);\r\n  }\r\n\r\n  static isUsableAsObjectKey(term: string) {\r\n    if (term === undefined || term === null) {\r\n      return false;\r\n    }\r\n\r\n    return !ObjectKeyAvoidTermList.has(term);\r\n  }\r\n\r\n  /**\r\n   * Returns true if the string looks like a Minecraft localization key\r\n   * (e.g., \"pack.name\", \"pack.description\", \"skinpack.mypack.name\").\r\n   * These are dotted identifiers with no spaces, used as lookup keys\r\n   * in .lang files rather than as user-visible display names.\r\n   */\r\n  static isLikelyLocalizationKey(name: string): boolean {\r\n    if (!name || name.indexOf(\" \") >= 0) {\r\n      return false;\r\n    }\r\n\r\n    // Must contain at least one dot (e.g., \"pack.name\")\r\n    // and consist only of word-like characters and dots\r\n    return /^[\\w][\\w.]*\\.[\\w][\\w.]*$/.test(name);\r\n  }\r\n\r\n  static async sleep(ms: number) {\r\n    return new Promise((resolve) => {\r\n      setTimeout(resolve, ms);\r\n    });\r\n  }\r\n\r\n  static get isPreview(): boolean {\r\n    return true;\r\n  }\r\n\r\n  static get isAppSim(): boolean {\r\n    if (Utilities._isAppSim === undefined) {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        // @ts-ignore\r\n        const query = window.location.search.toLowerCase();\r\n\r\n        if (query.indexOf(\"appsim=true\") >= 0) {\r\n          Utilities._isAppSim = true;\r\n        } else {\r\n          Utilities._isAppSim = false;\r\n        }\r\n      } else {\r\n        Utilities._isAppSim = false;\r\n      }\r\n    }\r\n\r\n    return Utilities._isAppSim;\r\n  }\r\n\r\n  static get isDebug(): boolean {\r\n    if (Utilities._isDebug === undefined) {\r\n      if (AppServiceProxy.hasAppService) {\r\n        // @ts-ignore\r\n        if (typeof window !== \"undefined\") {\r\n          // @ts-ignore\r\n          if (window.location.href.indexOf(\"localhost\") >= 0) {\r\n            Utilities._isDebug = true;\r\n          }\r\n        }\r\n\r\n        if (!Utilities._isDebug) {\r\n          Utilities._isDebug = false;\r\n        }\r\n        // @ts-ignore\r\n      } else if (typeof window !== \"undefined\") {\r\n        // @ts-ignore\r\n        const query = window.location.search.toLowerCase();\r\n\r\n        if (query.indexOf(\"debug=true\") >= 0) {\r\n          Utilities._isDebug = true;\r\n        } else {\r\n          Utilities._isDebug = false;\r\n        }\r\n      } else {\r\n        Utilities._isDebug = false;\r\n      }\r\n    }\r\n\r\n    return Utilities._isDebug;\r\n  }\r\n\r\n  static selectJsonObject(jsonO: object, select: string, ensureObjects?: boolean): object | undefined {\r\n    const selectors = select.split(\"/\");\r\n\r\n    for (const selector of selectors) {\r\n      if (selector.length > 0) {\r\n        jsonO = (jsonO as any)[selector];\r\n\r\n        if (!jsonO && !ensureObjects) {\r\n          return undefined;\r\n        }\r\n        if (!jsonO && ensureObjects) {\r\n          (jsonO as any)[selector] = {};\r\n          jsonO = (jsonO as any)[selector];\r\n        }\r\n      }\r\n    }\r\n\r\n    return jsonO;\r\n  }\r\n\r\n  static removeItemInArray(objToRemove: any, stringArr: any[]) {\r\n    const nextArray: any[] = [];\r\n\r\n    for (const candStr of stringArr) {\r\n      if (candStr !== objToRemove) {\r\n        nextArray.push(candStr);\r\n      }\r\n    }\r\n\r\n    return nextArray;\r\n  }\r\n\r\n  static isArrayNonNegative(arr: number[]) {\r\n    for (const val of arr) {\r\n      if (val < 0) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static arrayHasNegativeAndIsNumeric(arr: any[]) {\r\n    let foundNegative = false;\r\n    for (const val of arr) {\r\n      if (typeof val !== \"number\") {\r\n        return false;\r\n      } else if (val < 0) {\r\n        foundNegative = true;\r\n      }\r\n    }\r\n\r\n    return foundNegative;\r\n  }\r\n\r\n  static encodeObjectWithSequentialRunLengthEncodeUsingNegative(obj: { [key: string]: any }) {\r\n    for (const key in obj) {\r\n      const val: any = obj[key];\r\n      if (val !== undefined) {\r\n        if (typeof val === \"object\" && !Array.isArray(val)) {\r\n          this.encodeObjectWithSequentialRunLengthEncodeUsingNegative(val);\r\n        } else if (Array.isArray(val)) {\r\n          let isNumericArray = true;\r\n          for (const arrVal of val) {\r\n            if (typeof arrVal !== \"number\") {\r\n              isNumericArray = false;\r\n              break;\r\n            }\r\n          }\r\n\r\n          if (isNumericArray) {\r\n            obj[key] = this.encodeSequentialRunLengthUsingNegative(val);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static decodeSequentialRunLengthUsingNegative(arr: number[]) {\r\n    if (this.isArrayNonNegative(arr)) {\r\n      return arr;\r\n    }\r\n\r\n    const newArr: number[] = [];\r\n\r\n    newArr.push(arr[0]);\r\n\r\n    for (let i = 1; i < arr.length; i++) {\r\n      if (arr[i] < 0) {\r\n        let startVal = arr[i - 1];\r\n\r\n        for (let j = 0; j < Math.abs(arr[i]); j++) {\r\n          startVal++;\r\n\r\n          newArr.push(startVal);\r\n        }\r\n      } else {\r\n        newArr.push(arr[i]);\r\n      }\r\n    }\r\n    return newArr;\r\n  }\r\n\r\n  /* Convert a numeric array from:\r\n     [1, 2, 3, 7, 9, 10, 15, 16, 17, 18]\r\n     to a \"sequential run length encode\", where negative numbers are used to indicate a \"run\"\r\n     so the above becomes \r\n     [1, -2, 7, 9, -1, 15, -3]\r\n  */\r\n  static encodeSequentialRunLengthUsingNegative(arr: number[]) {\r\n    if (!this.isArrayNonNegative(arr)) {\r\n      return arr;\r\n    }\r\n\r\n    arr.sort();\r\n\r\n    const newArr: number[] = [];\r\n\r\n    newArr.push(arr[0]);\r\n\r\n    let streak = -1;\r\n\r\n    for (let i = 1; i < arr.length; i++) {\r\n      if (arr[i] === arr[i - 1] + 1) {\r\n        if (streak < 1) {\r\n          streak = 1;\r\n        } else {\r\n          streak++;\r\n        }\r\n      } else {\r\n        if (streak >= 1) {\r\n          newArr.push(-streak);\r\n          streak = -1;\r\n        }\r\n\r\n        newArr.push(arr[i]);\r\n      }\r\n    }\r\n\r\n    if (streak >= 1) {\r\n      newArr.push(-streak);\r\n      streak = -1;\r\n    }\r\n\r\n    return newArr;\r\n  }\r\n\r\n  static trimEllipsis(text: string, length: number) {\r\n    if (text.length > length) {\r\n      text = text.substring(0, length - 1) + \"\u2026\";\r\n    }\r\n\r\n    return text;\r\n  }\r\n\r\n  static makeHashFileSafe(hash: string) {\r\n    hash = hash.replace(/\\//gi, \"-S\");\r\n    hash = hash.replace(/\\+/gi, \"-P\");\r\n    hash = hash.replace(/\\\\/gi, \"-B\");\r\n    hash = hash.replace(/=/gi, \"-E\");\r\n    hash = hash.replace(/,/gi, \"-C\");\r\n\r\n    return hash;\r\n  }\r\n\r\n  static getSimpleNumeric(num: number | undefined) {\r\n    if (num === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    if (num < 1000) {\r\n      return num.toString();\r\n    }\r\n\r\n    if (num < 1000) {\r\n      return Math.floor(num / 100) / 10 + \"k\";\r\n    }\r\n\r\n    if (num > 1000000) {\r\n      return Math.floor(num / 100000) / 10 + \"m\";\r\n    }\r\n\r\n    return Math.floor(num / 1000) + \"k\";\r\n  }\r\n\r\n  static humanifyJsName(name: string | boolean | number) {\r\n    if (typeof name === \"boolean\" || typeof name === \"number\") {\r\n      return name.toString();\r\n    }\r\n\r\n    if (name.toLowerCase().indexOf(\"apis used\") >= 0) {\r\n      return name;\r\n    }\r\n\r\n    if (name.startsWith(\"apisUsed\")) {\r\n      name = \"APIs Used\" + name.substring(8);\r\n\r\n      return name;\r\n    }\r\n\r\n    let retVal = \"\";\r\n\r\n    for (let i = 0; i < name.length; i++) {\r\n      if (i === 0) {\r\n        retVal += name[i].toUpperCase();\r\n      } else {\r\n        if (\r\n          name[i] >= \"A\" &&\r\n          name[i] <= \"Z\" &&\r\n          (i === name.length - 1 ||\r\n            i === 0 ||\r\n            ((name[i + 1] < \"A\" || name[i + 1] > \"Z\") && (name[i - 1] < \"A\" || name[i - 1] > \"Z\")))\r\n        ) {\r\n          retVal += \" \";\r\n        }\r\n\r\n        retVal += name[i];\r\n      }\r\n    }\r\n\r\n    retVal = retVal.replace(/_/gi, \" \");\r\n\r\n    retVal = retVal.replace(\"Java Script\", \"JavaScript\");\r\n\r\n    return retVal;\r\n  }\r\n\r\n  static getTitleFromEnum(categoryEnum: { [name: number]: string }, topicId: number) {\r\n    if (categoryEnum[topicId]) {\r\n      return Utilities.humanifyJsName(categoryEnum[topicId]);\r\n    }\r\n\r\n    return \"General\";\r\n  }\r\n\r\n  static humanifyObject(sampVal: any) {\r\n    if (typeof sampVal === \"object\") {\r\n      sampVal = JSON.stringify(sampVal, null, 2);\r\n    } else {\r\n      sampVal = sampVal.toString();\r\n    }\r\n\r\n    sampVal = sampVal.trim();\r\n\r\n    if (sampVal.startsWith(\"[\") && sampVal.endsWith(\"]\")) {\r\n      sampVal = sampVal.substring(1, sampVal.length - 1);\r\n      sampVal = sampVal.replace(/\"/gi, \"\");\r\n    }\r\n\r\n    if (sampVal.startsWith(\"{\") && sampVal.endsWith(\"}\")) {\r\n      sampVal = sampVal.substring(1, sampVal.length - 1);\r\n    }\r\n\r\n    return sampVal;\r\n  }\r\n\r\n  static ensureLooksLikeSentence(name: string) {\r\n    if (name.length > 1) {\r\n      if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n        name = name[0].toUpperCase() + name.substring(1, name.length);\r\n      }\r\n    }\r\n\r\n    if (!name.endsWith(\".\")) {\r\n      name = name + \".\";\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  static dehumanify(val: string | boolean | number, humanify?: FieldValueHumanify) {\r\n    if (!humanify) {\r\n      return val;\r\n    }\r\n\r\n    return Utilities.dehumanifyMinecraftName(val);\r\n  }\r\n\r\n  static humanify(val: string | boolean | number | number[] | string[] | object, humanify?: FieldValueHumanify) {\r\n    if (humanify === FieldValueHumanify.none || val === undefined) {\r\n      return val;\r\n    }\r\n\r\n    if (humanify === FieldValueHumanify.general) {\r\n      return Utilities.humanifyObject(val);\r\n    }\r\n\r\n    if (Array.isArray(val)) {\r\n      let simpleStr = \"\";\r\n\r\n      for (let i = 0; i < val.length; i++) {\r\n        const data = (val as any)[i];\r\n\r\n        if (data !== undefined) {\r\n          // if the object looks complicated, just stringify it\r\n          if (typeof data === \"object\") {\r\n            return JSON.stringify(val);\r\n          }\r\n\r\n          if (simpleStr.length > 0) {\r\n            simpleStr += \", \";\r\n          }\r\n\r\n          simpleStr += String(i + 1) + \": \" + data.toString();\r\n        }\r\n      }\r\n\r\n      return simpleStr;\r\n    } else if (typeof val === \"object\") {\r\n      let simpleStr = \"\";\r\n      for (const key in val as any) {\r\n        const data = (val as any)[key];\r\n\r\n        if (data !== undefined) {\r\n          // if the object looks complicated, just stringify it\r\n          if (typeof data === \"object\") {\r\n            return JSON.stringify(val);\r\n          }\r\n\r\n          if (simpleStr.length > 0) {\r\n            simpleStr += \", \";\r\n          }\r\n          simpleStr += key + \": \" + data.toString();\r\n        }\r\n      }\r\n\r\n      return simpleStr;\r\n    }\r\n\r\n    if (Array.isArray(val)) {\r\n      return val;\r\n    }\r\n\r\n    return Utilities.humanifyMinecraftName(val);\r\n  }\r\n\r\n  static ensureFirstCharIsUpperCase(name: string) {\r\n    if (name.length > 1) {\r\n      if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n        name = name[0].toUpperCase() + name.substring(1, name.length);\r\n      }\r\n    }\r\n    return name;\r\n  }\r\n\r\n  static ensureFirstCharIsLowerCase(name: string) {\r\n    if (name.length > 1) {\r\n      if (name[0] >= \"A\" && name[0] <= \"Z\") {\r\n        name = name[0].toLowerCase() + name.substring(1, name.length);\r\n      }\r\n    }\r\n    return name;\r\n  }\r\n\r\n  static humanifyString(val: string, humanify?: FieldValueHumanify) {\r\n    if (!humanify || val === undefined) {\r\n      return val;\r\n    }\r\n\r\n    if (humanify === FieldValueHumanify.general) {\r\n      return Utilities.humanifyObject(val).toString();\r\n    }\r\n\r\n    return Utilities.humanifyMinecraftName(val) as string;\r\n  }\r\n\r\n  static getHumanifiedObjectNameNoSpaces(name: string | boolean | number) {\r\n    name = Utilities.getHumanifiedObjectName(name);\r\n    name = name.replace(/ /gi, \"\");\r\n\r\n    return name;\r\n  }\r\n\r\n  static getHumanifiedObjectName(name: string | boolean | number) {\r\n    if (typeof name !== \"string\") {\r\n      name = name.toString();\r\n    }\r\n\r\n    let firstColon = name.indexOf(\":\");\r\n\r\n    if (firstColon >= 0) {\r\n      name = name.substring(firstColon + 1);\r\n    }\r\n\r\n    name = Utilities.humanifyMinecraftName(name);\r\n\r\n    return name;\r\n  }\r\n\r\n  static replaceAllCaseInsensitive(str: string, find: string, replace: string) {\r\n    find = find.toLowerCase();\r\n    let strLower = str.toLowerCase();\r\n\r\n    let start = strLower.indexOf(find);\r\n\r\n    while (start >= 0) {\r\n      str = str.substring(0, start) + replace + str.substring(start + find.length);\r\n      strLower = str.toLowerCase();\r\n      start = strLower.indexOf(find, start + replace.length);\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  static addCommasToNumber(num: number): string {\r\n    if (typeof num !== \"number\" || isNaN(num)) {\r\n      return num.toString();\r\n    }\r\n\r\n    // Handle negative numbers\r\n    const isNegative = num < 0;\r\n    const absoluteNum = Math.abs(num);\r\n\r\n    // Split into integer and decimal parts\r\n    const parts = absoluteNum.toString().split(\".\");\r\n    const integerPart = parts[0];\r\n    const decimalPart = parts[1];\r\n\r\n    // Add commas to integer part\r\n    const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n\r\n    // Reconstruct the number\r\n    let result = formattedInteger;\r\n    if (decimalPart) {\r\n      result += \".\" + decimalPart;\r\n    }\r\n\r\n    return isNegative ? \"-\" + result : result;\r\n  }\r\n\r\n  static sanitizeJavascriptName(name: string) {\r\n    name = name.trim();\r\n\r\n    name = name.replace(/</gi, \"LessThan\");\r\n    name = name.replace(/>/gi, \"GreaterThan\");\r\n    name = name.replace(/=/gi, \"Equals\");\r\n    name = name.replace(/!/gi, \"Not\");\r\n    name = name.replace(/\\+/gi, \"Plus\");\r\n    name = name.replace(/[,\\-\\.' \\[\\]\\(\\)\\{\\}<>\\*\\\"\\?\\\\\\|#]/gi, \"\");\r\n\r\n    if (name.length > 0 && name[0] >= \"0\" && name[0] <= \"9\") {\r\n      name = \"_\" + name;\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  static wrapJavascriptNameIfNeeded(name: string, capitalizeFirst?: boolean) {\r\n    let trimName = name.trim();\r\n\r\n    trimName = trimName.replace(/[\\+]/gi, \"\");\r\n\r\n    if (trimName.startsWith('\"') && trimName.endsWith('\"')) {\r\n      return trimName;\r\n    }\r\n\r\n    let needsWrap = false;\r\n\r\n    trimName = this.sanitizeJavascriptName(trimName);\r\n\r\n    for (let i = 0; i < trimName.length; i++) {\r\n      if (\r\n        trimName[i] === \" \" ||\r\n        trimName[i] === \":\" ||\r\n        trimName[i] === \",\" ||\r\n        trimName[i] === \"(\" ||\r\n        trimName[i] === \")\" ||\r\n        trimName[i] === \".\" ||\r\n        trimName[i] === \"*\" ||\r\n        trimName[i] === '\"' ||\r\n        trimName[i] === \"'\" ||\r\n        trimName[i] === \"-\" ||\r\n        trimName[i] === \"#\" ||\r\n        trimName[i] === \"[\" ||\r\n        trimName[i] === \"]\"\r\n      ) {\r\n        needsWrap = true;\r\n      }\r\n    }\r\n\r\n    if (needsWrap) {\r\n      trimName = '\"' + trimName + '\"';\r\n    }\r\n\r\n    return trimName;\r\n  }\r\n\r\n  static javascriptifyName(name: string, capitalizeFirst?: boolean) {\r\n    let trimName = name.trim();\r\n\r\n    // Preserve single-character names if they are valid identifiers or special tokens like \"#\" (mcfunction comments)\r\n    if (trimName.length === 1 && /[a-zA-Z0-9_$#]/.test(trimName)) {\r\n      return trimName;\r\n    }\r\n\r\n    let retVal = \"\";\r\n    let capitalizeNext = capitalizeFirst === true;\r\n\r\n    for (let i = 0; i < trimName.length; i++) {\r\n      if (\r\n        trimName[i] === \" \" ||\r\n        trimName[i] === \"_\" ||\r\n        trimName[i] === \":\" ||\r\n        trimName[i] === \",\" ||\r\n        trimName[i] === \"(\" ||\r\n        trimName[i] === \")\" ||\r\n        trimName[i] === \".\" ||\r\n        trimName[i] === '\"' ||\r\n        trimName[i] === \"'\" ||\r\n        trimName[i] === \"+\" ||\r\n        trimName[i] === \"-\" ||\r\n        trimName[i] === \"#\" ||\r\n        trimName[i] === \"[\" ||\r\n        trimName[i] === \"]\"\r\n      ) {\r\n        capitalizeNext = true;\r\n      } else {\r\n        if (capitalizeNext) {\r\n          retVal += trimName[i].toUpperCase();\r\n\r\n          capitalizeNext = false;\r\n        } else {\r\n          retVal += trimName[i];\r\n        }\r\n      }\r\n    }\r\n\r\n    retVal = this.sanitizeJavascriptName(retVal);\r\n\r\n    return retVal;\r\n  }\r\n\r\n  static humanifyMinecraftNameRemoveNamespaces(name: string) {\r\n    const firstPeriod = name.indexOf(\".\");\r\n\r\n    if (firstPeriod >= 0) {\r\n      name = name.substring(firstPeriod + 1);\r\n    }\r\n\r\n    const firstColon = name.indexOf(\":\");\r\n    if (firstColon >= 0) {\r\n      name = name.substring(firstColon + 1);\r\n    }\r\n\r\n    name = Utilities.humanifyMinecraftName(name);\r\n\r\n    return name;\r\n  }\r\n\r\n  static consistentStringifyTrimmed(value: any): string {\r\n    const retVal = stableStringifyFunc(value);\r\n\r\n    if (retVal === undefined || retVal === null) {\r\n      return \"\";\r\n    }\r\n\r\n    return retVal;\r\n  }\r\n\r\n  static consistentStringify(value: any): string {\r\n    const retVal = stableStringifyFunc(value, {\r\n      space: 2,\r\n    });\r\n\r\n    if (retVal === undefined || retVal === null) {\r\n      return \"\";\r\n    }\r\n\r\n    return retVal;\r\n  }\r\n\r\n  static humanifyMinecraftName(name: string | boolean | number | undefined | null, doNotReverse?: boolean) {\r\n    if (name === undefined || name === null) {\r\n      return \"\";\r\n    }\r\n\r\n    if (typeof name === \"boolean\" || typeof name === \"number\") {\r\n      return name.toString();\r\n    }\r\n\r\n    if (name.endsWith(\".behavior\")) {\r\n      name = name.substring(0, name.length - 9);\r\n    } else if (name.endsWith(\".geo\")) {\r\n      name = name.substring(0, name.length - 4);\r\n    } else if (name.endsWith(\".entity\")) {\r\n      name = name.substring(0, name.length - 7);\r\n    }\r\n\r\n    name = name.replace(\"breeds_with.\", \"\");\r\n    name = name.replace(\"interactions.\", \"\");\r\n    name = name.replace(\"name_actions.\", \"\");\r\n    name = name.replace(\"tempt.\", \"\");\r\n    name = name.replace(\"triggers.\", \"\");\r\n    name = name.replace(\"math.\", \"\");\r\n    name = name.replace(\"query.\", \"\");\r\n    name = name.replace(\" on_\", \" \");\r\n\r\n    let parenStart = name.indexOf(\" (\");\r\n\r\n    let parenEnd = name.indexOf(\")\");\r\n\r\n    if (parenStart > 0 && parenEnd > parenStart) {\r\n      name = name.substring(0, parenStart) + name.substring(parenEnd + 1);\r\n    }\r\n\r\n    name = name.replace(/`/gi, \"\");\r\n\r\n    if (name.startsWith(\"on_\")) {\r\n      name = name.substring(3, name.length);\r\n    }\r\n\r\n    const colon = name.indexOf(\":\");\r\n\r\n    if (colon >= 0 && name.substring(0, colon) === \"minecraft\") {\r\n      name = name.substring(colon + 1);\r\n    }\r\n\r\n    const leftBracket = name.indexOf(\"[\");\r\n    const rightBracket = name.indexOf(\"]\");\r\n\r\n    if (leftBracket >= 0 && rightBracket > leftBracket) {\r\n      name = name.substring(0, leftBracket) + name.substring(rightBracket + 1);\r\n    }\r\n\r\n    if (name.endsWith(\".\")) {\r\n      name = name.substring(0, name.length - 1);\r\n    }\r\n\r\n    name = name.replace(/[_]/gi, \" \");\r\n\r\n    if (name.endsWith(\"_bit\")) {\r\n      name = name.substring(0, name.length - 4);\r\n    }\r\n\r\n    name = name.replace(/::/gi, \" \");\r\n    name = name.replace(/:/gi, \" \");\r\n\r\n    name = name.replace(\"SharedTypes \", \"\");\r\n\r\n    if (name.startsWith(\"Struct \") || name.startsWith(\"struct \")) {\r\n      name = name.substring(7);\r\n    }\r\n\r\n    if ((name.startsWith(\"Enum \") || name.startsWith(\"enum \")) && name.indexOf(\"num_property\") < 0) {\r\n      name = name.substring(5);\r\n    }\r\n\r\n    const lastPeriod = name.indexOf(\".\");\r\n\r\n    if (doNotReverse) {\r\n      if (lastPeriod >= 4) {\r\n        name = name.substring(0, lastPeriod) + \": \" + name.substring(lastPeriod + 1);\r\n      }\r\n    } else {\r\n      if (lastPeriod >= 4) {\r\n        name = name.substring(lastPeriod + 1) + \" \" + name.substring(0, lastPeriod);\r\n      }\r\n    }\r\n\r\n    /*\r\n    if (name.length > 1) {\r\n      if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n        name = name[0].toUpperCase() + name.substring(1, name.length);\r\n      }\r\n    }*/\r\n\r\n    let lastCharWasSpace = false;\r\n\r\n    for (let i = 0; i < name.length; i++) {\r\n      if (name[i] === \" \") {\r\n        lastCharWasSpace = true;\r\n      } else {\r\n        if (\r\n          (lastCharWasSpace || i === 0) &&\r\n          name[i] >= \"a\" &&\r\n          name[i] <= \"z\" &&\r\n          (i === name.length - 1 || (name[i + 1] >= \"a\" && name[i] <= \"z\"))\r\n        ) {\r\n          name = name.substring(0, i) + name[i].toUpperCase() + name.substring(i + 1);\r\n        }\r\n        lastCharWasSpace = false;\r\n      }\r\n    }\r\n\r\n    name = name.trim();\r\n\r\n    return name;\r\n  }\r\n\r\n  static lowerCaseStartOfString(name: string) {\r\n    if (name.length <= 0) {\r\n      return name;\r\n    }\r\n\r\n    if (name.length <= 1) {\r\n      return name.toLowerCase();\r\n    }\r\n\r\n    if (name.startsWith(\"APIs\")) {\r\n      return \"apis\" + name.substring(4);\r\n    }\r\n\r\n    if (name.startsWith(\"PNGJPG\")) {\r\n      return \"pngjpg\" + name.substring(6);\r\n    }\r\n\r\n    if (name.startsWith(\"TGA\")) {\r\n      return \"tga\" + name.substring(3);\r\n    }\r\n\r\n    if (name.charAt(1) < \"A\" || name.charAt(1) > \"Z\") {\r\n      return name.charAt(0).toLowerCase() + name.substring(1);\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  static convertToJsonKey(name: string) {\r\n    if (!name) {\r\n      return name;\r\n    }\r\n\r\n    const cache = javascriptStringTranslations.get(name);\r\n\r\n    if (cache) {\r\n      return cache;\r\n    }\r\n\r\n    let val = Utilities.lowerCaseStartOfString(Utilities.javascriptifyName(name, false));\r\n\r\n    javascriptStringTranslations.set(name, val);\r\n\r\n    return val;\r\n  }\r\n\r\n  static dehumanifyMinecraftName(name: string | boolean | number) {\r\n    if (!name || typeof name === \"boolean\" || typeof name === \"number\") {\r\n      return name;\r\n    }\r\n\r\n    // if this is already a technical name, return;\r\n    if (name.indexOf(\":\") >= 0) {\r\n      return name;\r\n    }\r\n\r\n    name = name.toLowerCase();\r\n\r\n    name = name.replace(/ /gi, \"_\");\r\n    name = \"minecraft:\" + name;\r\n\r\n    return name;\r\n  }\r\n\r\n  static stringFormat(templateString: string, ...vals: any[]) {\r\n    var args = arguments;\r\n    return arguments[0].replace(/{(\\d+)}/g, function (content: any, interior: string) {\r\n      try {\r\n        const num = parseInt(interior);\r\n\r\n        if (!isNaN(num)) {\r\n          return args[num + 1] !== undefined ? args[num + 1] : content;\r\n        }\r\n      } catch (e) {}\r\n\r\n      return content;\r\n    });\r\n  }\r\n\r\n  static convertToHexString(byteArray: number[]) {\r\n    return Array.from(byteArray, function (byte) {\r\n      return (\"0\" + (byte & 0xff).toString(16)).slice(-2);\r\n    }).join(\"\");\r\n  }\r\n\r\n  static countSignificantLines(content: string) {\r\n    if (content.length <= 0) {\r\n      return 0;\r\n    }\r\n    let lineCount = 1;\r\n    let curStart = 0;\r\n    let nextNewline = content.indexOf(\"\\n\");\r\n\r\n    while (nextNewline >= curStart) {\r\n      let curContent = content.substring(curStart, nextNewline).trim();\r\n\r\n      if (curContent.length > 1) {\r\n        lineCount++;\r\n      }\r\n      curStart = nextNewline + 1;\r\n      nextNewline = content.indexOf(\"\\n\", curStart);\r\n    }\r\n\r\n    return lineCount;\r\n  }\r\n\r\n  static stripLinesContaining(content: string, lineContains: string) {\r\n    let i = content.indexOf(lineContains);\r\n\r\n    while (i >= 0) {\r\n      let prevNewLine = content.lastIndexOf(\"\\n\", i);\r\n      if (prevNewLine < 0) {\r\n        prevNewLine = 0;\r\n      }\r\n\r\n      let nextNewLine = content.indexOf(\"\\n\", i);\r\n\r\n      if (nextNewLine < 0) {\r\n        nextNewLine = content.length;\r\n      }\r\n\r\n      content = content.substring(0, prevNewLine) + content.substring(nextNewLine + 1, content.length);\r\n\r\n      i = content.indexOf(lineContains, prevNewLine);\r\n    }\r\n\r\n    return content;\r\n  }\r\n\r\n  static stripWithoutWhitespace = () => \"\";\r\n  static stripWithWhitespace = (str: string, start: number | undefined, end: number | undefined) =>\r\n    str.slice(start, end).replace(/\\S/g, \" \");\r\n\r\n  static replaceJsonValue(jsonContent: string, attributeName: string, newValue: string) {\r\n    let nextAttribute = jsonContent.indexOf('\"' + attributeName + '\":');\r\n\r\n    while (nextAttribute >= 0) {\r\n      const subsequentOpenQuote = jsonContent.indexOf('\"', nextAttribute + attributeName.length + 3);\r\n\r\n      if (\r\n        subsequentOpenQuote > nextAttribute + attributeName.length + 2 &&\r\n        subsequentOpenQuote < nextAttribute + attributeName.length + 7\r\n      ) {\r\n        const subsequentEndQuote = jsonContent.indexOf('\"', subsequentOpenQuote + 1);\r\n\r\n        if (subsequentEndQuote > subsequentOpenQuote) {\r\n          jsonContent =\r\n            jsonContent.substring(0, subsequentOpenQuote + 1) + newValue + jsonContent.substring(subsequentEndQuote);\r\n        }\r\n      }\r\n\r\n      nextAttribute = jsonContent.indexOf('\"' + attributeName + '\":', nextAttribute + attributeName.length + 2);\r\n    }\r\n\r\n    return jsonContent;\r\n  }\r\n\r\n  public static makeJsonVersionAgnostic(jsonContent: string) {\r\n    jsonContent = Utilities.replaceJsonValue(jsonContent, \"generatorVersion\", \"TESTSUB\");\r\n    jsonContent = Utilities.replaceJsonValue(jsonContent, \"uuid\", \"TESTSUB\");\r\n\r\n    return jsonContent;\r\n  }\r\n\r\n  static isEscaped(jsonString: string, quotePosition: number) {\r\n    let index = quotePosition - 1;\r\n    let backslashCount = 0;\r\n\r\n    while (jsonString[index] === \"\\\\\") {\r\n      index -= 1;\r\n      backslashCount += 1;\r\n    }\r\n\r\n    return Boolean(backslashCount % 2);\r\n  }\r\n\r\n  static staticCompare(a: string, b: string) {\r\n    return a < b ? -1 : a > b ? 1 : 0;\r\n  }\r\n\r\n  static fixJsonContent(jsonString: string, { whitespace = true, trailingCommas = false } = {}) {\r\n    if (typeof jsonString !== \"string\") {\r\n      throw new TypeError(`Expected argument \\`jsonString\\` to be a \\`string\\`, got \\`${typeof jsonString}\\``);\r\n    }\r\n\r\n    jsonString = jsonString.trim();\r\n\r\n    const strip = whitespace ? Utilities.stripWithWhitespace : Utilities.stripWithoutWhitespace;\r\n\r\n    let isInsideString = false;\r\n    let isInsideComment: boolean | symbol = false;\r\n    let offset = 0;\r\n    let buffer = \"\";\r\n    let result = \"\";\r\n    let commaIndex = -1;\r\n\r\n    for (let index = 0; index < jsonString.length; index++) {\r\n      const currentCharacter = jsonString[index];\r\n      const nextCharacter = jsonString[index + 1];\r\n\r\n      if (!isInsideComment && currentCharacter === '\"') {\r\n        // Enter or exit string\r\n        const escaped = Utilities.isEscaped(jsonString, index);\r\n        if (!escaped) {\r\n          isInsideString = !isInsideString;\r\n        }\r\n      }\r\n\r\n      if (isInsideString) {\r\n        // fix control characters inside of strings, if they exist\r\n        if (currentCharacter === \"\\r\" || currentCharacter === \"\\n\" || currentCharacter === \"\\t\") {\r\n          jsonString = jsonString.substring(0, index) + \" \" + jsonString.substring(index + 1);\r\n        }\r\n        continue;\r\n      }\r\n\r\n      if (!isInsideComment && currentCharacter + nextCharacter === \"//\") {\r\n        // Enter single-line comment\r\n        buffer += jsonString.slice(offset, index);\r\n        offset = index;\r\n        isInsideComment = singleComment;\r\n        index++;\r\n      } else if (isInsideComment === singleComment && currentCharacter + nextCharacter === \"\\r\\n\") {\r\n        // Exit single-line comment via \\r\\n\r\n        index++;\r\n        isInsideComment = false;\r\n        buffer += strip(jsonString, offset, index);\r\n        offset = index;\r\n        continue;\r\n      } else if (isInsideComment === singleComment && currentCharacter === \"\\n\") {\r\n        // Exit single-line comment via \\n\r\n        isInsideComment = false;\r\n        buffer += strip(jsonString, offset, index);\r\n        offset = index;\r\n      } else if (!isInsideComment && currentCharacter + nextCharacter === \"/*\") {\r\n        // Enter multiline comment\r\n        buffer += jsonString.slice(offset, index);\r\n        offset = index;\r\n        isInsideComment = multiComment;\r\n        index++;\r\n        continue;\r\n      } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === \"*/\") {\r\n        // Exit multiline comment\r\n        index++;\r\n        isInsideComment = false;\r\n        buffer += strip(jsonString, offset, index + 1);\r\n        offset = index + 1;\r\n        continue;\r\n      } else if (trailingCommas && !isInsideComment) {\r\n        if (commaIndex !== -1) {\r\n          if (currentCharacter === \"}\" || currentCharacter === \"]\") {\r\n            // Strip trailing comma\r\n            buffer += jsonString.slice(offset, index);\r\n            result += strip(buffer, 0, 1) + buffer.slice(1);\r\n            buffer = \"\";\r\n            offset = index;\r\n            commaIndex = -1;\r\n          } else if (\r\n            currentCharacter !== \" \" &&\r\n            currentCharacter !== \"\\t\" &&\r\n            currentCharacter !== \"\\r\" &&\r\n            currentCharacter !== \"\\n\"\r\n          ) {\r\n            // Hit non-whitespace following a comma; comma is not trailing\r\n            buffer += jsonString.slice(offset, index);\r\n            offset = index;\r\n            commaIndex = -1;\r\n          }\r\n        } else if (currentCharacter === \",\") {\r\n          // Flush buffer prior to this point, and save new comma index\r\n          result += buffer + jsonString.slice(offset, index);\r\n          buffer = \"\";\r\n          offset = index;\r\n          commaIndex = index;\r\n        }\r\n      }\r\n    }\r\n\r\n    let results =\r\n      result +\r\n      buffer +\r\n      (isInsideComment ? strip(jsonString.slice(offset), undefined, undefined) : jsonString.slice(offset));\r\n\r\n    results = results.replace(/,(\\s*)]/g, \"]\"); // [\"a\", \"b\", ] => [\"a\", \"b\"]\r\n    results = results.replace(/,(\\s*)}/g, \"}\"); // { \"foo\": \"bar\", } => { \"foo\": \"bar\"}\r\n\r\n    return results;\r\n  }\r\n\r\n  /**\r\n   * Fixes JSON content for use with comment-json parser.\r\n   * Unlike fixJsonContent(), this function:\r\n   * - PRESERVES comments (// and /* *\\/)\r\n   * - Fixes trailing commas\r\n   * - Fixes control characters inside strings\r\n   *\r\n   * Use this when you want to parse JSON with comment-json while still\r\n   * handling common JSON issues like trailing commas.\r\n   *\r\n   * @param jsonString The JSON string to fix\r\n   * @returns Fixed JSON string with comments preserved\r\n   */\r\n  static fixJsonContentForCommentJson(jsonString: string): string {\r\n    if (typeof jsonString !== \"string\") {\r\n      throw new TypeError(`Expected argument \\`jsonString\\` to be a \\`string\\`, got \\`${typeof jsonString}\\``);\r\n    }\r\n\r\n    jsonString = jsonString.trim();\r\n\r\n    let isInsideString = false;\r\n    let isInsideComment: boolean | symbol = false;\r\n\r\n    // First pass: fix control characters inside strings\r\n    for (let index = 0; index < jsonString.length; index++) {\r\n      const currentCharacter = jsonString[index];\r\n      const nextCharacter = jsonString[index + 1];\r\n\r\n      if (!isInsideComment && currentCharacter === '\"') {\r\n        const escaped = Utilities.isEscaped(jsonString, index);\r\n        if (!escaped) {\r\n          isInsideString = !isInsideString;\r\n        }\r\n      }\r\n\r\n      if (isInsideString) {\r\n        // fix control characters inside of strings, if they exist\r\n        if (currentCharacter === \"\\r\" || currentCharacter === \"\\n\" || currentCharacter === \"\\t\") {\r\n          jsonString = jsonString.substring(0, index) + \" \" + jsonString.substring(index + 1);\r\n        }\r\n        continue;\r\n      }\r\n\r\n      // Track comment state so we don't break comment content\r\n      if (!isInsideComment && currentCharacter + nextCharacter === \"//\") {\r\n        isInsideComment = singleComment;\r\n        index++;\r\n      } else if (\r\n        isInsideComment === singleComment &&\r\n        (currentCharacter === \"\\n\" || currentCharacter + nextCharacter === \"\\r\\n\")\r\n      ) {\r\n        isInsideComment = false;\r\n      } else if (!isInsideComment && currentCharacter + nextCharacter === \"/*\") {\r\n        isInsideComment = multiComment;\r\n        index++;\r\n      } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === \"*/\") {\r\n        isInsideComment = false;\r\n        index++;\r\n      }\r\n    }\r\n\r\n    // Second pass: remove trailing commas (comment-json handles comments, but not trailing commas)\r\n    // Use simple patterns without nested quantifiers to avoid exponential backtracking\r\n    // First handle simple cases without comments between comma and bracket\r\n    jsonString = jsonString.replace(/,(\\s*)]/g, \"$1]\");\r\n    jsonString = jsonString.replace(/,(\\s*)}/g, \"$1}\");\r\n\r\n    // Handle cases with single-line comments between comma and bracket\r\n    // Use a non-capturing group with a single quantifier to avoid nested quantifier backtracking\r\n    // Match: comma, then any mix of whitespace/comments, then closing bracket\r\n    jsonString = jsonString.replace(/,(?=[\\t\\n ]*(?:\\/\\/[^\\n]*\\n[\\t\\n ]*)*])/g, \"\");\r\n    jsonString = jsonString.replace(/,(?=[\\t\\n ]*(?:\\/\\/[^\\n]*\\n[\\t\\n ]*)*})/g, \"\");\r\n\r\n    // Handle cases with block comments between comma and bracket\r\n    // Use lookahead with a block comment pattern that does not allow `*/` inside the body\r\n    // Pattern `(?:[^*]|\\*(?!\\/))*` matches any char except `*`, or `*` not followed by `/`\r\n    jsonString = jsonString.replace(/,(?=[\\t\\n ]*(?:\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/[\\t\\n ]*)*])/g, \"\");\r\n    jsonString = jsonString.replace(/,(?=[\\t\\n ]*(?:\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/[\\t\\n ]*)*})/g, \"\");\r\n\r\n    return jsonString;\r\n  }\r\n\r\n  static setIsDebug(boolVal: boolean) {\r\n    Utilities._isDebug = boolVal;\r\n  }\r\n\r\n  static getBaseUrl(url: string) {\r\n    if (url.length < 8) {\r\n      return url;\r\n    }\r\n\r\n    const slashIndex = url.indexOf(\"/\", 9);\r\n\r\n    if (slashIndex < 0) {\r\n      return url;\r\n    }\r\n\r\n    return url.substring(0, slashIndex);\r\n  }\r\n\r\n  static getDateStr(date: Date) {\r\n    let dateStr = Utilities.frontPadToLength(date.getFullYear(), 4, \"0\");\r\n\r\n    dateStr += Utilities.frontPadToLength(date.getMonth() + 1, 2, \"0\");\r\n    dateStr += Utilities.frontPadToLength(date.getDate(), 2, \"0\");\r\n    dateStr += Utilities.frontPadToLength(date.getHours(), 2, \"0\");\r\n    dateStr += Utilities.frontPadToLength(date.getMinutes(), 2, \"0\");\r\n    dateStr += Utilities.frontPadToLength(date.getSeconds(), 2, \"0\");\r\n\r\n    return dateStr;\r\n  }\r\n\r\n  static getDateFromStr(dateStr: string) {\r\n    if (!Utilities.isNumeric(dateStr) || dateStr.length !== 14) {\r\n      throw new Error(\"Improperly formatted date string: \" + dateStr);\r\n    }\r\n\r\n    const year = parseInt(dateStr.substring(0, 4)),\r\n      month = parseInt(dateStr.substring(4, 6)),\r\n      day = parseInt(dateStr.substring(6, 8)),\r\n      hours = parseInt(dateStr.substring(8, 10)),\r\n      minutes = parseInt(dateStr.substring(10, 12)),\r\n      seconds = parseInt(dateStr.substring(12, 14));\r\n\r\n    Log.assert(year >= 2022, \"Invalid year: \" + dateStr);\r\n    Log.assert(month >= 1 && month <= 12, \"Invalid month: \" + dateStr);\r\n    Log.assert(day >= 0 && day <= 31, \"Invalid day: \" + dateStr);\r\n    Log.assert(hours >= 0 && hours <= 23, \"Invalid hours: \" + dateStr);\r\n    Log.assert(minutes >= 0 && minutes <= 59, \"Invalid minutes: \" + dateStr);\r\n    Log.assert(seconds >= 0 && seconds <= 59, \"Invalid seconds: \" + dateStr);\r\n\r\n    return new Date(year, month - 1, day, hours, minutes, seconds);\r\n  }\r\n\r\n  static monthNames: string[] = [\r\n    \"January\",\r\n    \"February\",\r\n    \"March\",\r\n    \"April\",\r\n    \"May\",\r\n    \"June\",\r\n    \"July\",\r\n    \"August\",\r\n    \"September\",\r\n    \"October\",\r\n    \"November\",\r\n    \"December\",\r\n  ];\r\n\r\n  static monthShortNames: string[] = [\r\n    \"Jan\",\r\n    \"Feb\",\r\n    \"Mar\",\r\n    \"Apr\",\r\n    \"May\",\r\n    \"Jun\",\r\n    \"Jul\",\r\n    \"Aug\",\r\n    \"Sep\",\r\n    \"Oct\",\r\n    \"Nov\",\r\n    \"Dec\",\r\n  ];\r\n\r\n  static lengthOfDictionary(d: any) {\r\n    let c = 0;\r\n\r\n    for (const i in d) {\r\n      if (i) {\r\n        ++c;\r\n      }\r\n    }\r\n\r\n    return c;\r\n  }\r\n\r\n  static makeSafeForJson(content: string) {\r\n    content = content.replace(/\\\\/g, \"/\");\r\n    content = content.replace(/\"/gi, \"'\"); // this isn't the full way to do it, but for now...\r\n\r\n    return content;\r\n  }\r\n\r\n  static isAlphaNumeric(candidate: string) {\r\n    for (let i = 0; i < candidate.length; i++) {\r\n      const charCode = candidate[i];\r\n\r\n      if (\r\n        !(\r\n          (charCode >= \"0\" && charCode <= \"9\") ||\r\n          (charCode >= \"a\" && charCode <= \"z\") ||\r\n          (charCode >= \"A\" && charCode <= \"Z\")\r\n        )\r\n      ) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public static getJsonObject(contents: string): any | undefined {\r\n    let jsonObject = undefined;\r\n\r\n    contents = Utilities.fixJsonContent(contents);\r\n\r\n    try {\r\n      jsonObject = JSON.parse(contents);\r\n    } catch (e: any) {\r\n      Log.fail(\"Could not parse JSON: \" + e.message);\r\n    }\r\n\r\n    return jsonObject;\r\n  }\r\n\r\n  static appendErrors(source: IErrorable, add: IErrorable, context?: string) {\r\n    if (!add.isInErrorState) {\r\n      return;\r\n    }\r\n\r\n    source.isInErrorState = true;\r\n\r\n    if (add.errorMessages) {\r\n      if (source.errorMessages === undefined) {\r\n        source.errorMessages = [];\r\n      }\r\n\r\n      for (const err of add.errorMessages) {\r\n        let newContext = undefined;\r\n\r\n        if (context) {\r\n          newContext = err.context ? context + \": \" + err.context : context;\r\n        } else {\r\n          newContext = err.context;\r\n        }\r\n\r\n        source.errorMessages.push({\r\n          message: err.message,\r\n          context: newContext,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  static isNumeric(candidate: string) {\r\n    for (let i = 0; i < candidate.length; i++) {\r\n      const charCode = candidate[i];\r\n\r\n      if ((charCode < \"0\" || charCode > \"9\") && charCode !== \".\" && (i > 0 || charCode !== \"-\")) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static isNumericIsh(candidate: string) {\r\n    for (let i = 0; i < candidate.length; i++) {\r\n      const charCode = candidate[i];\r\n\r\n      if (\r\n        (charCode < \"0\" || charCode > \"9\") &&\r\n        charCode !== \"e\" &&\r\n        charCode !== \"+\" &&\r\n        charCode !== \",\" &&\r\n        charCode !== \".\" &&\r\n        charCode !== \"-\"\r\n      ) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static removeQuotes(candidate: string) {\r\n    candidate = candidate.trim();\r\n\r\n    if (candidate.startsWith('\"')) {\r\n      candidate = candidate.substring(1);\r\n    } else if (candidate.startsWith('\"')) {\r\n      candidate = candidate.substring(0, candidate.length - 1);\r\n    }\r\n\r\n    return candidate;\r\n  }\r\n\r\n  static normalizeVersionString(candidate: string) {\r\n    candidate = candidate.replace(/v/gi, \"\").trim();\r\n\r\n    candidate = candidate.trim();\r\n\r\n    if (candidate.startsWith(\".\")) {\r\n      candidate = \"0\" + candidate;\r\n    }\r\n\r\n    if (candidate.endsWith(\".\")) {\r\n      candidate = candidate.substring(0, candidate.length - 1);\r\n    }\r\n\r\n    return candidate;\r\n  }\r\n\r\n  static isVersionString(candidate: string) {\r\n    for (let i = 0; i < candidate.length; i++) {\r\n      const charCode = candidate[i];\r\n\r\n      if ((charCode < \"0\" || charCode > \"9\") && charCode !== \".\" && charCode !== \"v\") {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static isAlpha(candidate: string) {\r\n    for (let i = 0; i < candidate.length; i++) {\r\n      const charCode = candidate[i];\r\n\r\n      if (!((charCode >= \"a\" && charCode <= \"z\") || (charCode >= \"A\" && charCode <= \"Z\"))) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static shallowCloneArray(source: any[]) {\r\n    const newArr: any[] = new Array(source.length);\r\n\r\n    for (let i = 0; i < source.length; i++) {\r\n      newArr[i] = source[i];\r\n    }\r\n\r\n    return newArr;\r\n  }\r\n\r\n  static uint8ArrayToBase64(bytes: Uint8Array) {\r\n    let binary = \"\";\r\n\r\n    const len = bytes.byteLength;\r\n\r\n    for (var i = 0; i < len; i++) {\r\n      binary += String.fromCharCode(bytes[i]);\r\n    }\r\n\r\n    if (\r\n      CreatorToolsHost.isWeb ||\r\n      CreatorToolsHost.hostType === HostType.vsCodeMainWeb ||\r\n      CreatorToolsHost.hostType === HostType.vsCodeWebService\r\n    ) {\r\n      return btoa(binary);\r\n    }\r\n\r\n    // See arrayBufferToBase64 below \u2014 `Buffer.from(string)` defaults to\r\n    // UTF-8 and will corrupt any byte >= 0x80. Pass the Uint8Array directly.\r\n    return Buffer.from(bytes).toString(\"base64\");\r\n  }\r\n\r\n  static arrayBufferToBase64(buffer: ArrayBuffer) {\r\n    let binary = \"\";\r\n    const bytes = new Uint8Array(buffer);\r\n\r\n    const len = bytes.byteLength;\r\n\r\n    for (var i = 0; i < len; i++) {\r\n      binary += String.fromCharCode(bytes[i]);\r\n    }\r\n\r\n    if (\r\n      CreatorToolsHost.isWeb ||\r\n      CreatorToolsHost.hostType === HostType.vsCodeMainWeb ||\r\n      CreatorToolsHost.hostType === HostType.vsCodeWebService\r\n    ) {\r\n      return btoa(binary);\r\n    }\r\n\r\n    // IMPORTANT: `Buffer.from(str)` defaults to UTF-8, which corrupts any\r\n    // byte >= 0x80 (turning it into a 0xC3 0xXX two-byte sequence). We've\r\n    // built `binary` via `String.fromCharCode(byte)` so each char already\r\n    // holds a single byte value 0..255 \u2014 pass the Uint8Array directly to\r\n    // avoid the UTF-8 round-trip.\r\n    return Buffer.from(bytes).toString(\"base64\");\r\n  }\r\n\r\n  static base64ToArrayBuffer(base64buffer: string) {\r\n    const start = base64buffer.indexOf(\";base64,\");\r\n\r\n    if (start > 0 && start < 50) {\r\n      base64buffer = base64buffer.substring(start + 8);\r\n    }\r\n\r\n    const binary = atob(base64buffer);\r\n\r\n    const arrayBuffer = new ArrayBuffer(binary.length);\r\n    const bytes = new Uint8Array(arrayBuffer);\r\n\r\n    const len = binary.length;\r\n\r\n    for (var i = 0; i < len; i++) {\r\n      bytes[i] = binary.charCodeAt(i);\r\n    }\r\n\r\n    return arrayBuffer;\r\n  }\r\n\r\n  static base64ToUint8Array(base64buffer: string) {\r\n    const start = base64buffer.indexOf(\";base64,\");\r\n\r\n    if (start > 0 && start < 50) {\r\n      base64buffer = base64buffer.substring(start + 8);\r\n    }\r\n\r\n    const binary = atob(base64buffer);\r\n\r\n    const arrayBuffer = new ArrayBuffer(binary.length);\r\n    const bytes = new Uint8Array(arrayBuffer);\r\n\r\n    const len = binary.length;\r\n\r\n    for (var i = 0; i < len; i++) {\r\n      bytes[i] = binary.charCodeAt(i);\r\n    }\r\n\r\n    return bytes;\r\n  }\r\n\r\n  // UTF8 related string functions adapted from StrangelyTyped/StringView.\r\n  static _utf8ReadChar = function (\r\n    charStruct: { bytesRead: number; charVal: number },\r\n    buf: DataView,\r\n    readPos: number,\r\n    maxBytes: number\r\n  ) {\r\n    const firstByte = buf.getUint8(readPos);\r\n\r\n    charStruct.bytesRead = 1;\r\n    charStruct.charVal = 0;\r\n\r\n    if (firstByte & 0x80) {\r\n      var numBytes = 0;\r\n      var aByte = firstByte;\r\n\r\n      while (aByte & 0x80) {\r\n        numBytes++;\r\n        aByte <<= 1;\r\n      }\r\n      if (numBytes === 1) {\r\n        charStruct.charVal = Utilities.replacementChar;\r\n        return;\r\n      }\r\n      if (numBytes > maxBytes) {\r\n        charStruct.charVal = Utilities.replacementChar;\r\n        return;\r\n      }\r\n\r\n      //2 bytes means 3 bits reserved for UTF8 byte encoding, 5 bytes remaining for codepoint, and so on\r\n      charStruct.charVal = firstByte & (0xff >> (numBytes + 1));\r\n\r\n      for (var i = 1; i < numBytes; i++) {\r\n        aByte = buf.getUint8(readPos + i);\r\n\r\n        //0xC0 should isolate the continuation flag which should be 0x80\r\n        if ((aByte & 0xc0) !== 0x80) {\r\n          // Use Log.verbose instead of console.error - this is expected when parsing binary\r\n          // data that contains non-UTF8 byte sequences (common in NBT files, LevelDB, etc.)\r\n          Log.verbose(\r\n            \"UTF-8 read - attempted to read \" + numBytes + \" byte character, found non-continuation at byte \" + i\r\n          );\r\n          charStruct.charVal = Utilities.replacementChar;\r\n\r\n          charStruct.bytesRead = 1;\r\n          return;\r\n        }\r\n\r\n        charStruct.charVal <<= 6;\r\n        charStruct.charVal |= aByte & 0x3f;\r\n\r\n        if (i === 1) {\r\n          const rshift = 8 - (numBytes + 1) - 1;\r\n          if (charStruct.charVal >> rshift === 0) {\r\n            charStruct.charVal = Utilities.replacementChar;\r\n            charStruct.bytesRead = 1;\r\n            return;\r\n          }\r\n        }\r\n        charStruct.bytesRead++;\r\n      }\r\n\r\n      if (charStruct.charVal > 0x10ffff) {\r\n        // Use Log.verbose instead of console.error - recoverable issue\r\n        Log.verbose(\"UTF-8 read - found illegally high code point \" + charStruct.charVal);\r\n        charStruct.charVal = Utilities.replacementChar;\r\n        charStruct.bytesRead = 1;\r\n        return;\r\n      }\r\n    } else {\r\n      charStruct.charVal = firstByte;\r\n    }\r\n  };\r\n\r\n  static canonicalizeId(id: string) {\r\n    return id.toLowerCase();\r\n  }\r\n\r\n  static readStringUTF8(buf: DataView, byteOffset: number, bytesToRead: number) {\r\n    const nullTerm = typeof bytesToRead === \"undefined\";\r\n    var readPos = byteOffset || 0;\r\n\r\n    if (!nullTerm && readPos + bytesToRead > buf.byteLength) {\r\n      throw new Error(\"Attempted to read \" + (readPos + bytesToRead - buf.byteLength) + \" bytes past end of buffer\");\r\n    }\r\n\r\n    var str = \"\";\r\n\r\n    const charStruct: { bytesRead: number; charVal: number } = { bytesRead: 0, charVal: 0 };\r\n\r\n    while (readPos < buf.byteLength && (nullTerm || bytesToRead > readPos - byteOffset)) {\r\n      Utilities._utf8ReadChar(\r\n        charStruct,\r\n        buf,\r\n        readPos,\r\n        nullTerm ? buf.byteLength - (readPos + byteOffset) : bytesToRead - (readPos - byteOffset)\r\n      );\r\n      readPos += charStruct.bytesRead;\r\n\r\n      if (nullTerm && !charStruct.charVal) {\r\n        break;\r\n      }\r\n      str += String.fromCharCode(charStruct.charVal);\r\n    }\r\n    return {\r\n      str: str,\r\n      byteLength: readPos - byteOffset,\r\n    };\r\n  }\r\n\r\n  static readStringASCII(buf: DataView, byteOffset: number, bytesToRead: number) {\r\n    var str = \"\";\r\n    var byteLength = 0;\r\n    byteOffset = byteOffset || 0;\r\n    var nullTerm = false;\r\n\r\n    if (typeof bytesToRead === \"undefined\") {\r\n      nullTerm = true;\r\n      bytesToRead = buf.byteLength - buf.byteOffset;\r\n    }\r\n\r\n    var charCode;\r\n\r\n    for (var i = 0; i < bytesToRead; i++) {\r\n      charCode = buf.getUint8(i + byteOffset);\r\n      if (charCode === 0 && nullTerm) {\r\n        break;\r\n      }\r\n\r\n      str += String.fromCharCode(charCode);\r\n      byteLength++;\r\n    }\r\n\r\n    return {\r\n      str: str,\r\n      byteLength: byteLength + (nullTerm ? 1 : 0),\r\n    };\r\n  }\r\n\r\n  static readStringASCIIBuffer(buf: Uint8Array, byteOffset: number, bytesToRead: number) {\r\n    var str = \"\";\r\n\r\n    byteOffset = byteOffset || 0;\r\n\r\n    var nullTerm = false;\r\n\r\n    if (typeof bytesToRead === \"undefined\") {\r\n      nullTerm = true;\r\n      bytesToRead = buf.byteLength - buf.byteOffset;\r\n    }\r\n\r\n    var charCode;\r\n\r\n    for (var i = 0; i < bytesToRead; i++) {\r\n      charCode = buf[i + byteOffset];\r\n      if (charCode === 0 && nullTerm) {\r\n        break;\r\n      }\r\n\r\n      str += String.fromCharCode(charCode);\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  static _createUtf8Char(charCode: number, arr: number[]) {\r\n    if (charCode < 0x80) {\r\n      arr.push(charCode);\r\n    } else {\r\n      const limits = [0x7f, 0x07ff, 0xffff, 0x1fffff];\r\n      let i = 0;\r\n\r\n      while (true) {\r\n        i++;\r\n\r\n        if (i === limits.length) {\r\n          Utilities._createUtf8Char(Utilities.replacementChar, arr);\r\n\r\n          return;\r\n        }\r\n\r\n        if (charCode <= limits[i]) {\r\n          i += 1;\r\n\r\n          var aByte = 0;\r\n          var j;\r\n\r\n          for (j = 0; j < i; j++) {\r\n            aByte <<= 1;\r\n            aByte |= 1;\r\n          }\r\n\r\n          aByte <<= 8 - i;\r\n\r\n          aByte |= charCode >> (6 * (i - 1));\r\n          arr.push(aByte);\r\n\r\n          for (j = 1; j < i; j++) {\r\n            aByte = 0x80;\r\n\r\n            aByte |= (charCode >> (6 * (i - (j + 1)))) & 0xbf;\r\n            arr.push(aByte);\r\n          }\r\n\r\n          return;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static convertStringToBytes(str: string, encoding: string) {\r\n    if (encoding === \"UTF-8\") {\r\n      const arr: number[] = [];\r\n\r\n      for (let i = 0; i < str.length; i++) {\r\n        Utilities._createUtf8Char(str.charCodeAt(i), arr);\r\n      }\r\n\r\n      return arr;\r\n    } else if (encoding === \"ASCII\") {\r\n      const arr = [];\r\n\r\n      for (let i = 0; i < str.length; i++) {\r\n        let chr = str.charCodeAt(i);\r\n\r\n        if (chr > 255) {\r\n          chr = \"?\".charCodeAt(0);\r\n        }\r\n\r\n        arr.push(chr);\r\n      }\r\n\r\n      return arr;\r\n    }\r\n\r\n    throw new Error();\r\n  }\r\n\r\n  static ensureNotStartsWithSlash(pathSegment: string) {\r\n    while (pathSegment.startsWith(\"/\")) {\r\n      pathSegment = pathSegment.substring(1);\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static ensureStartsWithSlash(pathSegment: string) {\r\n    if (!pathSegment.startsWith(\"/\")) {\r\n      pathSegment = \"/\" + pathSegment;\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static ensureEndsWithSlash(pathSegment: string) {\r\n    if (!pathSegment.endsWith(\"/\")) {\r\n      pathSegment += \"/\";\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static ensureNotEndsWithSlash(pathSegment: string) {\r\n    while (pathSegment.length > 0 && pathSegment.endsWith(\"/\")) {\r\n      pathSegment = pathSegment.substring(0, pathSegment.length - 1);\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static ensureStartsWithBackSlash(pathSegment: string) {\r\n    if (!pathSegment.startsWith(\"\\\\\")) {\r\n      pathSegment = \"\\\\\" + pathSegment;\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static ensureEndsWithBackSlash(pathSegment: string) {\r\n    if (!pathSegment.endsWith(\"\\\\\")) {\r\n      pathSegment += \"\\\\\";\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static replaceAll(content: string, fromToken: string, toToken: string) {\r\n    let nextIndex = content.indexOf(fromToken);\r\n\r\n    while (nextIndex >= 0) {\r\n      content = content.substring(0, nextIndex) + toToken + content.substring(nextIndex + fromToken.length);\r\n\r\n      nextIndex = content.indexOf(fromToken, nextIndex + toToken.length);\r\n    }\r\n\r\n    return content;\r\n  }\r\n\r\n  static replaceAllExceptInLines(content: string, fromToken: string, toToken: string, exceptInLinesWith: string[]) {\r\n    let nextIndex = content.indexOf(fromToken);\r\n\r\n    while (nextIndex >= 0) {\r\n      let doReplace = true;\r\n\r\n      let previousNewLine = content.lastIndexOf(\"\\n\", nextIndex);\r\n      if (previousNewLine >= 0) {\r\n        const previousPreviousNewLine = content.lastIndexOf(\"\\n\", previousNewLine - 1);\r\n\r\n        if (previousPreviousNewLine >= 0) {\r\n          previousNewLine = previousPreviousNewLine;\r\n        }\r\n\r\n        const lineSegment = content.substring(previousNewLine, nextIndex);\r\n        for (const exceptIn of exceptInLinesWith) {\r\n          if (lineSegment.indexOf(exceptIn) > 0) {\r\n            doReplace = false;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (doReplace) {\r\n        content = content.substring(0, nextIndex) + toToken + content.substring(nextIndex + fromToken.length);\r\n\r\n        nextIndex = content.indexOf(fromToken, nextIndex + toToken.length);\r\n      } else {\r\n        nextIndex = content.indexOf(fromToken, nextIndex + 1);\r\n      }\r\n    }\r\n\r\n    return content;\r\n  }\r\n  static createRandomId(length: number) {\r\n    let id = \"\";\r\n\r\n    for (let i = 0; i < length; i++) {\r\n      const main = Math.random() * 6;\r\n\r\n      if (main < 1) {\r\n        id += String.fromCharCode(Math.floor(Math.random() * 10) + 48);\r\n      } else if (main < 4) {\r\n        id += String.fromCharCode(Math.floor(Math.random() * 26) + 65);\r\n      } else {\r\n        id += String.fromCharCode(Math.floor(Math.random() * 26) + 97);\r\n      }\r\n    }\r\n\r\n    return id;\r\n  }\r\n\r\n  static createRandomLowerId(length: number) {\r\n    let id = \"\";\r\n\r\n    for (let i = 0; i < length; i++) {\r\n      const main = Math.random() * 4;\r\n\r\n      if (main < 1) {\r\n        id += String.fromCharCode(Math.floor(Math.random() * 10) + 48);\r\n      } else {\r\n        id += String.fromCharCode(Math.floor(Math.random() * 26) + 97);\r\n      }\r\n    }\r\n\r\n    return id;\r\n  }\r\n\r\n  static canonicalizeUuid(uuidString: string) {\r\n    return uuidString.trim().toLowerCase();\r\n  }\r\n\r\n  static isValidUuid(uuidString: string) {\r\n    return uuidString.length === 36;\r\n  }\r\n\r\n  static uuidEqual(uuidStringA: string, uuidStringB: string) {\r\n    return Utilities.canonicalizeId(uuidStringA) === Utilities.canonicalizeId(uuidStringB);\r\n  }\r\n\r\n  static createUuid() {\r\n    return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\r\n      let val = CreatorToolsHost.generateCryptoRandomNumber(16);\r\n\r\n      const r = val | 0,\r\n        v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n\r\n      return v.toString(16);\r\n    });\r\n  }\r\n\r\n  static uint8ArraysAreEqual(arrayA: Uint8Array, arrayB: Uint8Array) {\r\n    if (arrayA.length !== arrayB.length) {\r\n      return false;\r\n    }\r\n\r\n    for (let i = 0; i < arrayA.length; i++) {\r\n      if (arrayA[i] !== arrayB[i]) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static throwIfUint8ArraysNotEqual(arrayA: Uint8Array, arrayB: Uint8Array) {\r\n    if (arrayA.length !== arrayB.length) {\r\n      throw new Error(\"Arrays are of mismatched length.\");\r\n    }\r\n\r\n    for (let i = 0; i < arrayA.length; i++) {\r\n      if (arrayA[i] !== arrayB[i]) {\r\n        throw new Error(\"Mismatch at position \" + i + \" value A: \" + arrayA[i] + \" value B:\" + arrayB[i]);\r\n      }\r\n    }\r\n  }\r\n\r\n  static getString(view: DataView, byteOffset: number, byteLength: number, encoding?: string) {\r\n    if (encoding === \"UTF8\" || encoding === undefined) {\r\n      const result = Utilities.readStringUTF8(view, byteOffset, byteLength);\r\n      Log.assert(result.byteLength === byteLength, \"UTGS\");\r\n      return result.str;\r\n    } else if (encoding === \"ASCII\") {\r\n      const result = Utilities.readStringASCII(view, byteOffset, byteLength);\r\n\r\n      return result.str;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getSimpleString(str: string) {\r\n    str = str.trim();\r\n    str = str.replace(/ /gi, \"\");\r\n    str = str.replace(/=/gi, \"\");\r\n    str = str.replace(/\\?/gi, \"\");\r\n\r\n    return str;\r\n  }\r\n\r\n  static getAsciiString(view: DataView, byteOffset: number, byteLength: number, encoding?: string) {\r\n    const result = Utilities.readStringASCII(view, byteOffset, byteLength);\r\n\r\n    return result.str;\r\n  }\r\n\r\n  static getAsciiStringFromBytes(bytes: number[]) {\r\n    let str = \"\";\r\n    for (let i = 0; i < bytes.length; i++) {\r\n      str += String.fromCharCode(bytes[i]);\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  static getAsciiStringFromUint8Array(bytes: Uint8Array) {\r\n    let str = \"\";\r\n\r\n    for (let i = 0; i < bytes.length; i++) {\r\n      str += String.fromCharCode(bytes[i]);\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  static writeString(view: DataView, byteOffset: number, value: string, encoding: string) {\r\n    const arr = Utilities.convertStringToBytes(value, encoding);\r\n\r\n    if (arr === undefined) {\r\n      return byteOffset;\r\n    }\r\n\r\n    let i = 0;\r\n\r\n    for (i = 0; i < arr.length && byteOffset + i < view.byteLength; i++) {\r\n      view.setUint8(byteOffset + i, arr[i]);\r\n    }\r\n\r\n    return byteOffset + i;\r\n  }\r\n\r\n  static frontPadToLength(val: string | number, length: number, pad: string): string {\r\n    val = val + \"\";\r\n\r\n    while (val.length < length) {\r\n      val = pad + val;\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  static getShortYear(year: number) {\r\n    let short = year + \"\"; // cast to string\r\n\r\n    if (short.length === 4) {\r\n      short = short.substring(2, 4);\r\n    }\r\n\r\n    return short;\r\n  }\r\n\r\n  static getFriendlySummaryHoursMinutesSeconds(date: Date | null) {\r\n    if (!date) {\r\n      return \"\";\r\n    }\r\n\r\n    return Utilities.getFriendlySummaryHoursMinutes(date) + \":\" + Utilities.frontPadToLength(date.getSeconds(), 2, \"0\");\r\n  }\r\n\r\n  static getFriendlySummaryHoursMinutes(date: Date | null) {\r\n    if (!date) {\r\n      return \"\";\r\n    }\r\n\r\n    let hours = date.getHours() % 12;\r\n\r\n    if (hours === 0) {\r\n      hours = 12;\r\n    }\r\n\r\n    return Utilities.frontPadToLength(hours, 2, \"0\") + \":\" + Utilities.frontPadToLength(date.getMinutes(), 2, \"0\");\r\n  }\r\n\r\n  static getFriendlySummary(date: Date) {\r\n    if (date === undefined || !(date instanceof Date)) {\r\n      Log.fail(\"Empty/wrong-typed date passed in.\");\r\n    }\r\n\r\n    let returnValue = this.monthShortNames[date.getMonth()] + \" \" + Utilities.frontPadToLength(date.getDate(), 2, \"0\");\r\n\r\n    const now = new Date();\r\n\r\n    if (date.getFullYear() !== now.getFullYear()) {\r\n      returnValue += \" \" + this.getShortYear(date.getFullYear());\r\n    } else {\r\n      returnValue += \" \" + this.getFriendlySummaryHoursMinutes(date);\r\n    }\r\n\r\n    return returnValue;\r\n  }\r\n\r\n  static getFriendlySummarySeconds(date: Date) {\r\n    if (date === undefined || !(date instanceof Date)) {\r\n      Log.fail(\"Empty/wrong-typed date passed in.\");\r\n    }\r\n\r\n    return (\r\n      this.monthShortNames[date.getMonth()] +\r\n      \" \" +\r\n      Utilities.frontPadToLength(date.getDate(), 2, \"0\") +\r\n      \" \" +\r\n      this.getShortYear(date.getFullYear()) +\r\n      \" \" +\r\n      Utilities.frontPadToLength(date.getHours(), 2, \"0\") +\r\n      Utilities.frontPadToLength(date.getMinutes(), 2, \"0\") +\r\n      \".\" +\r\n      Utilities.frontPadToLength(date.getSeconds(), 2, \"0\")\r\n    );\r\n  }\r\n\r\n  static getFileFriendlySummarySeconds(date: Date) {\r\n    if (date === undefined || !(date instanceof Date)) {\r\n      Log.fail(\"Empty/wrong-typed date passed in.\");\r\n    }\r\n\r\n    return (\r\n      Utilities.frontPadToLength(date.getMonth() + 1, 2, \"0\") +\r\n      \"-\" +\r\n      Utilities.frontPadToLength(date.getDate(), 2, \"0\") +\r\n      \"-\" +\r\n      Utilities.frontPadToLength(date.getHours(), 2, \"0\") +\r\n      Utilities.frontPadToLength(date.getMinutes(), 2, \"0\") +\r\n      Utilities.frontPadToLength(date.getSeconds(), 2, \"0\")\r\n    );\r\n  }\r\n\r\n  static getDateSummary(date: Date) {\r\n    return (\r\n      date.getMonth() +\r\n      1 +\r\n      \".\" +\r\n      date.getDate() +\r\n      \".\" +\r\n      (date.getFullYear() - 2000) +\r\n      \".\" +\r\n      date.getHours() +\r\n      \".\" +\r\n      date.getMinutes() +\r\n      \".\" +\r\n      date.getSeconds()\r\n    );\r\n  }\r\n\r\n  static countChar(source: string, find: string) {\r\n    let count = 0;\r\n\r\n    let index = source.indexOf(find);\r\n\r\n    while (index >= 0) {\r\n      count++;\r\n\r\n      index = source.indexOf(find, index + find.length);\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  static isString(obj: any) {\r\n    return typeof obj == \"string\";\r\n  }\r\n\r\n  static isNullOrUndefined<T>(object: T | undefined | null): object is T {\r\n    return (object as T) === undefined || (object as T) === null;\r\n  }\r\n}\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.DispatcherBase = void 0;\r\nconst __1 = require(\"..\");\r\n/**\r\n * Base class for implementation of the dispatcher. It facilitates the subscribe\r\n * and unsubscribe methods based on generic handlers. The TEventType specifies\r\n * the type of event that should be exposed. Use the asEvent to expose the\r\n * dispatcher as event.\r\n *\r\n * @export\r\n * @abstract\r\n * @class DispatcherBase\r\n * @implements {ISubscribable<TEventHandler>}\r\n * @template TEventHandler The type of event handler.\r\n */\r\nclass DispatcherBase {\r\n    constructor() {\r\n        /**\r\n         * The subscriptions.\r\n         *\r\n         * @protected\r\n         *\r\n         * @memberOf DispatcherBase\r\n         */\r\n        this._subscriptions = new Array();\r\n    }\r\n    /**\r\n     * Returns the number of subscriptions.\r\n     *\r\n     * @readonly\r\n     * @type {number}\r\n     * @memberOf DispatcherBase\r\n     */\r\n    get count() {\r\n        return this._subscriptions.length;\r\n    }\r\n    /**\r\n     * Triggered when subscriptions are changed (added or removed).\r\n     *\r\n     * @readonly\r\n     * @type {ISubscribable<SubscriptionChangeEventHandler>}\r\n     * @memberOf DispatcherBase\r\n     */\r\n    get onSubscriptionChange() {\r\n        if (this._onSubscriptionChange == null) {\r\n            this._onSubscriptionChange = new __1.SubscriptionChangeEventDispatcher();\r\n        }\r\n        return this._onSubscriptionChange.asEvent();\r\n    }\r\n    /**\r\n     * Subscribe to the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     * @returns A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    subscribe(fn) {\r\n        if (fn) {\r\n            this._subscriptions.push(this.createSubscription(fn, false));\r\n            this.triggerSubscriptionChange();\r\n        }\r\n        return () => {\r\n            this.unsubscribe(fn);\r\n        };\r\n    }\r\n    /**\r\n     * Subscribe to the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     * @returns A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    sub(fn) {\r\n        return this.subscribe(fn);\r\n    }\r\n    /**\r\n     * Subscribe once to the event with the specified name.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     * @returns A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    one(fn) {\r\n        if (fn) {\r\n            this._subscriptions.push(this.createSubscription(fn, true));\r\n            this.triggerSubscriptionChange();\r\n        }\r\n        return () => {\r\n            this.unsubscribe(fn);\r\n        };\r\n    }\r\n    /**\r\n     * Checks it the event has a subscription for the specified handler.\r\n     *\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    has(fn) {\r\n        if (!fn)\r\n            return false;\r\n        return this._subscriptions.some((sub) => sub.handler == fn);\r\n    }\r\n    /**\r\n     * Unsubscribes the handler from the dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    unsubscribe(fn) {\r\n        if (!fn)\r\n            return;\r\n        let changes = false;\r\n        for (let i = 0; i < this._subscriptions.length; i++) {\r\n            if (this._subscriptions[i].handler == fn) {\r\n                this._subscriptions.splice(i, 1);\r\n                changes = true;\r\n                break;\r\n            }\r\n        }\r\n        if (changes) {\r\n            this.triggerSubscriptionChange();\r\n        }\r\n    }\r\n    /**\r\n     * Unsubscribes the handler from the dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    unsub(fn) {\r\n        this.unsubscribe(fn);\r\n    }\r\n    /**\r\n     * Generic dispatch will dispatch the handlers with the given arguments.\r\n     *\r\n     * @protected\r\n     * @param {boolean} executeAsync `True` if the even should be executed async.\r\n     * @param {*} scope The scope of the event. The scope becomes the `this` for handler.\r\n     * @param {IArguments} args The arguments for the event.\r\n     * @returns {(IPropagationStatus | null)} The propagation status, or if an `executeAsync` is used `null`.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    _dispatch(executeAsync, scope, args) {\r\n        //execute on a copy because of bug #9\r\n        for (let sub of [...this._subscriptions]) {\r\n            let ev = new __1.EventManagement(() => this.unsub(sub.handler));\r\n            let nargs = Array.prototype.slice.call(args);\r\n            nargs.push(ev);\r\n            let s = sub;\r\n            s.execute(executeAsync, scope, nargs);\r\n            //cleanup subs that are no longer needed\r\n            this.cleanup(sub);\r\n            if (!executeAsync && ev.propagationStopped) {\r\n                return { propagationStopped: true };\r\n            }\r\n        }\r\n        if (executeAsync) {\r\n            return null;\r\n        }\r\n        return { propagationStopped: false };\r\n    }\r\n    /**\r\n     * Creates a subscription.\r\n     *\r\n     * @protected\r\n     * @param {TEventHandler} handler The handler.\r\n     * @param {boolean} isOnce True if the handler should run only one.\r\n     * @returns {ISubscription<TEventHandler>} The subscription.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    createSubscription(handler, isOnce) {\r\n        return new __1.Subscription(handler, isOnce);\r\n    }\r\n    /**\r\n     * Cleans up subs that ran and should run only once.\r\n     *\r\n     * @protected\r\n     * @param {ISubscription<TEventHandler>} sub The subscription.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    cleanup(sub) {\r\n        let changes = false;\r\n        if (sub.isOnce && sub.isExecuted) {\r\n            let i = this._subscriptions.indexOf(sub);\r\n            if (i > -1) {\r\n                this._subscriptions.splice(i, 1);\r\n                changes = true;\r\n            }\r\n        }\r\n        if (changes) {\r\n            this.triggerSubscriptionChange();\r\n        }\r\n    }\r\n    /**\r\n     * Creates an event from the dispatcher. Will return the dispatcher\r\n     * in a wrapper. This will prevent exposure of any dispatcher methods.\r\n     *\r\n     * @returns {ISubscribable<TEventHandler>}\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    asEvent() {\r\n        if (this._wrap == null) {\r\n            this._wrap = new __1.DispatcherWrapper(this);\r\n        }\r\n        return this._wrap;\r\n    }\r\n    /**\r\n     * Clears the subscriptions.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    clear() {\r\n        if (this._subscriptions.length != 0) {\r\n            this._subscriptions.splice(0, this._subscriptions.length);\r\n            this.triggerSubscriptionChange();\r\n        }\r\n    }\r\n    /**\r\n     * Triggers the subscription change event.\r\n     *\r\n     * @private\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    triggerSubscriptionChange() {\r\n        if (this._onSubscriptionChange != null) {\r\n            this._onSubscriptionChange.dispatch(this.count);\r\n        }\r\n    }\r\n}\r\nexports.DispatcherBase = DispatcherBase;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.DispatchError = void 0;\r\n/**\r\n * Indicates an error with dispatching.\r\n *\r\n * @export\r\n * @class DispatchError\r\n * @extends {Error}\r\n */\r\nclass DispatchError extends Error {\r\n    /**\r\n     * Creates an instance of DispatchError.\r\n     * @param {string} message The message.\r\n     *\r\n     * @memberOf DispatchError\r\n     */\r\n    constructor(message) {\r\n        super(message);\r\n    }\r\n}\r\nexports.DispatchError = DispatchError;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.DispatcherWrapper = void 0;\r\n/**\r\n * Hides the implementation of the event dispatcher. Will expose methods that\r\n * are relevent to the event.\r\n *\r\n * @export\r\n * @class DispatcherWrapper\r\n * @implements {ISubscribable<TEventHandler>}\r\n * @template TEventHandler The type of event handler.\r\n */\r\nclass DispatcherWrapper {\r\n    /**\r\n     * Creates an instance of DispatcherWrapper.\r\n     * @param {ISubscribable<TEventHandler>} dispatcher\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    constructor(dispatcher) {\r\n        this._subscribe = (fn) => dispatcher.subscribe(fn);\r\n        this._unsubscribe = (fn) => dispatcher.unsubscribe(fn);\r\n        this._one = (fn) => dispatcher.one(fn);\r\n        this._has = (fn) => dispatcher.has(fn);\r\n        this._clear = () => dispatcher.clear();\r\n        this._count = () => dispatcher.count;\r\n        this._onSubscriptionChange = () => dispatcher.onSubscriptionChange;\r\n    }\r\n    /**\r\n     * Triggered when subscriptions are changed (added or removed).\r\n     *\r\n     * @readonly\r\n     * @type {ISubscribable<SubscriptionChangeEventHandler>}\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    get onSubscriptionChange() {\r\n        return this._onSubscriptionChange();\r\n    }\r\n    /**\r\n     * Returns the number of subscriptions.\r\n     *\r\n     * @readonly\r\n     * @type {number}\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    get count() {\r\n        return this._count();\r\n    }\r\n    /**\r\n     * Subscribe to the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     * @returns {() => void} A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    subscribe(fn) {\r\n        return this._subscribe(fn);\r\n    }\r\n    /**\r\n     * Subscribe to the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     * @returns {() => void} A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    sub(fn) {\r\n        return this.subscribe(fn);\r\n    }\r\n    /**\r\n     * Unsubscribe from the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    unsubscribe(fn) {\r\n        this._unsubscribe(fn);\r\n    }\r\n    /**\r\n     * Unsubscribe from the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    unsub(fn) {\r\n        this.unsubscribe(fn);\r\n    }\r\n    /**\r\n     * Subscribe once to the event with the specified name.\r\n     *\r\n     * @returns {() => void} A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    one(fn) {\r\n        return this._one(fn);\r\n    }\r\n    /**\r\n     * Checks it the event has a subscription for the specified handler.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    has(fn) {\r\n        return this._has(fn);\r\n    }\r\n    /**\r\n     * Clears all the subscriptions.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    clear() {\r\n        this._clear();\r\n    }\r\n}\r\nexports.DispatcherWrapper = DispatcherWrapper;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EventListBase = void 0;\r\n/**\r\n * Base class for event lists classes. Implements the get and remove.\r\n *\r\n * @export\r\n * @abstract\r\n * @class EventListBaset\r\n * @template TEventDispatcher The type of event dispatcher.\r\n */\r\nclass EventListBase {\r\n    constructor() {\r\n        this._events = {};\r\n    }\r\n    /**\r\n     * Gets the dispatcher associated with the name.\r\n     *\r\n     * @param {string} name The name of the event.\r\n     * @returns {TEventDispatcher} The disptacher.\r\n     *\r\n     * @memberOf EventListBase\r\n     */\r\n    get(name) {\r\n        let event = this._events[name];\r\n        if (event) {\r\n            return event;\r\n        }\r\n        event = this.createDispatcher();\r\n        this._events[name] = event;\r\n        return event;\r\n    }\r\n    /**\r\n     * Removes the dispatcher associated with the name.\r\n     *\r\n     * @param {string} name\r\n     *\r\n     * @memberOf EventListBase\r\n     */\r\n    remove(name) {\r\n        delete this._events[name];\r\n    }\r\n}\r\nexports.EventListBase = EventListBase;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EventManagement = void 0;\r\n/**\r\n * Allows the user to interact with the event.\r\n *\r\n * @export\r\n * @class EventManagement\r\n * @implements {IEventManagement}\r\n */\r\nclass EventManagement {\r\n    /**\r\n     * Creates an instance of EventManagement.\r\n     * @param {() => void} unsub An unsubscribe handler.\r\n     *\r\n     * @memberOf EventManagement\r\n     */\r\n    constructor(unsub) {\r\n        this.unsub = unsub;\r\n        this.propagationStopped = false;\r\n    }\r\n    /**\r\n     * Stops the propagation of the event.\r\n     * Cannot be used when async dispatch is done.\r\n     *\r\n     * @memberOf EventManagement\r\n     */\r\n    stopPropagation() {\r\n        this.propagationStopped = true;\r\n    }\r\n}\r\nexports.EventManagement = EventManagement;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.HandlingBase = void 0;\r\n/**\r\n * Base class that implements event handling. With a an\r\n * event list this base class will expose events that can be\r\n * subscribed to. This will give your class generic events.\r\n *\r\n * @export\r\n * @abstract\r\n * @class HandlingBase\r\n * @template TEventHandler The type of event handler.\r\n * @template TDispatcher The type of dispatcher.\r\n * @template TList The type of event list.\r\n */\r\nclass HandlingBase {\r\n    /**\r\n     * Creates an instance of HandlingBase.\r\n     * @param {TList} events The event list. Used for event management.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    constructor(events) {\r\n        this.events = events;\r\n    }\r\n    /**\r\n     * Subscribes once to the event with the specified name.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    one(name, fn) {\r\n        this.events.get(name).one(fn);\r\n    }\r\n    /**\r\n     * Checks it the event has a subscription for the specified handler.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    has(name, fn) {\r\n        return this.events.get(name).has(fn);\r\n    }\r\n    /**\r\n     * Subscribes to the event with the specified name.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    subscribe(name, fn) {\r\n        this.events.get(name).subscribe(fn);\r\n    }\r\n    /**\r\n     * Subscribes to the event with the specified name.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    sub(name, fn) {\r\n        this.subscribe(name, fn);\r\n    }\r\n    /**\r\n     * Unsubscribes from the event with the specified name.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    unsubscribe(name, fn) {\r\n        this.events.get(name).unsubscribe(fn);\r\n    }\r\n    /**\r\n     * Unsubscribes from the event with the specified name.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    unsub(name, fn) {\r\n        this.unsubscribe(name, fn);\r\n    }\r\n}\r\nexports.HandlingBase = HandlingBase;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.PromiseDispatcherBase = void 0;\r\nconst __1 = require(\"..\");\r\n/**\r\n * Dispatcher base for dispatchers that use promises. Each promise\r\n * is awaited before the next is dispatched, unless the event is\r\n * dispatched with the executeAsync flag.\r\n *\r\n * @export\r\n * @abstract\r\n * @class PromiseDispatcherBase\r\n * @extends {DispatcherBase<TEventHandler>}\r\n * @template TEventHandler The type of event handler.\r\n */\r\nclass PromiseDispatcherBase extends __1.DispatcherBase {\r\n    /**\r\n     * The normal dispatch cannot be used in this class.\r\n     *\r\n     * @protected\r\n     * @param {boolean} executeAsync `True` if the even should be executed async.\r\n     * @param {*} scope The scope of the event. The scope becomes the `this` for handler.\r\n     * @param {IArguments} args The arguments for the event.\r\n     * @returns {(IPropagationStatus | null)} The propagation status, or if an `executeAsync` is used `null`.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    _dispatch(executeAsync, scope, args) {\r\n        throw new __1.DispatchError(\"_dispatch not supported. Use _dispatchAsPromise.\");\r\n    }\r\n    /**\r\n     * Crates a new subscription.\r\n     *\r\n     * @protected\r\n     * @param {TEventHandler} handler The handler.\r\n     * @param {boolean} isOnce Indicates if the handler should only run once.\r\n     * @returns {ISubscription<TEventHandler>} The subscription.\r\n     *\r\n     * @memberOf PromiseDispatcherBase\r\n     */\r\n    createSubscription(handler, isOnce) {\r\n        return new __1.PromiseSubscription(handler, isOnce);\r\n    }\r\n    /**\r\n     * Generic dispatch will dispatch the handlers with the given arguments.\r\n     *\r\n     * @protected\r\n     * @param {boolean} executeAsync `True` if the even should be executed async.\r\n     * @param {*} scope The scope of the event. The scope becomes the `this` for handler.\r\n     * @param {IArguments} args The arguments for the event.\r\n     * @returns {(IPropagationStatus | null)} The propagation status, or if an `executeAsync` is used `null`.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    async _dispatchAsPromise(executeAsync, scope, args) {\r\n        //execute on a copy because of bug #9\r\n        for (let sub of [...this._subscriptions]) {\r\n            let ev = new __1.EventManagement(() => this.unsub(sub.handler));\r\n            let nargs = Array.prototype.slice.call(args);\r\n            nargs.push(ev);\r\n            let ps = sub;\r\n            await ps.execute(executeAsync, scope, nargs);\r\n            //cleanup subs that are no longer needed\r\n            this.cleanup(sub);\r\n            if (!executeAsync && ev.propagationStopped) {\r\n                return { propagationStopped: true };\r\n            }\r\n        }\r\n        if (executeAsync) {\r\n            return null;\r\n        }\r\n        return { propagationStopped: false };\r\n    }\r\n}\r\nexports.PromiseDispatcherBase = PromiseDispatcherBase;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.PromiseSubscription = void 0;\r\n/**\r\n * Subscription implementation for events with promises.\r\n *\r\n * @export\r\n * @class PromiseSubscription\r\n * @implements {ISubscription<TEventHandler>}\r\n * @template TEventHandler The type of event handler.\r\n */\r\nclass PromiseSubscription {\r\n    /**\r\n     * Creates an instance of PromiseSubscription.\r\n     * @param {TEventHandler} handler The handler for the subscription.\r\n     * @param {boolean} isOnce Indicates if the handler should only be executed once.\r\n     *\r\n     * @memberOf PromiseSubscription\r\n     */\r\n    constructor(handler, isOnce) {\r\n        this.handler = handler;\r\n        this.isOnce = isOnce;\r\n        /**\r\n         * Indicates if the subscription has been executed before.\r\n         *\r\n         * @memberOf PromiseSubscription\r\n         */\r\n        this.isExecuted = false;\r\n    }\r\n    /**\r\n     * Executes the handler.\r\n     *\r\n     * @param {boolean} executeAsync True if the even should be executed async.\r\n     * @param {*} scope The scope the scope of the event.\r\n     * @param {IArguments} args The arguments for the event.\r\n     *\r\n     * @memberOf PromiseSubscription\r\n     */\r\n    async execute(executeAsync, scope, args) {\r\n        if (!this.isOnce || !this.isExecuted) {\r\n            this.isExecuted = true;\r\n            //TODO: do we need to cast to any -- seems yuck\r\n            var fn = this.handler;\r\n            if (executeAsync) {\r\n                setTimeout(() => {\r\n                    fn.apply(scope, args);\r\n                }, 1);\r\n                return;\r\n            }\r\n            let result = fn.apply(scope, args);\r\n            await result;\r\n        }\r\n    }\r\n}\r\nexports.PromiseSubscription = PromiseSubscription;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Subscription = void 0;\r\n/**\r\n * Stores a handler. Manages execution meta data.\r\n * @class Subscription\r\n * @template TEventHandler\r\n */\r\nclass Subscription {\r\n    /**\r\n     * Creates an instance of Subscription.\r\n     *\r\n     * @param {TEventHandler} handler The handler for the subscription.\r\n     * @param {boolean} isOnce Indicates if the handler should only be executed once.\r\n     */\r\n    constructor(handler, isOnce) {\r\n        this.handler = handler;\r\n        this.isOnce = isOnce;\r\n        /**\r\n         * Indicates if the subscription has been executed before.\r\n         */\r\n        this.isExecuted = false;\r\n    }\r\n    /**\r\n     * Executes the handler.\r\n     *\r\n     * @param {boolean} executeAsync True if the even should be executed async.\r\n     * @param {*} scope The scope the scope of the event.\r\n     * @param {IArguments} args The arguments for the event.\r\n     */\r\n    execute(executeAsync, scope, args) {\r\n        if (!this.isOnce || !this.isExecuted) {\r\n            this.isExecuted = true;\r\n            var fn = this.handler;\r\n            if (executeAsync) {\r\n                setTimeout(() => {\r\n                    fn.apply(scope, args);\r\n                }, 1);\r\n            }\r\n            else {\r\n                fn.apply(scope, args);\r\n            }\r\n        }\r\n    }\r\n}\r\nexports.Subscription = Subscription;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SubscriptionChangeEventDispatcher = void 0;\r\nconst __1 = require(\"..\");\r\n/**\r\n * Dispatcher for subscription changes.\r\n *\r\n * @export\r\n * @class SubscriptionChangeEventDispatcher\r\n * @extends {DispatcherBase<SubscriptionChangeEventHandler>}\r\n */\r\nclass SubscriptionChangeEventDispatcher extends __1.DispatcherBase {\r\n    /**\r\n     * Dispatches the event.\r\n     *\r\n     * @param {number} count The currrent number of subscriptions.\r\n     *\r\n     * @memberOf SubscriptionChangeEventDispatcher\r\n     */\r\n    dispatch(count) {\r\n        this._dispatch(false, this, arguments);\r\n    }\r\n}\r\nexports.SubscriptionChangeEventDispatcher = SubscriptionChangeEventDispatcher;\r\n", "\"use strict\";\r\n/*!\r\n * Strongly Typed Events for TypeScript - Core\r\n * https://github.com/KeesCBakker/StronlyTypedEvents/\r\n * http://keestalkstech.com\r\n *\r\n * Copyright Kees C. Bakker / KeesTalksTech\r\n * Released under the MIT license\r\n */\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SubscriptionChangeEventDispatcher = exports.HandlingBase = exports.PromiseDispatcherBase = exports.PromiseSubscription = exports.DispatchError = exports.EventManagement = exports.EventListBase = exports.DispatcherWrapper = exports.DispatcherBase = exports.Subscription = void 0;\r\nconst DispatcherBase_1 = require(\"./dispatching/DispatcherBase\");\r\nObject.defineProperty(exports, \"DispatcherBase\", { enumerable: true, get: function () { return DispatcherBase_1.DispatcherBase; } });\r\nconst DispatchError_1 = require(\"./dispatching/DispatchError\");\r\nObject.defineProperty(exports, \"DispatchError\", { enumerable: true, get: function () { return DispatchError_1.DispatchError; } });\r\nconst DispatcherWrapper_1 = require(\"./dispatching/DispatcherWrapper\");\r\nObject.defineProperty(exports, \"DispatcherWrapper\", { enumerable: true, get: function () { return DispatcherWrapper_1.DispatcherWrapper; } });\r\nconst EventListBase_1 = require(\"./dispatching/EventListBase\");\r\nObject.defineProperty(exports, \"EventListBase\", { enumerable: true, get: function () { return EventListBase_1.EventListBase; } });\r\nconst EventManagement_1 = require(\"./management/EventManagement\");\r\nObject.defineProperty(exports, \"EventManagement\", { enumerable: true, get: function () { return EventManagement_1.EventManagement; } });\r\nconst HandlingBase_1 = require(\"./handling/HandlingBase\");\r\nObject.defineProperty(exports, \"HandlingBase\", { enumerable: true, get: function () { return HandlingBase_1.HandlingBase; } });\r\nconst PromiseDispatcherBase_1 = require(\"./dispatching/PromiseDispatcherBase\");\r\nObject.defineProperty(exports, \"PromiseDispatcherBase\", { enumerable: true, get: function () { return PromiseDispatcherBase_1.PromiseDispatcherBase; } });\r\nconst PromiseSubscription_1 = require(\"./events/PromiseSubscription\");\r\nObject.defineProperty(exports, \"PromiseSubscription\", { enumerable: true, get: function () { return PromiseSubscription_1.PromiseSubscription; } });\r\nconst Subscription_1 = require(\"./events/Subscription\");\r\nObject.defineProperty(exports, \"Subscription\", { enumerable: true, get: function () { return Subscription_1.Subscription; } });\r\nconst SubscriptionChangeEventHandler_1 = require(\"./dispatching/SubscriptionChangeEventHandler\");\r\nObject.defineProperty(exports, \"SubscriptionChangeEventDispatcher\", { enumerable: true, get: function () { return SubscriptionChangeEventHandler_1.SubscriptionChangeEventDispatcher; } });\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EventDispatcher = void 0;\r\nconst ste_core_1 = require(\"ste-core\");\r\n/**\r\n * Dispatcher implementation for events. Can be used to subscribe, unsubscribe\r\n * or dispatch events. Use the ToEvent() method to expose the event.\r\n *\r\n * @export\r\n * @class EventDispatcher\r\n * @extends {DispatcherBase<IEventHandler<TSender, TArgs>>}\r\n * @implements {IEvent<TSender, TArgs>}\r\n * @template TSender\r\n * @template TArgs\r\n */\r\nclass EventDispatcher extends ste_core_1.DispatcherBase {\r\n    /**\r\n     * Creates an instance of EventDispatcher.\r\n     *\r\n     * @memberOf EventDispatcher\r\n     */\r\n    constructor() {\r\n        super();\r\n    }\r\n    /**\r\n     * Dispatches the event.\r\n     *\r\n     * @param {TSender} sender The sender object.\r\n     * @param {TArgs} args The arguments object.\r\n     * @returns {IPropagationStatus} The event status.\r\n     *\r\n     * @memberOf EventDispatcher\r\n     */\r\n    dispatch(sender, args) {\r\n        const result = this._dispatch(false, this, arguments);\r\n        if (result == null) {\r\n            throw new ste_core_1.DispatchError(\"Got `null` back from dispatch.\");\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Dispatches the events thread.\r\n     * @param sender The sender.\r\n     * @param args The arguments object.\r\n     */\r\n    dispatchAsync(sender, args) {\r\n        this._dispatch(true, this, arguments);\r\n    }\r\n    /**\r\n     * Creates an event from the dispatcher. Will return the dispatcher\r\n     * in a wrapper. This will prevent exposure of any dispatcher methods.\r\n     *\r\n     * @returns {IEvent<TSender, TArgs>} The event.\r\n     *\r\n     * @memberOf EventDispatcher\r\n     */\r\n    asEvent() {\r\n        return super.asEvent();\r\n    }\r\n}\r\nexports.EventDispatcher = EventDispatcher;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EventList = void 0;\r\nconst ste_core_1 = require(\"ste-core\");\r\nconst EventDispatcher_1 = require(\"./EventDispatcher\");\r\n/**\r\n * Storage class for multiple events that are accessible by name.\r\n * Events dispatchers are automatically created.\r\n */\r\nclass EventList extends ste_core_1.EventListBase {\r\n    /**\r\n     * Creates a new EventList instance.\r\n     */\r\n    constructor() {\r\n        super();\r\n    }\r\n    /**\r\n     * Creates a new dispatcher instance.\r\n     */\r\n    createDispatcher() {\r\n        return new EventDispatcher_1.EventDispatcher();\r\n    }\r\n}\r\nexports.EventList = EventList;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EventHandlingBase = void 0;\r\nconst ste_core_1 = require(\"ste-core\");\r\nconst EventList_1 = require(\"./EventList\");\r\n/**\r\n * Extends objects with signal event handling capabilities.\r\n */\r\nclass EventHandlingBase extends ste_core_1.HandlingBase {\r\n    constructor() {\r\n        super(new EventList_1.EventList());\r\n    }\r\n}\r\nexports.EventHandlingBase = EventHandlingBase;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.NonUniformEventList = void 0;\r\nconst EventDispatcher_1 = require(\"./EventDispatcher\");\r\n/**\r\n * Similar to EventList, but instead of TArgs, a map of event names ang argument types is provided with TArgsMap.\r\n */\r\nclass NonUniformEventList {\r\n    constructor() {\r\n        this._events = {};\r\n    }\r\n    /**\r\n     * Gets the dispatcher associated with the name.\r\n     * @param name The name of the event.\r\n     */\r\n    get(name) {\r\n        if (this._events[name]) {\r\n            // @TODO avoid typecasting. Not sure why TS thinks this._events[name] could still be undefined.\r\n            return this._events[name];\r\n        }\r\n        const event = this.createDispatcher();\r\n        this._events[name] = event;\r\n        return event;\r\n    }\r\n    /**\r\n     * Removes the dispatcher associated with the name.\r\n     * @param name The name of the event.\r\n     */\r\n    remove(name) {\r\n        delete this._events[name];\r\n    }\r\n    /**\r\n     * Creates a new dispatcher instance.\r\n     */\r\n    createDispatcher() {\r\n        return new EventDispatcher_1.EventDispatcher();\r\n    }\r\n}\r\nexports.NonUniformEventList = NonUniformEventList;\r\n", "\"use strict\";\r\n/*!\r\n * Strongly Typed Events for TypeScript - Core\r\n * https://github.com/KeesCBakker/StronlyTypedEvents/\r\n * http://keestalkstech.com\r\n *\r\n * Copyright Kees C. Bakker / KeesTalksTech\r\n * Released under the MIT license\r\n */\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.NonUniformEventList = exports.EventList = exports.EventHandlingBase = exports.EventDispatcher = void 0;\r\nconst EventDispatcher_1 = require(\"./EventDispatcher\");\r\nObject.defineProperty(exports, \"EventDispatcher\", { enumerable: true, get: function () { return EventDispatcher_1.EventDispatcher; } });\r\nconst EventHandlingBase_1 = require(\"./EventHandlingBase\");\r\nObject.defineProperty(exports, \"EventHandlingBase\", { enumerable: true, get: function () { return EventHandlingBase_1.EventHandlingBase; } });\r\nconst EventList_1 = require(\"./EventList\");\r\nObject.defineProperty(exports, \"EventList\", { enumerable: true, get: function () { return EventList_1.EventList; } });\r\nconst NonUniformEventList_1 = require(\"./NonUniformEventList\");\r\nObject.defineProperty(exports, \"NonUniformEventList\", { enumerable: true, get: function () { return NonUniformEventList_1.NonUniformEventList; } });\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IAppServiceChannel from \"./IAppServiceChannel\";\r\nimport Utilities from \"./../core/Utilities\";\r\nimport Log, { LogItem } from \"./../core/Log\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport CreatorToolsHost, { HostType } from \"../app/CreatorToolsHost\";\r\n\r\nexport enum AppServiceProxyCommands {\r\n  fsExists = \"fsExists\",\r\n  fsFolderExists = \"fsFolderExists\",\r\n  fsRenameFolder = \"fsRenameFolder\",\r\n  fsDeleteFolder = \"fsDeleteFolder\",\r\n  fsRootStorageExists = \"fsRootStorageExists\",\r\n  fsMkdir = \"fsMkdir\",\r\n  fsReadUtf8File = \"fsReadUtf8File\",\r\n  fsReadFile = \"fsReadFile\",\r\n  fsWriteUtf8File = \"fsWriteUtf8File\",\r\n  fsWriteFile = \"fsWriteFile\",\r\n  fsReaddir = \"fsReaddir\",\r\n  fsStat = \"fsStat\",\r\n  getDirname = \"getDirname\",\r\n  getDedicatedServerStatus = \"getDedicatedServerStatus\",\r\n  getDedicatedServerProjectDeployDir = \"getDedicatedServerProjectDir\",\r\n  getDedicatedServerWorldDeployDir = \"getDedicatedServerWorldDir\",\r\n  getMinecraftGameProjectDeployDir = \"getMinecraftGameProjectDeployDir\",\r\n  getMinecraftGameWorldDeployDir = \"getMinecraftGameWorldDeployDir\",\r\n  getIsDev = \"getIsDev\",\r\n  openFolder = \"openFolder\",\r\n  shellOpenPath = \"shellOpenPath\",\r\n  shellOpenFolderInExplorer = \"shellOpenFolderInExplorer\",\r\n  webSocketCommand = \"webSocketCommand\",\r\n  dedicatedServerCommand = \"dedicatedServerCommand\",\r\n  startWebSocketServer = \"startWebSocketServer\",\r\n  stopWebSocketServer = \"stopWebSocketServer\",\r\n  startDedicatedServer = \"startDedicatedServer\",\r\n  stopDedicatedServer = \"stopDedicatedServer\",\r\n  debugPause = \"debugPause\",\r\n  debugResume = \"debugResume\",\r\n  debugStartProfiler = \"debugStartProfiler\",\r\n  debugStopProfiler = \"debugStopProfiler\",\r\n  shellRecycleItem = \"shellRecycleItem\",\r\n  reloadMct = \"reloadMct\",\r\n  getContentSources = \"getContentSources\",\r\n  minecraftShell = \"minecraftShell\",\r\n  windowClose = \"windowClose\",\r\n  windowRestore = \"windowRestore\",\r\n  windowMove = \"windowMove\",\r\n  logToConsole = \"logToConsole\",\r\n  windowMinimize = \"windowMinimize\",\r\n  windowMaximize = \"windowMaximize\",\r\n  windowUpdate = \"windowUpdate\",\r\n  windowLeftSide = \"windowLeftSide\",\r\n  windowRightSide = \"windowRightSide\",\r\n  getWindowState = \"getWindowState\",\r\n  getPlatform = \"getPlatform\",\r\n  appGetPath = \"appGetPath\",\r\n  updateIAgree = \"updateIAgree\",\r\n  convertFile = \"convertFile\",\r\n}\r\n\r\nexport default class AppServiceProxy {\r\n  static _api: IAppServiceChannel | undefined;\r\n  static _pendingStringPromiseResolvers: ((value: string | PromiseLike<string> | undefined) => void)[] = [];\r\n  static _pendingArrayBufferPromiseResolvers: ((value: ArrayBuffer | PromiseLike<ArrayBuffer> | undefined) => void)[] =\r\n    [];\r\n  static _pendingStringPromiseRejecters: ((reason?: any) => void)[] = [];\r\n  static _pendingArrayPromiseRejecters: ((reason?: any) => void)[] = [];\r\n\r\n  private static _onMessage = new EventDispatcher<string, string>();\r\n\r\n  public static get onMessage() {\r\n    return AppServiceProxy._onMessage.asEvent();\r\n  }\r\n\r\n  static get hasAppService() {\r\n    return AppServiceProxy._api !== undefined;\r\n  }\r\n\r\n  static get hasAppServiceOrDebug() {\r\n    return AppServiceProxy._api !== undefined || Utilities.isDebug;\r\n  }\r\n\r\n  static get hasAppServiceOrSim() {\r\n    return AppServiceProxy._api !== undefined || Utilities.isAppSim;\r\n  }\r\n\r\n  static init() {\r\n    // @ts-ignore\r\n    if (typeof window !== \"undefined\") {\r\n      // @ts-ignore\r\n      AppServiceProxy._api = (window as any).api;\r\n\r\n      if (\r\n        AppServiceProxy._api &&\r\n        CreatorToolsHost.hostType !== HostType.vsCodeMainWeb &&\r\n        CreatorToolsHost.hostType !== HostType.vsCodeWebWeb\r\n      ) {\r\n        CreatorToolsHost.hostType = HostType.electronWeb;\r\n        CreatorToolsHost.fullLocalStorage = true;\r\n      }\r\n    }\r\n\r\n    if (AppServiceProxy._api !== undefined) {\r\n      AppServiceProxy._api.receive(\"appsvc\", AppServiceProxy._handleNewMessage);\r\n      Log.onItemAdded.subscribe(AppServiceProxy._handleLog);\r\n    }\r\n  }\r\n\r\n  static _handleLog(log: Log, item: LogItem) {\r\n    AppServiceProxy.logToConsole(item.message + \" \" + Log.getStack().replace(\"Error\\n\", \"\"));\r\n  }\r\n\r\n  static async logToConsole(message: string) {\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.logToConsole, message);\r\n  }\r\n\r\n  static send(commandName: AppServiceProxyCommands | string, data: any) {\r\n    if (AppServiceProxy._api === undefined) {\r\n      if (Utilities.isAppSim) {\r\n        Log.debugAlert(\"Command: \" + commandName + \" Data: \" + data);\r\n        return;\r\n      }\r\n\r\n      throw new Error(\"Not an Electron API\");\r\n    }\r\n\r\n    if (commandName === AppServiceProxyCommands.fsWriteFile) {\r\n      let content = data.content;\r\n\r\n      if (content instanceof Uint8Array) {\r\n        content = Utilities.uint8ArrayToBase64(content);\r\n      } else if (data instanceof ArrayBuffer) {\r\n        content = Utilities.arrayBufferToBase64(content);\r\n      } else if (\r\n        data instanceof Uint16Array ||\r\n        data instanceof Uint32Array ||\r\n        data instanceof Uint8ClampedArray ||\r\n        data instanceof BigUint64Array\r\n      ) {\r\n        Log.fail(\"Unsupported binary type encountered.\" + data);\r\n      }\r\n\r\n      data.content = content;\r\n    }\r\n\r\n    let result: any = undefined;\r\n\r\n    try {\r\n      result = AppServiceProxy._api.send(\"appweb\", commandName as string, data);\r\n    } catch (e) {\r\n      let dataStr = data;\r\n\r\n      if (typeof data === \"object\") {\r\n        dataStr = JSON.stringify(data);\r\n      }\r\n\r\n      throw new Error(\"Error running command \" + commandName + \", data: \" + dataStr + \", error: \" + e);\r\n    }\r\n\r\n    if (commandName === AppServiceProxyCommands.fsReadFile) {\r\n      if (result === undefined || result.length === 0) {\r\n        return undefined;\r\n      }\r\n\r\n      return Utilities.base64ToArrayBuffer(result);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  static sendAsyncBinary(commandName: AppServiceProxyCommands | string, data: any): Promise<ArrayBuffer | undefined> {\r\n    const promise = new Promise<ArrayBuffer | undefined>(AppServiceProxy._arrayBufferPromiseHandler);\r\n\r\n    if (AppServiceProxy._api === undefined) {\r\n      if (Utilities.isAppSim) {\r\n        Log.debugAlert(\"Command: \" + commandName + \" Data: \" + data);\r\n        return promise;\r\n      }\r\n\r\n      throw new Error(\"Not an Electron API\");\r\n    }\r\n\r\n    const position = AppServiceProxy._pendingArrayBufferPromiseResolvers.length - 1;\r\n\r\n    const commandStr = \"bsync\" + (commandName as string) + \"|\" + position;\r\n\r\n    // Log.verbose(\"Sending async command '\" + commandStr + \"' + data: \" + data);\r\n\r\n    AppServiceProxy._api.send(\"appweb\", commandStr, data);\r\n\r\n    return promise;\r\n  }\r\n\r\n  static sendBinaryAsync(commandName: AppServiceProxyCommands | string, data: any): Promise<string | undefined> {\r\n    const promise = new Promise<string | undefined>(AppServiceProxy._stringPromiseHandler);\r\n    if (AppServiceProxy._api === undefined) {\r\n      if (Utilities.isAppSim) {\r\n        Log.debugAlert(\"Command: \" + commandName + \" Data: \" + data);\r\n        return promise;\r\n      }\r\n\r\n      throw new Error(\"Not an Electron API\");\r\n    }\r\n\r\n    let content = data.content;\r\n\r\n    if (content instanceof Uint8Array) {\r\n      content = Utilities.uint8ArrayToBase64(content);\r\n    } else if (data instanceof ArrayBuffer) {\r\n      content = Utilities.arrayBufferToBase64(content);\r\n    } else if (\r\n      data instanceof Uint16Array ||\r\n      data instanceof Uint32Array ||\r\n      data instanceof Uint8ClampedArray ||\r\n      data instanceof BigUint64Array\r\n    ) {\r\n      Log.fail(\"Unsupported binary type encountered.\" + data);\r\n    }\r\n\r\n    data.content = content;\r\n\r\n    const position = AppServiceProxy._pendingStringPromiseResolvers.length - 1;\r\n\r\n    const commandStr = \"async\" + (commandName as string) + \"|\" + position;\r\n\r\n    // Log.verbose(\"Sending async command '\" + commandStr + \"' + data: \" + data);\r\n\r\n    AppServiceProxy._api.send(\"appweb\", commandStr, data);\r\n\r\n    return promise;\r\n  }\r\n\r\n  static sendAsync(\r\n    commandName: AppServiceProxyCommands | string,\r\n    data: any,\r\n    ignoreInSim?: boolean\r\n  ): Promise<string | undefined> {\r\n    const promise = new Promise<string | undefined>(AppServiceProxy._stringPromiseHandler);\r\n\r\n    if (AppServiceProxy._api === undefined) {\r\n      if (Utilities.isAppSim) {\r\n        if (!ignoreInSim) {\r\n          Log.debugAlert(\"Command: \" + commandName + \" Data: \" + data);\r\n        }\r\n        return promise;\r\n      }\r\n\r\n      throw new Error(\"Not an Electron API\");\r\n    }\r\n\r\n    const position = AppServiceProxy._pendingStringPromiseResolvers.length - 1;\r\n\r\n    const commandStr = \"async\" + (commandName as string) + \"|\" + position;\r\n\r\n    // Do not uncomment this as it'll cause a loop.\r\n    // Log.verbose(\"Sending async command '\" + commandStr + \"' + data: \" + data);\r\n\r\n    AppServiceProxy._api.send(\"appweb\", commandStr, data);\r\n\r\n    return promise;\r\n  }\r\n\r\n  static sendHost(serviceName: string, commandName: AppServiceProxyCommands | string, data: any) {\r\n    if (AppServiceProxy._api === undefined) {\r\n      throw new Error(\"Not an Electron API\");\r\n    }\r\n\r\n    if (typeof data === \"object\") {\r\n      data = JSON.stringify(data);\r\n    } else if (typeof data !== \"string\") {\r\n      data = data.toString();\r\n    }\r\n\r\n    AppServiceProxy._api.send(serviceName, commandName, data);\r\n  }\r\n\r\n  static openLinkExternal(url: string) {\r\n    try {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        // @ts-ignore\r\n        (window as any).open(url, \"_blank\");\r\n      }\r\n    } catch (e) {}\r\n  }\r\n\r\n  private static _arrayBufferPromiseHandler(\r\n    resolve: (value: ArrayBuffer | PromiseLike<ArrayBuffer> | undefined) => void,\r\n    reject: (reason?: any) => void\r\n  ) {\r\n    const position = AppServiceProxy._pendingArrayBufferPromiseResolvers.length;\r\n\r\n    AppServiceProxy._pendingArrayBufferPromiseResolvers[position] = resolve;\r\n    AppServiceProxy._pendingStringPromiseRejecters[position] = reject;\r\n  }\r\n\r\n  private static _stringPromiseHandler(\r\n    resolve: (value: string | PromiseLike<string> | undefined) => void,\r\n    reject: (reason?: any) => void\r\n  ) {\r\n    const position = AppServiceProxy._pendingStringPromiseResolvers.length;\r\n\r\n    AppServiceProxy._pendingStringPromiseResolvers[position] = resolve;\r\n    AppServiceProxy._pendingStringPromiseRejecters[position] = reject;\r\n  }\r\n\r\n  private static _handleNewMessage(args: string) {\r\n    if (args !== null && args.length > 0) {\r\n      if (args.startsWith(\"async\")) {\r\n        const argSplit = Utilities.splitUntil(args, \"|\", 2);\r\n\r\n        if (argSplit.length > 2) {\r\n          const index = parseInt(argSplit[1]);\r\n\r\n          if (index >= 0) {\r\n            const promiseResolver = AppServiceProxy._pendingStringPromiseResolvers[index];\r\n\r\n            // NOTE: Since logging goes from browser to client and then async is complete,\r\n            // DO NOT log inside of here or otherwise you may cause a loop.\r\n\r\n            let val: string | undefined = argSplit[2];\r\n\r\n            if (val === \"<undefined>\") {\r\n              val = undefined;\r\n            }\r\n\r\n            promiseResolver(val);\r\n          }\r\n        }\r\n      } else if (args.startsWith(\"bsync\")) {\r\n        const argSplit = Utilities.splitUntil(args, \"|\", 2);\r\n\r\n        if (argSplit.length > 2) {\r\n          const index = parseInt(argSplit[1]);\r\n\r\n          if (index >= 0) {\r\n            const promiseResolver = AppServiceProxy._pendingArrayBufferPromiseResolvers[index];\r\n\r\n            // NOTE: Since logging goes from browser to client and then async is complete,\r\n            // DO NOT log inside of here or otherwise you may cause a loop.\r\n            let val: ArrayBuffer | undefined = undefined;\r\n\r\n            if (argSplit[2] !== \"<undefined>\") {\r\n              val = Utilities.base64ToArrayBuffer(argSplit[2]);\r\n            }\r\n\r\n            promiseResolver(val);\r\n          }\r\n        }\r\n      } else {\r\n        const firstPipe = args.indexOf(\"|\");\r\n\r\n        if (firstPipe >= 0) {\r\n          AppServiceProxy._onMessage.dispatch(args.substring(0, firstPipe), args.substring(firstPipe + 1, args.length));\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport AppServiceProxy from \"./AppServiceProxy\";\r\nimport Utilities from \"./Utilities\";\r\nimport { EventDispatcher } from \"ste-events\";\r\n\r\nexport enum LogItemLevel {\r\n  debug = 0,\r\n  verbose = 1,\r\n  message = 2,\r\n  error = 3,\r\n  important = 4,\r\n  operationStarted = 10,\r\n  operationEnded = 11,\r\n}\r\n\r\nexport class LogItem {\r\n  level: LogItemLevel;\r\n  message: string;\r\n  created: Date;\r\n  operId?: number;\r\n  category?: string;\r\n  context?: string;\r\n\r\n  static alertFunction: ((message: string) => void) | undefined;\r\n\r\n  constructor(message: string, level: LogItemLevel, context?: string, category?: string) {\r\n    this.level = level;\r\n    this.message = message;\r\n    this.created = new Date();\r\n    this.context = context;\r\n    this.category = category;\r\n\r\n    if (this.level === LogItemLevel.operationStarted) {\r\n      this.operId = Log.items.length;\r\n    }\r\n  }\r\n}\r\n\r\nexport default class Log {\r\n  static _suppressedLogs: { [id: string]: boolean } = {};\r\n  static _log: LogItem[] = [];\r\n  static _onItemAdded = new EventDispatcher<Log, LogItem>();\r\n\r\n  static get items() {\r\n    return Log._log;\r\n  }\r\n\r\n  public static get onItemAdded() {\r\n    return this._onItemAdded.asEvent();\r\n  }\r\n\r\n  static message(message: string, context?: string, category?: string) {\r\n    this.log(message, LogItemLevel.message, context, category);\r\n  }\r\n\r\n  static important(message: string, context?: string, category?: string) {\r\n    this.log(message, LogItemLevel.important, context, category);\r\n  }\r\n\r\n  static verbose(message: string, context?: string, category?: string) {\r\n    this.log(message, LogItemLevel.verbose, context, category);\r\n  }\r\n\r\n  static error(message: string, context?: string, category?: string) {\r\n    this.log(message, LogItemLevel.error, context, category);\r\n  }\r\n\r\n  static unexpectedUndefined(token?: string) {\r\n    Log.fail(\"Unexpected undefined condition found.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static unexpectedIsDisposed(token?: string) {\r\n    Log.fail(\"Unexpected usage of a disposed object.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static throwIsDisposed(token?: string) {\r\n    this.unexpectedIsDisposed(token);\r\n    throw new Error(\"Unexpected usage of a disposed object.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static throwUnexpectedUndefined(token?: string) {\r\n    this.unexpectedUndefined(token);\r\n    throw new Error(\"Unexpected undefined condition found.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static unexpectedNull(token?: string) {\r\n    Log.fail(\"Unexpected null condition found.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static unexpectedContentState(token?: string) {\r\n    Log.fail(\"Unexpected state of content.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static unexpectedState(token?: string) {\r\n    Log.fail(\"Unexpected state of internal variables.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static unexpectedArguments(token?: string) {\r\n    Log.fail(\"Unexpected arguments found.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static log(message: string | object, level: LogItemLevel, context?: string, category?: string) {\r\n    if (typeof message !== \"string\") {\r\n      if ((message as any).message) {\r\n        message = (message as any).message as string;\r\n      } else {\r\n        message = JSON.stringify(message);\r\n      }\r\n    }\r\n\r\n    const logItem = new LogItem(message, level, context, category);\r\n\r\n    this._log.push(logItem);\r\n\r\n    Log._onItemAdded.dispatch(this, logItem);\r\n\r\n    // Output to browser console for visibility during debugging\r\n    // In browser context, this helps developers see logs in DevTools\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    if (typeof (globalThis as any).window !== \"undefined\") {\r\n      const prefix = context ? `[${context}] ` : \"\";\r\n      const fullMessage = prefix + message;\r\n\r\n      switch (level) {\r\n        case LogItemLevel.error:\r\n          console.error(fullMessage);\r\n          break;\r\n        case LogItemLevel.important:\r\n          console.warn(fullMessage);\r\n          break;\r\n        case LogItemLevel.message:\r\n          // Only message level goes to console.log by default\r\n          console.log(fullMessage);\r\n          break;\r\n        // verbose and debug are only shown in console when ?debug=true\r\n        case LogItemLevel.verbose:\r\n        case LogItemLevel.debug:\r\n          if (Utilities.isDebug) {\r\n            console.log(fullMessage);\r\n          }\r\n          break;\r\n        // operation started/ended don't need console output\r\n      }\r\n    }\r\n\r\n    return logItem.operId;\r\n  }\r\n\r\n  static debug(message: string, context?: string) {\r\n    this.log(message, LogItemLevel.debug, context);\r\n    // Console output is now handled in the log() method for browser contexts.\r\n    // In Node.js contexts (window undefined), only print directly if there are\r\n    // no event subscribers \u2014 otherwise the subscriber (e.g. LocalEnvironment)\r\n    // already handles console output and we'd get duplicate lines.\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    if (typeof (globalThis as any).window === \"undefined\" && this._onItemAdded.count === 0) {\r\n      console.log(message);\r\n    }\r\n  }\r\n\r\n  static assertIsInt(number: number, message?: string) {\r\n    if (number !== Math.round(number)) {\r\n      Log.debugAlert(\"Unexpectedly found number \" + number + \" is not an integer. \" + (message ? message : \"\"));\r\n    }\r\n  }\r\n\r\n  static getStack() {\r\n    let stack = \"\";\r\n\r\n    try {\r\n      throw new Error();\r\n    } catch (e: any) {\r\n      stack = e.stack ? e.stack : \"\";\r\n    }\r\n\r\n    const startOfLog = stack.lastIndexOf(\"\\n    at Log.\");\r\n\r\n    if (startOfLog >= 0) {\r\n      stack = stack.substring(startOfLog);\r\n    }\r\n\r\n    return stack;\r\n  }\r\n\r\n  static assert(condition: boolean, message?: string, context?: string): asserts condition {\r\n    if (!condition) {\r\n      if (!message) {\r\n        Log.debugAlert(\"Assertion failed. - \" + this.getStack(), context);\r\n      } else {\r\n        Log.debugAlert(\"Assertion failed: \" + message + \" - \" + this.getStack(), context);\r\n      }\r\n    }\r\n  }\r\n\r\n  static assertDefined(obj: any, message?: string) {\r\n    if (!obj) {\r\n      Log.unexpectedUndefined(\"LAD.\" + (message ? message : \"\"));\r\n\r\n      debugger;\r\n    }\r\n\r\n    return obj !== undefined && obj !== null;\r\n  }\r\n\r\n  static fail(message: string, context?: string) {\r\n    Log.debugAlert(\"Failure case: \" + message, context);\r\n  }\r\n\r\n  static unsupportedToken(token: string, context?: string) {\r\n    if (Utilities.isDebug) {\r\n      Log.debugAlert(\"Unsupported token: \" + token, context);\r\n    }\r\n  }\r\n\r\n  static unexpectedError(errorMessage: string, context?: string) {\r\n    if (Utilities.isDebug) {\r\n      Log.debugAlert(errorMessage, context);\r\n    }\r\n\r\n    throw new Error(errorMessage);\r\n  }\r\n\r\n  static debugAlert(message: string, context?: string) {\r\n    if (Log._suppressedLogs[\"all\"] === true) {\r\n      return;\r\n    }\r\n\r\n    Log.debug(message, context);\r\n\r\n    if (!Utilities.isDebug) {\r\n      return;\r\n    }\r\n\r\n    let stack: string = \"\";\r\n    let header: string = \"\";\r\n\r\n    const err = new Error();\r\n\r\n    if (err.stack !== undefined) {\r\n      stack = err.stack;\r\n    }\r\n\r\n    if (!stack || stack === \"\") {\r\n      stack = this.getStack();\r\n    }\r\n\r\n    let i = stack.lastIndexOf(\"at Function.\");\r\n\r\n    if (i >= 0) {\r\n      i = stack.indexOf(\"at \", i + 1);\r\n\r\n      if (i >= 4) {\r\n        // i -= 4;\r\n        stack = stack.substring(i, stack.length);\r\n\r\n        const nextSpace = stack.indexOf(\" \", 8);\r\n\r\n        if (nextSpace >= 0) {\r\n          header = \"=== \" + stack.substring(7, nextSpace) + \" ===\\n\\n\";\r\n        }\r\n      }\r\n    }\r\n\r\n    const wholeMessage = header + message + \"\\n\" + stack;\r\n\r\n    if (LogItem.alertFunction) {\r\n      let stackTrim = stack;\r\n\r\n      if (stackTrim.length > 80) {\r\n        stackTrim = stackTrim.substring(0, 80);\r\n      }\r\n\r\n      LogItem.alertFunction(message + \"\\n\\n\" + stackTrim);\r\n      // debugger;\r\n      return;\r\n    } else if (AppServiceProxy.hasAppService && CreatorToolsHost.isWeb) {\r\n      // @ts-ignore\r\n      alert(header + message + \"\\n\\n\" + stack);\r\n      debugger;\r\n      return;\r\n      // @ts-ignore\r\n    } else if (typeof window === \"undefined\") {\r\n      console.log(header + message + \"\\n\\n\" + stack);\r\n      return;\r\n    }\r\n\r\n    // @ts-ignore\r\n    const val = prompt(wholeMessage, \"b to break, s to suppress, a to suppress all\");\r\n\r\n    if (val === \"s\") {\r\n      Log._suppressedLogs[message] = true;\r\n      return;\r\n    } else if (val === \"b\") {\r\n      debugger;\r\n    } else if (val === \"a\") {\r\n      Log._suppressedLogs[\"all\"] = true;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"./IFile\";\r\n\r\nexport enum FileDifferenceType {\r\n  none = 0,\r\n  contentsDifferent = 1,\r\n  fileAdded = 2,\r\n  fileDeleted = 3,\r\n}\r\n\r\nexport default interface IFileDifference {\r\n  type: FileDifferenceType;\r\n  original?: IFile;\r\n  updated?: IFile;\r\n  path: string;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\n\r\nexport enum FolderDifferenceType {\r\n  none = 0,\r\n  fileContentsDifferent = 1,\r\n  fileListDifferent = 2,\r\n  fileListAndContentsDifferent = 3,\r\n  folderAdded = 4,\r\n  folderAddedAndFileContentsDifferent = 5,\r\n  folderAddedAndFileListDifferent = 6,\r\n  folderAddedAndFileListAndContentsDifferent = 7,\r\n  folderDeleted = 8,\r\n  folderDeletedAndFileContentsDifferent = 9,\r\n  folderDeletedAndFileListDifferent = 10,\r\n  folderDeletedAndFileListAndContentsDifferent = 11,\r\n  folderListDifferent = 12,\r\n  folderListDifferentAndFileContentsDifferent = 13,\r\n  folderListDifferentAndFileListDifferent = 14,\r\n  folderListDifferentAndFileListAndContentsDifferent = 15,\r\n}\r\n\r\nexport default interface IFolderDifference {\r\n  type: FolderDifferenceType;\r\n  original?: IFolder;\r\n  updated?: IFolder;\r\n  path: string;\r\n}\r\n", "'use strict';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n", "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n", "module.exports = require('stream');\n", "/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n", "if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n", "try {\n  var util = require('util');\n  /* istanbul ignore next */\n  if (typeof util.inherits !== 'function') throw '';\n  module.exports = util.inherits;\n} catch (e) {\n  /* istanbul ignore next */\n  module.exports = require('./inherits_browser.js');\n}\n", "'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}", "'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        pna.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, this, err);\n      }\n    }\n\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        pna.nextTick(emitErrorNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, _this, err);\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};", "\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\n};", "/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, { hasUnpiped: false });\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};", "var Stream = require('stream');\nif (process.env.READABLE_STREAM === 'disable' && Stream) {\n  module.exports = Stream;\n  exports = module.exports = Stream.Readable;\n  exports.Readable = Stream.Readable;\n  exports.Writable = Stream.Writable;\n  exports.Duplex = Stream.Duplex;\n  exports.Transform = Stream.Transform;\n  exports.PassThrough = Stream.PassThrough;\n  exports.Stream = Stream;\n} else {\n  exports = module.exports = require('./lib/_stream_readable.js');\n  exports.Stream = Stream || exports;\n  exports.Readable = exports;\n  exports.Writable = require('./lib/_stream_writable.js');\n  exports.Duplex = require('./lib/_stream_duplex.js');\n  exports.Transform = require('./lib/_stream_transform.js');\n  exports.PassThrough = require('./lib/_stream_passthrough.js');\n}\n", "\"use strict\";\n\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n    exports.blob = false;\n}\nelse {\n    var buffer = new ArrayBuffer(0);\n    try {\n        exports.blob = new Blob([buffer], {\n            type: \"application/zip\"\n        }).size === 0;\n    }\n    catch (e) {\n        try {\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(buffer);\n            exports.blob = builder.getBlob(\"application/zip\").size === 0;\n        }\n        catch (e) {\n            exports.blob = false;\n        }\n    }\n}\n\ntry {\n    exports.nodestream = !!require(\"readable-stream\").Readable;\n} catch(e) {\n    exports.nodestream = false;\n}\n", "\"use strict\";\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\n// private property\nvar _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\n// public method for encoding\nexports.encode = function(input) {\n    var output = [];\n    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n    var i = 0, len = input.length, remainingBytes = len;\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n    while (i < input.length) {\n        remainingBytes = len - i;\n\n        if (!isArray) {\n            chr1 = input.charCodeAt(i++);\n            chr2 = i < len ? input.charCodeAt(i++) : 0;\n            chr3 = i < len ? input.charCodeAt(i++) : 0;\n        } else {\n            chr1 = input[i++];\n            chr2 = i < len ? input[i++] : 0;\n            chr3 = i < len ? input[i++] : 0;\n        }\n\n        enc1 = chr1 >> 2;\n        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n        enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64;\n        enc4 = remainingBytes > 2 ? (chr3 & 63) : 64;\n\n        output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));\n\n    }\n\n    return output.join(\"\");\n};\n\n// public method for decoding\nexports.decode = function(input) {\n    var chr1, chr2, chr3;\n    var enc1, enc2, enc3, enc4;\n    var i = 0, resultIndex = 0;\n\n    var dataUrlPrefix = \"data:\";\n\n    if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {\n        // This is a common error: people give a data url\n        // (data:image/png;base64,iVBOR...) with a {base64: true} and\n        // wonders why things don't work.\n        // We can detect that the string input looks like a data url but we\n        // *can't* be sure it is one: removing everything up to the comma would\n        // be too dangerous.\n        throw new Error(\"Invalid base64 input, it looks like a data url.\");\n    }\n\n    input = input.replace(/[^A-Za-z0-9+/=]/g, \"\");\n\n    var totalLength = input.length * 3 / 4;\n    if(input.charAt(input.length - 1) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if(input.charAt(input.length - 2) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if (totalLength % 1 !== 0) {\n        // totalLength is not an integer, the length does not match a valid\n        // base64 content. That can happen if:\n        // - the input is not a base64 content\n        // - the input is *almost* a base64 content, with a extra chars at the\n        //   beginning or at the end\n        // - the input uses a base64 variant (base64url for example)\n        throw new Error(\"Invalid base64 input, bad content length.\");\n    }\n    var output;\n    if (support.uint8array) {\n        output = new Uint8Array(totalLength|0);\n    } else {\n        output = new Array(totalLength|0);\n    }\n\n    while (i < input.length) {\n\n        enc1 = _keyStr.indexOf(input.charAt(i++));\n        enc2 = _keyStr.indexOf(input.charAt(i++));\n        enc3 = _keyStr.indexOf(input.charAt(i++));\n        enc4 = _keyStr.indexOf(input.charAt(i++));\n\n        chr1 = (enc1 << 2) | (enc2 >> 4);\n        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n        chr3 = ((enc3 & 3) << 6) | enc4;\n\n        output[resultIndex++] = chr1;\n\n        if (enc3 !== 64) {\n            output[resultIndex++] = chr2;\n        }\n        if (enc4 !== 64) {\n            output[resultIndex++] = chr3;\n        }\n\n    }\n\n    return output;\n};\n", "\"use strict\";\n\nmodule.exports = {\n    /**\n     * True if this is running in Nodejs, will be undefined in a browser.\n     * In a browser, browserify won't include this file and the whole module\n     * will be resolved an empty object.\n     */\n    isNode : typeof Buffer !== \"undefined\",\n    /**\n     * Create a new nodejs Buffer from an existing content.\n     * @param {Object} data the data to pass to the constructor.\n     * @param {String} encoding the encoding to use.\n     * @return {Buffer} a new Buffer.\n     */\n    newBufferFrom: function(data, encoding) {\n        if (Buffer.from && Buffer.from !== Uint8Array.from) {\n            return Buffer.from(data, encoding);\n        } else {\n            if (typeof data === \"number\") {\n                // Safeguard for old Node.js versions. On newer versions,\n                // Buffer.from(number) / Buffer(number, encoding) already throw.\n                throw new Error(\"The \\\"data\\\" argument must not be a number\");\n            }\n            return new Buffer(data, encoding);\n        }\n    },\n    /**\n     * Create a new nodejs Buffer with the specified size.\n     * @param {Integer} size the size of the buffer.\n     * @return {Buffer} a new Buffer.\n     */\n    allocBuffer: function (size) {\n        if (Buffer.alloc) {\n            return Buffer.alloc(size);\n        } else {\n            var buf = new Buffer(size);\n            buf.fill(0);\n            return buf;\n        }\n    },\n    /**\n     * Find out if an object is a Buffer.\n     * @param {Object} b the object to test.\n     * @return {Boolean} true if the object is a Buffer, false otherwise.\n     */\n    isBuffer : function(b){\n        return Buffer.isBuffer(b);\n    },\n\n    isStream : function (obj) {\n        return obj &&\n            typeof obj.on === \"function\" &&\n            typeof obj.pause === \"function\" &&\n            typeof obj.resume === \"function\";\n    }\n};\n", "'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\nif (process.browser) {\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n} else {\n  scheduleDrain = function () {\n    process.nextTick(nextTick);\n  };\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n", "'use strict';\nvar immediate = require('immediate');\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n/* istanbul ignore else */\nif (!process.browser) {\n  // in which we actually take advantage of JS scoping\n  var UNHANDLED = ['UNHANDLED'];\n}\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  /* istanbul ignore else */\n  if (!process.browser) {\n    this.handled = UNHANDLED;\n  }\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype.finally = function (callback) {\n  if (typeof callback !== 'function') {\n    return this;\n  }\n  var p = this.constructor;\n  return this.then(resolve, reject);\n\n  function resolve(value) {\n    function yes () {\n      return value;\n    }\n    return p.resolve(callback()).then(yes);\n  }\n  function reject(reason) {\n    function no () {\n      throw reason;\n    }\n    return p.resolve(callback()).then(no);\n  }\n};\nPromise.prototype.catch = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  /* istanbul ignore else */\n  if (!process.browser) {\n    if (this.handled === UNHANDLED) {\n      this.handled = null;\n    }\n  }\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  /* istanbul ignore else */\n  if (!process.browser) {\n    if (self.handled === UNHANDLED) {\n      immediate(function () {\n        if (self.handled === UNHANDLED) {\n          process.emit('unhandledRejection', error, self);\n        }\n      });\n    }\n  }\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n", "\"use strict\";\n\n// load the global object first:\n// - it should be better integrated in the system (unhandledRejection in node)\n// - the environment may have a custom Promise implementation (see zone.js)\nvar ES6Promise = null;\nif (typeof Promise !== \"undefined\") {\n    ES6Promise = Promise;\n} else {\n    ES6Promise = require(\"lie\");\n}\n\n/**\n * Let the user use/change some implementations.\n */\nmodule.exports = {\n    Promise: ES6Promise\n};\n", "(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6\u20138\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n", "\"use strict\";\n\nvar support = require(\"./support\");\nvar base64 = require(\"./base64\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar external = require(\"./external\");\nrequire(\"setimmediate\");\n\n\n/**\n * Convert a string that pass as a \"binary string\": it should represent a byte\n * array but may have > 255 char codes. Be sure to take only the first byte\n * and returns the byte array.\n * @param {String} str the string to transform.\n * @return {Array|Uint8Array} the string in a binary format.\n */\nfunction string2binary(str) {\n    var result = null;\n    if (support.uint8array) {\n        result = new Uint8Array(str.length);\n    } else {\n        result = new Array(str.length);\n    }\n    return stringToArrayLike(str, result);\n}\n\n/**\n * Create a new blob with the given content and the given type.\n * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use\n * an Uint8Array because the stock browser of android 4 won't accept it (it\n * will be silently converted to a string, \"[object Uint8Array]\").\n *\n * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:\n * when a large amount of Array is used to create the Blob, the amount of\n * memory consumed is nearly 100 times the original data amount.\n *\n * @param {String} type the mime type of the blob.\n * @return {Blob} the created blob.\n */\nexports.newBlob = function(part, type) {\n    exports.checkSupport(\"blob\");\n\n    try {\n        // Blob constructor\n        return new Blob([part], {\n            type: type\n        });\n    }\n    catch (e) {\n\n        try {\n            // deprecated, browser only, old way\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(part);\n            return builder.getBlob(type);\n        }\n        catch (e) {\n\n            // well, fuck ?!\n            throw new Error(\"Bug : can't construct the Blob.\");\n        }\n    }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n    return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n    for (var i = 0; i < str.length; ++i) {\n        array[i] = str.charCodeAt(i) & 0xFF;\n    }\n    return array;\n}\n\n/**\n * An helper for the function arrayLikeToString.\n * This contains static information and functions that\n * can be optimized by the browser JIT compiler.\n */\nvar arrayToStringHelper = {\n    /**\n     * Transform an array of int into a string, chunk by chunk.\n     * See the performances notes on arrayLikeToString.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @param {String} type the type of the array.\n     * @param {Integer} chunk the chunk size.\n     * @return {String} the resulting string.\n     * @throws Error if the chunk is too big for the stack.\n     */\n    stringifyByChunk: function(array, type, chunk) {\n        var result = [], k = 0, len = array.length;\n        // shortcut\n        if (len <= chunk) {\n            return String.fromCharCode.apply(null, array);\n        }\n        while (k < len) {\n            if (type === \"array\" || type === \"nodebuffer\") {\n                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n            }\n            else {\n                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n            }\n            k += chunk;\n        }\n        return result.join(\"\");\n    },\n    /**\n     * Call String.fromCharCode on every item in the array.\n     * This is the naive implementation, which generate A LOT of intermediate string.\n     * This should be used when everything else fail.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @return {String} the result.\n     */\n    stringifyByChar: function(array){\n        var resultStr = \"\";\n        for(var i = 0; i < array.length; i++) {\n            resultStr += String.fromCharCode(array[i]);\n        }\n        return resultStr;\n    },\n    applyCanBeUsed : {\n        /**\n         * true if the browser accepts to use String.fromCharCode on Uint8Array\n         */\n        uint8array : (function () {\n            try {\n                return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })(),\n        /**\n         * true if the browser accepts to use String.fromCharCode on nodejs Buffer.\n         */\n        nodebuffer : (function () {\n            try {\n                return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })()\n    }\n};\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n    // Performances notes :\n    // --------------------\n    // String.fromCharCode.apply(null, array) is the fastest, see\n    // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n    // but the stack is limited (and we can get huge arrays !).\n    //\n    // result += String.fromCharCode(array[i]); generate too many strings !\n    //\n    // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n    // TODO : we now have workers that split the work. Do we still need that ?\n    var chunk = 65536,\n        type = exports.getTypeOf(array),\n        canUseApply = true;\n    if (type === \"uint8array\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;\n    } else if (type === \"nodebuffer\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;\n    }\n\n    if (canUseApply) {\n        while (chunk > 1) {\n            try {\n                return arrayToStringHelper.stringifyByChunk(array, type, chunk);\n            } catch (e) {\n                chunk = Math.floor(chunk / 2);\n            }\n        }\n    }\n\n    // no apply or chunk error : slow and painful algorithm\n    // default browser on android 4.*\n    return arrayToStringHelper.stringifyByChar(array);\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n    for (var i = 0; i < arrayFrom.length; i++) {\n        arrayTo[i] = arrayFrom[i];\n    }\n    return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n    \"string\": identity,\n    \"array\": function(input) {\n        return stringToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"string\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return stringToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": function(input) {\n        return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));\n    }\n};\n\n// array to ?\ntransform[\"array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": identity,\n    \"arraybuffer\": function(input) {\n        return (new Uint8Array(input)).buffer;\n    },\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n    \"string\": function(input) {\n        return arrayLikeToString(new Uint8Array(input));\n    },\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n    },\n    \"arraybuffer\": identity,\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(new Uint8Array(input));\n    }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return input.buffer;\n    },\n    \"uint8array\": identity,\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n    if (!input) {\n        // undefined, null, etc\n        // an empty string won't harm.\n        input = \"\";\n    }\n    if (!outputType) {\n        return input;\n    }\n    exports.checkSupport(outputType);\n    var inputType = exports.getTypeOf(input);\n    var result = transform[inputType][outputType](input);\n    return result;\n};\n\n/**\n * Resolve all relative path components, \".\" and \"..\", in a path. If these relative components\n * traverse above the root then the resulting path will only contain the final path component.\n *\n * All empty components, e.g. \"//\", are removed.\n * @param {string} path A path with / or \\ separators\n * @returns {string} The path with all relative path components resolved.\n */\nexports.resolve = function(path) {\n    var parts = path.split(\"/\");\n    var result = [];\n    for (var index = 0; index < parts.length; index++) {\n        var part = parts[index];\n        // Allow the first and last component to be empty for trailing slashes.\n        if (part === \".\" || (part === \"\" && index !== 0 && index !== parts.length - 1)) {\n            continue;\n        } else if (part === \"..\") {\n            result.pop();\n        } else {\n            result.push(part);\n        }\n    }\n    return result.join(\"/\");\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n    if (typeof input === \"string\") {\n        return \"string\";\n    }\n    if (Object.prototype.toString.call(input) === \"[object Array]\") {\n        return \"array\";\n    }\n    if (support.nodebuffer && nodejsUtils.isBuffer(input)) {\n        return \"nodebuffer\";\n    }\n    if (support.uint8array && input instanceof Uint8Array) {\n        return \"uint8array\";\n    }\n    if (support.arraybuffer && input instanceof ArrayBuffer) {\n        return \"arraybuffer\";\n    }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n    var supported = support[type.toLowerCase()];\n    if (!supported) {\n        throw new Error(type + \" is not supported by this platform\");\n    }\n};\n\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n    var res = \"\",\n        code, i;\n    for (i = 0; i < (str || \"\").length; i++) {\n        code = str.charCodeAt(i);\n        res += \"\\\\x\" + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n    }\n    return res;\n};\n\n/**\n * Defer the call of a function.\n * @param {Function} callback the function to call asynchronously.\n * @param {Array} args the arguments to give to the callback.\n */\nexports.delay = function(callback, args, self) {\n    setImmediate(function () {\n        callback.apply(self || null, args || []);\n    });\n};\n\n/**\n * Extends a prototype with an other, without calling a constructor with\n * side effects. Inspired by nodejs' `utils.inherits`\n * @param {Function} ctor the constructor to augment\n * @param {Function} superCtor the parent constructor to use\n */\nexports.inherits = function (ctor, superCtor) {\n    var Obj = function() {};\n    Obj.prototype = superCtor.prototype;\n    ctor.prototype = new Obj();\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nexports.extend = function() {\n    var result = {}, i, attr;\n    for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n        for (attr in arguments[i]) {\n            if (Object.prototype.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === \"undefined\") {\n                result[attr] = arguments[i][attr];\n            }\n        }\n    }\n    return result;\n};\n\n/**\n * Transform arbitrary content into a Promise.\n * @param {String} name a name for the content being processed.\n * @param {Object} inputData the content to process.\n * @param {Boolean} isBinary true if the content is not an unicode string\n * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.\n * @param {Boolean} isBase64 true if the string content is encoded with base64.\n * @return {Promise} a promise in a format usable by JSZip.\n */\nexports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) {\n\n    // if inputData is already a promise, this flatten it.\n    var promise = external.Promise.resolve(inputData).then(function(data) {\n\n\n        var isBlob = support.blob && (data instanceof Blob || [\"[object File]\", \"[object Blob]\"].indexOf(Object.prototype.toString.call(data)) !== -1);\n\n        if (isBlob && typeof FileReader !== \"undefined\") {\n            return new external.Promise(function (resolve, reject) {\n                var reader = new FileReader();\n\n                reader.onload = function(e) {\n                    resolve(e.target.result);\n                };\n                reader.onerror = function(e) {\n                    reject(e.target.error);\n                };\n                reader.readAsArrayBuffer(data);\n            });\n        } else {\n            return data;\n        }\n    });\n\n    return promise.then(function(data) {\n        var dataType = exports.getTypeOf(data);\n\n        if (!dataType) {\n            return external.Promise.reject(\n                new Error(\"Can't read the data of '\" + name + \"'. Is it \" +\n                          \"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\")\n            );\n        }\n        // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n        if (dataType === \"arraybuffer\") {\n            data = exports.transformTo(\"uint8array\", data);\n        } else if (dataType === \"string\") {\n            if (isBase64) {\n                data = base64.decode(data);\n            }\n            else if (isBinary) {\n                // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask\n                if (isOptimizedBinaryString !== true) {\n                    // this is a string, not in a base64 format.\n                    // Be sure that this is a correct \"binary string\"\n                    data = string2binary(data);\n                }\n            }\n        }\n        return data;\n    });\n};\n", "\"use strict\";\n\n/**\n * A worker that does nothing but passing chunks to the next one. This is like\n * a nodejs stream but with some differences. On the good side :\n * - it works on IE 6-9 without any issue / polyfill\n * - it weights less than the full dependencies bundled with browserify\n * - it forwards errors (no need to declare an error handler EVERYWHERE)\n *\n * A chunk is an object with 2 attributes : `meta` and `data`. The former is an\n * object containing anything (`percent` for example), see each worker for more\n * details. The latter is the real data (String, Uint8Array, etc).\n *\n * @constructor\n * @param {String} name the name of the stream (mainly used for debugging purposes)\n */\nfunction GenericWorker(name) {\n    // the name of the worker\n    this.name = name || \"default\";\n    // an object containing metadata about the workers chain\n    this.streamInfo = {};\n    // an error which happened when the worker was paused\n    this.generatedError = null;\n    // an object containing metadata to be merged by this worker into the general metadata\n    this.extraStreamInfo = {};\n    // true if the stream is paused (and should not do anything), false otherwise\n    this.isPaused = true;\n    // true if the stream is finished (and should not do anything), false otherwise\n    this.isFinished = false;\n    // true if the stream is locked to prevent further structure updates (pipe), false otherwise\n    this.isLocked = false;\n    // the event listeners\n    this._listeners = {\n        \"data\":[],\n        \"end\":[],\n        \"error\":[]\n    };\n    // the previous worker, if any\n    this.previous = null;\n}\n\nGenericWorker.prototype = {\n    /**\n     * Push a chunk to the next workers.\n     * @param {Object} chunk the chunk to push\n     */\n    push : function (chunk) {\n        this.emit(\"data\", chunk);\n    },\n    /**\n     * End the stream.\n     * @return {Boolean} true if this call ended the worker, false otherwise.\n     */\n    end : function () {\n        if (this.isFinished) {\n            return false;\n        }\n\n        this.flush();\n        try {\n            this.emit(\"end\");\n            this.cleanUp();\n            this.isFinished = true;\n        } catch (e) {\n            this.emit(\"error\", e);\n        }\n        return true;\n    },\n    /**\n     * End the stream with an error.\n     * @param {Error} e the error which caused the premature end.\n     * @return {Boolean} true if this call ended the worker with an error, false otherwise.\n     */\n    error : function (e) {\n        if (this.isFinished) {\n            return false;\n        }\n\n        if(this.isPaused) {\n            this.generatedError = e;\n        } else {\n            this.isFinished = true;\n\n            this.emit(\"error\", e);\n\n            // in the workers chain exploded in the middle of the chain,\n            // the error event will go downward but we also need to notify\n            // workers upward that there has been an error.\n            if(this.previous) {\n                this.previous.error(e);\n            }\n\n            this.cleanUp();\n        }\n        return true;\n    },\n    /**\n     * Add a callback on an event.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Function} listener the function to call when the event is triggered\n     * @return {GenericWorker} the current object for chainability\n     */\n    on : function (name, listener) {\n        this._listeners[name].push(listener);\n        return this;\n    },\n    /**\n     * Clean any references when a worker is ending.\n     */\n    cleanUp : function () {\n        this.streamInfo = this.generatedError = this.extraStreamInfo = null;\n        this._listeners = [];\n    },\n    /**\n     * Trigger an event. This will call registered callback with the provided arg.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Object} arg the argument to call the callback with.\n     */\n    emit : function (name, arg) {\n        if (this._listeners[name]) {\n            for(var i = 0; i < this._listeners[name].length; i++) {\n                this._listeners[name][i].call(this, arg);\n            }\n        }\n    },\n    /**\n     * Chain a worker with an other.\n     * @param {Worker} next the worker receiving events from the current one.\n     * @return {worker} the next worker for chainability\n     */\n    pipe : function (next) {\n        return next.registerPrevious(this);\n    },\n    /**\n     * Same as `pipe` in the other direction.\n     * Using an API with `pipe(next)` is very easy.\n     * Implementing the API with the point of view of the next one registering\n     * a source is easier, see the ZipFileWorker.\n     * @param {Worker} previous the previous worker, sending events to this one\n     * @return {Worker} the current worker for chainability\n     */\n    registerPrevious : function (previous) {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n\n        // sharing the streamInfo...\n        this.streamInfo = previous.streamInfo;\n        // ... and adding our own bits\n        this.mergeStreamInfo();\n        this.previous =  previous;\n        var self = this;\n        previous.on(\"data\", function (chunk) {\n            self.processChunk(chunk);\n        });\n        previous.on(\"end\", function () {\n            self.end();\n        });\n        previous.on(\"error\", function (e) {\n            self.error(e);\n        });\n        return this;\n    },\n    /**\n     * Pause the stream so it doesn't send events anymore.\n     * @return {Boolean} true if this call paused the worker, false otherwise.\n     */\n    pause : function () {\n        if(this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = true;\n\n        if(this.previous) {\n            this.previous.pause();\n        }\n        return true;\n    },\n    /**\n     * Resume a paused stream.\n     * @return {Boolean} true if this call resumed the worker, false otherwise.\n     */\n    resume : function () {\n        if(!this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = false;\n\n        // if true, the worker tried to resume but failed\n        var withError = false;\n        if(this.generatedError) {\n            this.error(this.generatedError);\n            withError = true;\n        }\n        if(this.previous) {\n            this.previous.resume();\n        }\n\n        return !withError;\n    },\n    /**\n     * Flush any remaining bytes as the stream is ending.\n     */\n    flush : function () {},\n    /**\n     * Process a chunk. This is usually the method overridden.\n     * @param {Object} chunk the chunk to process.\n     */\n    processChunk : function(chunk) {\n        this.push(chunk);\n    },\n    /**\n     * Add a key/value to be added in the workers chain streamInfo once activated.\n     * @param {String} key the key to use\n     * @param {Object} value the associated value\n     * @return {Worker} the current worker for chainability\n     */\n    withStreamInfo : function (key, value) {\n        this.extraStreamInfo[key] = value;\n        this.mergeStreamInfo();\n        return this;\n    },\n    /**\n     * Merge this worker's streamInfo into the chain's streamInfo.\n     */\n    mergeStreamInfo : function () {\n        for(var key in this.extraStreamInfo) {\n            if (!Object.prototype.hasOwnProperty.call(this.extraStreamInfo, key)) {\n                continue;\n            }\n            this.streamInfo[key] = this.extraStreamInfo[key];\n        }\n    },\n\n    /**\n     * Lock the stream to prevent further updates on the workers chain.\n     * After calling this method, all calls to pipe will fail.\n     */\n    lock: function () {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n        this.isLocked = true;\n        if (this.previous) {\n            this.previous.lock();\n        }\n    },\n\n    /**\n     *\n     * Pretty print the workers chain.\n     */\n    toString : function () {\n        var me = \"Worker \" + this.name;\n        if (this.previous) {\n            return this.previous + \" -> \" + me;\n        } else {\n            return me;\n        }\n    }\n};\n\nmodule.exports = GenericWorker;\n", "\"use strict\";\n\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new Array(256);\nfor (var i=0; i<256; i++) {\n    _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n    var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n    // count binary size\n    for (m_pos = 0; m_pos < str_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n    }\n\n    // allocate buffer\n    if (support.uint8array) {\n        buf = new Uint8Array(buf_len);\n    } else {\n        buf = new Array(buf_len);\n    }\n\n    // convert\n    for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        if (c < 0x80) {\n            /* one byte */\n            buf[i++] = c;\n        } else if (c < 0x800) {\n            /* two bytes */\n            buf[i++] = 0xC0 | (c >>> 6);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else if (c < 0x10000) {\n            /* three bytes */\n            buf[i++] = 0xE0 | (c >>> 12);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else {\n            /* four bytes */\n            buf[i++] = 0xf0 | (c >>> 18);\n            buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        }\n    }\n\n    return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nvar utf8border = function(buf, max) {\n    var pos;\n\n    max = max || buf.length;\n    if (max > buf.length) { max = buf.length; }\n\n    // go back from last position, until start of sequence found\n    pos = max-1;\n    while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n    // Fuckup - very small and broken sequence,\n    // return max, because we should return something anyway.\n    if (pos < 0) { return max; }\n\n    // If we came to start of buffer - that means vuffer is too small,\n    // return max too.\n    if (pos === 0) { return max; }\n\n    return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n    var i, out, c, c_len;\n    var len = buf.length;\n\n    // Reserve max possible length (2 words per char)\n    // NB: by unknown reasons, Array is significantly faster for\n    //     String.fromCharCode.apply than Uint16Array.\n    var utf16buf = new Array(len*2);\n\n    for (out=0, i=0; i<len;) {\n        c = buf[i++];\n        // quick process ascii\n        if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n        c_len = _utf8len[c];\n        // skip 5 & 6 byte codes\n        if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n        // apply mask on first byte\n        c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n        // join the rest\n        while (c_len > 1 && i < len) {\n            c = (c << 6) | (buf[i++] & 0x3f);\n            c_len--;\n        }\n\n        // terminated by end of string?\n        if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n        if (c < 0x10000) {\n            utf16buf[out++] = c;\n        } else {\n            c -= 0x10000;\n            utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n            utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n        }\n    }\n\n    // shrinkBuf(utf16buf, out)\n    if (utf16buf.length !== out) {\n        if(utf16buf.subarray) {\n            utf16buf = utf16buf.subarray(0, out);\n        } else {\n            utf16buf.length = out;\n        }\n    }\n\n    // return String.fromCharCode.apply(null, utf16buf);\n    return utils.applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nexports.utf8encode = function utf8encode(str) {\n    if (support.nodebuffer) {\n        return nodejsUtils.newBufferFrom(str, \"utf-8\");\n    }\n\n    return string2buf(str);\n};\n\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nexports.utf8decode = function utf8decode(buf) {\n    if (support.nodebuffer) {\n        return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n    }\n\n    buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n    return buf2string(buf);\n};\n\n/**\n * A worker to decode utf8 encoded binary chunks into string chunks.\n * @constructor\n */\nfunction Utf8DecodeWorker() {\n    GenericWorker.call(this, \"utf-8 decode\");\n    // the last bytes if a chunk didn't end with a complete codepoint.\n    this.leftOver = null;\n}\nutils.inherits(Utf8DecodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8DecodeWorker.prototype.processChunk = function (chunk) {\n\n    var data = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", chunk.data);\n\n    // 1st step, re-use what's left of the previous chunk\n    if (this.leftOver && this.leftOver.length) {\n        if(support.uint8array) {\n            var previousData = data;\n            data = new Uint8Array(previousData.length + this.leftOver.length);\n            data.set(this.leftOver, 0);\n            data.set(previousData, this.leftOver.length);\n        } else {\n            data = this.leftOver.concat(data);\n        }\n        this.leftOver = null;\n    }\n\n    var nextBoundary = utf8border(data);\n    var usableData = data;\n    if (nextBoundary !== data.length) {\n        if (support.uint8array) {\n            usableData = data.subarray(0, nextBoundary);\n            this.leftOver = data.subarray(nextBoundary, data.length);\n        } else {\n            usableData = data.slice(0, nextBoundary);\n            this.leftOver = data.slice(nextBoundary, data.length);\n        }\n    }\n\n    this.push({\n        data : exports.utf8decode(usableData),\n        meta : chunk.meta\n    });\n};\n\n/**\n * @see GenericWorker.flush\n */\nUtf8DecodeWorker.prototype.flush = function () {\n    if(this.leftOver && this.leftOver.length) {\n        this.push({\n            data : exports.utf8decode(this.leftOver),\n            meta : {}\n        });\n        this.leftOver = null;\n    }\n};\nexports.Utf8DecodeWorker = Utf8DecodeWorker;\n\n/**\n * A worker to endcode string chunks into utf8 encoded binary chunks.\n * @constructor\n */\nfunction Utf8EncodeWorker() {\n    GenericWorker.call(this, \"utf-8 encode\");\n}\nutils.inherits(Utf8EncodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8EncodeWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : exports.utf8encode(chunk.data),\n        meta : chunk.meta\n    });\n};\nexports.Utf8EncodeWorker = Utf8EncodeWorker;\n", "\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which convert chunks to a specified type.\n * @constructor\n * @param {String} destType the destination type.\n */\nfunction ConvertWorker(destType) {\n    GenericWorker.call(this, \"ConvertWorker to \" + destType);\n    this.destType = destType;\n}\nutils.inherits(ConvertWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nConvertWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : utils.transformTo(this.destType, chunk.data),\n        meta : chunk.meta\n    });\n};\nmodule.exports = ConvertWorker;\n", "\"use strict\";\n\nvar Readable = require(\"readable-stream\").Readable;\n\nvar utils = require(\"../utils\");\nutils.inherits(NodejsStreamOutputAdapter, Readable);\n\n/**\n* A nodejs stream using a worker as source.\n* @see the SourceWrapper in http://nodejs.org/api/stream.html\n* @constructor\n* @param {StreamHelper} helper the helper wrapping the worker\n* @param {Object} options the nodejs stream options\n* @param {Function} updateCb the update callback.\n*/\nfunction NodejsStreamOutputAdapter(helper, options, updateCb) {\n    Readable.call(this, options);\n    this._helper = helper;\n\n    var self = this;\n    helper.on(\"data\", function (data, meta) {\n        if (!self.push(data)) {\n            self._helper.pause();\n        }\n        if(updateCb) {\n            updateCb(meta);\n        }\n    })\n        .on(\"error\", function(e) {\n            self.emit(\"error\", e);\n        })\n        .on(\"end\", function () {\n            self.push(null);\n        });\n}\n\n\nNodejsStreamOutputAdapter.prototype._read = function() {\n    this._helper.resume();\n};\n\nmodule.exports = NodejsStreamOutputAdapter;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar ConvertWorker = require(\"./ConvertWorker\");\nvar GenericWorker = require(\"./GenericWorker\");\nvar base64 = require(\"../base64\");\nvar support = require(\"../support\");\nvar external = require(\"../external\");\n\nvar NodejsStreamOutputAdapter = null;\nif (support.nodestream) {\n    try {\n        NodejsStreamOutputAdapter = require(\"../nodejs/NodejsStreamOutputAdapter\");\n    } catch(e) {\n        // ignore\n    }\n}\n\n/**\n * Apply the final transformation of the data. If the user wants a Blob for\n * example, it's easier to work with an U8intArray and finally do the\n * ArrayBuffer/Blob conversion.\n * @param {String} type the name of the final type\n * @param {String|Uint8Array|Buffer} content the content to transform\n * @param {String} mimeType the mime type of the content, if applicable.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.\n */\nfunction transformZipOutput(type, content, mimeType) {\n    switch(type) {\n    case \"blob\" :\n        return utils.newBlob(utils.transformTo(\"arraybuffer\", content), mimeType);\n    case \"base64\" :\n        return base64.encode(content);\n    default :\n        return utils.transformTo(type, content);\n    }\n}\n\n/**\n * Concatenate an array of data of the given type.\n * @param {String} type the type of the data in the given array.\n * @param {Array} dataArray the array containing the data chunks to concatenate\n * @return {String|Uint8Array|Buffer} the concatenated data\n * @throws Error if the asked type is unsupported\n */\nfunction concat (type, dataArray) {\n    var i, index = 0, res = null, totalLength = 0;\n    for(i = 0; i < dataArray.length; i++) {\n        totalLength += dataArray[i].length;\n    }\n    switch(type) {\n    case \"string\":\n        return dataArray.join(\"\");\n    case \"array\":\n        return Array.prototype.concat.apply([], dataArray);\n    case \"uint8array\":\n        res = new Uint8Array(totalLength);\n        for(i = 0; i < dataArray.length; i++) {\n            res.set(dataArray[i], index);\n            index += dataArray[i].length;\n        }\n        return res;\n    case \"nodebuffer\":\n        return Buffer.concat(dataArray);\n    default:\n        throw new Error(\"concat : unsupported type '\"  + type + \"'\");\n    }\n}\n\n/**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {StreamHelper} helper the helper to use.\n * @param {Function} updateCallback a callback called on each update. Called\n * with one arg :\n * - the metadata linked to the update received.\n * @return Promise the promise for the accumulation.\n */\nfunction accumulate(helper, updateCallback) {\n    return new external.Promise(function (resolve, reject){\n        var dataArray = [];\n        var chunkType = helper._internalType,\n            resultType = helper._outputType,\n            mimeType = helper._mimeType;\n        helper\n            .on(\"data\", function (data, meta) {\n                dataArray.push(data);\n                if(updateCallback) {\n                    updateCallback(meta);\n                }\n            })\n            .on(\"error\", function(err) {\n                dataArray = [];\n                reject(err);\n            })\n            .on(\"end\", function (){\n                try {\n                    var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);\n                    resolve(result);\n                } catch (e) {\n                    reject(e);\n                }\n                dataArray = [];\n            })\n            .resume();\n    });\n}\n\n/**\n * An helper to easily use workers outside of JSZip.\n * @constructor\n * @param {Worker} worker the worker to wrap\n * @param {String} outputType the type of data expected by the use\n * @param {String} mimeType the mime type of the content, if applicable.\n */\nfunction StreamHelper(worker, outputType, mimeType) {\n    var internalType = outputType;\n    switch(outputType) {\n    case \"blob\":\n    case \"arraybuffer\":\n        internalType = \"uint8array\";\n        break;\n    case \"base64\":\n        internalType = \"string\";\n        break;\n    }\n\n    try {\n        // the type used internally\n        this._internalType = internalType;\n        // the type used to output results\n        this._outputType = outputType;\n        // the mime type\n        this._mimeType = mimeType;\n        utils.checkSupport(internalType);\n        this._worker = worker.pipe(new ConvertWorker(internalType));\n        // the last workers can be rewired without issues but we need to\n        // prevent any updates on previous workers.\n        worker.lock();\n    } catch(e) {\n        this._worker = new GenericWorker(\"error\");\n        this._worker.error(e);\n    }\n}\n\nStreamHelper.prototype = {\n    /**\n     * Listen a StreamHelper, accumulate its content and concatenate it into a\n     * complete block.\n     * @param {Function} updateCb the update callback.\n     * @return Promise the promise for the accumulation.\n     */\n    accumulate : function (updateCb) {\n        return accumulate(this, updateCb);\n    },\n    /**\n     * Add a listener on an event triggered on a stream.\n     * @param {String} evt the name of the event\n     * @param {Function} fn the listener\n     * @return {StreamHelper} the current helper.\n     */\n    on : function (evt, fn) {\n        var self = this;\n\n        if(evt === \"data\") {\n            this._worker.on(evt, function (chunk) {\n                fn.call(self, chunk.data, chunk.meta);\n            });\n        } else {\n            this._worker.on(evt, function () {\n                utils.delay(fn, arguments, self);\n            });\n        }\n        return this;\n    },\n    /**\n     * Resume the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    resume : function () {\n        utils.delay(this._worker.resume, [], this._worker);\n        return this;\n    },\n    /**\n     * Pause the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    pause : function () {\n        this._worker.pause();\n        return this;\n    },\n    /**\n     * Return a nodejs stream for this helper.\n     * @param {Function} updateCb the update callback.\n     * @return {NodejsStreamOutputAdapter} the nodejs stream.\n     */\n    toNodejsStream : function (updateCb) {\n        utils.checkSupport(\"nodestream\");\n        if (this._outputType !== \"nodebuffer\") {\n            // an object stream containing blob/arraybuffer/uint8array/string\n            // is strange and I don't know if it would be useful.\n            // I you find this comment and have a good usecase, please open a\n            // bug report !\n            throw new Error(this._outputType + \" is not supported by this method\");\n        }\n\n        return new NodejsStreamOutputAdapter(this, {\n            objectMode : this._outputType !== \"nodebuffer\"\n        }, updateCb);\n    }\n};\n\n\nmodule.exports = StreamHelper;\n", "\"use strict\";\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = true;\nexports.date = null;\nexports.compression = null;\nexports.compressionOptions = null;\nexports.comment = null;\nexports.unixPermissions = null;\nexports.dosPermissions = null;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n// the size of the generated chunks\n// TODO expose this as a public variable\nvar DEFAULT_BLOCK_SIZE = 16 * 1024;\n\n/**\n * A worker that reads a content and emits chunks.\n * @constructor\n * @param {Promise} dataP the promise of the data to split\n */\nfunction DataWorker(dataP) {\n    GenericWorker.call(this, \"DataWorker\");\n    var self = this;\n    this.dataIsReady = false;\n    this.index = 0;\n    this.max = 0;\n    this.data = null;\n    this.type = \"\";\n\n    this._tickScheduled = false;\n\n    dataP.then(function (data) {\n        self.dataIsReady = true;\n        self.data = data;\n        self.max = data && data.length || 0;\n        self.type = utils.getTypeOf(data);\n        if(!self.isPaused) {\n            self._tickAndRepeat();\n        }\n    }, function (e) {\n        self.error(e);\n    });\n}\n\nutils.inherits(DataWorker, GenericWorker);\n\n/**\n * @see GenericWorker.cleanUp\n */\nDataWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this.data = null;\n};\n\n/**\n * @see GenericWorker.resume\n */\nDataWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this._tickScheduled && this.dataIsReady) {\n        this._tickScheduled = true;\n        utils.delay(this._tickAndRepeat, [], this);\n    }\n    return true;\n};\n\n/**\n * Trigger a tick a schedule an other call to this function.\n */\nDataWorker.prototype._tickAndRepeat = function() {\n    this._tickScheduled = false;\n    if(this.isPaused || this.isFinished) {\n        return;\n    }\n    this._tick();\n    if(!this.isFinished) {\n        utils.delay(this._tickAndRepeat, [], this);\n        this._tickScheduled = true;\n    }\n};\n\n/**\n * Read and push a chunk.\n */\nDataWorker.prototype._tick = function() {\n\n    if(this.isPaused || this.isFinished) {\n        return false;\n    }\n\n    var size = DEFAULT_BLOCK_SIZE;\n    var data = null, nextIndex = Math.min(this.max, this.index + size);\n    if (this.index >= this.max) {\n        // EOF\n        return this.end();\n    } else {\n        switch(this.type) {\n        case \"string\":\n            data = this.data.substring(this.index, nextIndex);\n            break;\n        case \"uint8array\":\n            data = this.data.subarray(this.index, nextIndex);\n            break;\n        case \"array\":\n        case \"nodebuffer\":\n            data = this.data.slice(this.index, nextIndex);\n            break;\n        }\n        this.index = nextIndex;\n        return this.push({\n            data : data,\n            meta : {\n                percent : this.max ? this.index / this.max * 100 : 0\n            }\n        });\n    }\n};\n\nmodule.exports = DataWorker;\n", "\"use strict\";\n\nvar utils = require(\"./utils\");\n\n/**\n * The following functions come from pako, from pako/lib/zlib/crc32.js\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n    var c, table = [];\n\n    for(var n =0; n < 256; n++){\n        c = n;\n        for(var k =0; k < 8; k++){\n            c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n        }\n        table[n] = c;\n    }\n\n    return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\n// That's all for the pako functions.\n\n/**\n * Compute the crc32 of a string.\n * This is almost the same as the function crc32, but for strings. Using the\n * same function for the two use cases leads to horrible performances.\n * @param {Number} crc the starting value of the crc.\n * @param {String} str the string to use.\n * @param {Number} len the length of the string.\n * @param {Number} pos the starting position for the crc32 computation.\n * @return {Number} the computed crc32.\n */\nfunction crc32str(crc, str, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\nmodule.exports = function crc32wrapper(input, crc) {\n    if (typeof input === \"undefined\" || !input.length) {\n        return 0;\n    }\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n\n    if(isArray) {\n        return crc32(crc|0, input, input.length, 0);\n    } else {\n        return crc32str(crc|0, input, input.length, 0);\n    }\n};\n", "\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar crc32 = require(\"../crc32\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which calculate the crc32 of the data flowing through.\n * @constructor\n */\nfunction Crc32Probe() {\n    GenericWorker.call(this, \"Crc32Probe\");\n    this.withStreamInfo(\"crc32\", 0);\n}\nutils.inherits(Crc32Probe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nCrc32Probe.prototype.processChunk = function (chunk) {\n    this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);\n    this.push(chunk);\n};\nmodule.exports = Crc32Probe;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n/**\n * A worker which calculate the total length of the data flowing through.\n * @constructor\n * @param {String} propName the name used to expose the length\n */\nfunction DataLengthProbe(propName) {\n    GenericWorker.call(this, \"DataLengthProbe for \" + propName);\n    this.propName = propName;\n    this.withStreamInfo(propName, 0);\n}\nutils.inherits(DataLengthProbe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nDataLengthProbe.prototype.processChunk = function (chunk) {\n    if(chunk) {\n        var length = this.streamInfo[this.propName] || 0;\n        this.streamInfo[this.propName] = length + chunk.data.length;\n    }\n    GenericWorker.prototype.processChunk.call(this, chunk);\n};\nmodule.exports = DataLengthProbe;\n\n", "\"use strict\";\n\nvar external = require(\"./external\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar DataLengthProbe = require(\"./stream/DataLengthProbe\");\n\n/**\n * Represent a compressed object, with everything needed to decompress it.\n * @constructor\n * @param {number} compressedSize the size of the data compressed.\n * @param {number} uncompressedSize the size of the data after decompression.\n * @param {number} crc32 the crc32 of the decompressed file.\n * @param {object} compression the type of compression, see lib/compressions.js.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.\n */\nfunction CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {\n    this.compressedSize = compressedSize;\n    this.uncompressedSize = uncompressedSize;\n    this.crc32 = crc32;\n    this.compression = compression;\n    this.compressedContent = data;\n}\n\nCompressedObject.prototype = {\n    /**\n     * Create a worker to get the uncompressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getContentWorker: function () {\n        var worker = new DataWorker(external.Promise.resolve(this.compressedContent))\n            .pipe(this.compression.uncompressWorker())\n            .pipe(new DataLengthProbe(\"data_length\"));\n\n        var that = this;\n        worker.on(\"end\", function () {\n            if (this.streamInfo[\"data_length\"] !== that.uncompressedSize) {\n                throw new Error(\"Bug : uncompressed data size mismatch\");\n            }\n        });\n        return worker;\n    },\n    /**\n     * Create a worker to get the compressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getCompressedWorker: function () {\n        return new DataWorker(external.Promise.resolve(this.compressedContent))\n            .withStreamInfo(\"compressedSize\", this.compressedSize)\n            .withStreamInfo(\"uncompressedSize\", this.uncompressedSize)\n            .withStreamInfo(\"crc32\", this.crc32)\n            .withStreamInfo(\"compression\", this.compression)\n        ;\n    }\n};\n\n/**\n * Chain the given worker with other workers to compress the content with the\n * given compression.\n * @param {GenericWorker} uncompressedWorker the worker to pipe.\n * @param {Object} compression the compression object.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return {GenericWorker} the new worker compressing the content.\n */\nCompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) {\n    return uncompressedWorker\n        .pipe(new Crc32Probe())\n        .pipe(new DataLengthProbe(\"uncompressedSize\"))\n        .pipe(compression.compressWorker(compressionOptions))\n        .pipe(new DataLengthProbe(\"compressedSize\"))\n        .withStreamInfo(\"compression\", compression);\n};\n\nmodule.exports = CompressedObject;\n", "\"use strict\";\n\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar utf8 = require(\"./utf8\");\nvar CompressedObject = require(\"./compressedObject\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nvar ZipObject = function(name, data, options) {\n    this.name = name;\n    this.dir = options.dir;\n    this.date = options.date;\n    this.comment = options.comment;\n    this.unixPermissions = options.unixPermissions;\n    this.dosPermissions = options.dosPermissions;\n\n    this._data = data;\n    this._dataBinary = options.binary;\n    // keep only the compression\n    this.options = {\n        compression : options.compression,\n        compressionOptions : options.compressionOptions\n    };\n};\n\nZipObject.prototype = {\n    /**\n     * Create an internal stream for the content of this object.\n     * @param {String} type the type of each chunk.\n     * @return StreamHelper the stream.\n     */\n    internalStream: function (type) {\n        var result = null, outputType = \"string\";\n        try {\n            if (!type) {\n                throw new Error(\"No output type specified.\");\n            }\n            outputType = type.toLowerCase();\n            var askUnicodeString = outputType === \"string\" || outputType === \"text\";\n            if (outputType === \"binarystring\" || outputType === \"text\") {\n                outputType = \"string\";\n            }\n            result = this._decompressWorker();\n\n            var isUnicodeString = !this._dataBinary;\n\n            if (isUnicodeString && !askUnicodeString) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            if (!isUnicodeString && askUnicodeString) {\n                result = result.pipe(new utf8.Utf8DecodeWorker());\n            }\n        } catch (e) {\n            result = new GenericWorker(\"error\");\n            result.error(e);\n        }\n\n        return new StreamHelper(result, outputType, \"\");\n    },\n\n    /**\n     * Prepare the content in the asked type.\n     * @param {String} type the type of the result.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Promise the promise of the result.\n     */\n    async: function (type, onUpdate) {\n        return this.internalStream(type).accumulate(onUpdate);\n    },\n\n    /**\n     * Prepare the content as a nodejs stream.\n     * @param {String} type the type of each chunk.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Stream the stream.\n     */\n    nodeStream: function (type, onUpdate) {\n        return this.internalStream(type || \"nodebuffer\").toNodejsStream(onUpdate);\n    },\n\n    /**\n     * Return a worker for the compressed content.\n     * @private\n     * @param {Object} compression the compression object to use.\n     * @param {Object} compressionOptions the options to use when compressing.\n     * @return Worker the worker.\n     */\n    _compressWorker: function (compression, compressionOptions) {\n        if (\n            this._data instanceof CompressedObject &&\n            this._data.compression.magic === compression.magic\n        ) {\n            return this._data.getCompressedWorker();\n        } else {\n            var result = this._decompressWorker();\n            if(!this._dataBinary) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            return CompressedObject.createWorkerFrom(result, compression, compressionOptions);\n        }\n    },\n    /**\n     * Return a worker for the decompressed content.\n     * @private\n     * @return Worker the worker.\n     */\n    _decompressWorker : function () {\n        if (this._data instanceof CompressedObject) {\n            return this._data.getContentWorker();\n        } else if (this._data instanceof GenericWorker) {\n            return this._data;\n        } else {\n            return new DataWorker(this._data);\n        }\n    }\n};\n\nvar removedMethods = [\"asText\", \"asBinary\", \"asNodeBuffer\", \"asUint8Array\", \"asArrayBuffer\"];\nvar removedFn = function () {\n    throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n};\n\nfor(var i = 0; i < removedMethods.length; i++) {\n    ZipObject.prototype[removedMethods[i]] = removedFn;\n}\nmodule.exports = ZipObject;\n", "'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n", "'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n", "'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = require('../utils/common');\nvar trees   = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32   = require('./crc32');\nvar msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n", "// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new utils.Buf8(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n  // On Chrome, the arguments in a function call that are allowed is `65534`.\n  // If the length of the buffer is smaller than that, we can use this optimization,\n  // otherwise we will take a slower path.\n  if (len < 65534) {\n    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n    }\n  }\n\n  var result = '';\n  for (var i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n  return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n  var buf = new utils.Buf8(str.length);\n  for (var i = 0, len = buf.length; i < len; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n  var i, out, c, c_len;\n  var len = max || buf.length;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n  var pos;\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n", "'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH      = 0;\nvar Z_FINISH        = 4;\n\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_SYNC_FLUSH    = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY    = 0;\n\nvar Z_DEFLATED  = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n  if (!(this instanceof Deflate)) return new Deflate(options);\n\n  this.options = utils.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status = zlib_deflate.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  if (opt.header) {\n    zlib_deflate.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    var dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK) {\n      throw new Error(msg[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var status, _mode;\n\n  if (this.ended) { return false; }\n\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */\n\n    if (status !== Z_STREAM_END && status !== Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n    if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n      if (this.options.to === 'string') {\n        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n      } else {\n        this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n      }\n    }\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n  // Finalize on the last chunk.\n  if (_mode === Z_FINISH) {\n    status = zlib_deflate.deflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === Z_SYNC_FLUSH) {\n    this.onEnd(Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n  var deflator = new Deflate(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = require('../utils/common');\nvar adler32       = require('./adler32');\nvar crc32         = require('./crc32');\nvar inflate_fast  = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n        state.dmax = 1 << len;\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n              utils.arraySet(\n                state.head.extra,\n                input,\n                next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy,\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          utils.arraySet(output, input, next, copy, put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nmodule.exports = GZheader;\n", "'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar c            = require('./zlib/constants');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\nvar GZheader     = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n  if (!(this instanceof Inflate)) return new Inflate(options);\n\n  this.options = utils.assign({\n    chunkSize: 16384,\n    windowBits: 0,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status  = zlib_inflate.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== c.Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  this.header = new GZheader();\n\n  zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n  // Setup dictionary\n  if (opt.dictionary) {\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      opt.dictionary = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      opt.dictionary = new Uint8Array(opt.dictionary);\n    }\n    if (opt.raw) { //In raw mode we need to set the dictionary early\n      status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n      if (status !== c.Z_OK) {\n        throw new Error(msg[status]);\n      }\n    }\n  }\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var dictionary = this.options.dictionary;\n  var status, _mode;\n  var next_out_utf8, tail, utf8str;\n\n  // Flag to properly process Z_BUF_ERROR on testing inflate call\n  // when we check that all output data was flushed.\n  var allowBufError = false;\n\n  if (this.ended) { return false; }\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // Only binary strings can be decompressed on practice\n    strm.input = strings.binstring2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */\n\n    if (status === c.Z_NEED_DICT && dictionary) {\n      status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n    }\n\n    if (status === c.Z_BUF_ERROR && allowBufError === true) {\n      status = c.Z_OK;\n      allowBufError = false;\n    }\n\n    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n        if (this.options.to === 'string') {\n\n          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          tail = strm.next_out - next_out_utf8;\n          utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n        }\n      }\n    }\n\n    // When no more input data, we should check that internal inflate buffers\n    // are flushed. The only way to do it when avail_out = 0 - run one more\n    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n    // Here we set flag to process this error properly.\n    //\n    // NOTE. Deflate does not return error in this case and does not needs such\n    // logic.\n    if (strm.avail_in === 0 && strm.avail_out === 0) {\n      allowBufError = true;\n    }\n\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n  if (status === c.Z_STREAM_END) {\n    _mode = c.Z_FINISH;\n  }\n\n  // Finalize on the last chunk.\n  if (_mode === c.Z_FINISH) {\n    status = zlib_inflate.inflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === c.Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === c.Z_SYNC_FLUSH) {\n    this.onEnd(c.Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === c.Z_OK) {\n    if (this.options.to === 'string') {\n      // Glue & convert here, until we teach pako to send\n      // utf8 aligned strings to onData\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n *   , output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err)\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n  var inflator = new Inflate(options);\n\n  inflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip  = inflate;\n", "// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign    = require('./lib/utils/common').assign;\n\nvar deflate   = require('./lib/deflate');\nvar inflate   = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n", "\"use strict\";\nvar USE_TYPEDARRAY = (typeof Uint8Array !== \"undefined\") && (typeof Uint16Array !== \"undefined\") && (typeof Uint32Array !== \"undefined\");\n\nvar pako = require(\"pako\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nvar ARRAY_TYPE = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\n\nexports.magic = \"\\x08\\x00\";\n\n/**\n * Create a worker that uses pako to inflate/deflate.\n * @constructor\n * @param {String} action the name of the pako function to call : either \"Deflate\" or \"Inflate\".\n * @param {Object} options the options to use when (de)compressing.\n */\nfunction FlateWorker(action, options) {\n    GenericWorker.call(this, \"FlateWorker/\" + action);\n\n    this._pako = null;\n    this._pakoAction = action;\n    this._pakoOptions = options;\n    // the `meta` object from the last chunk received\n    // this allow this worker to pass around metadata\n    this.meta = {};\n}\n\nutils.inherits(FlateWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nFlateWorker.prototype.processChunk = function (chunk) {\n    this.meta = chunk.meta;\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);\n};\n\n/**\n * @see GenericWorker.flush\n */\nFlateWorker.prototype.flush = function () {\n    GenericWorker.prototype.flush.call(this);\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push([], true);\n};\n/**\n * @see GenericWorker.cleanUp\n */\nFlateWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this._pako = null;\n};\n\n/**\n * Create the _pako object.\n * TODO: lazy-loading this object isn't the best solution but it's the\n * quickest. The best solution is to lazy-load the worker list. See also the\n * issue #446.\n */\nFlateWorker.prototype._createPako = function () {\n    this._pako = new pako[this._pakoAction]({\n        raw: true,\n        level: this._pakoOptions.level || -1 // default compression\n    });\n    var self = this;\n    this._pako.onData = function(data) {\n        self.push({\n            data : data,\n            meta : self.meta\n        });\n    };\n};\n\nexports.compressWorker = function (compressionOptions) {\n    return new FlateWorker(\"Deflate\", compressionOptions);\n};\nexports.uncompressWorker = function () {\n    return new FlateWorker(\"Inflate\", {});\n};\n", "\"use strict\";\n\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nexports.STORE = {\n    magic: \"\\x00\\x00\",\n    compressWorker : function () {\n        return new GenericWorker(\"STORE compression\");\n    },\n    uncompressWorker : function () {\n        return new GenericWorker(\"STORE decompression\");\n    }\n};\nexports.DEFLATE = require(\"./flate\");\n", "\"use strict\";\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\nvar utf8 = require(\"../utf8\");\nvar crc32 = require(\"../crc32\");\nvar signature = require(\"../signature\");\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n    var hex = \"\", i;\n    for (i = 0; i < bytes; i++) {\n        hex += String.fromCharCode(dec & 0xff);\n        dec = dec >>> 8;\n    }\n    return hex;\n};\n\n/**\n * Generate the UNIX part of the external file attributes.\n * @param {Object} unixPermissions the unix permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :\n *\n * TTTTsstrwxrwxrwx0000000000ADVSHR\n * ^^^^____________________________ file type, see zipinfo.c (UNX_*)\n *     ^^^_________________________ setuid, setgid, sticky\n *        ^^^^^^^^^________________ permissions\n *                 ^^^^^^^^^^______ not used ?\n *                           ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only\n */\nvar generateUnixExternalFileAttr = function (unixPermissions, isDir) {\n\n    var result = unixPermissions;\n    if (!unixPermissions) {\n        // I can't use octal values in strict mode, hence the hexa.\n        //  040775 => 0x41fd\n        // 0100664 => 0x81b4\n        result = isDir ? 0x41fd : 0x81b4;\n    }\n    return (result & 0xFFFF) << 16;\n};\n\n/**\n * Generate the DOS part of the external file attributes.\n * @param {Object} dosPermissions the dos permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * Bit 0     Read-Only\n * Bit 1     Hidden\n * Bit 2     System\n * Bit 3     Volume Label\n * Bit 4     Directory\n * Bit 5     Archive\n */\nvar generateDosExternalFileAttr = function (dosPermissions) {\n    // the dir flag is already set for compatibility\n    return (dosPermissions || 0)  & 0x3F;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {Object} streamInfo the hash with information about the compressed file.\n * @param {Boolean} streamedContent is the content streamed ?\n * @param {Boolean} streamingEnded is the stream finished ?\n * @param {number} offset the current offset from the start of the zip file.\n * @param {String} platform let's pretend we are this platform (change platform dependents fields)\n * @param {Function} encodeFileName the function to encode the file name / comment.\n * @return {Object} the zip parts.\n */\nvar generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {\n    var file = streamInfo[\"file\"],\n        compression = streamInfo[\"compression\"],\n        useCustomEncoding = encodeFileName !== utf8.utf8encode,\n        encodedFileName = utils.transformTo(\"string\", encodeFileName(file.name)),\n        utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n        comment = file.comment,\n        encodedComment = utils.transformTo(\"string\", encodeFileName(comment)),\n        utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n        useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n        useUTF8ForComment = utfEncodedComment.length !== comment.length,\n        dosTime,\n        dosDate,\n        extraFields = \"\",\n        unicodePathExtraField = \"\",\n        unicodeCommentExtraField = \"\",\n        dir = file.dir,\n        date = file.date;\n\n\n    var dataInfo = {\n        crc32 : 0,\n        compressedSize : 0,\n        uncompressedSize : 0\n    };\n\n    // if the content is streamed, the sizes/crc32 are only available AFTER\n    // the end of the stream.\n    if (!streamedContent || streamingEnded) {\n        dataInfo.crc32 = streamInfo[\"crc32\"];\n        dataInfo.compressedSize = streamInfo[\"compressedSize\"];\n        dataInfo.uncompressedSize = streamInfo[\"uncompressedSize\"];\n    }\n\n    var bitflag = 0;\n    if (streamedContent) {\n        // Bit 3: the sizes/crc32 are set to zero in the local header.\n        // The correct values are put in the data descriptor immediately\n        // following the compressed data.\n        bitflag |= 0x0008;\n    }\n    if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {\n        // Bit 11: Language encoding flag (EFS).\n        bitflag |= 0x0800;\n    }\n\n\n    var extFileAttr = 0;\n    var versionMadeBy = 0;\n    if (dir) {\n        // dos or unix, we set the dos dir flag\n        extFileAttr |= 0x00010;\n    }\n    if(platform === \"UNIX\") {\n        versionMadeBy = 0x031E; // UNIX, version 3.0\n        extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);\n    } else { // DOS or other, fallback to DOS\n        versionMadeBy = 0x0014; // DOS, version 2.0\n        extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);\n    }\n\n    // date\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n    dosTime = date.getUTCHours();\n    dosTime = dosTime << 6;\n    dosTime = dosTime | date.getUTCMinutes();\n    dosTime = dosTime << 5;\n    dosTime = dosTime | date.getUTCSeconds() / 2;\n\n    dosDate = date.getUTCFullYear() - 1980;\n    dosDate = dosDate << 4;\n    dosDate = dosDate | (date.getUTCMonth() + 1);\n    dosDate = dosDate << 5;\n    dosDate = dosDate | date.getUTCDate();\n\n    if (useUTF8ForFileName) {\n        // set the unicode path extra field. unzip needs at least one extra\n        // field to correctly handle unicode path, so using the path is as good\n        // as any other information. This could improve the situation with\n        // other archive managers too.\n        // This field is usually used without the utf8 flag, with a non\n        // unicode path in the header (winrar, winzip). This helps (a bit)\n        // with the messy Windows' default compressed folders feature but\n        // breaks on p7zip which doesn't seek the unicode path extra field.\n        // So for now, UTF-8 everywhere !\n        unicodePathExtraField =\n            // Version\n            decToHex(1, 1) +\n            // NameCRC32\n            decToHex(crc32(encodedFileName), 4) +\n            // UnicodeName\n            utfEncodedFileName;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x70\" +\n            // size\n            decToHex(unicodePathExtraField.length, 2) +\n            // content\n            unicodePathExtraField;\n    }\n\n    if(useUTF8ForComment) {\n\n        unicodeCommentExtraField =\n            // Version\n            decToHex(1, 1) +\n            // CommentCRC32\n            decToHex(crc32(encodedComment), 4) +\n            // UnicodeName\n            utfEncodedComment;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x63\" +\n            // size\n            decToHex(unicodeCommentExtraField.length, 2) +\n            // content\n            unicodeCommentExtraField;\n    }\n\n    var header = \"\";\n\n    // version needed to extract\n    header += \"\\x0A\\x00\";\n    // general purpose bit flag\n    header += decToHex(bitflag, 2);\n    // compression method\n    header += compression.magic;\n    // last mod file time\n    header += decToHex(dosTime, 2);\n    // last mod file date\n    header += decToHex(dosDate, 2);\n    // crc-32\n    header += decToHex(dataInfo.crc32, 4);\n    // compressed size\n    header += decToHex(dataInfo.compressedSize, 4);\n    // uncompressed size\n    header += decToHex(dataInfo.uncompressedSize, 4);\n    // file name length\n    header += decToHex(encodedFileName.length, 2);\n    // extra field length\n    header += decToHex(extraFields.length, 2);\n\n\n    var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;\n\n    var dirRecord = signature.CENTRAL_FILE_HEADER +\n        // version made by (00: DOS)\n        decToHex(versionMadeBy, 2) +\n        // file header (common to file and central directory)\n        header +\n        // file comment length\n        decToHex(encodedComment.length, 2) +\n        // disk number start\n        \"\\x00\\x00\" +\n        // internal file attributes TODO\n        \"\\x00\\x00\" +\n        // external file attributes\n        decToHex(extFileAttr, 4) +\n        // relative offset of local header\n        decToHex(offset, 4) +\n        // file name\n        encodedFileName +\n        // extra field\n        extraFields +\n        // file comment\n        encodedComment;\n\n    return {\n        fileRecord: fileRecord,\n        dirRecord: dirRecord\n    };\n};\n\n/**\n * Generate the EOCD record.\n * @param {Number} entriesCount the number of entries in the zip file.\n * @param {Number} centralDirLength the length (in bytes) of the central dir.\n * @param {Number} localDirLength the length (in bytes) of the local dir.\n * @param {String} comment the zip file comment as a binary string.\n * @param {Function} encodeFileName the function to encode the comment.\n * @return {String} the EOCD record.\n */\nvar generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {\n    var dirEnd = \"\";\n    var encodedComment = utils.transformTo(\"string\", encodeFileName(comment));\n\n    // end of central dir signature\n    dirEnd = signature.CENTRAL_DIRECTORY_END +\n        // number of this disk\n        \"\\x00\\x00\" +\n        // number of the disk with the start of the central directory\n        \"\\x00\\x00\" +\n        // total number of entries in the central directory on this disk\n        decToHex(entriesCount, 2) +\n        // total number of entries in the central directory\n        decToHex(entriesCount, 2) +\n        // size of the central directory   4 bytes\n        decToHex(centralDirLength, 4) +\n        // offset of start of central directory with respect to the starting disk number\n        decToHex(localDirLength, 4) +\n        // .ZIP file comment length\n        decToHex(encodedComment.length, 2) +\n        // .ZIP file comment\n        encodedComment;\n\n    return dirEnd;\n};\n\n/**\n * Generate data descriptors for a file entry.\n * @param {Object} streamInfo the hash generated by a worker, containing information\n * on the file entry.\n * @return {String} the data descriptors.\n */\nvar generateDataDescriptors = function (streamInfo) {\n    var descriptor = \"\";\n    descriptor = signature.DATA_DESCRIPTOR +\n        // crc-32                          4 bytes\n        decToHex(streamInfo[\"crc32\"], 4) +\n        // compressed size                 4 bytes\n        decToHex(streamInfo[\"compressedSize\"], 4) +\n        // uncompressed size               4 bytes\n        decToHex(streamInfo[\"uncompressedSize\"], 4);\n\n    return descriptor;\n};\n\n\n/**\n * A worker to concatenate other workers to create a zip file.\n * @param {Boolean} streamFiles `true` to stream the content of the files,\n * `false` to accumulate it.\n * @param {String} comment the comment to use.\n * @param {String} platform the platform to use, \"UNIX\" or \"DOS\".\n * @param {Function} encodeFileName the function to encode file names and comments.\n */\nfunction ZipFileWorker(streamFiles, comment, platform, encodeFileName) {\n    GenericWorker.call(this, \"ZipFileWorker\");\n    // The number of bytes written so far. This doesn't count accumulated chunks.\n    this.bytesWritten = 0;\n    // The comment of the zip file\n    this.zipComment = comment;\n    // The platform \"generating\" the zip file.\n    this.zipPlatform = platform;\n    // the function to encode file names and comments.\n    this.encodeFileName = encodeFileName;\n    // Should we stream the content of the files ?\n    this.streamFiles = streamFiles;\n    // If `streamFiles` is false, we will need to accumulate the content of the\n    // files to calculate sizes / crc32 (and write them *before* the content).\n    // This boolean indicates if we are accumulating chunks (it will change a lot\n    // during the lifetime of this worker).\n    this.accumulate = false;\n    // The buffer receiving chunks when accumulating content.\n    this.contentBuffer = [];\n    // The list of generated directory records.\n    this.dirRecords = [];\n    // The offset (in bytes) from the beginning of the zip file for the current source.\n    this.currentSourceOffset = 0;\n    // The total number of entries in this zip file.\n    this.entriesCount = 0;\n    // the name of the file currently being added, null when handling the end of the zip file.\n    // Used for the emitted metadata.\n    this.currentFile = null;\n\n\n\n    this._sources = [];\n}\nutils.inherits(ZipFileWorker, GenericWorker);\n\n/**\n * @see GenericWorker.push\n */\nZipFileWorker.prototype.push = function (chunk) {\n\n    var currentFilePercent = chunk.meta.percent || 0;\n    var entriesCount = this.entriesCount;\n    var remainingFiles = this._sources.length;\n\n    if(this.accumulate) {\n        this.contentBuffer.push(chunk);\n    } else {\n        this.bytesWritten += chunk.data.length;\n\n        GenericWorker.prototype.push.call(this, {\n            data : chunk.data,\n            meta : {\n                currentFile : this.currentFile,\n                percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100\n            }\n        });\n    }\n};\n\n/**\n * The worker started a new source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the new source.\n */\nZipFileWorker.prototype.openedSource = function (streamInfo) {\n    this.currentSourceOffset = this.bytesWritten;\n    this.currentFile = streamInfo[\"file\"].name;\n\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n\n    // don't stream folders (because they don't have any content)\n    if(streamedContent) {\n        var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n    } else {\n        // we need to wait for the whole file before pushing anything\n        this.accumulate = true;\n    }\n};\n\n/**\n * The worker finished a source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the finished source.\n */\nZipFileWorker.prototype.closedSource = function (streamInfo) {\n    this.accumulate = false;\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n    var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n\n    this.dirRecords.push(record.dirRecord);\n    if(streamedContent) {\n        // after the streamed file, we put data descriptors\n        this.push({\n            data : generateDataDescriptors(streamInfo),\n            meta : {percent:100}\n        });\n    } else {\n        // the content wasn't streamed, we need to push everything now\n        // first the file record, then the content\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n        while(this.contentBuffer.length) {\n            this.push(this.contentBuffer.shift());\n        }\n    }\n    this.currentFile = null;\n};\n\n/**\n * @see GenericWorker.flush\n */\nZipFileWorker.prototype.flush = function () {\n\n    var localDirLength = this.bytesWritten;\n    for(var i = 0; i < this.dirRecords.length; i++) {\n        this.push({\n            data : this.dirRecords[i],\n            meta : {percent:100}\n        });\n    }\n    var centralDirLength = this.bytesWritten - localDirLength;\n\n    var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);\n\n    this.push({\n        data : dirEnd,\n        meta : {percent:100}\n    });\n};\n\n/**\n * Prepare the next source to be read.\n */\nZipFileWorker.prototype.prepareNextSource = function () {\n    this.previous = this._sources.shift();\n    this.openedSource(this.previous.streamInfo);\n    if (this.isPaused) {\n        this.previous.pause();\n    } else {\n        this.previous.resume();\n    }\n};\n\n/**\n * @see GenericWorker.registerPrevious\n */\nZipFileWorker.prototype.registerPrevious = function (previous) {\n    this._sources.push(previous);\n    var self = this;\n\n    previous.on(\"data\", function (chunk) {\n        self.processChunk(chunk);\n    });\n    previous.on(\"end\", function () {\n        self.closedSource(self.previous.streamInfo);\n        if(self._sources.length) {\n            self.prepareNextSource();\n        } else {\n            self.end();\n        }\n    });\n    previous.on(\"error\", function (e) {\n        self.error(e);\n    });\n    return this;\n};\n\n/**\n * @see GenericWorker.resume\n */\nZipFileWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this.previous && this._sources.length) {\n        this.prepareNextSource();\n        return true;\n    }\n    if (!this.previous && !this._sources.length && !this.generatedError) {\n        this.end();\n        return true;\n    }\n};\n\n/**\n * @see GenericWorker.error\n */\nZipFileWorker.prototype.error = function (e) {\n    var sources = this._sources;\n    if(!GenericWorker.prototype.error.call(this, e)) {\n        return false;\n    }\n    for(var i = 0; i < sources.length; i++) {\n        try {\n            sources[i].error(e);\n        } catch(e) {\n            // the `error` exploded, nothing to do\n        }\n    }\n    return true;\n};\n\n/**\n * @see GenericWorker.lock\n */\nZipFileWorker.prototype.lock = function () {\n    GenericWorker.prototype.lock.call(this);\n    var sources = this._sources;\n    for(var i = 0; i < sources.length; i++) {\n        sources[i].lock();\n    }\n};\n\nmodule.exports = ZipFileWorker;\n", "\"use strict\";\n\nvar compressions = require(\"../compressions\");\nvar ZipFileWorker = require(\"./ZipFileWorker\");\n\n/**\n * Find the compression to use.\n * @param {String} fileCompression the compression defined at the file level, if any.\n * @param {String} zipCompression the compression defined at the load() level.\n * @return {Object} the compression object to use.\n */\nvar getCompression = function (fileCompression, zipCompression) {\n\n    var compressionName = fileCompression || zipCompression;\n    var compression = compressions[compressionName];\n    if (!compression) {\n        throw new Error(compressionName + \" is not a valid compression method !\");\n    }\n    return compression;\n};\n\n/**\n * Create a worker to generate a zip file.\n * @param {JSZip} zip the JSZip instance at the right root level.\n * @param {Object} options to generate the zip file.\n * @param {String} comment the comment to use.\n */\nexports.generateWorker = function (zip, options, comment) {\n\n    var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);\n    var entriesCount = 0;\n    try {\n\n        zip.forEach(function (relativePath, file) {\n            entriesCount++;\n            var compression = getCompression(file.options.compression, options.compression);\n            var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};\n            var dir = file.dir, date = file.date;\n\n            file._compressWorker(compression, compressionOptions)\n                .withStreamInfo(\"file\", {\n                    name : relativePath,\n                    dir : dir,\n                    date : date,\n                    comment : file.comment || \"\",\n                    unixPermissions : file.unixPermissions,\n                    dosPermissions : file.dosPermissions\n                })\n                .pipe(zipFileWorker);\n        });\n        zipFileWorker.entriesCount = entriesCount;\n    } catch (e) {\n        zipFileWorker.error(e);\n    }\n\n    return zipFileWorker;\n};\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\n\n/**\n * A worker that use a nodejs stream as source.\n * @constructor\n * @param {String} filename the name of the file entry for this stream.\n * @param {Readable} stream the nodejs stream.\n */\nfunction NodejsStreamInputAdapter(filename, stream) {\n    GenericWorker.call(this, \"Nodejs stream input adapter for \" + filename);\n    this._upstreamEnded = false;\n    this._bindStream(stream);\n}\n\nutils.inherits(NodejsStreamInputAdapter, GenericWorker);\n\n/**\n * Prepare the stream and bind the callbacks on it.\n * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.\n * @param {Stream} stream the nodejs stream to use.\n */\nNodejsStreamInputAdapter.prototype._bindStream = function (stream) {\n    var self = this;\n    this._stream = stream;\n    stream.pause();\n    stream\n        .on(\"data\", function (chunk) {\n            self.push({\n                data: chunk,\n                meta : {\n                    percent : 0\n                }\n            });\n        })\n        .on(\"error\", function (e) {\n            if(self.isPaused) {\n                this.generatedError = e;\n            } else {\n                self.error(e);\n            }\n        })\n        .on(\"end\", function () {\n            if(self.isPaused) {\n                self._upstreamEnded = true;\n            } else {\n                self.end();\n            }\n        });\n};\nNodejsStreamInputAdapter.prototype.pause = function () {\n    if(!GenericWorker.prototype.pause.call(this)) {\n        return false;\n    }\n    this._stream.pause();\n    return true;\n};\nNodejsStreamInputAdapter.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if(this._upstreamEnded) {\n        this.end();\n    } else {\n        this._stream.resume();\n    }\n\n    return true;\n};\n\nmodule.exports = NodejsStreamInputAdapter;\n", "\"use strict\";\nvar utf8 = require(\"./utf8\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar defaults = require(\"./defaults\");\nvar CompressedObject = require(\"./compressedObject\");\nvar ZipObject = require(\"./zipObject\");\nvar generate = require(\"./generate\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar NodejsStreamInputAdapter = require(\"./nodejs/NodejsStreamInputAdapter\");\n\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} originalOptions the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, originalOptions) {\n    // be sure sub folders exist\n    var dataType = utils.getTypeOf(data),\n        parent;\n\n\n    /*\n     * Correct options.\n     */\n\n    var o = utils.extend(originalOptions || {}, defaults);\n    o.date = o.date || new Date();\n    if (o.compression !== null) {\n        o.compression = o.compression.toUpperCase();\n    }\n\n    if (typeof o.unixPermissions === \"string\") {\n        o.unixPermissions = parseInt(o.unixPermissions, 8);\n    }\n\n    // UNX_IFDIR  0040000 see zipinfo.c\n    if (o.unixPermissions && (o.unixPermissions & 0x4000)) {\n        o.dir = true;\n    }\n    // Bit 4    Directory\n    if (o.dosPermissions && (o.dosPermissions & 0x0010)) {\n        o.dir = true;\n    }\n\n    if (o.dir) {\n        name = forceTrailingSlash(name);\n    }\n    if (o.createFolders && (parent = parentFolder(name))) {\n        folderAdd.call(this, parent, true);\n    }\n\n    var isUnicodeString = dataType === \"string\" && o.binary === false && o.base64 === false;\n    if (!originalOptions || typeof originalOptions.binary === \"undefined\") {\n        o.binary = !isUnicodeString;\n    }\n\n\n    var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0;\n\n    if (isCompressedEmpty || o.dir || !data || data.length === 0) {\n        o.base64 = false;\n        o.binary = true;\n        data = \"\";\n        o.compression = \"STORE\";\n        dataType = \"string\";\n    }\n\n    /*\n     * Convert content to fit.\n     */\n\n    var zipObjectContent = null;\n    if (data instanceof CompressedObject || data instanceof GenericWorker) {\n        zipObjectContent = data;\n    } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        zipObjectContent = new NodejsStreamInputAdapter(name, data);\n    } else {\n        zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);\n    }\n\n    var object = new ZipObject(name, zipObjectContent, o);\n    this.files[name] = object;\n    /*\n    TODO: we can't throw an exception because we have async promises\n    (we can have a promise of a Date() for example) but returning a\n    promise is useless because file(name, data) returns the JSZip\n    object for chaining. Should we break that to allow the user\n    to catch the error ?\n\n    return external.Promise.resolve(zipObjectContent)\n    .then(function () {\n        return object;\n    });\n    */\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n    if (path.slice(-1) === \"/\") {\n        path = path.substring(0, path.length - 1);\n    }\n    var lastSlash = path.lastIndexOf(\"/\");\n    return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n/**\n * Returns the path with a slash at the end.\n * @private\n * @param {String} path the path to check.\n * @return {String} the path with a trailing slash.\n */\nvar forceTrailingSlash = function(path) {\n    // Check the name ends with a /\n    if (path.slice(-1) !== \"/\") {\n        path += \"/\"; // IE doesn't like substr(-1)\n    }\n    return path;\n};\n\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n *  folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders) {\n    createFolders = (typeof createFolders !== \"undefined\") ? createFolders : defaults.createFolders;\n\n    name = forceTrailingSlash(name);\n\n    // Does this folder already exist?\n    if (!this.files[name]) {\n        fileAdd.call(this, name, null, {\n            dir: true,\n            createFolders: createFolders\n        });\n    }\n    return this.files[name];\n};\n\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param  {Object}  object Anything\n* @return {Boolean}        true if the object is a regular expression,\n* false otherwise\n*/\nfunction isRegExp(object) {\n    return Object.prototype.toString.call(object) === \"[object RegExp]\";\n}\n\n// return the actual prototype of JSZip\nvar out = {\n    /**\n     * @see loadAsync\n     */\n    load: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n\n    /**\n     * Call a callback function for each entry at this folder level.\n     * @param {Function} cb the callback function:\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     */\n    forEach: function(cb) {\n        var filename, relativePath, file;\n        // ignore warning about unwanted properties because this.files is a null prototype object\n        /* eslint-disable-next-line guard-for-in */\n        for (filename in this.files) {\n            file = this.files[filename];\n            relativePath = filename.slice(this.root.length, filename.length);\n            if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root\n                cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...\n            }\n        }\n    },\n\n    /**\n     * Filter nested files/folders with the specified function.\n     * @param {Function} search the predicate to use :\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     * @return {Array} An array of matching elements.\n     */\n    filter: function(search) {\n        var result = [];\n        this.forEach(function (relativePath, entry) {\n            if (search(relativePath, entry)) { // the file matches the function\n                result.push(entry);\n            }\n\n        });\n        return result;\n    },\n\n    /**\n     * Add a file to the zip file, or search a file.\n     * @param   {string|RegExp} name The name of the file to add (if data is defined),\n     * the name of the file to find (if no data) or a regex to match files.\n     * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded\n     * @param   {Object} o     File options\n     * @return  {JSZip|Object|Array} this JSZip object (when adding a file),\n     * a file (when searching by string) or an array of files (when searching by regex).\n     */\n    file: function(name, data, o) {\n        if (arguments.length === 1) {\n            if (isRegExp(name)) {\n                var regexp = name;\n                return this.filter(function(relativePath, file) {\n                    return !file.dir && regexp.test(relativePath);\n                });\n            }\n            else { // text\n                var obj = this.files[this.root + name];\n                if (obj && !obj.dir) {\n                    return obj;\n                } else {\n                    return null;\n                }\n            }\n        }\n        else { // more than one argument : we have data !\n            name = this.root + name;\n            fileAdd.call(this, name, data, o);\n        }\n        return this;\n    },\n\n    /**\n     * Add a directory to the zip file, or search.\n     * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n     * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.\n     */\n    folder: function(arg) {\n        if (!arg) {\n            return this;\n        }\n\n        if (isRegExp(arg)) {\n            return this.filter(function(relativePath, file) {\n                return file.dir && arg.test(relativePath);\n            });\n        }\n\n        // else, name is a new folder\n        var name = this.root + arg;\n        var newFolder = folderAdd.call(this, name);\n\n        // Allow chaining by returning a new object with this folder as the root\n        var ret = this.clone();\n        ret.root = newFolder.name;\n        return ret;\n    },\n\n    /**\n     * Delete a file, or a directory and all sub-files, from the zip\n     * @param {string} name the name of the file to delete\n     * @return {JSZip} this JSZip object\n     */\n    remove: function(name) {\n        name = this.root + name;\n        var file = this.files[name];\n        if (!file) {\n            // Look for any folders\n            if (name.slice(-1) !== \"/\") {\n                name += \"/\";\n            }\n            file = this.files[name];\n        }\n\n        if (file && !file.dir) {\n            // file\n            delete this.files[name];\n        } else {\n            // maybe a folder, delete recursively\n            var kids = this.filter(function(relativePath, file) {\n                return file.name.slice(0, name.length) === name;\n            });\n            for (var i = 0; i < kids.length; i++) {\n                delete this.files[kids[i].name];\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide.\n     */\n    generate: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n    /**\n     * Generate the complete zip file as an internal stream.\n     * @param {Object} options the options to generate the zip file :\n     * - compression, \"STORE\" by default.\n     * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n     * @return {StreamHelper} the streamed zip file.\n     */\n    generateInternalStream: function(options) {\n        var worker, opts = {};\n        try {\n            opts = utils.extend(options || {}, {\n                streamFiles: false,\n                compression: \"STORE\",\n                compressionOptions : null,\n                type: \"\",\n                platform: \"DOS\",\n                comment: null,\n                mimeType: \"application/zip\",\n                encodeFileName: utf8.utf8encode\n            });\n\n            opts.type = opts.type.toLowerCase();\n            opts.compression = opts.compression.toUpperCase();\n\n            // \"binarystring\" is preferred but the internals use \"string\".\n            if(opts.type === \"binarystring\") {\n                opts.type = \"string\";\n            }\n\n            if (!opts.type) {\n                throw new Error(\"No output type specified.\");\n            }\n\n            utils.checkSupport(opts.type);\n\n            // accept nodejs `process.platform`\n            if(\n                opts.platform === \"darwin\" ||\n                opts.platform === \"freebsd\" ||\n                opts.platform === \"linux\" ||\n                opts.platform === \"sunos\"\n            ) {\n                opts.platform = \"UNIX\";\n            }\n            if (opts.platform === \"win32\") {\n                opts.platform = \"DOS\";\n            }\n\n            var comment = opts.comment || this.comment || \"\";\n            worker = generate.generateWorker(this, opts, comment);\n        } catch (e) {\n            worker = new GenericWorker(\"error\");\n            worker.error(e);\n        }\n        return new StreamHelper(worker, opts.type || \"string\", opts.mimeType);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateAsync: function(options, onUpdate) {\n        return this.generateInternalStream(options).accumulate(onUpdate);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateNodeStream: function(options, onUpdate) {\n        options = options || {};\n        if (!options.type) {\n            options.type = \"nodebuffer\";\n        }\n        return this.generateInternalStream(options).toNodejsStream(onUpdate);\n    }\n};\nmodule.exports = out;\n", "\"use strict\";\nvar utils = require(\"../utils\");\n\nfunction DataReader(data) {\n    this.data = data; // type : see implementation\n    this.length = data.length;\n    this.index = 0;\n    this.zero = 0;\n}\nDataReader.prototype = {\n    /**\n     * Check that the offset will not go too far.\n     * @param {string} offset the additional offset to check.\n     * @throws {Error} an Error if the offset is out of bounds.\n     */\n    checkOffset: function(offset) {\n        this.checkIndex(this.index + offset);\n    },\n    /**\n     * Check that the specified index will not be too far.\n     * @param {string} newIndex the index to check.\n     * @throws {Error} an Error if the index is out of bounds.\n     */\n    checkIndex: function(newIndex) {\n        if (this.length < this.zero + newIndex || newIndex < 0) {\n            throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n        }\n    },\n    /**\n     * Change the index.\n     * @param {number} newIndex The new index.\n     * @throws {Error} if the new index is out of the data.\n     */\n    setIndex: function(newIndex) {\n        this.checkIndex(newIndex);\n        this.index = newIndex;\n    },\n    /**\n     * Skip the next n bytes.\n     * @param {number} n the number of bytes to skip.\n     * @throws {Error} if the new index is out of the data.\n     */\n    skip: function(n) {\n        this.setIndex(this.index + n);\n    },\n    /**\n     * Get the byte at the specified index.\n     * @param {number} i the index to use.\n     * @return {number} a byte.\n     */\n    byteAt: function() {\n        // see implementations\n    },\n    /**\n     * Get the next number with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {number} the corresponding number.\n     */\n    readInt: function(size) {\n        var result = 0,\n            i;\n        this.checkOffset(size);\n        for (i = this.index + size - 1; i >= this.index; i--) {\n            result = (result << 8) + this.byteAt(i);\n        }\n        this.index += size;\n        return result;\n    },\n    /**\n     * Get the next string with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {string} the corresponding string.\n     */\n    readString: function(size) {\n        return utils.transformTo(\"string\", this.readData(size));\n    },\n    /**\n     * Get raw data without conversion, <size> bytes.\n     * @param {number} size the number of bytes to read.\n     * @return {Object} the raw data, implementation specific.\n     */\n    readData: function() {\n        // see implementations\n    },\n    /**\n     * Find the last occurrence of a zip signature (4 bytes).\n     * @param {string} sig the signature to find.\n     * @return {number} the index of the last occurrence, -1 if not found.\n     */\n    lastIndexOfSignature: function() {\n        // see implementations\n    },\n    /**\n     * Read the signature (4 bytes) at the current position and compare it with sig.\n     * @param {string} sig the expected signature\n     * @return {boolean} true if the signature matches, false otherwise.\n     */\n    readAndCheckSignature: function() {\n        // see implementations\n    },\n    /**\n     * Get the next date.\n     * @return {Date} the date.\n     */\n    readDate: function() {\n        var dostime = this.readInt(4);\n        return new Date(Date.UTC(\n            ((dostime >> 25) & 0x7f) + 1980, // year\n            ((dostime >> 21) & 0x0f) - 1, // month\n            (dostime >> 16) & 0x1f, // day\n            (dostime >> 11) & 0x1f, // hour\n            (dostime >> 5) & 0x3f, // minute\n            (dostime & 0x1f) << 1)); // second\n    }\n};\nmodule.exports = DataReader;\n", "\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction ArrayReader(data) {\n    DataReader.call(this, data);\n    for(var i = 0; i < this.data.length; i++) {\n        data[i] = data[i] & 0xFF;\n    }\n}\nutils.inherits(ArrayReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nArrayReader.prototype.byteAt = function(i) {\n    return this.data[this.zero + i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nArrayReader.prototype.lastIndexOfSignature = function(sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3);\n    for (var i = this.length - 4; i >= 0; --i) {\n        if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n            return i - this.zero;\n        }\n    }\n\n    return -1;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nArrayReader.prototype.readAndCheckSignature = function (sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3),\n        data = this.readData(4);\n    return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];\n};\n/**\n * @see DataReader.readData\n */\nArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        return [];\n    }\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = ArrayReader;\n", "\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction StringReader(data) {\n    DataReader.call(this, data);\n}\nutils.inherits(StringReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nStringReader.prototype.byteAt = function(i) {\n    return this.data.charCodeAt(this.zero + i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nStringReader.prototype.lastIndexOfSignature = function(sig) {\n    return this.data.lastIndexOf(sig) - this.zero;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nStringReader.prototype.readAndCheckSignature = function (sig) {\n    var data = this.readData(4);\n    return sig === data;\n};\n/**\n * @see DataReader.readData\n */\nStringReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    // this will work because the constructor applied the \"& 0xff\" mask.\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = StringReader;\n", "\"use strict\";\nvar ArrayReader = require(\"./ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction Uint8ArrayReader(data) {\n    ArrayReader.call(this, data);\n}\nutils.inherits(Uint8ArrayReader, ArrayReader);\n/**\n * @see DataReader.readData\n */\nUint8ArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n        return new Uint8Array(0);\n    }\n    var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = Uint8ArrayReader;\n", "\"use strict\";\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction NodeBufferReader(data) {\n    Uint8ArrayReader.call(this, data);\n}\nutils.inherits(NodeBufferReader, Uint8ArrayReader);\n\n/**\n * @see DataReader.readData\n */\nNodeBufferReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = NodeBufferReader;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar support = require(\"../support\");\nvar ArrayReader = require(\"./ArrayReader\");\nvar StringReader = require(\"./StringReader\");\nvar NodeBufferReader = require(\"./NodeBufferReader\");\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\n\n/**\n * Create a reader adapted to the data.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.\n * @return {DataReader} the data reader.\n */\nmodule.exports = function (data) {\n    var type = utils.getTypeOf(data);\n    utils.checkSupport(type);\n    if (type === \"string\" && !support.uint8array) {\n        return new StringReader(data);\n    }\n    if (type === \"nodebuffer\") {\n        return new NodeBufferReader(data);\n    }\n    if (support.uint8array) {\n        return new Uint8ArrayReader(utils.transformTo(\"uint8array\", data));\n    }\n    return new ArrayReader(utils.transformTo(\"array\", data));\n};\n", "\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar CompressedObject = require(\"./compressedObject\");\nvar crc32fn = require(\"./crc32\");\nvar utf8 = require(\"./utf8\");\nvar compressions = require(\"./compressions\");\nvar support = require(\"./support\");\n\nvar MADE_BY_DOS = 0x00;\nvar MADE_BY_UNIX = 0x03;\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nvar findCompression = function(compressionMethod) {\n    for (var method in compressions) {\n        if (!Object.prototype.hasOwnProperty.call(compressions, method)) {\n            continue;\n        }\n        if (compressions[method].magic === compressionMethod) {\n            return compressions[method];\n        }\n    }\n    return null;\n};\n\n// class ZipEntry {{{\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntry(options, loadOptions) {\n    this.options = options;\n    this.loadOptions = loadOptions;\n}\nZipEntry.prototype = {\n    /**\n     * say if the file is encrypted.\n     * @return {boolean} true if the file is encrypted, false otherwise.\n     */\n    isEncrypted: function() {\n        // bit 1 is set\n        return (this.bitFlag & 0x0001) === 0x0001;\n    },\n    /**\n     * say if the file has utf-8 filename/comment.\n     * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n     */\n    useUTF8: function() {\n        // bit 11 is set\n        return (this.bitFlag & 0x0800) === 0x0800;\n    },\n    /**\n     * Read the local part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readLocalPart: function(reader) {\n        var compression, localExtraFieldsLength;\n\n        // we already know everything from the central dir !\n        // If the central dir data are false, we are doomed.\n        // On the bright side, the local part is scary  : zip64, data descriptors, both, etc.\n        // The less data we get here, the more reliable this should be.\n        // Let's skip the whole header and dash to the data !\n        reader.skip(22);\n        // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n        // Strangely, the filename here is OK.\n        // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n        // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n        // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n        // the internet.\n        //\n        // I think I see the logic here : the central directory is used to display\n        // content and the local directory is used to extract the files. Mixing / and \\\n        // may be used to display \\ to windows users and use / when extracting the files.\n        // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n        this.fileNameLength = reader.readInt(2);\n        localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n        // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.\n        this.fileName = reader.readData(this.fileNameLength);\n        reader.skip(localExtraFieldsLength);\n\n        if (this.compressedSize === -1 || this.uncompressedSize === -1) {\n            throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory \" + \"(compressedSize === -1 || uncompressedSize === -1)\");\n        }\n\n        compression = findCompression(this.compressionMethod);\n        if (compression === null) { // no compression found\n            throw new Error(\"Corrupted zip : compression \" + utils.pretty(this.compressionMethod) + \" unknown (inner file : \" + utils.transformTo(\"string\", this.fileName) + \")\");\n        }\n        this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));\n    },\n\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readCentralPart: function(reader) {\n        this.versionMadeBy = reader.readInt(2);\n        reader.skip(2);\n        // this.versionNeeded = reader.readInt(2);\n        this.bitFlag = reader.readInt(2);\n        this.compressionMethod = reader.readString(2);\n        this.date = reader.readDate();\n        this.crc32 = reader.readInt(4);\n        this.compressedSize = reader.readInt(4);\n        this.uncompressedSize = reader.readInt(4);\n        var fileNameLength = reader.readInt(2);\n        this.extraFieldsLength = reader.readInt(2);\n        this.fileCommentLength = reader.readInt(2);\n        this.diskNumberStart = reader.readInt(2);\n        this.internalFileAttributes = reader.readInt(2);\n        this.externalFileAttributes = reader.readInt(4);\n        this.localHeaderOffset = reader.readInt(4);\n\n        if (this.isEncrypted()) {\n            throw new Error(\"Encrypted zip are not supported\");\n        }\n\n        // will be read in the local part, see the comments there\n        reader.skip(fileNameLength);\n        this.readExtraFields(reader);\n        this.parseZIP64ExtraField(reader);\n        this.fileComment = reader.readData(this.fileCommentLength);\n    },\n\n    /**\n     * Parse the external file attributes and get the unix/dos permissions.\n     */\n    processAttributes: function () {\n        this.unixPermissions = null;\n        this.dosPermissions = null;\n        var madeBy = this.versionMadeBy >> 8;\n\n        // Check if we have the DOS directory flag set.\n        // We look for it in the DOS and UNIX permissions\n        // but some unknown platform could set it as a compatibility flag.\n        this.dir = this.externalFileAttributes & 0x0010 ? true : false;\n\n        if(madeBy === MADE_BY_DOS) {\n            // first 6 bits (0 to 5)\n            this.dosPermissions = this.externalFileAttributes & 0x3F;\n        }\n\n        if(madeBy === MADE_BY_UNIX) {\n            this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF;\n            // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);\n        }\n\n        // fail safe : if the name ends with a / it probably means a folder\n        if (!this.dir && this.fileNameStr.slice(-1) === \"/\") {\n            this.dir = true;\n        }\n    },\n\n    /**\n     * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n     * @param {DataReader} reader the reader to use.\n     */\n    parseZIP64ExtraField: function() {\n        if (!this.extraFields[0x0001]) {\n            return;\n        }\n\n        // should be something, preparing the extra reader\n        var extraReader = readerFor(this.extraFields[0x0001].value);\n\n        // I really hope that these 64bits integer can fit in 32 bits integer, because js\n        // won't let us have more.\n        if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {\n            this.uncompressedSize = extraReader.readInt(8);\n        }\n        if (this.compressedSize === utils.MAX_VALUE_32BITS) {\n            this.compressedSize = extraReader.readInt(8);\n        }\n        if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {\n            this.localHeaderOffset = extraReader.readInt(8);\n        }\n        if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {\n            this.diskNumberStart = extraReader.readInt(4);\n        }\n    },\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readExtraFields: function(reader) {\n        var end = reader.index + this.extraFieldsLength,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n\n        if (!this.extraFields) {\n            this.extraFields = {};\n        }\n\n        while (reader.index + 4 < end) {\n            extraFieldId = reader.readInt(2);\n            extraFieldLength = reader.readInt(2);\n            extraFieldValue = reader.readData(extraFieldLength);\n\n            this.extraFields[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n\n        reader.setIndex(end);\n    },\n    /**\n     * Apply an UTF8 transformation if needed.\n     */\n    handleUTF8: function() {\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        if (this.useUTF8()) {\n            this.fileNameStr = utf8.utf8decode(this.fileName);\n            this.fileCommentStr = utf8.utf8decode(this.fileComment);\n        } else {\n            var upath = this.findExtraFieldUnicodePath();\n            if (upath !== null) {\n                this.fileNameStr = upath;\n            } else {\n                // ASCII text or unsupported code page\n                var fileNameByteArray =  utils.transformTo(decodeParamType, this.fileName);\n                this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);\n            }\n\n            var ucomment = this.findExtraFieldUnicodeComment();\n            if (ucomment !== null) {\n                this.fileCommentStr = ucomment;\n            } else {\n                // ASCII text or unsupported code page\n                var commentByteArray =  utils.transformTo(decodeParamType, this.fileComment);\n                this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);\n            }\n        }\n    },\n\n    /**\n     * Find the unicode path declared in the extra field, if any.\n     * @return {String} the unicode path, null otherwise.\n     */\n    findExtraFieldUnicodePath: function() {\n        var upathField = this.extraFields[0x7075];\n        if (upathField) {\n            var extraReader = readerFor(upathField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the filename changed, this field is out of date.\n            if (crc32fn(this.fileName) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(upathField.length - 5));\n        }\n        return null;\n    },\n\n    /**\n     * Find the unicode comment declared in the extra field, if any.\n     * @return {String} the unicode comment, null otherwise.\n     */\n    findExtraFieldUnicodeComment: function() {\n        var ucommentField = this.extraFields[0x6375];\n        if (ucommentField) {\n            var extraReader = readerFor(ucommentField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the comment changed, this field is out of date.\n            if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));\n        }\n        return null;\n    }\n};\nmodule.exports = ZipEntry;\n", "\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar sig = require(\"./signature\");\nvar ZipEntry = require(\"./zipEntry\");\nvar support = require(\"./support\");\n//  class ZipEntries {{{\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntries(loadOptions) {\n    this.files = [];\n    this.loadOptions = loadOptions;\n}\nZipEntries.prototype = {\n    /**\n     * Check that the reader is on the specified signature.\n     * @param {string} expectedSignature the expected signature.\n     * @throws {Error} if it is an other signature.\n     */\n    checkSignature: function(expectedSignature) {\n        if (!this.reader.readAndCheckSignature(expectedSignature)) {\n            this.reader.index -= 4;\n            var signature = this.reader.readString(4);\n            throw new Error(\"Corrupted zip or bug: unexpected signature \" + \"(\" + utils.pretty(signature) + \", expected \" + utils.pretty(expectedSignature) + \")\");\n        }\n    },\n    /**\n     * Check if the given signature is at the given index.\n     * @param {number} askedIndex the index to check.\n     * @param {string} expectedSignature the signature to expect.\n     * @return {boolean} true if the signature is here, false otherwise.\n     */\n    isSignature: function(askedIndex, expectedSignature) {\n        var currentIndex = this.reader.index;\n        this.reader.setIndex(askedIndex);\n        var signature = this.reader.readString(4);\n        var result = signature === expectedSignature;\n        this.reader.setIndex(currentIndex);\n        return result;\n    },\n    /**\n     * Read the end of the central directory.\n     */\n    readBlockEndOfCentral: function() {\n        this.diskNumber = this.reader.readInt(2);\n        this.diskWithCentralDirStart = this.reader.readInt(2);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n        this.centralDirRecords = this.reader.readInt(2);\n        this.centralDirSize = this.reader.readInt(4);\n        this.centralDirOffset = this.reader.readInt(4);\n\n        this.zipCommentLength = this.reader.readInt(2);\n        // warning : the encoding depends of the system locale\n        // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n        // On a windows machine, this field is encoded with the localized windows code page.\n        var zipComment = this.reader.readData(this.zipCommentLength);\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        // To get consistent behavior with the generation part, we will assume that\n        // this is utf8 encoded unless specified otherwise.\n        var decodeContent = utils.transformTo(decodeParamType, zipComment);\n        this.zipComment = this.loadOptions.decodeFileName(decodeContent);\n    },\n    /**\n     * Read the end of the Zip 64 central directory.\n     * Not merged with the method readEndOfCentral :\n     * The end of central can coexist with its Zip64 brother,\n     * I don't want to read the wrong number of bytes !\n     */\n    readBlockZip64EndOfCentral: function() {\n        this.zip64EndOfCentralSize = this.reader.readInt(8);\n        this.reader.skip(4);\n        // this.versionMadeBy = this.reader.readString(2);\n        // this.versionNeeded = this.reader.readInt(2);\n        this.diskNumber = this.reader.readInt(4);\n        this.diskWithCentralDirStart = this.reader.readInt(4);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n        this.centralDirRecords = this.reader.readInt(8);\n        this.centralDirSize = this.reader.readInt(8);\n        this.centralDirOffset = this.reader.readInt(8);\n\n        this.zip64ExtensibleData = {};\n        var extraDataSize = this.zip64EndOfCentralSize - 44,\n            index = 0,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n        while (index < extraDataSize) {\n            extraFieldId = this.reader.readInt(2);\n            extraFieldLength = this.reader.readInt(4);\n            extraFieldValue = this.reader.readData(extraFieldLength);\n            this.zip64ExtensibleData[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n    },\n    /**\n     * Read the end of the Zip 64 central directory locator.\n     */\n    readBlockZip64EndOfCentralLocator: function() {\n        this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n        this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n        this.disksCount = this.reader.readInt(4);\n        if (this.disksCount > 1) {\n            throw new Error(\"Multi-volumes zip are not supported\");\n        }\n    },\n    /**\n     * Read the local files, based on the offset read in the central part.\n     */\n    readLocalFiles: function() {\n        var i, file;\n        for (i = 0; i < this.files.length; i++) {\n            file = this.files[i];\n            this.reader.setIndex(file.localHeaderOffset);\n            this.checkSignature(sig.LOCAL_FILE_HEADER);\n            file.readLocalPart(this.reader);\n            file.handleUTF8();\n            file.processAttributes();\n        }\n    },\n    /**\n     * Read the central directory.\n     */\n    readCentralDir: function() {\n        var file;\n\n        this.reader.setIndex(this.centralDirOffset);\n        while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {\n            file = new ZipEntry({\n                zip64: this.zip64\n            }, this.loadOptions);\n            file.readCentralPart(this.reader);\n            this.files.push(file);\n        }\n\n        if (this.centralDirRecords !== this.files.length) {\n            if (this.centralDirRecords !== 0 && this.files.length === 0) {\n                // We expected some records but couldn't find ANY.\n                // This is really suspicious, as if something went wrong.\n                throw new Error(\"Corrupted zip or bug: expected \" + this.centralDirRecords + \" records in central dir, got \" + this.files.length);\n            } else {\n                // We found some records but not all.\n                // Something is wrong but we got something for the user: no error here.\n                // console.warn(\"expected\", this.centralDirRecords, \"records in central dir, got\", this.files.length);\n            }\n        }\n    },\n    /**\n     * Read the end of central directory.\n     */\n    readEndOfCentral: function() {\n        var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);\n        if (offset < 0) {\n            // Check if the content is a truncated zip or complete garbage.\n            // A \"LOCAL_FILE_HEADER\" is not required at the beginning (auto\n            // extractible zip for example) but it can give a good hint.\n            // If an ajax request was used without responseType, we will also\n            // get unreadable data.\n            var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);\n\n            if (isGarbage) {\n                throw new Error(\"Can't find end of central directory : is this a zip file ? \" +\n                                \"If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\");\n            } else {\n                throw new Error(\"Corrupted zip: can't find end of central directory\");\n            }\n\n        }\n        this.reader.setIndex(offset);\n        var endOfCentralDirOffset = offset;\n        this.checkSignature(sig.CENTRAL_DIRECTORY_END);\n        this.readBlockEndOfCentral();\n\n\n        /* extract from the zip spec :\n            4)  If one of the fields in the end of central directory\n                record is too small to hold required data, the field\n                should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n                ZIP64 format record should be created.\n            5)  The end of central directory record and the\n                Zip64 end of central directory locator record must\n                reside on the same disk when splitting or spanning\n                an archive.\n         */\n        if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {\n            this.zip64 = true;\n\n            /*\n            Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n            the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents\n            all numbers as 64-bit double precision IEEE 754 floating point numbers.\n            So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n            see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n            and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n            */\n\n            // should look for a zip64 EOCD locator\n            offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            if (offset < 0) {\n                throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");\n            }\n            this.reader.setIndex(offset);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            this.readBlockZip64EndOfCentralLocator();\n\n            // now the zip64 EOCD record\n            if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {\n                // console.warn(\"ZIP64 end of central directory not where expected.\");\n                this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n                if (this.relativeOffsetEndOfZip64CentralDir < 0) {\n                    throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");\n                }\n            }\n            this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n            this.readBlockZip64EndOfCentral();\n        }\n\n        var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;\n        if (this.zip64) {\n            expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator\n            expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize;\n        }\n\n        var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;\n\n        if (extraBytes > 0) {\n            // console.warn(extraBytes, \"extra bytes at beginning or within zipfile\");\n            if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {\n                // The offsets seem wrong, but we have something at the specified offset.\n                // So\u2026 we keep it.\n            } else {\n                // the offset is wrong, update the \"zero\" of the reader\n                // this happens if data has been prepended (crx files for example)\n                this.reader.zero = extraBytes;\n            }\n        } else if (extraBytes < 0) {\n            throw new Error(\"Corrupted zip: missing \" + Math.abs(extraBytes) + \" bytes.\");\n        }\n    },\n    prepareReader: function(data) {\n        this.reader = readerFor(data);\n    },\n    /**\n     * Read a zip file and create ZipEntries.\n     * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n     */\n    load: function(data) {\n        this.prepareReader(data);\n        this.readEndOfCentral();\n        this.readCentralDir();\n        this.readLocalFiles();\n    }\n};\n// }}} end of ZipEntries\nmodule.exports = ZipEntries;\n", "\"use strict\";\nvar utils = require(\"./utils\");\nvar external = require(\"./external\");\nvar utf8 = require(\"./utf8\");\nvar ZipEntries = require(\"./zipEntries\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar nodejsUtils = require(\"./nodejsUtils\");\n\n/**\n * Check the CRC32 of an entry.\n * @param {ZipEntry} zipEntry the zip entry to check.\n * @return {Promise} the result.\n */\nfunction checkEntryCRC32(zipEntry) {\n    return new external.Promise(function (resolve, reject) {\n        var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());\n        worker.on(\"error\", function (e) {\n            reject(e);\n        })\n            .on(\"end\", function () {\n                if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {\n                    reject(new Error(\"Corrupted zip : CRC32 mismatch\"));\n                } else {\n                    resolve();\n                }\n            })\n            .resume();\n    });\n}\n\nmodule.exports = function (data, options) {\n    var zip = this;\n    options = utils.extend(options || {}, {\n        base64: false,\n        checkCRC32: false,\n        optimizedBinaryString: false,\n        createFolders: false,\n        decodeFileName: utf8.utf8decode\n    });\n\n    if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        return external.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\"));\n    }\n\n    return utils.prepareContent(\"the loaded zip file\", data, true, options.optimizedBinaryString, options.base64)\n        .then(function (data) {\n            var zipEntries = new ZipEntries(options);\n            zipEntries.load(data);\n            return zipEntries;\n        }).then(function checkCRC32(zipEntries) {\n            var promises = [external.Promise.resolve(zipEntries)];\n            var files = zipEntries.files;\n            if (options.checkCRC32) {\n                for (var i = 0; i < files.length; i++) {\n                    promises.push(checkEntryCRC32(files[i]));\n                }\n            }\n            return external.Promise.all(promises);\n        }).then(function addFiles(results) {\n            var zipEntries = results.shift();\n            var files = zipEntries.files;\n            for (var i = 0; i < files.length; i++) {\n                var input = files[i];\n\n                var unsafeName = input.fileNameStr;\n                var safeName = utils.resolve(input.fileNameStr);\n\n                zip.file(safeName, input.decompressed, {\n                    binary: true,\n                    optimizedBinaryString: true,\n                    date: input.date,\n                    dir: input.dir,\n                    comment: input.fileCommentStr.length ? input.fileCommentStr : null,\n                    unixPermissions: input.unixPermissions,\n                    dosPermissions: input.dosPermissions,\n                    createFolders: options.createFolders\n                });\n                if (!input.dir) {\n                    zip.file(safeName).unsafeOriginalName = unsafeName;\n                }\n            }\n            if (zipEntries.zipComment.length) {\n                zip.comment = zipEntries.zipComment;\n            }\n\n            return zip;\n        });\n};\n", "\"use strict\";\n\n/**\n * Representation a of zip file in js\n * @constructor\n */\nfunction JSZip() {\n    // if this constructor is used without `new`, it adds `new` before itself:\n    if(!(this instanceof JSZip)) {\n        return new JSZip();\n    }\n\n    if(arguments.length) {\n        throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");\n    }\n\n    // object containing the files :\n    // {\n    //   \"folder/\" : {...},\n    //   \"folder/data.txt\" : {...}\n    // }\n    // NOTE: we use a null prototype because we do not\n    // want filenames like \"toString\" coming from a zip file\n    // to overwrite methods and attributes in a normal Object.\n    this.files = Object.create(null);\n\n    this.comment = null;\n\n    // Where we are in the hierarchy\n    this.root = \"\";\n    this.clone = function() {\n        var newObj = new JSZip();\n        for (var i in this) {\n            if (typeof this[i] !== \"function\") {\n                newObj[i] = this[i];\n            }\n        }\n        return newObj;\n    };\n}\nJSZip.prototype = require(\"./object\");\nJSZip.prototype.loadAsync = require(\"./load\");\nJSZip.support = require(\"./support\");\nJSZip.defaults = require(\"./defaults\");\n\n// TODO find a better way to handle this version,\n// a require('package.json').version doesn't work with webpack, see #327\nJSZip.version = \"3.10.1\";\n\nJSZip.loadAsync = function (content, options) {\n    return new JSZip().loadAsync(content, options);\n};\n\nJSZip.external = require(\"./external\");\nmodule.exports = JSZip;\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * IStorage.ts\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * This file defines the core storage abstraction interface used throughout MCTools.\r\n * IStorage represents a virtual file system that can be backed by:\r\n * - Local file system (NodeStorage)\r\n * - HTTP/HTTPS endpoints (HttpStorage)\r\n * - ZIP files (ZipStorage)\r\n * - Browser local storage (BrowserStorage)\r\n * - VS Code file system (VsFsStorage)\r\n * - Virtual/composite folders (VirtualFolderStorage)\r\n *\r\n * EVENTS (used for real-time synchronization):\r\n * --------------------------------------------\r\n * - onFileAdded: Fired when a new file is detected\r\n * - onFileRemoved: Fired when a file is deleted\r\n * - onFileContentsUpdated: Fired when file content changes\r\n * - onFolderMoved: Fired when a folder is renamed/moved\r\n * - onFolderAdded: Fired when a new folder is created (added for watcher support)\r\n * - onFolderRemoved: Fired when a folder is deleted (added for watcher support)\r\n *\r\n * These events enable the real-time sync pipeline:\r\n *   NodeStorage -> HttpServer (WebSocket) -> HttpStorage -> MCWorld -> WorldView\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - IStorageWatcher.ts: Watcher interface extensions\r\n * - StorageBase.ts: Base implementation with event dispatchers\r\n * - NodeStorage.ts: File system watcher implementation\r\n * - HttpStorage.ts: WebSocket notification receiver\r\n */\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport { IEvent } from \"ste-events\";\r\nimport IVersionContent from \"./IVersionContent\";\r\n\r\nexport enum StorageErrorStatus {\r\n  none = 0,\r\n  unprocessable = 1,\r\n  notPresent = 2,\r\n}\r\n\r\nexport interface IFolderMove {\r\n  previousStoragePath?: string;\r\n  newStoragePath: string;\r\n  folder: IFolder;\r\n}\r\n\r\nexport interface IFileUpdateEvent {\r\n  file: IFile;\r\n  updateType: FileUpdateType;\r\n  sourceId?: string;\r\n  priorVersion?: IVersionContent;\r\n}\r\n\r\nexport default interface IStorage {\r\n  rootFolder: IFolder;\r\n  storagePath: string | undefined;\r\n\r\n  containerFile?: IFile;\r\n\r\n  getUsesPollingBasedUpdating(): boolean;\r\n\r\n  readonly folderDelimiter: string;\r\n\r\n  priorVersions: IVersionContent[];\r\n  currentVersionId?: string;\r\n\r\n  onFileAdded: IEvent<IStorage, IFile>;\r\n  onFileRemoved: IEvent<IStorage, string>;\r\n  onFileContentsUpdated: IEvent<IStorage, IFileUpdateEvent>;\r\n  onFolderMoved: IEvent<IStorage, IFolderMove>;\r\n  /** Event fired when a folder is added (for watcher support) */\r\n  onFolderAdded: IEvent<IStorage, IFolder>;\r\n  /** Event fired when a folder is removed (for watcher support) */\r\n  onFolderRemoved: IEvent<IStorage, string>;\r\n\r\n  errorStatus?: StorageErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  channelId?: string;\r\n\r\n  isContentUpdated: boolean;\r\n  readOnly: boolean;\r\n\r\n  available?: boolean;\r\n  getAvailable(): Promise<boolean>;\r\n\r\n  resetContentUpdated(): void;\r\n\r\n  incrementalScanForChanges(): Promise<void>;\r\n\r\n  scanForChanges(): Promise<void>;\r\n\r\n  addVersion(versionContent: IVersionContent, updateType: FileUpdateType): void;\r\n  trimAfterVersion(versionId: string): void;\r\n  setToVersion(versionId: string): void;\r\n\r\n  notifyFileContentsUpdated(fileEvent: IFileUpdateEvent): void;\r\n\r\n  joinPath(pathA: string, pathB: string): string;\r\n  ensureFolderFromStorageRelativePath(path: string): Promise<IFolder>;\r\n}\r\n", "/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.8.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2023\n * @license MIT\n */\n(function () {\n  'use strict';\n\n  var INPUT_ERROR = 'input is invalid type';\n  var FINALIZE_ERROR = 'finalize already called';\n  var WINDOW = typeof window === 'object';\n  var root = WINDOW ? window : {};\n  if (root.JS_MD5_NO_WINDOW) {\n    WINDOW = false;\n  }\n  var WEB_WORKER = !WINDOW && typeof self === 'object';\n  var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n  if (NODE_JS) {\n    root = global;\n  } else if (WEB_WORKER) {\n    root = self;\n  }\n  var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n  var AMD = typeof define === 'function' && define.amd;\n  var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n  var HEX_CHARS = '0123456789abcdef'.split('');\n  var EXTRA = [128, 32768, 8388608, -2147483648];\n  var SHIFT = [0, 8, 16, 24];\n  var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n  var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n  var blocks = [], buffer8;\n  if (ARRAY_BUFFER) {\n    var buffer = new ArrayBuffer(68);\n    buffer8 = new Uint8Array(buffer);\n    blocks = new Uint32Array(buffer);\n  }\n\n  var isArray = Array.isArray;\n  if (root.JS_MD5_NO_NODE_JS || !isArray) {\n    isArray = function (obj) {\n      return Object.prototype.toString.call(obj) === '[object Array]';\n    };\n  }\n\n  var isView = ArrayBuffer.isView;\n  if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {\n    isView = function (obj) {\n      return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n    };\n  }\n\n  // [message: string, isString: bool]\n  var formatMessage = function (message) {\n    var type = typeof message;\n    if (type === 'string') {\n      return [message, true];\n    }\n    if (type !== 'object' || message === null) {\n      throw new Error(INPUT_ERROR);\n    }\n    if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n      return [new Uint8Array(message), false];\n    }\n    if (!isArray(message) && !isView(message)) {\n      throw new Error(INPUT_ERROR);\n    }\n    return [message, false];\n  }\n\n  /**\n   * @method hex\n   * @memberof md5\n   * @description Output hash as hex string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} Hex string\n   * @example\n   * md5.hex('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * md5('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method digest\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.digest('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method array\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.array('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method arrayBuffer\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.buffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method base64\n   * @memberof md5\n   * @description Output hash as base64 string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} base64 string\n   * @example\n   * md5.base64('The quick brown fox jumps over the lazy dog');\n   */\n  var createOutputMethod = function (outputType) {\n    return function (message) {\n      return new Md5(true).update(message)[outputType]();\n    };\n  };\n\n  /**\n   * @method create\n   * @memberof md5\n   * @description Create Md5 object\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.create();\n   */\n  /**\n   * @method update\n   * @memberof md5\n   * @description Create and update Md5 object\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * var hash = md5.create();\n   * hash.update('The quick brown fox jumps over the lazy dog');\n   */\n  var createMethod = function () {\n    var method = createOutputMethod('hex');\n    if (NODE_JS) {\n      method = nodeWrap(method);\n    }\n    method.create = function () {\n      return new Md5();\n    };\n    method.update = function (message) {\n      return method.create().update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createOutputMethod(type);\n    }\n    return method;\n  };\n\n  var nodeWrap = function (method) {\n    var crypto = require('crypto')\n    var Buffer = require('buffer').Buffer;\n    var bufferFrom;\n    if (Buffer.from && !root.JS_MD5_NO_BUFFER_FROM) {\n      bufferFrom = Buffer.from;\n    } else {\n      bufferFrom = function (message) {\n        return new Buffer(message);\n      };\n    }\n    var nodeMethod = function (message) {\n      if (typeof message === 'string') {\n        return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n      } else {\n        if (message === null || message === undefined) {\n          throw new Error(INPUT_ERROR);\n        } else if (message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        }\n      }\n      if (isArray(message) || isView(message) ||\n        message.constructor === Buffer) {\n        return crypto.createHash('md5').update(bufferFrom(message)).digest('hex');\n      } else {\n        return method(message);\n      }\n    };\n    return nodeMethod;\n  };\n\n  /**\n   * @namespace md5.hmac\n   */\n  /**\n   * @method hex\n   * @memberof md5.hmac\n   * @description Output hash as hex string\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} Hex string\n   * @example\n   * md5.hmac.hex('key', 'The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * md5.hmac('key', 'The quick brown fox jumps over the lazy dog');\n   */\n\n  /**\n   * @method digest\n   * @memberof md5.hmac\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.hmac.digest('key', 'The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method array\n   * @memberof md5.hmac\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.hmac.array('key', 'The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method arrayBuffer\n   * @memberof md5.hmac\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.hmac.arrayBuffer('key', 'The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof md5.hmac\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.hmac.buffer('key', 'The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method base64\n   * @memberof md5.hmac\n   * @description Output hash as base64 string\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} base64 string\n   * @example\n   * md5.hmac.base64('key', 'The quick brown fox jumps over the lazy dog');\n   */\n  var createHmacOutputMethod = function (outputType) {\n    return function (key, message) {\n      return new HmacMd5(key, true).update(message)[outputType]();\n    };\n  };\n\n  /**\n   * @method create\n   * @memberof md5.hmac\n   * @description Create HmacMd5 object\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @returns {HmacMd5} HmacMd5 object.\n   * @example\n   * var hash = md5.hmac.create('key');\n   */\n  /**\n   * @method update\n   * @memberof md5.hmac\n   * @description Create and update HmacMd5 object\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {HmacMd5} HmacMd5 object.\n   * @example\n   * var hash = md5.hmac.update('key', 'The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * var hash = md5.hmac.create('key');\n   * hash.update('The quick brown fox jumps over the lazy dog');\n   */\n  var createHmacMethod = function () {\n    var method = createHmacOutputMethod('hex');\n    method.create = function (key) {\n      return new HmacMd5(key);\n    };\n    method.update = function (key, message) {\n      return method.create(key).update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createHmacOutputMethod(type);\n    }\n    return method;\n  };\n\n  /**\n   * Md5 class\n   * @class Md5\n   * @description This is internal class.\n   * @see {@link md5.create}\n   */\n  function Md5(sharedMemory) {\n    if (sharedMemory) {\n      blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      this.blocks = blocks;\n      this.buffer8 = buffer8;\n    } else {\n      if (ARRAY_BUFFER) {\n        var buffer = new ArrayBuffer(68);\n        this.buffer8 = new Uint8Array(buffer);\n        this.blocks = new Uint32Array(buffer);\n      } else {\n        this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      }\n    }\n    this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n    this.finalized = this.hashed = false;\n    this.first = true;\n  }\n\n  /**\n   * @method update\n   * @memberof Md5\n   * @instance\n   * @description Update hash\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @see {@link md5.update}\n   */\n  Md5.prototype.update = function (message) {\n    if (this.finalized) {\n      throw new Error(FINALIZE_ERROR);\n    }\n\n    var result = formatMessage(message);\n    message = result[0];\n    var isString = result[1];\n    var code, index = 0, i, length = message.length, blocks = this.blocks;\n    var buffer8 = this.buffer8;\n\n    while (index < length) {\n      if (this.hashed) {\n        this.hashed = false;\n        blocks[0] = blocks[16];\n        blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n        blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n        blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      }\n\n      if (isString) {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              buffer8[i++] = code;\n            } else if (code < 0x800) {\n              buffer8[i++] = 0xc0 | (code >>> 6);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else if (code < 0xd800 || code >= 0xe000) {\n              buffer8[i++] = 0xe0 | (code >>> 12);\n              buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              buffer8[i++] = 0xf0 | (code >>> 18);\n              buffer8[i++] = 0x80 | ((code >>> 12) & 0x3f);\n              buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            }\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              blocks[i >>> 2] |= code << SHIFT[i++ & 3];\n            } else if (code < 0x800) {\n              blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else if (code < 0xd800 || code >= 0xe000) {\n              blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            }\n          }\n        }\n      } else {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            buffer8[i++] = message[index];\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];\n          }\n        }\n      }\n      this.lastByteIndex = i;\n      this.bytes += i - this.start;\n      if (i >= 64) {\n        this.start = i - 64;\n        this.hash();\n        this.hashed = true;\n      } else {\n        this.start = i;\n      }\n    }\n    if (this.bytes > 4294967295) {\n      this.hBytes += this.bytes / 4294967296 << 0;\n      this.bytes = this.bytes % 4294967296;\n    }\n    return this;\n  };\n\n  Md5.prototype.finalize = function () {\n    if (this.finalized) {\n      return;\n    }\n    this.finalized = true;\n    var blocks = this.blocks, i = this.lastByteIndex;\n    blocks[i >>> 2] |= EXTRA[i & 3];\n    if (i >= 56) {\n      if (!this.hashed) {\n        this.hash();\n      }\n      blocks[0] = blocks[16];\n      blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n    }\n    blocks[14] = this.bytes << 3;\n    blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n    this.hash();\n  };\n\n  Md5.prototype.hash = function () {\n    var a, b, c, d, bc, da, blocks = this.blocks;\n\n    if (this.first) {\n      a = blocks[0] - 680876937;\n      a = (a << 7 | a >>> 25) - 271733879 << 0;\n      d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n      b = (b << 22 | b >>> 10) + c << 0;\n    } else {\n      a = this.h0;\n      b = this.h1;\n      c = this.h2;\n      d = this.h3;\n      a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n      a = (a << 7 | a >>> 25) + b << 0;\n      d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n      b = (b << 22 | b >>> 10) + c << 0;\n    }\n\n    a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n    b = (b << 20 | b >>> 12) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[5] - 378558;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[8] - 2022574463;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[11] + 1839030562;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[14] - 35309556;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[1] - 1530992060;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[4] + 1272893353;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[7] - 155497632;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[10] - 1094730640;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[13] + 681279174;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[0] - 358537222;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[3] - 722521979;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[6] + 76029189;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[9] - 640364487;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[12] - 421815835;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[15] + 530742520;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[2] - 995338651;\n    b = (b << 23 | b >>> 9) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n    b = (b << 21 | b >>> 11) + c << 0;\n\n    if (this.first) {\n      this.h0 = a + 1732584193 << 0;\n      this.h1 = b - 271733879 << 0;\n      this.h2 = c - 1732584194 << 0;\n      this.h3 = d + 271733878 << 0;\n      this.first = false;\n    } else {\n      this.h0 = this.h0 + a << 0;\n      this.h1 = this.h1 + b << 0;\n      this.h2 = this.h2 + c << 0;\n      this.h3 = this.h3 + d << 0;\n    }\n  };\n\n  /**\n   * @method hex\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.hex();\n   */\n  Md5.prototype.hex = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n    return HEX_CHARS[(h0 >>> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n      HEX_CHARS[(h0 >>> 12) & 0x0F] + HEX_CHARS[(h0 >>> 8) & 0x0F] +\n      HEX_CHARS[(h0 >>> 20) & 0x0F] + HEX_CHARS[(h0 >>> 16) & 0x0F] +\n      HEX_CHARS[(h0 >>> 28) & 0x0F] + HEX_CHARS[(h0 >>> 24) & 0x0F] +\n      HEX_CHARS[(h1 >>> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n      HEX_CHARS[(h1 >>> 12) & 0x0F] + HEX_CHARS[(h1 >>> 8) & 0x0F] +\n      HEX_CHARS[(h1 >>> 20) & 0x0F] + HEX_CHARS[(h1 >>> 16) & 0x0F] +\n      HEX_CHARS[(h1 >>> 28) & 0x0F] + HEX_CHARS[(h1 >>> 24) & 0x0F] +\n      HEX_CHARS[(h2 >>> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n      HEX_CHARS[(h2 >>> 12) & 0x0F] + HEX_CHARS[(h2 >>> 8) & 0x0F] +\n      HEX_CHARS[(h2 >>> 20) & 0x0F] + HEX_CHARS[(h2 >>> 16) & 0x0F] +\n      HEX_CHARS[(h2 >>> 28) & 0x0F] + HEX_CHARS[(h2 >>> 24) & 0x0F] +\n      HEX_CHARS[(h3 >>> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n      HEX_CHARS[(h3 >>> 12) & 0x0F] + HEX_CHARS[(h3 >>> 8) & 0x0F] +\n      HEX_CHARS[(h3 >>> 20) & 0x0F] + HEX_CHARS[(h3 >>> 16) & 0x0F] +\n      HEX_CHARS[(h3 >>> 28) & 0x0F] + HEX_CHARS[(h3 >>> 24) & 0x0F];\n  };\n\n  /**\n   * @method toString\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.toString();\n   */\n  Md5.prototype.toString = Md5.prototype.hex;\n\n  /**\n   * @method digest\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.digest}\n   * @example\n   * hash.digest();\n   */\n  Md5.prototype.digest = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n    return [\n      h0 & 0xFF, (h0 >>> 8) & 0xFF, (h0 >>> 16) & 0xFF, (h0 >>> 24) & 0xFF,\n      h1 & 0xFF, (h1 >>> 8) & 0xFF, (h1 >>> 16) & 0xFF, (h1 >>> 24) & 0xFF,\n      h2 & 0xFF, (h2 >>> 8) & 0xFF, (h2 >>> 16) & 0xFF, (h2 >>> 24) & 0xFF,\n      h3 & 0xFF, (h3 >>> 8) & 0xFF, (h3 >>> 16) & 0xFF, (h3 >>> 24) & 0xFF\n    ];\n  };\n\n  /**\n   * @method array\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.array}\n   * @example\n   * hash.array();\n   */\n  Md5.prototype.array = Md5.prototype.digest;\n\n  /**\n   * @method arrayBuffer\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.arrayBuffer}\n   * @example\n   * hash.arrayBuffer();\n   */\n  Md5.prototype.arrayBuffer = function () {\n    this.finalize();\n\n    var buffer = new ArrayBuffer(16);\n    var blocks = new Uint32Array(buffer);\n    blocks[0] = this.h0;\n    blocks[1] = this.h1;\n    blocks[2] = this.h2;\n    blocks[3] = this.h3;\n    return buffer;\n  };\n\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.buffer}\n   * @example\n   * hash.buffer();\n   */\n  Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n  /**\n   * @method base64\n   * @memberof Md5\n   * @instance\n   * @description Output hash as base64 string\n   * @returns {String} base64 string\n   * @see {@link md5.base64}\n   * @example\n   * hash.base64();\n   */\n  Md5.prototype.base64 = function () {\n    var v1, v2, v3, base64Str = '', bytes = this.array();\n    for (var i = 0; i < 15;) {\n      v1 = bytes[i++];\n      v2 = bytes[i++];\n      v3 = bytes[i++];\n      base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n        BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n        BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n        BASE64_ENCODE_CHAR[v3 & 63];\n    }\n    v1 = bytes[i];\n    base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n      BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n      '==';\n    return base64Str;\n  };\n\n  /**\n   * HmacMd5 class\n   * @class HmacMd5\n   * @extends Md5\n   * @description This is internal class.\n   * @see {@link md5.hmac.create}\n   */\n  function HmacMd5(key, sharedMemory) {\n    var i, result = formatMessage(key);\n    key = result[0];\n    if (result[1]) {\n      var bytes = [], length = key.length, index = 0, code;\n      for (i = 0; i < length; ++i) {\n        code = key.charCodeAt(i);\n        if (code < 0x80) {\n          bytes[index++] = code;\n        } else if (code < 0x800) {\n          bytes[index++] = (0xc0 | (code >>> 6));\n          bytes[index++] = (0x80 | (code & 0x3f));\n        } else if (code < 0xd800 || code >= 0xe000) {\n          bytes[index++] = (0xe0 | (code >>> 12));\n          bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n          bytes[index++] = (0x80 | (code & 0x3f));\n        } else {\n          code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\n          bytes[index++] = (0xf0 | (code >>> 18));\n          bytes[index++] = (0x80 | ((code >>> 12) & 0x3f));\n          bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n          bytes[index++] = (0x80 | (code & 0x3f));\n        }\n      }\n      key = bytes;\n    }\n\n    if (key.length > 64) {\n      key = (new Md5(true)).update(key).array();\n    }\n\n    var oKeyPad = [], iKeyPad = [];\n    for (i = 0; i < 64; ++i) {\n      var b = key[i] || 0;\n      oKeyPad[i] = 0x5c ^ b;\n      iKeyPad[i] = 0x36 ^ b;\n    }\n\n    Md5.call(this, sharedMemory);\n\n    this.update(iKeyPad);\n    this.oKeyPad = oKeyPad;\n    this.inner = true;\n    this.sharedMemory = sharedMemory;\n  }\n  HmacMd5.prototype = new Md5();\n\n  HmacMd5.prototype.finalize = function () {\n    Md5.prototype.finalize.call(this);\n    if (this.inner) {\n      this.inner = false;\n      var innerHash = this.array();\n      Md5.call(this, this.sharedMemory);\n      this.update(this.oKeyPad);\n      this.update(innerHash);\n      Md5.prototype.finalize.call(this);\n    }\n  };\n\n  var exports = createMethod();\n  exports.md5 = exports;\n  exports.md5.hmac = createHmacMethod();\n\n  if (COMMON_JS) {\n    module.exports = exports;\n  } else {\n    /**\n     * @method md5\b\n     * @description Md5 hash function, export to global in browsers.\n     * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n     * @returns {String} md5 hashes\n     * @example\n     * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n     * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n     * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n     *\n     * // It also supports UTF-8 encoding\n     * md5('\u4E2D\u6587'); // a7bac2239fcdcb3a067903d8077c4a07\n     *\n     * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n     * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n     * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n     */\n    root.md5 = exports;\n    if (AMD) {\n      define(function () {\n        return exports;\n      });\n    }\n  }\n})();\n", "(function webpackUniversalModuleDefinition(root, factory) {\n/* istanbul ignore next */\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n/* istanbul ignore next */\n\telse if(typeof exports === 'object')\n\t\texports[\"esprima\"] = factory();\n\telse\n\t\troot[\"esprima\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/* istanbul ignore if */\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t/*\n\t  Copyright JS Foundation and other contributors, https://js.foundation/\n\n\t  Redistribution and use in source and binary forms, with or without\n\t  modification, are permitted provided that the following conditions are met:\n\n\t    * Redistributions of source code must retain the above copyright\n\t      notice, this list of conditions and the following disclaimer.\n\t    * Redistributions in binary form must reproduce the above copyright\n\t      notice, this list of conditions and the following disclaimer in the\n\t      documentation and/or other materials provided with the distribution.\n\n\t  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n\t  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\t  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n\t  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\t  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n\t  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n\t  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar comment_handler_1 = __webpack_require__(1);\n\tvar jsx_parser_1 = __webpack_require__(3);\n\tvar parser_1 = __webpack_require__(8);\n\tvar tokenizer_1 = __webpack_require__(15);\n\tfunction parse(code, options, delegate) {\n\t    var commentHandler = null;\n\t    var proxyDelegate = function (node, metadata) {\n\t        if (delegate) {\n\t            delegate(node, metadata);\n\t        }\n\t        if (commentHandler) {\n\t            commentHandler.visit(node, metadata);\n\t        }\n\t    };\n\t    var parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null;\n\t    var collectComment = false;\n\t    if (options) {\n\t        collectComment = (typeof options.comment === 'boolean' && options.comment);\n\t        var attachComment = (typeof options.attachComment === 'boolean' && options.attachComment);\n\t        if (collectComment || attachComment) {\n\t            commentHandler = new comment_handler_1.CommentHandler();\n\t            commentHandler.attach = attachComment;\n\t            options.comment = true;\n\t            parserDelegate = proxyDelegate;\n\t        }\n\t    }\n\t    var isModule = false;\n\t    if (options && typeof options.sourceType === 'string') {\n\t        isModule = (options.sourceType === 'module');\n\t    }\n\t    var parser;\n\t    if (options && typeof options.jsx === 'boolean' && options.jsx) {\n\t        parser = new jsx_parser_1.JSXParser(code, options, parserDelegate);\n\t    }\n\t    else {\n\t        parser = new parser_1.Parser(code, options, parserDelegate);\n\t    }\n\t    var program = isModule ? parser.parseModule() : parser.parseScript();\n\t    var ast = program;\n\t    if (collectComment && commentHandler) {\n\t        ast.comments = commentHandler.comments;\n\t    }\n\t    if (parser.config.tokens) {\n\t        ast.tokens = parser.tokens;\n\t    }\n\t    if (parser.config.tolerant) {\n\t        ast.errors = parser.errorHandler.errors;\n\t    }\n\t    return ast;\n\t}\n\texports.parse = parse;\n\tfunction parseModule(code, options, delegate) {\n\t    var parsingOptions = options || {};\n\t    parsingOptions.sourceType = 'module';\n\t    return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseModule = parseModule;\n\tfunction parseScript(code, options, delegate) {\n\t    var parsingOptions = options || {};\n\t    parsingOptions.sourceType = 'script';\n\t    return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseScript = parseScript;\n\tfunction tokenize(code, options, delegate) {\n\t    var tokenizer = new tokenizer_1.Tokenizer(code, options);\n\t    var tokens;\n\t    tokens = [];\n\t    try {\n\t        while (true) {\n\t            var token = tokenizer.getNextToken();\n\t            if (!token) {\n\t                break;\n\t            }\n\t            if (delegate) {\n\t                token = delegate(token);\n\t            }\n\t            tokens.push(token);\n\t        }\n\t    }\n\t    catch (e) {\n\t        tokenizer.errorHandler.tolerate(e);\n\t    }\n\t    if (tokenizer.errorHandler.tolerant) {\n\t        tokens.errors = tokenizer.errors();\n\t    }\n\t    return tokens;\n\t}\n\texports.tokenize = tokenize;\n\tvar syntax_1 = __webpack_require__(2);\n\texports.Syntax = syntax_1.Syntax;\n\t// Sync with *.json manifests.\n\texports.version = '4.0.1';\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __webpack_require__(2);\n\tvar CommentHandler = (function () {\n\t    function CommentHandler() {\n\t        this.attach = false;\n\t        this.comments = [];\n\t        this.stack = [];\n\t        this.leading = [];\n\t        this.trailing = [];\n\t    }\n\t    CommentHandler.prototype.insertInnerComments = function (node, metadata) {\n\t        //  innnerComments for properties empty block\n\t        //  `function a() {/** comments **\\/}`\n\t        if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) {\n\t            var innerComments = [];\n\t            for (var i = this.leading.length - 1; i >= 0; --i) {\n\t                var entry = this.leading[i];\n\t                if (metadata.end.offset >= entry.start) {\n\t                    innerComments.unshift(entry.comment);\n\t                    this.leading.splice(i, 1);\n\t                    this.trailing.splice(i, 1);\n\t                }\n\t            }\n\t            if (innerComments.length) {\n\t                node.innerComments = innerComments;\n\t            }\n\t        }\n\t    };\n\t    CommentHandler.prototype.findTrailingComments = function (metadata) {\n\t        var trailingComments = [];\n\t        if (this.trailing.length > 0) {\n\t            for (var i = this.trailing.length - 1; i >= 0; --i) {\n\t                var entry_1 = this.trailing[i];\n\t                if (entry_1.start >= metadata.end.offset) {\n\t                    trailingComments.unshift(entry_1.comment);\n\t                }\n\t            }\n\t            this.trailing.length = 0;\n\t            return trailingComments;\n\t        }\n\t        var entry = this.stack[this.stack.length - 1];\n\t        if (entry && entry.node.trailingComments) {\n\t            var firstComment = entry.node.trailingComments[0];\n\t            if (firstComment && firstComment.range[0] >= metadata.end.offset) {\n\t                trailingComments = entry.node.trailingComments;\n\t                delete entry.node.trailingComments;\n\t            }\n\t        }\n\t        return trailingComments;\n\t    };\n\t    CommentHandler.prototype.findLeadingComments = function (metadata) {\n\t        var leadingComments = [];\n\t        var target;\n\t        while (this.stack.length > 0) {\n\t            var entry = this.stack[this.stack.length - 1];\n\t            if (entry && entry.start >= metadata.start.offset) {\n\t                target = entry.node;\n\t                this.stack.pop();\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        if (target) {\n\t            var count = target.leadingComments ? target.leadingComments.length : 0;\n\t            for (var i = count - 1; i >= 0; --i) {\n\t                var comment = target.leadingComments[i];\n\t                if (comment.range[1] <= metadata.start.offset) {\n\t                    leadingComments.unshift(comment);\n\t                    target.leadingComments.splice(i, 1);\n\t                }\n\t            }\n\t            if (target.leadingComments && target.leadingComments.length === 0) {\n\t                delete target.leadingComments;\n\t            }\n\t            return leadingComments;\n\t        }\n\t        for (var i = this.leading.length - 1; i >= 0; --i) {\n\t            var entry = this.leading[i];\n\t            if (entry.start <= metadata.start.offset) {\n\t                leadingComments.unshift(entry.comment);\n\t                this.leading.splice(i, 1);\n\t            }\n\t        }\n\t        return leadingComments;\n\t    };\n\t    CommentHandler.prototype.visitNode = function (node, metadata) {\n\t        if (node.type === syntax_1.Syntax.Program && node.body.length > 0) {\n\t            return;\n\t        }\n\t        this.insertInnerComments(node, metadata);\n\t        var trailingComments = this.findTrailingComments(metadata);\n\t        var leadingComments = this.findLeadingComments(metadata);\n\t        if (leadingComments.length > 0) {\n\t            node.leadingComments = leadingComments;\n\t        }\n\t        if (trailingComments.length > 0) {\n\t            node.trailingComments = trailingComments;\n\t        }\n\t        this.stack.push({\n\t            node: node,\n\t            start: metadata.start.offset\n\t        });\n\t    };\n\t    CommentHandler.prototype.visitComment = function (node, metadata) {\n\t        var type = (node.type[0] === 'L') ? 'Line' : 'Block';\n\t        var comment = {\n\t            type: type,\n\t            value: node.value\n\t        };\n\t        if (node.range) {\n\t            comment.range = node.range;\n\t        }\n\t        if (node.loc) {\n\t            comment.loc = node.loc;\n\t        }\n\t        this.comments.push(comment);\n\t        if (this.attach) {\n\t            var entry = {\n\t                comment: {\n\t                    type: type,\n\t                    value: node.value,\n\t                    range: [metadata.start.offset, metadata.end.offset]\n\t                },\n\t                start: metadata.start.offset\n\t            };\n\t            if (node.loc) {\n\t                entry.comment.loc = node.loc;\n\t            }\n\t            node.type = type;\n\t            this.leading.push(entry);\n\t            this.trailing.push(entry);\n\t        }\n\t    };\n\t    CommentHandler.prototype.visit = function (node, metadata) {\n\t        if (node.type === 'LineComment') {\n\t            this.visitComment(node, metadata);\n\t        }\n\t        else if (node.type === 'BlockComment') {\n\t            this.visitComment(node, metadata);\n\t        }\n\t        else if (this.attach) {\n\t            this.visitNode(node, metadata);\n\t        }\n\t    };\n\t    return CommentHandler;\n\t}());\n\texports.CommentHandler = CommentHandler;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.Syntax = {\n\t    AssignmentExpression: 'AssignmentExpression',\n\t    AssignmentPattern: 'AssignmentPattern',\n\t    ArrayExpression: 'ArrayExpression',\n\t    ArrayPattern: 'ArrayPattern',\n\t    ArrowFunctionExpression: 'ArrowFunctionExpression',\n\t    AwaitExpression: 'AwaitExpression',\n\t    BlockStatement: 'BlockStatement',\n\t    BinaryExpression: 'BinaryExpression',\n\t    BreakStatement: 'BreakStatement',\n\t    CallExpression: 'CallExpression',\n\t    CatchClause: 'CatchClause',\n\t    ClassBody: 'ClassBody',\n\t    ClassDeclaration: 'ClassDeclaration',\n\t    ClassExpression: 'ClassExpression',\n\t    ConditionalExpression: 'ConditionalExpression',\n\t    ContinueStatement: 'ContinueStatement',\n\t    DoWhileStatement: 'DoWhileStatement',\n\t    DebuggerStatement: 'DebuggerStatement',\n\t    EmptyStatement: 'EmptyStatement',\n\t    ExportAllDeclaration: 'ExportAllDeclaration',\n\t    ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n\t    ExportNamedDeclaration: 'ExportNamedDeclaration',\n\t    ExportSpecifier: 'ExportSpecifier',\n\t    ExpressionStatement: 'ExpressionStatement',\n\t    ForStatement: 'ForStatement',\n\t    ForOfStatement: 'ForOfStatement',\n\t    ForInStatement: 'ForInStatement',\n\t    FunctionDeclaration: 'FunctionDeclaration',\n\t    FunctionExpression: 'FunctionExpression',\n\t    Identifier: 'Identifier',\n\t    IfStatement: 'IfStatement',\n\t    ImportDeclaration: 'ImportDeclaration',\n\t    ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n\t    ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n\t    ImportSpecifier: 'ImportSpecifier',\n\t    Literal: 'Literal',\n\t    LabeledStatement: 'LabeledStatement',\n\t    LogicalExpression: 'LogicalExpression',\n\t    MemberExpression: 'MemberExpression',\n\t    MetaProperty: 'MetaProperty',\n\t    MethodDefinition: 'MethodDefinition',\n\t    NewExpression: 'NewExpression',\n\t    ObjectExpression: 'ObjectExpression',\n\t    ObjectPattern: 'ObjectPattern',\n\t    Program: 'Program',\n\t    Property: 'Property',\n\t    RestElement: 'RestElement',\n\t    ReturnStatement: 'ReturnStatement',\n\t    SequenceExpression: 'SequenceExpression',\n\t    SpreadElement: 'SpreadElement',\n\t    Super: 'Super',\n\t    SwitchCase: 'SwitchCase',\n\t    SwitchStatement: 'SwitchStatement',\n\t    TaggedTemplateExpression: 'TaggedTemplateExpression',\n\t    TemplateElement: 'TemplateElement',\n\t    TemplateLiteral: 'TemplateLiteral',\n\t    ThisExpression: 'ThisExpression',\n\t    ThrowStatement: 'ThrowStatement',\n\t    TryStatement: 'TryStatement',\n\t    UnaryExpression: 'UnaryExpression',\n\t    UpdateExpression: 'UpdateExpression',\n\t    VariableDeclaration: 'VariableDeclaration',\n\t    VariableDeclarator: 'VariableDeclarator',\n\t    WhileStatement: 'WhileStatement',\n\t    WithStatement: 'WithStatement',\n\t    YieldExpression: 'YieldExpression'\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n/* istanbul ignore next */\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar character_1 = __webpack_require__(4);\n\tvar JSXNode = __webpack_require__(5);\n\tvar jsx_syntax_1 = __webpack_require__(6);\n\tvar Node = __webpack_require__(7);\n\tvar parser_1 = __webpack_require__(8);\n\tvar token_1 = __webpack_require__(13);\n\tvar xhtml_entities_1 = __webpack_require__(14);\n\ttoken_1.TokenName[100 /* Identifier */] = 'JSXIdentifier';\n\ttoken_1.TokenName[101 /* Text */] = 'JSXText';\n\t// Fully qualified element name, e.g. <svg:path> returns \"svg:path\"\n\tfunction getQualifiedElementName(elementName) {\n\t    var qualifiedName;\n\t    switch (elementName.type) {\n\t        case jsx_syntax_1.JSXSyntax.JSXIdentifier:\n\t            var id = elementName;\n\t            qualifiedName = id.name;\n\t            break;\n\t        case jsx_syntax_1.JSXSyntax.JSXNamespacedName:\n\t            var ns = elementName;\n\t            qualifiedName = getQualifiedElementName(ns.namespace) + ':' +\n\t                getQualifiedElementName(ns.name);\n\t            break;\n\t        case jsx_syntax_1.JSXSyntax.JSXMemberExpression:\n\t            var expr = elementName;\n\t            qualifiedName = getQualifiedElementName(expr.object) + '.' +\n\t                getQualifiedElementName(expr.property);\n\t            break;\n\t        /* istanbul ignore next */\n\t        default:\n\t            break;\n\t    }\n\t    return qualifiedName;\n\t}\n\tvar JSXParser = (function (_super) {\n\t    __extends(JSXParser, _super);\n\t    function JSXParser(code, options, delegate) {\n\t        return _super.call(this, code, options, delegate) || this;\n\t    }\n\t    JSXParser.prototype.parsePrimaryExpression = function () {\n\t        return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this);\n\t    };\n\t    JSXParser.prototype.startJSX = function () {\n\t        // Unwind the scanner before the lookahead token.\n\t        this.scanner.index = this.startMarker.index;\n\t        this.scanner.lineNumber = this.startMarker.line;\n\t        this.scanner.lineStart = this.startMarker.index - this.startMarker.column;\n\t    };\n\t    JSXParser.prototype.finishJSX = function () {\n\t        // Prime the next lookahead.\n\t        this.nextToken();\n\t    };\n\t    JSXParser.prototype.reenterJSX = function () {\n\t        this.startJSX();\n\t        this.expectJSX('}');\n\t        // Pop the closing '}' added from the lookahead.\n\t        if (this.config.tokens) {\n\t            this.tokens.pop();\n\t        }\n\t    };\n\t    JSXParser.prototype.createJSXNode = function () {\n\t        this.collectComments();\n\t        return {\n\t            index: this.scanner.index,\n\t            line: this.scanner.lineNumber,\n\t            column: this.scanner.index - this.scanner.lineStart\n\t        };\n\t    };\n\t    JSXParser.prototype.createJSXChildNode = function () {\n\t        return {\n\t            index: this.scanner.index,\n\t            line: this.scanner.lineNumber,\n\t            column: this.scanner.index - this.scanner.lineStart\n\t        };\n\t    };\n\t    JSXParser.prototype.scanXHTMLEntity = function (quote) {\n\t        var result = '&';\n\t        var valid = true;\n\t        var terminated = false;\n\t        var numeric = false;\n\t        var hex = false;\n\t        while (!this.scanner.eof() && valid && !terminated) {\n\t            var ch = this.scanner.source[this.scanner.index];\n\t            if (ch === quote) {\n\t                break;\n\t            }\n\t            terminated = (ch === ';');\n\t            result += ch;\n\t            ++this.scanner.index;\n\t            if (!terminated) {\n\t                switch (result.length) {\n\t                    case 2:\n\t                        // e.g. '&#123;'\n\t                        numeric = (ch === '#');\n\t                        break;\n\t                    case 3:\n\t                        if (numeric) {\n\t                            // e.g. '&#x41;'\n\t                            hex = (ch === 'x');\n\t                            valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0));\n\t                            numeric = numeric && !hex;\n\t                        }\n\t                        break;\n\t                    default:\n\t                        valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0)));\n\t                        valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0)));\n\t                        break;\n\t                }\n\t            }\n\t        }\n\t        if (valid && terminated && result.length > 2) {\n\t            // e.g. '&#x41;' becomes just '#x41'\n\t            var str = result.substr(1, result.length - 2);\n\t            if (numeric && str.length > 1) {\n\t                result = String.fromCharCode(parseInt(str.substr(1), 10));\n\t            }\n\t            else if (hex && str.length > 2) {\n\t                result = String.fromCharCode(parseInt('0' + str.substr(1), 16));\n\t            }\n\t            else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) {\n\t                result = xhtml_entities_1.XHTMLEntities[str];\n\t            }\n\t        }\n\t        return result;\n\t    };\n\t    // Scan the next JSX token. This replaces Scanner#lex when in JSX mode.\n\t    JSXParser.prototype.lexJSX = function () {\n\t        var cp = this.scanner.source.charCodeAt(this.scanner.index);\n\t        // < > / : = { }\n\t        if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) {\n\t            var value = this.scanner.source[this.scanner.index++];\n\t            return {\n\t                type: 7 /* Punctuator */,\n\t                value: value,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: this.scanner.index - 1,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // \" '\n\t        if (cp === 34 || cp === 39) {\n\t            var start = this.scanner.index;\n\t            var quote = this.scanner.source[this.scanner.index++];\n\t            var str = '';\n\t            while (!this.scanner.eof()) {\n\t                var ch = this.scanner.source[this.scanner.index++];\n\t                if (ch === quote) {\n\t                    break;\n\t                }\n\t                else if (ch === '&') {\n\t                    str += this.scanXHTMLEntity(quote);\n\t                }\n\t                else {\n\t                    str += ch;\n\t                }\n\t            }\n\t            return {\n\t                type: 8 /* StringLiteral */,\n\t                value: str,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: start,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // ... or .\n\t        if (cp === 46) {\n\t            var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1);\n\t            var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2);\n\t            var value = (n1 === 46 && n2 === 46) ? '...' : '.';\n\t            var start = this.scanner.index;\n\t            this.scanner.index += value.length;\n\t            return {\n\t                type: 7 /* Punctuator */,\n\t                value: value,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: start,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // `\n\t        if (cp === 96) {\n\t            // Only placeholder, since it will be rescanned as a real assignment expression.\n\t            return {\n\t                type: 10 /* Template */,\n\t                value: '',\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: this.scanner.index,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // Identifer can not contain backslash (char code 92).\n\t        if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) {\n\t            var start = this.scanner.index;\n\t            ++this.scanner.index;\n\t            while (!this.scanner.eof()) {\n\t                var ch = this.scanner.source.charCodeAt(this.scanner.index);\n\t                if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) {\n\t                    ++this.scanner.index;\n\t                }\n\t                else if (ch === 45) {\n\t                    // Hyphen (char code 45) can be part of an identifier.\n\t                    ++this.scanner.index;\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            var id = this.scanner.source.slice(start, this.scanner.index);\n\t            return {\n\t                type: 100 /* Identifier */,\n\t                value: id,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: start,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        return this.scanner.lex();\n\t    };\n\t    JSXParser.prototype.nextJSXToken = function () {\n\t        this.collectComments();\n\t        this.startMarker.index = this.scanner.index;\n\t        this.startMarker.line = this.scanner.lineNumber;\n\t        this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        var token = this.lexJSX();\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        if (this.config.tokens) {\n\t            this.tokens.push(this.convertToken(token));\n\t        }\n\t        return token;\n\t    };\n\t    JSXParser.prototype.nextJSXText = function () {\n\t        this.startMarker.index = this.scanner.index;\n\t        this.startMarker.line = this.scanner.lineNumber;\n\t        this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        var start = this.scanner.index;\n\t        var text = '';\n\t        while (!this.scanner.eof()) {\n\t            var ch = this.scanner.source[this.scanner.index];\n\t            if (ch === '{' || ch === '<') {\n\t                break;\n\t            }\n\t            ++this.scanner.index;\n\t            text += ch;\n\t            if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                ++this.scanner.lineNumber;\n\t                if (ch === '\\r' && this.scanner.source[this.scanner.index] === '\\n') {\n\t                    ++this.scanner.index;\n\t                }\n\t                this.scanner.lineStart = this.scanner.index;\n\t            }\n\t        }\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        var token = {\n\t            type: 101 /* Text */,\n\t            value: text,\n\t            lineNumber: this.scanner.lineNumber,\n\t            lineStart: this.scanner.lineStart,\n\t            start: start,\n\t            end: this.scanner.index\n\t        };\n\t        if ((text.length > 0) && this.config.tokens) {\n\t            this.tokens.push(this.convertToken(token));\n\t        }\n\t        return token;\n\t    };\n\t    JSXParser.prototype.peekJSXToken = function () {\n\t        var state = this.scanner.saveState();\n\t        this.scanner.scanComments();\n\t        var next = this.lexJSX();\n\t        this.scanner.restoreState(state);\n\t        return next;\n\t    };\n\t    // Expect the next JSX token to match the specified punctuator.\n\t    // If not, an exception will be thrown.\n\t    JSXParser.prototype.expectJSX = function (value) {\n\t        var token = this.nextJSXToken();\n\t        if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t    };\n\t    // Return true if the next JSX token matches the specified punctuator.\n\t    JSXParser.prototype.matchJSX = function (value) {\n\t        var next = this.peekJSXToken();\n\t        return next.type === 7 /* Punctuator */ && next.value === value;\n\t    };\n\t    JSXParser.prototype.parseJSXIdentifier = function () {\n\t        var node = this.createJSXNode();\n\t        var token = this.nextJSXToken();\n\t        if (token.type !== 100 /* Identifier */) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXIdentifier(token.value));\n\t    };\n\t    JSXParser.prototype.parseJSXElementName = function () {\n\t        var node = this.createJSXNode();\n\t        var elementName = this.parseJSXIdentifier();\n\t        if (this.matchJSX(':')) {\n\t            var namespace = elementName;\n\t            this.expectJSX(':');\n\t            var name_1 = this.parseJSXIdentifier();\n\t            elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1));\n\t        }\n\t        else if (this.matchJSX('.')) {\n\t            while (this.matchJSX('.')) {\n\t                var object = elementName;\n\t                this.expectJSX('.');\n\t                var property = this.parseJSXIdentifier();\n\t                elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property));\n\t            }\n\t        }\n\t        return elementName;\n\t    };\n\t    JSXParser.prototype.parseJSXAttributeName = function () {\n\t        var node = this.createJSXNode();\n\t        var attributeName;\n\t        var identifier = this.parseJSXIdentifier();\n\t        if (this.matchJSX(':')) {\n\t            var namespace = identifier;\n\t            this.expectJSX(':');\n\t            var name_2 = this.parseJSXIdentifier();\n\t            attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2));\n\t        }\n\t        else {\n\t            attributeName = identifier;\n\t        }\n\t        return attributeName;\n\t    };\n\t    JSXParser.prototype.parseJSXStringLiteralAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        var token = this.nextJSXToken();\n\t        if (token.type !== 8 /* StringLiteral */) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t        var raw = this.getTokenRaw(token);\n\t        return this.finalize(node, new Node.Literal(token.value, raw));\n\t    };\n\t    JSXParser.prototype.parseJSXExpressionAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('{');\n\t        this.finishJSX();\n\t        if (this.match('}')) {\n\t            this.tolerateError('JSX attributes must only be assigned a non-empty expression');\n\t        }\n\t        var expression = this.parseAssignmentExpression();\n\t        this.reenterJSX();\n\t        return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t    };\n\t    JSXParser.prototype.parseJSXAttributeValue = function () {\n\t        return this.matchJSX('{') ? this.parseJSXExpressionAttribute() :\n\t            this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute();\n\t    };\n\t    JSXParser.prototype.parseJSXNameValueAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        var name = this.parseJSXAttributeName();\n\t        var value = null;\n\t        if (this.matchJSX('=')) {\n\t            this.expectJSX('=');\n\t            value = this.parseJSXAttributeValue();\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXAttribute(name, value));\n\t    };\n\t    JSXParser.prototype.parseJSXSpreadAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('{');\n\t        this.expectJSX('...');\n\t        this.finishJSX();\n\t        var argument = this.parseAssignmentExpression();\n\t        this.reenterJSX();\n\t        return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument));\n\t    };\n\t    JSXParser.prototype.parseJSXAttributes = function () {\n\t        var attributes = [];\n\t        while (!this.matchJSX('/') && !this.matchJSX('>')) {\n\t            var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() :\n\t                this.parseJSXNameValueAttribute();\n\t            attributes.push(attribute);\n\t        }\n\t        return attributes;\n\t    };\n\t    JSXParser.prototype.parseJSXOpeningElement = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('<');\n\t        var name = this.parseJSXElementName();\n\t        var attributes = this.parseJSXAttributes();\n\t        var selfClosing = this.matchJSX('/');\n\t        if (selfClosing) {\n\t            this.expectJSX('/');\n\t        }\n\t        this.expectJSX('>');\n\t        return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t    };\n\t    JSXParser.prototype.parseJSXBoundaryElement = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('<');\n\t        if (this.matchJSX('/')) {\n\t            this.expectJSX('/');\n\t            var name_3 = this.parseJSXElementName();\n\t            this.expectJSX('>');\n\t            return this.finalize(node, new JSXNode.JSXClosingElement(name_3));\n\t        }\n\t        var name = this.parseJSXElementName();\n\t        var attributes = this.parseJSXAttributes();\n\t        var selfClosing = this.matchJSX('/');\n\t        if (selfClosing) {\n\t            this.expectJSX('/');\n\t        }\n\t        this.expectJSX('>');\n\t        return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t    };\n\t    JSXParser.prototype.parseJSXEmptyExpression = function () {\n\t        var node = this.createJSXChildNode();\n\t        this.collectComments();\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        return this.finalize(node, new JSXNode.JSXEmptyExpression());\n\t    };\n\t    JSXParser.prototype.parseJSXExpressionContainer = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('{');\n\t        var expression;\n\t        if (this.matchJSX('}')) {\n\t            expression = this.parseJSXEmptyExpression();\n\t            this.expectJSX('}');\n\t        }\n\t        else {\n\t            this.finishJSX();\n\t            expression = this.parseAssignmentExpression();\n\t            this.reenterJSX();\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t    };\n\t    JSXParser.prototype.parseJSXChildren = function () {\n\t        var children = [];\n\t        while (!this.scanner.eof()) {\n\t            var node = this.createJSXChildNode();\n\t            var token = this.nextJSXText();\n\t            if (token.start < token.end) {\n\t                var raw = this.getTokenRaw(token);\n\t                var child = this.finalize(node, new JSXNode.JSXText(token.value, raw));\n\t                children.push(child);\n\t            }\n\t            if (this.scanner.source[this.scanner.index] === '{') {\n\t                var container = this.parseJSXExpressionContainer();\n\t                children.push(container);\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return children;\n\t    };\n\t    JSXParser.prototype.parseComplexJSXElement = function (el) {\n\t        var stack = [];\n\t        while (!this.scanner.eof()) {\n\t            el.children = el.children.concat(this.parseJSXChildren());\n\t            var node = this.createJSXChildNode();\n\t            var element = this.parseJSXBoundaryElement();\n\t            if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) {\n\t                var opening = element;\n\t                if (opening.selfClosing) {\n\t                    var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null));\n\t                    el.children.push(child);\n\t                }\n\t                else {\n\t                    stack.push(el);\n\t                    el = { node: node, opening: opening, closing: null, children: [] };\n\t                }\n\t            }\n\t            if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) {\n\t                el.closing = element;\n\t                var open_1 = getQualifiedElementName(el.opening.name);\n\t                var close_1 = getQualifiedElementName(el.closing.name);\n\t                if (open_1 !== close_1) {\n\t                    this.tolerateError('Expected corresponding JSX closing tag for %0', open_1);\n\t                }\n\t                if (stack.length > 0) {\n\t                    var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing));\n\t                    el = stack[stack.length - 1];\n\t                    el.children.push(child);\n\t                    stack.pop();\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        return el;\n\t    };\n\t    JSXParser.prototype.parseJSXElement = function () {\n\t        var node = this.createJSXNode();\n\t        var opening = this.parseJSXOpeningElement();\n\t        var children = [];\n\t        var closing = null;\n\t        if (!opening.selfClosing) {\n\t            var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children });\n\t            children = el.children;\n\t            closing = el.closing;\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXElement(opening, children, closing));\n\t    };\n\t    JSXParser.prototype.parseJSXRoot = function () {\n\t        // Pop the opening '<' added from the lookahead.\n\t        if (this.config.tokens) {\n\t            this.tokens.pop();\n\t        }\n\t        this.startJSX();\n\t        var element = this.parseJSXElement();\n\t        this.finishJSX();\n\t        return element;\n\t    };\n\t    JSXParser.prototype.isStartOfExpression = function () {\n\t        return _super.prototype.isStartOfExpression.call(this) || this.match('<');\n\t    };\n\t    return JSXParser;\n\t}(parser_1.Parser));\n\texports.JSXParser = JSXParser;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// See also tools/generate-unicode-regex.js.\n\tvar Regex = {\n\t    // Unicode v8.0.0 NonAsciiIdentifierStart:\n\t    NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]/,\n\t    // Unicode v8.0.0 NonAsciiIdentifierPart:\n\t    NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B4\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n\t};\n\texports.Character = {\n\t    /* tslint:disable:no-bitwise */\n\t    fromCodePoint: function (cp) {\n\t        return (cp < 0x10000) ? String.fromCharCode(cp) :\n\t            String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +\n\t                String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-white-space\n\t    isWhiteSpace: function (cp) {\n\t        return (cp === 0x20) || (cp === 0x09) || (cp === 0x0B) || (cp === 0x0C) || (cp === 0xA0) ||\n\t            (cp >= 0x1680 && [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(cp) >= 0);\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-line-terminators\n\t    isLineTerminator: function (cp) {\n\t        return (cp === 0x0A) || (cp === 0x0D) || (cp === 0x2028) || (cp === 0x2029);\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-names-and-keywords\n\t    isIdentifierStart: function (cp) {\n\t        return (cp === 0x24) || (cp === 0x5F) ||\n\t            (cp >= 0x41 && cp <= 0x5A) ||\n\t            (cp >= 0x61 && cp <= 0x7A) ||\n\t            (cp === 0x5C) ||\n\t            ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp)));\n\t    },\n\t    isIdentifierPart: function (cp) {\n\t        return (cp === 0x24) || (cp === 0x5F) ||\n\t            (cp >= 0x41 && cp <= 0x5A) ||\n\t            (cp >= 0x61 && cp <= 0x7A) ||\n\t            (cp >= 0x30 && cp <= 0x39) ||\n\t            (cp === 0x5C) ||\n\t            ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp)));\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n\t    isDecimalDigit: function (cp) {\n\t        return (cp >= 0x30 && cp <= 0x39); // 0..9\n\t    },\n\t    isHexDigit: function (cp) {\n\t        return (cp >= 0x30 && cp <= 0x39) ||\n\t            (cp >= 0x41 && cp <= 0x46) ||\n\t            (cp >= 0x61 && cp <= 0x66); // a..f\n\t    },\n\t    isOctalDigit: function (cp) {\n\t        return (cp >= 0x30 && cp <= 0x37); // 0..7\n\t    }\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar jsx_syntax_1 = __webpack_require__(6);\n\t/* tslint:disable:max-classes-per-file */\n\tvar JSXClosingElement = (function () {\n\t    function JSXClosingElement(name) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement;\n\t        this.name = name;\n\t    }\n\t    return JSXClosingElement;\n\t}());\n\texports.JSXClosingElement = JSXClosingElement;\n\tvar JSXElement = (function () {\n\t    function JSXElement(openingElement, children, closingElement) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXElement;\n\t        this.openingElement = openingElement;\n\t        this.children = children;\n\t        this.closingElement = closingElement;\n\t    }\n\t    return JSXElement;\n\t}());\n\texports.JSXElement = JSXElement;\n\tvar JSXEmptyExpression = (function () {\n\t    function JSXEmptyExpression() {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression;\n\t    }\n\t    return JSXEmptyExpression;\n\t}());\n\texports.JSXEmptyExpression = JSXEmptyExpression;\n\tvar JSXExpressionContainer = (function () {\n\t    function JSXExpressionContainer(expression) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer;\n\t        this.expression = expression;\n\t    }\n\t    return JSXExpressionContainer;\n\t}());\n\texports.JSXExpressionContainer = JSXExpressionContainer;\n\tvar JSXIdentifier = (function () {\n\t    function JSXIdentifier(name) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier;\n\t        this.name = name;\n\t    }\n\t    return JSXIdentifier;\n\t}());\n\texports.JSXIdentifier = JSXIdentifier;\n\tvar JSXMemberExpression = (function () {\n\t    function JSXMemberExpression(object, property) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression;\n\t        this.object = object;\n\t        this.property = property;\n\t    }\n\t    return JSXMemberExpression;\n\t}());\n\texports.JSXMemberExpression = JSXMemberExpression;\n\tvar JSXAttribute = (function () {\n\t    function JSXAttribute(name, value) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXAttribute;\n\t        this.name = name;\n\t        this.value = value;\n\t    }\n\t    return JSXAttribute;\n\t}());\n\texports.JSXAttribute = JSXAttribute;\n\tvar JSXNamespacedName = (function () {\n\t    function JSXNamespacedName(namespace, name) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName;\n\t        this.namespace = namespace;\n\t        this.name = name;\n\t    }\n\t    return JSXNamespacedName;\n\t}());\n\texports.JSXNamespacedName = JSXNamespacedName;\n\tvar JSXOpeningElement = (function () {\n\t    function JSXOpeningElement(name, selfClosing, attributes) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement;\n\t        this.name = name;\n\t        this.selfClosing = selfClosing;\n\t        this.attributes = attributes;\n\t    }\n\t    return JSXOpeningElement;\n\t}());\n\texports.JSXOpeningElement = JSXOpeningElement;\n\tvar JSXSpreadAttribute = (function () {\n\t    function JSXSpreadAttribute(argument) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute;\n\t        this.argument = argument;\n\t    }\n\t    return JSXSpreadAttribute;\n\t}());\n\texports.JSXSpreadAttribute = JSXSpreadAttribute;\n\tvar JSXText = (function () {\n\t    function JSXText(value, raw) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXText;\n\t        this.value = value;\n\t        this.raw = raw;\n\t    }\n\t    return JSXText;\n\t}());\n\texports.JSXText = JSXText;\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.JSXSyntax = {\n\t    JSXAttribute: 'JSXAttribute',\n\t    JSXClosingElement: 'JSXClosingElement',\n\t    JSXElement: 'JSXElement',\n\t    JSXEmptyExpression: 'JSXEmptyExpression',\n\t    JSXExpressionContainer: 'JSXExpressionContainer',\n\t    JSXIdentifier: 'JSXIdentifier',\n\t    JSXMemberExpression: 'JSXMemberExpression',\n\t    JSXNamespacedName: 'JSXNamespacedName',\n\t    JSXOpeningElement: 'JSXOpeningElement',\n\t    JSXSpreadAttribute: 'JSXSpreadAttribute',\n\t    JSXText: 'JSXText'\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __webpack_require__(2);\n\t/* tslint:disable:max-classes-per-file */\n\tvar ArrayExpression = (function () {\n\t    function ArrayExpression(elements) {\n\t        this.type = syntax_1.Syntax.ArrayExpression;\n\t        this.elements = elements;\n\t    }\n\t    return ArrayExpression;\n\t}());\n\texports.ArrayExpression = ArrayExpression;\n\tvar ArrayPattern = (function () {\n\t    function ArrayPattern(elements) {\n\t        this.type = syntax_1.Syntax.ArrayPattern;\n\t        this.elements = elements;\n\t    }\n\t    return ArrayPattern;\n\t}());\n\texports.ArrayPattern = ArrayPattern;\n\tvar ArrowFunctionExpression = (function () {\n\t    function ArrowFunctionExpression(params, body, expression) {\n\t        this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t        this.id = null;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = expression;\n\t        this.async = false;\n\t    }\n\t    return ArrowFunctionExpression;\n\t}());\n\texports.ArrowFunctionExpression = ArrowFunctionExpression;\n\tvar AssignmentExpression = (function () {\n\t    function AssignmentExpression(operator, left, right) {\n\t        this.type = syntax_1.Syntax.AssignmentExpression;\n\t        this.operator = operator;\n\t        this.left = left;\n\t        this.right = right;\n\t    }\n\t    return AssignmentExpression;\n\t}());\n\texports.AssignmentExpression = AssignmentExpression;\n\tvar AssignmentPattern = (function () {\n\t    function AssignmentPattern(left, right) {\n\t        this.type = syntax_1.Syntax.AssignmentPattern;\n\t        this.left = left;\n\t        this.right = right;\n\t    }\n\t    return AssignmentPattern;\n\t}());\n\texports.AssignmentPattern = AssignmentPattern;\n\tvar AsyncArrowFunctionExpression = (function () {\n\t    function AsyncArrowFunctionExpression(params, body, expression) {\n\t        this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t        this.id = null;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = expression;\n\t        this.async = true;\n\t    }\n\t    return AsyncArrowFunctionExpression;\n\t}());\n\texports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression;\n\tvar AsyncFunctionDeclaration = (function () {\n\t    function AsyncFunctionDeclaration(id, params, body) {\n\t        this.type = syntax_1.Syntax.FunctionDeclaration;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = false;\n\t        this.async = true;\n\t    }\n\t    return AsyncFunctionDeclaration;\n\t}());\n\texports.AsyncFunctionDeclaration = AsyncFunctionDeclaration;\n\tvar AsyncFunctionExpression = (function () {\n\t    function AsyncFunctionExpression(id, params, body) {\n\t        this.type = syntax_1.Syntax.FunctionExpression;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = false;\n\t        this.async = true;\n\t    }\n\t    return AsyncFunctionExpression;\n\t}());\n\texports.AsyncFunctionExpression = AsyncFunctionExpression;\n\tvar AwaitExpression = (function () {\n\t    function AwaitExpression(argument) {\n\t        this.type = syntax_1.Syntax.AwaitExpression;\n\t        this.argument = argument;\n\t    }\n\t    return AwaitExpression;\n\t}());\n\texports.AwaitExpression = AwaitExpression;\n\tvar BinaryExpression = (function () {\n\t    function BinaryExpression(operator, left, right) {\n\t        var logical = (operator === '||' || operator === '&&');\n\t        this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression;\n\t        this.operator = operator;\n\t        this.left = left;\n\t        this.right = right;\n\t    }\n\t    return BinaryExpression;\n\t}());\n\texports.BinaryExpression = BinaryExpression;\n\tvar BlockStatement = (function () {\n\t    function BlockStatement(body) {\n\t        this.type = syntax_1.Syntax.BlockStatement;\n\t        this.body = body;\n\t    }\n\t    return BlockStatement;\n\t}());\n\texports.BlockStatement = BlockStatement;\n\tvar BreakStatement = (function () {\n\t    function BreakStatement(label) {\n\t        this.type = syntax_1.Syntax.BreakStatement;\n\t        this.label = label;\n\t    }\n\t    return BreakStatement;\n\t}());\n\texports.BreakStatement = BreakStatement;\n\tvar CallExpression = (function () {\n\t    function CallExpression(callee, args) {\n\t        this.type = syntax_1.Syntax.CallExpression;\n\t        this.callee = callee;\n\t        this.arguments = args;\n\t    }\n\t    return CallExpression;\n\t}());\n\texports.CallExpression = CallExpression;\n\tvar CatchClause = (function () {\n\t    function CatchClause(param, body) {\n\t        this.type = syntax_1.Syntax.CatchClause;\n\t        this.param = param;\n\t        this.body = body;\n\t    }\n\t    return CatchClause;\n\t}());\n\texports.CatchClause = CatchClause;\n\tvar ClassBody = (function () {\n\t    function ClassBody(body) {\n\t        this.type = syntax_1.Syntax.ClassBody;\n\t        this.body = body;\n\t    }\n\t    return ClassBody;\n\t}());\n\texports.ClassBody = ClassBody;\n\tvar ClassDeclaration = (function () {\n\t    function ClassDeclaration(id, superClass, body) {\n\t        this.type = syntax_1.Syntax.ClassDeclaration;\n\t        this.id = id;\n\t        this.superClass = superClass;\n\t        this.body = body;\n\t    }\n\t    return ClassDeclaration;\n\t}());\n\texports.ClassDeclaration = ClassDeclaration;\n\tvar ClassExpression = (function () {\n\t    function ClassExpression(id, superClass, body) {\n\t        this.type = syntax_1.Syntax.ClassExpression;\n\t        this.id = id;\n\t        this.superClass = superClass;\n\t        this.body = body;\n\t    }\n\t    return ClassExpression;\n\t}());\n\texports.ClassExpression = ClassExpression;\n\tvar ComputedMemberExpression = (function () {\n\t    function ComputedMemberExpression(object, property) {\n\t        this.type = syntax_1.Syntax.MemberExpression;\n\t        this.computed = true;\n\t        this.object = object;\n\t        this.property = property;\n\t    }\n\t    return ComputedMemberExpression;\n\t}());\n\texports.ComputedMemberExpression = ComputedMemberExpression;\n\tvar ConditionalExpression = (function () {\n\t    function ConditionalExpression(test, consequent, alternate) {\n\t        this.type = syntax_1.Syntax.ConditionalExpression;\n\t        this.test = test;\n\t        this.consequent = consequent;\n\t        this.alternate = alternate;\n\t    }\n\t    return ConditionalExpression;\n\t}());\n\texports.ConditionalExpression = ConditionalExpression;\n\tvar ContinueStatement = (function () {\n\t    function ContinueStatement(label) {\n\t        this.type = syntax_1.Syntax.ContinueStatement;\n\t        this.label = label;\n\t    }\n\t    return ContinueStatement;\n\t}());\n\texports.ContinueStatement = ContinueStatement;\n\tvar DebuggerStatement = (function () {\n\t    function DebuggerStatement() {\n\t        this.type = syntax_1.Syntax.DebuggerStatement;\n\t    }\n\t    return DebuggerStatement;\n\t}());\n\texports.DebuggerStatement = DebuggerStatement;\n\tvar Directive = (function () {\n\t    function Directive(expression, directive) {\n\t        this.type = syntax_1.Syntax.ExpressionStatement;\n\t        this.expression = expression;\n\t        this.directive = directive;\n\t    }\n\t    return Directive;\n\t}());\n\texports.Directive = Directive;\n\tvar DoWhileStatement = (function () {\n\t    function DoWhileStatement(body, test) {\n\t        this.type = syntax_1.Syntax.DoWhileStatement;\n\t        this.body = body;\n\t        this.test = test;\n\t    }\n\t    return DoWhileStatement;\n\t}());\n\texports.DoWhileStatement = DoWhileStatement;\n\tvar EmptyStatement = (function () {\n\t    function EmptyStatement() {\n\t        this.type = syntax_1.Syntax.EmptyStatement;\n\t    }\n\t    return EmptyStatement;\n\t}());\n\texports.EmptyStatement = EmptyStatement;\n\tvar ExportAllDeclaration = (function () {\n\t    function ExportAllDeclaration(source) {\n\t        this.type = syntax_1.Syntax.ExportAllDeclaration;\n\t        this.source = source;\n\t    }\n\t    return ExportAllDeclaration;\n\t}());\n\texports.ExportAllDeclaration = ExportAllDeclaration;\n\tvar ExportDefaultDeclaration = (function () {\n\t    function ExportDefaultDeclaration(declaration) {\n\t        this.type = syntax_1.Syntax.ExportDefaultDeclaration;\n\t        this.declaration = declaration;\n\t    }\n\t    return ExportDefaultDeclaration;\n\t}());\n\texports.ExportDefaultDeclaration = ExportDefaultDeclaration;\n\tvar ExportNamedDeclaration = (function () {\n\t    function ExportNamedDeclaration(declaration, specifiers, source) {\n\t        this.type = syntax_1.Syntax.ExportNamedDeclaration;\n\t        this.declaration = declaration;\n\t        this.specifiers = specifiers;\n\t        this.source = source;\n\t    }\n\t    return ExportNamedDeclaration;\n\t}());\n\texports.ExportNamedDeclaration = ExportNamedDeclaration;\n\tvar ExportSpecifier = (function () {\n\t    function ExportSpecifier(local, exported) {\n\t        this.type = syntax_1.Syntax.ExportSpecifier;\n\t        this.exported = exported;\n\t        this.local = local;\n\t    }\n\t    return ExportSpecifier;\n\t}());\n\texports.ExportSpecifier = ExportSpecifier;\n\tvar ExpressionStatement = (function () {\n\t    function ExpressionStatement(expression) {\n\t        this.type = syntax_1.Syntax.ExpressionStatement;\n\t        this.expression = expression;\n\t    }\n\t    return ExpressionStatement;\n\t}());\n\texports.ExpressionStatement = ExpressionStatement;\n\tvar ForInStatement = (function () {\n\t    function ForInStatement(left, right, body) {\n\t        this.type = syntax_1.Syntax.ForInStatement;\n\t        this.left = left;\n\t        this.right = right;\n\t        this.body = body;\n\t        this.each = false;\n\t    }\n\t    return ForInStatement;\n\t}());\n\texports.ForInStatement = ForInStatement;\n\tvar ForOfStatement = (function () {\n\t    function ForOfStatement(left, right, body) {\n\t        this.type = syntax_1.Syntax.ForOfStatement;\n\t        this.left = left;\n\t        this.right = right;\n\t        this.body = body;\n\t    }\n\t    return ForOfStatement;\n\t}());\n\texports.ForOfStatement = ForOfStatement;\n\tvar ForStatement = (function () {\n\t    function ForStatement(init, test, update, body) {\n\t        this.type = syntax_1.Syntax.ForStatement;\n\t        this.init = init;\n\t        this.test = test;\n\t        this.update = update;\n\t        this.body = body;\n\t    }\n\t    return ForStatement;\n\t}());\n\texports.ForStatement = ForStatement;\n\tvar FunctionDeclaration = (function () {\n\t    function FunctionDeclaration(id, params, body, generator) {\n\t        this.type = syntax_1.Syntax.FunctionDeclaration;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = generator;\n\t        this.expression = false;\n\t        this.async = false;\n\t    }\n\t    return FunctionDeclaration;\n\t}());\n\texports.FunctionDeclaration = FunctionDeclaration;\n\tvar FunctionExpression = (function () {\n\t    function FunctionExpression(id, params, body, generator) {\n\t        this.type = syntax_1.Syntax.FunctionExpression;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = generator;\n\t        this.expression = false;\n\t        this.async = false;\n\t    }\n\t    return FunctionExpression;\n\t}());\n\texports.FunctionExpression = FunctionExpression;\n\tvar Identifier = (function () {\n\t    function Identifier(name) {\n\t        this.type = syntax_1.Syntax.Identifier;\n\t        this.name = name;\n\t    }\n\t    return Identifier;\n\t}());\n\texports.Identifier = Identifier;\n\tvar IfStatement = (function () {\n\t    function IfStatement(test, consequent, alternate) {\n\t        this.type = syntax_1.Syntax.IfStatement;\n\t        this.test = test;\n\t        this.consequent = consequent;\n\t        this.alternate = alternate;\n\t    }\n\t    return IfStatement;\n\t}());\n\texports.IfStatement = IfStatement;\n\tvar ImportDeclaration = (function () {\n\t    function ImportDeclaration(specifiers, source) {\n\t        this.type = syntax_1.Syntax.ImportDeclaration;\n\t        this.specifiers = specifiers;\n\t        this.source = source;\n\t    }\n\t    return ImportDeclaration;\n\t}());\n\texports.ImportDeclaration = ImportDeclaration;\n\tvar ImportDefaultSpecifier = (function () {\n\t    function ImportDefaultSpecifier(local) {\n\t        this.type = syntax_1.Syntax.ImportDefaultSpecifier;\n\t        this.local = local;\n\t    }\n\t    return ImportDefaultSpecifier;\n\t}());\n\texports.ImportDefaultSpecifier = ImportDefaultSpecifier;\n\tvar ImportNamespaceSpecifier = (function () {\n\t    function ImportNamespaceSpecifier(local) {\n\t        this.type = syntax_1.Syntax.ImportNamespaceSpecifier;\n\t        this.local = local;\n\t    }\n\t    return ImportNamespaceSpecifier;\n\t}());\n\texports.ImportNamespaceSpecifier = ImportNamespaceSpecifier;\n\tvar ImportSpecifier = (function () {\n\t    function ImportSpecifier(local, imported) {\n\t        this.type = syntax_1.Syntax.ImportSpecifier;\n\t        this.local = local;\n\t        this.imported = imported;\n\t    }\n\t    return ImportSpecifier;\n\t}());\n\texports.ImportSpecifier = ImportSpecifier;\n\tvar LabeledStatement = (function () {\n\t    function LabeledStatement(label, body) {\n\t        this.type = syntax_1.Syntax.LabeledStatement;\n\t        this.label = label;\n\t        this.body = body;\n\t    }\n\t    return LabeledStatement;\n\t}());\n\texports.LabeledStatement = LabeledStatement;\n\tvar Literal = (function () {\n\t    function Literal(value, raw) {\n\t        this.type = syntax_1.Syntax.Literal;\n\t        this.value = value;\n\t        this.raw = raw;\n\t    }\n\t    return Literal;\n\t}());\n\texports.Literal = Literal;\n\tvar MetaProperty = (function () {\n\t    function MetaProperty(meta, property) {\n\t        this.type = syntax_1.Syntax.MetaProperty;\n\t        this.meta = meta;\n\t        this.property = property;\n\t    }\n\t    return MetaProperty;\n\t}());\n\texports.MetaProperty = MetaProperty;\n\tvar MethodDefinition = (function () {\n\t    function MethodDefinition(key, computed, value, kind, isStatic) {\n\t        this.type = syntax_1.Syntax.MethodDefinition;\n\t        this.key = key;\n\t        this.computed = computed;\n\t        this.value = value;\n\t        this.kind = kind;\n\t        this.static = isStatic;\n\t    }\n\t    return MethodDefinition;\n\t}());\n\texports.MethodDefinition = MethodDefinition;\n\tvar Module = (function () {\n\t    function Module(body) {\n\t        this.type = syntax_1.Syntax.Program;\n\t        this.body = body;\n\t        this.sourceType = 'module';\n\t    }\n\t    return Module;\n\t}());\n\texports.Module = Module;\n\tvar NewExpression = (function () {\n\t    function NewExpression(callee, args) {\n\t        this.type = syntax_1.Syntax.NewExpression;\n\t        this.callee = callee;\n\t        this.arguments = args;\n\t    }\n\t    return NewExpression;\n\t}());\n\texports.NewExpression = NewExpression;\n\tvar ObjectExpression = (function () {\n\t    function ObjectExpression(properties) {\n\t        this.type = syntax_1.Syntax.ObjectExpression;\n\t        this.properties = properties;\n\t    }\n\t    return ObjectExpression;\n\t}());\n\texports.ObjectExpression = ObjectExpression;\n\tvar ObjectPattern = (function () {\n\t    function ObjectPattern(properties) {\n\t        this.type = syntax_1.Syntax.ObjectPattern;\n\t        this.properties = properties;\n\t    }\n\t    return ObjectPattern;\n\t}());\n\texports.ObjectPattern = ObjectPattern;\n\tvar Property = (function () {\n\t    function Property(kind, key, computed, value, method, shorthand) {\n\t        this.type = syntax_1.Syntax.Property;\n\t        this.key = key;\n\t        this.computed = computed;\n\t        this.value = value;\n\t        this.kind = kind;\n\t        this.method = method;\n\t        this.shorthand = shorthand;\n\t    }\n\t    return Property;\n\t}());\n\texports.Property = Property;\n\tvar RegexLiteral = (function () {\n\t    function RegexLiteral(value, raw, pattern, flags) {\n\t        this.type = syntax_1.Syntax.Literal;\n\t        this.value = value;\n\t        this.raw = raw;\n\t        this.regex = { pattern: pattern, flags: flags };\n\t    }\n\t    return RegexLiteral;\n\t}());\n\texports.RegexLiteral = RegexLiteral;\n\tvar RestElement = (function () {\n\t    function RestElement(argument) {\n\t        this.type = syntax_1.Syntax.RestElement;\n\t        this.argument = argument;\n\t    }\n\t    return RestElement;\n\t}());\n\texports.RestElement = RestElement;\n\tvar ReturnStatement = (function () {\n\t    function ReturnStatement(argument) {\n\t        this.type = syntax_1.Syntax.ReturnStatement;\n\t        this.argument = argument;\n\t    }\n\t    return ReturnStatement;\n\t}());\n\texports.ReturnStatement = ReturnStatement;\n\tvar Script = (function () {\n\t    function Script(body) {\n\t        this.type = syntax_1.Syntax.Program;\n\t        this.body = body;\n\t        this.sourceType = 'script';\n\t    }\n\t    return Script;\n\t}());\n\texports.Script = Script;\n\tvar SequenceExpression = (function () {\n\t    function SequenceExpression(expressions) {\n\t        this.type = syntax_1.Syntax.SequenceExpression;\n\t        this.expressions = expressions;\n\t    }\n\t    return SequenceExpression;\n\t}());\n\texports.SequenceExpression = SequenceExpression;\n\tvar SpreadElement = (function () {\n\t    function SpreadElement(argument) {\n\t        this.type = syntax_1.Syntax.SpreadElement;\n\t        this.argument = argument;\n\t    }\n\t    return SpreadElement;\n\t}());\n\texports.SpreadElement = SpreadElement;\n\tvar StaticMemberExpression = (function () {\n\t    function StaticMemberExpression(object, property) {\n\t        this.type = syntax_1.Syntax.MemberExpression;\n\t        this.computed = false;\n\t        this.object = object;\n\t        this.property = property;\n\t    }\n\t    return StaticMemberExpression;\n\t}());\n\texports.StaticMemberExpression = StaticMemberExpression;\n\tvar Super = (function () {\n\t    function Super() {\n\t        this.type = syntax_1.Syntax.Super;\n\t    }\n\t    return Super;\n\t}());\n\texports.Super = Super;\n\tvar SwitchCase = (function () {\n\t    function SwitchCase(test, consequent) {\n\t        this.type = syntax_1.Syntax.SwitchCase;\n\t        this.test = test;\n\t        this.consequent = consequent;\n\t    }\n\t    return SwitchCase;\n\t}());\n\texports.SwitchCase = SwitchCase;\n\tvar SwitchStatement = (function () {\n\t    function SwitchStatement(discriminant, cases) {\n\t        this.type = syntax_1.Syntax.SwitchStatement;\n\t        this.discriminant = discriminant;\n\t        this.cases = cases;\n\t    }\n\t    return SwitchStatement;\n\t}());\n\texports.SwitchStatement = SwitchStatement;\n\tvar TaggedTemplateExpression = (function () {\n\t    function TaggedTemplateExpression(tag, quasi) {\n\t        this.type = syntax_1.Syntax.TaggedTemplateExpression;\n\t        this.tag = tag;\n\t        this.quasi = quasi;\n\t    }\n\t    return TaggedTemplateExpression;\n\t}());\n\texports.TaggedTemplateExpression = TaggedTemplateExpression;\n\tvar TemplateElement = (function () {\n\t    function TemplateElement(value, tail) {\n\t        this.type = syntax_1.Syntax.TemplateElement;\n\t        this.value = value;\n\t        this.tail = tail;\n\t    }\n\t    return TemplateElement;\n\t}());\n\texports.TemplateElement = TemplateElement;\n\tvar TemplateLiteral = (function () {\n\t    function TemplateLiteral(quasis, expressions) {\n\t        this.type = syntax_1.Syntax.TemplateLiteral;\n\t        this.quasis = quasis;\n\t        this.expressions = expressions;\n\t    }\n\t    return TemplateLiteral;\n\t}());\n\texports.TemplateLiteral = TemplateLiteral;\n\tvar ThisExpression = (function () {\n\t    function ThisExpression() {\n\t        this.type = syntax_1.Syntax.ThisExpression;\n\t    }\n\t    return ThisExpression;\n\t}());\n\texports.ThisExpression = ThisExpression;\n\tvar ThrowStatement = (function () {\n\t    function ThrowStatement(argument) {\n\t        this.type = syntax_1.Syntax.ThrowStatement;\n\t        this.argument = argument;\n\t    }\n\t    return ThrowStatement;\n\t}());\n\texports.ThrowStatement = ThrowStatement;\n\tvar TryStatement = (function () {\n\t    function TryStatement(block, handler, finalizer) {\n\t        this.type = syntax_1.Syntax.TryStatement;\n\t        this.block = block;\n\t        this.handler = handler;\n\t        this.finalizer = finalizer;\n\t    }\n\t    return TryStatement;\n\t}());\n\texports.TryStatement = TryStatement;\n\tvar UnaryExpression = (function () {\n\t    function UnaryExpression(operator, argument) {\n\t        this.type = syntax_1.Syntax.UnaryExpression;\n\t        this.operator = operator;\n\t        this.argument = argument;\n\t        this.prefix = true;\n\t    }\n\t    return UnaryExpression;\n\t}());\n\texports.UnaryExpression = UnaryExpression;\n\tvar UpdateExpression = (function () {\n\t    function UpdateExpression(operator, argument, prefix) {\n\t        this.type = syntax_1.Syntax.UpdateExpression;\n\t        this.operator = operator;\n\t        this.argument = argument;\n\t        this.prefix = prefix;\n\t    }\n\t    return UpdateExpression;\n\t}());\n\texports.UpdateExpression = UpdateExpression;\n\tvar VariableDeclaration = (function () {\n\t    function VariableDeclaration(declarations, kind) {\n\t        this.type = syntax_1.Syntax.VariableDeclaration;\n\t        this.declarations = declarations;\n\t        this.kind = kind;\n\t    }\n\t    return VariableDeclaration;\n\t}());\n\texports.VariableDeclaration = VariableDeclaration;\n\tvar VariableDeclarator = (function () {\n\t    function VariableDeclarator(id, init) {\n\t        this.type = syntax_1.Syntax.VariableDeclarator;\n\t        this.id = id;\n\t        this.init = init;\n\t    }\n\t    return VariableDeclarator;\n\t}());\n\texports.VariableDeclarator = VariableDeclarator;\n\tvar WhileStatement = (function () {\n\t    function WhileStatement(test, body) {\n\t        this.type = syntax_1.Syntax.WhileStatement;\n\t        this.test = test;\n\t        this.body = body;\n\t    }\n\t    return WhileStatement;\n\t}());\n\texports.WhileStatement = WhileStatement;\n\tvar WithStatement = (function () {\n\t    function WithStatement(object, body) {\n\t        this.type = syntax_1.Syntax.WithStatement;\n\t        this.object = object;\n\t        this.body = body;\n\t    }\n\t    return WithStatement;\n\t}());\n\texports.WithStatement = WithStatement;\n\tvar YieldExpression = (function () {\n\t    function YieldExpression(argument, delegate) {\n\t        this.type = syntax_1.Syntax.YieldExpression;\n\t        this.argument = argument;\n\t        this.delegate = delegate;\n\t    }\n\t    return YieldExpression;\n\t}());\n\texports.YieldExpression = YieldExpression;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __webpack_require__(9);\n\tvar error_handler_1 = __webpack_require__(10);\n\tvar messages_1 = __webpack_require__(11);\n\tvar Node = __webpack_require__(7);\n\tvar scanner_1 = __webpack_require__(12);\n\tvar syntax_1 = __webpack_require__(2);\n\tvar token_1 = __webpack_require__(13);\n\tvar ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder';\n\tvar Parser = (function () {\n\t    function Parser(code, options, delegate) {\n\t        if (options === void 0) { options = {}; }\n\t        this.config = {\n\t            range: (typeof options.range === 'boolean') && options.range,\n\t            loc: (typeof options.loc === 'boolean') && options.loc,\n\t            source: null,\n\t            tokens: (typeof options.tokens === 'boolean') && options.tokens,\n\t            comment: (typeof options.comment === 'boolean') && options.comment,\n\t            tolerant: (typeof options.tolerant === 'boolean') && options.tolerant\n\t        };\n\t        if (this.config.loc && options.source && options.source !== null) {\n\t            this.config.source = String(options.source);\n\t        }\n\t        this.delegate = delegate;\n\t        this.errorHandler = new error_handler_1.ErrorHandler();\n\t        this.errorHandler.tolerant = this.config.tolerant;\n\t        this.scanner = new scanner_1.Scanner(code, this.errorHandler);\n\t        this.scanner.trackComment = this.config.comment;\n\t        this.operatorPrecedence = {\n\t            ')': 0,\n\t            ';': 0,\n\t            ',': 0,\n\t            '=': 0,\n\t            ']': 0,\n\t            '||': 1,\n\t            '&&': 2,\n\t            '|': 3,\n\t            '^': 4,\n\t            '&': 5,\n\t            '==': 6,\n\t            '!=': 6,\n\t            '===': 6,\n\t            '!==': 6,\n\t            '<': 7,\n\t            '>': 7,\n\t            '<=': 7,\n\t            '>=': 7,\n\t            '<<': 8,\n\t            '>>': 8,\n\t            '>>>': 8,\n\t            '+': 9,\n\t            '-': 9,\n\t            '*': 11,\n\t            '/': 11,\n\t            '%': 11\n\t        };\n\t        this.lookahead = {\n\t            type: 2 /* EOF */,\n\t            value: '',\n\t            lineNumber: this.scanner.lineNumber,\n\t            lineStart: 0,\n\t            start: 0,\n\t            end: 0\n\t        };\n\t        this.hasLineTerminator = false;\n\t        this.context = {\n\t            isModule: false,\n\t            await: false,\n\t            allowIn: true,\n\t            allowStrictDirective: true,\n\t            allowYield: true,\n\t            firstCoverInitializedNameError: null,\n\t            isAssignmentTarget: false,\n\t            isBindingElement: false,\n\t            inFunctionBody: false,\n\t            inIteration: false,\n\t            inSwitch: false,\n\t            labelSet: {},\n\t            strict: false\n\t        };\n\t        this.tokens = [];\n\t        this.startMarker = {\n\t            index: 0,\n\t            line: this.scanner.lineNumber,\n\t            column: 0\n\t        };\n\t        this.lastMarker = {\n\t            index: 0,\n\t            line: this.scanner.lineNumber,\n\t            column: 0\n\t        };\n\t        this.nextToken();\n\t        this.lastMarker = {\n\t            index: this.scanner.index,\n\t            line: this.scanner.lineNumber,\n\t            column: this.scanner.index - this.scanner.lineStart\n\t        };\n\t    }\n\t    Parser.prototype.throwError = function (messageFormat) {\n\t        var values = [];\n\t        for (var _i = 1; _i < arguments.length; _i++) {\n\t            values[_i - 1] = arguments[_i];\n\t        }\n\t        var args = Array.prototype.slice.call(arguments, 1);\n\t        var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t            assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t            return args[idx];\n\t        });\n\t        var index = this.lastMarker.index;\n\t        var line = this.lastMarker.line;\n\t        var column = this.lastMarker.column + 1;\n\t        throw this.errorHandler.createError(index, line, column, msg);\n\t    };\n\t    Parser.prototype.tolerateError = function (messageFormat) {\n\t        var values = [];\n\t        for (var _i = 1; _i < arguments.length; _i++) {\n\t            values[_i - 1] = arguments[_i];\n\t        }\n\t        var args = Array.prototype.slice.call(arguments, 1);\n\t        var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t            assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t            return args[idx];\n\t        });\n\t        var index = this.lastMarker.index;\n\t        var line = this.scanner.lineNumber;\n\t        var column = this.lastMarker.column + 1;\n\t        this.errorHandler.tolerateError(index, line, column, msg);\n\t    };\n\t    // Throw an exception because of the token.\n\t    Parser.prototype.unexpectedTokenError = function (token, message) {\n\t        var msg = message || messages_1.Messages.UnexpectedToken;\n\t        var value;\n\t        if (token) {\n\t            if (!message) {\n\t                msg = (token.type === 2 /* EOF */) ? messages_1.Messages.UnexpectedEOS :\n\t                    (token.type === 3 /* Identifier */) ? messages_1.Messages.UnexpectedIdentifier :\n\t                        (token.type === 6 /* NumericLiteral */) ? messages_1.Messages.UnexpectedNumber :\n\t                            (token.type === 8 /* StringLiteral */) ? messages_1.Messages.UnexpectedString :\n\t                                (token.type === 10 /* Template */) ? messages_1.Messages.UnexpectedTemplate :\n\t                                    messages_1.Messages.UnexpectedToken;\n\t                if (token.type === 4 /* Keyword */) {\n\t                    if (this.scanner.isFutureReservedWord(token.value)) {\n\t                        msg = messages_1.Messages.UnexpectedReserved;\n\t                    }\n\t                    else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) {\n\t                        msg = messages_1.Messages.StrictReservedWord;\n\t                    }\n\t                }\n\t            }\n\t            value = token.value;\n\t        }\n\t        else {\n\t            value = 'ILLEGAL';\n\t        }\n\t        msg = msg.replace('%0', value);\n\t        if (token && typeof token.lineNumber === 'number') {\n\t            var index = token.start;\n\t            var line = token.lineNumber;\n\t            var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column;\n\t            var column = token.start - lastMarkerLineStart + 1;\n\t            return this.errorHandler.createError(index, line, column, msg);\n\t        }\n\t        else {\n\t            var index = this.lastMarker.index;\n\t            var line = this.lastMarker.line;\n\t            var column = this.lastMarker.column + 1;\n\t            return this.errorHandler.createError(index, line, column, msg);\n\t        }\n\t    };\n\t    Parser.prototype.throwUnexpectedToken = function (token, message) {\n\t        throw this.unexpectedTokenError(token, message);\n\t    };\n\t    Parser.prototype.tolerateUnexpectedToken = function (token, message) {\n\t        this.errorHandler.tolerate(this.unexpectedTokenError(token, message));\n\t    };\n\t    Parser.prototype.collectComments = function () {\n\t        if (!this.config.comment) {\n\t            this.scanner.scanComments();\n\t        }\n\t        else {\n\t            var comments = this.scanner.scanComments();\n\t            if (comments.length > 0 && this.delegate) {\n\t                for (var i = 0; i < comments.length; ++i) {\n\t                    var e = comments[i];\n\t                    var node = void 0;\n\t                    node = {\n\t                        type: e.multiLine ? 'BlockComment' : 'LineComment',\n\t                        value: this.scanner.source.slice(e.slice[0], e.slice[1])\n\t                    };\n\t                    if (this.config.range) {\n\t                        node.range = e.range;\n\t                    }\n\t                    if (this.config.loc) {\n\t                        node.loc = e.loc;\n\t                    }\n\t                    var metadata = {\n\t                        start: {\n\t                            line: e.loc.start.line,\n\t                            column: e.loc.start.column,\n\t                            offset: e.range[0]\n\t                        },\n\t                        end: {\n\t                            line: e.loc.end.line,\n\t                            column: e.loc.end.column,\n\t                            offset: e.range[1]\n\t                        }\n\t                    };\n\t                    this.delegate(node, metadata);\n\t                }\n\t            }\n\t        }\n\t    };\n\t    // From internal representation to an external structure\n\t    Parser.prototype.getTokenRaw = function (token) {\n\t        return this.scanner.source.slice(token.start, token.end);\n\t    };\n\t    Parser.prototype.convertToken = function (token) {\n\t        var t = {\n\t            type: token_1.TokenName[token.type],\n\t            value: this.getTokenRaw(token)\n\t        };\n\t        if (this.config.range) {\n\t            t.range = [token.start, token.end];\n\t        }\n\t        if (this.config.loc) {\n\t            t.loc = {\n\t                start: {\n\t                    line: this.startMarker.line,\n\t                    column: this.startMarker.column\n\t                },\n\t                end: {\n\t                    line: this.scanner.lineNumber,\n\t                    column: this.scanner.index - this.scanner.lineStart\n\t                }\n\t            };\n\t        }\n\t        if (token.type === 9 /* RegularExpression */) {\n\t            var pattern = token.pattern;\n\t            var flags = token.flags;\n\t            t.regex = { pattern: pattern, flags: flags };\n\t        }\n\t        return t;\n\t    };\n\t    Parser.prototype.nextToken = function () {\n\t        var token = this.lookahead;\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        this.collectComments();\n\t        if (this.scanner.index !== this.startMarker.index) {\n\t            this.startMarker.index = this.scanner.index;\n\t            this.startMarker.line = this.scanner.lineNumber;\n\t            this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        }\n\t        var next = this.scanner.lex();\n\t        this.hasLineTerminator = (token.lineNumber !== next.lineNumber);\n\t        if (next && this.context.strict && next.type === 3 /* Identifier */) {\n\t            if (this.scanner.isStrictModeReservedWord(next.value)) {\n\t                next.type = 4 /* Keyword */;\n\t            }\n\t        }\n\t        this.lookahead = next;\n\t        if (this.config.tokens && next.type !== 2 /* EOF */) {\n\t            this.tokens.push(this.convertToken(next));\n\t        }\n\t        return token;\n\t    };\n\t    Parser.prototype.nextRegexToken = function () {\n\t        this.collectComments();\n\t        var token = this.scanner.scanRegExp();\n\t        if (this.config.tokens) {\n\t            // Pop the previous token, '/' or '/='\n\t            // This is added from the lookahead token.\n\t            this.tokens.pop();\n\t            this.tokens.push(this.convertToken(token));\n\t        }\n\t        // Prime the next lookahead.\n\t        this.lookahead = token;\n\t        this.nextToken();\n\t        return token;\n\t    };\n\t    Parser.prototype.createNode = function () {\n\t        return {\n\t            index: this.startMarker.index,\n\t            line: this.startMarker.line,\n\t            column: this.startMarker.column\n\t        };\n\t    };\n\t    Parser.prototype.startNode = function (token, lastLineStart) {\n\t        if (lastLineStart === void 0) { lastLineStart = 0; }\n\t        var column = token.start - token.lineStart;\n\t        var line = token.lineNumber;\n\t        if (column < 0) {\n\t            column += lastLineStart;\n\t            line--;\n\t        }\n\t        return {\n\t            index: token.start,\n\t            line: line,\n\t            column: column\n\t        };\n\t    };\n\t    Parser.prototype.finalize = function (marker, node) {\n\t        if (this.config.range) {\n\t            node.range = [marker.index, this.lastMarker.index];\n\t        }\n\t        if (this.config.loc) {\n\t            node.loc = {\n\t                start: {\n\t                    line: marker.line,\n\t                    column: marker.column,\n\t                },\n\t                end: {\n\t                    line: this.lastMarker.line,\n\t                    column: this.lastMarker.column\n\t                }\n\t            };\n\t            if (this.config.source) {\n\t                node.loc.source = this.config.source;\n\t            }\n\t        }\n\t        if (this.delegate) {\n\t            var metadata = {\n\t                start: {\n\t                    line: marker.line,\n\t                    column: marker.column,\n\t                    offset: marker.index\n\t                },\n\t                end: {\n\t                    line: this.lastMarker.line,\n\t                    column: this.lastMarker.column,\n\t                    offset: this.lastMarker.index\n\t                }\n\t            };\n\t            this.delegate(node, metadata);\n\t        }\n\t        return node;\n\t    };\n\t    // Expect the next token to match the specified punctuator.\n\t    // If not, an exception will be thrown.\n\t    Parser.prototype.expect = function (value) {\n\t        var token = this.nextToken();\n\t        if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t    };\n\t    // Quietly expect a comma when in tolerant mode, otherwise delegates to expect().\n\t    Parser.prototype.expectCommaSeparator = function () {\n\t        if (this.config.tolerant) {\n\t            var token = this.lookahead;\n\t            if (token.type === 7 /* Punctuator */ && token.value === ',') {\n\t                this.nextToken();\n\t            }\n\t            else if (token.type === 7 /* Punctuator */ && token.value === ';') {\n\t                this.nextToken();\n\t                this.tolerateUnexpectedToken(token);\n\t            }\n\t            else {\n\t                this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken);\n\t            }\n\t        }\n\t        else {\n\t            this.expect(',');\n\t        }\n\t    };\n\t    // Expect the next token to match the specified keyword.\n\t    // If not, an exception will be thrown.\n\t    Parser.prototype.expectKeyword = function (keyword) {\n\t        var token = this.nextToken();\n\t        if (token.type !== 4 /* Keyword */ || token.value !== keyword) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t    };\n\t    // Return true if the next token matches the specified punctuator.\n\t    Parser.prototype.match = function (value) {\n\t        return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value;\n\t    };\n\t    // Return true if the next token matches the specified keyword\n\t    Parser.prototype.matchKeyword = function (keyword) {\n\t        return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword;\n\t    };\n\t    // Return true if the next token matches the specified contextual keyword\n\t    // (where an identifier is sometimes a keyword depending on the context)\n\t    Parser.prototype.matchContextualKeyword = function (keyword) {\n\t        return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword;\n\t    };\n\t    // Return true if the next token is an assignment operator\n\t    Parser.prototype.matchAssign = function () {\n\t        if (this.lookahead.type !== 7 /* Punctuator */) {\n\t            return false;\n\t        }\n\t        var op = this.lookahead.value;\n\t        return op === '=' ||\n\t            op === '*=' ||\n\t            op === '**=' ||\n\t            op === '/=' ||\n\t            op === '%=' ||\n\t            op === '+=' ||\n\t            op === '-=' ||\n\t            op === '<<=' ||\n\t            op === '>>=' ||\n\t            op === '>>>=' ||\n\t            op === '&=' ||\n\t            op === '^=' ||\n\t            op === '|=';\n\t    };\n\t    // Cover grammar support.\n\t    //\n\t    // When an assignment expression position starts with an left parenthesis, the determination of the type\n\t    // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n\t    // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n\t    //\n\t    // There are three productions that can be parsed in a parentheses pair that needs to be determined\n\t    // after the outermost pair is closed. They are:\n\t    //\n\t    //   1. AssignmentExpression\n\t    //   2. BindingElements\n\t    //   3. AssignmentTargets\n\t    //\n\t    // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n\t    // binding element or assignment target.\n\t    //\n\t    // The three productions have the relationship:\n\t    //\n\t    //   BindingElements \u2286 AssignmentTargets \u2286 AssignmentExpression\n\t    //\n\t    // with a single exception that CoverInitializedName when used directly in an Expression, generates\n\t    // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n\t    // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n\t    //\n\t    // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n\t    // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n\t    // the CoverInitializedName check is conducted.\n\t    //\n\t    // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n\t    // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n\t    // pattern. The CoverInitializedName check is deferred.\n\t    Parser.prototype.isolateCoverGrammar = function (parseFunction) {\n\t        var previousIsBindingElement = this.context.isBindingElement;\n\t        var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t        var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t        this.context.isBindingElement = true;\n\t        this.context.isAssignmentTarget = true;\n\t        this.context.firstCoverInitializedNameError = null;\n\t        var result = parseFunction.call(this);\n\t        if (this.context.firstCoverInitializedNameError !== null) {\n\t            this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);\n\t        }\n\t        this.context.isBindingElement = previousIsBindingElement;\n\t        this.context.isAssignmentTarget = previousIsAssignmentTarget;\n\t        this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;\n\t        return result;\n\t    };\n\t    Parser.prototype.inheritCoverGrammar = function (parseFunction) {\n\t        var previousIsBindingElement = this.context.isBindingElement;\n\t        var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t        var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t        this.context.isBindingElement = true;\n\t        this.context.isAssignmentTarget = true;\n\t        this.context.firstCoverInitializedNameError = null;\n\t        var result = parseFunction.call(this);\n\t        this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement;\n\t        this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget;\n\t        this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError;\n\t        return result;\n\t    };\n\t    Parser.prototype.consumeSemicolon = function () {\n\t        if (this.match(';')) {\n\t            this.nextToken();\n\t        }\n\t        else if (!this.hasLineTerminator) {\n\t            if (this.lookahead.type !== 2 /* EOF */ && !this.match('}')) {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            this.lastMarker.index = this.startMarker.index;\n\t            this.lastMarker.line = this.startMarker.line;\n\t            this.lastMarker.column = this.startMarker.column;\n\t        }\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-primary-expression\n\t    Parser.prototype.parsePrimaryExpression = function () {\n\t        var node = this.createNode();\n\t        var expr;\n\t        var token, raw;\n\t        switch (this.lookahead.type) {\n\t            case 3 /* Identifier */:\n\t                if ((this.context.isModule || this.context.await) && this.lookahead.value === 'await') {\n\t                    this.tolerateUnexpectedToken(this.lookahead);\n\t                }\n\t                expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t                break;\n\t            case 6 /* NumericLiteral */:\n\t            case 8 /* StringLiteral */:\n\t                if (this.context.strict && this.lookahead.octal) {\n\t                    this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral);\n\t                }\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                token = this.nextToken();\n\t                raw = this.getTokenRaw(token);\n\t                expr = this.finalize(node, new Node.Literal(token.value, raw));\n\t                break;\n\t            case 1 /* BooleanLiteral */:\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                token = this.nextToken();\n\t                raw = this.getTokenRaw(token);\n\t                expr = this.finalize(node, new Node.Literal(token.value === 'true', raw));\n\t                break;\n\t            case 5 /* NullLiteral */:\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                token = this.nextToken();\n\t                raw = this.getTokenRaw(token);\n\t                expr = this.finalize(node, new Node.Literal(null, raw));\n\t                break;\n\t            case 10 /* Template */:\n\t                expr = this.parseTemplateLiteral();\n\t                break;\n\t            case 7 /* Punctuator */:\n\t                switch (this.lookahead.value) {\n\t                    case '(':\n\t                        this.context.isBindingElement = false;\n\t                        expr = this.inheritCoverGrammar(this.parseGroupExpression);\n\t                        break;\n\t                    case '[':\n\t                        expr = this.inheritCoverGrammar(this.parseArrayInitializer);\n\t                        break;\n\t                    case '{':\n\t                        expr = this.inheritCoverGrammar(this.parseObjectInitializer);\n\t                        break;\n\t                    case '/':\n\t                    case '/=':\n\t                        this.context.isAssignmentTarget = false;\n\t                        this.context.isBindingElement = false;\n\t                        this.scanner.index = this.startMarker.index;\n\t                        token = this.nextRegexToken();\n\t                        raw = this.getTokenRaw(token);\n\t                        expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags));\n\t                        break;\n\t                    default:\n\t                        expr = this.throwUnexpectedToken(this.nextToken());\n\t                }\n\t                break;\n\t            case 4 /* Keyword */:\n\t                if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) {\n\t                    expr = this.parseIdentifierName();\n\t                }\n\t                else if (!this.context.strict && this.matchKeyword('let')) {\n\t                    expr = this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t                }\n\t                else {\n\t                    this.context.isAssignmentTarget = false;\n\t                    this.context.isBindingElement = false;\n\t                    if (this.matchKeyword('function')) {\n\t                        expr = this.parseFunctionExpression();\n\t                    }\n\t                    else if (this.matchKeyword('this')) {\n\t                        this.nextToken();\n\t                        expr = this.finalize(node, new Node.ThisExpression());\n\t                    }\n\t                    else if (this.matchKeyword('class')) {\n\t                        expr = this.parseClassExpression();\n\t                    }\n\t                    else {\n\t                        expr = this.throwUnexpectedToken(this.nextToken());\n\t                    }\n\t                }\n\t                break;\n\t            default:\n\t                expr = this.throwUnexpectedToken(this.nextToken());\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-array-initializer\n\t    Parser.prototype.parseSpreadElement = function () {\n\t        var node = this.createNode();\n\t        this.expect('...');\n\t        var arg = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t        return this.finalize(node, new Node.SpreadElement(arg));\n\t    };\n\t    Parser.prototype.parseArrayInitializer = function () {\n\t        var node = this.createNode();\n\t        var elements = [];\n\t        this.expect('[');\n\t        while (!this.match(']')) {\n\t            if (this.match(',')) {\n\t                this.nextToken();\n\t                elements.push(null);\n\t            }\n\t            else if (this.match('...')) {\n\t                var element = this.parseSpreadElement();\n\t                if (!this.match(']')) {\n\t                    this.context.isAssignmentTarget = false;\n\t                    this.context.isBindingElement = false;\n\t                    this.expect(',');\n\t                }\n\t                elements.push(element);\n\t            }\n\t            else {\n\t                elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t                if (!this.match(']')) {\n\t                    this.expect(',');\n\t                }\n\t            }\n\t        }\n\t        this.expect(']');\n\t        return this.finalize(node, new Node.ArrayExpression(elements));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-object-initializer\n\t    Parser.prototype.parsePropertyMethod = function (params) {\n\t        this.context.isAssignmentTarget = false;\n\t        this.context.isBindingElement = false;\n\t        var previousStrict = this.context.strict;\n\t        var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t        this.context.allowStrictDirective = params.simple;\n\t        var body = this.isolateCoverGrammar(this.parseFunctionSourceElements);\n\t        if (this.context.strict && params.firstRestricted) {\n\t            this.tolerateUnexpectedToken(params.firstRestricted, params.message);\n\t        }\n\t        if (this.context.strict && params.stricted) {\n\t            this.tolerateUnexpectedToken(params.stricted, params.message);\n\t        }\n\t        this.context.strict = previousStrict;\n\t        this.context.allowStrictDirective = previousAllowStrictDirective;\n\t        return body;\n\t    };\n\t    Parser.prototype.parsePropertyMethodFunction = function () {\n\t        var isGenerator = false;\n\t        var node = this.createNode();\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = true;\n\t        var params = this.parseFormalParameters();\n\t        var method = this.parsePropertyMethod(params);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t    };\n\t    Parser.prototype.parsePropertyMethodAsyncFunction = function () {\n\t        var node = this.createNode();\n\t        var previousAllowYield = this.context.allowYield;\n\t        var previousAwait = this.context.await;\n\t        this.context.allowYield = false;\n\t        this.context.await = true;\n\t        var params = this.parseFormalParameters();\n\t        var method = this.parsePropertyMethod(params);\n\t        this.context.allowYield = previousAllowYield;\n\t        this.context.await = previousAwait;\n\t        return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method));\n\t    };\n\t    Parser.prototype.parseObjectPropertyKey = function () {\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        var key;\n\t        switch (token.type) {\n\t            case 8 /* StringLiteral */:\n\t            case 6 /* NumericLiteral */:\n\t                if (this.context.strict && token.octal) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral);\n\t                }\n\t                var raw = this.getTokenRaw(token);\n\t                key = this.finalize(node, new Node.Literal(token.value, raw));\n\t                break;\n\t            case 3 /* Identifier */:\n\t            case 1 /* BooleanLiteral */:\n\t            case 5 /* NullLiteral */:\n\t            case 4 /* Keyword */:\n\t                key = this.finalize(node, new Node.Identifier(token.value));\n\t                break;\n\t            case 7 /* Punctuator */:\n\t                if (token.value === '[') {\n\t                    key = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    this.expect(']');\n\t                }\n\t                else {\n\t                    key = this.throwUnexpectedToken(token);\n\t                }\n\t                break;\n\t            default:\n\t                key = this.throwUnexpectedToken(token);\n\t        }\n\t        return key;\n\t    };\n\t    Parser.prototype.isPropertyKey = function (key, value) {\n\t        return (key.type === syntax_1.Syntax.Identifier && key.name === value) ||\n\t            (key.type === syntax_1.Syntax.Literal && key.value === value);\n\t    };\n\t    Parser.prototype.parseObjectProperty = function (hasProto) {\n\t        var node = this.createNode();\n\t        var token = this.lookahead;\n\t        var kind;\n\t        var key = null;\n\t        var value = null;\n\t        var computed = false;\n\t        var method = false;\n\t        var shorthand = false;\n\t        var isAsync = false;\n\t        if (token.type === 3 /* Identifier */) {\n\t            var id = token.value;\n\t            this.nextToken();\n\t            computed = this.match('[');\n\t            isAsync = !this.hasLineTerminator && (id === 'async') &&\n\t                !this.match(':') && !this.match('(') && !this.match('*') && !this.match(',');\n\t            key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id));\n\t        }\n\t        else if (this.match('*')) {\n\t            this.nextToken();\n\t        }\n\t        else {\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t        }\n\t        var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t        if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'get' && lookaheadPropertyKey) {\n\t            kind = 'get';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            this.context.allowYield = false;\n\t            value = this.parseGetterMethod();\n\t        }\n\t        else if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'set' && lookaheadPropertyKey) {\n\t            kind = 'set';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            value = this.parseSetterMethod();\n\t        }\n\t        else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t            kind = 'init';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            value = this.parseGeneratorMethod();\n\t            method = true;\n\t        }\n\t        else {\n\t            if (!key) {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            kind = 'init';\n\t            if (this.match(':') && !isAsync) {\n\t                if (!computed && this.isPropertyKey(key, '__proto__')) {\n\t                    if (hasProto.value) {\n\t                        this.tolerateError(messages_1.Messages.DuplicateProtoProperty);\n\t                    }\n\t                    hasProto.value = true;\n\t                }\n\t                this.nextToken();\n\t                value = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t            }\n\t            else if (this.match('(')) {\n\t                value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t                method = true;\n\t            }\n\t            else if (token.type === 3 /* Identifier */) {\n\t                var id = this.finalize(node, new Node.Identifier(token.value));\n\t                if (this.match('=')) {\n\t                    this.context.firstCoverInitializedNameError = this.lookahead;\n\t                    this.nextToken();\n\t                    shorthand = true;\n\t                    var init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    value = this.finalize(node, new Node.AssignmentPattern(id, init));\n\t                }\n\t                else {\n\t                    shorthand = true;\n\t                    value = id;\n\t                }\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.nextToken());\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand));\n\t    };\n\t    Parser.prototype.parseObjectInitializer = function () {\n\t        var node = this.createNode();\n\t        this.expect('{');\n\t        var properties = [];\n\t        var hasProto = { value: false };\n\t        while (!this.match('}')) {\n\t            properties.push(this.parseObjectProperty(hasProto));\n\t            if (!this.match('}')) {\n\t                this.expectCommaSeparator();\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return this.finalize(node, new Node.ObjectExpression(properties));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-template-literals\n\t    Parser.prototype.parseTemplateHead = function () {\n\t        assert_1.assert(this.lookahead.head, 'Template literal must start with a template head');\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        var raw = token.value;\n\t        var cooked = token.cooked;\n\t        return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t    };\n\t    Parser.prototype.parseTemplateElement = function () {\n\t        if (this.lookahead.type !== 10 /* Template */) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        var raw = token.value;\n\t        var cooked = token.cooked;\n\t        return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t    };\n\t    Parser.prototype.parseTemplateLiteral = function () {\n\t        var node = this.createNode();\n\t        var expressions = [];\n\t        var quasis = [];\n\t        var quasi = this.parseTemplateHead();\n\t        quasis.push(quasi);\n\t        while (!quasi.tail) {\n\t            expressions.push(this.parseExpression());\n\t            quasi = this.parseTemplateElement();\n\t            quasis.push(quasi);\n\t        }\n\t        return this.finalize(node, new Node.TemplateLiteral(quasis, expressions));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-grouping-operator\n\t    Parser.prototype.reinterpretExpressionAsPattern = function (expr) {\n\t        switch (expr.type) {\n\t            case syntax_1.Syntax.Identifier:\n\t            case syntax_1.Syntax.MemberExpression:\n\t            case syntax_1.Syntax.RestElement:\n\t            case syntax_1.Syntax.AssignmentPattern:\n\t                break;\n\t            case syntax_1.Syntax.SpreadElement:\n\t                expr.type = syntax_1.Syntax.RestElement;\n\t                this.reinterpretExpressionAsPattern(expr.argument);\n\t                break;\n\t            case syntax_1.Syntax.ArrayExpression:\n\t                expr.type = syntax_1.Syntax.ArrayPattern;\n\t                for (var i = 0; i < expr.elements.length; i++) {\n\t                    if (expr.elements[i] !== null) {\n\t                        this.reinterpretExpressionAsPattern(expr.elements[i]);\n\t                    }\n\t                }\n\t                break;\n\t            case syntax_1.Syntax.ObjectExpression:\n\t                expr.type = syntax_1.Syntax.ObjectPattern;\n\t                for (var i = 0; i < expr.properties.length; i++) {\n\t                    this.reinterpretExpressionAsPattern(expr.properties[i].value);\n\t                }\n\t                break;\n\t            case syntax_1.Syntax.AssignmentExpression:\n\t                expr.type = syntax_1.Syntax.AssignmentPattern;\n\t                delete expr.operator;\n\t                this.reinterpretExpressionAsPattern(expr.left);\n\t                break;\n\t            default:\n\t                // Allow other node type for tolerant parsing.\n\t                break;\n\t        }\n\t    };\n\t    Parser.prototype.parseGroupExpression = function () {\n\t        var expr;\n\t        this.expect('(');\n\t        if (this.match(')')) {\n\t            this.nextToken();\n\t            if (!this.match('=>')) {\n\t                this.expect('=>');\n\t            }\n\t            expr = {\n\t                type: ArrowParameterPlaceHolder,\n\t                params: [],\n\t                async: false\n\t            };\n\t        }\n\t        else {\n\t            var startToken = this.lookahead;\n\t            var params = [];\n\t            if (this.match('...')) {\n\t                expr = this.parseRestElement(params);\n\t                this.expect(')');\n\t                if (!this.match('=>')) {\n\t                    this.expect('=>');\n\t                }\n\t                expr = {\n\t                    type: ArrowParameterPlaceHolder,\n\t                    params: [expr],\n\t                    async: false\n\t                };\n\t            }\n\t            else {\n\t                var arrow = false;\n\t                this.context.isBindingElement = true;\n\t                expr = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t                if (this.match(',')) {\n\t                    var expressions = [];\n\t                    this.context.isAssignmentTarget = false;\n\t                    expressions.push(expr);\n\t                    while (this.lookahead.type !== 2 /* EOF */) {\n\t                        if (!this.match(',')) {\n\t                            break;\n\t                        }\n\t                        this.nextToken();\n\t                        if (this.match(')')) {\n\t                            this.nextToken();\n\t                            for (var i = 0; i < expressions.length; i++) {\n\t                                this.reinterpretExpressionAsPattern(expressions[i]);\n\t                            }\n\t                            arrow = true;\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: expressions,\n\t                                async: false\n\t                            };\n\t                        }\n\t                        else if (this.match('...')) {\n\t                            if (!this.context.isBindingElement) {\n\t                                this.throwUnexpectedToken(this.lookahead);\n\t                            }\n\t                            expressions.push(this.parseRestElement(params));\n\t                            this.expect(')');\n\t                            if (!this.match('=>')) {\n\t                                this.expect('=>');\n\t                            }\n\t                            this.context.isBindingElement = false;\n\t                            for (var i = 0; i < expressions.length; i++) {\n\t                                this.reinterpretExpressionAsPattern(expressions[i]);\n\t                            }\n\t                            arrow = true;\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: expressions,\n\t                                async: false\n\t                            };\n\t                        }\n\t                        else {\n\t                            expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t                        }\n\t                        if (arrow) {\n\t                            break;\n\t                        }\n\t                    }\n\t                    if (!arrow) {\n\t                        expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t                    }\n\t                }\n\t                if (!arrow) {\n\t                    this.expect(')');\n\t                    if (this.match('=>')) {\n\t                        if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') {\n\t                            arrow = true;\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: [expr],\n\t                                async: false\n\t                            };\n\t                        }\n\t                        if (!arrow) {\n\t                            if (!this.context.isBindingElement) {\n\t                                this.throwUnexpectedToken(this.lookahead);\n\t                            }\n\t                            if (expr.type === syntax_1.Syntax.SequenceExpression) {\n\t                                for (var i = 0; i < expr.expressions.length; i++) {\n\t                                    this.reinterpretExpressionAsPattern(expr.expressions[i]);\n\t                                }\n\t                            }\n\t                            else {\n\t                                this.reinterpretExpressionAsPattern(expr);\n\t                            }\n\t                            var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]);\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: parameters,\n\t                                async: false\n\t                            };\n\t                        }\n\t                    }\n\t                    this.context.isBindingElement = false;\n\t                }\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions\n\t    Parser.prototype.parseArguments = function () {\n\t        this.expect('(');\n\t        var args = [];\n\t        if (!this.match(')')) {\n\t            while (true) {\n\t                var expr = this.match('...') ? this.parseSpreadElement() :\n\t                    this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                args.push(expr);\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t                this.expectCommaSeparator();\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        this.expect(')');\n\t        return args;\n\t    };\n\t    Parser.prototype.isIdentifierName = function (token) {\n\t        return token.type === 3 /* Identifier */ ||\n\t            token.type === 4 /* Keyword */ ||\n\t            token.type === 1 /* BooleanLiteral */ ||\n\t            token.type === 5 /* NullLiteral */;\n\t    };\n\t    Parser.prototype.parseIdentifierName = function () {\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        if (!this.isIdentifierName(token)) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t        return this.finalize(node, new Node.Identifier(token.value));\n\t    };\n\t    Parser.prototype.parseNewExpression = function () {\n\t        var node = this.createNode();\n\t        var id = this.parseIdentifierName();\n\t        assert_1.assert(id.name === 'new', 'New expression must start with `new`');\n\t        var expr;\n\t        if (this.match('.')) {\n\t            this.nextToken();\n\t            if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === 'target') {\n\t                var property = this.parseIdentifierName();\n\t                expr = new Node.MetaProperty(id, property);\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t        }\n\t        else {\n\t            var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression);\n\t            var args = this.match('(') ? this.parseArguments() : [];\n\t            expr = new Node.NewExpression(callee, args);\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        return this.finalize(node, expr);\n\t    };\n\t    Parser.prototype.parseAsyncArgument = function () {\n\t        var arg = this.parseAssignmentExpression();\n\t        this.context.firstCoverInitializedNameError = null;\n\t        return arg;\n\t    };\n\t    Parser.prototype.parseAsyncArguments = function () {\n\t        this.expect('(');\n\t        var args = [];\n\t        if (!this.match(')')) {\n\t            while (true) {\n\t                var expr = this.match('...') ? this.parseSpreadElement() :\n\t                    this.isolateCoverGrammar(this.parseAsyncArgument);\n\t                args.push(expr);\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t                this.expectCommaSeparator();\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        this.expect(')');\n\t        return args;\n\t    };\n\t    Parser.prototype.parseLeftHandSideExpressionAllowCall = function () {\n\t        var startToken = this.lookahead;\n\t        var maybeAsync = this.matchContextualKeyword('async');\n\t        var previousAllowIn = this.context.allowIn;\n\t        this.context.allowIn = true;\n\t        var expr;\n\t        if (this.matchKeyword('super') && this.context.inFunctionBody) {\n\t            expr = this.createNode();\n\t            this.nextToken();\n\t            expr = this.finalize(expr, new Node.Super());\n\t            if (!this.match('(') && !this.match('.') && !this.match('[')) {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t        }\n\t        else {\n\t            expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t        }\n\t        while (true) {\n\t            if (this.match('.')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('.');\n\t                var property = this.parseIdentifierName();\n\t                expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property));\n\t            }\n\t            else if (this.match('(')) {\n\t                var asyncArrow = maybeAsync && (startToken.lineNumber === this.lookahead.lineNumber);\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = false;\n\t                var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments();\n\t                expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args));\n\t                if (asyncArrow && this.match('=>')) {\n\t                    for (var i = 0; i < args.length; ++i) {\n\t                        this.reinterpretExpressionAsPattern(args[i]);\n\t                    }\n\t                    expr = {\n\t                        type: ArrowParameterPlaceHolder,\n\t                        params: args,\n\t                        async: true\n\t                    };\n\t                }\n\t            }\n\t            else if (this.match('[')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('[');\n\t                var property = this.isolateCoverGrammar(this.parseExpression);\n\t                this.expect(']');\n\t                expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property));\n\t            }\n\t            else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t                var quasi = this.parseTemplateLiteral();\n\t                expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi));\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        this.context.allowIn = previousAllowIn;\n\t        return expr;\n\t    };\n\t    Parser.prototype.parseSuper = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('super');\n\t        if (!this.match('[') && !this.match('.')) {\n\t            this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        return this.finalize(node, new Node.Super());\n\t    };\n\t    Parser.prototype.parseLeftHandSideExpression = function () {\n\t        assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.');\n\t        var node = this.startNode(this.lookahead);\n\t        var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() :\n\t            this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t        while (true) {\n\t            if (this.match('[')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('[');\n\t                var property = this.isolateCoverGrammar(this.parseExpression);\n\t                this.expect(']');\n\t                expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property));\n\t            }\n\t            else if (this.match('.')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('.');\n\t                var property = this.parseIdentifierName();\n\t                expr = this.finalize(node, new Node.StaticMemberExpression(expr, property));\n\t            }\n\t            else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t                var quasi = this.parseTemplateLiteral();\n\t                expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi));\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-update-expressions\n\t    Parser.prototype.parseUpdateExpression = function () {\n\t        var expr;\n\t        var startToken = this.lookahead;\n\t        if (this.match('++') || this.match('--')) {\n\t            var node = this.startNode(startToken);\n\t            var token = this.nextToken();\n\t            expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t            if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictLHSPrefix);\n\t            }\n\t            if (!this.context.isAssignmentTarget) {\n\t                this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t            }\n\t            var prefix = true;\n\t            expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix));\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        else {\n\t            expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t            if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) {\n\t                if (this.match('++') || this.match('--')) {\n\t                    if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t                        this.tolerateError(messages_1.Messages.StrictLHSPostfix);\n\t                    }\n\t                    if (!this.context.isAssignmentTarget) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t                    }\n\t                    this.context.isAssignmentTarget = false;\n\t                    this.context.isBindingElement = false;\n\t                    var operator = this.nextToken().value;\n\t                    var prefix = false;\n\t                    expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix));\n\t                }\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-unary-operators\n\t    Parser.prototype.parseAwaitExpression = function () {\n\t        var node = this.createNode();\n\t        this.nextToken();\n\t        var argument = this.parseUnaryExpression();\n\t        return this.finalize(node, new Node.AwaitExpression(argument));\n\t    };\n\t    Parser.prototype.parseUnaryExpression = function () {\n\t        var expr;\n\t        if (this.match('+') || this.match('-') || this.match('~') || this.match('!') ||\n\t            this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) {\n\t            var node = this.startNode(this.lookahead);\n\t            var token = this.nextToken();\n\t            expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t            expr = this.finalize(node, new Node.UnaryExpression(token.value, expr));\n\t            if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) {\n\t                this.tolerateError(messages_1.Messages.StrictDelete);\n\t            }\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        else if (this.context.await && this.matchContextualKeyword('await')) {\n\t            expr = this.parseAwaitExpression();\n\t        }\n\t        else {\n\t            expr = this.parseUpdateExpression();\n\t        }\n\t        return expr;\n\t    };\n\t    Parser.prototype.parseExponentiationExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t        if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) {\n\t            this.nextToken();\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t            var left = expr;\n\t            var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t            expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right));\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-exp-operator\n\t    // https://tc39.github.io/ecma262/#sec-multiplicative-operators\n\t    // https://tc39.github.io/ecma262/#sec-additive-operators\n\t    // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators\n\t    // https://tc39.github.io/ecma262/#sec-relational-operators\n\t    // https://tc39.github.io/ecma262/#sec-equality-operators\n\t    // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators\n\t    // https://tc39.github.io/ecma262/#sec-binary-logical-operators\n\t    Parser.prototype.binaryPrecedence = function (token) {\n\t        var op = token.value;\n\t        var precedence;\n\t        if (token.type === 7 /* Punctuator */) {\n\t            precedence = this.operatorPrecedence[op] || 0;\n\t        }\n\t        else if (token.type === 4 /* Keyword */) {\n\t            precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0;\n\t        }\n\t        else {\n\t            precedence = 0;\n\t        }\n\t        return precedence;\n\t    };\n\t    Parser.prototype.parseBinaryExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.inheritCoverGrammar(this.parseExponentiationExpression);\n\t        var token = this.lookahead;\n\t        var prec = this.binaryPrecedence(token);\n\t        if (prec > 0) {\n\t            this.nextToken();\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t            var markers = [startToken, this.lookahead];\n\t            var left = expr;\n\t            var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t            var stack = [left, token.value, right];\n\t            var precedences = [prec];\n\t            while (true) {\n\t                prec = this.binaryPrecedence(this.lookahead);\n\t                if (prec <= 0) {\n\t                    break;\n\t                }\n\t                // Reduce: make a binary expression from the three topmost entries.\n\t                while ((stack.length > 2) && (prec <= precedences[precedences.length - 1])) {\n\t                    right = stack.pop();\n\t                    var operator = stack.pop();\n\t                    precedences.pop();\n\t                    left = stack.pop();\n\t                    markers.pop();\n\t                    var node = this.startNode(markers[markers.length - 1]);\n\t                    stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right)));\n\t                }\n\t                // Shift.\n\t                stack.push(this.nextToken().value);\n\t                precedences.push(prec);\n\t                markers.push(this.lookahead);\n\t                stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));\n\t            }\n\t            // Final reduce to clean-up the stack.\n\t            var i = stack.length - 1;\n\t            expr = stack[i];\n\t            var lastMarker = markers.pop();\n\t            while (i > 1) {\n\t                var marker = markers.pop();\n\t                var lastLineStart = lastMarker && lastMarker.lineStart;\n\t                var node = this.startNode(marker, lastLineStart);\n\t                var operator = stack[i - 1];\n\t                expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr));\n\t                i -= 2;\n\t                lastMarker = marker;\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-conditional-operator\n\t    Parser.prototype.parseConditionalExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.inheritCoverGrammar(this.parseBinaryExpression);\n\t        if (this.match('?')) {\n\t            this.nextToken();\n\t            var previousAllowIn = this.context.allowIn;\n\t            this.context.allowIn = true;\n\t            var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t            this.context.allowIn = previousAllowIn;\n\t            this.expect(':');\n\t            var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t            expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate));\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-assignment-operators\n\t    Parser.prototype.checkPatternParam = function (options, param) {\n\t        switch (param.type) {\n\t            case syntax_1.Syntax.Identifier:\n\t                this.validateParam(options, param, param.name);\n\t                break;\n\t            case syntax_1.Syntax.RestElement:\n\t                this.checkPatternParam(options, param.argument);\n\t                break;\n\t            case syntax_1.Syntax.AssignmentPattern:\n\t                this.checkPatternParam(options, param.left);\n\t                break;\n\t            case syntax_1.Syntax.ArrayPattern:\n\t                for (var i = 0; i < param.elements.length; i++) {\n\t                    if (param.elements[i] !== null) {\n\t                        this.checkPatternParam(options, param.elements[i]);\n\t                    }\n\t                }\n\t                break;\n\t            case syntax_1.Syntax.ObjectPattern:\n\t                for (var i = 0; i < param.properties.length; i++) {\n\t                    this.checkPatternParam(options, param.properties[i].value);\n\t                }\n\t                break;\n\t            default:\n\t                break;\n\t        }\n\t        options.simple = options.simple && (param instanceof Node.Identifier);\n\t    };\n\t    Parser.prototype.reinterpretAsCoverFormalsList = function (expr) {\n\t        var params = [expr];\n\t        var options;\n\t        var asyncArrow = false;\n\t        switch (expr.type) {\n\t            case syntax_1.Syntax.Identifier:\n\t                break;\n\t            case ArrowParameterPlaceHolder:\n\t                params = expr.params;\n\t                asyncArrow = expr.async;\n\t                break;\n\t            default:\n\t                return null;\n\t        }\n\t        options = {\n\t            simple: true,\n\t            paramSet: {}\n\t        };\n\t        for (var i = 0; i < params.length; ++i) {\n\t            var param = params[i];\n\t            if (param.type === syntax_1.Syntax.AssignmentPattern) {\n\t                if (param.right.type === syntax_1.Syntax.YieldExpression) {\n\t                    if (param.right.argument) {\n\t                        this.throwUnexpectedToken(this.lookahead);\n\t                    }\n\t                    param.right.type = syntax_1.Syntax.Identifier;\n\t                    param.right.name = 'yield';\n\t                    delete param.right.argument;\n\t                    delete param.right.delegate;\n\t                }\n\t            }\n\t            else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === 'await') {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            this.checkPatternParam(options, param);\n\t            params[i] = param;\n\t        }\n\t        if (this.context.strict || !this.context.allowYield) {\n\t            for (var i = 0; i < params.length; ++i) {\n\t                var param = params[i];\n\t                if (param.type === syntax_1.Syntax.YieldExpression) {\n\t                    this.throwUnexpectedToken(this.lookahead);\n\t                }\n\t            }\n\t        }\n\t        if (options.message === messages_1.Messages.StrictParamDupe) {\n\t            var token = this.context.strict ? options.stricted : options.firstRestricted;\n\t            this.throwUnexpectedToken(token, options.message);\n\t        }\n\t        return {\n\t            simple: options.simple,\n\t            params: params,\n\t            stricted: options.stricted,\n\t            firstRestricted: options.firstRestricted,\n\t            message: options.message\n\t        };\n\t    };\n\t    Parser.prototype.parseAssignmentExpression = function () {\n\t        var expr;\n\t        if (!this.context.allowYield && this.matchKeyword('yield')) {\n\t            expr = this.parseYieldExpression();\n\t        }\n\t        else {\n\t            var startToken = this.lookahead;\n\t            var token = startToken;\n\t            expr = this.parseConditionalExpression();\n\t            if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') {\n\t                if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) {\n\t                    var arg = this.parsePrimaryExpression();\n\t                    this.reinterpretExpressionAsPattern(arg);\n\t                    expr = {\n\t                        type: ArrowParameterPlaceHolder,\n\t                        params: [arg],\n\t                        async: true\n\t                    };\n\t                }\n\t            }\n\t            if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) {\n\t                // https://tc39.github.io/ecma262/#sec-arrow-function-definitions\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                var isAsync = expr.async;\n\t                var list = this.reinterpretAsCoverFormalsList(expr);\n\t                if (list) {\n\t                    if (this.hasLineTerminator) {\n\t                        this.tolerateUnexpectedToken(this.lookahead);\n\t                    }\n\t                    this.context.firstCoverInitializedNameError = null;\n\t                    var previousStrict = this.context.strict;\n\t                    var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t                    this.context.allowStrictDirective = list.simple;\n\t                    var previousAllowYield = this.context.allowYield;\n\t                    var previousAwait = this.context.await;\n\t                    this.context.allowYield = true;\n\t                    this.context.await = isAsync;\n\t                    var node = this.startNode(startToken);\n\t                    this.expect('=>');\n\t                    var body = void 0;\n\t                    if (this.match('{')) {\n\t                        var previousAllowIn = this.context.allowIn;\n\t                        this.context.allowIn = true;\n\t                        body = this.parseFunctionSourceElements();\n\t                        this.context.allowIn = previousAllowIn;\n\t                    }\n\t                    else {\n\t                        body = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    }\n\t                    var expression = body.type !== syntax_1.Syntax.BlockStatement;\n\t                    if (this.context.strict && list.firstRestricted) {\n\t                        this.throwUnexpectedToken(list.firstRestricted, list.message);\n\t                    }\n\t                    if (this.context.strict && list.stricted) {\n\t                        this.tolerateUnexpectedToken(list.stricted, list.message);\n\t                    }\n\t                    expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) :\n\t                        this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression));\n\t                    this.context.strict = previousStrict;\n\t                    this.context.allowStrictDirective = previousAllowStrictDirective;\n\t                    this.context.allowYield = previousAllowYield;\n\t                    this.context.await = previousAwait;\n\t                }\n\t            }\n\t            else {\n\t                if (this.matchAssign()) {\n\t                    if (!this.context.isAssignmentTarget) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t                    }\n\t                    if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) {\n\t                        var id = expr;\n\t                        if (this.scanner.isRestrictedWord(id.name)) {\n\t                            this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment);\n\t                        }\n\t                        if (this.scanner.isStrictModeReservedWord(id.name)) {\n\t                            this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t                        }\n\t                    }\n\t                    if (!this.match('=')) {\n\t                        this.context.isAssignmentTarget = false;\n\t                        this.context.isBindingElement = false;\n\t                    }\n\t                    else {\n\t                        this.reinterpretExpressionAsPattern(expr);\n\t                    }\n\t                    token = this.nextToken();\n\t                    var operator = token.value;\n\t                    var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right));\n\t                    this.context.firstCoverInitializedNameError = null;\n\t                }\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-comma-operator\n\t    Parser.prototype.parseExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t        if (this.match(',')) {\n\t            var expressions = [];\n\t            expressions.push(expr);\n\t            while (this.lookahead.type !== 2 /* EOF */) {\n\t                if (!this.match(',')) {\n\t                    break;\n\t                }\n\t                this.nextToken();\n\t                expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t            }\n\t            expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-block\n\t    Parser.prototype.parseStatementListItem = function () {\n\t        var statement;\n\t        this.context.isAssignmentTarget = true;\n\t        this.context.isBindingElement = true;\n\t        if (this.lookahead.type === 4 /* Keyword */) {\n\t            switch (this.lookahead.value) {\n\t                case 'export':\n\t                    if (!this.context.isModule) {\n\t                        this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration);\n\t                    }\n\t                    statement = this.parseExportDeclaration();\n\t                    break;\n\t                case 'import':\n\t                    if (!this.context.isModule) {\n\t                        this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration);\n\t                    }\n\t                    statement = this.parseImportDeclaration();\n\t                    break;\n\t                case 'const':\n\t                    statement = this.parseLexicalDeclaration({ inFor: false });\n\t                    break;\n\t                case 'function':\n\t                    statement = this.parseFunctionDeclaration();\n\t                    break;\n\t                case 'class':\n\t                    statement = this.parseClassDeclaration();\n\t                    break;\n\t                case 'let':\n\t                    statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement();\n\t                    break;\n\t                default:\n\t                    statement = this.parseStatement();\n\t                    break;\n\t            }\n\t        }\n\t        else {\n\t            statement = this.parseStatement();\n\t        }\n\t        return statement;\n\t    };\n\t    Parser.prototype.parseBlock = function () {\n\t        var node = this.createNode();\n\t        this.expect('{');\n\t        var block = [];\n\t        while (true) {\n\t            if (this.match('}')) {\n\t                break;\n\t            }\n\t            block.push(this.parseStatementListItem());\n\t        }\n\t        this.expect('}');\n\t        return this.finalize(node, new Node.BlockStatement(block));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-let-and-const-declarations\n\t    Parser.prototype.parseLexicalBinding = function (kind, options) {\n\t        var node = this.createNode();\n\t        var params = [];\n\t        var id = this.parsePattern(params, kind);\n\t        if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t            if (this.scanner.isRestrictedWord(id.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictVarName);\n\t            }\n\t        }\n\t        var init = null;\n\t        if (kind === 'const') {\n\t            if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) {\n\t                if (this.match('=')) {\n\t                    this.nextToken();\n\t                    init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                }\n\t                else {\n\t                    this.throwError(messages_1.Messages.DeclarationMissingInitializer, 'const');\n\t                }\n\t            }\n\t        }\n\t        else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) {\n\t            this.expect('=');\n\t            init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t        }\n\t        return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t    };\n\t    Parser.prototype.parseBindingList = function (kind, options) {\n\t        var list = [this.parseLexicalBinding(kind, options)];\n\t        while (this.match(',')) {\n\t            this.nextToken();\n\t            list.push(this.parseLexicalBinding(kind, options));\n\t        }\n\t        return list;\n\t    };\n\t    Parser.prototype.isLexicalDeclaration = function () {\n\t        var state = this.scanner.saveState();\n\t        this.scanner.scanComments();\n\t        var next = this.scanner.lex();\n\t        this.scanner.restoreState(state);\n\t        return (next.type === 3 /* Identifier */) ||\n\t            (next.type === 7 /* Punctuator */ && next.value === '[') ||\n\t            (next.type === 7 /* Punctuator */ && next.value === '{') ||\n\t            (next.type === 4 /* Keyword */ && next.value === 'let') ||\n\t            (next.type === 4 /* Keyword */ && next.value === 'yield');\n\t    };\n\t    Parser.prototype.parseLexicalDeclaration = function (options) {\n\t        var node = this.createNode();\n\t        var kind = this.nextToken().value;\n\t        assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');\n\t        var declarations = this.parseBindingList(kind, options);\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.VariableDeclaration(declarations, kind));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns\n\t    Parser.prototype.parseBindingRestElement = function (params, kind) {\n\t        var node = this.createNode();\n\t        this.expect('...');\n\t        var arg = this.parsePattern(params, kind);\n\t        return this.finalize(node, new Node.RestElement(arg));\n\t    };\n\t    Parser.prototype.parseArrayPattern = function (params, kind) {\n\t        var node = this.createNode();\n\t        this.expect('[');\n\t        var elements = [];\n\t        while (!this.match(']')) {\n\t            if (this.match(',')) {\n\t                this.nextToken();\n\t                elements.push(null);\n\t            }\n\t            else {\n\t                if (this.match('...')) {\n\t                    elements.push(this.parseBindingRestElement(params, kind));\n\t                    break;\n\t                }\n\t                else {\n\t                    elements.push(this.parsePatternWithDefault(params, kind));\n\t                }\n\t                if (!this.match(']')) {\n\t                    this.expect(',');\n\t                }\n\t            }\n\t        }\n\t        this.expect(']');\n\t        return this.finalize(node, new Node.ArrayPattern(elements));\n\t    };\n\t    Parser.prototype.parsePropertyPattern = function (params, kind) {\n\t        var node = this.createNode();\n\t        var computed = false;\n\t        var shorthand = false;\n\t        var method = false;\n\t        var key;\n\t        var value;\n\t        if (this.lookahead.type === 3 /* Identifier */) {\n\t            var keyToken = this.lookahead;\n\t            key = this.parseVariableIdentifier();\n\t            var init = this.finalize(node, new Node.Identifier(keyToken.value));\n\t            if (this.match('=')) {\n\t                params.push(keyToken);\n\t                shorthand = true;\n\t                this.nextToken();\n\t                var expr = this.parseAssignmentExpression();\n\t                value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr));\n\t            }\n\t            else if (!this.match(':')) {\n\t                params.push(keyToken);\n\t                shorthand = true;\n\t                value = init;\n\t            }\n\t            else {\n\t                this.expect(':');\n\t                value = this.parsePatternWithDefault(params, kind);\n\t            }\n\t        }\n\t        else {\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            this.expect(':');\n\t            value = this.parsePatternWithDefault(params, kind);\n\t        }\n\t        return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand));\n\t    };\n\t    Parser.prototype.parseObjectPattern = function (params, kind) {\n\t        var node = this.createNode();\n\t        var properties = [];\n\t        this.expect('{');\n\t        while (!this.match('}')) {\n\t            properties.push(this.parsePropertyPattern(params, kind));\n\t            if (!this.match('}')) {\n\t                this.expect(',');\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return this.finalize(node, new Node.ObjectPattern(properties));\n\t    };\n\t    Parser.prototype.parsePattern = function (params, kind) {\n\t        var pattern;\n\t        if (this.match('[')) {\n\t            pattern = this.parseArrayPattern(params, kind);\n\t        }\n\t        else if (this.match('{')) {\n\t            pattern = this.parseObjectPattern(params, kind);\n\t        }\n\t        else {\n\t            if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) {\n\t                this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding);\n\t            }\n\t            params.push(this.lookahead);\n\t            pattern = this.parseVariableIdentifier(kind);\n\t        }\n\t        return pattern;\n\t    };\n\t    Parser.prototype.parsePatternWithDefault = function (params, kind) {\n\t        var startToken = this.lookahead;\n\t        var pattern = this.parsePattern(params, kind);\n\t        if (this.match('=')) {\n\t            this.nextToken();\n\t            var previousAllowYield = this.context.allowYield;\n\t            this.context.allowYield = true;\n\t            var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t            this.context.allowYield = previousAllowYield;\n\t            pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right));\n\t        }\n\t        return pattern;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-variable-statement\n\t    Parser.prototype.parseVariableIdentifier = function (kind) {\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        if (token.type === 4 /* Keyword */ && token.value === 'yield') {\n\t            if (this.context.strict) {\n\t                this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t            }\n\t            else if (!this.context.allowYield) {\n\t                this.throwUnexpectedToken(token);\n\t            }\n\t        }\n\t        else if (token.type !== 3 /* Identifier */) {\n\t            if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) {\n\t                this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t            }\n\t            else {\n\t                if (this.context.strict || token.value !== 'let' || kind !== 'var') {\n\t                    this.throwUnexpectedToken(token);\n\t                }\n\t            }\n\t        }\n\t        else if ((this.context.isModule || this.context.await) && token.type === 3 /* Identifier */ && token.value === 'await') {\n\t            this.tolerateUnexpectedToken(token);\n\t        }\n\t        return this.finalize(node, new Node.Identifier(token.value));\n\t    };\n\t    Parser.prototype.parseVariableDeclaration = function (options) {\n\t        var node = this.createNode();\n\t        var params = [];\n\t        var id = this.parsePattern(params, 'var');\n\t        if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t            if (this.scanner.isRestrictedWord(id.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictVarName);\n\t            }\n\t        }\n\t        var init = null;\n\t        if (this.match('=')) {\n\t            this.nextToken();\n\t            init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t        }\n\t        else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) {\n\t            this.expect('=');\n\t        }\n\t        return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t    };\n\t    Parser.prototype.parseVariableDeclarationList = function (options) {\n\t        var opt = { inFor: options.inFor };\n\t        var list = [];\n\t        list.push(this.parseVariableDeclaration(opt));\n\t        while (this.match(',')) {\n\t            this.nextToken();\n\t            list.push(this.parseVariableDeclaration(opt));\n\t        }\n\t        return list;\n\t    };\n\t    Parser.prototype.parseVariableStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('var');\n\t        var declarations = this.parseVariableDeclarationList({ inFor: false });\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.VariableDeclaration(declarations, 'var'));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-empty-statement\n\t    Parser.prototype.parseEmptyStatement = function () {\n\t        var node = this.createNode();\n\t        this.expect(';');\n\t        return this.finalize(node, new Node.EmptyStatement());\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-expression-statement\n\t    Parser.prototype.parseExpressionStatement = function () {\n\t        var node = this.createNode();\n\t        var expr = this.parseExpression();\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ExpressionStatement(expr));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-if-statement\n\t    Parser.prototype.parseIfClause = function () {\n\t        if (this.context.strict && this.matchKeyword('function')) {\n\t            this.tolerateError(messages_1.Messages.StrictFunction);\n\t        }\n\t        return this.parseStatement();\n\t    };\n\t    Parser.prototype.parseIfStatement = function () {\n\t        var node = this.createNode();\n\t        var consequent;\n\t        var alternate = null;\n\t        this.expectKeyword('if');\n\t        this.expect('(');\n\t        var test = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            consequent = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            consequent = this.parseIfClause();\n\t            if (this.matchKeyword('else')) {\n\t                this.nextToken();\n\t                alternate = this.parseIfClause();\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.IfStatement(test, consequent, alternate));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-do-while-statement\n\t    Parser.prototype.parseDoWhileStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('do');\n\t        var previousInIteration = this.context.inIteration;\n\t        this.context.inIteration = true;\n\t        var body = this.parseStatement();\n\t        this.context.inIteration = previousInIteration;\n\t        this.expectKeyword('while');\n\t        this.expect('(');\n\t        var test = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            if (this.match(';')) {\n\t                this.nextToken();\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.DoWhileStatement(body, test));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-while-statement\n\t    Parser.prototype.parseWhileStatement = function () {\n\t        var node = this.createNode();\n\t        var body;\n\t        this.expectKeyword('while');\n\t        this.expect('(');\n\t        var test = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            var previousInIteration = this.context.inIteration;\n\t            this.context.inIteration = true;\n\t            body = this.parseStatement();\n\t            this.context.inIteration = previousInIteration;\n\t        }\n\t        return this.finalize(node, new Node.WhileStatement(test, body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-for-statement\n\t    // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements\n\t    Parser.prototype.parseForStatement = function () {\n\t        var init = null;\n\t        var test = null;\n\t        var update = null;\n\t        var forIn = true;\n\t        var left, right;\n\t        var node = this.createNode();\n\t        this.expectKeyword('for');\n\t        this.expect('(');\n\t        if (this.match(';')) {\n\t            this.nextToken();\n\t        }\n\t        else {\n\t            if (this.matchKeyword('var')) {\n\t                init = this.createNode();\n\t                this.nextToken();\n\t                var previousAllowIn = this.context.allowIn;\n\t                this.context.allowIn = false;\n\t                var declarations = this.parseVariableDeclarationList({ inFor: true });\n\t                this.context.allowIn = previousAllowIn;\n\t                if (declarations.length === 1 && this.matchKeyword('in')) {\n\t                    var decl = declarations[0];\n\t                    if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) {\n\t                        this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in');\n\t                    }\n\t                    init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t                    this.nextToken();\n\t                    left = init;\n\t                    right = this.parseExpression();\n\t                    init = null;\n\t                }\n\t                else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t                    init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t                    this.nextToken();\n\t                    left = init;\n\t                    right = this.parseAssignmentExpression();\n\t                    init = null;\n\t                    forIn = false;\n\t                }\n\t                else {\n\t                    init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t                    this.expect(';');\n\t                }\n\t            }\n\t            else if (this.matchKeyword('const') || this.matchKeyword('let')) {\n\t                init = this.createNode();\n\t                var kind = this.nextToken().value;\n\t                if (!this.context.strict && this.lookahead.value === 'in') {\n\t                    init = this.finalize(init, new Node.Identifier(kind));\n\t                    this.nextToken();\n\t                    left = init;\n\t                    right = this.parseExpression();\n\t                    init = null;\n\t                }\n\t                else {\n\t                    var previousAllowIn = this.context.allowIn;\n\t                    this.context.allowIn = false;\n\t                    var declarations = this.parseBindingList(kind, { inFor: true });\n\t                    this.context.allowIn = previousAllowIn;\n\t                    if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) {\n\t                        init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t                        this.nextToken();\n\t                        left = init;\n\t                        right = this.parseExpression();\n\t                        init = null;\n\t                    }\n\t                    else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t                        init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t                        this.nextToken();\n\t                        left = init;\n\t                        right = this.parseAssignmentExpression();\n\t                        init = null;\n\t                        forIn = false;\n\t                    }\n\t                    else {\n\t                        this.consumeSemicolon();\n\t                        init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t                    }\n\t                }\n\t            }\n\t            else {\n\t                var initStartToken = this.lookahead;\n\t                var previousAllowIn = this.context.allowIn;\n\t                this.context.allowIn = false;\n\t                init = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t                this.context.allowIn = previousAllowIn;\n\t                if (this.matchKeyword('in')) {\n\t                    if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInForIn);\n\t                    }\n\t                    this.nextToken();\n\t                    this.reinterpretExpressionAsPattern(init);\n\t                    left = init;\n\t                    right = this.parseExpression();\n\t                    init = null;\n\t                }\n\t                else if (this.matchContextualKeyword('of')) {\n\t                    if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInForLoop);\n\t                    }\n\t                    this.nextToken();\n\t                    this.reinterpretExpressionAsPattern(init);\n\t                    left = init;\n\t                    right = this.parseAssignmentExpression();\n\t                    init = null;\n\t                    forIn = false;\n\t                }\n\t                else {\n\t                    if (this.match(',')) {\n\t                        var initSeq = [init];\n\t                        while (this.match(',')) {\n\t                            this.nextToken();\n\t                            initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t                        }\n\t                        init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq));\n\t                    }\n\t                    this.expect(';');\n\t                }\n\t            }\n\t        }\n\t        if (typeof left === 'undefined') {\n\t            if (!this.match(';')) {\n\t                test = this.parseExpression();\n\t            }\n\t            this.expect(';');\n\t            if (!this.match(')')) {\n\t                update = this.parseExpression();\n\t            }\n\t        }\n\t        var body;\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            var previousInIteration = this.context.inIteration;\n\t            this.context.inIteration = true;\n\t            body = this.isolateCoverGrammar(this.parseStatement);\n\t            this.context.inIteration = previousInIteration;\n\t        }\n\t        return (typeof left === 'undefined') ?\n\t            this.finalize(node, new Node.ForStatement(init, test, update, body)) :\n\t            forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) :\n\t                this.finalize(node, new Node.ForOfStatement(left, right, body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-continue-statement\n\t    Parser.prototype.parseContinueStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('continue');\n\t        var label = null;\n\t        if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t            var id = this.parseVariableIdentifier();\n\t            label = id;\n\t            var key = '$' + id.name;\n\t            if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t                this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t            }\n\t        }\n\t        this.consumeSemicolon();\n\t        if (label === null && !this.context.inIteration) {\n\t            this.throwError(messages_1.Messages.IllegalContinue);\n\t        }\n\t        return this.finalize(node, new Node.ContinueStatement(label));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-break-statement\n\t    Parser.prototype.parseBreakStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('break');\n\t        var label = null;\n\t        if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t            var id = this.parseVariableIdentifier();\n\t            var key = '$' + id.name;\n\t            if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t                this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t            }\n\t            label = id;\n\t        }\n\t        this.consumeSemicolon();\n\t        if (label === null && !this.context.inIteration && !this.context.inSwitch) {\n\t            this.throwError(messages_1.Messages.IllegalBreak);\n\t        }\n\t        return this.finalize(node, new Node.BreakStatement(label));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-return-statement\n\t    Parser.prototype.parseReturnStatement = function () {\n\t        if (!this.context.inFunctionBody) {\n\t            this.tolerateError(messages_1.Messages.IllegalReturn);\n\t        }\n\t        var node = this.createNode();\n\t        this.expectKeyword('return');\n\t        var hasArgument = (!this.match(';') && !this.match('}') &&\n\t            !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) ||\n\t            this.lookahead.type === 8 /* StringLiteral */ ||\n\t            this.lookahead.type === 10 /* Template */;\n\t        var argument = hasArgument ? this.parseExpression() : null;\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ReturnStatement(argument));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-with-statement\n\t    Parser.prototype.parseWithStatement = function () {\n\t        if (this.context.strict) {\n\t            this.tolerateError(messages_1.Messages.StrictModeWith);\n\t        }\n\t        var node = this.createNode();\n\t        var body;\n\t        this.expectKeyword('with');\n\t        this.expect('(');\n\t        var object = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            body = this.parseStatement();\n\t        }\n\t        return this.finalize(node, new Node.WithStatement(object, body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-switch-statement\n\t    Parser.prototype.parseSwitchCase = function () {\n\t        var node = this.createNode();\n\t        var test;\n\t        if (this.matchKeyword('default')) {\n\t            this.nextToken();\n\t            test = null;\n\t        }\n\t        else {\n\t            this.expectKeyword('case');\n\t            test = this.parseExpression();\n\t        }\n\t        this.expect(':');\n\t        var consequent = [];\n\t        while (true) {\n\t            if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) {\n\t                break;\n\t            }\n\t            consequent.push(this.parseStatementListItem());\n\t        }\n\t        return this.finalize(node, new Node.SwitchCase(test, consequent));\n\t    };\n\t    Parser.prototype.parseSwitchStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('switch');\n\t        this.expect('(');\n\t        var discriminant = this.parseExpression();\n\t        this.expect(')');\n\t        var previousInSwitch = this.context.inSwitch;\n\t        this.context.inSwitch = true;\n\t        var cases = [];\n\t        var defaultFound = false;\n\t        this.expect('{');\n\t        while (true) {\n\t            if (this.match('}')) {\n\t                break;\n\t            }\n\t            var clause = this.parseSwitchCase();\n\t            if (clause.test === null) {\n\t                if (defaultFound) {\n\t                    this.throwError(messages_1.Messages.MultipleDefaultsInSwitch);\n\t                }\n\t                defaultFound = true;\n\t            }\n\t            cases.push(clause);\n\t        }\n\t        this.expect('}');\n\t        this.context.inSwitch = previousInSwitch;\n\t        return this.finalize(node, new Node.SwitchStatement(discriminant, cases));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-labelled-statements\n\t    Parser.prototype.parseLabelledStatement = function () {\n\t        var node = this.createNode();\n\t        var expr = this.parseExpression();\n\t        var statement;\n\t        if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) {\n\t            this.nextToken();\n\t            var id = expr;\n\t            var key = '$' + id.name;\n\t            if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t                this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name);\n\t            }\n\t            this.context.labelSet[key] = true;\n\t            var body = void 0;\n\t            if (this.matchKeyword('class')) {\n\t                this.tolerateUnexpectedToken(this.lookahead);\n\t                body = this.parseClassDeclaration();\n\t            }\n\t            else if (this.matchKeyword('function')) {\n\t                var token = this.lookahead;\n\t                var declaration = this.parseFunctionDeclaration();\n\t                if (this.context.strict) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction);\n\t                }\n\t                else if (declaration.generator) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext);\n\t                }\n\t                body = declaration;\n\t            }\n\t            else {\n\t                body = this.parseStatement();\n\t            }\n\t            delete this.context.labelSet[key];\n\t            statement = new Node.LabeledStatement(id, body);\n\t        }\n\t        else {\n\t            this.consumeSemicolon();\n\t            statement = new Node.ExpressionStatement(expr);\n\t        }\n\t        return this.finalize(node, statement);\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-throw-statement\n\t    Parser.prototype.parseThrowStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('throw');\n\t        if (this.hasLineTerminator) {\n\t            this.throwError(messages_1.Messages.NewlineAfterThrow);\n\t        }\n\t        var argument = this.parseExpression();\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ThrowStatement(argument));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-try-statement\n\t    Parser.prototype.parseCatchClause = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('catch');\n\t        this.expect('(');\n\t        if (this.match(')')) {\n\t            this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        var params = [];\n\t        var param = this.parsePattern(params);\n\t        var paramMap = {};\n\t        for (var i = 0; i < params.length; i++) {\n\t            var key = '$' + params[i].value;\n\t            if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n\t                this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value);\n\t            }\n\t            paramMap[key] = true;\n\t        }\n\t        if (this.context.strict && param.type === syntax_1.Syntax.Identifier) {\n\t            if (this.scanner.isRestrictedWord(param.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictCatchVariable);\n\t            }\n\t        }\n\t        this.expect(')');\n\t        var body = this.parseBlock();\n\t        return this.finalize(node, new Node.CatchClause(param, body));\n\t    };\n\t    Parser.prototype.parseFinallyClause = function () {\n\t        this.expectKeyword('finally');\n\t        return this.parseBlock();\n\t    };\n\t    Parser.prototype.parseTryStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('try');\n\t        var block = this.parseBlock();\n\t        var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null;\n\t        var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null;\n\t        if (!handler && !finalizer) {\n\t            this.throwError(messages_1.Messages.NoCatchOrFinally);\n\t        }\n\t        return this.finalize(node, new Node.TryStatement(block, handler, finalizer));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-debugger-statement\n\t    Parser.prototype.parseDebuggerStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('debugger');\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.DebuggerStatement());\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations\n\t    Parser.prototype.parseStatement = function () {\n\t        var statement;\n\t        switch (this.lookahead.type) {\n\t            case 1 /* BooleanLiteral */:\n\t            case 5 /* NullLiteral */:\n\t            case 6 /* NumericLiteral */:\n\t            case 8 /* StringLiteral */:\n\t            case 10 /* Template */:\n\t            case 9 /* RegularExpression */:\n\t                statement = this.parseExpressionStatement();\n\t                break;\n\t            case 7 /* Punctuator */:\n\t                var value = this.lookahead.value;\n\t                if (value === '{') {\n\t                    statement = this.parseBlock();\n\t                }\n\t                else if (value === '(') {\n\t                    statement = this.parseExpressionStatement();\n\t                }\n\t                else if (value === ';') {\n\t                    statement = this.parseEmptyStatement();\n\t                }\n\t                else {\n\t                    statement = this.parseExpressionStatement();\n\t                }\n\t                break;\n\t            case 3 /* Identifier */:\n\t                statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement();\n\t                break;\n\t            case 4 /* Keyword */:\n\t                switch (this.lookahead.value) {\n\t                    case 'break':\n\t                        statement = this.parseBreakStatement();\n\t                        break;\n\t                    case 'continue':\n\t                        statement = this.parseContinueStatement();\n\t                        break;\n\t                    case 'debugger':\n\t                        statement = this.parseDebuggerStatement();\n\t                        break;\n\t                    case 'do':\n\t                        statement = this.parseDoWhileStatement();\n\t                        break;\n\t                    case 'for':\n\t                        statement = this.parseForStatement();\n\t                        break;\n\t                    case 'function':\n\t                        statement = this.parseFunctionDeclaration();\n\t                        break;\n\t                    case 'if':\n\t                        statement = this.parseIfStatement();\n\t                        break;\n\t                    case 'return':\n\t                        statement = this.parseReturnStatement();\n\t                        break;\n\t                    case 'switch':\n\t                        statement = this.parseSwitchStatement();\n\t                        break;\n\t                    case 'throw':\n\t                        statement = this.parseThrowStatement();\n\t                        break;\n\t                    case 'try':\n\t                        statement = this.parseTryStatement();\n\t                        break;\n\t                    case 'var':\n\t                        statement = this.parseVariableStatement();\n\t                        break;\n\t                    case 'while':\n\t                        statement = this.parseWhileStatement();\n\t                        break;\n\t                    case 'with':\n\t                        statement = this.parseWithStatement();\n\t                        break;\n\t                    default:\n\t                        statement = this.parseExpressionStatement();\n\t                        break;\n\t                }\n\t                break;\n\t            default:\n\t                statement = this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        return statement;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-function-definitions\n\t    Parser.prototype.parseFunctionSourceElements = function () {\n\t        var node = this.createNode();\n\t        this.expect('{');\n\t        var body = this.parseDirectivePrologues();\n\t        var previousLabelSet = this.context.labelSet;\n\t        var previousInIteration = this.context.inIteration;\n\t        var previousInSwitch = this.context.inSwitch;\n\t        var previousInFunctionBody = this.context.inFunctionBody;\n\t        this.context.labelSet = {};\n\t        this.context.inIteration = false;\n\t        this.context.inSwitch = false;\n\t        this.context.inFunctionBody = true;\n\t        while (this.lookahead.type !== 2 /* EOF */) {\n\t            if (this.match('}')) {\n\t                break;\n\t            }\n\t            body.push(this.parseStatementListItem());\n\t        }\n\t        this.expect('}');\n\t        this.context.labelSet = previousLabelSet;\n\t        this.context.inIteration = previousInIteration;\n\t        this.context.inSwitch = previousInSwitch;\n\t        this.context.inFunctionBody = previousInFunctionBody;\n\t        return this.finalize(node, new Node.BlockStatement(body));\n\t    };\n\t    Parser.prototype.validateParam = function (options, param, name) {\n\t        var key = '$' + name;\n\t        if (this.context.strict) {\n\t            if (this.scanner.isRestrictedWord(name)) {\n\t                options.stricted = param;\n\t                options.message = messages_1.Messages.StrictParamName;\n\t            }\n\t            if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t                options.stricted = param;\n\t                options.message = messages_1.Messages.StrictParamDupe;\n\t            }\n\t        }\n\t        else if (!options.firstRestricted) {\n\t            if (this.scanner.isRestrictedWord(name)) {\n\t                options.firstRestricted = param;\n\t                options.message = messages_1.Messages.StrictParamName;\n\t            }\n\t            else if (this.scanner.isStrictModeReservedWord(name)) {\n\t                options.firstRestricted = param;\n\t                options.message = messages_1.Messages.StrictReservedWord;\n\t            }\n\t            else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t                options.stricted = param;\n\t                options.message = messages_1.Messages.StrictParamDupe;\n\t            }\n\t        }\n\t        /* istanbul ignore next */\n\t        if (typeof Object.defineProperty === 'function') {\n\t            Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true });\n\t        }\n\t        else {\n\t            options.paramSet[key] = true;\n\t        }\n\t    };\n\t    Parser.prototype.parseRestElement = function (params) {\n\t        var node = this.createNode();\n\t        this.expect('...');\n\t        var arg = this.parsePattern(params);\n\t        if (this.match('=')) {\n\t            this.throwError(messages_1.Messages.DefaultRestParameter);\n\t        }\n\t        if (!this.match(')')) {\n\t            this.throwError(messages_1.Messages.ParameterAfterRestParameter);\n\t        }\n\t        return this.finalize(node, new Node.RestElement(arg));\n\t    };\n\t    Parser.prototype.parseFormalParameter = function (options) {\n\t        var params = [];\n\t        var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params);\n\t        for (var i = 0; i < params.length; i++) {\n\t            this.validateParam(options, params[i], params[i].value);\n\t        }\n\t        options.simple = options.simple && (param instanceof Node.Identifier);\n\t        options.params.push(param);\n\t    };\n\t    Parser.prototype.parseFormalParameters = function (firstRestricted) {\n\t        var options;\n\t        options = {\n\t            simple: true,\n\t            params: [],\n\t            firstRestricted: firstRestricted\n\t        };\n\t        this.expect('(');\n\t        if (!this.match(')')) {\n\t            options.paramSet = {};\n\t            while (this.lookahead.type !== 2 /* EOF */) {\n\t                this.parseFormalParameter(options);\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t                this.expect(',');\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        this.expect(')');\n\t        return {\n\t            simple: options.simple,\n\t            params: options.params,\n\t            stricted: options.stricted,\n\t            firstRestricted: options.firstRestricted,\n\t            message: options.message\n\t        };\n\t    };\n\t    Parser.prototype.matchAsyncFunction = function () {\n\t        var match = this.matchContextualKeyword('async');\n\t        if (match) {\n\t            var state = this.scanner.saveState();\n\t            this.scanner.scanComments();\n\t            var next = this.scanner.lex();\n\t            this.scanner.restoreState(state);\n\t            match = (state.lineNumber === next.lineNumber) && (next.type === 4 /* Keyword */) && (next.value === 'function');\n\t        }\n\t        return match;\n\t    };\n\t    Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) {\n\t        var node = this.createNode();\n\t        var isAsync = this.matchContextualKeyword('async');\n\t        if (isAsync) {\n\t            this.nextToken();\n\t        }\n\t        this.expectKeyword('function');\n\t        var isGenerator = isAsync ? false : this.match('*');\n\t        if (isGenerator) {\n\t            this.nextToken();\n\t        }\n\t        var message;\n\t        var id = null;\n\t        var firstRestricted = null;\n\t        if (!identifierIsOptional || !this.match('(')) {\n\t            var token = this.lookahead;\n\t            id = this.parseVariableIdentifier();\n\t            if (this.context.strict) {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t                }\n\t            }\n\t            else {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictFunctionName;\n\t                }\n\t                else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictReservedWord;\n\t                }\n\t            }\n\t        }\n\t        var previousAllowAwait = this.context.await;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.await = isAsync;\n\t        this.context.allowYield = !isGenerator;\n\t        var formalParameters = this.parseFormalParameters(firstRestricted);\n\t        var params = formalParameters.params;\n\t        var stricted = formalParameters.stricted;\n\t        firstRestricted = formalParameters.firstRestricted;\n\t        if (formalParameters.message) {\n\t            message = formalParameters.message;\n\t        }\n\t        var previousStrict = this.context.strict;\n\t        var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t        this.context.allowStrictDirective = formalParameters.simple;\n\t        var body = this.parseFunctionSourceElements();\n\t        if (this.context.strict && firstRestricted) {\n\t            this.throwUnexpectedToken(firstRestricted, message);\n\t        }\n\t        if (this.context.strict && stricted) {\n\t            this.tolerateUnexpectedToken(stricted, message);\n\t        }\n\t        this.context.strict = previousStrict;\n\t        this.context.allowStrictDirective = previousAllowStrictDirective;\n\t        this.context.await = previousAllowAwait;\n\t        this.context.allowYield = previousAllowYield;\n\t        return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) :\n\t            this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator));\n\t    };\n\t    Parser.prototype.parseFunctionExpression = function () {\n\t        var node = this.createNode();\n\t        var isAsync = this.matchContextualKeyword('async');\n\t        if (isAsync) {\n\t            this.nextToken();\n\t        }\n\t        this.expectKeyword('function');\n\t        var isGenerator = isAsync ? false : this.match('*');\n\t        if (isGenerator) {\n\t            this.nextToken();\n\t        }\n\t        var message;\n\t        var id = null;\n\t        var firstRestricted;\n\t        var previousAllowAwait = this.context.await;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.await = isAsync;\n\t        this.context.allowYield = !isGenerator;\n\t        if (!this.match('(')) {\n\t            var token = this.lookahead;\n\t            id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier();\n\t            if (this.context.strict) {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t                }\n\t            }\n\t            else {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictFunctionName;\n\t                }\n\t                else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictReservedWord;\n\t                }\n\t            }\n\t        }\n\t        var formalParameters = this.parseFormalParameters(firstRestricted);\n\t        var params = formalParameters.params;\n\t        var stricted = formalParameters.stricted;\n\t        firstRestricted = formalParameters.firstRestricted;\n\t        if (formalParameters.message) {\n\t            message = formalParameters.message;\n\t        }\n\t        var previousStrict = this.context.strict;\n\t        var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t        this.context.allowStrictDirective = formalParameters.simple;\n\t        var body = this.parseFunctionSourceElements();\n\t        if (this.context.strict && firstRestricted) {\n\t            this.throwUnexpectedToken(firstRestricted, message);\n\t        }\n\t        if (this.context.strict && stricted) {\n\t            this.tolerateUnexpectedToken(stricted, message);\n\t        }\n\t        this.context.strict = previousStrict;\n\t        this.context.allowStrictDirective = previousAllowStrictDirective;\n\t        this.context.await = previousAllowAwait;\n\t        this.context.allowYield = previousAllowYield;\n\t        return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) :\n\t            this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive\n\t    Parser.prototype.parseDirective = function () {\n\t        var token = this.lookahead;\n\t        var node = this.createNode();\n\t        var expr = this.parseExpression();\n\t        var directive = (expr.type === syntax_1.Syntax.Literal) ? this.getTokenRaw(token).slice(1, -1) : null;\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr));\n\t    };\n\t    Parser.prototype.parseDirectivePrologues = function () {\n\t        var firstRestricted = null;\n\t        var body = [];\n\t        while (true) {\n\t            var token = this.lookahead;\n\t            if (token.type !== 8 /* StringLiteral */) {\n\t                break;\n\t            }\n\t            var statement = this.parseDirective();\n\t            body.push(statement);\n\t            var directive = statement.directive;\n\t            if (typeof directive !== 'string') {\n\t                break;\n\t            }\n\t            if (directive === 'use strict') {\n\t                this.context.strict = true;\n\t                if (firstRestricted) {\n\t                    this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral);\n\t                }\n\t                if (!this.context.allowStrictDirective) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective);\n\t                }\n\t            }\n\t            else {\n\t                if (!firstRestricted && token.octal) {\n\t                    firstRestricted = token;\n\t                }\n\t            }\n\t        }\n\t        return body;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-method-definitions\n\t    Parser.prototype.qualifiedPropertyName = function (token) {\n\t        switch (token.type) {\n\t            case 3 /* Identifier */:\n\t            case 8 /* StringLiteral */:\n\t            case 1 /* BooleanLiteral */:\n\t            case 5 /* NullLiteral */:\n\t            case 6 /* NumericLiteral */:\n\t            case 4 /* Keyword */:\n\t                return true;\n\t            case 7 /* Punctuator */:\n\t                return token.value === '[';\n\t            default:\n\t                break;\n\t        }\n\t        return false;\n\t    };\n\t    Parser.prototype.parseGetterMethod = function () {\n\t        var node = this.createNode();\n\t        var isGenerator = false;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = !isGenerator;\n\t        var formalParameters = this.parseFormalParameters();\n\t        if (formalParameters.params.length > 0) {\n\t            this.tolerateError(messages_1.Messages.BadGetterArity);\n\t        }\n\t        var method = this.parsePropertyMethod(formalParameters);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t    };\n\t    Parser.prototype.parseSetterMethod = function () {\n\t        var node = this.createNode();\n\t        var isGenerator = false;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = !isGenerator;\n\t        var formalParameters = this.parseFormalParameters();\n\t        if (formalParameters.params.length !== 1) {\n\t            this.tolerateError(messages_1.Messages.BadSetterArity);\n\t        }\n\t        else if (formalParameters.params[0] instanceof Node.RestElement) {\n\t            this.tolerateError(messages_1.Messages.BadSetterRestParameter);\n\t        }\n\t        var method = this.parsePropertyMethod(formalParameters);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t    };\n\t    Parser.prototype.parseGeneratorMethod = function () {\n\t        var node = this.createNode();\n\t        var isGenerator = true;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = true;\n\t        var params = this.parseFormalParameters();\n\t        this.context.allowYield = false;\n\t        var method = this.parsePropertyMethod(params);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-generator-function-definitions\n\t    Parser.prototype.isStartOfExpression = function () {\n\t        var start = true;\n\t        var value = this.lookahead.value;\n\t        switch (this.lookahead.type) {\n\t            case 7 /* Punctuator */:\n\t                start = (value === '[') || (value === '(') || (value === '{') ||\n\t                    (value === '+') || (value === '-') ||\n\t                    (value === '!') || (value === '~') ||\n\t                    (value === '++') || (value === '--') ||\n\t                    (value === '/') || (value === '/='); // regular expression literal\n\t                break;\n\t            case 4 /* Keyword */:\n\t                start = (value === 'class') || (value === 'delete') ||\n\t                    (value === 'function') || (value === 'let') || (value === 'new') ||\n\t                    (value === 'super') || (value === 'this') || (value === 'typeof') ||\n\t                    (value === 'void') || (value === 'yield');\n\t                break;\n\t            default:\n\t                break;\n\t        }\n\t        return start;\n\t    };\n\t    Parser.prototype.parseYieldExpression = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('yield');\n\t        var argument = null;\n\t        var delegate = false;\n\t        if (!this.hasLineTerminator) {\n\t            var previousAllowYield = this.context.allowYield;\n\t            this.context.allowYield = false;\n\t            delegate = this.match('*');\n\t            if (delegate) {\n\t                this.nextToken();\n\t                argument = this.parseAssignmentExpression();\n\t            }\n\t            else if (this.isStartOfExpression()) {\n\t                argument = this.parseAssignmentExpression();\n\t            }\n\t            this.context.allowYield = previousAllowYield;\n\t        }\n\t        return this.finalize(node, new Node.YieldExpression(argument, delegate));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-class-definitions\n\t    Parser.prototype.parseClassElement = function (hasConstructor) {\n\t        var token = this.lookahead;\n\t        var node = this.createNode();\n\t        var kind = '';\n\t        var key = null;\n\t        var value = null;\n\t        var computed = false;\n\t        var method = false;\n\t        var isStatic = false;\n\t        var isAsync = false;\n\t        if (this.match('*')) {\n\t            this.nextToken();\n\t        }\n\t        else {\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            var id = key;\n\t            if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) {\n\t                token = this.lookahead;\n\t                isStatic = true;\n\t                computed = this.match('[');\n\t                if (this.match('*')) {\n\t                    this.nextToken();\n\t                }\n\t                else {\n\t                    key = this.parseObjectPropertyKey();\n\t                }\n\t            }\n\t            if ((token.type === 3 /* Identifier */) && !this.hasLineTerminator && (token.value === 'async')) {\n\t                var punctuator = this.lookahead.value;\n\t                if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') {\n\t                    isAsync = true;\n\t                    token = this.lookahead;\n\t                    key = this.parseObjectPropertyKey();\n\t                    if (token.type === 3 /* Identifier */ && token.value === 'constructor') {\n\t                        this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync);\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t        if (token.type === 3 /* Identifier */) {\n\t            if (token.value === 'get' && lookaheadPropertyKey) {\n\t                kind = 'get';\n\t                computed = this.match('[');\n\t                key = this.parseObjectPropertyKey();\n\t                this.context.allowYield = false;\n\t                value = this.parseGetterMethod();\n\t            }\n\t            else if (token.value === 'set' && lookaheadPropertyKey) {\n\t                kind = 'set';\n\t                computed = this.match('[');\n\t                key = this.parseObjectPropertyKey();\n\t                value = this.parseSetterMethod();\n\t            }\n\t        }\n\t        else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t            kind = 'init';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            value = this.parseGeneratorMethod();\n\t            method = true;\n\t        }\n\t        if (!kind && key && this.match('(')) {\n\t            kind = 'init';\n\t            value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t            method = true;\n\t        }\n\t        if (!kind) {\n\t            this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        if (kind === 'init') {\n\t            kind = 'method';\n\t        }\n\t        if (!computed) {\n\t            if (isStatic && this.isPropertyKey(key, 'prototype')) {\n\t                this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype);\n\t            }\n\t            if (!isStatic && this.isPropertyKey(key, 'constructor')) {\n\t                if (kind !== 'method' || !method || (value && value.generator)) {\n\t                    this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod);\n\t                }\n\t                if (hasConstructor.value) {\n\t                    this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor);\n\t                }\n\t                else {\n\t                    hasConstructor.value = true;\n\t                }\n\t                kind = 'constructor';\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic));\n\t    };\n\t    Parser.prototype.parseClassElementList = function () {\n\t        var body = [];\n\t        var hasConstructor = { value: false };\n\t        this.expect('{');\n\t        while (!this.match('}')) {\n\t            if (this.match(';')) {\n\t                this.nextToken();\n\t            }\n\t            else {\n\t                body.push(this.parseClassElement(hasConstructor));\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return body;\n\t    };\n\t    Parser.prototype.parseClassBody = function () {\n\t        var node = this.createNode();\n\t        var elementList = this.parseClassElementList();\n\t        return this.finalize(node, new Node.ClassBody(elementList));\n\t    };\n\t    Parser.prototype.parseClassDeclaration = function (identifierIsOptional) {\n\t        var node = this.createNode();\n\t        var previousStrict = this.context.strict;\n\t        this.context.strict = true;\n\t        this.expectKeyword('class');\n\t        var id = (identifierIsOptional && (this.lookahead.type !== 3 /* Identifier */)) ? null : this.parseVariableIdentifier();\n\t        var superClass = null;\n\t        if (this.matchKeyword('extends')) {\n\t            this.nextToken();\n\t            superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t        }\n\t        var classBody = this.parseClassBody();\n\t        this.context.strict = previousStrict;\n\t        return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody));\n\t    };\n\t    Parser.prototype.parseClassExpression = function () {\n\t        var node = this.createNode();\n\t        var previousStrict = this.context.strict;\n\t        this.context.strict = true;\n\t        this.expectKeyword('class');\n\t        var id = (this.lookahead.type === 3 /* Identifier */) ? this.parseVariableIdentifier() : null;\n\t        var superClass = null;\n\t        if (this.matchKeyword('extends')) {\n\t            this.nextToken();\n\t            superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t        }\n\t        var classBody = this.parseClassBody();\n\t        this.context.strict = previousStrict;\n\t        return this.finalize(node, new Node.ClassExpression(id, superClass, classBody));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-scripts\n\t    // https://tc39.github.io/ecma262/#sec-modules\n\t    Parser.prototype.parseModule = function () {\n\t        this.context.strict = true;\n\t        this.context.isModule = true;\n\t        this.scanner.isModule = true;\n\t        var node = this.createNode();\n\t        var body = this.parseDirectivePrologues();\n\t        while (this.lookahead.type !== 2 /* EOF */) {\n\t            body.push(this.parseStatementListItem());\n\t        }\n\t        return this.finalize(node, new Node.Module(body));\n\t    };\n\t    Parser.prototype.parseScript = function () {\n\t        var node = this.createNode();\n\t        var body = this.parseDirectivePrologues();\n\t        while (this.lookahead.type !== 2 /* EOF */) {\n\t            body.push(this.parseStatementListItem());\n\t        }\n\t        return this.finalize(node, new Node.Script(body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-imports\n\t    Parser.prototype.parseModuleSpecifier = function () {\n\t        var node = this.createNode();\n\t        if (this.lookahead.type !== 8 /* StringLiteral */) {\n\t            this.throwError(messages_1.Messages.InvalidModuleSpecifier);\n\t        }\n\t        var token = this.nextToken();\n\t        var raw = this.getTokenRaw(token);\n\t        return this.finalize(node, new Node.Literal(token.value, raw));\n\t    };\n\t    // import {<foo as bar>} ...;\n\t    Parser.prototype.parseImportSpecifier = function () {\n\t        var node = this.createNode();\n\t        var imported;\n\t        var local;\n\t        if (this.lookahead.type === 3 /* Identifier */) {\n\t            imported = this.parseVariableIdentifier();\n\t            local = imported;\n\t            if (this.matchContextualKeyword('as')) {\n\t                this.nextToken();\n\t                local = this.parseVariableIdentifier();\n\t            }\n\t        }\n\t        else {\n\t            imported = this.parseIdentifierName();\n\t            local = imported;\n\t            if (this.matchContextualKeyword('as')) {\n\t                this.nextToken();\n\t                local = this.parseVariableIdentifier();\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.nextToken());\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.ImportSpecifier(local, imported));\n\t    };\n\t    // {foo, bar as bas}\n\t    Parser.prototype.parseNamedImports = function () {\n\t        this.expect('{');\n\t        var specifiers = [];\n\t        while (!this.match('}')) {\n\t            specifiers.push(this.parseImportSpecifier());\n\t            if (!this.match('}')) {\n\t                this.expect(',');\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return specifiers;\n\t    };\n\t    // import <foo> ...;\n\t    Parser.prototype.parseImportDefaultSpecifier = function () {\n\t        var node = this.createNode();\n\t        var local = this.parseIdentifierName();\n\t        return this.finalize(node, new Node.ImportDefaultSpecifier(local));\n\t    };\n\t    // import <* as foo> ...;\n\t    Parser.prototype.parseImportNamespaceSpecifier = function () {\n\t        var node = this.createNode();\n\t        this.expect('*');\n\t        if (!this.matchContextualKeyword('as')) {\n\t            this.throwError(messages_1.Messages.NoAsAfterImportNamespace);\n\t        }\n\t        this.nextToken();\n\t        var local = this.parseIdentifierName();\n\t        return this.finalize(node, new Node.ImportNamespaceSpecifier(local));\n\t    };\n\t    Parser.prototype.parseImportDeclaration = function () {\n\t        if (this.context.inFunctionBody) {\n\t            this.throwError(messages_1.Messages.IllegalImportDeclaration);\n\t        }\n\t        var node = this.createNode();\n\t        this.expectKeyword('import');\n\t        var src;\n\t        var specifiers = [];\n\t        if (this.lookahead.type === 8 /* StringLiteral */) {\n\t            // import 'foo';\n\t            src = this.parseModuleSpecifier();\n\t        }\n\t        else {\n\t            if (this.match('{')) {\n\t                // import {bar}\n\t                specifiers = specifiers.concat(this.parseNamedImports());\n\t            }\n\t            else if (this.match('*')) {\n\t                // import * as foo\n\t                specifiers.push(this.parseImportNamespaceSpecifier());\n\t            }\n\t            else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) {\n\t                // import foo\n\t                specifiers.push(this.parseImportDefaultSpecifier());\n\t                if (this.match(',')) {\n\t                    this.nextToken();\n\t                    if (this.match('*')) {\n\t                        // import foo, * as foo\n\t                        specifiers.push(this.parseImportNamespaceSpecifier());\n\t                    }\n\t                    else if (this.match('{')) {\n\t                        // import foo, {bar}\n\t                        specifiers = specifiers.concat(this.parseNamedImports());\n\t                    }\n\t                    else {\n\t                        this.throwUnexpectedToken(this.lookahead);\n\t                    }\n\t                }\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.nextToken());\n\t            }\n\t            if (!this.matchContextualKeyword('from')) {\n\t                var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t                this.throwError(message, this.lookahead.value);\n\t            }\n\t            this.nextToken();\n\t            src = this.parseModuleSpecifier();\n\t        }\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ImportDeclaration(specifiers, src));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-exports\n\t    Parser.prototype.parseExportSpecifier = function () {\n\t        var node = this.createNode();\n\t        var local = this.parseIdentifierName();\n\t        var exported = local;\n\t        if (this.matchContextualKeyword('as')) {\n\t            this.nextToken();\n\t            exported = this.parseIdentifierName();\n\t        }\n\t        return this.finalize(node, new Node.ExportSpecifier(local, exported));\n\t    };\n\t    Parser.prototype.parseExportDeclaration = function () {\n\t        if (this.context.inFunctionBody) {\n\t            this.throwError(messages_1.Messages.IllegalExportDeclaration);\n\t        }\n\t        var node = this.createNode();\n\t        this.expectKeyword('export');\n\t        var exportDeclaration;\n\t        if (this.matchKeyword('default')) {\n\t            // export default ...\n\t            this.nextToken();\n\t            if (this.matchKeyword('function')) {\n\t                // export default function foo () {}\n\t                // export default function () {}\n\t                var declaration = this.parseFunctionDeclaration(true);\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t            else if (this.matchKeyword('class')) {\n\t                // export default class foo {}\n\t                var declaration = this.parseClassDeclaration(true);\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t            else if (this.matchContextualKeyword('async')) {\n\t                // export default async function f () {}\n\t                // export default async function () {}\n\t                // export default async x => x\n\t                var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression();\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t            else {\n\t                if (this.matchContextualKeyword('from')) {\n\t                    this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value);\n\t                }\n\t                // export default {};\n\t                // export default [];\n\t                // export default (1 + 2);\n\t                var declaration = this.match('{') ? this.parseObjectInitializer() :\n\t                    this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression();\n\t                this.consumeSemicolon();\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t        }\n\t        else if (this.match('*')) {\n\t            // export * from 'foo';\n\t            this.nextToken();\n\t            if (!this.matchContextualKeyword('from')) {\n\t                var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t                this.throwError(message, this.lookahead.value);\n\t            }\n\t            this.nextToken();\n\t            var src = this.parseModuleSpecifier();\n\t            this.consumeSemicolon();\n\t            exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src));\n\t        }\n\t        else if (this.lookahead.type === 4 /* Keyword */) {\n\t            // export var f = 1;\n\t            var declaration = void 0;\n\t            switch (this.lookahead.value) {\n\t                case 'let':\n\t                case 'const':\n\t                    declaration = this.parseLexicalDeclaration({ inFor: false });\n\t                    break;\n\t                case 'var':\n\t                case 'class':\n\t                case 'function':\n\t                    declaration = this.parseStatementListItem();\n\t                    break;\n\t                default:\n\t                    this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t        }\n\t        else if (this.matchAsyncFunction()) {\n\t            var declaration = this.parseFunctionDeclaration();\n\t            exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t        }\n\t        else {\n\t            var specifiers = [];\n\t            var source = null;\n\t            var isExportFromIdentifier = false;\n\t            this.expect('{');\n\t            while (!this.match('}')) {\n\t                isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default');\n\t                specifiers.push(this.parseExportSpecifier());\n\t                if (!this.match('}')) {\n\t                    this.expect(',');\n\t                }\n\t            }\n\t            this.expect('}');\n\t            if (this.matchContextualKeyword('from')) {\n\t                // export {default} from 'foo';\n\t                // export {foo} from 'foo';\n\t                this.nextToken();\n\t                source = this.parseModuleSpecifier();\n\t                this.consumeSemicolon();\n\t            }\n\t            else if (isExportFromIdentifier) {\n\t                // export {default}; // missing fromClause\n\t                var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t                this.throwError(message, this.lookahead.value);\n\t            }\n\t            else {\n\t                // export {foo};\n\t                this.consumeSemicolon();\n\t            }\n\t            exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source));\n\t        }\n\t        return exportDeclaration;\n\t    };\n\t    return Parser;\n\t}());\n\texports.Parser = Parser;\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// Ensure the condition is true, otherwise throw an error.\n\t// This is only to have a better contract semantic, i.e. another safety net\n\t// to catch a logic error. The condition shall be fulfilled in normal case.\n\t// Do NOT use this to enforce a certain condition on any user input.\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tfunction assert(condition, message) {\n\t    /* istanbul ignore if */\n\t    if (!condition) {\n\t        throw new Error('ASSERT: ' + message);\n\t    }\n\t}\n\texports.assert = assert;\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t/* tslint:disable:max-classes-per-file */\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ErrorHandler = (function () {\n\t    function ErrorHandler() {\n\t        this.errors = [];\n\t        this.tolerant = false;\n\t    }\n\t    ErrorHandler.prototype.recordError = function (error) {\n\t        this.errors.push(error);\n\t    };\n\t    ErrorHandler.prototype.tolerate = function (error) {\n\t        if (this.tolerant) {\n\t            this.recordError(error);\n\t        }\n\t        else {\n\t            throw error;\n\t        }\n\t    };\n\t    ErrorHandler.prototype.constructError = function (msg, column) {\n\t        var error = new Error(msg);\n\t        try {\n\t            throw error;\n\t        }\n\t        catch (base) {\n\t            /* istanbul ignore else */\n\t            if (Object.create && Object.defineProperty) {\n\t                error = Object.create(base);\n\t                Object.defineProperty(error, 'column', { value: column });\n\t            }\n\t        }\n\t        /* istanbul ignore next */\n\t        return error;\n\t    };\n\t    ErrorHandler.prototype.createError = function (index, line, col, description) {\n\t        var msg = 'Line ' + line + ': ' + description;\n\t        var error = this.constructError(msg, col);\n\t        error.index = index;\n\t        error.lineNumber = line;\n\t        error.description = description;\n\t        return error;\n\t    };\n\t    ErrorHandler.prototype.throwError = function (index, line, col, description) {\n\t        throw this.createError(index, line, col, description);\n\t    };\n\t    ErrorHandler.prototype.tolerateError = function (index, line, col, description) {\n\t        var error = this.createError(index, line, col, description);\n\t        if (this.tolerant) {\n\t            this.recordError(error);\n\t        }\n\t        else {\n\t            throw error;\n\t        }\n\t    };\n\t    return ErrorHandler;\n\t}());\n\texports.ErrorHandler = ErrorHandler;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// Error messages should be identical to V8.\n\texports.Messages = {\n\t    BadGetterArity: 'Getter must not have any formal parameters',\n\t    BadSetterArity: 'Setter must have exactly one formal parameter',\n\t    BadSetterRestParameter: 'Setter function argument must not be a rest parameter',\n\t    ConstructorIsAsync: 'Class constructor may not be an async method',\n\t    ConstructorSpecialMethod: 'Class constructor may not be an accessor',\n\t    DeclarationMissingInitializer: 'Missing initializer in %0 declaration',\n\t    DefaultRestParameter: 'Unexpected token =',\n\t    DuplicateBinding: 'Duplicate binding %0',\n\t    DuplicateConstructor: 'A class may only have one constructor',\n\t    DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',\n\t    ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer',\n\t    GeneratorInLegacyContext: 'Generator declarations are not allowed in legacy contexts',\n\t    IllegalBreak: 'Illegal break statement',\n\t    IllegalContinue: 'Illegal continue statement',\n\t    IllegalExportDeclaration: 'Unexpected token',\n\t    IllegalImportDeclaration: 'Unexpected token',\n\t    IllegalLanguageModeDirective: 'Illegal \\'use strict\\' directive in function with non-simple parameter list',\n\t    IllegalReturn: 'Illegal return statement',\n\t    InvalidEscapedReservedWord: 'Keyword must not contain escaped characters',\n\t    InvalidHexEscapeSequence: 'Invalid hexadecimal escape sequence',\n\t    InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n\t    InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n\t    InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',\n\t    InvalidModuleSpecifier: 'Unexpected token',\n\t    InvalidRegExp: 'Invalid regular expression',\n\t    LetInLexicalBinding: 'let is disallowed as a lexically bound name',\n\t    MissingFromClause: 'Unexpected token',\n\t    MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n\t    NewlineAfterThrow: 'Illegal newline after throw',\n\t    NoAsAfterImportNamespace: 'Unexpected token',\n\t    NoCatchOrFinally: 'Missing catch or finally after try',\n\t    ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',\n\t    Redeclaration: '%0 \\'%1\\' has already been declared',\n\t    StaticPrototype: 'Classes may not have static property named prototype',\n\t    StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n\t    StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n\t    StrictFunction: 'In strict mode code, functions can only be declared at top level or inside a block',\n\t    StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n\t    StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n\t    StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n\t    StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n\t    StrictModeWith: 'Strict mode code may not include a with statement',\n\t    StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n\t    StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n\t    StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n\t    StrictReservedWord: 'Use of future reserved word in strict mode',\n\t    StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n\t    TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',\n\t    UnexpectedEOS: 'Unexpected end of input',\n\t    UnexpectedIdentifier: 'Unexpected identifier',\n\t    UnexpectedNumber: 'Unexpected number',\n\t    UnexpectedReserved: 'Unexpected reserved word',\n\t    UnexpectedString: 'Unexpected string',\n\t    UnexpectedTemplate: 'Unexpected quasi %0',\n\t    UnexpectedToken: 'Unexpected token %0',\n\t    UnexpectedTokenIllegal: 'Unexpected token ILLEGAL',\n\t    UnknownLabel: 'Undefined label \\'%0\\'',\n\t    UnterminatedRegExp: 'Invalid regular expression: missing /'\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __webpack_require__(9);\n\tvar character_1 = __webpack_require__(4);\n\tvar messages_1 = __webpack_require__(11);\n\tfunction hexValue(ch) {\n\t    return '0123456789abcdef'.indexOf(ch.toLowerCase());\n\t}\n\tfunction octalValue(ch) {\n\t    return '01234567'.indexOf(ch);\n\t}\n\tvar Scanner = (function () {\n\t    function Scanner(code, handler) {\n\t        this.source = code;\n\t        this.errorHandler = handler;\n\t        this.trackComment = false;\n\t        this.isModule = false;\n\t        this.length = code.length;\n\t        this.index = 0;\n\t        this.lineNumber = (code.length > 0) ? 1 : 0;\n\t        this.lineStart = 0;\n\t        this.curlyStack = [];\n\t    }\n\t    Scanner.prototype.saveState = function () {\n\t        return {\n\t            index: this.index,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart\n\t        };\n\t    };\n\t    Scanner.prototype.restoreState = function (state) {\n\t        this.index = state.index;\n\t        this.lineNumber = state.lineNumber;\n\t        this.lineStart = state.lineStart;\n\t    };\n\t    Scanner.prototype.eof = function () {\n\t        return this.index >= this.length;\n\t    };\n\t    Scanner.prototype.throwUnexpectedToken = function (message) {\n\t        if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t        return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t    };\n\t    Scanner.prototype.tolerateUnexpectedToken = function (message) {\n\t        if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t        this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-comments\n\t    Scanner.prototype.skipSingleLineComment = function (offset) {\n\t        var comments = [];\n\t        var start, loc;\n\t        if (this.trackComment) {\n\t            comments = [];\n\t            start = this.index - offset;\n\t            loc = {\n\t                start: {\n\t                    line: this.lineNumber,\n\t                    column: this.index - this.lineStart - offset\n\t                },\n\t                end: {}\n\t            };\n\t        }\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            ++this.index;\n\t            if (character_1.Character.isLineTerminator(ch)) {\n\t                if (this.trackComment) {\n\t                    loc.end = {\n\t                        line: this.lineNumber,\n\t                        column: this.index - this.lineStart - 1\n\t                    };\n\t                    var entry = {\n\t                        multiLine: false,\n\t                        slice: [start + offset, this.index - 1],\n\t                        range: [start, this.index - 1],\n\t                        loc: loc\n\t                    };\n\t                    comments.push(entry);\n\t                }\n\t                if (ch === 13 && this.source.charCodeAt(this.index) === 10) {\n\t                    ++this.index;\n\t                }\n\t                ++this.lineNumber;\n\t                this.lineStart = this.index;\n\t                return comments;\n\t            }\n\t        }\n\t        if (this.trackComment) {\n\t            loc.end = {\n\t                line: this.lineNumber,\n\t                column: this.index - this.lineStart\n\t            };\n\t            var entry = {\n\t                multiLine: false,\n\t                slice: [start + offset, this.index],\n\t                range: [start, this.index],\n\t                loc: loc\n\t            };\n\t            comments.push(entry);\n\t        }\n\t        return comments;\n\t    };\n\t    Scanner.prototype.skipMultiLineComment = function () {\n\t        var comments = [];\n\t        var start, loc;\n\t        if (this.trackComment) {\n\t            comments = [];\n\t            start = this.index - 2;\n\t            loc = {\n\t                start: {\n\t                    line: this.lineNumber,\n\t                    column: this.index - this.lineStart - 2\n\t                },\n\t                end: {}\n\t            };\n\t        }\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            if (character_1.Character.isLineTerminator(ch)) {\n\t                if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) {\n\t                    ++this.index;\n\t                }\n\t                ++this.lineNumber;\n\t                ++this.index;\n\t                this.lineStart = this.index;\n\t            }\n\t            else if (ch === 0x2A) {\n\t                // Block comment ends with '*/'.\n\t                if (this.source.charCodeAt(this.index + 1) === 0x2F) {\n\t                    this.index += 2;\n\t                    if (this.trackComment) {\n\t                        loc.end = {\n\t                            line: this.lineNumber,\n\t                            column: this.index - this.lineStart\n\t                        };\n\t                        var entry = {\n\t                            multiLine: true,\n\t                            slice: [start + 2, this.index - 2],\n\t                            range: [start, this.index],\n\t                            loc: loc\n\t                        };\n\t                        comments.push(entry);\n\t                    }\n\t                    return comments;\n\t                }\n\t                ++this.index;\n\t            }\n\t            else {\n\t                ++this.index;\n\t            }\n\t        }\n\t        // Ran off the end of the file - the whole thing is a comment\n\t        if (this.trackComment) {\n\t            loc.end = {\n\t                line: this.lineNumber,\n\t                column: this.index - this.lineStart\n\t            };\n\t            var entry = {\n\t                multiLine: true,\n\t                slice: [start + 2, this.index],\n\t                range: [start, this.index],\n\t                loc: loc\n\t            };\n\t            comments.push(entry);\n\t        }\n\t        this.tolerateUnexpectedToken();\n\t        return comments;\n\t    };\n\t    Scanner.prototype.scanComments = function () {\n\t        var comments;\n\t        if (this.trackComment) {\n\t            comments = [];\n\t        }\n\t        var start = (this.index === 0);\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            if (character_1.Character.isWhiteSpace(ch)) {\n\t                ++this.index;\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch)) {\n\t                ++this.index;\n\t                if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) {\n\t                    ++this.index;\n\t                }\n\t                ++this.lineNumber;\n\t                this.lineStart = this.index;\n\t                start = true;\n\t            }\n\t            else if (ch === 0x2F) {\n\t                ch = this.source.charCodeAt(this.index + 1);\n\t                if (ch === 0x2F) {\n\t                    this.index += 2;\n\t                    var comment = this.skipSingleLineComment(2);\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                    start = true;\n\t                }\n\t                else if (ch === 0x2A) {\n\t                    this.index += 2;\n\t                    var comment = this.skipMultiLineComment();\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            else if (start && ch === 0x2D) {\n\t                // U+003E is '>'\n\t                if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) {\n\t                    // '-->' is a single-line comment\n\t                    this.index += 3;\n\t                    var comment = this.skipSingleLineComment(3);\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            else if (ch === 0x3C && !this.isModule) {\n\t                if (this.source.slice(this.index + 1, this.index + 4) === '!--') {\n\t                    this.index += 4; // `<!--`\n\t                    var comment = this.skipSingleLineComment(4);\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return comments;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-future-reserved-words\n\t    Scanner.prototype.isFutureReservedWord = function (id) {\n\t        switch (id) {\n\t            case 'enum':\n\t            case 'export':\n\t            case 'import':\n\t            case 'super':\n\t                return true;\n\t            default:\n\t                return false;\n\t        }\n\t    };\n\t    Scanner.prototype.isStrictModeReservedWord = function (id) {\n\t        switch (id) {\n\t            case 'implements':\n\t            case 'interface':\n\t            case 'package':\n\t            case 'private':\n\t            case 'protected':\n\t            case 'public':\n\t            case 'static':\n\t            case 'yield':\n\t            case 'let':\n\t                return true;\n\t            default:\n\t                return false;\n\t        }\n\t    };\n\t    Scanner.prototype.isRestrictedWord = function (id) {\n\t        return id === 'eval' || id === 'arguments';\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-keywords\n\t    Scanner.prototype.isKeyword = function (id) {\n\t        switch (id.length) {\n\t            case 2:\n\t                return (id === 'if') || (id === 'in') || (id === 'do');\n\t            case 3:\n\t                return (id === 'var') || (id === 'for') || (id === 'new') ||\n\t                    (id === 'try') || (id === 'let');\n\t            case 4:\n\t                return (id === 'this') || (id === 'else') || (id === 'case') ||\n\t                    (id === 'void') || (id === 'with') || (id === 'enum');\n\t            case 5:\n\t                return (id === 'while') || (id === 'break') || (id === 'catch') ||\n\t                    (id === 'throw') || (id === 'const') || (id === 'yield') ||\n\t                    (id === 'class') || (id === 'super');\n\t            case 6:\n\t                return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n\t                    (id === 'switch') || (id === 'export') || (id === 'import');\n\t            case 7:\n\t                return (id === 'default') || (id === 'finally') || (id === 'extends');\n\t            case 8:\n\t                return (id === 'function') || (id === 'continue') || (id === 'debugger');\n\t            case 10:\n\t                return (id === 'instanceof');\n\t            default:\n\t                return false;\n\t        }\n\t    };\n\t    Scanner.prototype.codePointAt = function (i) {\n\t        var cp = this.source.charCodeAt(i);\n\t        if (cp >= 0xD800 && cp <= 0xDBFF) {\n\t            var second = this.source.charCodeAt(i + 1);\n\t            if (second >= 0xDC00 && second <= 0xDFFF) {\n\t                var first = cp;\n\t                cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n\t            }\n\t        }\n\t        return cp;\n\t    };\n\t    Scanner.prototype.scanHexEscape = function (prefix) {\n\t        var len = (prefix === 'u') ? 4 : 2;\n\t        var code = 0;\n\t        for (var i = 0; i < len; ++i) {\n\t            if (!this.eof() && character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {\n\t                code = code * 16 + hexValue(this.source[this.index++]);\n\t            }\n\t            else {\n\t                return null;\n\t            }\n\t        }\n\t        return String.fromCharCode(code);\n\t    };\n\t    Scanner.prototype.scanUnicodeCodePointEscape = function () {\n\t        var ch = this.source[this.index];\n\t        var code = 0;\n\t        // At least, one hex digit is required.\n\t        if (ch === '}') {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        while (!this.eof()) {\n\t            ch = this.source[this.index++];\n\t            if (!character_1.Character.isHexDigit(ch.charCodeAt(0))) {\n\t                break;\n\t            }\n\t            code = code * 16 + hexValue(ch);\n\t        }\n\t        if (code > 0x10FFFF || ch !== '}') {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return character_1.Character.fromCodePoint(code);\n\t    };\n\t    Scanner.prototype.getIdentifier = function () {\n\t        var start = this.index++;\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            if (ch === 0x5C) {\n\t                // Blackslash (U+005C) marks Unicode escape sequence.\n\t                this.index = start;\n\t                return this.getComplexIdentifier();\n\t            }\n\t            else if (ch >= 0xD800 && ch < 0xDFFF) {\n\t                // Need to handle surrogate pairs.\n\t                this.index = start;\n\t                return this.getComplexIdentifier();\n\t            }\n\t            if (character_1.Character.isIdentifierPart(ch)) {\n\t                ++this.index;\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return this.source.slice(start, this.index);\n\t    };\n\t    Scanner.prototype.getComplexIdentifier = function () {\n\t        var cp = this.codePointAt(this.index);\n\t        var id = character_1.Character.fromCodePoint(cp);\n\t        this.index += id.length;\n\t        // '\\u' (U+005C, U+0075) denotes an escaped character.\n\t        var ch;\n\t        if (cp === 0x5C) {\n\t            if (this.source.charCodeAt(this.index) !== 0x75) {\n\t                this.throwUnexpectedToken();\n\t            }\n\t            ++this.index;\n\t            if (this.source[this.index] === '{') {\n\t                ++this.index;\n\t                ch = this.scanUnicodeCodePointEscape();\n\t            }\n\t            else {\n\t                ch = this.scanHexEscape('u');\n\t                if (ch === null || ch === '\\\\' || !character_1.Character.isIdentifierStart(ch.charCodeAt(0))) {\n\t                    this.throwUnexpectedToken();\n\t                }\n\t            }\n\t            id = ch;\n\t        }\n\t        while (!this.eof()) {\n\t            cp = this.codePointAt(this.index);\n\t            if (!character_1.Character.isIdentifierPart(cp)) {\n\t                break;\n\t            }\n\t            ch = character_1.Character.fromCodePoint(cp);\n\t            id += ch;\n\t            this.index += ch.length;\n\t            // '\\u' (U+005C, U+0075) denotes an escaped character.\n\t            if (cp === 0x5C) {\n\t                id = id.substr(0, id.length - 1);\n\t                if (this.source.charCodeAt(this.index) !== 0x75) {\n\t                    this.throwUnexpectedToken();\n\t                }\n\t                ++this.index;\n\t                if (this.source[this.index] === '{') {\n\t                    ++this.index;\n\t                    ch = this.scanUnicodeCodePointEscape();\n\t                }\n\t                else {\n\t                    ch = this.scanHexEscape('u');\n\t                    if (ch === null || ch === '\\\\' || !character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {\n\t                        this.throwUnexpectedToken();\n\t                    }\n\t                }\n\t                id += ch;\n\t            }\n\t        }\n\t        return id;\n\t    };\n\t    Scanner.prototype.octalToDecimal = function (ch) {\n\t        // \\0 is not octal escape sequence\n\t        var octal = (ch !== '0');\n\t        var code = octalValue(ch);\n\t        if (!this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t            octal = true;\n\t            code = code * 8 + octalValue(this.source[this.index++]);\n\t            // 3 digits are only allowed when string starts\n\t            // with 0, 1, 2, 3\n\t            if ('0123'.indexOf(ch) >= 0 && !this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t                code = code * 8 + octalValue(this.source[this.index++]);\n\t            }\n\t        }\n\t        return {\n\t            code: code,\n\t            octal: octal\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-names-and-keywords\n\t    Scanner.prototype.scanIdentifier = function () {\n\t        var type;\n\t        var start = this.index;\n\t        // Backslash (U+005C) starts an escaped character.\n\t        var id = (this.source.charCodeAt(start) === 0x5C) ? this.getComplexIdentifier() : this.getIdentifier();\n\t        // There is no keyword or literal with only one character.\n\t        // Thus, it must be an identifier.\n\t        if (id.length === 1) {\n\t            type = 3 /* Identifier */;\n\t        }\n\t        else if (this.isKeyword(id)) {\n\t            type = 4 /* Keyword */;\n\t        }\n\t        else if (id === 'null') {\n\t            type = 5 /* NullLiteral */;\n\t        }\n\t        else if (id === 'true' || id === 'false') {\n\t            type = 1 /* BooleanLiteral */;\n\t        }\n\t        else {\n\t            type = 3 /* Identifier */;\n\t        }\n\t        if (type !== 3 /* Identifier */ && (start + id.length !== this.index)) {\n\t            var restore = this.index;\n\t            this.index = start;\n\t            this.tolerateUnexpectedToken(messages_1.Messages.InvalidEscapedReservedWord);\n\t            this.index = restore;\n\t        }\n\t        return {\n\t            type: type,\n\t            value: id,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-punctuators\n\t    Scanner.prototype.scanPunctuator = function () {\n\t        var start = this.index;\n\t        // Check for most common single-character punctuators.\n\t        var str = this.source[this.index];\n\t        switch (str) {\n\t            case '(':\n\t            case '{':\n\t                if (str === '{') {\n\t                    this.curlyStack.push('{');\n\t                }\n\t                ++this.index;\n\t                break;\n\t            case '.':\n\t                ++this.index;\n\t                if (this.source[this.index] === '.' && this.source[this.index + 1] === '.') {\n\t                    // Spread operator: ...\n\t                    this.index += 2;\n\t                    str = '...';\n\t                }\n\t                break;\n\t            case '}':\n\t                ++this.index;\n\t                this.curlyStack.pop();\n\t                break;\n\t            case ')':\n\t            case ';':\n\t            case ',':\n\t            case '[':\n\t            case ']':\n\t            case ':':\n\t            case '?':\n\t            case '~':\n\t                ++this.index;\n\t                break;\n\t            default:\n\t                // 4-character punctuator.\n\t                str = this.source.substr(this.index, 4);\n\t                if (str === '>>>=') {\n\t                    this.index += 4;\n\t                }\n\t                else {\n\t                    // 3-character punctuators.\n\t                    str = str.substr(0, 3);\n\t                    if (str === '===' || str === '!==' || str === '>>>' ||\n\t                        str === '<<=' || str === '>>=' || str === '**=') {\n\t                        this.index += 3;\n\t                    }\n\t                    else {\n\t                        // 2-character punctuators.\n\t                        str = str.substr(0, 2);\n\t                        if (str === '&&' || str === '||' || str === '==' || str === '!=' ||\n\t                            str === '+=' || str === '-=' || str === '*=' || str === '/=' ||\n\t                            str === '++' || str === '--' || str === '<<' || str === '>>' ||\n\t                            str === '&=' || str === '|=' || str === '^=' || str === '%=' ||\n\t                            str === '<=' || str === '>=' || str === '=>' || str === '**') {\n\t                            this.index += 2;\n\t                        }\n\t                        else {\n\t                            // 1-character punctuators.\n\t                            str = this.source[this.index];\n\t                            if ('<>=!+-*%&|^/'.indexOf(str) >= 0) {\n\t                                ++this.index;\n\t                            }\n\t                        }\n\t                    }\n\t                }\n\t        }\n\t        if (this.index === start) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 7 /* Punctuator */,\n\t            value: str,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n\t    Scanner.prototype.scanHexLiteral = function (start) {\n\t        var num = '';\n\t        while (!this.eof()) {\n\t            if (!character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {\n\t                break;\n\t            }\n\t            num += this.source[this.index++];\n\t        }\n\t        if (num.length === 0) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseInt('0x' + num, 16),\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.scanBinaryLiteral = function (start) {\n\t        var num = '';\n\t        var ch;\n\t        while (!this.eof()) {\n\t            ch = this.source[this.index];\n\t            if (ch !== '0' && ch !== '1') {\n\t                break;\n\t            }\n\t            num += this.source[this.index++];\n\t        }\n\t        if (num.length === 0) {\n\t            // only 0b or 0B\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (!this.eof()) {\n\t            ch = this.source.charCodeAt(this.index);\n\t            /* istanbul ignore else */\n\t            if (character_1.Character.isIdentifierStart(ch) || character_1.Character.isDecimalDigit(ch)) {\n\t                this.throwUnexpectedToken();\n\t            }\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseInt(num, 2),\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.scanOctalLiteral = function (prefix, start) {\n\t        var num = '';\n\t        var octal = false;\n\t        if (character_1.Character.isOctalDigit(prefix.charCodeAt(0))) {\n\t            octal = true;\n\t            num = '0' + this.source[this.index++];\n\t        }\n\t        else {\n\t            ++this.index;\n\t        }\n\t        while (!this.eof()) {\n\t            if (!character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t                break;\n\t            }\n\t            num += this.source[this.index++];\n\t        }\n\t        if (!octal && num.length === 0) {\n\t            // only 0o or 0O\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index)) || character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseInt(num, 8),\n\t            octal: octal,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.isImplicitOctalLiteral = function () {\n\t        // Implicit octal, unless there is a non-octal digit.\n\t        // (Annex B.1.1 on Numeric Literals)\n\t        for (var i = this.index + 1; i < this.length; ++i) {\n\t            var ch = this.source[i];\n\t            if (ch === '8' || ch === '9') {\n\t                return false;\n\t            }\n\t            if (!character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                return true;\n\t            }\n\t        }\n\t        return true;\n\t    };\n\t    Scanner.prototype.scanNumericLiteral = function () {\n\t        var start = this.index;\n\t        var ch = this.source[start];\n\t        assert_1.assert(character_1.Character.isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), 'Numeric literal must start with a decimal digit or a decimal point');\n\t        var num = '';\n\t        if (ch !== '.') {\n\t            num = this.source[this.index++];\n\t            ch = this.source[this.index];\n\t            // Hex number starts with '0x'.\n\t            // Octal number starts with '0'.\n\t            // Octal number in ES6 starts with '0o'.\n\t            // Binary number in ES6 starts with '0b'.\n\t            if (num === '0') {\n\t                if (ch === 'x' || ch === 'X') {\n\t                    ++this.index;\n\t                    return this.scanHexLiteral(start);\n\t                }\n\t                if (ch === 'b' || ch === 'B') {\n\t                    ++this.index;\n\t                    return this.scanBinaryLiteral(start);\n\t                }\n\t                if (ch === 'o' || ch === 'O') {\n\t                    return this.scanOctalLiteral(ch, start);\n\t                }\n\t                if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                    if (this.isImplicitOctalLiteral()) {\n\t                        return this.scanOctalLiteral(ch, start);\n\t                    }\n\t                }\n\t            }\n\t            while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                num += this.source[this.index++];\n\t            }\n\t            ch = this.source[this.index];\n\t        }\n\t        if (ch === '.') {\n\t            num += this.source[this.index++];\n\t            while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                num += this.source[this.index++];\n\t            }\n\t            ch = this.source[this.index];\n\t        }\n\t        if (ch === 'e' || ch === 'E') {\n\t            num += this.source[this.index++];\n\t            ch = this.source[this.index];\n\t            if (ch === '+' || ch === '-') {\n\t                num += this.source[this.index++];\n\t            }\n\t            if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                    num += this.source[this.index++];\n\t                }\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken();\n\t            }\n\t        }\n\t        if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseFloat(num),\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-literals-string-literals\n\t    Scanner.prototype.scanStringLiteral = function () {\n\t        var start = this.index;\n\t        var quote = this.source[start];\n\t        assert_1.assert((quote === '\\'' || quote === '\"'), 'String literal must starts with a quote');\n\t        ++this.index;\n\t        var octal = false;\n\t        var str = '';\n\t        while (!this.eof()) {\n\t            var ch = this.source[this.index++];\n\t            if (ch === quote) {\n\t                quote = '';\n\t                break;\n\t            }\n\t            else if (ch === '\\\\') {\n\t                ch = this.source[this.index++];\n\t                if (!ch || !character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                    switch (ch) {\n\t                        case 'u':\n\t                            if (this.source[this.index] === '{') {\n\t                                ++this.index;\n\t                                str += this.scanUnicodeCodePointEscape();\n\t                            }\n\t                            else {\n\t                                var unescaped_1 = this.scanHexEscape(ch);\n\t                                if (unescaped_1 === null) {\n\t                                    this.throwUnexpectedToken();\n\t                                }\n\t                                str += unescaped_1;\n\t                            }\n\t                            break;\n\t                        case 'x':\n\t                            var unescaped = this.scanHexEscape(ch);\n\t                            if (unescaped === null) {\n\t                                this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);\n\t                            }\n\t                            str += unescaped;\n\t                            break;\n\t                        case 'n':\n\t                            str += '\\n';\n\t                            break;\n\t                        case 'r':\n\t                            str += '\\r';\n\t                            break;\n\t                        case 't':\n\t                            str += '\\t';\n\t                            break;\n\t                        case 'b':\n\t                            str += '\\b';\n\t                            break;\n\t                        case 'f':\n\t                            str += '\\f';\n\t                            break;\n\t                        case 'v':\n\t                            str += '\\x0B';\n\t                            break;\n\t                        case '8':\n\t                        case '9':\n\t                            str += ch;\n\t                            this.tolerateUnexpectedToken();\n\t                            break;\n\t                        default:\n\t                            if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                                var octToDec = this.octalToDecimal(ch);\n\t                                octal = octToDec.octal || octal;\n\t                                str += String.fromCharCode(octToDec.code);\n\t                            }\n\t                            else {\n\t                                str += ch;\n\t                            }\n\t                            break;\n\t                    }\n\t                }\n\t                else {\n\t                    ++this.lineNumber;\n\t                    if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t                        ++this.index;\n\t                    }\n\t                    this.lineStart = this.index;\n\t                }\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                break;\n\t            }\n\t            else {\n\t                str += ch;\n\t            }\n\t        }\n\t        if (quote !== '') {\n\t            this.index = start;\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 8 /* StringLiteral */,\n\t            value: str,\n\t            octal: octal,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-template-literal-lexical-components\n\t    Scanner.prototype.scanTemplate = function () {\n\t        var cooked = '';\n\t        var terminated = false;\n\t        var start = this.index;\n\t        var head = (this.source[start] === '`');\n\t        var tail = false;\n\t        var rawOffset = 2;\n\t        ++this.index;\n\t        while (!this.eof()) {\n\t            var ch = this.source[this.index++];\n\t            if (ch === '`') {\n\t                rawOffset = 1;\n\t                tail = true;\n\t                terminated = true;\n\t                break;\n\t            }\n\t            else if (ch === '$') {\n\t                if (this.source[this.index] === '{') {\n\t                    this.curlyStack.push('${');\n\t                    ++this.index;\n\t                    terminated = true;\n\t                    break;\n\t                }\n\t                cooked += ch;\n\t            }\n\t            else if (ch === '\\\\') {\n\t                ch = this.source[this.index++];\n\t                if (!character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                    switch (ch) {\n\t                        case 'n':\n\t                            cooked += '\\n';\n\t                            break;\n\t                        case 'r':\n\t                            cooked += '\\r';\n\t                            break;\n\t                        case 't':\n\t                            cooked += '\\t';\n\t                            break;\n\t                        case 'u':\n\t                            if (this.source[this.index] === '{') {\n\t                                ++this.index;\n\t                                cooked += this.scanUnicodeCodePointEscape();\n\t                            }\n\t                            else {\n\t                                var restore = this.index;\n\t                                var unescaped_2 = this.scanHexEscape(ch);\n\t                                if (unescaped_2 !== null) {\n\t                                    cooked += unescaped_2;\n\t                                }\n\t                                else {\n\t                                    this.index = restore;\n\t                                    cooked += ch;\n\t                                }\n\t                            }\n\t                            break;\n\t                        case 'x':\n\t                            var unescaped = this.scanHexEscape(ch);\n\t                            if (unescaped === null) {\n\t                                this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);\n\t                            }\n\t                            cooked += unescaped;\n\t                            break;\n\t                        case 'b':\n\t                            cooked += '\\b';\n\t                            break;\n\t                        case 'f':\n\t                            cooked += '\\f';\n\t                            break;\n\t                        case 'v':\n\t                            cooked += '\\v';\n\t                            break;\n\t                        default:\n\t                            if (ch === '0') {\n\t                                if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                                    // Illegal: \\01 \\02 and so on\n\t                                    this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);\n\t                                }\n\t                                cooked += '\\0';\n\t                            }\n\t                            else if (character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                                // Illegal: \\1 \\2\n\t                                this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);\n\t                            }\n\t                            else {\n\t                                cooked += ch;\n\t                            }\n\t                            break;\n\t                    }\n\t                }\n\t                else {\n\t                    ++this.lineNumber;\n\t                    if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t                        ++this.index;\n\t                    }\n\t                    this.lineStart = this.index;\n\t                }\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                ++this.lineNumber;\n\t                if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t                    ++this.index;\n\t                }\n\t                this.lineStart = this.index;\n\t                cooked += '\\n';\n\t            }\n\t            else {\n\t                cooked += ch;\n\t            }\n\t        }\n\t        if (!terminated) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (!head) {\n\t            this.curlyStack.pop();\n\t        }\n\t        return {\n\t            type: 10 /* Template */,\n\t            value: this.source.slice(start + 1, this.index - rawOffset),\n\t            cooked: cooked,\n\t            head: head,\n\t            tail: tail,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n\t    Scanner.prototype.testRegExp = function (pattern, flags) {\n\t        // The BMP character to use as a replacement for astral symbols when\n\t        // translating an ES6 \"u\"-flagged pattern to an ES5-compatible\n\t        // approximation.\n\t        // Note: replacing with '\\uFFFF' enables false positives in unlikely\n\t        // scenarios. For example, `[\\u{1044f}-\\u{10440}]` is an invalid\n\t        // pattern that would not be detected by this substitution.\n\t        var astralSubstitute = '\\uFFFF';\n\t        var tmp = pattern;\n\t        var self = this;\n\t        if (flags.indexOf('u') >= 0) {\n\t            tmp = tmp\n\t                .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {\n\t                var codePoint = parseInt($1 || $2, 16);\n\t                if (codePoint > 0x10FFFF) {\n\t                    self.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);\n\t                }\n\t                if (codePoint <= 0xFFFF) {\n\t                    return String.fromCharCode(codePoint);\n\t                }\n\t                return astralSubstitute;\n\t            })\n\t                .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, astralSubstitute);\n\t        }\n\t        // First, detect invalid regular expressions.\n\t        try {\n\t            RegExp(tmp);\n\t        }\n\t        catch (e) {\n\t            this.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);\n\t        }\n\t        // Return a regular expression object for this pattern-flag pair, or\n\t        // `null` in case the current environment doesn't support the flags it\n\t        // uses.\n\t        try {\n\t            return new RegExp(pattern, flags);\n\t        }\n\t        catch (exception) {\n\t            /* istanbul ignore next */\n\t            return null;\n\t        }\n\t    };\n\t    Scanner.prototype.scanRegExpBody = function () {\n\t        var ch = this.source[this.index];\n\t        assert_1.assert(ch === '/', 'Regular expression literal must start with a slash');\n\t        var str = this.source[this.index++];\n\t        var classMarker = false;\n\t        var terminated = false;\n\t        while (!this.eof()) {\n\t            ch = this.source[this.index++];\n\t            str += ch;\n\t            if (ch === '\\\\') {\n\t                ch = this.source[this.index++];\n\t                // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n\t                if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                    this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t                }\n\t                str += ch;\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t            }\n\t            else if (classMarker) {\n\t                if (ch === ']') {\n\t                    classMarker = false;\n\t                }\n\t            }\n\t            else {\n\t                if (ch === '/') {\n\t                    terminated = true;\n\t                    break;\n\t                }\n\t                else if (ch === '[') {\n\t                    classMarker = true;\n\t                }\n\t            }\n\t        }\n\t        if (!terminated) {\n\t            this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t        }\n\t        // Exclude leading and trailing slash.\n\t        return str.substr(1, str.length - 2);\n\t    };\n\t    Scanner.prototype.scanRegExpFlags = function () {\n\t        var str = '';\n\t        var flags = '';\n\t        while (!this.eof()) {\n\t            var ch = this.source[this.index];\n\t            if (!character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {\n\t                break;\n\t            }\n\t            ++this.index;\n\t            if (ch === '\\\\' && !this.eof()) {\n\t                ch = this.source[this.index];\n\t                if (ch === 'u') {\n\t                    ++this.index;\n\t                    var restore = this.index;\n\t                    var char = this.scanHexEscape('u');\n\t                    if (char !== null) {\n\t                        flags += char;\n\t                        for (str += '\\\\u'; restore < this.index; ++restore) {\n\t                            str += this.source[restore];\n\t                        }\n\t                    }\n\t                    else {\n\t                        this.index = restore;\n\t                        flags += 'u';\n\t                        str += '\\\\u';\n\t                    }\n\t                    this.tolerateUnexpectedToken();\n\t                }\n\t                else {\n\t                    str += '\\\\';\n\t                    this.tolerateUnexpectedToken();\n\t                }\n\t            }\n\t            else {\n\t                flags += ch;\n\t                str += ch;\n\t            }\n\t        }\n\t        return flags;\n\t    };\n\t    Scanner.prototype.scanRegExp = function () {\n\t        var start = this.index;\n\t        var pattern = this.scanRegExpBody();\n\t        var flags = this.scanRegExpFlags();\n\t        var value = this.testRegExp(pattern, flags);\n\t        return {\n\t            type: 9 /* RegularExpression */,\n\t            value: '',\n\t            pattern: pattern,\n\t            flags: flags,\n\t            regex: value,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.lex = function () {\n\t        if (this.eof()) {\n\t            return {\n\t                type: 2 /* EOF */,\n\t                value: '',\n\t                lineNumber: this.lineNumber,\n\t                lineStart: this.lineStart,\n\t                start: this.index,\n\t                end: this.index\n\t            };\n\t        }\n\t        var cp = this.source.charCodeAt(this.index);\n\t        if (character_1.Character.isIdentifierStart(cp)) {\n\t            return this.scanIdentifier();\n\t        }\n\t        // Very common: ( and ) and ;\n\t        if (cp === 0x28 || cp === 0x29 || cp === 0x3B) {\n\t            return this.scanPunctuator();\n\t        }\n\t        // String literal starts with single quote (U+0027) or double quote (U+0022).\n\t        if (cp === 0x27 || cp === 0x22) {\n\t            return this.scanStringLiteral();\n\t        }\n\t        // Dot (.) U+002E can also start a floating-point number, hence the need\n\t        // to check the next character.\n\t        if (cp === 0x2E) {\n\t            if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index + 1))) {\n\t                return this.scanNumericLiteral();\n\t            }\n\t            return this.scanPunctuator();\n\t        }\n\t        if (character_1.Character.isDecimalDigit(cp)) {\n\t            return this.scanNumericLiteral();\n\t        }\n\t        // Template literals start with ` (U+0060) for template head\n\t        // or } (U+007D) for template middle or template tail.\n\t        if (cp === 0x60 || (cp === 0x7D && this.curlyStack[this.curlyStack.length - 1] === '${')) {\n\t            return this.scanTemplate();\n\t        }\n\t        // Possible identifier start in a surrogate pair.\n\t        if (cp >= 0xD800 && cp < 0xDFFF) {\n\t            if (character_1.Character.isIdentifierStart(this.codePointAt(this.index))) {\n\t                return this.scanIdentifier();\n\t            }\n\t        }\n\t        return this.scanPunctuator();\n\t    };\n\t    return Scanner;\n\t}());\n\texports.Scanner = Scanner;\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.TokenName = {};\n\texports.TokenName[1 /* BooleanLiteral */] = 'Boolean';\n\texports.TokenName[2 /* EOF */] = '<end>';\n\texports.TokenName[3 /* Identifier */] = 'Identifier';\n\texports.TokenName[4 /* Keyword */] = 'Keyword';\n\texports.TokenName[5 /* NullLiteral */] = 'Null';\n\texports.TokenName[6 /* NumericLiteral */] = 'Numeric';\n\texports.TokenName[7 /* Punctuator */] = 'Punctuator';\n\texports.TokenName[8 /* StringLiteral */] = 'String';\n\texports.TokenName[9 /* RegularExpression */] = 'RegularExpression';\n\texports.TokenName[10 /* Template */] = 'Template';\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// Generated by generate-xhtml-entities.js. DO NOT MODIFY!\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.XHTMLEntities = {\n\t    quot: '\\u0022',\n\t    amp: '\\u0026',\n\t    apos: '\\u0027',\n\t    gt: '\\u003E',\n\t    nbsp: '\\u00A0',\n\t    iexcl: '\\u00A1',\n\t    cent: '\\u00A2',\n\t    pound: '\\u00A3',\n\t    curren: '\\u00A4',\n\t    yen: '\\u00A5',\n\t    brvbar: '\\u00A6',\n\t    sect: '\\u00A7',\n\t    uml: '\\u00A8',\n\t    copy: '\\u00A9',\n\t    ordf: '\\u00AA',\n\t    laquo: '\\u00AB',\n\t    not: '\\u00AC',\n\t    shy: '\\u00AD',\n\t    reg: '\\u00AE',\n\t    macr: '\\u00AF',\n\t    deg: '\\u00B0',\n\t    plusmn: '\\u00B1',\n\t    sup2: '\\u00B2',\n\t    sup3: '\\u00B3',\n\t    acute: '\\u00B4',\n\t    micro: '\\u00B5',\n\t    para: '\\u00B6',\n\t    middot: '\\u00B7',\n\t    cedil: '\\u00B8',\n\t    sup1: '\\u00B9',\n\t    ordm: '\\u00BA',\n\t    raquo: '\\u00BB',\n\t    frac14: '\\u00BC',\n\t    frac12: '\\u00BD',\n\t    frac34: '\\u00BE',\n\t    iquest: '\\u00BF',\n\t    Agrave: '\\u00C0',\n\t    Aacute: '\\u00C1',\n\t    Acirc: '\\u00C2',\n\t    Atilde: '\\u00C3',\n\t    Auml: '\\u00C4',\n\t    Aring: '\\u00C5',\n\t    AElig: '\\u00C6',\n\t    Ccedil: '\\u00C7',\n\t    Egrave: '\\u00C8',\n\t    Eacute: '\\u00C9',\n\t    Ecirc: '\\u00CA',\n\t    Euml: '\\u00CB',\n\t    Igrave: '\\u00CC',\n\t    Iacute: '\\u00CD',\n\t    Icirc: '\\u00CE',\n\t    Iuml: '\\u00CF',\n\t    ETH: '\\u00D0',\n\t    Ntilde: '\\u00D1',\n\t    Ograve: '\\u00D2',\n\t    Oacute: '\\u00D3',\n\t    Ocirc: '\\u00D4',\n\t    Otilde: '\\u00D5',\n\t    Ouml: '\\u00D6',\n\t    times: '\\u00D7',\n\t    Oslash: '\\u00D8',\n\t    Ugrave: '\\u00D9',\n\t    Uacute: '\\u00DA',\n\t    Ucirc: '\\u00DB',\n\t    Uuml: '\\u00DC',\n\t    Yacute: '\\u00DD',\n\t    THORN: '\\u00DE',\n\t    szlig: '\\u00DF',\n\t    agrave: '\\u00E0',\n\t    aacute: '\\u00E1',\n\t    acirc: '\\u00E2',\n\t    atilde: '\\u00E3',\n\t    auml: '\\u00E4',\n\t    aring: '\\u00E5',\n\t    aelig: '\\u00E6',\n\t    ccedil: '\\u00E7',\n\t    egrave: '\\u00E8',\n\t    eacute: '\\u00E9',\n\t    ecirc: '\\u00EA',\n\t    euml: '\\u00EB',\n\t    igrave: '\\u00EC',\n\t    iacute: '\\u00ED',\n\t    icirc: '\\u00EE',\n\t    iuml: '\\u00EF',\n\t    eth: '\\u00F0',\n\t    ntilde: '\\u00F1',\n\t    ograve: '\\u00F2',\n\t    oacute: '\\u00F3',\n\t    ocirc: '\\u00F4',\n\t    otilde: '\\u00F5',\n\t    ouml: '\\u00F6',\n\t    divide: '\\u00F7',\n\t    oslash: '\\u00F8',\n\t    ugrave: '\\u00F9',\n\t    uacute: '\\u00FA',\n\t    ucirc: '\\u00FB',\n\t    uuml: '\\u00FC',\n\t    yacute: '\\u00FD',\n\t    thorn: '\\u00FE',\n\t    yuml: '\\u00FF',\n\t    OElig: '\\u0152',\n\t    oelig: '\\u0153',\n\t    Scaron: '\\u0160',\n\t    scaron: '\\u0161',\n\t    Yuml: '\\u0178',\n\t    fnof: '\\u0192',\n\t    circ: '\\u02C6',\n\t    tilde: '\\u02DC',\n\t    Alpha: '\\u0391',\n\t    Beta: '\\u0392',\n\t    Gamma: '\\u0393',\n\t    Delta: '\\u0394',\n\t    Epsilon: '\\u0395',\n\t    Zeta: '\\u0396',\n\t    Eta: '\\u0397',\n\t    Theta: '\\u0398',\n\t    Iota: '\\u0399',\n\t    Kappa: '\\u039A',\n\t    Lambda: '\\u039B',\n\t    Mu: '\\u039C',\n\t    Nu: '\\u039D',\n\t    Xi: '\\u039E',\n\t    Omicron: '\\u039F',\n\t    Pi: '\\u03A0',\n\t    Rho: '\\u03A1',\n\t    Sigma: '\\u03A3',\n\t    Tau: '\\u03A4',\n\t    Upsilon: '\\u03A5',\n\t    Phi: '\\u03A6',\n\t    Chi: '\\u03A7',\n\t    Psi: '\\u03A8',\n\t    Omega: '\\u03A9',\n\t    alpha: '\\u03B1',\n\t    beta: '\\u03B2',\n\t    gamma: '\\u03B3',\n\t    delta: '\\u03B4',\n\t    epsilon: '\\u03B5',\n\t    zeta: '\\u03B6',\n\t    eta: '\\u03B7',\n\t    theta: '\\u03B8',\n\t    iota: '\\u03B9',\n\t    kappa: '\\u03BA',\n\t    lambda: '\\u03BB',\n\t    mu: '\\u03BC',\n\t    nu: '\\u03BD',\n\t    xi: '\\u03BE',\n\t    omicron: '\\u03BF',\n\t    pi: '\\u03C0',\n\t    rho: '\\u03C1',\n\t    sigmaf: '\\u03C2',\n\t    sigma: '\\u03C3',\n\t    tau: '\\u03C4',\n\t    upsilon: '\\u03C5',\n\t    phi: '\\u03C6',\n\t    chi: '\\u03C7',\n\t    psi: '\\u03C8',\n\t    omega: '\\u03C9',\n\t    thetasym: '\\u03D1',\n\t    upsih: '\\u03D2',\n\t    piv: '\\u03D6',\n\t    ensp: '\\u2002',\n\t    emsp: '\\u2003',\n\t    thinsp: '\\u2009',\n\t    zwnj: '\\u200C',\n\t    zwj: '\\u200D',\n\t    lrm: '\\u200E',\n\t    rlm: '\\u200F',\n\t    ndash: '\\u2013',\n\t    mdash: '\\u2014',\n\t    lsquo: '\\u2018',\n\t    rsquo: '\\u2019',\n\t    sbquo: '\\u201A',\n\t    ldquo: '\\u201C',\n\t    rdquo: '\\u201D',\n\t    bdquo: '\\u201E',\n\t    dagger: '\\u2020',\n\t    Dagger: '\\u2021',\n\t    bull: '\\u2022',\n\t    hellip: '\\u2026',\n\t    permil: '\\u2030',\n\t    prime: '\\u2032',\n\t    Prime: '\\u2033',\n\t    lsaquo: '\\u2039',\n\t    rsaquo: '\\u203A',\n\t    oline: '\\u203E',\n\t    frasl: '\\u2044',\n\t    euro: '\\u20AC',\n\t    image: '\\u2111',\n\t    weierp: '\\u2118',\n\t    real: '\\u211C',\n\t    trade: '\\u2122',\n\t    alefsym: '\\u2135',\n\t    larr: '\\u2190',\n\t    uarr: '\\u2191',\n\t    rarr: '\\u2192',\n\t    darr: '\\u2193',\n\t    harr: '\\u2194',\n\t    crarr: '\\u21B5',\n\t    lArr: '\\u21D0',\n\t    uArr: '\\u21D1',\n\t    rArr: '\\u21D2',\n\t    dArr: '\\u21D3',\n\t    hArr: '\\u21D4',\n\t    forall: '\\u2200',\n\t    part: '\\u2202',\n\t    exist: '\\u2203',\n\t    empty: '\\u2205',\n\t    nabla: '\\u2207',\n\t    isin: '\\u2208',\n\t    notin: '\\u2209',\n\t    ni: '\\u220B',\n\t    prod: '\\u220F',\n\t    sum: '\\u2211',\n\t    minus: '\\u2212',\n\t    lowast: '\\u2217',\n\t    radic: '\\u221A',\n\t    prop: '\\u221D',\n\t    infin: '\\u221E',\n\t    ang: '\\u2220',\n\t    and: '\\u2227',\n\t    or: '\\u2228',\n\t    cap: '\\u2229',\n\t    cup: '\\u222A',\n\t    int: '\\u222B',\n\t    there4: '\\u2234',\n\t    sim: '\\u223C',\n\t    cong: '\\u2245',\n\t    asymp: '\\u2248',\n\t    ne: '\\u2260',\n\t    equiv: '\\u2261',\n\t    le: '\\u2264',\n\t    ge: '\\u2265',\n\t    sub: '\\u2282',\n\t    sup: '\\u2283',\n\t    nsub: '\\u2284',\n\t    sube: '\\u2286',\n\t    supe: '\\u2287',\n\t    oplus: '\\u2295',\n\t    otimes: '\\u2297',\n\t    perp: '\\u22A5',\n\t    sdot: '\\u22C5',\n\t    lceil: '\\u2308',\n\t    rceil: '\\u2309',\n\t    lfloor: '\\u230A',\n\t    rfloor: '\\u230B',\n\t    loz: '\\u25CA',\n\t    spades: '\\u2660',\n\t    clubs: '\\u2663',\n\t    hearts: '\\u2665',\n\t    diams: '\\u2666',\n\t    lang: '\\u27E8',\n\t    rang: '\\u27E9'\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar error_handler_1 = __webpack_require__(10);\n\tvar scanner_1 = __webpack_require__(12);\n\tvar token_1 = __webpack_require__(13);\n\tvar Reader = (function () {\n\t    function Reader() {\n\t        this.values = [];\n\t        this.curly = this.paren = -1;\n\t    }\n\t    // A function following one of those tokens is an expression.\n\t    Reader.prototype.beforeFunctionExpression = function (t) {\n\t        return ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n\t            'return', 'case', 'delete', 'throw', 'void',\n\t            // assignment operators\n\t            '=', '+=', '-=', '*=', '**=', '/=', '%=', '<<=', '>>=', '>>>=',\n\t            '&=', '|=', '^=', ',',\n\t            // binary/unary operators\n\t            '+', '-', '*', '**', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n\t            '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n\t            '<=', '<', '>', '!=', '!=='].indexOf(t) >= 0;\n\t    };\n\t    // Determine if forward slash (/) is an operator or part of a regular expression\n\t    // https://github.com/mozilla/sweet.js/wiki/design\n\t    Reader.prototype.isRegexStart = function () {\n\t        var previous = this.values[this.values.length - 1];\n\t        var regex = (previous !== null);\n\t        switch (previous) {\n\t            case 'this':\n\t            case ']':\n\t                regex = false;\n\t                break;\n\t            case ')':\n\t                var keyword = this.values[this.paren - 1];\n\t                regex = (keyword === 'if' || keyword === 'while' || keyword === 'for' || keyword === 'with');\n\t                break;\n\t            case '}':\n\t                // Dividing a function by anything makes little sense,\n\t                // but we have to check for that.\n\t                regex = false;\n\t                if (this.values[this.curly - 3] === 'function') {\n\t                    // Anonymous function, e.g. function(){} /42\n\t                    var check = this.values[this.curly - 4];\n\t                    regex = check ? !this.beforeFunctionExpression(check) : false;\n\t                }\n\t                else if (this.values[this.curly - 4] === 'function') {\n\t                    // Named function, e.g. function f(){} /42/\n\t                    var check = this.values[this.curly - 5];\n\t                    regex = check ? !this.beforeFunctionExpression(check) : true;\n\t                }\n\t                break;\n\t            default:\n\t                break;\n\t        }\n\t        return regex;\n\t    };\n\t    Reader.prototype.push = function (token) {\n\t        if (token.type === 7 /* Punctuator */ || token.type === 4 /* Keyword */) {\n\t            if (token.value === '{') {\n\t                this.curly = this.values.length;\n\t            }\n\t            else if (token.value === '(') {\n\t                this.paren = this.values.length;\n\t            }\n\t            this.values.push(token.value);\n\t        }\n\t        else {\n\t            this.values.push(null);\n\t        }\n\t    };\n\t    return Reader;\n\t}());\n\tvar Tokenizer = (function () {\n\t    function Tokenizer(code, config) {\n\t        this.errorHandler = new error_handler_1.ErrorHandler();\n\t        this.errorHandler.tolerant = config ? (typeof config.tolerant === 'boolean' && config.tolerant) : false;\n\t        this.scanner = new scanner_1.Scanner(code, this.errorHandler);\n\t        this.scanner.trackComment = config ? (typeof config.comment === 'boolean' && config.comment) : false;\n\t        this.trackRange = config ? (typeof config.range === 'boolean' && config.range) : false;\n\t        this.trackLoc = config ? (typeof config.loc === 'boolean' && config.loc) : false;\n\t        this.buffer = [];\n\t        this.reader = new Reader();\n\t    }\n\t    Tokenizer.prototype.errors = function () {\n\t        return this.errorHandler.errors;\n\t    };\n\t    Tokenizer.prototype.getNextToken = function () {\n\t        if (this.buffer.length === 0) {\n\t            var comments = this.scanner.scanComments();\n\t            if (this.scanner.trackComment) {\n\t                for (var i = 0; i < comments.length; ++i) {\n\t                    var e = comments[i];\n\t                    var value = this.scanner.source.slice(e.slice[0], e.slice[1]);\n\t                    var comment = {\n\t                        type: e.multiLine ? 'BlockComment' : 'LineComment',\n\t                        value: value\n\t                    };\n\t                    if (this.trackRange) {\n\t                        comment.range = e.range;\n\t                    }\n\t                    if (this.trackLoc) {\n\t                        comment.loc = e.loc;\n\t                    }\n\t                    this.buffer.push(comment);\n\t                }\n\t            }\n\t            if (!this.scanner.eof()) {\n\t                var loc = void 0;\n\t                if (this.trackLoc) {\n\t                    loc = {\n\t                        start: {\n\t                            line: this.scanner.lineNumber,\n\t                            column: this.scanner.index - this.scanner.lineStart\n\t                        },\n\t                        end: {}\n\t                    };\n\t                }\n\t                var startRegex = (this.scanner.source[this.scanner.index] === '/') && this.reader.isRegexStart();\n\t                var token = startRegex ? this.scanner.scanRegExp() : this.scanner.lex();\n\t                this.reader.push(token);\n\t                var entry = {\n\t                    type: token_1.TokenName[token.type],\n\t                    value: this.scanner.source.slice(token.start, token.end)\n\t                };\n\t                if (this.trackRange) {\n\t                    entry.range = [token.start, token.end];\n\t                }\n\t                if (this.trackLoc) {\n\t                    loc.end = {\n\t                        line: this.scanner.lineNumber,\n\t                        column: this.scanner.index - this.scanner.lineStart\n\t                    };\n\t                    entry.loc = loc;\n\t                }\n\t                if (token.type === 9 /* RegularExpression */) {\n\t                    var pattern = token.pattern;\n\t                    var flags = token.flags;\n\t                    entry.regex = { pattern: pattern, flags: flags };\n\t                }\n\t                this.buffer.push(entry);\n\t            }\n\t        }\n\t        return this.buffer.shift();\n\t    };\n\t    return Tokenizer;\n\t}());\n\texports.Tokenizer = Tokenizer;\n\n\n/***/ }\n/******/ ])\n});\n;", "/**\n * Default minimum size of a run.\n */\nconst DEFAULT_MIN_MERGE = 32\n\n/**\n * Minimum ordered subsequece required to do galloping.\n */\nconst DEFAULT_MIN_GALLOPING = 7\n\n/**\n * Default tmp storage length. Can increase depending on the size of the\n * smallest run to merge.\n */\nconst DEFAULT_TMP_STORAGE_LENGTH = 256\n\n/**\n * Pre-computed powers of 10 for efficient lexicographic comparison of\n * small integers.\n */\nconst POWERS_OF_TEN = [1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9]\n\nlet results\n\n/**\n * Estimate the logarithm base 10 of a small integer.\n *\n * @param {number} x - The integer to estimate the logarithm of.\n * @return {number} - The estimated logarithm of the integer.\n */\nconst log10 = x => x < 1e5\n  ? x < 1e2\n    ? x < 1e1\n      ? 0\n      : 1\n    : x < 1e4\n      ? x < 1e3\n        ? 2\n        : 3\n      : 4\n  : x < 1e7\n    ? x < 1e6\n      ? 5\n      : 6\n    : x < 1e9\n      ? x < 1e8\n        ? 7\n        : 8\n      : 9\n\n/**\n * Default alphabetical comparison of items.\n *\n * @param {string|object|number} a - First element to compare.\n * @param {string|object|number} b - Second element to compare.\n * @return {number} - A positive number if a.toString() > b.toString(), a\n * negative number if .toString() < b.toString(), 0 otherwise.\n */\nfunction alphabeticalCompare (a, b) {\n  if (a === b) {\n    return 0\n  }\n\n  if (~ ~ a === a && ~ ~ b === b) {\n    if (a === 0 || b === 0) {\n      return a < b ? - 1 : 1\n    }\n\n    if (a < 0 || b < 0) {\n      if (b >= 0) {\n        return - 1\n      }\n\n      if (a >= 0) {\n        return 1\n      }\n\n      a = - a\n      b = - b\n    }\n\n    const al = log10(a)\n    const bl = log10(b)\n\n    let t = 0\n\n    if (al < bl) {\n      a *= POWERS_OF_TEN[bl - al - 1]\n      b /= 10\n      t = - 1\n    } else if (al > bl) {\n      b *= POWERS_OF_TEN[al - bl - 1]\n      a /= 10\n      t = 1\n    }\n\n    if (a === b) {\n      return t\n    }\n\n    return a < b ? - 1 : 1\n  }\n\n  const aStr = String(a)\n  const bStr = String(b)\n\n  if (aStr === bStr) {\n    return 0\n  }\n\n  return aStr < bStr ? - 1 : 1\n}\n\n/**\n * Compute minimum run length for TimSort\n *\n * @param {number} n - The size of the array to sort.\n */\nfunction minRunLength (n) {\n  let r = 0\n\n  while (n >= DEFAULT_MIN_MERGE) {\n    r |= (n & 1)\n    n >>= 1\n  }\n\n  return n + r\n}\n\n/**\n * Counts the length of a monotonically ascending or strictly monotonically\n * descending sequence (run) starting at array[lo] in the range [lo, hi). If\n * the run is descending it is made ascending.\n *\n * @param {array} array - The array to reverse.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n * @param {function} compare - Item comparison function.\n * @return {number} - The length of the run.\n */\nfunction makeAscendingRun (array, lo, hi, compare) {\n  let runHi = lo + 1\n\n  if (runHi === hi) {\n    return 1\n  }\n\n  // Descending\n  if (compare(array[runHi ++], array[lo]) < 0) {\n    while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n      runHi ++\n    }\n\n    reverseRun(array, lo, runHi)\n    reverseRun(results, lo, runHi)\n    // Ascending\n  } else {\n    while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n      runHi ++\n    }\n  }\n\n  return runHi - lo\n}\n\n/**\n * Reverse an array in the range [lo, hi).\n *\n * @param {array} array - The array to reverse.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n */\nfunction reverseRun (array, lo, hi) {\n  hi --\n\n  while (lo < hi) {\n    const t = array[lo]\n    array[lo ++] = array[hi]\n    array[hi --] = t\n  }\n}\n\n/**\n * Perform the binary sort of the array in the range [lo, hi) where start is\n * the first element possibly out of order.\n *\n * @param {array} array - The array to sort.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n * @param {number} start - First element possibly out of order.\n * @param {function} compare - Item comparison function.\n */\nfunction binaryInsertionSort (array, lo, hi, start, compare) {\n  if (start === lo) {\n    start ++\n  }\n\n  for (; start < hi; start ++) {\n    const pivot = array[start]\n    const pivotIndex = results[start]\n\n    // Ranges of the array where pivot belongs\n    let left = lo\n    let right = start\n\n    /*\n     *   pivot >= array[i] for i in [lo, left)\n     *   pivot <  array[i] for i in  in [right, start)\n     */\n    while (left < right) {\n      const mid = (left + right) >>> 1\n\n      if (compare(pivot, array[mid]) < 0) {\n        right = mid\n      } else {\n        left = mid + 1\n      }\n    }\n\n    /*\n     * Move elements right to make room for the pivot. If there are elements\n     * equal to pivot, left points to the first slot after them: this is also\n     * a reason for which TimSort is stable\n     */\n    let n = start - left\n    // Switch is just an optimization for small arrays\n    switch (n) {\n    case 3:\n      array[left + 3] = array[left + 2]\n      results[left + 3] = results[left + 2]\n      /* falls through */\n    case 2:\n      array[left + 2] = array[left + 1]\n      results[left + 2] = results[left + 1]\n      /* falls through */\n    case 1:\n      array[left + 1] = array[left]\n      results[left + 1] = results[left]\n      break\n    default:\n      while (n > 0) {\n        array[left + n] = array[left + n - 1]\n        results[left + n] = results[left + n - 1]\n        n --\n      }\n    }\n\n    array[left] = pivot\n    results[left] = pivotIndex\n  }\n}\n\n/**\n * Find the position at which to insert a value in a sorted range. If the range\n * contains elements equal to the value the leftmost element index is returned\n * (for stability).\n *\n * @param {number} value - Value to insert.\n * @param {array} array - The array in which to insert value.\n * @param {number} start - First element in the range.\n * @param {number} length - Length of the range.\n * @param {number} hint - The index at which to begin the search.\n * @param {function} compare - Item comparison function.\n * @return {number} - The index where to insert value.\n */\nfunction gallopLeft (value, array, start, length, hint, compare) {\n  let lastOffset = 0\n  let maxOffset = 0\n  let offset = 1\n\n  if (compare(value, array[start + hint]) > 0) {\n    maxOffset = length - hint\n\n    while (\n      offset < maxOffset\n      && compare(value, array[start + hint + offset]) > 0\n    ) {\n      lastOffset = offset\n      offset = (offset << 1) + 1\n\n      if (offset <= 0) {\n        offset = maxOffset\n      }\n    }\n\n    if (offset > maxOffset) {\n      offset = maxOffset\n    }\n\n    // Make offsets relative to start\n    lastOffset += hint\n    offset += hint\n\n    // value <= array[start + hint]\n  } else {\n    maxOffset = hint + 1\n    while (\n      offset < maxOffset\n      && compare(value, array[start + hint - offset]) <= 0\n    ) {\n      lastOffset = offset\n      offset = (offset << 1) + 1\n\n      if (offset <= 0) {\n        offset = maxOffset\n      }\n    }\n    if (offset > maxOffset) {\n      offset = maxOffset\n    }\n\n    // Make offsets relative to start\n    const tmp = lastOffset\n    lastOffset = hint - offset\n    offset = hint - tmp\n  }\n\n  /*\n   * Now array[start+lastOffset] < value <= array[start+offset], so value\n   * belongs somewhere in the range (start + lastOffset, start + offset]. Do a\n   * binary search, with invariant array[start + lastOffset - 1] < value <=\n   * array[start + offset].\n   */\n  lastOffset ++\n  while (lastOffset < offset) {\n    const m = lastOffset + ((offset - lastOffset) >>> 1)\n\n    if (compare(value, array[start + m]) > 0) {\n      lastOffset = m + 1\n    } else {\n      offset = m\n    }\n  }\n  return offset\n}\n\n/**\n * Find the position at which to insert a value in a sorted range. If the range\n * contains elements equal to the value the rightmost element index is returned\n * (for stability).\n *\n * @param {number} value - Value to insert.\n * @param {array} array - The array in which to insert value.\n * @param {number} start - First element in the range.\n * @param {number} length - Length of the range.\n * @param {number} hint - The index at which to begin the search.\n * @param {function} compare - Item comparison function.\n * @return {number} - The index where to insert value.\n */\nfunction gallopRight (value, array, start, length, hint, compare) {\n  let lastOffset = 0\n  let maxOffset = 0\n  let offset = 1\n\n  if (compare(value, array[start + hint]) < 0) {\n    maxOffset = hint + 1\n\n    while (\n      offset < maxOffset\n      && compare(value, array[start + hint - offset]) < 0\n    ) {\n      lastOffset = offset\n      offset = (offset << 1) + 1\n\n      if (offset <= 0) {\n        offset = maxOffset\n      }\n    }\n\n    if (offset > maxOffset) {\n      offset = maxOffset\n    }\n\n    // Make offsets relative to start\n    const tmp = lastOffset\n    lastOffset = hint - offset\n    offset = hint - tmp\n\n    // value >= array[start + hint]\n  } else {\n    maxOffset = length - hint\n\n    while (\n      offset < maxOffset\n      && compare(value, array[start + hint + offset]) >= 0\n    ) {\n      lastOffset = offset\n      offset = (offset << 1) + 1\n\n      if (offset <= 0) {\n        offset = maxOffset\n      }\n    }\n\n    if (offset > maxOffset) {\n      offset = maxOffset\n    }\n\n    // Make offsets relative to start\n    lastOffset += hint\n    offset += hint\n  }\n\n  /*\n   * Now array[start+lastOffset] < value <= array[start+offset], so value\n   * belongs somewhere in the range (start + lastOffset, start + offset]. Do a\n   * binary search, with invariant array[start + lastOffset - 1] < value <=\n   * array[start + offset].\n   */\n  lastOffset ++\n\n  while (lastOffset < offset) {\n    const m = lastOffset + ((offset - lastOffset) >>> 1)\n\n    if (compare(value, array[start + m]) < 0) {\n      offset = m\n    } else {\n      lastOffset = m + 1\n    }\n  }\n\n  return offset\n}\n\nclass TimSort {\n  constructor (array, compare) {\n    this.array = array\n    this.compare = compare\n\n    const {length} = array\n\n    this.length = length\n    this.minGallop = DEFAULT_MIN_GALLOPING\n\n    this.tmpStorageLength = length < 2 * DEFAULT_TMP_STORAGE_LENGTH\n      ? length >>> 1\n      : DEFAULT_TMP_STORAGE_LENGTH\n\n    this.tmp = new Array(this.tmpStorageLength)\n    this.tmpIndex = new Array(this.tmpStorageLength)\n\n    this.stackLength = length < 120\n      ? 5\n      : length < 1542\n        ? 10\n        : length < 119151\n          ? 19\n          : 40\n\n    this.runStart = new Array(this.stackLength)\n    this.runLength = new Array(this.stackLength)\n\n    this.stackSize = 0\n  }\n\n  /**\n   * Push a new run on TimSort's stack.\n   *\n   * @param {number} runStart - Start index of the run in the original array.\n   * @param {number} runLength - Length of the run;\n   */\n  pushRun (runStart, runLength) {\n    this.runStart[this.stackSize] = runStart\n    this.runLength[this.stackSize] = runLength\n    this.stackSize += 1\n  }\n\n  /**\n   * Merge runs on TimSort's stack so that the following holds for all i:\n   * 1) runLength[i - 3] > runLength[i - 2] + runLength[i - 1]\n   * 2) runLength[i - 2] > runLength[i - 1]\n   */\n  mergeRuns () {\n    while (this.stackSize > 1) {\n      let n = this.stackSize - 2\n\n      if (\n        (\n          n >= 1\n          && this.runLength[n - 1] <= this.runLength[n] + this.runLength[n + 1]\n        )\n        || (\n          n >= 2\n          && this.runLength[n - 2] <= this.runLength[n] + this.runLength[n - 1]\n        )\n      ) {\n        if (this.runLength[n - 1] < this.runLength[n + 1]) {\n          n --\n        }\n      } else if (this.runLength[n] > this.runLength[n + 1]) {\n        break\n      }\n      this.mergeAt(n)\n    }\n  }\n\n  /**\n   * Merge all runs on TimSort's stack until only one remains.\n   */\n  forceMergeRuns () {\n    while (this.stackSize > 1) {\n      let n = this.stackSize - 2\n\n      if (n > 0 && this.runLength[n - 1] < this.runLength[n + 1]) {\n        n --\n      }\n\n      this.mergeAt(n)\n    }\n  }\n\n  /**\n   * Merge the runs on the stack at positions i and i+1. Must be always be called\n   * with i=stackSize-2 or i=stackSize-3 (that is, we merge on top of the stack).\n   *\n   * @param {number} i - Index of the run to merge in TimSort's stack.\n   */\n  mergeAt (i) {\n    const {compare} = this\n    const {array} = this\n\n    let start1 = this.runStart[i]\n    let length1 = this.runLength[i]\n    const start2 = this.runStart[i + 1]\n    let length2 = this.runLength[i + 1]\n\n    this.runLength[i] = length1 + length2\n\n    if (i === this.stackSize - 3) {\n      this.runStart[i + 1] = this.runStart[i + 2]\n      this.runLength[i + 1] = this.runLength[i + 2]\n    }\n\n    this.stackSize --\n\n    /*\n     * Find where the first element in the second run goes in run1. Previous\n     * elements in run1 are already in place\n     */\n    const k = gallopRight(array[start2], array, start1, length1, 0, compare)\n    start1 += k\n    length1 -= k\n\n    if (length1 === 0) {\n      return\n    }\n\n    /*\n     * Find where the last element in the first run goes in run2. Next elements\n     * in run2 are already in place\n     */\n    length2 = gallopLeft(\n      array[start1 + length1 - 1],\n      array,\n      start2,\n      length2,\n      length2 - 1,\n      compare\n    )\n\n    if (length2 === 0) {\n      return\n    }\n\n    /*\n     * Merge remaining runs. A tmp array with length = min(length1, length2) is\n     * used\n     */\n    if (length1 <= length2) {\n      this.mergeLow(start1, length1, start2, length2)\n    } else {\n      this.mergeHigh(start1, length1, start2, length2)\n    }\n  }\n\n  /**\n   * Merge two adjacent runs in a stable way. The runs must be such that the\n   * first element of run1 is bigger than the first element in run2 and the\n   * last element of run1 is greater than all the elements in run2.\n   * The method should be called when run1.length <= run2.length as it uses\n   * TimSort temporary array to store run1. Use mergeHigh if run1.length >\n   * run2.length.\n   *\n   * @param {number} start1 - First element in run1.\n   * @param {number} length1 - Length of run1.\n   * @param {number} start2 - First element in run2.\n   * @param {number} length2 - Length of run2.\n   */\n  mergeLow (start1, length1, start2, length2) {\n    const {compare} = this\n    const {array} = this\n    const {tmp} = this\n    const {tmpIndex} = this\n    let i = 0\n\n    for (i = 0; i < length1; i ++) {\n      tmp[i] = array[start1 + i]\n      tmpIndex[i] = results[start1 + i]\n    }\n\n    let cursor1 = 0\n    let cursor2 = start2\n    let dest = start1\n\n    array[dest] = array[cursor2]\n    results[dest] = results[cursor2]\n\n    dest ++\n    cursor2 ++\n\n    if (-- length2 === 0) {\n      for (i = 0; i < length1; i ++) {\n        array[dest + i] = tmp[cursor1 + i]\n        results[dest + i] = tmpIndex[cursor1 + i]\n      }\n      return\n    }\n\n    if (length1 === 1) {\n      for (i = 0; i < length2; i ++) {\n        array[dest + i] = array[cursor2 + i]\n        results[dest + i] = results[cursor2 + i]\n      }\n      array[dest + length2] = tmp[cursor1]\n      results[dest + length2] = tmpIndex[cursor1]\n      return\n    }\n\n    let {minGallop} = this\n\n    while (true) {\n      let count1 = 0\n      let count2 = 0\n      let exit = false\n\n      do {\n        if (compare(array[cursor2], tmp[cursor1]) < 0) {\n          array[dest] = array[cursor2]\n          results[dest] = results[cursor2]\n          dest ++\n          cursor2 ++\n          count2 ++\n          count1 = 0\n\n          if (-- length2 === 0) {\n            exit = true\n            break\n          }\n        } else {\n          array[dest] = tmp[cursor1]\n          results[dest] = tmpIndex[cursor1]\n          dest ++\n          cursor1 ++\n          count1 ++\n          count2 = 0\n          if (-- length1 === 1) {\n            exit = true\n            break\n          }\n        }\n      } while ((count1 | count2) < minGallop)\n\n      if (exit) {\n        break\n      }\n\n      do {\n        count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare)\n\n        if (count1 !== 0) {\n          for (i = 0; i < count1; i ++) {\n            array[dest + i] = tmp[cursor1 + i]\n            results[dest + i] = tmpIndex[cursor1 + i]\n          }\n\n          dest += count1\n          cursor1 += count1\n          length1 -= count1\n          if (length1 <= 1) {\n            exit = true\n            break\n          }\n        }\n\n        array[dest] = array[cursor2]\n        results[dest] = results[cursor2]\n\n        dest ++\n        cursor2 ++\n\n        if (-- length2 === 0) {\n          exit = true\n          break\n        }\n\n        count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare)\n\n        if (count2 !== 0) {\n          for (i = 0; i < count2; i ++) {\n            array[dest + i] = array[cursor2 + i]\n            results[dest + i] = results[cursor2 + i]\n          }\n\n          dest += count2\n          cursor2 += count2\n          length2 -= count2\n\n          if (length2 === 0) {\n            exit = true\n            break\n          }\n        }\n        array[dest] = tmp[cursor1]\n        results[dest] = tmpIndex[cursor1]\n        dest ++\n        cursor1 ++\n\n        if (-- length1 === 1) {\n          exit = true\n          break\n        }\n\n        minGallop --\n      } while (\n        count1 >= DEFAULT_MIN_GALLOPING\n        || count2 >= DEFAULT_MIN_GALLOPING\n      )\n\n      if (exit) {\n        break\n      }\n\n      if (minGallop < 0) {\n        minGallop = 0\n      }\n\n      minGallop += 2\n    }\n\n    this.minGallop = minGallop\n\n    if (minGallop < 1) {\n      this.minGallop = 1\n    }\n\n    if (length1 === 1) {\n      for (i = 0; i < length2; i ++) {\n        array[dest + i] = array[cursor2 + i]\n        results[dest + i] = results[cursor2 + i]\n      }\n      array[dest + length2] = tmp[cursor1]\n      results[dest + length2] = tmpIndex[cursor1]\n    } else if (length1 === 0) {\n      throw new Error('mergeLow preconditions were not respected')\n    } else {\n      for (i = 0; i < length1; i ++) {\n        array[dest + i] = tmp[cursor1 + i]\n        results[dest + i] = tmpIndex[cursor1 + i]\n      }\n    }\n  }\n\n  /**\n   * Merge two adjacent runs in a stable way. The runs must be such that the\n   * first element of run1 is bigger than the first element in run2 and the\n   * last element of run1 is greater than all the elements in run2.\n   * The method should be called when run1.length > run2.length as it uses\n   * TimSort temporary array to store run2. Use mergeLow if run1.length <=\n   * run2.length.\n   *\n   * @param {number} start1 - First element in run1.\n   * @param {number} length1 - Length of run1.\n   * @param {number} start2 - First element in run2.\n   * @param {number} length2 - Length of run2.\n   */\n  mergeHigh (start1, length1, start2, length2) {\n    const {compare} = this\n    const {array} = this\n    const {tmp} = this\n    const {tmpIndex} = this\n    let i = 0\n\n    for (i = 0; i < length2; i ++) {\n      tmp[i] = array[start2 + i]\n      tmpIndex[i] = results[start2 + i]\n    }\n\n    let cursor1 = start1 + length1 - 1\n    let cursor2 = length2 - 1\n    let dest = start2 + length2 - 1\n    let customCursor = 0\n    let customDest = 0\n\n    array[dest] = array[cursor1]\n    results[dest] = results[cursor1]\n\n    dest --\n    cursor1 --\n\n    if (-- length1 === 0) {\n      customCursor = dest - (length2 - 1)\n\n      for (i = 0; i < length2; i ++) {\n        array[customCursor + i] = tmp[i]\n        results[customCursor + i] = tmpIndex[i]\n      }\n\n      return\n    }\n\n    if (length2 === 1) {\n      dest -= length1\n      cursor1 -= length1\n      customDest = dest + 1\n      customCursor = cursor1 + 1\n\n      for (i = length1 - 1; i >= 0; i --) {\n        array[customDest + i] = array[customCursor + i]\n        results[customDest + i] = results[customCursor + i]\n      }\n\n      array[dest] = tmp[cursor2]\n      results[dest] = tmpIndex[cursor2]\n      return\n    }\n\n    let {minGallop} = this\n\n    while (true) {\n      let count1 = 0\n      let count2 = 0\n      let exit = false\n\n      do {\n        if (compare(tmp[cursor2], array[cursor1]) < 0) {\n          array[dest] = array[cursor1]\n          results[dest] = results[cursor1]\n          dest --\n          cursor1 --\n          count1 ++\n          count2 = 0\n          if (-- length1 === 0) {\n            exit = true\n            break\n          }\n        } else {\n          array[dest] = tmp[cursor2]\n          results[dest] = tmpIndex[cursor2]\n          dest --\n          cursor2 --\n          count2 ++\n          count1 = 0\n          if (-- length2 === 1) {\n            exit = true\n            break\n          }\n        }\n      } while ((count1 | count2) < minGallop)\n\n      if (exit) {\n        break\n      }\n\n      do {\n        count1 = length1 - gallopRight(\n          tmp[cursor2],\n          array,\n          start1,\n          length1,\n          length1 - 1,\n          compare\n        )\n\n        if (count1 !== 0) {\n          dest -= count1\n          cursor1 -= count1\n          length1 -= count1\n          customDest = dest + 1\n          customCursor = cursor1 + 1\n\n          for (i = count1 - 1; i >= 0; i --) {\n            array[customDest + i] = array[customCursor + i]\n            results[customDest + i] = results[customCursor + i]\n          }\n\n          if (length1 === 0) {\n            exit = true\n            break\n          }\n        }\n\n        array[dest] = tmp[cursor2]\n        results[dest] = tmpIndex[cursor2]\n        dest --\n        cursor2 --\n\n        if (-- length2 === 1) {\n          exit = true\n          break\n        }\n\n        count2 = length2 - gallopLeft(\n          array[cursor1],\n          tmp,\n          0,\n          length2,\n          length2 - 1,\n          compare\n        )\n\n        if (count2 !== 0) {\n          dest -= count2\n          cursor2 -= count2\n          length2 -= count2\n          customDest = dest + 1\n          customCursor = cursor2 + 1\n\n          for (i = 0; i < count2; i ++) {\n            array[customDest + i] = tmp[customCursor + i]\n            results[customDest + i] = tmpIndex[customCursor + i]\n          }\n\n          if (length2 <= 1) {\n            exit = true\n            break\n          }\n        }\n\n        array[dest] = array[cursor1]\n        results[dest] = results[cursor1]\n        dest --\n        cursor1 --\n\n        if (-- length1 === 0) {\n          exit = true\n          break\n        }\n\n        minGallop --\n      } while (\n        count1 >= DEFAULT_MIN_GALLOPING\n        || count2 >= DEFAULT_MIN_GALLOPING\n      )\n\n      if (exit) {\n        break\n      }\n\n      if (minGallop < 0) {\n        minGallop = 0\n      }\n\n      minGallop += 2\n    }\n\n    this.minGallop = minGallop\n\n    if (minGallop < 1) {\n      this.minGallop = 1\n    }\n\n    if (length2 === 1) {\n      dest -= length1\n      cursor1 -= length1\n      customDest = dest + 1\n      customCursor = cursor1 + 1\n\n      for (i = length1 - 1; i >= 0; i --) {\n        array[customDest + i] = array[customCursor + i]\n        results[customDest + i] = results[customCursor + i]\n      }\n\n      array[dest] = tmp[cursor2]\n      results[dest] = tmpIndex[cursor2]\n    } else if (length2 === 0) {\n      throw new Error('mergeHigh preconditions were not respected')\n    } else {\n      customCursor = dest - (length2 - 1)\n      for (i = 0; i < length2; i ++) {\n        array[customCursor + i] = tmp[i]\n        results[customCursor + i] = tmpIndex[i]\n      }\n    }\n  }\n}\n\n/**\n * Sort an array in the range [lo, hi) using TimSort.\n *\n * @param {array} array - The array to sort.\n * @param {function=} compare - Item comparison function. Default is\n *     alphabetical\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n *     comparator.\n */\nfunction sort (array, compare, lo, hi) {\n  if (!Array.isArray(array)) {\n    throw new TypeError(\n      `The \"array\" argument must be an array. Received ${array}`\n    )\n  }\n\n  results = []\n\n  const {length} = array\n\n  let i = 0\n\n  while (i < length) {\n    results[i] = i ++\n  }\n\n  /*\n   * Handle the case where a comparison function is not provided. We do\n   * lexicographic sorting\n   */\n  if (!compare) {\n    compare = alphabeticalCompare\n  } else if (typeof compare !== 'function') {\n    hi = lo\n    lo = compare\n    compare = alphabeticalCompare\n  }\n\n  if (!lo) {\n    lo = 0\n  }\n  if (!hi) {\n    hi = length\n  }\n\n  let remaining = hi - lo\n\n  // The array is already sorted\n  if (remaining < 2) {\n    return results\n  }\n\n  let runLength = 0\n  // On small arrays binary sort can be used directly\n  if (remaining < DEFAULT_MIN_MERGE) {\n    runLength = makeAscendingRun(array, lo, hi, compare)\n    binaryInsertionSort(array, lo, hi, lo + runLength, compare)\n    return results\n  }\n\n  const ts = new TimSort(array, compare)\n\n  const minRun = minRunLength(remaining)\n\n  do {\n    runLength = makeAscendingRun(array, lo, hi, compare)\n    if (runLength < minRun) {\n      let force = remaining\n      if (force > minRun) {\n        force = minRun\n      }\n\n      binaryInsertionSort(array, lo, lo + force, lo + runLength, compare)\n      runLength = force\n    }\n    // Push new run and merge if necessary\n    ts.pushRun(lo, runLength)\n    ts.mergeRuns()\n\n    // Go find next run\n    remaining -= runLength\n    lo += runLength\n  } while (remaining !== 0)\n\n  // Force merging of remaining runs\n  ts.forceMergeRuns()\n\n  return results\n}\n\nmodule.exports = {\n  sort\n}\n", "const {\n  isObject,\n  isArray,\n  isString,\n  isNumber,\n  isFunction\n} = require('core-util-is')\n\nconst PREFIX_BEFORE = 'before'\nconst PREFIX_AFTER_PROP = 'after-prop'\nconst PREFIX_AFTER_COLON = 'after-colon'\nconst PREFIX_AFTER_VALUE = 'after-value'\nconst PREFIX_AFTER = 'after'\n\nconst PREFIX_BEFORE_ALL = 'before-all'\nconst PREFIX_AFTER_ALL = 'after-all'\n\nconst BRACKET_OPEN = '['\nconst BRACKET_CLOSE = ']'\nconst CURLY_BRACKET_OPEN = '{'\nconst CURLY_BRACKET_CLOSE = '}'\nconst COMMA = ','\nconst EMPTY = ''\nconst MINUS = '-'\n\nconst PROP_SYMBOL_PREFIXES = [\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER\n]\n\nconst NON_PROP_SYMBOL_PREFIXES = [\n  PREFIX_BEFORE,\n  PREFIX_AFTER,\n  PREFIX_BEFORE_ALL,\n  PREFIX_AFTER_ALL\n]\n\nconst NON_PROP_SYMBOL_KEYS = NON_PROP_SYMBOL_PREFIXES.map(Symbol.for)\n\nconst COLON = ':'\nconst UNDEFINED = undefined\n\nconst symbol = (prefix, key) => Symbol.for(prefix + COLON + key)\nconst symbol_checked = (prefix, key) => {\n  if (key) {\n    if (PROP_SYMBOL_PREFIXES.includes(prefix)) {\n      return symbol(prefix, key)\n    }\n\n    throw new RangeError(\n      `Unsupported comment position ${prefix} with key ${key}`\n    )\n  }\n\n  if (NON_PROP_SYMBOL_PREFIXES.includes(prefix)) {\n    return Symbol.for(prefix)\n  }\n\n  throw new RangeError(`Unsupported comment position ${prefix}`)\n}\n\nconst define = (target, key, value) => Object.defineProperty(target, key, {\n  value,\n  writable: true,\n  configurable: true\n})\n\nconst copy_comments_by_kind = (\n  target, source, target_key, source_key, prefix, remove_source\n) => {\n  const source_prop = symbol(prefix, source_key)\n  if (!Object.hasOwn(source, source_prop)) {\n    return\n  }\n\n  const target_prop = target_key === source_key\n    ? source_prop\n    : symbol(prefix, target_key)\n\n  define(target, target_prop, source[source_prop])\n\n  if (remove_source) {\n    delete source[source_prop]\n  }\n}\n\nconst copy_comments = (\n  target, source, target_key, source_key, remove_source\n) => {\n  PROP_SYMBOL_PREFIXES.forEach(prefix => {\n    copy_comments_by_kind(\n      target, source, target_key, source_key, prefix, remove_source\n    )\n  })\n}\n\nconst swap_comments = (array, from, to) => {\n  if (from === to) {\n    return\n  }\n\n  PROP_SYMBOL_PREFIXES.forEach(prefix => {\n    const target_prop = symbol(prefix, to)\n    if (!Object.hasOwn(array, target_prop)) {\n      copy_comments_by_kind(array, array, to, from, prefix, true)\n      return\n    }\n\n    const comments = array[target_prop]\n    delete array[target_prop]\n\n    copy_comments_by_kind(array, array, to, from, prefix, true)\n    define(array, symbol(prefix, from), comments)\n  })\n}\n\nconst assign_non_prop_comments = (target, source) => {\n  NON_PROP_SYMBOL_KEYS.forEach(key => {\n    const comments = source[key]\n\n    if (comments) {\n      define(target, key, comments)\n    }\n  })\n}\n\n// Assign keys and comments\nconst assign = (target, source, keys) => {\n  keys.forEach(key => {\n    if (!isString(key) && !isNumber(key)) {\n      return\n    }\n\n    if (!Object.hasOwn(source, key)) {\n      return\n    }\n\n    target[key] = source[key]\n    copy_comments(target, source, key, key)\n  })\n\n  return target\n}\n\nconst is_raw_json = isFunction(JSON.isRawJSON)\n  // For backward compatibility,\n  // since JSON.isRawJSON is not supported in node < 21\n  ? JSON.isRawJSON\n  // istanbul ignore next\n  : () => false\n\nmodule.exports = {\n  PROP_SYMBOL_PREFIXES,\n\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER,\n\n  PREFIX_BEFORE_ALL,\n  PREFIX_AFTER_ALL,\n\n  BRACKET_OPEN,\n  BRACKET_CLOSE,\n  CURLY_BRACKET_OPEN,\n  CURLY_BRACKET_CLOSE,\n\n  COLON,\n  COMMA,\n  MINUS,\n  EMPTY,\n\n  UNDEFINED,\n\n  symbol,\n  define,\n  copy_comments,\n  swap_comments,\n  assign_non_prop_comments,\n\n  is_raw_json,\n\n  /**\n   * Assign properties and comments from source to target object.\n   *\n   * @param {Object} target The target object to assign properties and comments\n   *   to.\n   * @param {Object} source The source object to copy properties and comments\n   *   from.\n   * @param {Array<string|number>} [keys] Optional array of keys to assign. If\n   *   not provided, all keys and non-property comments are assigned. If empty\n   *   array, only non-property comments are assigned.\n   * @returns {Object} The target object with assigned properties and comments.\n   *\n   * @throws {TypeError} If target cannot be converted to object or keys is not\n   *   array or undefined.\n   *\n   * @example\n   * const source = parse('{\"a\": 1 // comment a, \"b\": 2 // comment b}')\n   * const target = {}\n   *\n   * // Copy all properties and comments\n   * assign(target, source)\n   *\n   * // Copy only specific properties and their comments\n   * assign(target, source, ['a'])\n   *\n   * // Copy only non-property comments\n   * assign(target, source, [])\n   */\n  assign (target, source, keys) {\n    if (!isObject(target)) {\n      throw new TypeError('Cannot convert undefined or null to object')\n    }\n\n    if (!isObject(source)) {\n      return target\n    }\n\n    if (keys === UNDEFINED) {\n      // Copy all comments from source to target, including:\n      // - non-property comments\n      // - property comments\n\n      keys = Object.keys(source)\n      // We assign non-property comments\n      // if argument `keys` is not specified\n      assign_non_prop_comments(target, source)\n    } else if (!isArray(keys)) {\n      throw new TypeError('keys must be array or undefined')\n    } else if (keys.length === 0) {\n      // Copy all non-property comments from source to target\n\n      // Or argument `keys` is an empty array\n      assign_non_prop_comments(target, source)\n    }\n\n    // Copy specified property comments from source to target\n    return assign(target, source, keys)\n  },\n\n  /**\n   * Move comments from one location to another within objects.\n   *\n   * @param {Object} source The source object containing comments to move.\n   * @param {Object} [target] The target object to move comments to. If not\n   *   provided, defaults to source (move within same object).\n   * @param {Object} from The source comment location.\n   * @param {string} from.where The comment position (e.g., 'before',\n   *   'after', 'before-all', etc.).\n   * @param {string} [from.key] The property key for property-specific comments.\n   *   Omit for non-property comments.\n   * @param {Object} to The target comment location.\n   * @param {string} to.where The comment position (e.g., 'before',\n   *   'after', 'before-all', etc.).\n   * @param {string} [to.key] The property key for property-specific comments.\n   *   Omit for non-property comments.\n   * @param {boolean} [override=false] Whether to override existing comments at\n   *   the target location. If false, comments will be appended.\n   *\n   * @throws {TypeError} If source is not an object.\n   * @throws {RangeError} If where parameter is invalid or incompatible with key.\n   *\n   * @example\n   * const obj = parse('{\"a\": 1 // comment on a}')\n   *\n   * // Move comment from after 'a' to before 'a'\n   * moveComments(obj, obj,\n   *   { where: 'after', key: 'a' },\n   *   { where: 'before', key: 'a' }\n   * )\n   *\n   * @example\n   * // Move non-property comment\n   * moveComments(obj, obj,\n   *   { where: 'before-all' },\n   *   { where: 'after-all' }\n   * )\n   */\n  moveComments (source, target, {\n    where: from_where,\n    key: from_key\n  }, {\n    where: to_where,\n    key: to_key\n  }, override = false) {\n    if (!isObject(source)) {\n      throw new TypeError('source must be an object')\n    }\n\n    if (!target) {\n      target = source\n    }\n\n    if (!isObject(target)) {\n      // No target to move to\n      return\n    }\n\n    const from_prop = symbol_checked(from_where, from_key)\n    const to_prop = symbol_checked(to_where, to_key)\n\n    if (!Object.hasOwn(source, from_prop)) {\n      return\n    }\n\n    const source_comments = source[from_prop]\n    delete source[from_prop]\n\n    if (override || !Object.hasOwn(target, to_prop)) {\n      // Override\n      // or the target has no existing comments\n      define(target, to_prop, source_comments)\n      return\n    }\n\n    const target_comments = target[to_prop]\n    if (target_comments) {\n      target_comments.push(...source_comments)\n    }\n  },\n\n  /**\n   * Remove comments from a specific location within an object.\n   *\n   * @param {Object} target The target object to remove comments from.\n   * @param {Object} location The comment location to remove.\n   * @param {string} location.where The comment position (e.g., 'before',\n   *   'after', 'before-all', etc.).\n   * @param {string} [location.key] The property key for property-specific\n   *   comments. Omit for non-property comments.\n   *\n   * @throws {TypeError} If target is not an object.\n   * @throws {RangeError} If where parameter is invalid or incompatible with key.\n   *\n   * @example\n   * const obj = parse('{\"a\": 1 // comment on a}')\n   *\n   * // Remove comment after 'a'\n   * removeComments(obj, { where: 'after', key: 'a' })\n   *\n   * @example\n   * // Remove non-property comment\n   * removeComments(obj, { where: 'before-all' })\n   */\n  removeComments (target, {\n    where,\n    key\n  }) {\n    if (!isObject(target)) {\n      throw new TypeError('target must be an object')\n    }\n\n    const prop = symbol_checked(where, key)\n    if (!Object.hasOwn(target, prop)) {\n      return\n    }\n\n    delete target[prop]\n  }\n}\n", "const {isArray} = require('core-util-is')\nconst {sort} = require('array-timsort')\n\nconst {\n  PROP_SYMBOL_PREFIXES,\n\n  UNDEFINED,\n\n  symbol,\n  copy_comments,\n  swap_comments\n} = require('./common')\n\nconst reverse_comments = array => {\n  const {length} = array\n  let i = 0\n  const max = length / 2\n\n  for (; i < max; i ++) {\n    swap_comments(array, i, length - i - 1)\n  }\n}\n\nconst move_comment = (target, source, i, offset, remove) => {\n  copy_comments(target, source, i + offset, i, remove)\n}\n\nconst move_comments = (\n  // `Array` target array\n  target,\n  // `Array` source array\n  source,\n  // `number` start index\n  start,\n  // `number` number of indexes to move\n  count,\n  // `number` offset to move\n  offset,\n  // `boolean` whether should remove the comments from source\n  remove\n) => {\n  if (offset > 0) {\n    let i = count\n    //         |   count   | offset |\n    // source: -------------\n    // target:          -------------\n    //         | remove |\n    // => remove === offset\n\n    // From [count - 1, 0]\n    while (i -- > 0) {\n      move_comment(target, source, start + i, offset, remove)\n    }\n    return\n  }\n\n  let i = 0\n  // | remove  |  count    |\n  //           -------------\n  // -------------\n  //             | offset  |\n\n  // From [0, count - 1]\n  while (i < count) {\n    const ii = i ++\n    move_comment(target, source, start + ii, offset, remove)\n  }\n}\n\nconst remove_comments = (array, key) => {\n  PROP_SYMBOL_PREFIXES.forEach(prefix => {\n    const prop = symbol(prefix, key)\n    delete array[prop]\n  })\n}\n\nconst get_mapped = (map, key) => {\n  let mapped = key\n\n  while (mapped in map) {\n    mapped = map[mapped]\n  }\n\n  return mapped\n}\n\n/**\n * An Array subclass that preserves comments when array operations are performed.\n *\n * CommentArray extends the native Array class and automatically handles comment\n * preservation during array mutations like splice, slice, push, pop, etc.\n * Comments are stored as symbol properties and are moved/copied appropriately\n * when the array structure changes.\n *\n * @extends Array\n *\n * @example\n * const arr = parse('[1, 2, 3]') // with comments\n * // arr is a CommentArray instance\n * arr.splice(1, 1) // Comments are preserved and repositioned correctly\n */\nclass CommentArray extends Array {\n  // - deleteCount + items.length\n\n  // We should avoid `splice(begin, deleteCount, ...items)`,\n  // because `splice(0, undefined)` is not equivalent to `splice(0)`,\n  // as well as:\n  // - slice\n  /**\n   * Changes the contents of an array by removing or replacing existing\n   *   elements and/or adding new elements in place.\n   * Comments are automatically preserved and repositioned during the operation.\n   *\n   * @param {...*} args Arguments passed to Array.prototype.splice\n   * @returns {CommentArray} A new CommentArray containing the deleted elements.\n   */\n  splice (...args) {\n    const {length} = this\n    const ret = super.splice(...args)\n\n    // #16\n    // If no element removed, we might still need to move comments,\n    //   because splice could add new items\n\n    // if (!ret.length) {\n    //   return ret\n    // }\n\n    // JavaScript syntax is silly\n    // eslint-disable-next-line prefer-const\n    let [begin, deleteCount, ...items] = args\n\n    if (begin < 0) {\n      begin += length\n    }\n\n    if (arguments.length === 1) {\n      deleteCount = length - begin\n    } else {\n      deleteCount = Math.min(length - begin, deleteCount)\n    }\n\n    const {\n      length: item_length\n    } = items\n\n    // itemsToDelete: -\n    // itemsToAdd: +\n    //        |    dc      |  count   |\n    // =======-------------============\n    // =======++++++============\n    //        | il |\n    const offset = item_length - deleteCount\n    const start = begin + deleteCount\n    const count = length - start\n\n    move_comments(this, this, start, count, offset, true)\n\n    return ret\n  }\n\n  /**\n   * Returns a shallow copy of a portion of an array into a new CommentArray object.\n   * Comments are copied to the appropriate positions in the new array.\n   *\n   * @param {...*} args Arguments passed to Array.prototype.slice\n   * @returns {CommentArray} A new CommentArray containing the extracted\n   *   elements with their comments.\n   */\n  slice (...args) {\n    const {length} = this\n    const array = super.slice(...args)\n    if (!array.length) {\n      return new CommentArray()\n    }\n\n    let [begin, before] = args\n\n    // Ref:\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n    if (before === UNDEFINED) {\n      before = length\n    } else if (before < 0) {\n      before += length\n    }\n\n    if (begin < 0) {\n      begin += length\n    } else if (begin === UNDEFINED) {\n      begin = 0\n    }\n\n    move_comments(array, this, begin, before - begin, - begin)\n\n    return array\n  }\n\n  unshift (...items) {\n    const {length} = this\n    const ret = super.unshift(...items)\n    const {\n      length: items_length\n    } = items\n\n    if (items_length > 0) {\n      move_comments(this, this, 0, length, items_length, true)\n    }\n\n    return ret\n  }\n\n  shift () {\n    const ret = super.shift()\n    const {length} = this\n\n    remove_comments(this, 0)\n    move_comments(this, this, 1, length, - 1, true)\n\n    return ret\n  }\n\n  reverse () {\n    super.reverse()\n\n    reverse_comments(this)\n\n    return this\n  }\n\n  pop () {\n    const ret = super.pop()\n\n    // Removes comments\n    remove_comments(this, this.length)\n\n    return ret\n  }\n\n  concat (...items) {\n    let {length} = this\n    const ret = super.concat(...items)\n\n    if (!items.length) {\n      return ret\n    }\n\n    move_comments(ret, this, 0, this.length, 0)\n\n    items.forEach(item => {\n      const prev = length\n      length += isArray(item)\n        ? item.length\n        : 1\n\n      if (!(item instanceof CommentArray)) {\n        return\n      }\n\n      move_comments(ret, item, 0, item.length, prev)\n    })\n\n    return ret\n  }\n\n  sort (...args) {\n    const result = sort(\n      this,\n      // Make sure there is no more than one argument\n      ...args.slice(0, 1)\n    )\n\n    // For example,\n    // if we sort ['b', 'd', 'c', 'a'],\n    // then `result` will be [3, 0, 2, 1], and the array is ['a', 'b', 'c', 'd']\n\n    // First, we swap index 0 (b) and index 3 (a), then the array comments are\n    // ['a.comments', 'd.comments', 'c.comments', 'b.comments']\n    // index 0 is finalized\n    // index 3 is actually mapped to original index 0, we present as 0 -> 3\n\n    // Then swap index 1 (d) and index 0 (-> 3, b)\n    // 1 (index) -> 0 (new index) -> 3 (real_index)\n    // ['d.comments', 'b.comments', 'c.comments', 'd.comments']\n    // index 1 is finalized\n    // index 3 is contains the item of original index 1\n    // - we present as 1 -> 3\n    // - it is ok that we don't remove mapping 0 -> 3\n\n    // Then index 2 should be skipped\n\n    // Then swap index 3 (d) and index 1 (-> 3, b), skipped\n\n    const map = Object.create(null)\n\n    result.forEach((source_index, index) => {\n      if (source_index === index) {\n        return\n      }\n\n      const real_source_index = get_mapped(map, source_index)\n\n      if (real_source_index === index) {\n        return\n      }\n\n      // The item of index `index` gets the final value\n      // delete map[index]\n      map[index] = real_source_index\n\n      swap_comments(this, index, real_source_index)\n    })\n\n    return this\n  }\n}\n\nmodule.exports = {\n  CommentArray\n}\n", "// JSON formatting\n\nconst esprima = require('esprima')\n\nconst {\n  CommentArray,\n} = require('./array')\n\nconst {\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER,\n\n  PREFIX_BEFORE_ALL,\n  PREFIX_AFTER_ALL,\n\n  BRACKET_OPEN,\n  BRACKET_CLOSE,\n  CURLY_BRACKET_OPEN,\n  CURLY_BRACKET_CLOSE,\n\n  COLON,\n  COMMA,\n  MINUS,\n  EMPTY,\n\n  UNDEFINED,\n\n  define,\n  assign_non_prop_comments\n} = require('./common')\n\n/**\n * Tokenize JSON string with comments into an array of tokens.\n *\n * @param {string} code The JSON string with comments to tokenize.\n * @returns {Array} Array of token objects containing type, value, and location\n *   information.\n *\n * @example\n * const tokens = tokenize('{\"a\": 1 // comment}')\n * // Returns array of tokens including comment tokens\n */\nconst tokenize = code => esprima.tokenize(code, {\n  comment: true,\n  loc: true\n})\n\nlet current_code\nconst previous_hosts = []\nlet comments_host = null\nlet unassigned_comments = null\n\nconst previous_props = []\nlet last_prop\n\nlet remove_comments = false\nlet inline = false\nlet tokens = null\nlet last = null\nlet current = null\nlet index\nlet reviver = null\n\nconst clean = () => {\n  current_code = UNDEFINED\n  previous_props.length =\n  previous_hosts.length = 0\n\n  last = null\n  last_prop = UNDEFINED\n}\n\nconst free = () => {\n  clean()\n\n  tokens.length = 0\n\n  unassigned_comments =\n  comments_host =\n  tokens =\n  last =\n  current =\n  reviver = null\n\n  current_code = UNDEFINED\n}\n\nconst symbolFor = prefix => Symbol.for(\n  last_prop !== UNDEFINED\n    ? prefix + COLON + last_prop\n    : prefix\n)\n\nconst transform = (k, {value, context = {}}) => reviver\n  ? reviver(k, value, context)\n  : value\n\nconst unexpected = () => {\n  const error = new SyntaxError(`Unexpected token '${current.value.slice(0, 1)}', \"${current_code}\" is not valid JSON`)\n  Object.assign(error, current.loc.start)\n\n  free()\n\n  throw error\n}\n\nconst unexpected_end = () => {\n  const error = new SyntaxError('Unexpected end of JSON input')\n  Object.assign(error, last\n    ? last.loc.end\n    // Empty string\n    : {\n      line: 1,\n      column: 0\n    })\n\n  free()\n\n  throw error\n}\n\n// Move the reader to the next\nconst next = () => {\n  const new_token = tokens[++ index]\n  inline = current\n    && new_token\n    && current.loc.end.line === new_token.loc.start.line\n    || false\n\n  last = current\n  current = new_token\n}\n\nconst type = () => {\n  if (!current) {\n    unexpected_end()\n  }\n\n  return current.type === 'Punctuator'\n    ? current.value\n    : current.type\n}\n\nconst is = t => type() === t\n\nconst expect = a => {\n  if (!is(a)) {\n    unexpected()\n  }\n}\n\nconst set_comments_host = new_host => {\n  previous_hosts.push(comments_host)\n  comments_host = new_host\n}\n\nconst restore_comments_host = () => {\n  comments_host = previous_hosts.pop()\n}\n\nconst assign_after_comments = () => {\n  if (!unassigned_comments) {\n    return\n  }\n\n  const after_comments = []\n\n  for (const comment of unassigned_comments) {\n    // If the comment is inline, then it is an after-comma comment\n    if (comment.inline) {\n      after_comments.push(comment)\n    // Otherwise, all comments are before:<next-prop> comment\n    } else {\n      break\n    }\n  }\n\n  const {length} = after_comments\n  if (!length) {\n    return\n  }\n\n  if (length === unassigned_comments.length) {\n    // If unassigned_comments are all consumed\n    unassigned_comments = null\n  } else {\n    unassigned_comments.splice(0, length)\n  }\n\n  define(comments_host, symbolFor(PREFIX_AFTER), after_comments)\n}\n\nconst assign_comments = prefix => {\n  if (!unassigned_comments) {\n    return\n  }\n\n  define(comments_host, symbolFor(prefix), unassigned_comments)\n\n  unassigned_comments = null\n}\n\nconst parse_comments = prefix => {\n  const comments = []\n\n  while (\n    current\n    && (\n      is('LineComment')\n      || is('BlockComment')\n    )\n  ) {\n    const comment = {\n      ...current,\n      inline\n    }\n\n    // delete comment.loc\n    comments.push(comment)\n\n    next()\n  }\n\n  if (remove_comments) {\n    return\n  }\n\n  if (!comments.length) {\n    return\n  }\n\n  if (prefix) {\n    define(comments_host, symbolFor(prefix), comments)\n    return\n  }\n\n  unassigned_comments = comments\n}\n\nconst set_prop = (prop, push) => {\n  if (push) {\n    previous_props.push(last_prop)\n  }\n\n  last_prop = prop\n}\n\nconst restore_prop = () => {\n  last_prop = previous_props.pop()\n}\n\nconst parse_object = () => {\n  const obj = {}\n  set_comments_host(obj)\n  set_prop(UNDEFINED, true)\n\n  let started = false\n  let name\n\n  parse_comments()\n\n  while (!is(CURLY_BRACKET_CLOSE)) {\n    if (started) {\n      assign_comments(PREFIX_AFTER_VALUE)\n\n      // key-value pair delimiter\n      expect(COMMA)\n      next()\n      parse_comments()\n\n      assign_after_comments()\n\n      // If there is a trailing comma, we might reach the end\n      // ```\n      // {\n      //   \"a\": 1,\n      // }\n      // ```\n      if (is(CURLY_BRACKET_CLOSE)) {\n        break\n      }\n    }\n\n    started = true\n    expect('String')\n    name = JSON.parse(current.value)\n\n    set_prop(name)\n    assign_comments(PREFIX_BEFORE)\n\n    next()\n    parse_comments(PREFIX_AFTER_PROP)\n\n    expect(COLON)\n\n    next()\n    parse_comments(PREFIX_AFTER_COLON)\n\n    obj[name] = transform(name, walk())\n    parse_comments()\n  }\n\n  if (started) {\n    // If there are properties,\n    // then the unassigned comments are after comments\n    assign_comments(PREFIX_AFTER)\n  }\n\n  // bypass }\n  next()\n  last_prop = undefined\n\n  if (!started) {\n    // Otherwise, they are before comments\n    assign_comments(PREFIX_BEFORE)\n  }\n\n  restore_comments_host()\n  restore_prop()\n\n  return obj\n}\n\nconst parse_array = () => {\n  const array = new CommentArray()\n  set_comments_host(array)\n  set_prop(UNDEFINED, true)\n\n  let started = false\n  let i = 0\n\n  parse_comments()\n\n  while (!is(BRACKET_CLOSE)) {\n    if (started) {\n      assign_comments(PREFIX_AFTER_VALUE)\n      expect(COMMA)\n      next()\n      parse_comments()\n\n      assign_after_comments()\n\n      if (is(BRACKET_CLOSE)) {\n        break\n      }\n    }\n\n    started = true\n\n    set_prop(i)\n    assign_comments(PREFIX_BEFORE)\n\n    array[i] = transform(i, walk())\n    i ++\n\n    parse_comments()\n  }\n\n  if (started) {\n    assign_comments(PREFIX_AFTER)\n  }\n\n  next()\n  last_prop = undefined\n\n  if (!started) {\n    assign_comments(PREFIX_BEFORE)\n  }\n\n  restore_comments_host()\n  restore_prop()\n\n  return array\n}\n\nfunction walk () {\n  let tt = type()\n\n  if (tt === CURLY_BRACKET_OPEN) {\n    next()\n    return {\n      value: parse_object()\n    }\n  }\n\n  if (tt === BRACKET_OPEN) {\n    next()\n    return {\n      value: parse_array()\n    }\n  }\n\n  let negative = EMPTY\n\n  // -1\n  if (tt === MINUS) {\n    next()\n    tt = type()\n    negative = MINUS\n  }\n\n  let v\n  let source\n\n  switch (tt) {\n  case 'String':\n  case 'Boolean':\n  case 'Null':\n  case 'Numeric':\n    v = current.value\n    next()\n\n    source = negative + v\n    return {\n      value: JSON.parse(source),\n      context: {\n        source\n      }\n    }\n  default:\n    // => unexpected token\n    return {}\n  }\n}\n\nconst isObject = subject => Object(subject) === subject\n\n/**\n * Converts a JavaScript Object Notation (JSON) string with comments into an\n * object.\n *\n * @param {string} code A valid JSON string with comments.\n * @param {function} [rev] A function that transforms the results. This function\n *   is called for each member of the object. If a member contains nested\n *   objects, the nested objects are transformed before the parent object is.\n * @param {boolean} [no_comments=false] If true, the comments won't be\n *   maintained, which is often used when we want to get a clean object.\n * @returns {*} The JavaScript object corresponding to the given JSON text with\n *   comments preserved as symbol properties.\n *\n * @example\n * const result = parse('{\"a\": 1 // This is a comment}')\n * // result.a === 1\n * // Comments are stored in symbol properties\n *\n * @example\n * // With reviver function\n * const result = parse('{\"a\": \"1\"}', (key, value) => {\n *   return typeof value === 'string' ? parseInt(value) : value\n * })\n *\n * @example\n * // Without comments\n * const clean = parse('{\"a\": 1 // comment}', null, true)\n * // Returns clean object without comment symbols\n */\nconst parse = (code, rev, no_comments) => {\n  // Clean variables in closure\n  clean()\n\n  current_code = code\n  tokens = tokenize(code)\n  reviver = rev\n  remove_comments = no_comments\n\n  if (!tokens.length) {\n    unexpected_end()\n  }\n\n  index = - 1\n  next()\n\n  set_comments_host({})\n\n  parse_comments(PREFIX_BEFORE_ALL)\n\n  const final = walk()\n\n  parse_comments(PREFIX_AFTER_ALL)\n\n  if (current) {\n    unexpected()\n  }\n\n  // reviver\n  let result = transform('', final)\n\n  // We should run reviver before the checks below,\n  // otherwise the comment info will be lost\n  if (!no_comments && result !== null) {\n    if (!isObject(result)) {\n      // 1 -> new Number(1)\n      // true -> new Boolean(1)\n      // \"foo\" -> new String(\"foo\")\n\n      // eslint-disable-next-line no-new-object\n      result = new Object(result)\n    }\n\n    assign_non_prop_comments(result, comments_host)\n  }\n\n  restore_comments_host()\n\n  free()\n\n  return result\n}\n\nmodule.exports = {\n  parse,\n  tokenize\n}\n", "const {\n  isArray, isObject, isFunction, isNumber, isString\n} = require('core-util-is')\n\nconst {\n  PREFIX_BEFORE_ALL,\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER,\n  PREFIX_AFTER_ALL,\n\n  BRACKET_OPEN,\n  BRACKET_CLOSE,\n  CURLY_BRACKET_OPEN,\n  CURLY_BRACKET_CLOSE,\n  COLON,\n  COMMA,\n  EMPTY,\n\n  UNDEFINED,\n\n  is_raw_json\n} = require('./common')\n\n// eslint-disable-next-line no-control-regex, no-misleading-character-class\nconst ESCAPABLE = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g\n\n// String constants\nconst SPACE = ' '\nconst LF = '\\n'\nconst STR_NULL = 'null'\n\n// Symbol tags\nconst BEFORE = prop => `${PREFIX_BEFORE}:${prop}`\nconst AFTER_PROP = prop => `${PREFIX_AFTER_PROP}:${prop}`\nconst AFTER_COLON = prop => `${PREFIX_AFTER_COLON}:${prop}`\nconst AFTER_VALUE = prop => `${PREFIX_AFTER_VALUE}:${prop}`\nconst AFTER = prop => `${PREFIX_AFTER}:${prop}`\n\n// table of character substitutions\nconst meta = {\n  '\\b': '\\\\b',\n  '\\t': '\\\\t',\n  '\\n': '\\\\n',\n  '\\f': '\\\\f',\n  '\\r': '\\\\r',\n  '\"': '\\\\\"',\n  '\\\\': '\\\\\\\\'\n}\n\nconst escape = string => {\n  ESCAPABLE.lastIndex = 0\n\n  if (!ESCAPABLE.test(string)) {\n    return string\n  }\n\n  return string.replace(ESCAPABLE, a => {\n    const c = meta[a]\n    return typeof c === 'string'\n      ? c\n      : a\n  })\n}\n\n// Escape no control characters, no quote characters,\n// and no backslash characters,\n// then we can safely slap some quotes around it.\nconst quote = string => `\"${escape(string)}\"`\nconst comment_stringify = (value, line) => line\n  ? `//${value}`\n  : `/*${value}*/`\n\n// display_block `boolean` whether the\n//   WHOLE block of comments is always a block group\nconst process_comments = (host, symbol_tag, deeper_gap, display_block) => {\n  const comments = host[Symbol.for(symbol_tag)]\n  if (!comments || !comments.length) {\n    return EMPTY\n  }\n\n  let is_line_comment = false\n\n  const str = comments.reduce((prev, {\n    inline,\n    type,\n    value\n  }) => {\n    const delimiter = inline\n      ? SPACE\n      : LF + deeper_gap\n\n    is_line_comment = type === 'LineComment'\n\n    return prev + delimiter + comment_stringify(value, is_line_comment)\n  }, EMPTY)\n\n  return display_block\n  // line comment should always end with a LF\n  || is_line_comment\n    ? str + LF + deeper_gap\n    : str\n}\n\nlet replacer = null\nlet indent = EMPTY\n\nconst clean = () => {\n  replacer = null\n  indent = EMPTY\n}\n\nconst join = (one, two, gap) =>\n  one\n    ? two\n      // Symbol.for('before') and Symbol.for('before:prop')\n      // might both exist if user mannually add comments to the object\n      // and make a mistake.\n      // SO, we are not to only trimRight but trim for both sides\n      ? one + two.trim() + LF + gap\n      : one.trimRight() + LF + gap\n    : two\n      ? two.trimRight() + LF + gap\n      : EMPTY\n\nconst join_content = (inside, value, gap) => {\n  const comment = process_comments(value, PREFIX_BEFORE, gap + indent, true)\n\n  return join(comment, inside, gap)\n}\n\n// | deeper_gap   |\n// | gap | indent |\n//       [\n//                \"foo\",\n//                \"bar\"\n//       ]\nconst array_stringify = (value, gap) => {\n  const deeper_gap = gap + indent\n\n  const {length} = value\n\n  // From the item to before close\n  let inside = EMPTY\n  let after_comma = EMPTY\n\n  // Never use Array.prototype.forEach,\n  // that we should iterate all items\n  for (let i = 0; i < length; i ++) {\n    if (i !== 0) {\n      inside += COMMA\n    }\n\n    const before = join(\n      after_comma,\n      process_comments(value, BEFORE(i), deeper_gap),\n      deeper_gap\n    )\n\n    inside += before || (LF + deeper_gap)\n\n    // JSON.stringify([undefined])  => [null]\n    inside += stringify(i, value, deeper_gap) || STR_NULL\n\n    inside += process_comments(value, AFTER_VALUE(i), deeper_gap)\n\n    after_comma = process_comments(value, AFTER(i), deeper_gap)\n  }\n\n  inside += join(\n    after_comma,\n    process_comments(value, PREFIX_AFTER, deeper_gap),\n    deeper_gap\n  )\n\n  return BRACKET_OPEN\n   + join_content(inside, value, gap)\n   + BRACKET_CLOSE\n}\n\n// | deeper_gap   |\n// | gap | indent |\n//       {\n//                \"foo\": 1,\n//                \"bar\": 2\n//       }\nconst object_stringify = (value, gap) => {\n  // Due to a specification blunder in ECMAScript, typeof null is 'object',\n  // so watch out for that case.\n  if (!value) {\n    return 'null'\n  }\n\n  const deeper_gap = gap + indent\n\n  // From the first element to before close\n  let inside = EMPTY\n  let after_comma = EMPTY\n  let first = true\n\n  const keys = isArray(replacer)\n    ? replacer\n    : Object.keys(value)\n\n  const iteratee = key => {\n    // Stringified value\n    const sv = stringify(key, value, deeper_gap)\n\n    // If a value is undefined, then the key-value pair should be ignored\n    if (sv === UNDEFINED) {\n      return\n    }\n\n    // The treat ment\n    if (!first) {\n      inside += COMMA\n    }\n\n    first = false\n\n    const before = join(\n      after_comma,\n      process_comments(value, BEFORE(key), deeper_gap),\n      deeper_gap\n    )\n\n    inside += before || (LF + deeper_gap)\n\n    inside += quote(key)\n    + process_comments(value, AFTER_PROP(key), deeper_gap)\n    + COLON\n    + process_comments(value, AFTER_COLON(key), deeper_gap)\n    + SPACE\n    + sv\n    + process_comments(value, AFTER_VALUE(key), deeper_gap)\n\n    after_comma = process_comments(value, AFTER(key), deeper_gap)\n  }\n\n  keys.forEach(iteratee)\n\n  // if (after_comma) {\n  //   inside += COMMA\n  // }\n\n  inside += join(\n    after_comma,\n    process_comments(value, PREFIX_AFTER, deeper_gap),\n    deeper_gap\n  )\n\n  return CURLY_BRACKET_OPEN\n  + join_content(inside, value, gap)\n  + CURLY_BRACKET_CLOSE\n}\n\n// @param {string} key\n// @param {Object} holder\n// @param {function()|Array} replacer\n// @param {string} indent\n// @param {string} gap\nfunction stringify (key, holder, gap) {\n  let value = holder[key]\n\n  // If the value has a toJSON method, call it to obtain a replacement value.\n  if (isObject(value) && isFunction(value.toJSON)) {\n    value = value.toJSON(key)\n  }\n\n  // If we were called with a replacer function, then call the replacer to\n  // obtain a replacement value.\n  if (isFunction(replacer)) {\n    value = replacer.call(holder, key, value)\n  }\n\n  switch (typeof value) {\n  case 'string':\n    return quote(value)\n\n  case 'number':\n    // JSON numbers must be finite. Encode non-finite numbers as null.\n    return Number.isFinite(value) ? String(value) : STR_NULL\n\n  case 'boolean':\n  case 'null':\n\n    // If the value is a boolean or null, convert it to a string. Note:\n    // typeof null does not produce 'null'. The case is included here in\n    // the remote chance that this gets fixed someday.\n    return String(value)\n\n  // If the type is 'object', we might be dealing with an object or an array or\n  // null.\n  case 'object':\n    if (is_raw_json(value)) {\n      return value.rawJSON\n    }\n\n    return isArray(value)\n      ? array_stringify(value, gap)\n      : object_stringify(value, gap)\n\n  // undefined\n  default:\n    // JSON.stringify(undefined) === undefined\n    // JSON.stringify('foo', () => undefined) === undefined\n  }\n}\n\nconst get_indent = space => isString(space)\n  // If the space parameter is a string, it will be used as the indent string.\n  ? space\n  : isNumber(space)\n    ? SPACE.repeat(space)\n    : EMPTY\n\nconst {toString} = Object.prototype\nconst PRIMITIVE_OBJECT_TYPES = [\n  '[object Number]',\n  '[object String]',\n  '[object Boolean]'\n]\n\nconst is_primitive_object = subject => {\n  if (typeof subject !== 'object') {\n    return false\n  }\n\n  const str = toString.call(subject)\n  return PRIMITIVE_OBJECT_TYPES.includes(str)\n}\n\n/**\n * Converts a JavaScript value to a JavaScript Object Notation (JSON) string\n * with comments preserved.\n *\n * @param {*} value A JavaScript value, usually an object or array, to be\n *   converted.\n * @param {function|Array|null} [replacer_] A function that transforms the\n *   results or an array of strings and numbers that acts as an approved list\n *   for selecting the object properties that will be stringified.\n * @param {string|number} [space] Adds indentation, white space, and line\n *   break characters to the return-value JSON text to make it easier to read.\n * @returns {string} A JSON string representing the given value with comments\n *   preserved.\n *\n * @example\n * const obj = parse('{\"a\": 1 // comment}')\n * stringify(obj, null, 2)\n * // Returns: '{\\n  \"a\": 1 // comment\\n}'\n *\n * @example\n * // With replacer function\n * stringify(obj, (key, value) => typeof value === 'number' ? value * 2 : value)\n *\n * @example\n * // With replacer array\n * stringify(obj, ['a', 'b']) // Only include 'a' and 'b' properties\n */\nmodule.exports = (value, replacer_, space) => {\n  // The stringify method takes a value and an optional replacer, and an optional\n  // space parameter, and returns a JSON text. The replacer can be a function\n  // that can replace values, or an array of strings that will select the keys.\n  // A default replacer method can be provided. Use of the space parameter can\n  // produce text that is more easily readable.\n\n  // If the space parameter is a number, make an indent string containing that\n  // many spaces.\n  const indent_ = get_indent(space)\n\n  if (!indent_) {\n    return JSON.stringify(value, replacer_)\n  }\n\n  // vanilla `JSON.parse` allow invalid replacer\n  if (!isFunction(replacer_) && !isArray(replacer_)) {\n    replacer_ = null\n  }\n\n  replacer = replacer_\n  indent = indent_\n\n  const str = is_primitive_object(value)\n    ? JSON.stringify(value)\n    : stringify('', {'': value}, EMPTY)\n\n  clean()\n\n  return isObject(value)\n    ? process_comments(value, PREFIX_BEFORE_ALL, EMPTY, true).trimLeft()\n      + str\n      + process_comments(value, PREFIX_AFTER_ALL, EMPTY).trimRight()\n    : str\n}\n", "const {parse, tokenize} = require('./parse')\nconst stringify = require('./stringify')\nconst {CommentArray} = require('./array')\nconst {\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER,\n\n  PREFIX_BEFORE_ALL,\n  PREFIX_AFTER_ALL,\n\n  assign,\n  moveComments,\n  removeComments\n} = require('./common')\n\nmodule.exports = {\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER,\n\n  PREFIX_BEFORE_ALL,\n  PREFIX_AFTER_ALL,\n\n  parse,\n  stringify,\n  tokenize,\n\n  CommentArray,\n  assign,\n  moveComments,\n  removeComments\n}\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * # JsonUtilities - Comment-Preserving JSON Handling\r\n *\r\n * This module provides centralized utilities for parsing and stringifying JSON\r\n * while preserving C-style comments (// and /* *\\/).\r\n *\r\n * ## Key Concepts\r\n *\r\n * - Uses the `comment-json` library which stores comments as Symbol properties\r\n * - Comments are attached to the parsed object and survive mutations\r\n * - To preserve comments during round-trip, you must:\r\n *   1. Parse once with `parseJsonWithComments()`\r\n *   2. Mutate the returned object (don't create a new one)\r\n *   3. Stringify with `stringifyJsonWithComments()`\r\n *\r\n * ## Important Limitations\r\n *\r\n * - Array reassignment loses comments - use `commentJson.assign()` or in-place mutations\r\n * - Copying objects with spread/Object.assign loses comment symbols\r\n * - The parsed object must be retained to preserve comments\r\n *\r\n * ## Usage Pattern\r\n *\r\n * ```typescript\r\n * // Parse and cache the result\r\n * const obj = JsonUtilities.parseJsonWithComments(jsonString);\r\n *\r\n * // Modify properties directly on the parsed object\r\n * obj.someProperty = \"new value\";\r\n *\r\n * // Stringify preserves comments\r\n * const output = JsonUtilities.stringifyJsonWithComments(obj);\r\n * ```\r\n */\r\n\r\nimport * as commentJson from \"comment-json\";\r\nimport Utilities from \"./Utilities\";\r\n\r\n// Re-export types from comment-json for convenience (as type-only exports)\r\nexport type { CommentJSONValue, CommentObject, CommentToken } from \"comment-json\";\r\n\r\n// Re-export CommentArray as a value (it's a class)\r\nexport const CommentArrayClass = commentJson.CommentArray;\r\n\r\n/**\r\n * Parses a JSON string while preserving comments.\r\n * The returned object contains Symbol properties that store comment metadata.\r\n *\r\n * @param jsonString The JSON string to parse (may contain // and /* *\\/ comments)\r\n * @param fixContent If true, applies Utilities.fixJsonContentForCommentJson to handle\r\n *                   trailing commas and other non-standard JSON before parsing\r\n * @returns The parsed object with comment metadata preserved as Symbol properties\r\n */\r\nexport function parseJsonWithComments(jsonString: string, fixContent: boolean = true): commentJson.CommentJSONValue {\r\n  if (fixContent) {\r\n    jsonString = Utilities.fixJsonContentForCommentJson(jsonString);\r\n  }\r\n\r\n  return commentJson.parse(jsonString);\r\n}\r\n\r\n/**\r\n * Stringifies an object to JSON, preserving any comments stored as Symbol properties.\r\n *\r\n * @param value The object to stringify (should be one returned from parseJsonWithComments\r\n *              or created with comment-json utilities to have comments)\r\n * @param space Indentation (default: 2 spaces)\r\n * @returns JSON string with comments restored in their original positions\r\n */\r\nexport function stringifyJsonWithComments(value: unknown, space: string | number = 2): string {\r\n  return commentJson.stringify(value, null, space);\r\n}\r\n\r\n/**\r\n * Assigns properties from source to target while preserving comment metadata.\r\n * Use this instead of Object.assign or spread to maintain comments.\r\n *\r\n * @param target The target object to assign properties to\r\n * @param source The source object to copy properties from\r\n * @param keys Optional array of keys to assign. If not provided, all keys are assigned.\r\n * @returns The target object with properties and comments from source\r\n */\r\nexport function assignJsonPreservingComments<T, S>(target: T, source: S, keys?: readonly (string | number)[]): T {\r\n  return commentJson.assign(target, source, keys);\r\n}\r\n\r\n/**\r\n * Checks if two JSON strings are semantically equal (same data, ignoring whitespace/formatting).\r\n * This does NOT consider comments - it only compares the actual data values.\r\n *\r\n * @param contentA First JSON string\r\n * @param contentB Second JSON string\r\n * @returns true if the JSON data is semantically equivalent\r\n */\r\nexport function jsonContentsSemanticallyEqual(contentA: string, contentB: string): boolean {\r\n  try {\r\n    // Parse without preserving comments for semantic comparison\r\n    const objA = commentJson.parse(contentA, null, true); // true = remove comments\r\n    const objB = commentJson.parse(contentB, null, true);\r\n\r\n    return Utilities.consistentStringify(objA) === Utilities.consistentStringify(objB);\r\n  } catch (e) {\r\n    // If parsing fails, fall back to string comparison\r\n    return contentA === contentB;\r\n  }\r\n}\r\n\r\n/**\r\n * Compares two JSON objects for semantic equality, ignoring comment metadata.\r\n * Use this when you have already-parsed objects and want to check if their\r\n * actual data (not comments) is the same.\r\n *\r\n * @param objA First object (may have comment metadata)\r\n * @param objB Second object (may have comment metadata)\r\n * @returns true if the JSON data is semantically equivalent\r\n */\r\nexport function jsonObjectsSemanticallyEqual(objA: unknown, objB: unknown): boolean {\r\n  try {\r\n    return Utilities.consistentStringify(objA) === Utilities.consistentStringify(objB);\r\n  } catch (e) {\r\n    return false;\r\n  }\r\n}\r\n\r\n/**\r\n * Merges new values into an existing comment-json object, preserving comments.\r\n * This is the recommended way to update a JSON object while keeping its comments.\r\n *\r\n * @param original The original parsed object with comments\r\n * @param updates An object containing the properties to update\r\n * @returns The original object with updates applied (mutates in place)\r\n */\r\nexport function mergeJsonPreservingComments<T extends object>(original: T, updates: Partial<T>): T {\r\n  // Use comment-json's assign to copy properties while preserving comment symbols\r\n  for (const key of Object.keys(updates) as (keyof T)[]) {\r\n    // Guard against prototype pollution\r\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\r\n      continue;\r\n    }\r\n    const value = updates[key];\r\n    if (value !== undefined) {\r\n      // For nested objects, we need to recursively merge\r\n      if (\r\n        typeof value === \"object\" &&\r\n        value !== null &&\r\n        !Array.isArray(value) &&\r\n        typeof original[key] === \"object\" &&\r\n        original[key] !== null &&\r\n        !Array.isArray(original[key])\r\n      ) {\r\n        mergeJsonPreservingComments(original[key] as object, value as object);\r\n      } else {\r\n        // For primitives and arrays, just assign\r\n        // Note: Array assignment will lose comments on the array itself\r\n        // For arrays, consider using CommentArray methods like splice/push\r\n        (original as any)[key] = value;\r\n      }\r\n    }\r\n  }\r\n\r\n  return original;\r\n}\r\n\r\n/**\r\n * Creates a deep clone of a comment-json object, preserving comments.\r\n * Use this when you need a copy that retains comment metadata.\r\n *\r\n * @param obj The object to clone\r\n * @returns A new object with the same data and comments\r\n */\r\nexport function cloneJsonWithComments<T>(obj: T): T {\r\n  // The simplest way to clone while preserving comments is to stringify and re-parse\r\n  const jsonString = commentJson.stringify(obj, null, 2);\r\n  return commentJson.parse(jsonString) as T;\r\n}\r\n\r\n/**\r\n * Checks if an object was parsed with comment-json and contains comment metadata.\r\n *\r\n * @param obj The object to check\r\n * @returns true if the object has comment Symbol properties\r\n */\r\nexport function hasCommentMetadata(obj: unknown): boolean {\r\n  if (obj === null || typeof obj !== \"object\") {\r\n    return false;\r\n  }\r\n\r\n  // Check for any comment-json symbols\r\n  const symbols = Object.getOwnPropertySymbols(obj);\r\n  return symbols.some((sym) => sym.description?.startsWith(\"before\") || sym.description?.startsWith(\"after\"));\r\n}\r\n\r\n/**\r\n * Default export providing all JsonUtilities functions as a namespace-like object.\r\n * This allows both `import JsonUtilities from \"./JsonUtilities\"` and\r\n * `import { parseJsonWithComments } from \"./JsonUtilities\"` usage patterns.\r\n */\r\nconst JsonUtilities = {\r\n  parseJsonWithComments,\r\n  stringifyJsonWithComments,\r\n  assignJsonPreservingComments,\r\n  mergeJsonPreservingComments,\r\n  jsonContentsSemanticallyEqual,\r\n  jsonObjectsSemanticallyEqual,\r\n  cloneJsonWithComments,\r\n  hasCommentMetadata,\r\n  CommentArrayClass,\r\n};\r\n\r\nexport default JsonUtilities;\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport IFolder from \"./IFolder\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport IStorage from \"./IStorage\";\r\nimport * as md5 from \"js-md5\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IVersionContent from \"./IVersionContent\";\r\nimport JsonUtilities from \"../core/JsonUtilities\";\r\n\r\nexport default abstract class FileBase implements IFile {\r\n  abstract get name(): string;\r\n  abstract get parentFolder(): IFolder;\r\n  abstract get isContentLoaded(): boolean;\r\n\r\n  priorVersions: IVersionContent[] = [];\r\n\r\n  isDisposed: boolean = false;\r\n\r\n  isInErrorState?: boolean;\r\n  errorStateMessage?: string;\r\n\r\n  /**\r\n   * Cache for comment-json parsed object.\r\n   * When set, contains the parsed JSON with comment metadata preserved as Symbol properties.\r\n   */\r\n  commentJsonCache?: unknown;\r\n\r\n  protected _content: string | Uint8Array | null;\r\n\r\n  #fileContainerStorage: IStorage | null = null;\r\n  #onFileContentUpdated = new EventDispatcher<IFile, IFile>();\r\n\r\n  get fileContainerStorage() {\r\n    return this.#fileContainerStorage;\r\n  }\r\n\r\n  public get onFileContentUpdated() {\r\n    return this.#onFileContentUpdated.asEvent();\r\n  }\r\n\r\n  set fileContainerStorage(newStorage: IStorage | null) {\r\n    this.#fileContainerStorage = newStorage;\r\n  }\r\n\r\n  get isString() {\r\n    return this._content !== null && typeof this._content === \"string\";\r\n  }\r\n\r\n  get canIgnore() {\r\n    return StorageUtilities.canIgnoreFileName(this.name) || StorageUtilities.canIgnoreFileExtension(this.type);\r\n  }\r\n\r\n  get isBinary() {\r\n    if (this._content === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (this._content instanceof Uint8Array) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  get content() {\r\n    return this._content;\r\n  }\r\n\r\n  get latestModified() {\r\n    if (this.modified == null) {\r\n      return this.modifiedAtLoad;\r\n    }\r\n\r\n    if (this.modifiedAtLoad == null) {\r\n      return null;\r\n    }\r\n\r\n    if (this.modified.getTime() > this.modifiedAtLoad.getTime()) {\r\n      return this.modified;\r\n    }\r\n\r\n    return this.modifiedAtLoad;\r\n  }\r\n\r\n  modified: Date | null;\r\n  modifiedAtLoad: Date | null;\r\n  lastLoadedOrSaved: Date | null;\r\n  manager?: any;\r\n  tag?: any;\r\n\r\n  get type(): string {\r\n    return StorageUtilities.getTypeFromName(this.name);\r\n  }\r\n\r\n  get needsSave() {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    return this.modified != null && (this.lastLoadedOrSaved == null || this.modified >= this.lastLoadedOrSaved);\r\n  }\r\n\r\n  get fullPath(): string {\r\n    return this.storageRelativePath;\r\n  }\r\n\r\n  get extendedPath(): string {\r\n    let start = \"\";\r\n\r\n    if (this.parentFolder.storage.storagePath) {\r\n      start = this.parentFolder.storage.storagePath;\r\n    }\r\n\r\n    return start + this.fullPath;\r\n  }\r\n\r\n  get storageRelativePath() {\r\n    return this.parentFolder.storageRelativePath + this.name;\r\n  }\r\n\r\n  getRootRelativePath() {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    return this.getFolderRelativePath(this.parentFolder.storage.rootFolder);\r\n  }\r\n\r\n  getFolderRelativePath(toFolder: IFolder) {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    let result = this.parentFolder.getFolderRelativePath(toFolder);\r\n\r\n    if (result === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return result + this.name;\r\n  }\r\n\r\n  get coreContentLength() {\r\n    if (!this.content) {\r\n      return 0;\r\n    }\r\n\r\n    if (this.isBinary || typeof this.content !== \"string\") {\r\n      return this.content.length;\r\n    }\r\n\r\n    return this.content.replace(/\\s/g, \"\").length;\r\n  }\r\n\r\n  constructor() {\r\n    this.modified = null;\r\n    this.modifiedAtLoad = null;\r\n    this.lastLoadedOrSaved = null;\r\n    this._content = null;\r\n  }\r\n\r\n  contentWasModified(oldContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    let oldVersionContent: IVersionContent | undefined = undefined;\r\n\r\n    if (updateType !== FileUpdateType.versionRestoration && updateType !== FileUpdateType.versionlessEdit) {\r\n      let oldModified = this.modified;\r\n\r\n      if (oldModified === null) {\r\n        oldModified = this.lastLoadedOrSaved;\r\n      }\r\n\r\n      oldVersionContent = {\r\n        id: Utilities.createRandomId(10),\r\n        content: oldContent,\r\n        file: this,\r\n        versionTime: oldModified,\r\n      };\r\n\r\n      this.parentFolder.storage.addVersion(oldVersionContent, updateType ? updateType : FileUpdateType.regularEdit);\r\n    }\r\n\r\n    this.modified = new Date();\r\n\r\n    this.notifyFileContentUpdated();\r\n\r\n    if (this.parentFolder.storage) {\r\n      this.parentFolder.storage.notifyFileContentsUpdated({\r\n        file: this,\r\n        updateType: updateType ? updateType : FileUpdateType.regularEdit,\r\n        sourceId: sourceId,\r\n        priorVersion: oldVersionContent,\r\n      });\r\n    }\r\n  }\r\n\r\n  notifyFileContentUpdated() {\r\n    this.#onFileContentUpdated.dispatch(this, this);\r\n  }\r\n\r\n  async getHash(): Promise<string | undefined> {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent(false);\r\n    }\r\n\r\n    if (this._content === undefined || this._content === null) {\r\n      return undefined;\r\n    }\r\n\r\n    return (md5 as any).md5(this._content);\r\n  }\r\n\r\n  unload() {\r\n    this._content = null;\r\n    this.lastLoadedOrSaved = null;\r\n    // Also clear the manager (typically a Definition object with parsed JSON) to fully release memory\r\n    this.manager = undefined;\r\n    // Clear cached parsed JSON to release memory\r\n    this.commentJsonCache = undefined;\r\n  }\r\n\r\n  dispose() {\r\n    this.manager = undefined;\r\n    this._content = null;\r\n    this.lastLoadedOrSaved = null;\r\n    this.commentJsonCache = undefined;\r\n\r\n    this.isDisposed = true;\r\n  }\r\n\r\n  async exists() {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    await this.loadContent(false);\r\n\r\n    return this._content !== null;\r\n  }\r\n\r\n  getRelativePathFor(file: IFile): string | undefined {\r\n    if (file.parentFolder.storage !== this.parentFolder.storage) {\r\n      return undefined;\r\n    }\r\n    const foldersByPath: { [path: string]: IFolder } = {};\r\n    let targetParentFolder: IFolder | null = file.parentFolder;\r\n\r\n    while (targetParentFolder) {\r\n      foldersByPath[targetParentFolder.storageRelativePath] = targetParentFolder;\r\n      targetParentFolder = targetParentFolder.parentFolder;\r\n    }\r\n\r\n    let myParentFolder: IFolder | null = this.parentFolder;\r\n\r\n    let relativePath = \".\" + myParentFolder.storage.folderDelimiter;\r\n    while (myParentFolder && foldersByPath[myParentFolder.storageRelativePath] === undefined) {\r\n      relativePath += \"..\" + myParentFolder.storage.folderDelimiter;\r\n\r\n      myParentFolder = myParentFolder.parentFolder;\r\n    }\r\n\r\n    if (!myParentFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const folderRelativePath = file.getFolderRelativePath(myParentFolder);\r\n\r\n    if (!folderRelativePath) {\r\n      return undefined;\r\n    }\r\n\r\n    return relativePath + StorageUtilities.ensureNotStartsWithDelimiter(folderRelativePath);\r\n  }\r\n\r\n  setObjectContentIfSemanticallyDifferent(\r\n    value: object | null | undefined,\r\n    updateType?: FileUpdateType,\r\n    sourceId?: string\r\n  ) {\r\n    if (value === null || value === undefined) {\r\n      if (this._content !== null) {\r\n        this.setContent(null, updateType, sourceId);\r\n        this.commentJsonCache = undefined;\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    }\r\n\r\n    if (!(typeof this._content === \"string\")) {\r\n      // No existing content - check if the new value has comment metadata\r\n      if (JsonUtilities.hasCommentMetadata(value)) {\r\n        this.setContent(JsonUtilities.stringifyJsonWithComments(value), updateType, sourceId);\r\n        this.commentJsonCache = value;\r\n      } else {\r\n        this.setContent(JSON.stringify(value, null, 2), updateType, sourceId);\r\n      }\r\n      return true;\r\n    }\r\n\r\n    try {\r\n      // If the value has comment metadata, use comment-preserving comparison and stringify\r\n      if (JsonUtilities.hasCommentMetadata(value)) {\r\n        const currentObj = this.commentJsonCache ?? JsonUtilities.parseJsonWithComments(this._content as string);\r\n\r\n        if (!JsonUtilities.jsonObjectsSemanticallyEqual(currentObj, value)) {\r\n          this.setContent(JsonUtilities.stringifyJsonWithComments(value), updateType, sourceId);\r\n          this.commentJsonCache = value;\r\n          return true;\r\n        }\r\n        return false;\r\n      }\r\n\r\n      // Standard path for objects without comment metadata\r\n      const currentObj = JSON.parse(this._content);\r\n\r\n      if (Utilities.consistentStringify(currentObj) !== Utilities.consistentStringify(value)) {\r\n        this.setContent(JSON.stringify(value, null, 2), updateType, sourceId);\r\n        return true;\r\n      }\r\n    } catch (e) {\r\n      // JSON.parse failed \u2014 current content may have comments or trailing commas.\r\n      // Try comment-aware parsing before unconditionally overwriting (prevents phantom edits).\r\n      try {\r\n        const currentObj = JSON.parse(Utilities.fixJsonContent(this._content as string));\r\n        if (Utilities.consistentStringify(currentObj) === Utilities.consistentStringify(value)) {\r\n          return false;\r\n        }\r\n      } catch {\r\n        // Both parses failed \u2014 content is truly unparseable, proceed with overwrite\r\n      }\r\n\r\n      if (JsonUtilities.hasCommentMetadata(value)) {\r\n        this.setContent(JsonUtilities.stringifyJsonWithComments(value), updateType, sourceId);\r\n        this.commentJsonCache = value;\r\n      } else {\r\n        this.setContent(JSON.stringify(value, null, 2), updateType, sourceId);\r\n      }\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async reloadAfterExternalUpdate() {\r\n    let existingContent = this._content;\r\n\r\n    await this.loadContent(true);\r\n\r\n    if (this._content !== existingContent) {\r\n      this.contentWasModified(existingContent, FileUpdateType.externalChange);\r\n    }\r\n  }\r\n\r\n  setContentIfSemanticallyDifferent(value: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    if (value === null) {\r\n      if (this._content !== null) {\r\n        this.setContent(null, updateType, sourceId);\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    }\r\n\r\n    if (value instanceof Uint8Array) {\r\n      if (!(this._content instanceof Uint8Array) || this._content.length !== value.length) {\r\n        this.setContent(value, updateType, sourceId);\r\n        return true;\r\n      } else {\r\n        for (let i = 0; i < value.length; i++) {\r\n          if (this._content[i] !== value[i]) {\r\n            this.setContent(value, updateType, sourceId);\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    } else if (typeof value === \"string\") {\r\n      if (!(typeof this._content === \"string\")) {\r\n        this.setContent(value, updateType, sourceId);\r\n\r\n        return true;\r\n      } else {\r\n        if (this.type === \"json\") {\r\n          try {\r\n            const currentObj = JSON.parse(this._content);\r\n            const newObj = JSON.parse(value);\r\n\r\n            if (Utilities.consistentStringify(currentObj) !== Utilities.consistentStringify(newObj)) {\r\n              return this.setContent(value, updateType, sourceId);\r\n            }\r\n          } catch (e) {\r\n            return this.setContent(value);\r\n          }\r\n        } else {\r\n          if (this._content.length !== value.length) {\r\n            return this.setContent(value, updateType, sourceId);\r\n          }\r\n\r\n          for (let i = 0; i < value.length; i++) {\r\n            if (this._content[i] !== value[i]) {\r\n              return this.setContent(value, updateType, sourceId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  abstract scanForChanges(): Promise<void>;\r\n  abstract deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean>;\r\n  abstract moveTo(newStorageRelativePath: string): Promise<boolean>;\r\n  abstract loadContent(force?: boolean): Promise<Date>;\r\n  abstract setContent(value: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string): boolean;\r\n  abstract saveContent(): Promise<Date>;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ZipFolder from \"./ZipFolder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport FileBase from \"./FileBase\";\r\nimport JSZip from \"jszip\";\r\nimport StorageUtilities, { EncodingType } from \"./StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class ZipFile extends FileBase implements IFile {\r\n  _name: string;\r\n  _parentFolder: ZipFolder;\r\n  _jszipo: JSZip.JSZipObject | null;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    return StorageUtilities.ensureEndsWithDelimiter(this._parentFolder.fullPath) + this.name;\r\n  }\r\n\r\n  get parentFolder(): ZipFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get isContentLoaded(): boolean {\r\n    return this.lastLoadedOrSaved != null || this.modified != null;\r\n  }\r\n\r\n  updateZipNativeFile(thisFileObject: JSZip.JSZipObject) {\r\n    this._jszipo = thisFileObject;\r\n  }\r\n\r\n  constructor(parentFolder: ZipFolder, fileName: string, thisFileObject: JSZip.JSZipObject | null) {\r\n    super();\r\n\r\n    this._jszipo = thisFileObject;\r\n    this._parentFolder = parentFolder;\r\n    this._name = fileName;\r\n\r\n    this.modified = null;\r\n    this.lastLoadedOrSaved = null;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for zip storage\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  async loadContent(force?: boolean, forceEncoding?: EncodingType): Promise<Date> {\r\n    if (force || !this.lastLoadedOrSaved) {\r\n      if (this._jszipo !== null) {\r\n        const type = forceEncoding ?? StorageUtilities.getEncodingByFileName(this.name);\r\n\r\n        if (type === EncodingType.ByteBuffer) {\r\n          try {\r\n            this._content = await this._jszipo.async(\"uint8array\");\r\n          } catch (e: any) {\r\n            this.errorStateMessage = e.toString();\r\n          } /*, (metadata) => {\r\n            Log.verbose(\"Extracting \" + this.storageRelativePath + \" (\" + metadata.percent.toFixed(2) + \")%\");\r\n          });*/\r\n\r\n          Log.assert(this._content !== null, \"Unexpectedly could not load content.\");\r\n        } else {\r\n          try {\r\n            this._content = await this._jszipo.async(\"string\");\r\n          } catch (e: any) {\r\n            this.errorStateMessage = e.toString();\r\n          }\r\n        }\r\n      }\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    const areEqual = StorageUtilities.contentsAreEqual(this._content, newContent);\r\n\r\n    if (areEqual) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.lastLoadedOrSaved) {\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.lastLoadedOrSaved = new Date(this.lastLoadedOrSaved.getTime() - 1);\r\n    }\r\n\r\n    let oldContent = this._content;\r\n    this._content = newContent;\r\n\r\n    this.contentWasModified(oldContent, updateType, sourceId);\r\n\r\n    this._parentFolder.storage.modified = this.modified;\r\n\r\n    return true;\r\n  }\r\n\r\n  async saveContent(force?: boolean): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (this.needsSave || force === true) {\r\n      this.lastLoadedOrSaved = new Date();\r\n\r\n      if (this.content !== null) {\r\n        // Log.debug(\"Saving '\" + this.content.length + \"' content to '\" + this.name + \"' within zip\");\r\n\r\n        this._parentFolder.storage.modified = this.modified;\r\n        this._parentFolder.zip.file(this.name, this.content);\r\n      }\r\n    }\r\n\r\n    if (this.lastLoadedOrSaved === null) {\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"./IFile\";\r\nimport IFolder from \"./IFolder\";\r\n\r\nexport default class AllFolderFileIterator implements AsyncIterator<IFile> {\r\n  folderStack: IFolder[] = [];\r\n  folderFileIndices: number[] = [];\r\n  folderFolderIndices: number[] = [];\r\n  currentDepth = 0;\r\n\r\n  constructor(rootFolder: IFolder) {\r\n    this.folderStack[0] = rootFolder;\r\n    this.folderFileIndices[0] = 0;\r\n    this.folderFolderIndices[0] = 0;\r\n  }\r\n\r\n  async next(): Promise<IteratorResult<IFile, any>> {\r\n    while (this.currentDepth >= 0) {\r\n      if (this.folderFileIndices[this.currentDepth] === 0 && this.folderFolderIndices[this.currentDepth] === 0) {\r\n        await this.folderStack[this.currentDepth].load(false);\r\n      }\r\n\r\n      // iterate over files in the currentdepth folder\r\n      if (this.folderFileIndices[this.currentDepth] < this.folderStack[this.currentDepth].fileCount) {\r\n        const file = this.getNthFile(this.folderStack[this.currentDepth], this.folderFileIndices[this.currentDepth]);\r\n\r\n        if (file) {\r\n          this.folderFileIndices[this.currentDepth]++;\r\n          return { value: file, done: false };\r\n        } else {\r\n          throw new Error();\r\n        }\r\n      } /* now look over child folders */ else if (\r\n        this.folderFolderIndices[this.currentDepth] < this.folderStack[this.currentDepth].folderCount\r\n      ) {\r\n        const folder = this.getNthFolder(\r\n          this.folderStack[this.currentDepth],\r\n          this.folderFolderIndices[this.currentDepth]\r\n        );\r\n\r\n        this.folderFolderIndices[this.currentDepth]++;\r\n\r\n        this.currentDepth++;\r\n\r\n        if (folder) {\r\n          this.folderFileIndices[this.currentDepth] = 0;\r\n          this.folderFolderIndices[this.currentDepth] = 0;\r\n          this.folderStack[this.currentDepth] = folder;\r\n        } else {\r\n          throw new Error();\r\n        }\r\n      } else {\r\n        this.currentDepth--;\r\n      }\r\n    }\r\n\r\n    return {\r\n      value: undefined,\r\n      done: true,\r\n    };\r\n  }\r\n\r\n  getNthFile(folder: IFolder, index: number) {\r\n    let count = 0;\r\n\r\n    for (const fileName in folder.files) {\r\n      if (count === index) {\r\n        return folder.files[fileName];\r\n      }\r\n\r\n      count++;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getNthFolder(folder: IFolder, index: number) {\r\n    let count = 0;\r\n\r\n    for (const fileName in folder.folders) {\r\n      if (count === index) {\r\n        return folder.folders[fileName];\r\n      }\r\n\r\n      count++;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder, { FolderErrorStatus } from \"./IFolder\";\r\nimport IFile from \"./IFile\";\r\nimport IStorage, { IFolderMove } from \"./IStorage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport Utilities from \"./../core/Utilities\";\r\nimport AllFolderFileIterator from \"./AllFolderFileIterator\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport StorageBase from \"./StorageBase\";\r\n\r\nexport default abstract class FolderBase implements IFolder {\r\n  abstract get name(): string;\r\n\r\n  get ensuredName(): string {\r\n    return this.name;\r\n  }\r\n\r\n  isDisposed: boolean = false;\r\n  #lastLoadedOrSaved: Date | null;\r\n\r\n  abstract get parentFolder(): IFolder | null;\r\n  abstract get storage(): IStorage;\r\n  manager?: any;\r\n\r\n  #onFolderMoved = new EventDispatcher<FolderBase, IFolderMove>();\r\n  #onChildFolderMoved = new EventDispatcher<FolderBase, IFolderMove>();\r\n\r\n  errorStatus?: FolderErrorStatus;\r\n\r\n  public get onFolderMoved() {\r\n    return this.#onFolderMoved.asEvent();\r\n  }\r\n\r\n  public get onChildFolderMoved() {\r\n    return this.#onChildFolderMoved.asEvent();\r\n  }\r\n\r\n  get isLoaded() {\r\n    return this.#lastLoadedOrSaved !== null;\r\n  }\r\n\r\n  get canIgnore() {\r\n    return StorageUtilities.isIgnorableFolder(this.name);\r\n  }\r\n\r\n  get allFiles(): AsyncIterable<IFile> {\r\n    let parentFolder = this;\r\n\r\n    return {\r\n      [Symbol.asyncIterator](): AsyncIterator<IFile> {\r\n        return new AllFolderFileIterator(parentFolder);\r\n      },\r\n    };\r\n  }\r\n\r\n  get folderCount() {\r\n    let i = 0;\r\n\r\n    for (const folderName in this.folders) {\r\n      if (this.folders[folderName]) {\r\n        i++;\r\n      }\r\n    }\r\n\r\n    return i;\r\n  }\r\n\r\n  get fileCount() {\r\n    let i = 0;\r\n\r\n    // eslint-disable-next-line\r\n    for (const fileName in this.files) {\r\n      if (this.files[fileName]) {\r\n        i++;\r\n      }\r\n    }\r\n\r\n    return i;\r\n  }\r\n\r\n  get storageRelativePath() {\r\n    if (this.parentFolder === null) {\r\n      return \"/\";\r\n    } else {\r\n      return this.parentFolder.storageRelativePath + this.name + \"/\";\r\n    }\r\n  }\r\n\r\n  get lastLoadedOrSaved() {\r\n    return this.#lastLoadedOrSaved;\r\n  }\r\n\r\n  get fullPath(): string {\r\n    return this.storageRelativePath;\r\n  }\r\n\r\n  get extendedPath(): string {\r\n    let start = \"\";\r\n\r\n    if (this.storage.storagePath) {\r\n      start = this.storage.storagePath;\r\n    }\r\n\r\n    let result = start + this.fullPath;\r\n\r\n    if (!result.endsWith(this.storage.folderDelimiter)) {\r\n      result += this.storage.folderDelimiter;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  constructor() {\r\n    this.#lastLoadedOrSaved = null;\r\n  }\r\n\r\n  updateLastLoadedOrSaved() {\r\n    this.#lastLoadedOrSaved = new Date();\r\n  }\r\n\r\n  getFolderRelativePath(toFolder: IFolder): string | undefined {\r\n    if (toFolder.storage !== this.storage && this.storage.storagePath) {\r\n      const parentPath = toFolder.storageRelativePath;\r\n\r\n      if (\r\n        parentPath &&\r\n        this.extendedPath &&\r\n        this.extendedPath.startsWith(parentPath) &&\r\n        StorageUtilities.ensureEndsWithDelimiter(parentPath)\r\n      ) {\r\n        const subPath = this.extendedPath.substring(parentPath.length - 1);\r\n\r\n        return subPath;\r\n      }\r\n\r\n      return this.extendedPath;\r\n    } else if (this === toFolder) {\r\n      return \"/\";\r\n    } else if (this.parentFolder === null) {\r\n      return undefined;\r\n    } else {\r\n      const result = this.parentFolder.getFolderRelativePath(toFolder);\r\n\r\n      if (result === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      return result + this.name + \"/\";\r\n    }\r\n  }\r\n\r\n  dispose() {\r\n    this.manager = undefined;\r\n\r\n    if (this.folders) {\r\n      for (const folderName in this.folders) {\r\n        const folder = this.folders[folderName];\r\n\r\n        if (folder) {\r\n          folder.dispose();\r\n          this.folders[folderName] = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.files) {\r\n      for (const fileName in this.files) {\r\n        const file = this.files[fileName];\r\n\r\n        if (file) {\r\n          file.dispose();\r\n          this.files[fileName] = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    this.isDisposed = true;\r\n  }\r\n\r\n  async setStructureFromFileList(fileList: string[]) {\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    for (const file of fileList) {\r\n      let folderPath = StorageUtilities.getFolderPath(file);\r\n\r\n      if (folderPath) {\r\n        folderPath = StorageUtilities.ensureEndsDelimited(folderPath);\r\n\r\n        if (folderPath.length > 2) {\r\n          const folder = (await this.ensureFolderFromRelativePath(folderPath, true)) as FolderBase;\r\n\r\n          folder.updateLastLoadedOrSaved();\r\n          let parentFolder = folder.parentFolder as FolderBase;\r\n\r\n          while (parentFolder && parentFolder !== this) {\r\n            parentFolder.updateLastLoadedOrSaved();\r\n\r\n            parentFolder = parentFolder.parentFolder as FolderBase;\r\n          }\r\n        }\r\n\r\n        await this.ensureFileFromRelativePath(file, true);\r\n      }\r\n    }\r\n  }\r\n\r\n  isSameFolder(newFolderStorageRelativePath: string) {\r\n    if (\r\n      StorageUtilities.canonicalizePath(newFolderStorageRelativePath) ===\r\n      StorageUtilities.canonicalizePath(this.storageRelativePath)\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  _addExistingFolderToParent(folder: IFolder) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    if (Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      this.folders[nameCanon] = folder as this;\r\n    }\r\n  }\r\n\r\n  _removeExistingFolderFromParent(folder: IFolder) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    if (Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      this.folders[nameCanon] = undefined;\r\n    }\r\n  }\r\n\r\n  folderExists(name: string): boolean {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    return !Utilities.isNullOrUndefined(this.folders[nameCanon]);\r\n  }\r\n\r\n  fileExists(name: string): boolean {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    return !Utilities.isNullOrUndefined(this.files[nameCanon]);\r\n  }\r\n\r\n  async deleteFileFromRelativePath(path: string): Promise<boolean> {\r\n    path = this.canonicalizePath(path);\r\n\r\n    const file = await this.getFileFromRelativePath(path);\r\n\r\n    if (file !== undefined) {\r\n      return await file.deleteThisFile();\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  canonicalizePath(path: string) {\r\n    return path.replace(/\\\\/g, \"/\");\r\n  }\r\n\r\n  async getFileFromRelativePath(path: string): Promise<IFile | undefined> {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    if (path.length < 2) {\r\n      throw Error(\"Path is too short.\");\r\n    }\r\n\r\n    path = this.canonicalizePath(path);\r\n\r\n    if (path[0] !== \"/\") {\r\n      throw Error(\"Storage relative path '\" + path + \"' is not in the right format.\");\r\n    }\r\n\r\n    await this.ensureExists();\r\n    await this.load(false);\r\n\r\n    const nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash < 0) {\r\n      const fileName = path.substring(1, path.length);\r\n\r\n      return this.files[StorageUtilities.canonicalizeName(fileName)];\r\n    } else {\r\n      const folderName = path.substring(1, nextSlash);\r\n\r\n      const folder = this.folders[StorageUtilities.canonicalizeName(folderName)];\r\n\r\n      if (folder === undefined || folder === null) {\r\n        return undefined;\r\n      }\r\n\r\n      return await (folder as IFolder).getFileFromRelativePath(path.substring(nextSlash, path.length));\r\n    }\r\n  }\r\n\r\n  clearAllManagers() {\r\n    if (this.manager) {\r\n      this.manager = undefined;\r\n    }\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file) {\r\n        file.manager = undefined;\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder) {\r\n        folder.clearAllManagers();\r\n      }\r\n    }\r\n  }\r\n\r\n  async getFolderFromRelativePath(path: string): Promise<IFolder | undefined> {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    if (path === \"/\" || path === \"\\\\\") {\r\n      return this;\r\n    }\r\n\r\n    if (path.length < 2) {\r\n      throw Error(\"Path is too short.\");\r\n    }\r\n\r\n    path = this.canonicalizePath(path);\r\n\r\n    if (path[0] !== \"/\") {\r\n      throw Error(\"Storage relative path '\" + path + \"' is not in the right format.\");\r\n    }\r\n\r\n    await this.ensureExists();\r\n    await this.load(false);\r\n\r\n    const nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash < 0) {\r\n      const folderName = path.substring(1, path.length);\r\n\r\n      return this.folders[StorageUtilities.canonicalizeName(folderName)];\r\n    } else {\r\n      let folderName = path.substring(1, nextSlash);\r\n\r\n      folderName = StorageUtilities.canonicalizeName(folderName);\r\n\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder === undefined || folder === null) {\r\n        return undefined;\r\n      }\r\n\r\n      const nextPath = path.substring(nextSlash, path.length);\r\n\r\n      if (nextPath === \"/\" || nextPath === \"\\\\\") {\r\n        return folder;\r\n      }\r\n\r\n      return await (folder as IFolder).getFolderFromRelativePath(nextPath);\r\n    }\r\n  }\r\n\r\n  getFolderByIndex(index: number) {\r\n    let curIndex = 0;\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder && curIndex === index) {\r\n        return folder;\r\n      }\r\n\r\n      if (folder) {\r\n        curIndex++;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getSortedFolderKeys(): string[] {\r\n    return Object.keys(this.folders).sort();\r\n  }\r\n\r\n  getSortedFileKeys(): string[] {\r\n    return Object.keys(this.files).sort();\r\n  }\r\n\r\n  getSummary() {\r\n    let str = \"P: \" + this.fullPath + \" FO:\";\r\n\r\n    for (const folderName in this.folders) {\r\n      str += \" \" + folderName;\r\n    }\r\n\r\n    str += \" FI:\";\r\n\r\n    for (const fileName in this.files) {\r\n      str += \" \" + fileName;\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  getFolderFromRelativePathLocal(path: string): IFolder | undefined {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    if (path === \"/\" || path === \"\\\\\") {\r\n      return this;\r\n    }\r\n\r\n    if (path.length < 2) {\r\n      throw Error(\"Path is too short.\");\r\n    }\r\n\r\n    path = this.canonicalizePath(path);\r\n\r\n    if (path[0] !== \"/\") {\r\n      throw Error(\"Storage relative path '\" + path + \"' is not in the right format.\");\r\n    }\r\n\r\n    const nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash < 0) {\r\n      const folderName = path.substring(1, path.length);\r\n\r\n      return this.folders[StorageUtilities.canonicalizeName(folderName)];\r\n    } else {\r\n      const folderName = path.substring(1, nextSlash);\r\n\r\n      let folder = this.folders[StorageUtilities.canonicalizeName(folderName)];\r\n\r\n      if (folder === undefined || folder === null) {\r\n        if (folderName.endsWith(\"#\")) {\r\n          const storageFile =\r\n            this.files[StorageUtilities.canonicalizeName(folderName.substring(0, folderName.length - 1))];\r\n\r\n          if (storageFile) {\r\n            if (storageFile.fileContainerStorage) {\r\n              folder = storageFile.fileContainerStorage.rootFolder;\r\n            }\r\n          }\r\n        }\r\n        if (folder === undefined || folder === null) {\r\n          return undefined;\r\n        }\r\n      }\r\n\r\n      const nextPath = path.substring(nextSlash, path.length);\r\n\r\n      if (nextPath === \"/\" || nextPath === \"\\\\\") {\r\n        return folder;\r\n      }\r\n\r\n      return (folder as IFolder).getFolderFromRelativePathLocal(nextPath);\r\n    }\r\n  }\r\n\r\n  async saveAll(force?: boolean): Promise<boolean> {\r\n    // Log.verbose(\"Saving all at \" + this.storageRelativePath);\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file !== undefined && (file.needsSave || force)) {\r\n        await file.saveContent(force);\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder !== undefined && !folder.errorStatus) {\r\n        await folder.saveAll(force);\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async ensureFolderFromRelativePath(path: string, ignoreLoad?: boolean): Promise<IFolder> {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    if (path === \"/\" || path === \"\\\\\") {\r\n      return this;\r\n    }\r\n\r\n    if (path.startsWith(\"./\")) {\r\n      path = path.substring(1);\r\n    }\r\n\r\n    path = this.canonicalizePath(path);\r\n\r\n    if (path[path.length - 1] !== \"/\") {\r\n      path = path + \"/\";\r\n    }\r\n\r\n    if (path[0] !== \"/\") {\r\n      throw Error(\"Storage relative path '\" + path + \"' is not in the right format.\");\r\n    }\r\n\r\n    if (!ignoreLoad) {\r\n      await this.ensureExists();\r\n      await this.load(false);\r\n    }\r\n\r\n    const nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash < 0) {\r\n      throw new Error(\"Unexpected path format error\");\r\n    } else {\r\n      const folderName = path.substring(1, nextSlash);\r\n\r\n      const folder = this.ensureFolder(folderName) as FolderBase;\r\n\r\n      if (nextSlash === path.length - 1) {\r\n        return folder;\r\n      } else {\r\n        return folder.ensureFolderFromRelativePath(path.substring(nextSlash, path.length), ignoreLoad);\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensureFileFromRelativePath(path: string, ignoreLoad?: boolean): Promise<IFile> {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    if (path.length < 2) {\r\n      throw Error(\"Path is too short.\");\r\n    }\r\n\r\n    path = this.canonicalizePath(path);\r\n\r\n    if (path[0] !== \"/\") {\r\n      throw Error(\"Storage relative path '\" + path + \"' is not in the right format.\");\r\n    }\r\n\r\n    await this.ensureExists();\r\n\r\n    if (!ignoreLoad) {\r\n      await this.load(false);\r\n    }\r\n\r\n    const nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash < 0) {\r\n      const file = this.ensureFile(path.substring(1, path.length));\r\n\r\n      return file;\r\n    } else {\r\n      const folderName = path.substring(1, nextSlash);\r\n\r\n      const folder = this.ensureFolder(folderName) as FolderBase;\r\n\r\n      const file = await folder.ensureFileFromRelativePath(path.substring(nextSlash, path.length), ignoreLoad);\r\n\r\n      return file;\r\n    }\r\n  }\r\n\r\n  async deleteFile(name: string): Promise<boolean> {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    const file = this.files[nameCanon];\r\n\r\n    if (file !== undefined) {\r\n      return await file.deleteThisFile();\r\n    }\r\n\r\n    this.files[nameCanon] = undefined;\r\n\r\n    return false;\r\n  }\r\n\r\n  removeFolder(name: string): boolean {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      throw new Error();\r\n    }\r\n\r\n    const exists = this.folders[nameCanon] !== undefined;\r\n\r\n    this.folders[nameCanon] = undefined;\r\n\r\n    return exists;\r\n  }\r\n\r\n  async rename(name: string): Promise<boolean> {\r\n    let targetPath = name;\r\n\r\n    if (this.parentFolder !== null) {\r\n      targetPath = this.storage.joinPath(this.parentFolder.storageRelativePath, targetPath);\r\n    }\r\n\r\n    return await this.moveTo(targetPath);\r\n  }\r\n\r\n  async recursiveDeleteThisFolder() {\r\n    let isAllDeletes = await this.recursiveDeleteContentsOfThisFolder();\r\n\r\n    this.removeMeFromParent();\r\n\r\n    return isAllDeletes;\r\n  }\r\n\r\n  async recursiveDeleteContentsOfThisFolder() {\r\n    let isAllDeletes = true;\r\n\r\n    await this.load(true);\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder) {\r\n        if (!(await folder.deleteThisFolder())) {\r\n          isAllDeletes = false;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file) {\r\n        if (!(await file.deleteThisFile(true))) {\r\n          isAllDeletes = false;\r\n        }\r\n      }\r\n    }\r\n\r\n    return isAllDeletes;\r\n  }\r\n\r\n  notifyFolderMoved(folderMove: IFolderMove) {\r\n    this.#onFolderMoved.dispatch(this, folderMove);\r\n\r\n    if (this.parentFolder) {\r\n      (this.parentFolder as FolderBase).notifyChildFolderMoved(folderMove);\r\n    }\r\n\r\n    (this.storage as StorageBase).notifyFolderMoved(folderMove);\r\n  }\r\n\r\n  notifyChildFolderMoved(folderMove: IFolderMove) {\r\n    this.#onChildFolderMoved.dispatch(this, folderMove);\r\n\r\n    if (this.parentFolder) {\r\n      (this.parentFolder as FolderBase).notifyChildFolderMoved(folderMove);\r\n    }\r\n  }\r\n\r\n  removeMeFromParent() {\r\n    if (this.parentFolder) {\r\n      this.parentFolder.removeFolder(this.name);\r\n    }\r\n  }\r\n\r\n  abstract scanForChanges(): Promise<void>;\r\n\r\n  abstract deleteThisFolder(): Promise<boolean>;\r\n  abstract deleteAllFolderContents(): Promise<boolean>;\r\n\r\n  abstract exists(): Promise<boolean>;\r\n  abstract ensureExists(): Promise<boolean>;\r\n\r\n  abstract folders: { [name: string]: IFolder | undefined };\r\n  abstract files: { [name: string]: IFile | undefined };\r\n  abstract moveTo(newStorageRelativePath: string): Promise<boolean>;\r\n  abstract load(force?: boolean): Promise<Date>;\r\n\r\n  abstract ensureFolder(name: string): IFolder;\r\n  abstract ensureFile(name: string): IFile;\r\n\r\n  abstract createFile(name: string): Promise<IFile>;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile from \"./IFile\";\r\nimport ZipFile from \"./ZipFile\";\r\nimport ZipStorage from \"./ZipStorage\";\r\nimport JSZip from \"jszip\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport FolderBase from \"./FolderBase\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class ZipFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _parentPath: string;\r\n\r\n  folders: { [id: string]: ZipFolder | undefined };\r\n  files: { [id: string]: ZipFile | undefined };\r\n\r\n  private _storage: ZipStorage;\r\n  private _parentFolder: ZipFolder | null;\r\n\r\n  private _jsz: JSZip;\r\n\r\n  get ensuredName(): string {\r\n    if (this.name.length > 0) {\r\n      return this.name;\r\n    }\r\n\r\n    if (this.storage.name) {\r\n      let name = this.storage.name;\r\n\r\n      const lastPeriod = name.lastIndexOf(\".\");\r\n\r\n      if (lastPeriod > 0) {\r\n        name = name.substring(0, lastPeriod);\r\n      }\r\n\r\n      return name;\r\n    }\r\n\r\n    return \"folder\";\r\n  }\r\n\r\n  get zip() {\r\n    return this._jsz;\r\n  }\r\n\r\n  set zip(newZip: JSZip) {\r\n    this._jsz = newZip;\r\n  }\r\n\r\n  get storage(): ZipStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): ZipFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    if (!this.parentFolder) {\r\n      return \"/\";\r\n    }\r\n\r\n    return StorageUtilities.ensureEndsWithDelimiter(this._parentPath) + this.name;\r\n  }\r\n\r\n  constructor(\r\n    storage: ZipStorage,\r\n    jszipThisFolder: JSZip,\r\n    parentFolder: ZipFolder | null,\r\n    parentPath: string,\r\n    folderName: string\r\n  ) {\r\n    super();\r\n\r\n    this._jsz = jszipThisFolder;\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._parentPath = parentPath;\r\n    this._name = folderName;\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for zip storage\r\n  }\r\n\r\n  async exists() {\r\n    return true;\r\n  }\r\n\r\n  async ensureExists() {\r\n    return true;\r\n  }\r\n\r\n  ensureFile(name: string): ZipFile {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      throw new Error();\r\n    }\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile == null) {\r\n      const zipObject = this._jsz.file(name);\r\n\r\n      candFile = new ZipFile(this, name, zipObject);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  ensureFolder(name: string): ZipFolder {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      throw new Error();\r\n    }\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      const zipFolder = this._jsz.folder(name);\r\n\r\n      if (zipFolder == null) {\r\n        throw new Error(\"unexpected inability to create a zip file folder\");\r\n      }\r\n\r\n      candFolder = new ZipFolder(this._storage, zipFolder as JSZip, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async deleteFile(name: string): Promise<boolean> {\r\n    throw new Error(\"Deletion of file not supported\");\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    throw new Error(\"Deletion of this folder \" + this.fullPath + \" is not supported.\");\r\n  }\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    return this.ensureFile(name);\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    this._jsz.forEach((relativePath: string, file: JSZip.JSZipObject) => {\r\n      // some zip files use \\ as a delimiter (??)\r\n      relativePath = relativePath.replace(/\\\\/gi, ZipStorage.slashFolderDelimiter);\r\n\r\n      const countDelim = Utilities.countChar(relativePath, ZipStorage.slashFolderDelimiter);\r\n\r\n      if (countDelim === 0) {\r\n        const nameCanon = StorageUtilities.canonicalizeName(relativePath);\r\n\r\n        if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n          throw new Error();\r\n        }\r\n\r\n        let candFile = this.files[nameCanon];\r\n\r\n        if (\r\n          candFile == null &&\r\n          (this._storage.allowAllFiles || StorageUtilities.isUsableFile(StorageUtilities.getLeafName(relativePath)))\r\n        ) {\r\n          candFile = new ZipFile(this, relativePath, file);\r\n\r\n          this.files[nameCanon] = candFile;\r\n        }\r\n      } else if (countDelim >= 1) {\r\n        let lastFolder: IFolder = this;\r\n        let subPath = relativePath;\r\n\r\n        if (subPath.startsWith(\"/\")) {\r\n          subPath = subPath.substring(1);\r\n        }\r\n\r\n        let nextDelim = subPath.indexOf(ZipStorage.slashFolderDelimiter);\r\n\r\n        while (nextDelim > 0) {\r\n          lastFolder = lastFolder.ensureFolder(subPath.substring(0, nextDelim));\r\n\r\n          subPath = subPath.substring(nextDelim + 1);\r\n          nextDelim = subPath.indexOf(ZipStorage.slashFolderDelimiter);\r\n        }\r\n\r\n        if (subPath.length > 0 && file) {\r\n          Log.assert(!file.dir, \"Unexpected non directory file.\");\r\n          if (this._storage.allowAllFiles || StorageUtilities.isUsableFile(StorageUtilities.getLeafName(subPath))) {\r\n            const zipFile = lastFolder.ensureFile(subPath) as ZipFile;\r\n            zipFile.updateZipNativeFile(file);\r\n          } else {\r\n            Log.message(\"Unexpected file type found in zip file: \" + subPath);\r\n          }\r\n        }\r\n      }\r\n    });\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * StorageBase.ts\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * This is the base implementation for all storage types in MCTools.\r\n * It provides the event dispatching infrastructure for file/folder change notifications.\r\n *\r\n * EVENTS (for real-time synchronization):\r\n * ---------------------------------------\r\n * - onFileAdded: Dispatched by notifyFileAdded() when a new file is detected\r\n * - onFileRemoved: Dispatched by notifyFileRemoved() when a file is deleted\r\n * - onFileContentsUpdated: Dispatched by notifyFileContentsUpdated() when content changes\r\n * - onFolderAdded: Dispatched by notifyFolderAdded() when a folder is created\r\n * - onFolderRemoved: Dispatched by notifyFolderRemoved() when a folder is deleted\r\n * - onFolderMoved: Dispatched by notifyFolderMoved() when a folder is renamed/moved\r\n *\r\n * These events power the sync pipeline:\r\n *   NodeStorage (watcher) -> HttpServer -> WebSocket -> HttpStorage -> MCWorld -> WorldView\r\n *\r\n * SUBCLASSES:\r\n * -----------\r\n * - NodeStorage: Local file system (server-side, adds fs.watch() support)\r\n * - HttpStorage: HTTP-based storage (client-side, receives WebSocket notifications)\r\n * - ZipStorage: ZIP file storage (in-memory)\r\n * - BrowserStorage: Browser local storage\r\n * - VirtualFolderStorage: Aggregates multiple folders\r\n *\r\n * HOW TO ADD A NEW STORAGE TYPE:\r\n * ------------------------------\r\n * 1. Extend StorageBase\r\n * 2. Implement abstract rootFolder and getAvailable()\r\n * 3. Create corresponding FolderBase and FileBase subclasses\r\n * 4. If supporting watching, implement IWatchableStorage from IStorageWatcher.ts\r\n * 5. Call notify*() methods when changes are detected\r\n */\r\n\r\nimport IStorage, { IFileUpdateEvent, IFolderMove, StorageErrorStatus } from \"./IStorage\";\r\nimport IFolder from \"./IFolder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IVersionContent from \"./IVersionContent\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\n\r\nexport const MaxRecentVersionsToConsider = 100;\r\nexport const WeRecentlyChangedItThresholdMs = 50;\r\nexport default abstract class StorageBase implements IStorage {\r\n  abstract rootFolder: IFolder;\r\n  isContentUpdated: boolean = false;\r\n  readOnly: boolean = false;\r\n  scanForChangesPhase: number = 0;\r\n\r\n  static readonly slashFolderDelimiter = \"/\";\r\n\r\n  priorVersions: IVersionContent[] = [];\r\n  currentVersionId: string | undefined;\r\n\r\n  containerFile?: IFile | undefined;\r\n\r\n  #onFileAdded = new EventDispatcher<StorageBase, IFile>();\r\n  #onFileRemoved = new EventDispatcher<StorageBase, string>();\r\n  #onFileContentsUpdated = new EventDispatcher<StorageBase, IFileUpdateEvent>();\r\n  #onFolderMoved = new EventDispatcher<StorageBase, IFolderMove>();\r\n\r\n  #onFolderAdded = new EventDispatcher<StorageBase, IFolder>();\r\n  #onFolderRemoved = new EventDispatcher<StorageBase, string>();\r\n\r\n  #storagePath: string | undefined;\r\n\r\n  available?: boolean | undefined;\r\n\r\n  errorStatus?: StorageErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  channelId?: string;\r\n\r\n  get folderDelimiter() {\r\n    return StorageBase.slashFolderDelimiter;\r\n  }\r\n\r\n  public get storagePath() {\r\n    return this.#storagePath;\r\n  }\r\n\r\n  public set storagePath(newStoragePath: string | undefined) {\r\n    this.#storagePath = newStoragePath;\r\n  }\r\n\r\n  public resetContentUpdated() {\r\n    this.isContentUpdated = false;\r\n  }\r\n\r\n  public get onFileAdded() {\r\n    return this.#onFileAdded.asEvent();\r\n  }\r\n\r\n  public get onFileRemoved() {\r\n    return this.#onFileRemoved.asEvent();\r\n  }\r\n\r\n  public get onFileContentsUpdated() {\r\n    return this.#onFileContentsUpdated.asEvent();\r\n  }\r\n\r\n  public get onFolderMoved() {\r\n    return this.#onFolderMoved.asEvent();\r\n  }\r\n\r\n  public get onFolderAdded() {\r\n    return this.#onFolderAdded.asEvent();\r\n  }\r\n\r\n  public get onFolderRemoved() {\r\n    return this.#onFolderRemoved.asEvent();\r\n  }\r\n\r\n  async ensureFolderFromStorageRelativePath(path: string) {\r\n    if (path.startsWith(\"/\" + this.rootFolder.name + \"/\")) {\r\n      path = path.substring(this.rootFolder.name.length + 1);\r\n    }\r\n\r\n    return this.rootFolder.ensureFolderFromRelativePath(path);\r\n  }\r\n\r\n  notifyFileAdded(file: IFile) {\r\n    this.#onFileAdded.dispatch(this, file);\r\n  }\r\n\r\n  notifyFolderAdded(folder: IFolder) {\r\n    this.#onFolderAdded.dispatch(this, folder);\r\n  }\r\n\r\n  notifyFolderRemoved(folder: IFolder) {\r\n    this.#onFolderRemoved.dispatch(this, folder.name);\r\n  }\r\n\r\n  notifyFileContentsUpdated(fileEvent: IFileUpdateEvent) {\r\n    this.isContentUpdated = true;\r\n\r\n    this.#onFileContentsUpdated.dispatch(this, fileEvent);\r\n  }\r\n\r\n  notifyFolderMoved(folderMove: IFolderMove) {\r\n    this.isContentUpdated = true;\r\n    this.#onFolderMoved.dispatch(this, folderMove);\r\n  }\r\n\r\n  notifyFileRemoved(fileName: string) {\r\n    this.#onFileRemoved.dispatch(this, fileName);\r\n  }\r\n\r\n  async incrementalScanForChanges() {\r\n    const folders = this.getFolderList();\r\n\r\n    this.scanForChangesPhase++;\r\n    this.scanForChangesPhase %= folders.length;\r\n\r\n    const folderToScan = folders[this.scanForChangesPhase];\r\n\r\n    await folderToScan.scanForChanges();\r\n\r\n    for (const fileKey in folderToScan.files) {\r\n      const file = folderToScan.files[fileKey];\r\n\r\n      if (file) {\r\n        await file.scanForChanges();\r\n      }\r\n    }\r\n  }\r\n\r\n  async scanForChanges() {\r\n    const folders = this.getFolderList();\r\n\r\n    for (const folder of folders) {\r\n      await folder.scanForChanges();\r\n\r\n      for (const fileKey in folder.files) {\r\n        const file = folder.files[fileKey];\r\n\r\n        if (file) {\r\n          await file.scanForChanges();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async notifyPathWasUpdatedExternal(path: string) {\r\n    const dtNow = new Date().getTime();\r\n    path = StorageUtilities.canonicalizePath(path);\r\n\r\n    for (let i = 0; i < this.priorVersions.length && i < MaxRecentVersionsToConsider; i++) {\r\n      const pv = this.priorVersions[i];\r\n\r\n      if (\r\n        pv.versionTime &&\r\n        StorageUtilities.canonicalizePath(pv.file.fullPath) === StorageUtilities.canonicalizePath(path)\r\n      ) {\r\n        if (Math.abs(pv.versionTime.getTime() - dtNow) < WeRecentlyChangedItThresholdMs) {\r\n          // we updated the file very recently, so ignore this change, \"it's probably us\"\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (path.startsWith(this.rootFolder.fullPath)) {\r\n      path = StorageUtilities.ensureStartsWithDelimiter(path.substring(this.rootFolder.fullPath.length));\r\n\r\n      const file = await this.rootFolder.getFileFromRelativePath(path);\r\n\r\n      if (file) {\r\n        await file.scanForChanges();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called when a new file is detected externally (e.g., by fs.watch in Electron).\r\n   * Creates the file object in the folder tree and fires the onFileAdded event.\r\n   *\r\n   * @param path The full path to the newly added file\r\n   */\r\n  async notifyPathWasAddedExternal(path: string) {\r\n    path = StorageUtilities.canonicalizePath(path);\r\n\r\n    if (path.startsWith(this.rootFolder.fullPath)) {\r\n      const relativePath = StorageUtilities.ensureStartsWithDelimiter(path.substring(this.rootFolder.fullPath.length));\r\n\r\n      // Get the parent folder path and filename\r\n      const lastDelim = relativePath.lastIndexOf(\"/\");\r\n      if (lastDelim < 0) {\r\n        return; // No valid path structure\r\n      }\r\n\r\n      const folderPath = relativePath.substring(0, lastDelim);\r\n      const fileName = relativePath.substring(lastDelim + 1);\r\n\r\n      if (!fileName) {\r\n        // This is a folder being added, not a file\r\n        const folder = await this.rootFolder.ensureFolderFromRelativePath(relativePath);\r\n        if (folder) {\r\n          this.notifyFolderAdded(folder);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Ensure the parent folder exists in our tree\r\n      const parentFolder = await this.rootFolder.ensureFolderFromRelativePath(folderPath || \"/\");\r\n\r\n      if (parentFolder) {\r\n        // Create the file in the folder tree\r\n        const file = parentFolder.ensureFile(fileName);\r\n\r\n        // Fire the event so subscribers (like Project) can react\r\n        this.notifyFileAdded(file);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called when a file is deleted externally (e.g., by fs.watch in Electron).\r\n   * Removes the file from the folder tree and fires the onFileRemoved event.\r\n   *\r\n   * @param path The full path to the removed file\r\n   */\r\n  async notifyPathWasRemovedExternal(path: string) {\r\n    path = StorageUtilities.canonicalizePath(path);\r\n\r\n    if (path.startsWith(this.rootFolder.fullPath)) {\r\n      const relativePath = StorageUtilities.ensureStartsWithDelimiter(path.substring(this.rootFolder.fullPath.length));\r\n\r\n      // Get the parent folder path and filename\r\n      const lastDelim = relativePath.lastIndexOf(\"/\");\r\n      if (lastDelim < 0) {\r\n        return;\r\n      }\r\n\r\n      const folderPath = relativePath.substring(0, lastDelim);\r\n      const fileName = relativePath.substring(lastDelim + 1);\r\n\r\n      if (!fileName) {\r\n        // This might be a folder being removed\r\n        // Try to find and remove it from the parent\r\n        const parentPath = folderPath.substring(0, folderPath.lastIndexOf(\"/\")) || \"/\";\r\n        const parentFolder = await this.rootFolder.getFolderFromRelativePath(parentPath);\r\n        const removedFolderName = folderPath.substring(folderPath.lastIndexOf(\"/\") + 1);\r\n\r\n        if (parentFolder && removedFolderName && parentFolder.folders[removedFolderName]) {\r\n          const removedFolder = parentFolder.folders[removedFolderName];\r\n          if (removedFolder) {\r\n            this.notifyFolderRemoved(removedFolder);\r\n          }\r\n          delete parentFolder.folders[removedFolderName];\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Try to find the parent folder\r\n      const parentFolder = await this.rootFolder.getFolderFromRelativePath(folderPath || \"/\");\r\n\r\n      if (parentFolder) {\r\n        // Check if the file exists in our tree\r\n        const file = parentFolder.files[fileName];\r\n\r\n        if (file) {\r\n          // Fire the event so subscribers can react\r\n          this.notifyFileRemoved(file.fullPath);\r\n\r\n          // Remove from the folder's files collection\r\n          delete parentFolder.files[fileName];\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getFolderList() {\r\n    const folders: IFolder[] = [];\r\n\r\n    this._addFolders(this.rootFolder, folders);\r\n\r\n    return folders;\r\n  }\r\n\r\n  _addFolders(folder: IFolder, folderList: IFolder[]) {\r\n    folderList.push(folder);\r\n\r\n    for (const folderKey in folder.folders) {\r\n      const childFolder = folder.folders[folderKey];\r\n      if (childFolder) {\r\n        this._addFolders(childFolder, folderList);\r\n      }\r\n    }\r\n  }\r\n\r\n  setToVersion(versionId: string) {\r\n    let startIndex = this.priorVersions.length - 1;\r\n\r\n    if (this.currentVersionId) {\r\n      for (let i = 0; i < this.priorVersions.length; i++) {\r\n        if (this.priorVersions[i].id === this.currentVersionId) {\r\n          startIndex = i;\r\n        }\r\n      }\r\n    }\r\n\r\n    let updateType = FileUpdateType.versionRestoration;\r\n\r\n    if (this.currentVersionId === undefined) {\r\n      updateType = FileUpdateType.versionRestorationRetainCurrent;\r\n    }\r\n\r\n    for (let i = 0; i < this.priorVersions.length; i++) {\r\n      if (this.priorVersions[i].id === versionId) {\r\n        // rewind to i\r\n        if (startIndex > i) {\r\n          for (let v = startIndex - 1; v >= i; v--) {\r\n            const content = this.priorVersions[v].content;\r\n            if (content !== null) {\r\n              this.priorVersions[v].file.setContent(content, updateType);\r\n            }\r\n          }\r\n        } else if (startIndex < i) {\r\n          // fast forward to i\r\n          for (let v = startIndex + 1; v <= i; v++) {\r\n            const content = this.priorVersions[v].content;\r\n            if (content !== null) {\r\n              this.priorVersions[v].file.setContent(content, updateType);\r\n            }\r\n          }\r\n        }\r\n\r\n        this.currentVersionId = versionId;\r\n        return;\r\n      }\r\n    }\r\n  }\r\n\r\n  trimAfterVersion(versionId: string) {\r\n    for (let i = 0; i < this.priorVersions.length; i++) {\r\n      if (this.priorVersions[i].id === versionId) {\r\n        let versionsToRemove = this.priorVersions.slice(i + 1);\r\n        this.priorVersions = this.priorVersions.slice(0, i + 1);\r\n\r\n        for (let v = 0; v < versionsToRemove.length; v++) {\r\n          let versionToRemove = versionsToRemove[v];\r\n\r\n          versionToRemove.file.priorVersions = versionToRemove.file.priorVersions.filter(\r\n            (fv) => fv.id !== versionToRemove.id\r\n          );\r\n        }\r\n\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  addVersion(versionContent: IVersionContent, updateType: FileUpdateType) {\r\n    if (updateType === FileUpdateType.versionRestoration || updateType === FileUpdateType.versionlessEdit) {\r\n      return;\r\n    }\r\n\r\n    // we have a new organic change in, so clear out any redo history\r\n    if (this.currentVersionId) {\r\n      this.trimAfterVersion(this.currentVersionId);\r\n      this.currentVersionId = undefined;\r\n    }\r\n\r\n    this.priorVersions.push(versionContent);\r\n\r\n    this.priorVersions = StorageUtilities.coalesceVersions(this.priorVersions);\r\n\r\n    versionContent.file.priorVersions.push(versionContent);\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(StorageBase.slashFolderDelimiter)) {\r\n      fullPath += StorageBase.slashFolderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static getParentFolderPath(path: string) {\r\n    const lastDelim = path.lastIndexOf(StorageBase.slashFolderDelimiter);\r\n\r\n    if (lastDelim < 0) {\r\n      return path;\r\n    }\r\n\r\n    return path.substring(0, lastDelim);\r\n  }\r\n\r\n  abstract getAvailable(): Promise<boolean>;\r\n\r\n  getUsesPollingBasedUpdating() {\r\n    return false;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Security utilities for input validation and sanitization\r\n */\r\nexport default class SecurityUtilities {\r\n  // Maximum upload size: 700MB\r\n  public static readonly MAX_UPLOAD_SIZE = 700 * 1024 * 1024;\r\n\r\n  // Maximum number of files in a ZIP\r\n  public static readonly MAX_ZIP_FILES = 50000;\r\n\r\n  // Maximum decompressed size: 500MB\r\n  public static readonly MAX_DECOMPRESSED_SIZE = 500 * 1024 * 1024;\r\n\r\n  // Rate limiting: max attempts per IP\r\n  private static readonly authAttempts: Map<string, { count: number; resetTime: number }> = new Map();\r\n  private static readonly MAX_AUTH_ATTEMPTS = 5;\r\n  private static readonly AUTH_WINDOW_MS = 15 * 60 * 1000; // 15 minutes\r\n\r\n  /**\r\n   * Validates that a path doesn't contain directory traversal sequences\r\n   */\r\n  public static validatePath(path: string): boolean {\r\n    if (!path) {\r\n      return false;\r\n    }\r\n\r\n    // Normalize the path\r\n    const normalized = path.replace(/\\\\/g, \"/\");\r\n\r\n    // Check for directory traversal patterns\r\n    if (\r\n      normalized.includes(\"../\") ||\r\n      normalized.includes(\"/..\") ||\r\n      normalized.startsWith(\"..\") ||\r\n      normalized.includes(\"/../\") ||\r\n      normalized.match(/[/\\\\]\\.\\./) ||\r\n      normalized.includes(\"\\0\") // null byte\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    // Check for absolute paths\r\n    if (\r\n      normalized.startsWith(\"/\") ||\r\n      normalized.match(/^[a-zA-Z]:/) // Windows drive letter\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Validates that a path doesn't contain directory traversal sequences.\r\n   * Unlike validatePath, this allows leading slashes for storage-relative paths.\r\n   */\r\n  public static validatePathTraversal(path: string): boolean {\r\n    if (!path) {\r\n      return false;\r\n    }\r\n\r\n    // Normalize the path\r\n    const normalized = path.replace(/\\\\/g, \"/\");\r\n\r\n    // Check for directory traversal patterns\r\n    if (\r\n      normalized.includes(\"../\") ||\r\n      normalized.includes(\"/..\") ||\r\n      normalized.startsWith(\"..\") ||\r\n      normalized.includes(\"/../\") ||\r\n      normalized.match(/[/\\\\]\\.\\./) ||\r\n      normalized.includes(\"\\0\") // null byte\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Sanitizes a storage path by removing dangerous characters while preserving leading slash.\r\n   * For use with internal storage system that expects paths like \"/images/file.png\".\r\n   */\r\n  public static sanitizeStoragePath(path: string): string {\r\n    if (!path) {\r\n      return \"\";\r\n    }\r\n\r\n    // Remove null bytes\r\n    path = path.replace(/\\0/g, \"\");\r\n\r\n    // Normalize slashes\r\n    path = path.replace(/\\\\/g, \"/\");\r\n\r\n    // Remove drive letters\r\n    path = path.replace(/^[a-zA-Z]:/, \"\");\r\n\r\n    // Split into segments and validate each (filter out . and ..)\r\n    const hasLeadingSlash = path.startsWith(\"/\");\r\n    const segments = path.split(\"/\").filter((segment) => {\r\n      return segment && segment !== \".\" && segment !== \"..\";\r\n    });\r\n\r\n    return (hasLeadingSlash ? \"/\" : \"\") + segments.join(\"/\");\r\n  }\r\n\r\n  /**\r\n   * Sanitizes a path by removing dangerous characters and sequences\r\n   */\r\n  public static sanitizePath(path: string): string {\r\n    if (!path) {\r\n      return \"\";\r\n    }\r\n\r\n    // Remove null bytes\r\n    path = path.replace(/\\0/g, \"\");\r\n\r\n    // Normalize slashes\r\n    path = path.replace(/\\\\/g, \"/\");\r\n\r\n    // Remove leading slashes and drive letters\r\n    path = path.replace(/^[a-zA-Z]:/, \"\");\r\n    path = path.replace(/^\\/+/, \"\");\r\n\r\n    // Split into segments and validate each\r\n    const segments = path.split(\"/\").filter((segment) => {\r\n      return segment && segment !== \".\" && segment !== \"..\";\r\n    });\r\n\r\n    return segments.join(\"/\");\r\n  }\r\n\r\n  /**\r\n   * Validates that a file size is within acceptable limits\r\n   */\r\n  public static validateFileSize(size: number, maxSize: number = SecurityUtilities.MAX_UPLOAD_SIZE): boolean {\r\n    return size > 0 && size <= maxSize;\r\n  }\r\n\r\n  /**\r\n   * Validates Minecraft command input to prevent injection\r\n   */\r\n  public static sanitizeCommand(command: string): string {\r\n    if (!command) {\r\n      return \"\";\r\n    }\r\n\r\n    // Remove control characters (including newlines, carriage returns, etc.)\r\n    command = command.replace(/[\\x00-\\x1F\\x7F]/g, \"\");\r\n\r\n    // Trim whitespace\r\n    command = command.trim();\r\n\r\n    // Remove leading slash if present (will be added by server)\r\n    if (command.startsWith(\"/\")) {\r\n      command = command.substring(1);\r\n    }\r\n\r\n    return command;\r\n  }\r\n\r\n  /**\r\n   * Validates that a command is safe to execute\r\n   */\r\n  public static isCommandSafe(command: string): boolean {\r\n    if (!command) {\r\n      return false;\r\n    }\r\n\r\n    // Check for command separators or multiple commands\r\n    if (command.includes(\"\\n\") || command.includes(\"\\r\") || command.includes(\";\")) {\r\n      return false;\r\n    }\r\n\r\n    // Check for excessive length\r\n    if (command.length > 1000) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Rate limiting for authentication attempts\r\n   */\r\n  public static checkAuthRateLimit(identifier: string): boolean {\r\n    const now = Date.now();\r\n    const attempt = SecurityUtilities.authAttempts.get(identifier);\r\n\r\n    if (!attempt) {\r\n      SecurityUtilities.authAttempts.set(identifier, { count: 1, resetTime: now + SecurityUtilities.AUTH_WINDOW_MS });\r\n      return true;\r\n    }\r\n\r\n    // Reset if window has passed\r\n    if (now > attempt.resetTime) {\r\n      SecurityUtilities.authAttempts.set(identifier, { count: 1, resetTime: now + SecurityUtilities.AUTH_WINDOW_MS });\r\n      return true;\r\n    }\r\n\r\n    // Check if under limit\r\n    if (attempt.count < SecurityUtilities.MAX_AUTH_ATTEMPTS) {\r\n      attempt.count++;\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Reset rate limit for an identifier (on successful auth)\r\n   */\r\n  public static resetAuthRateLimit(identifier: string): void {\r\n    SecurityUtilities.authAttempts.delete(identifier);\r\n  }\r\n\r\n  /**\r\n   * Validates JSON object doesn't contain prototype pollution\r\n   */\r\n  public static sanitizeJsonObject(obj: any): any {\r\n    if (obj === null || typeof obj !== \"object\") {\r\n      return obj;\r\n    }\r\n\r\n    // Remove dangerous properties\r\n    const dangerous = [\"__proto__\", \"constructor\", \"prototype\"];\r\n    for (const key of dangerous) {\r\n      if (key in obj) {\r\n        delete obj[key];\r\n      }\r\n    }\r\n\r\n    // Recursively sanitize nested objects\r\n    for (const key in obj) {\r\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n        obj[key] = SecurityUtilities.sanitizeJsonObject(obj[key]);\r\n      }\r\n    }\r\n\r\n    return obj;\r\n  }\r\n\r\n  /**\r\n   * Validates that a string contains only safe characters for player names\r\n   */\r\n  public static sanitizePlayerName(name: string): string {\r\n    if (!name) {\r\n      return \"\";\r\n    }\r\n\r\n    // Only allow alphanumeric, spaces, underscores, and hyphens\r\n    return name.replace(/[^a-zA-Z0-9 _-]/g, \"\");\r\n  }\r\n}\r\n\r\n/**\r\n * Result of Authenticode signature verification\r\n */\r\nexport interface ISignatureVerificationResult {\r\n  /** Whether the signature is valid */\r\n  isValid: boolean;\r\n  /** Status string from signature verification */\r\n  status: string;\r\n  /** Subject (signer) of the certificate, if available */\r\n  signer?: string;\r\n  /** Error message if verification failed */\r\n  error?: string;\r\n  /** Whether the signer is Microsoft/Mojang */\r\n  isMicrosoftSigned?: boolean;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport JSZip from \"jszip\";\r\nimport IStorage, { StorageErrorStatus } from \"./IStorage\";\r\nimport ZipFolder from \"./ZipFolder\";\r\nimport StorageBase from \"./StorageBase\";\r\nimport CreatorToolsHost, { HostType } from \"../app/CreatorToolsHost\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport IFile from \"./IFile\";\r\nimport SecurityUtilities from \"../core/SecurityUtilities\";\r\n\r\nexport default class ZipStorage extends StorageBase implements IStorage {\r\n  private _jsz: JSZip;\r\n\r\n  name?: string;\r\n  rootFolder: ZipFolder;\r\n  modified: Date | null = null;\r\n  lastLoadedOrSaved: Date | null = null;\r\n\r\n  allowAllFiles = false;\r\n\r\n  get updatedSinceLoad() {\r\n    if (this.modified === null || (this.lastLoadedOrSaved === null && this.modified === null)) {\r\n      return false;\r\n    } else if (this.lastLoadedOrSaved === null) {\r\n      return true;\r\n    }\r\n\r\n    return this.modified > this.lastLoadedOrSaved;\r\n  }\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    ZipStorage.zipFixup();\r\n\r\n    this._jsz = new JSZip();\r\n\r\n    this.rootFolder = new ZipFolder(this, this._jsz, null, \"\", \"\");\r\n  }\r\n\r\n  static zipFixup() {\r\n    if (CreatorToolsHost.hostType === HostType.electronNodeJs || CreatorToolsHost.hostType === HostType.toolsNodejs) {\r\n      // Fix CommonJS/ESM interop for JSZip without using eval\r\n      // The issue is that in some Node.js contexts, jszip_1.default is undefined\r\n      // but jszip_1 itself is the constructor we need\r\n      try {\r\n        // Access the module through the global require cache if available\r\n        // This is safer than eval and achieves the same result\r\n        const jszip_1 = require(\"jszip\");\r\n        if (jszip_1 && !jszip_1.default && typeof jszip_1 === \"function\") {\r\n          // If jszip_1 is the constructor but default is missing, add it\r\n          (jszip_1 as any).default = jszip_1;\r\n        }\r\n      } catch {\r\n        // If require fails (e.g., in bundled contexts), the import should work\r\n        // No action needed\r\n      }\r\n    }\r\n  }\r\n\r\n  static fromJsonString(jsonData: string) {\r\n    const zs = new ZipStorage();\r\n\r\n    const file = zs.rootFolder.ensureFile(\"d.json\");\r\n\r\n    file.setContent(jsonData);\r\n\r\n    file.saveContent();\r\n\r\n    return zs;\r\n  }\r\n\r\n  static fromJsObject(data: object) {\r\n    const zs = new ZipStorage();\r\n\r\n    const file = zs.rootFolder.ensureFile(\"d.json\");\r\n\r\n    let jsonData = undefined;\r\n\r\n    jsonData = JSON.stringify(data);\r\n\r\n    file.setContent(jsonData);\r\n\r\n    file.saveContent();\r\n\r\n    return zs;\r\n  }\r\n\r\n  static async fromZipBytesToJsonObject(data: Uint8Array) {\r\n    const zs = new ZipStorage();\r\n\r\n    await zs.loadFromUint8Array(data);\r\n\r\n    return await ZipStorage.toJsObject(zs);\r\n  }\r\n\r\n  static async toJsObject(storage: IStorage) {\r\n    const file = storage.rootFolder.ensureFile(\"d.json\");\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    return StorageUtilities.getJsonObject(file);\r\n  }\r\n\r\n  updateLastLoadedOrSaved() {\r\n    this.lastLoadedOrSaved = new Date();\r\n  }\r\n\r\n  async loadFromBase64(data: string, name?: string) {\r\n    try {\r\n      await this._jsz.loadAsync(data, {\r\n        base64: true,\r\n        checkCRC32: true,\r\n      });\r\n    } catch (e: any) {\r\n      this.errorMessage = e.toString();\r\n      this.errorStatus = StorageErrorStatus.unprocessable;\r\n    }\r\n\r\n    // Log.fail(\"Loading zip file from data \" + data.length);\r\n\r\n    this.name = name;\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    await this.rootFolder.load(true);\r\n  }\r\n\r\n  static async loadFromFile(file: IFile) {\r\n    if (file.fileContainerStorage && file.fileContainerStorage instanceof ZipStorage) {\r\n      return file.fileContainerStorage;\r\n    }\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    const data = file.content;\r\n\r\n    if (data && data instanceof Uint8Array) {\r\n      const zs = new ZipStorage();\r\n\r\n      await zs.loadFromUint8Array(data, file.name);\r\n\r\n      file.fileContainerStorage = zs;\r\n      zs.containerFile = file;\r\n\r\n      return zs;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async loadFromUint8Array(data: Uint8Array, name?: string) {\r\n    // Security: Validate upload size\r\n    if (!SecurityUtilities.validateFileSize(data.byteLength)) {\r\n      this.errorMessage = `ZIP file too large: ${data.byteLength} bytes (max: ${SecurityUtilities.MAX_UPLOAD_SIZE})`;\r\n      this.errorStatus = StorageErrorStatus.unprocessable;\r\n      throw new Error(this.errorMessage);\r\n    }\r\n\r\n    try {\r\n      await this._jsz.loadAsync(data, {\r\n        base64: false,\r\n      });\r\n    } catch (e: any) {\r\n      this.errorMessage = e.toString();\r\n      this.errorStatus = StorageErrorStatus.unprocessable;\r\n      throw e;\r\n    }\r\n\r\n    const filePaths = Object.keys(this._jsz.files);\r\n\r\n    // Security: Validate ZIP contents\r\n    const fileCount = filePaths.length;\r\n    if (fileCount > SecurityUtilities.MAX_ZIP_FILES) {\r\n      this.errorMessage = `ZIP contains too many files: ${fileCount} (max: ${SecurityUtilities.MAX_ZIP_FILES})`;\r\n      this.errorStatus = StorageErrorStatus.unprocessable;\r\n      throw new Error(this.errorMessage);\r\n    }\r\n\r\n    // Security: Validate paths in ZIP\r\n    for (const filePath of filePaths) {\r\n      if (!SecurityUtilities.validatePath(filePath)) {\r\n        this.errorMessage = `ZIP contains invalid path: ${filePath}`;\r\n        this.errorStatus = StorageErrorStatus.unprocessable;\r\n        throw new Error(this.errorMessage);\r\n      }\r\n    }\r\n\r\n    // Security: Validate total decompressed size against bomb threshold\r\n    let totalDecompressedSize = 0;\r\n    for (const filePath of filePaths) {\r\n      const file = this._jsz.files[filePath];\r\n      if (file && !file.dir) {\r\n        const fileData = (file as any)._data;\r\n        if (fileData && typeof fileData.uncompressedSize === \"number\") {\r\n          totalDecompressedSize += fileData.uncompressedSize;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (totalDecompressedSize > SecurityUtilities.MAX_DECOMPRESSED_SIZE) {\r\n      this.errorMessage = `This file is too large to import: decompressed size ${totalDecompressedSize} bytes exceeds limit of ${SecurityUtilities.MAX_DECOMPRESSED_SIZE} bytes`;\r\n      this.errorStatus = StorageErrorStatus.unprocessable;\r\n      throw new Error(this.errorMessage);\r\n    }\r\n\r\n    this.name = name;\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    await this.rootFolder.load(true);\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(StorageBase.slashFolderDelimiter)) {\r\n      fullPath += StorageBase.slashFolderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  async generateUint8ArrayAsync(): Promise<Uint8Array> {\r\n    const result = await this._jsz.generateAsync({\r\n      type: \"uint8array\",\r\n      compression: \"DEFLATE\",\r\n      compressionOptions: {\r\n        level: 9,\r\n      },\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  async generateCompressedBase64Async(): Promise<string> {\r\n    const result = await this._jsz.generateAsync({\r\n      type: \"base64\",\r\n      compression: \"DEFLATE\",\r\n      compressionOptions: {\r\n        level: 9,\r\n      },\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  async generateCompressedUint8ArrayAsync(): Promise<Uint8Array> {\r\n    const result = await this._jsz.generateAsync({\r\n      type: \"uint8array\",\r\n      compression: \"DEFLATE\",\r\n      compressionOptions: {\r\n        level: 9,\r\n      },\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  async generateBlobAsync(): Promise<any> {\r\n    let type = \"blob\";\r\n\r\n    if (CreatorToolsHost.isLocalNode) {\r\n      type = \"nodebuffer\";\r\n    }\r\n\r\n    const result = await this._jsz.generateAsync({ type: type as any });\r\n\r\n    return result;\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFileDifference, { FileDifferenceType } from \"./IFileDifference\";\r\nimport IFolderDifference, { FolderDifferenceType } from \"./IFolderDifference\";\r\nimport IStorage from \"./IStorage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport ZipStorage from \"./ZipStorage\";\r\n\r\nexport default class DifferenceSet {\r\n  fileDifferences: IFileDifference[] = [];\r\n  folderDifferences: IFolderDifference[] = [];\r\n\r\n  async getZip() {\r\n    const zipStorage = new ZipStorage();\r\n\r\n    for (let i = 0; i < this.fileDifferences.length; i++) {\r\n      const fileDiff = this.fileDifferences[i];\r\n\r\n      if (fileDiff.type === FileDifferenceType.fileAdded || fileDiff.type === FileDifferenceType.contentsDifferent) {\r\n        if (fileDiff.updated) {\r\n          const zipFile = await zipStorage.rootFolder.ensureFileFromRelativePath(fileDiff.path);\r\n\r\n          if (fileDiff.updated.content) {\r\n            zipFile.setContent(fileDiff.updated.content);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    await zipStorage.rootFolder.saveAll();\r\n\r\n    return zipStorage;\r\n  }\r\n\r\n  getHasDeletions() {\r\n    for (let i = 0; i < this.fileDifferences.length; i++) {\r\n      if (this.fileDifferences[i].type === FileDifferenceType.fileDeleted) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < this.folderDifferences.length; i++) {\r\n      if (this.folderDifferences[i].type === FolderDifferenceType.folderDeleted) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  hasFileOnlyOfExtension(...extensions: string[]) {\r\n    for (let i = 0; i < this.fileDifferences.length; i++) {\r\n      const extension = StorageUtilities.getTypeFromName(this.fileDifferences[i].path);\r\n\r\n      if (!extensions.includes(extension)) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  hasFileOfExtension(...extensions: string[]) {\r\n    for (let i = 0; i < this.fileDifferences.length; i++) {\r\n      const extension = StorageUtilities.getTypeFromName(this.fileDifferences[i].path);\r\n\r\n      if (extensions.includes(extension)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async copyFileUpdatesAndAdds(storage: IStorage) {\r\n    for (let i = 0; i < this.fileDifferences.length; i++) {\r\n      const fileDiff = this.fileDifferences[i];\r\n\r\n      if (\r\n        (fileDiff.type === FileDifferenceType.fileAdded || fileDiff.type === FileDifferenceType.contentsDifferent) &&\r\n        fileDiff.updated &&\r\n        fileDiff.updated.content !== null\r\n      ) {\r\n        const file = await storage.rootFolder.ensureFileFromRelativePath(fileDiff.path);\r\n\r\n        file.setContent(fileDiff.updated.content);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport FileBase from \"./FileBase\";\r\nimport Folder from \"./Folder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport Storage from \"./Storage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\n\r\nexport default class File extends FileBase implements IFile {\r\n  private _name: string;\r\n  private _parentFolder: Folder;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get isContentLoaded() {\r\n    return true;\r\n  }\r\n\r\n  get parentFolder(): Folder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get fullPath() {\r\n    return this._parentFolder.fullPath + Storage.folderDelimiter + this.name;\r\n  }\r\n\r\n  constructor(parentFolder: Folder, folderName: string) {\r\n    super();\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = folderName;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for in-memory storage\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    return true;\r\n  }\r\n\r\n  async loadContent(force?: boolean): Promise<Date> {\r\n    this.lastLoadedOrSaved = new Date();\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    Log.verbose(\"Deleting file '\" + this.storageRelativePath + \"'\");\r\n\r\n    if (skipRemoveFromParent !== true) {\r\n      this._parentFolder._removeFile(this);\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFileName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFileName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n    if (newParentFolder.files[newFileName] !== undefined) {\r\n      throw new Error(\"File exists at specified path.\");\r\n    }\r\n\r\n    this._name = newFileName;\r\n    this._parentFolder = newParentFolder as Folder;\r\n\r\n    (newParentFolder as Folder)._addExistingFile(this);\r\n\r\n    return true;\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    if (this._content === newContent) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.lastLoadedOrSaved) {\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.lastLoadedOrSaved = new Date(this.lastLoadedOrSaved.getTime() - 1);\r\n\r\n      // This is expected in serialized storage mode where files are created with initial content\r\n      // Log.debugAlert(\"Setting a file without loading it first.\");\r\n    }\r\n\r\n    let oldContent = this._content;\r\n\r\n    this._content = newContent;\r\n\r\n    this.contentWasModified(oldContent, updateType, sourceId);\r\n\r\n    return true;\r\n  }\r\n\r\n  async saveContent(): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    this.lastLoadedOrSaved = new Date();\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile from \"./IFile\";\r\nimport File from \"./File\";\r\nimport Storage from \"./Storage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport FolderBase from \"./FolderBase\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class Folder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _path: string;\r\n\r\n  folders: { [name: string]: Folder | undefined };\r\n  files: { [name: string]: File | undefined };\r\n\r\n  private _storage: Storage;\r\n  private _parentFolder: Folder | null;\r\n\r\n  get storage(): Storage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): Folder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    return this._path + Storage.folderDelimiter + this.name;\r\n  }\r\n\r\n  constructor(storage: Storage, parentFolder: Folder | null, parentPath: string, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._path = parentPath;\r\n    this._name = folderName;\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async exists() {\r\n    return true;\r\n  }\r\n\r\n  async ensureExists() {\r\n    return true;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for in-memory storage\r\n  }\r\n\r\n  ensureFile(name: string): File {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile === undefined) {\r\n      candFile = new File(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  _removeFile(file: IFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    const candFile = this.files[nameCanon];\r\n\r\n    Log.assert(candFile === file, \"Files don't match.\");\r\n\r\n    this.files[nameCanon] = undefined;\r\n  }\r\n\r\n  _addExistingFile(file: File) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    this.files[nameCanon] = file;\r\n  }\r\n\r\n  ensureFolder(name: string): Folder {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new Folder(this._storage, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    throw new Error(\"Deletion of this folder \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  _addExistingFolderToParent(folder: Folder) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    this.folders[nameCanon] = folder;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFolderName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFolderName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    if (this._parentFolder !== null) {\r\n      const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n      if (newParentFolder.folders[newFolderName] !== undefined) {\r\n        throw new Error(\"Folder exists at specified path.\");\r\n      }\r\n      this._parentFolder = newParentFolder as Folder;\r\n\r\n      (newParentFolder as Folder)._addExistingFolderToParent(this);\r\n    }\r\n\r\n    this._name = newFolderName;\r\n\r\n    return true;\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    return this.ensureFile(name);\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Folder from \"./Folder\";\r\nimport StorageBase from \"./StorageBase\";\r\nimport IStorage from \"./IStorage\";\r\n\r\nexport default class Storage extends StorageBase implements IStorage {\r\n  rootFolder: Folder;\r\n\r\n  static readonly folderDelimiter = \"/\";\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    this.rootFolder = new Folder(this, null, \"\", \"root\");\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(Storage.folderDelimiter)) {\r\n      fullPath += Storage.folderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static getParentFolderPath(path: string) {\r\n    const lastDelim = path.lastIndexOf(this.folderDelimiter);\r\n\r\n    if (lastDelim < 0) {\r\n      return path;\r\n    }\r\n\r\n    return path.substring(0, lastDelim);\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n}\r\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAndAssertSingleCodePoint = exports.invertCaseOfAlphabeticChar = exports.isUpperCase = exports.isLowerCase = exports.isAlphabetic = exports.isDigit = exports.isWordChar = exports.convertSurrogatePairToCodePoint = exports.isLowSurrogate = exports.isHighSurrogate = void 0;\nfunction isHighSurrogate(char) {\n    return 55296 /* CharacterCode.HighSurrogateStart */ <= char && char <= 56319 /* CharacterCode.HighSurrogateEnd */;\n}\nexports.isHighSurrogate = isHighSurrogate;\nfunction isLowSurrogate(char) {\n    return 56320 /* CharacterCode.LowSurrogateStart */ <= char && char <= 57343 /* CharacterCode.LowSurrogateEnd */;\n}\nexports.isLowSurrogate = isLowSurrogate;\n// See https://unicodebook.readthedocs.io/unicode_encodings.html#utf-16-surrogate-pairs.\nfunction convertSurrogatePairToCodePoint(highSurrogate, lowSurrogate) {\n    return ((highSurrogate - 55296 /* CharacterCode.HighSurrogateStart */) * 0x400 +\n        lowSurrogate -\n        56320 /* CharacterCode.LowSurrogateStart */ +\n        0x10000);\n}\nexports.convertSurrogatePairToCodePoint = convertSurrogatePairToCodePoint;\nfunction isWordChar(char) {\n    return isDigit(char) || isAlphabetic(char);\n}\nexports.isWordChar = isWordChar;\nfunction isDigit(char) {\n    return 48 /* CharacterCode.Zero */ <= char && char <= 57 /* CharacterCode.Nine */;\n}\nexports.isDigit = isDigit;\nfunction isAlphabetic(char) {\n    return isLowerCase(char) || isUpperCase(char);\n}\nexports.isAlphabetic = isAlphabetic;\nfunction isLowerCase(char) {\n    return 97 /* CharacterCode.LowerA */ <= char && char <= 122 /* CharacterCode.LowerZ */;\n}\nexports.isLowerCase = isLowerCase;\nfunction isUpperCase(char) {\n    return 65 /* CharacterCode.UpperA */ <= char && char <= 90 /* CharacterCode.UpperZ */;\n}\nexports.isUpperCase = isUpperCase;\n// Input must be a lower-case or upper-case ASCII alphabet character.\nfunction invertCaseOfAlphabeticChar(char) {\n    return char ^ 0x20;\n}\nexports.invertCaseOfAlphabeticChar = invertCaseOfAlphabeticChar;\n// Asserts that the string is comprised of one and only one code point,\n// then returns said code point.\nfunction getAndAssertSingleCodePoint(str) {\n    if ([...str].length !== 1)\n        throw new RangeError(`Expected the input string to be one code point in length.`);\n    return str.codePointAt(0);\n}\nexports.getAndAssertSingleCodePoint = getAndAssertSingleCodePoint;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.randomCharFromSetCensorStrategy = exports.fixedCharCensorStrategy = exports.fixedPhraseCensorStrategy = exports.grawlixCensorStrategy = exports.asteriskCensorStrategy = exports.keepEndCensorStrategy = exports.keepStartCensorStrategy = void 0;\nconst Char_1 = require(\"../util/Char\");\n/**\n * A text censoring strategy that extends another strategy, adding the first\n * character matched at the start of the generated string.\n *\n * @example\n * ```typescript\n * const strategy = keepStartCensorStrategy(grawlixCensorStrategy());\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: 'f$@* you'\n * ```\n * @example\n * ```typescript\n * // Since keepEndCensorStrategy() returns another text censoring strategy, you can use it\n * // as the base strategy to pass to keepStartCensorStrategy().\n * const strategy = keepStartCensorStrategy(keepEndCensorStrategy(asteriskCensorStrategy()));\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: 'f**k you'\n * ```\n * @param baseStrategy - Strategy to extend. It will be used to produce the end of\n * the generated string.\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction keepStartCensorStrategy(baseStrategy) {\n    return (ctx) => {\n        if (ctx.overlapsAtStart)\n            return baseStrategy(ctx);\n        const firstChar = String.fromCodePoint(ctx.input.codePointAt(ctx.startIndex));\n        return firstChar + baseStrategy({ ...ctx, matchLength: ctx.matchLength - 1 });\n    };\n}\nexports.keepStartCensorStrategy = keepStartCensorStrategy;\n/**\n * A text censoring strategy that extends another strategy, adding the last\n * character matched at the end of the generated string.\n *\n * @example\n * ```typescript\n * const strategy = keepEndCensorStrategy(asteriskCensorStrategy());\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: '***k you'\n * ```\n * @param baseStrategy - Strategy to extend. It will be used to produce the start\n * of the generated string.\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction keepEndCensorStrategy(baseStrategy) {\n    return (ctx) => {\n        if (ctx.overlapsAtEnd)\n            return baseStrategy(ctx);\n        const lastChar = String.fromCodePoint(ctx.input.codePointAt(ctx.endIndex));\n        return baseStrategy({ ...ctx, matchLength: ctx.matchLength - 1 }) + lastChar;\n    };\n}\nexports.keepEndCensorStrategy = keepEndCensorStrategy;\n/**\n * A text censoring strategy that generates strings made up of asterisks (`*`).\n *\n * @example\n * ```typescript\n * const strategy = asteriskCensorStrategy();\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: '**** you'\n * ```\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction asteriskCensorStrategy() {\n    return fixedCharCensorStrategy('*');\n}\nexports.asteriskCensorStrategy = asteriskCensorStrategy;\n/**\n * A text censoring strategy that generates\n * [grawlix](https://www.merriam-webster.com/words-at-play/grawlix-symbols-swearing-comic-strips),\n * i.e. strings that contain the characters `%`, `@`, `$`, `&`, and `*`.\n *\n * @example\n * ```typescript\n * const strategy = grawlixCensorStrategy();\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: '%@&* you'\n * ```\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction grawlixCensorStrategy() {\n    return randomCharFromSetCensorStrategy('%@$&*');\n}\nexports.grawlixCensorStrategy = grawlixCensorStrategy;\n/**\n * A text censoring strategy that returns a fixed string.\n *\n * @example\n * ```typescript\n * // The replacement phrase '' effectively removes all matched regions\n * // from the string.\n * const strategy = fixedPhraseCensorStrategy('');\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: ' you'\n * ```\n * @example\n * ```typescript\n * const strategy = fixedPhraseCensorStrategy('fudge');\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: 'fudge you'\n * ```\n * @param phrase - Replacement phrase to use.\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction fixedPhraseCensorStrategy(phrase) {\n    return () => phrase;\n}\nexports.fixedPhraseCensorStrategy = fixedPhraseCensorStrategy;\n/**\n * A text censoring strategy that generates replacement strings that are made up\n * of the character given, repeated as many times as needed.\n *\n * @example\n * ```typescript\n * const strategy = fixedCharCensorStrategy('*');\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: '**** you'.\n * ```\n * @param char - String that represents the code point which should be used when\n * generating the replacement string. Must be exactly one code point in length.\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction fixedCharCensorStrategy(char) {\n    // Make sure the input character is one code point in length.\n    (0, Char_1.getAndAssertSingleCodePoint)(char);\n    return (ctx) => char.repeat(ctx.matchLength);\n}\nexports.fixedCharCensorStrategy = fixedCharCensorStrategy;\n/**\n * A text censoring strategy that generates replacement strings made up of\n * random characters from the set of characters provided. The strings never\n * contain two of the same character in a row.\n *\n * @example\n * ```typescript\n * const strategy = randomCharFromSetCensorStrategy('$#!');\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you!'\n * // After: '!#$# you!'\n * ```\n * @param charset - Set of characters from which the replacement string should\n * be constructed. Must have at least two characters.\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction randomCharFromSetCensorStrategy(charset) {\n    const chars = [...charset];\n    if (chars.length < 2)\n        throw new Error('The character set passed must have at least 2 characters.');\n    return (ctx) => {\n        if (ctx.matchLength === 0)\n            return '';\n        let lastIdx = Math.floor(Math.random() * chars.length);\n        let censored = chars[lastIdx];\n        for (let i = 1; i < ctx.matchLength; i++) {\n            let idx = Math.floor(Math.random() * (chars.length - 1));\n            // Transform the distribution for idx from [0, len-1) to\n            // [0, lastIdx) \u222A (lastIdx, len) to exclude lastIdx while\n            // ensuring a uniform distribution of generated characters.\n            if (idx >= lastIdx)\n                idx++;\n            lastIdx = idx;\n            censored += chars[idx];\n        }\n        return censored;\n    };\n}\nexports.randomCharFromSetCensorStrategy = randomCharFromSetCensorStrategy;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compareIntervals = void 0;\nfunction compareIntervals(lowerBound0, upperBound0, lowerBound1, upperBound1) {\n    if (lowerBound0 < lowerBound1)\n        return -1;\n    if (lowerBound1 < lowerBound0)\n        return 1;\n    if (upperBound0 < upperBound1)\n        return -1;\n    if (upperBound1 < upperBound0)\n        return 1;\n    return 0;\n}\nexports.compareIntervals = compareIntervals;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compareMatchByPositionAndId = void 0;\nconst Interval_1 = require(\"../util/Interval\");\n/**\n * Compares two match payloads.\n *\n * If the first match payload's start index is less than the second's, `-1` is\n *   returned;\n * If the second match payload's start index is less than the first's, `1` is\n *   returned;\n * If the first match payload's end index is less than the second's, `-1` is\n *   returned;\n * If the second match payload's end index is less than the first's, `1` is\n *   returned;\n * If the first match payload's term ID is less than the second's, `-1` is\n *   returned;\n * If the first match payload's term ID is equal to the second's, `0` is\n *   returned;\n * Otherwise, `1` is returned.\n *\n * @param a - First match payload.\n * @param b - Second match payload.\n * @returns The result of the comparison: -1 if the first should sort lower than\n * the second, 0 if they are the same, and 1 if the second should sort lower\n * than the first.\n */\nfunction compareMatchByPositionAndId(a, b) {\n    const result = (0, Interval_1.compareIntervals)(a.startIndex, a.endIndex, b.startIndex, b.endIndex);\n    if (result !== 0)\n        return result;\n    return a.termId === b.termId ? 0 : a.termId < b.termId ? -1 : 1;\n}\nexports.compareMatchByPositionAndId = compareMatchByPositionAndId;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TextCensor = void 0;\nconst MatchPayload_1 = require(\"../matcher/MatchPayload\");\nconst BuiltinStrategies_1 = require(\"./BuiltinStrategies\");\n/**\n * Censors regions of text matched by a [[Matcher]], supporting flexible\n * [[TextCensorStrategy | censoring strategies]].\n */\nclass TextCensor {\n    constructor() {\n        this.strategy = (0, BuiltinStrategies_1.grawlixCensorStrategy)();\n    }\n    /**\n     * Sets the censoring strategy, which is responsible for generating\n     * replacement text for regions of the text that should be censored.\n     *\n     * The default censoring strategy is the [[grawlixCensorStrategy]],\n     * generating text like `$%@*`. There are several other built-in strategies\n     * available:\n     * - [[keepStartCensorStrategy]] - extends another strategy and keeps the\n     *   first character matched, e.g. `f***`.\n     * - [[keepEndCensorStrategy]] - extends another strategy and keeps the last\n     *   character matched, e.g. `***k`.\n     * - [[asteriskCensorStrategy]] - replaces the text with asterisks, e.g.\n     *   `****`.\n     * - [[grawlixCensorStrategy]] - the default strategy, discussed earlier.\n     *\n     * Note that since censoring strategies are just functions (see the\n     * documentation for [[TextCensorStrategy]]), it is relatively simple to\n     * create your own.\n     *\n     * To ease creation of common censoring strategies, we provide a number of\n     * utility functions:\n     * - [[fixedPhraseCensorStrategy]] - generates a fixed phrase, e.g. `fudge`.\n     * - [[fixedCharCensorStrategy]] - generates replacement strings constructed\n     *   from the character given, repeated as many times as needed.\n     * - [[randomCharFromSetCensorStrategy]] - generates replacement strings\n     *   made up of random characters from the set of characters provided.\n     *\n     * @param strategy - Text censoring strategy to use.\n     */\n    setStrategy(strategy) {\n        this.strategy = strategy;\n        return this;\n    }\n    /**\n     * Applies the censoring strategy to the text, returning the censored text.\n     *\n     * **Overlapping regions**\n     *\n     * Overlapping regions are an annoying edge case to deal with when censoring\n     * text. There is no single best way to handle them, but the implementation\n     * of this method guarantees that overlapping regions will always be\n     * replaced, following the rules below:\n     *\n     * - Replacement text for matched regions will be generated in the order\n     *   specified by [[compareMatchByPositionAndId]];\n     * - When generating replacements for regions that overlap at the start with\n     *   some other region, the start index of the censor context passed to the\n     *   censoring strategy will be the end index of the first region, plus one.\n     *\n     * @param input - Input text.\n     * @param matches - A list of matches.\n     * @returns The censored text.\n     */\n    applyTo(input, matches) {\n        if (matches.length === 0)\n            return input;\n        const sorted = [...matches].sort(MatchPayload_1.compareMatchByPositionAndId);\n        let censored = '';\n        let lastIndex = 0; // end index of last match, plus one\n        for (let i = 0; i < sorted.length; i++) {\n            const match = sorted[i];\n            if (lastIndex > match.endIndex)\n                continue; // completely contained in the previous span\n            const overlapsAtStart = match.startIndex < lastIndex;\n            // Add the chunk of text between the end of the last match and the\n            // start of the current match.\n            if (!overlapsAtStart)\n                censored += input.slice(lastIndex, match.startIndex);\n            const actualStartIndex = Math.max(lastIndex, match.startIndex);\n            const overlapsAtEnd = i < sorted.length - 1 && // not the last match\n                match.endIndex >= sorted[i + 1].startIndex && // end index of this match and start index of next one overlap\n                match.endIndex < sorted[i + 1].endIndex; // doesn't completely contain next match\n            censored += this.strategy({ ...match, startIndex: actualStartIndex, input, overlapsAtStart, overlapsAtEnd });\n            lastIndex = match.endIndex + 1;\n        }\n        censored += input.slice(lastIndex);\n        return censored;\n    }\n}\nexports.TextCensor = TextCensor;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assignIncrementingIds = void 0;\n/**\n * Assigns incrementing IDs to the patterns provided, starting with 0. It is\n * useful if you have a list of patterns to match against but don't care about\n * identifying which pattern matched.\n *\n * @example\n * ```typescript\n * const matcher = new RegExpMatcher({\n *  ...,\n *  blacklistedTerms: assignIncrementingIds([\n *      pattern`f?uck`,\n *      pattern`|shit|`,\n *  ]),\n * });\n * ```\n * @param patterns - List of parsed patterns.\n * @returns A list of blacklisted terms with valid IDs which can then be passed\n * to the [[RegExpMatcher]].\n */\nfunction assignIncrementingIds(patterns) {\n    let currentId = 0;\n    return patterns.map((pattern) => ({ id: currentId++, pattern }));\n}\nexports.assignIncrementingIds = assignIncrementingIds;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PhraseBuilder = exports.DataSet = void 0;\nconst BlacklistedTerm_1 = require(\"../matcher/BlacklistedTerm\");\n/**\n * Holds phrases (groups of patterns and whitelisted terms), optionally\n * associating metadata with them.\n *\n * @typeParam MetadataType - Metadata type for phrases. Note that the metadata\n * type is implicitly nullable.\n */\nclass DataSet {\n    constructor() {\n        this.containers = [];\n        this.patternCount = 0;\n        this.patternIdToPhraseContainer = new Map(); // pattern ID => index of its container\n    }\n    /**\n     * Adds all the phrases from the dataset provided to this one.\n     *\n     * @example\n     * ```typescript\n     * const customDataset = new DataSet().addAll(englishDataset);\n     * ```\n     * @param other - Other dataset.\n     */\n    addAll(other) {\n        for (const container of other.containers)\n            this.registerContainer(container);\n        return this;\n    }\n    /**\n     * Removes phrases that match the predicate given.\n     *\n     * @example\n     * ```typescript\n     * const customDataset = new DataSet<{ originalWord: string }>()\n     * \t.addAll(englishDataset)\n     * \t.removePhrasesIf((phrase) => phrase.metadata.originalWord === 'fuck');\n     * ```\n     * @param predicate - A predicate that determines whether or not a phrase should be removed.\n     * Return `true` to remove, `false` to keep.\n     */\n    removePhrasesIf(predicate) {\n        // Clear the internal state, then gradually rebuild it by adding the\n        // containers that should be kept.\n        this.patternCount = 0;\n        this.patternIdToPhraseContainer.clear();\n        const containers = this.containers.splice(0);\n        for (const container of containers) {\n            const remove = predicate(container);\n            if (!remove)\n                this.registerContainer(container);\n        }\n        return this;\n    }\n    /**\n     * Adds a phrase to this dataset.\n     *\n     * @example\n     * ```typescript\n     * const data = new DataSet<{ originalWord: string }>()\n     * \t.addPhrase((phrase) => phrase.setMetadata({ originalWord: 'fuck' })\n     * \t\t.addPattern(pattern`fuck`)\n     * \t\t.addPattern(pattern`f[?]ck`)\n     * \t\t.addWhitelistedTerm('Afck'))\n     * \t.build();\n     * ```\n     * @param fn - A function that takes a [[PhraseBuilder]], adds\n     * patterns/whitelisted terms/metadata to it, and returns it.\n     */\n    addPhrase(fn) {\n        const container = fn(new PhraseBuilder()).build();\n        this.registerContainer(container);\n        return this;\n    }\n    /**\n     * Retrieves the phrase metadata associated with a pattern and returns a\n     * copy of the match payload with said metadata attached to it.\n     *\n     * @example\n     * ```typescript\n     * const matches = matcher.getAllMatches(input);\n     * const matchesWithPhraseMetadata = matches.map((match) => dataset.getPayloadWithPhraseMetadata(match));\n     * // Now we can access the 'phraseMetadata' property:\n     * const phraseMetadata = matchesWithPhraseMetadata[0].phraseMetadata;\n     * ```\n     * @param payload - Original match payload.\n     */\n    getPayloadWithPhraseMetadata(payload) {\n        const offset = this.patternIdToPhraseContainer.get(payload.termId);\n        if (offset === undefined) {\n            throw new Error(`The pattern with ID ${payload.termId} does not exist in this dataset.`);\n        }\n        return {\n            ...payload,\n            phraseMetadata: this.containers[offset].metadata,\n        };\n    }\n    /**\n     * Returns the dataset in a format suitable for usage with the [[RegExpMatcher]].\n     *\n     * @example\n     * ```typescript\n     * // With the RegExpMatcher:\n     * const matcher = new RegExpMatcher({\n     * \t...dataset.build(),\n     * \t// additional options here\n     * });\n     * ```\n     */\n    build() {\n        return {\n            blacklistedTerms: (0, BlacklistedTerm_1.assignIncrementingIds)(this.containers.flatMap((p) => p.patterns)),\n            whitelistedTerms: this.containers.flatMap((p) => p.whitelistedTerms),\n        };\n    }\n    registerContainer(container) {\n        const offset = this.containers.push(container) - 1;\n        for (let i = 0, phraseId = this.patternCount; i < container.patterns.length; i++, phraseId++) {\n            this.patternIdToPhraseContainer.set(phraseId, offset);\n            this.patternCount++;\n        }\n    }\n}\nexports.DataSet = DataSet;\n/**\n * Builder for phrases.\n */\nclass PhraseBuilder {\n    constructor() {\n        this.patterns = [];\n        this.whitelistedTerms = [];\n    }\n    /**\n     * Associates a pattern with this phrase.\n     *\n     * @param pattern - Pattern to add.\n     */\n    addPattern(pattern) {\n        this.patterns.push(pattern);\n        return this;\n    }\n    /**\n     * Associates a whitelisted pattern with this phrase.\n     *\n     * @param term - Whitelisted term to add.\n     */\n    addWhitelistedTerm(term) {\n        this.whitelistedTerms.push(term);\n        return this;\n    }\n    /**\n     * Associates some metadata with this phrase.\n     *\n     * @param metadata - Metadata to use.\n     */\n    setMetadata(metadata) {\n        this.metadata = metadata;\n        return this;\n    }\n    /**\n     * Builds the phrase, returning a [[PhraseContainer]] for use with the\n     * [[DataSet]].\n     */\n    build() {\n        return {\n            patterns: this.patterns,\n            whitelistedTerms: this.whitelistedTerms,\n            metadata: this.metadata,\n        };\n    }\n}\nexports.PhraseBuilder = PhraseBuilder;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyntaxKind = void 0;\n/**\n * An enumeration of the kinds of nodes there are.\n */\nvar SyntaxKind;\n(function (SyntaxKind) {\n    SyntaxKind[SyntaxKind[\"Optional\"] = 0] = \"Optional\";\n    SyntaxKind[SyntaxKind[\"Wildcard\"] = 1] = \"Wildcard\";\n    SyntaxKind[SyntaxKind[\"Literal\"] = 2] = \"Literal\";\n    SyntaxKind[SyntaxKind[\"BoundaryAssertion\"] = 3] = \"BoundaryAssertion\";\n})(SyntaxKind || (exports.SyntaxKind = SyntaxKind = {}));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRegExpStringForNode = exports.compilePatternToRegExp = exports.potentiallyMatchesEmptyString = void 0;\nconst Nodes_1 = require(\"./Nodes\");\nfunction potentiallyMatchesEmptyString(pattern) {\n    return pattern.nodes.every((node) => node.kind === Nodes_1.SyntaxKind.Optional);\n}\nexports.potentiallyMatchesEmptyString = potentiallyMatchesEmptyString;\nfunction compilePatternToRegExp(pattern) {\n    let regExpStr = '';\n    if (pattern.requireWordBoundaryAtStart)\n        regExpStr += '\\\\b';\n    for (const node of pattern.nodes)\n        regExpStr += getRegExpStringForNode(node);\n    if (pattern.requireWordBoundaryAtEnd)\n        regExpStr += `\\\\b`;\n    return new RegExp(regExpStr, 'gs');\n}\nexports.compilePatternToRegExp = compilePatternToRegExp;\nconst regExpSpecialChars = ['[', '.', '*', '+', '?', '^', '$', '{', '}', '(', ')', '|', '[', '\\\\', ']'].map((str) => str.charCodeAt(0));\nfunction getRegExpStringForNode(node) {\n    switch (node.kind) {\n        case Nodes_1.SyntaxKind.Literal: {\n            let str = '';\n            for (const char of node.chars) {\n                if (regExpSpecialChars.includes(char))\n                    str += '\\\\';\n                str += String.fromCodePoint(char);\n            }\n            return str;\n        }\n        case Nodes_1.SyntaxKind.Optional:\n            return `(?:${getRegExpStringForNode(node.childNode)})?`;\n        case Nodes_1.SyntaxKind.Wildcard:\n            return `.`;\n    }\n}\nexports.getRegExpStringForNode = getRegExpStringForNode;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TransformerSet = void 0;\nclass TransformerSet {\n    constructor(transformers) {\n        this.transformers = transformers;\n        this.statefulTransformers = Array.from({ length: this.transformers.length });\n        for (let i = 0; i < this.transformers.length; i++) {\n            const transformer = this.transformers[i];\n            if (transformer.type === 1 /* TransformerType.Stateful */) {\n                this.statefulTransformers[i] = transformer.factory();\n            }\n        }\n    }\n    applyTo(char) {\n        let transformed = char;\n        for (let i = 0; i < this.transformers.length && transformed !== undefined; i++) {\n            const transformer = this.transformers[i];\n            if (transformer.type === 0 /* TransformerType.Simple */)\n                transformed = transformer.transform(transformed);\n            else\n                transformed = this.statefulTransformers[i].transform(transformed);\n        }\n        return transformed;\n    }\n    resetAll() {\n        for (let i = 0; i < this.transformers.length; i++) {\n            if (this.transformers[i].type === 1 /* TransformerType.Stateful */) {\n                this.statefulTransformers[i].reset();\n            }\n        }\n    }\n}\nexports.TransformerSet = TransformerSet;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CharacterIterator = void 0;\nconst Char_1 = require(\"./Char\");\nclass CharacterIterator {\n    constructor(input) {\n        this.lastPosition = -1;\n        this.currentPosition = 0;\n        this._lastWidth = 0;\n        this._input = input ?? '';\n    }\n    get input() {\n        return this._input;\n    }\n    setInput(input) {\n        this._input = input;\n        this.reset();\n        return this;\n    }\n    reset() {\n        this.lastPosition = -1;\n        this.currentPosition = 0;\n        this._lastWidth = 0;\n    }\n    next() {\n        if (this.done)\n            return { done: true, value: undefined };\n        this.lastPosition = this.currentPosition;\n        const char = this._input.charCodeAt(this.currentPosition++);\n        this._lastWidth = 1;\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (this.done || !(0, Char_1.isHighSurrogate)(char))\n            return { done: false, value: char };\n        // Do we have a surrogate pair?\n        const next = this._input.charCodeAt(this.currentPosition);\n        if ((0, Char_1.isLowSurrogate)(next)) {\n            this._lastWidth++;\n            this.currentPosition++;\n            return { done: false, value: (0, Char_1.convertSurrogatePairToCodePoint)(char, next) };\n        }\n        return { done: false, value: char };\n    }\n    // Position of the iterator; equals the start index of the last character consumed.\n    // -1 if no characters were consumed yet.\n    get position() {\n        return this.lastPosition;\n    }\n    // Width of the last character consumed; 2 if it was a surrogate pair and 1 otherwise.\n    // 0 if no characters were consumed yet.\n    get lastWidth() {\n        return this._lastWidth;\n    }\n    get done() {\n        return this.currentPosition >= this._input.length;\n    }\n    [Symbol.iterator]() {\n        return this;\n    }\n}\nexports.CharacterIterator = CharacterIterator;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IntervalCollection = void 0;\nclass IntervalCollection {\n    constructor() {\n        this.dirty = false;\n        this.intervals = [];\n    }\n    insert(lowerBound, upperBound) {\n        this.intervals.push([lowerBound, upperBound]);\n        this.dirty = true;\n    }\n    query(lowerBound, upperBound) {\n        if (this.intervals.length === 0)\n            return false;\n        if (this.dirty) {\n            this.dirty = false;\n            // Sort by lower bound.\n            this.intervals.sort(\n            /* istanbul ignore next: not possible to write a robust test for this */\n            (a, b) => (a[0] < b[0] ? -1 : b[0] < a[0] ? 1 : 0));\n        }\n        for (const interval of this.intervals) {\n            // Since the intervals are sorted by lower bound, if we see an\n            // interval with a lower bound greater than the target, we can skip\n            // checking all the ones after it as it's impossible that they fully\n            // contain the target interval.\n            if (interval[0] > lowerBound)\n                break;\n            if (interval[0] <= lowerBound && upperBound <= interval[1])\n                return true;\n        }\n        return false;\n    }\n    values() {\n        return this.intervals.values();\n    }\n    [Symbol.iterator]() {\n        return this.values();\n    }\n}\nexports.IntervalCollection = IntervalCollection;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RegExpMatcher = void 0;\nconst Char_1 = require(\"../../util/Char\");\nconst Util_1 = require(\"../../pattern/Util\");\nconst TransformerSet_1 = require(\"../../transformer/TransformerSet\");\nconst CharacterIterator_1 = require(\"../../util/CharacterIterator\");\nconst IntervalCollection_1 = require(\"../IntervalCollection\");\nconst MatchPayload_1 = require(\"../MatchPayload\");\n/**\n * An implementation of the [[Matcher]] interface using regular expressions and\n * string searching methods.\n */\nclass RegExpMatcher {\n    /**\n     * Creates a new [[RegExpMatcher]] with the options given.\n     *\n     * @example\n     * ```typescript\n     * // Use the options provided by the English preset.\n     * const matcher = new RegExpMatcher({\n     * \t...englishDataset.build(),\n     * \t...englishRecommendedTransformers,\n     * });\n     * ```\n     * @example\n     * ```typescript\n     * // Simple matcher that only has blacklisted patterns.\n     * const matcher = new RegExpMatcher({\n     *  blacklistedTerms: assignIncrementingIds([\n     *      pattern`fuck`,\n     *      pattern`f?uck`, // wildcards (?)\n     *      pattern`bitch`,\n     *      pattern`b[i]tch` // optionals ([i] matches either \"i\" or \"\")\n     *  ]),\n     * });\n     *\n     * // Check whether some string matches any of the patterns.\n     * const doesMatch = matcher.hasMatch('fuck you bitch');\n     * ```\n     * @example\n     * ```typescript\n     * // A more advanced example, with transformers and whitelisted terms.\n     * const matcher = new RegExpMatcher({\n     *  blacklistedTerms: [\n     *      { id: 1, pattern: pattern`penis` },\n     *      { id: 2, pattern: pattern`fuck` },\n     *  ],\n     *  whitelistedTerms: ['pen is'],\n     *  blacklistMatcherTransformers: [\n     *      resolveConfusablesTransformer(), // '\uD83C\uDD70' => 'a'\n     *      resolveLeetSpeakTransformer(), // '$' => 's'\n     *      foldAsciiCharCaseTransformer(), // case insensitive matching\n     *      skipNonAlphabeticTransformer(), // 'f.u...c.k' => 'fuck'\n     *      collapseDuplicatesTransformer(), // 'aaaa' => 'a'\n     *  ],\n     * });\n     *\n     * // Output all matches.\n     * console.log(matcher.getAllMatches('fu.....uuuuCK the pen is mightier than the sword!'));\n     * ```\n     * @param options - Options to use.\n     */\n    constructor({ blacklistedTerms, whitelistedTerms = [], blacklistMatcherTransformers = [], whitelistMatcherTransformers = [], }) {\n        this.blacklistedTerms = this.compileTerms(blacklistedTerms);\n        this.validateWhitelistedTerms(whitelistedTerms);\n        this.whitelistedTerms = whitelistedTerms;\n        this.blacklistMatcherTransformers = new TransformerSet_1.TransformerSet(blacklistMatcherTransformers);\n        this.whitelistMatcherTransformers = new TransformerSet_1.TransformerSet(whitelistMatcherTransformers);\n    }\n    getAllMatches(input, sorted = false) {\n        const whitelistedIntervals = this.getWhitelistedIntervals(input);\n        const [transformedToOrigIndex, transformed] = this.applyTransformers(input, this.blacklistMatcherTransformers);\n        const matches = [];\n        for (const blacklistedTerm of this.blacklistedTerms) {\n            for (const match of transformed.matchAll(blacklistedTerm.regExp)) {\n                const origStartIndex = transformedToOrigIndex[match.index];\n                let origEndIndex = transformedToOrigIndex[match.index + match[0].length - 1];\n                // End index is (unfortunately) inclusive, so adjust as necessary.\n                if (origEndIndex < input.length - 1 && // not the last character\n                    (0, Char_1.isHighSurrogate)(input.charCodeAt(origEndIndex)) && // character is a high surrogate\n                    (0, Char_1.isLowSurrogate)(input.charCodeAt(origEndIndex + 1)) // next character is a low surrogate\n                ) {\n                    origEndIndex++;\n                }\n                if (!whitelistedIntervals.query(origStartIndex, origEndIndex)) {\n                    matches.push({\n                        termId: blacklistedTerm.id,\n                        startIndex: origStartIndex,\n                        endIndex: origEndIndex,\n                        matchLength: [...match[0]].length,\n                    });\n                }\n            }\n        }\n        if (sorted)\n            matches.sort(MatchPayload_1.compareMatchByPositionAndId);\n        return matches;\n    }\n    hasMatch(input) {\n        const whitelistedIntervals = this.getWhitelistedIntervals(input);\n        const [transformedToOrigIndex, transformed] = this.applyTransformers(input, this.blacklistMatcherTransformers);\n        for (const blacklistedTerm of this.blacklistedTerms) {\n            for (const match of transformed.matchAll(blacklistedTerm.regExp)) {\n                const origStartIndex = transformedToOrigIndex[match.index];\n                let origEndIndex = transformedToOrigIndex[match.index + match[0].length - 1];\n                // End index is (unfortunately) inclusive, so adjust as necessary.\n                if (origEndIndex < input.length - 1 && // not the last character\n                    (0, Char_1.isHighSurrogate)(input.charCodeAt(origEndIndex)) && // character is a high surrogate\n                    (0, Char_1.isLowSurrogate)(input.charCodeAt(origEndIndex + 1)) // next character is a low surrogate\n                ) {\n                    origEndIndex++;\n                }\n                if (!whitelistedIntervals.query(origStartIndex, origEndIndex))\n                    return true;\n            }\n        }\n        return false;\n    }\n    getWhitelistedIntervals(input) {\n        const matches = new IntervalCollection_1.IntervalCollection();\n        const [transformedToOrigIndex, transformed] = this.applyTransformers(input, this.whitelistMatcherTransformers);\n        for (const whitelistedTerm of this.whitelistedTerms) {\n            let lastEnd = 0;\n            for (let startIndex = transformed.indexOf(whitelistedTerm, lastEnd); startIndex !== -1; startIndex = transformed.indexOf(whitelistedTerm, lastEnd)) {\n                let origEndIndex = transformedToOrigIndex[startIndex + whitelistedTerm.length - 1];\n                // End index is (unfortunately) inclusive, so adjust as necessary.\n                if (origEndIndex < input.length - 1 && // not the last character\n                    (0, Char_1.isHighSurrogate)(input.charCodeAt(origEndIndex)) && // character is a high surrogate\n                    (0, Char_1.isLowSurrogate)(input.charCodeAt(origEndIndex + 1)) // next character is a low surrogate\n                ) {\n                    origEndIndex++;\n                }\n                matches.insert(transformedToOrigIndex[startIndex], origEndIndex);\n                lastEnd = startIndex + whitelistedTerm.length;\n            }\n        }\n        return matches;\n    }\n    applyTransformers(input, transformers) {\n        const transformedToOrigIndex = [];\n        let transformed = '';\n        const iter = new CharacterIterator_1.CharacterIterator(input);\n        for (const char of iter) {\n            const transformedChar = transformers.applyTo(char);\n            if (transformedChar !== undefined) {\n                transformed += String.fromCodePoint(transformedChar);\n                while (transformedToOrigIndex.length < transformed.length)\n                    transformedToOrigIndex.push(iter.position);\n            }\n        }\n        transformers.resetAll();\n        return [transformedToOrigIndex, transformed];\n    }\n    compileTerms(terms) {\n        const compiled = [];\n        const seenIds = new Set();\n        for (const term of terms) {\n            if (seenIds.has(term.id))\n                throw new Error(`Duplicate blacklisted term ID ${term.id}.`);\n            if ((0, Util_1.potentiallyMatchesEmptyString)(term.pattern)) {\n                throw new Error(`Pattern with ID ${term.id} potentially matches empty string; this is unsupported.`);\n            }\n            compiled.push({\n                id: term.id,\n                regExp: (0, Util_1.compilePatternToRegExp)(term.pattern),\n            });\n            seenIds.add(term.id);\n        }\n        return compiled;\n    }\n    validateWhitelistedTerms(whitelist) {\n        if (whitelist.some((term) => term.length === 0)) {\n            throw new Error('Whitelisted term set contains empty string; this is unsupported.');\n        }\n    }\n}\nexports.RegExpMatcher = RegExpMatcher;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ParserError = void 0;\n/**\n * Custom error thrown by the parser when syntactical errors are detected.\n */\nclass ParserError extends Error {\n    constructor(message, line, column) {\n        super(`${line}:${column}: ${message}`);\n        this.name = 'ParserError';\n        this.line = line;\n        this.column = column;\n    }\n}\nexports.ParserError = ParserError;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Parser = void 0;\nconst Char_1 = require(\"../util/Char\");\nconst CharacterIterator_1 = require(\"../util/CharacterIterator\");\nconst Nodes_1 = require(\"./Nodes\");\nconst ParserError_1 = require(\"./ParserError\");\nconst supportsEscaping = [\n    92 /* CharacterCode.Backslash */,\n    91 /* CharacterCode.LeftSquareBracket */,\n    93 /* CharacterCode.RightSquareBracket */,\n    63 /* CharacterCode.QuestionMark */,\n    124 /* CharacterCode.VerticalBar */,\n];\nconst supportsEscapingList = supportsEscaping.map((char) => `'${String.fromCodePoint(char)}'`).join(', ');\nconst eof = -1;\nclass Parser {\n    constructor() {\n        this.input = '';\n        this.line = 1;\n        this.column = 1;\n        this.position = 0;\n        this.lastColumn = 1;\n        this.lastWidth = 0;\n    }\n    parse(input) {\n        this.setInput(input);\n        const nodes = [];\n        const firstNode = this.nextNode();\n        const requireWordBoundaryAtStart = firstNode?.kind === Nodes_1.SyntaxKind.BoundaryAssertion;\n        if (firstNode && !requireWordBoundaryAtStart)\n            nodes.push(firstNode);\n        let requireWordBoundaryAtEnd = false;\n        while (!this.done) {\n            const pos = this.mark();\n            const node = this.nextNode();\n            if (node.kind !== Nodes_1.SyntaxKind.BoundaryAssertion) {\n                nodes.push(node);\n                continue;\n            }\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            if (!this.done) {\n                this.reportError('Boundary assertions are not supported in this position; they are only allowed at the start / end of the pattern.', pos);\n            }\n            requireWordBoundaryAtEnd = true;\n        }\n        return { requireWordBoundaryAtStart, requireWordBoundaryAtEnd, nodes };\n    }\n    setInput(input) {\n        this.input = input;\n        this.line = 1;\n        this.column = 1;\n        this.position = 0;\n        this.lastColumn = 1;\n        this.lastWidth = 0;\n        return this;\n    }\n    nextNode() {\n        switch (this.peek()) {\n            case eof:\n                return undefined;\n            case 91 /* CharacterCode.LeftSquareBracket */:\n                return this.parseOptional();\n            case 93 /* CharacterCode.RightSquareBracket */:\n                this.reportError(`Unexpected ']' with no corresponding '['.`);\n            // eslint-disable-next-line no-fallthrough\n            case 63 /* CharacterCode.QuestionMark */:\n                return this.parseWildcard();\n            case 124 /* CharacterCode.VerticalBar */:\n                return this.parseBoundaryAssertion();\n            default:\n                return this.parseLiteral();\n        }\n    }\n    get done() {\n        return this.position >= this.input.length;\n    }\n    // Optional ::= '[' Wildcard | Text ']'\n    parseOptional() {\n        const preOpenBracketPos = this.mark();\n        this.next(); // '['\n        const postOpenBracketPos = this.mark();\n        if (this.done)\n            this.reportError(\"Unexpected unclosed '['.\", preOpenBracketPos);\n        if (this.accept('['))\n            this.reportError('Unexpected nested optional node.', postOpenBracketPos);\n        const childNode = this.nextNode();\n        if (childNode.kind === Nodes_1.SyntaxKind.BoundaryAssertion) {\n            this.reportError('Boundary assertions are not supported in this position; they are only allowed at the start / end of the pattern.', postOpenBracketPos);\n        }\n        if (!this.accept(']'))\n            this.reportError(\"Unexpected unclosed '['.\");\n        return { kind: Nodes_1.SyntaxKind.Optional, childNode: childNode };\n    }\n    // Wildcard ::= '?'\n    parseWildcard() {\n        this.next(); // '?'\n        return { kind: Nodes_1.SyntaxKind.Wildcard };\n    }\n    // BoundaryAssertion ::= '|'\n    parseBoundaryAssertion() {\n        this.next(); // '|'\n        return { kind: Nodes_1.SyntaxKind.BoundaryAssertion };\n    }\n    // Literal              ::= (NON_SPECIAL | '\\' SUPPORTS_ESCAPING)+\n    // NON_SPECIAL         ::= _any character other than '\\', '?', '[', ']', or '|'_\n    // SUPPORTS_ESCAPING   ::= '\\' | '[' | ']' | '?' | '|'\n    parseLiteral() {\n        const chars = [];\n        while (!this.done) {\n            if (this.accept('[]?|')) {\n                this.backup();\n                break;\n            }\n            const next = this.next();\n            if (next === 92 /* CharacterCode.Backslash */) {\n                // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                if (this.done) {\n                    this.backup();\n                    this.reportError('Unexpected trailing backslash.');\n                }\n                // Can we escape the next character?\n                const escaped = this.next();\n                if (!supportsEscaping.includes(escaped)) {\n                    const repr = String.fromCodePoint(escaped);\n                    this.backup();\n                    this.reportError(`Cannot escape character '${repr}'; the only characters that can be escaped are the following: ${supportsEscapingList}.`);\n                }\n                chars.push(escaped);\n            }\n            else {\n                chars.push(next);\n            }\n        }\n        return { kind: Nodes_1.SyntaxKind.Literal, chars };\n    }\n    reportError(message, { line = this.line, column = this.column } = {}) {\n        throw new ParserError_1.ParserError(message, line, column);\n    }\n    // Marks the current position.\n    mark() {\n        return { line: this.line, column: this.column };\n    }\n    // Accepts any code point in the charset provided. Iff accepted, the character is consumed.\n    accept(charset) {\n        const next = this.next();\n        const iter = new CharacterIterator_1.CharacterIterator(charset);\n        for (const char of iter) {\n            if (char === next)\n                return true;\n        }\n        this.backup();\n        return false;\n    }\n    // Reads one code point from the input, without consuming it.\n    peek() {\n        const next = this.next();\n        this.backup();\n        return next;\n    }\n    // Consumes one code point from the input.\n    next() {\n        if (this.done)\n            return eof;\n        const char = this.input.charCodeAt(this.position++);\n        this.lastWidth = 1;\n        if (char === 10 /* CharacterCode.Newline */) {\n            this.lastColumn = this.column;\n            this.column = 1;\n            this.line++;\n            return char;\n        }\n        this.lastColumn = this.column++;\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (!(0, Char_1.isHighSurrogate)(char) || this.done)\n            return char;\n        // Do we have a surrogate pair?\n        const next = this.input.charCodeAt(this.position);\n        if ((0, Char_1.isLowSurrogate)(next)) {\n            this.position++;\n            this.lastWidth++;\n            return (0, Char_1.convertSurrogatePairToCodePoint)(char, next);\n        }\n        return char;\n    }\n    // Steps back one character; can only be called once per call to next().\n    backup() {\n        this.position -= this.lastWidth;\n        this.column = this.lastColumn;\n        // Adjust line count if needed.\n        if (this.lastWidth === 1 && this.input.charCodeAt(this.position) === 10 /* CharacterCode.Newline */) {\n            this.line--;\n        }\n    }\n}\nexports.Parser = Parser;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseRawPattern = exports.pattern = void 0;\nconst Parser_1 = require(\"./Parser\");\nconst parser = new Parser_1.Parser();\n/**\n * Parses a pattern, which matches a set of strings; see the `Syntax` section\n * for details. This function is intended to be called as a [template\n * tag](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates).\n *\n * **Syntax**\n *\n * Generally speaking, in patterns, characters are interpreted literally. That\n * is, they match exactly what they are: `a` matches an `a`, `b` matches a `b`,\n * `;` matches a `;`, and so on.\n *\n * However, there are several constructs that have special meaning:\n *\n * - `[expr]` matches either the empty string or `expr` (an **optional\n *   expression**). `expr` may be a sequence of literal characters or a wildcard\n *   (see below).\n * - `?` matches any character (a **wildcard**).\n * - A `|` at the start or end of the pattern asserts position at a word\n *   boundary (a **word boundary assertion**). If `|` is at the start, it\n *   ensures that the match either starts at the start of the string or a non-\n *   word character preceding it; if it is at the end, it ensures that the match\n *   either ends at the end of the string or a non-word character follows it.\n *\n *   A word character is an lower-case or upper-case ASCII alphabet character or\n *   an ASCII digit.\n * - In a literal, a backslash may be used to **escape** one of the\n *   meta-characters mentioned above so that it does match literally: `\\\\[`\n *   matches `[`, and does not mark the start of an optional expression.\n *\n *   **Note about escapes**\n *\n *   As this function operates on raw strings, double-escaping backslashes is\n *   not necessary:\n *\n *   ```typescript\n *   // Use this:\n *   const parsed = pattern`hello \\[`;\n *   // Don't use this:\n *   const parsed = pattern`hello \\\\[`;\n *   ```\n *\n * **Examples**\n *\n * - `baz` matches `baz` exactly.\n *\n * - `b\\[ar` matches `b[ar` exactly.\n *\n * - `d?ude` matches `d`, then any character, then `ude`. All of the following\n *   strings are matched by this pattern:\n *   - `dyude`\n *   - `d;ude`\n *   - `d!ude`\n *\n * - `h[?]ello` matches either `h`, any character, then `ello` or the literal\n *   string `hello`. The set of strings it matches is equal to the union of the\n *   set of strings that the two patterns `hello` and `h?ello` match. All of the\n *   following strings are matched by this pattern:\n *   - `hello`\n *   - `h!ello`\n *   - `h;ello`\n *\n * - `|foobar|` asserts position at a word boundary, matches the literal string\n *   `foobar`, and asserts position at a word boundary:\n *   - `foobar` matches, as the start and end of string count as word\n *     boundaries;\n *   - `yofoobar` does _not_ match, as `f` is immediately preceded by a word\n *     character;\n *   - `hello foobar bye` matches, as `f` is immediately preceded by a non-word\n *     character, and `r` is immediately followed by a non-word character.\n *\n * **Grammar**\n *\n * ```\n * Pattern  ::= '['? Atom* ']'?\n * Atom     ::= Literal | Wildcard | Optional\n * Optional ::= '[' Literal | Wildcard ']'\n * Literal  ::= (NON_SPECIAL | '\\' SUPPORTS_ESCAPING)+\n *\n * NON_SPECIAL       ::= _any character other than '\\', '?', '[', ']', or '|'_\n * SUPPORTS_ESCAPING ::= '\\' | '[' | ']' | '?' | '|'\n * ```\n *\n * @example\n * ```typescript\n * const parsed = pattern`hello?`; // match \"hello\", then any character\n * ```\n * @example\n * ```typescript\n * const parsed = pattern`w[o]rld`; // match \"wrld\" or \"world\"\n * ```\n * @example\n * ```typescript\n * const parsed = pattern`my initials are \\[??\\]`; // match \"my initials are [\", then any two characters, then a \"]\"\n * ```\n * @returns The parsed pattern, which can then be used with the\n * [[RegExpMatcher]].\n * @throws [[ParserError]] if a syntactical error was detected while parsing the\n * pattern.\n * @see [[parseRawPattern]] if you want to parse a string into a pattern without\n * using a template tag.\n */\nfunction pattern(strings, ...expressions) {\n    let result = strings.raw[0];\n    for (const [i, expression] of expressions.entries()) {\n        result += expression;\n        result += strings.raw[i + 1];\n    }\n    return parser.parse(result);\n}\nexports.pattern = pattern;\n/**\n * Parses a string as a pattern directly.\n *\n * **Note**\n *\n * It is recommended to use the [[pattern | pattern template tag]] instead of\n * this function for literal patterns (i.e. ones without dynamic content).\n *\n * @param pattern - The string to parse.\n * @throws [[ParserError]] if a syntactical error was detected while parsing the\n * pattern.\n * @returns The parsed pattern, which can then be used with the\n * [[RegExpMatcher]].\n */\nfunction parseRawPattern(pattern) {\n    return parser.parse(pattern);\n}\nexports.parseRawPattern = parseRawPattern;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createStatefulTransformer = exports.createSimpleTransformer = void 0;\n/**\n * Creates a container holding the transformer function provided. Simple\n * transformers are suitable for stateless transformations, e.g., a\n * transformation that maps certain characters to others. For transformations\n * that need to keep around state, see `createStatefulTransformer`.\n *\n * @example\n * ```typescript\n * function lowercaseToUppercase(char) {\n *  return isLowercase(char) ? char - 32 : char;\n * }\n *\n * const transformer = createSimpleTransformer(lowercaseToUppercase);\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @example\n * ```typescript\n * function ignoreAllNonDigitChars(char) {\n *  return isDigit(char) ? char : undefined;\n * }\n *\n * const transformer = createSimpleTransformer(ignoreAllNonDigitChars);\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @param transformer - Function that applies the transformation. It should\n * accept one argument, the input character, and return the transformed\n * character. A return value of `undefined` indicates that the character should\n * be ignored.\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction createSimpleTransformer(transformer) {\n    return { type: 0 /* TransformerType.Simple */, transform: transformer };\n}\nexports.createSimpleTransformer = createSimpleTransformer;\n/**\n * Creates a container holding the stateful transformer. Stateful transformers\n * are objects which satisfy the `StatefulTransformer` interface. They are\n * suitable for transformations that require keeping around some state regarding\n * the characters previously transformed in the text.\n *\n * @example\n * ```typescript\n * class IgnoreDuplicateCharactersTransformer implements StatefulTransformer {\n *  private lastChar = -1;\n *\n *  public transform(char: number) {\n *      if (char === this.lastChar) return undefined;\n *      this.lastChar = char;\n *      return char;\n *  }\n *\n *  public reset() {\n *      this.lastChar = -1;\n *  }\n * }\n *\n * const transformer = createStatefulTransformer(() => new IgnoreDuplicateCharactersTransformer());\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @param factory A function that returns an instance of the stateful\n * transformer.\n * @returns A container holding the stateful transformer, which can then be\n * passed to the [[RegExpMatcher]].\n */\nfunction createStatefulTransformer(factory) {\n    return { type: 1 /* TransformerType.Stateful */, factory };\n}\nexports.createStatefulTransformer = createStatefulTransformer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CollapseDuplicatesTransformer = void 0;\nclass CollapseDuplicatesTransformer {\n    constructor({ defaultThreshold, customThresholds }) {\n        this.remaining = -1;\n        this.lastChar = -1;\n        this.defaultThreshold = defaultThreshold;\n        this.customThresholds = customThresholds;\n    }\n    transform(char) {\n        if (char === this.lastChar) {\n            return this.remaining-- > 0 ? char : undefined;\n        }\n        const threshold = this.customThresholds.get(char) ?? this.defaultThreshold;\n        this.remaining = threshold - 1;\n        this.lastChar = char;\n        return threshold > 0 ? char : undefined;\n    }\n    reset() {\n        this.remaining = -1;\n        this.lastChar = -1;\n    }\n}\nexports.CollapseDuplicatesTransformer = CollapseDuplicatesTransformer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.collapseDuplicatesTransformer = void 0;\nconst Char_1 = require(\"../../util/Char\");\nconst Transformers_1 = require(\"../Transformers\");\nconst transformer_1 = require(\"./transformer\");\n/**\n * Creates a transformer that collapses duplicate characters. This is useful for\n * detecting variants of patterns in which a character is repeated to bypass\n * detection.\n *\n * As an example, the pattern `hi` does not match `hhiii` by default, as the\n * frequency of the characters does not match. With this transformer, `hhiii`\n * would become `hi`, and would therefore match the pattern.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied after all other\n * transformers. Using it before other transformers may have the effect of not\n * catching duplicates of certain characters that were originally different but\n * became the same after a series of transformations.\n *\n * **Warning**\n *\n * This transformer should be used with caution, as while it can make certain\n * patterns match text that wouldn't have been matched before, it can also go\n * the other way. For example, the pattern `hello` clearly matches `hello`, but\n * with this transformer, by default, `hello` would become `helo` which does\n * _not_ match. In this cases, the `customThresholds` option can be used to\n * allow two `l`s in a row, making it leave `hello` unchanged.\n *\n * @example\n * ```typescript\n * // Collapse runs of the same character.\n * const transformer = collapseDuplicatesTransformer();\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @example\n * ```typescript\n * // Collapse runs of characters other than 'a'.\n * const transformer = collapseDuplicatesTransformer({ customThresholds: new Map([['a', Infinity]]) });\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @param options - Options for the transformer.\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction collapseDuplicatesTransformer({ defaultThreshold = 1, customThresholds = new Map(), } = {}) {\n    const map = createCharacterToThresholdMap(customThresholds);\n    return (0, Transformers_1.createStatefulTransformer)(() => new transformer_1.CollapseDuplicatesTransformer({ defaultThreshold, customThresholds: map }));\n}\nexports.collapseDuplicatesTransformer = collapseDuplicatesTransformer;\nfunction createCharacterToThresholdMap(customThresholds) {\n    const map = new Map();\n    for (const [str, threshold] of customThresholds) {\n        if (threshold < 0)\n            throw new RangeError('Expected all thresholds to be non-negative.');\n        const char = (0, Char_1.getAndAssertSingleCodePoint)(str);\n        map.set(char, threshold);\n    }\n    return map;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.remapCharactersTransformer = void 0;\nconst Char_1 = require(\"../../util/Char\");\nconst CharacterIterator_1 = require(\"../../util/CharacterIterator\");\nconst Transformers_1 = require(\"../Transformers\");\n/**\n * Maps certain characters to other characters, leaving other characters\n * unchanged.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied near the start of the\n * transformer chain.\n *\n * @example\n * ```typescript\n * // Transform 'a' to 'b'.\n * const transformer = remapCharactersTransformer({ 'b': 'a' });\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @example\n * ```typescript\n * // Transform '\uD83C\uDD71\uFE0F' to 'b', and use a map instead of an object as the argument.\n * const transformer = remapCharactersTransformer(new Map([['b', '\uD83C\uDD71\uFE0F']]));\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @example\n * ```typescript\n * // Transform '\uD83C\uDDF4' and '0' to 'o'.\n * const transformer = remapCharactersTransformer({ o: '\uD83C\uDDF40' });\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @param mapping - A map/object mapping certain characters to others.\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n * @see [[resolveConfusablesTransformer|  Transformer that handles confusable Unicode characters]]\n * @see [[resolveLeetSpeakTransformer | Transformer that handles leet-speak]]\n */\nfunction remapCharactersTransformer(mapping) {\n    const map = createOneToOneMap(mapping);\n    return (0, Transformers_1.createSimpleTransformer)((c) => map.get(c) ?? c);\n}\nexports.remapCharactersTransformer = remapCharactersTransformer;\nfunction createOneToOneMap(mapping) {\n    const map = new Map();\n    const iterable = mapping instanceof Map ? mapping.entries() : Object.entries(mapping);\n    for (const [original, equivalents] of iterable) {\n        const originalChar = (0, Char_1.getAndAssertSingleCodePoint)(original);\n        const iter = new CharacterIterator_1.CharacterIterator(equivalents);\n        for (const equivalent of iter)\n            map.set(equivalent, originalChar);\n    }\n    return map;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.confusables = void 0;\n/**\n * Maps confusable Unicode characters to their normalized equivalents.\n *\n * @copyright\n * The data here is taken from the\n * [confusables](https://github.com/gc/confusables) library.\n *\n * ```text\n * # The MIT License (MIT)\n *\n * Copyright \u00A9 2019 https://github.com/gc/\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \u201CSoftware\u201D), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \u201CAS IS\u201D, WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n * ```\n */\nexports.confusables = new Map([\n    [' ', ' '],\n    ['0', '\u24FF'],\n    ['1', '\u24F5\u278A\u2474\u00B9\uD835\uDFCF\uD835\uDFD9\uFF11\uD835\uDFF7\uD835\uDFE3\u2488\uD835\uDFED1\u2780\u2081\u2460\u2776\u2960'],\n    ['2', '\u24F6\u2489\u2475\u278B\u01BB\u00B2\u14BF\uD835\uDFDA\uFF12\uD835\uDFEE\uD835\uDFE4\u14BE\uD835\uDFF8\u01A7\uD835\uDFD0\u2461\u1D24\u2082\u2781\u2777\u161D\u01A8'],\n    ['3', '\u00B3\u2CCC\uA7AB\uD835\uDFD1\u2128\uD835\uDFDB\uD835\uDFEF\uD835\uDFE5\uA76A\u278C\u0417\u021C\u24F7\u04E0\u01B7\uFF13\uD835\uDFF9\u2476\u248A\u0292\u0293\u01EF\u01EE\u01BA\uD835\uDD74\u1DBE\u0437\u19A1\u2782\u2462\u2083\u1D9A\u1D23\u1D1F\u2778\u0498\u0499\u04EC\u04E1\u04ED\u04DF\u04DE'],\n    ['4', '\u278D\u04B6\u13CE\uD835\uDFDC\u04B7\u24F8\u04B8\u04B9\u04F4\u04F5\u1DA3\uFF14\u0447\u3129\u2074\u2783\u2084\u2463\u2779\u04CB\u2477\u248B'],\n    ['5', '\uD835\uDFF1\u24F9\u278E\u01BC\uD835\uDFD3\uD835\uDFFB\uD835\uDFDD\uD835\uDFE7\uFF15\u2784\u2085\u2464\u2075\u277A\u01BD\u2478\u248C'],\n    ['6', '\u2CD2\u13EE\uD835\uDFDE\uD835\uDFE8\uD835\uDFD4\u278F\u24FA\u03EC\u03ED\u2076\u0431\uFF16\u19C8\u2465\u2785\u2086\u277B\u2479\u248D'],\n    ['7', '\u24FB\uD801\uDCD2\u2790\uFF17\u2077\u2466\u2087\u277C\u2786\u247A\u248E'],\n    ['8', '\uD800\uDF1A\u2791\u24FC\uFF18\uD835\uDFE0\uD835\uDFEA\u09EA\u2078\u2088\uD835\uDFF4\u2787\u2467\u277D\uD835\uDFFE\uD835\uDFD6\u247B\u248F'],\n    ['9', '\uA76E\u2CCA\u24FD\u2792\u0A67\u09ED\u0B68\uFF19\uD835\uDFEB\uD835\uDFFF\uD835\uDFD7\u2079\u2089\u0533\u2788\u2468\u277E\u247C\u2490'],\n    ['A', '\uD83C\uDD30\u13AF\uD800\uDEA0\uD835\uDD6C\uD835\uDF1C\uD835\uDC34\uA4EE\u13AA\uD835\uDEA8\uAB7A\uD835\uDF56\uD83C\uDD50\u212B\u2200\uD83C\uDDE6\u20B3\uD83C\uDD70\uD835\uDC9C\uD835\uDE08\uD835\uDC00\uD835\uDD38\u0434\u01FA\u15C5\u24B6\uFF21\u0391\u1F8B\u15E9\u0102\u00C3\u00C5\u01CD\u0200\u0202\u0100\u023A\u0104\u028C\u039B\u03BB\u019B\u1D00\u1D2C\u0414\u0410\u120D\u00C4\u2090\u1571\u00AA\u01DE\u04D2\u0386\u1EA0\u1EA2\u1EA6\u1EA8\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1FB8\u1FB9\u1FBA\u1FBB\u1FBC\u1F88\u1F89\u1F8A\u1F8C\u1F8D\u1F8E\u1F8F\u1F08\u1F09\u1F0A\u1F0B\u1F0C\u1F0D\u1F0E\u1F0F\u1E00\u0226\u01E0\u04D0\u00C0\u00C1\u00C2\u1EA4\u1EAA\uD835\uDEE2\uD835\uDCD0\uD835\uDE70\uD835\uDE3C'],\n    ['a', '\u2202\u237A\u24D0\u0571\u01DF\u1D43\u1D8F\u249C\u0430\u0252\uFF41\u03B1\u0203\u0201\u0E04\u01CE\u10DB\u00E4\u0251\u0101\u0250\u0105\u1F84\u1E9A\u1EA1\u1EA3\u01E1\u1EA7\u1EB5\u1E01\u0227\u04D1\u04D3\u00E3\u00E5\u03AC\u1F70\u1F71\u0103\u1EA9\u1EB1\u1EB3\u1EB7\u1F80\u1F81\u1F82\u1F83\u1F85\u1F86\u1FB0\u1FB1\u1FB2\u1FB3\u1FB4\u1D90\u1FB6\u1FB7\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06\u1F07\u1F87\u1EAD\u1EAF\u00E0\u00E1\u00E2\u1EA5\u1EAB\u01FB\u2C65\uD835\uDC1A\uD835\uDC4E\uD835\uDC82\uD835\uDCB6\uD835\uDCEA\uD835\uDD1E\uD835\uDD52\uD835\uDD86\uD835\uDDBA\uD835\uDDEE\uD835\uDE22\uD835\uDE56\uD835\uDE8A\uD835\uDEC2\uD835\uDEFC\uD835\uDF36\uD835\uDF70\uD835\uDFAA\u2376'],\n    ['B', '\uD800\uDF01\uD835\uDC69\uD835\uDD6D\uD83C\uDD31\uD800\uDEA1\uD835\uDDA1\uD835\uDE3D\uA4D0\uD835\uDDD5\uD835\uDE09\uD835\uDF1D\uD800\uDE82\uD835\uDEA9\uD835\uDC01\uD835\uDEE3\uD835\uDF57\uD835\uDC35\uD835\uDE71\uD835\uDD39\u13F4\u13FC\uD835\uDF91\uA7B4\uD835\uDD05\uD83C\uDD51\u0E3F\uD835\uDCD1\u15FF\u15FE\u15FD\uD83C\uDD71\u24B7\uFF22\u0432\u03D0\u15F7\u0181\u4E43\u00DF\u10EA\u10E9\u0E56\u03B2\u026E\u0411\u0545\u0E52\u1656\u0299\u1D2E\u1D47\u130C\u1E04\u212C\u0392\u0412\u1E9E\u1E02\u1E06\u0243\u0D26\u15F9\u15F8\u1D5D\u165E\u165F\u165D\u16D2\u1657\u1658\u1D03\uD83C\uDDE7'],\n    ['b', '\u13CF\uD835\uDC1B\uD835\uDE23\uD835\uDCB7\uD835\uDD1F\uD835\uDCEB\uD835\uDD87\uD835\uDDBB\uD835\uDC4F\uD835\uDE57\uD835\uDD53\uD835\uDC83\uD835\uDDEF\uD835\uDE8B\u266D\u1473\u1488\uFF42\u159A\u1579\u157A\u24D1\u1E03\u1E05\u048D\u044A\u1E07\u0183\u0253\u0185\u15AF\u0184\u042C\u1472\u00FE\u0182\u249D\u042A\u1D80\u147F\u1480\u1482\u1481\u147E\u044C\u0180\u048C\u0462\u0463\u150E'],\n    ['C', '\u13DF\u2CA4\uD83C\uDD32\uA4DA\uD800\uDEA2\uD800\uDF02\uD83C\uDD72\uD801\uDC15\uD83C\uDD52\u263E\u010C\u00C7\u24B8\uFF23\u2183\u0187\u1455\u3108\u00A2\u096E\u21BB\u0108\u03FE\u0547\u023B\u1645\u1D9C\u249E\u0106\u0480\u010A\u00A9\u091F\u0186\u2102\u212D\u03F9\u0421\u531A\u1E08\u04AA\u0297\u1456\u1461\u1462\u1463\u1464\u1465\u216D\uD835\uDC02\uD835\uDC36\uD835\uDC6A\uD835\uDC9E\uD835\uDCD2\uD835\uDD6E\uD835\uDDA2\uD835\uDDD6\uD835\uDE0A\uD835\uDE3E\u150D'],\n    ['c', '\u2CA5\uD801\uDC3D\uABAF\u0109\uFF43\u24D2\u0107\u010D\u010B\u00E7\u0481\u0188\u1E09\u023C\u2184\u0441\u122D\u1D04\u03F2\u04AB\uA49D\u03C2\u027D\u03DB\uD835\uDE72\u1466\u19DA\uD835\uDC1C\uD835\uDC50\uD835\uDC84\uD835\uDCB8\uD835\uDCEC\uD835\uDD20\uD835\uDD54\uD835\uDD88\uD835\uDDBC\uD835\uDDF0\uD835\uDE24\uD835\uDE58\uD835\uDE8C\u20B5\uD83C\uDDE8\u1974\u14BC\u217D'],\n    ['D', '\u13A0\uD83C\uDD33\uD835\uDD21\uD835\uDD89\uD835\uDD3B\uD835\uDDD7\uD835\uDE0B\uD835\uDE73\uD835\uDC37\uD835\uDCD3\uD835\uDC03\uD835\uDC6B\uD835\uDD6F\uD835\uDDA3\uD835\uDD07\uD835\uDE3F\uAB70\u2145\uD835\uDC9F\uA4D3\uD83C\uDD73\uD83C\uDD53\u24B9\uFF24\u0189\u15EA\u018A\u00D0\u053A\u1D05\u1D30\u2181\u1E0A\u0110\u00DE\u216E\u15DE\u146F\u010E\u1E0C\u1E10\u1E12\u1E0E\u15EB\u15EC\u15DF\u15E0\u1D9B\u1D06\uD83C\uDDE9'],\n    ['d', '\u13E7\uA4D2\uD835\uDCED\u1D6D\u20AB\u0503\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\u1D48\u249F\u0501\u217E\u1D81\u0500\u147A\u147B\u147C\u147D\u1484\u1470\u1471\u1D91\uD835\uDD55\uD835\uDDBD\uD835\uDC51\uD835\uDE25\uD835\uDC85\uD835\uDE59\uD835\uDC1D\uD835\uDDF1\uD835\uDE8D\u2146\uD835\uDCB9\u02A0\u056A'],\n    ['E', '\uAB7C\uD83C\uDD34\uD835\uDE40\uD835\uDD3C\uD800\uDE86\uD835\uDEAC\uA4F0\uD835\uDF5A\uD835\uDF94\uD835\uDCD4\uD835\uDC6C\uD835\uDDD8\uD83C\uDD74\uD83C\uDD54\u24BA\u0388\uFF25\u018E\u1F1D\u156E\u0190\u30E2\u0404\u1D07\u1D31\u1D49\u00C9\u4E47\u0401\u0246\uA085\u20AC\u00C8\u2130\u0395\u0415\u2D39\u13AC\u0112\u0114\u0116\u0118\u011A\u00CA\u00CB\u0510\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u1E14\u1E16\u1EBA\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u1E18\u1E1A\u1F18\u1F19\u1F1A\u1F1B\u1F1C\u1FC8\u1FC9\u04D6\u1F72\u1F73\u0400\u03F5\uD83C\uDDEA'],\n    ['e', '\uD835\uDC52\uD835\uDCEE\uD835\uDD56\uD835\uDD8A\uD835\uDE26\uD835\uDDF2\uD835\uDE8E\uD835\uDE5A\uD835\uDC86\uD835\uDD22\uD835\uDDBE\uD835\uDC1E\u04BE\u04BF\u24D4\uFF45\u24A0\u00E8\u19C9\u00E9\u1D92\u00EA\u0258\u1F14\u1EC1\u1EBF\u1EC5\u0AEF\u01DD\u0454\u03B5\u0113\u04BD\u025B\u1EC3\u1EBD\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u0247\u2091\u0119\u1E1D\u1E19\u1E1B\u212E\u0435\u0511\u0450\u04D7\u1971\u0451\u1F10\u1F11\u1F12\u1F13\u1F15\u212F'],\n    ['F', '\uD83C\uDD35\uD800\uDE87\uD835\uDD09\uD835\uDE0D\uD800\uDEA5\uA4DD\uA798\uD83C\uDD75\uD83C\uDD55\uD835\uDCD5\u24BB\uFF26\u0493\u0492\u15B4\u0191\u0532\u03DD\u127B\u1E1E\u2131\u03DC\u20A3\uD83C\uDDEB\u2132'],\n    ['f', '\uD835\uDC1F\uD835\uDD8B\u24D5\uFF46\u0192\u1E1F\u0283\u0562\u1DA0\u24A1\u017F\uA2B0\u0284\u2231\u1D82\uD835\uDE27'],\n    ['G', '\uA4D6\u13F3\uD83C\uDD36\u13C0\u13FB\uD835\uDD3E\uD835\uDCD6\uD835\uDC6E\uD835\uDD72\uAB90\uD835\uDCA2\uD835\uDE42\uD835\uDDA6\uD835\uDE76\uD835\uDD0A\uD835\uDC3A\uD835\uDC06\uD83C\uDD76\uD83C\uDD56\u24BC\uFF27\u0262\u0193\u029B\u0122\u161C\u1D33\u01F4\u0120\u050C\u011C\u1E20\u011E\u01E6\u01E4\u050D\u20B2\uD83C\uDDEC\u2141'],\n    ['g', '\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u0581\u0AED\u01E5\u0260\uFEED\uFEEE\u1D4D\u24A2\u210A\u0261\u19C1\uD835\uDC20\uD835\uDC54\uD835\uDC88\uD835\uDCF0\uD835\uDD24\uD835\uDD58\uD835\uDD8C\uD835\uDDC0\uD835\uDDF4\uD835\uDE28\uD835\uDE5C\uD835\uDE90'],\n    ['H', '\uD83C\uDD37\uD835\uDF22\uA4E7\uD835\uDE0F\uD835\uDC3B\uD835\uDF5C\uD835\uDDA7\uD800\uDECF\uD835\uDDDB\uAB8B\u210D\u13BB\u210C\u2C8E\uD835\uDC6F\uD835\uDF96\uD83C\uDD77\uD83C\uDD57\u12DE\u01F6\u050B\u24BD\uFF28\u0124\u16BA\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u04A2\u04A3\u04A4\u1FCA\u1FCB\u1FCC\u1F28\u1F29\u1F2A\u1F2B\u1F2D\u1F2E\u1F2F\u1F98\u1F99\u1F9A\u1F9B\u1F9C\u1F9D\u1F9E\u1F9F\u04C9\u04C8\u04A5\u0389\u043D\u5344\u2653\uD835\uDCD7\u210B\u041D\uD835\uDC07\uD835\uDE43\uD835\uDE77\u029C\uD835\uDEE8\u0397\uD835\uDEAE\u157C\u04C7\u1D34\u1D78\uD83C\uDDED'],\n    ['h', '\u04BA\u24A3\u0452\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u0570\u04BB\u12A8\u12A9\u12AA\u12AB\u0266\u210E\uD835\uDC21\uD835\uDC89\uD835\uDCBD\uD835\uDCF1\uD835\uDD25\uD835\uDD59\uD835\uDD8D\uD835\uDDC1\uD835\uDDF5\uD835\uDE29\uD835\uDE5D\uD835\uDE91\u056B\u02B0\u144B\u15C1\u0267\u3093\u0265'],\n    ['I', '\uD83C\uDD38\u0407\uA024\u13C6\uD83C\uDD78\uD83C\uDD58\u0625\uFE87\u0673\u0623\uFE83\u0672\u0675\u24BE\uFF29\u17F8\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197\u30A7\u30A8\u1FD8\u1FD9\u1FDA\u1FDB\u1F38\u1F39\u1F3A\u1F3B\u1F3C\u1F3D\u1F3E\u2160\u03AA\u038A\u026A\u1DA6\u144A\u1963\uD835\uDEEA\uD835\uDC08\uD835\uDE44\uD835\uDE78\uD835\uDCF5\uD835\uDE61\uD835\uDC3C\u1D35\uD835\uDEB0\uD835\uDC70\uD83C\uDDEE'],\n    ['i', '\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u1E2D\u1FD0\u1FD1\u1FD2\u1FD3\u1FD6\u1FD7\u1F30\u1F31\u1F32\u2170\u217C\u2223\u2D4F\uFFE8\u05C0\u0627\u0661\u06F1\u07CA\u16C1\u1F33\u1F34\u1F35\u0268\u0456\u1F76\u1F77\u1D96\uD835\uDD26\uD835\uDE92\uD835\uDF78\uD835\uDDC2\uD835\uDC22\uD835\uDD5A\uD835\uDD8E\uD835\uDDF6\uD835\uDE2A\uD835\uDE5E\u03AF\u2071\u1D62\uD835\uDCF2\u24A4'],\n    ['J', '\uD83C\uDD39\uD83C\uDD79\uD83C\uDD59\u24BF\uFF2A\u0408\u029D\u148D\u05E0\uFF8C\u0134\u0286\u0E27\u0644\u0575\u0296\u1D0A\u1D36\uFEDD\u130B\u0248\u2C7C\u0542\u0E45\u10B1\u012F\u13AB\u0237\u4E3F\u2110\u2111\u1498\u1499\u149A\u149B\u14B4\u14B5\u148E\u148F\uD83C\uDDEF'],\n    ['j', '\u24D9\uFF4A\u03F3\u02B2\u24A5\u0249\u0135\u01F0\u0458\u06B6\u1DA8\uD835\uDCBF\uD835\uDE2B\uD835\uDDF7\uD835\uDC57\uD835\uDE5F\uD835\uDD27\uD835\uDC8B\uD835\uDDC3\uD835\uDCF3\uD835\uDD5B\uD835\uDE93\uD835\uDD8F\uD835\uDC23'],\n    ['K', '\uD835\uDDDE\uD83C\uDD3A\uD835\uDF25\uD835\uDE12\uA4D7\uD835\uDE46\uD835\uDD42\u2C94\uD835\uDD0E\uD835\uDEEB\u13E6\uD835\uDF99\uD835\uDCA6\uD83C\uDD7A\uD83C\uDD5A\u20AD\u24C0\uFF2B\u0138\u1E30\u045C\u0198\u043A\u04A0\u03BA\u049B\u049F\u04C4\u029E\u049A\u041A\u04A1\u1D0B\u1D37\u1D4F\u24A6\u16D5\u040C\u1315\u1E32\u039A\u212A\u049C\u049D\u049E\u0136\u1E34\u01E8\u2C69\u03D7\u04C3\uD83C\uDDF0'],\n    ['k', '\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\u1D84\uD835\uDC24\uD835\uDE2C\uD835\uDDC4\uD835\uDD5C\uD835\uDF05\uD835\uDF18\uD835\uDF3F\uD835\uDF52\uD835\uDF79\uD835\uDF8C\uD835\uDFB3\uD835\uDE60\uD835\uDE94\uD835\uDC58\uD835\uDC8C\u03F0\uD835\uDECB\uD835\uDEDE\uD835\uDFC6\uD835\uDDF8\uD835\uDCF4\uD835\uDCC0'],\n    ['L', '\uD83C\uDD3B\uD801\uDC1B\u2CD0\uD835\uDC73\uD835\uDE7B\uD801\uDC43\uD835\uDCDB\u2CD1\uABAE\u13DE\uA4E1\uD83C\uDD7B\uD83C\uDD5B\uFE88\u2514\u24C1\u0582\uFF2C\u013F\u14AA\u4E5A\u0546\u029F\uA4F6\u03B9\u053C\u1D38\u02E1\u0139\u1228\u1E36\u2097\u0393\u056C\u013B\u1102\u216C\u2112\u2C62\u1967\u1968\u14BB\u14B6\u14B7\u1DAB\uFE8E\u14BA\u14B9\u14B8\u14AB\u23B3\u3125\u0141\u2C60\uFE84\u023D\uD83C\uDDF1'],\n    ['l', '\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u04C0\u2113\u1E3D\u1E3B\u0142\uFF9A\u026D\u019A\u026B\u2C61|\u0196\u24A7\u0285\u01C0\u05D5\u05DF\u0399\u0406\uFF5C\u1DA9\u04CF\uD835\uDCD8\uD835\uDD40\uD835\uDDA8\uD835\uDDDC\uD835\uDE10\uD835\uDC25\uD835\uDC59\uD835\uDC8D\uD835\uDCC1\uD835\uDD29\uD835\uDD5D\uD835\uDD91\uD835\uDDC5\uD835\uDDF9\uD835\uDE2D\uD835\uDE95\uD835\uDF24\uD835\uDF5E\u0131\uD835\uDEA4\u0269\u1FBE\uD835\uDECA\uD835\uDF04\uD835\uDF3E\uD835\uDFB2'],\n    ['M', '\uD83C\uDD3C\uD800\uDF11\uD800\uDEB0\uA4DF\u2C98\u13B7\uD83C\uDD7C\uD83C\uDD5C\u24C2\uFF2D\u043C\u1E42\u0D71\u15F0\u5DDE\u163B\u10DD\u0E53\u264F\u028D\u164F\u1D0D\u1D39\u1D50\u24A8\u1E3E\u041C\u1E40\u0BF1\u216F\u2133\u039C\u03FA\u16D6\u04CD\u04CE\uD835\uDC0C\uD835\uDC40\uD835\uDC74\uD835\uDCDC\uD835\uDD10\uD835\uDD44\uD835\uDD78\uD835\uDDAC\uD835\uDDE0\uD835\uDE14\uD835\uDE48\uD835\uDE7C\uD835\uDEB3\uD835\uDEED\uD835\uDF27\uD835\uDF61\uD835\uDF9B\uD83C\uDDF2'],\n    ['m', '\u20A5\u1D6F\uD835\uDD92\uD835\uDC26\uD835\uDDC6\uD835\uDD2A\uD835\uDD5E\uD835\uDCC2\u24DC\uFF4D\u0D28\u1662\u0D69\u1E3F\u1E41\u217F\u03FB\u1E43\u1320\u0271\u17F3\u1D86\uD835\uDE62\uD835\uDCF6\uD835\uDE96\uD835\uDC5A\uD835\uDDFA\u19D5\u19D7'],\n    ['N', '\uD83C\uDD3D\u2115\uA4E0\uD835\uDEEE\uD835\uDF62\uD835\uDE7D\uD835\uDEB4\uD835\uDC75\uD835\uDC41\u2C9A\uD835\uDC0D\uD835\uDCA9\uD835\uDF9C\uD835\uDDE1\uD835\uDE15\uD835\uDF28\uD835\uDCDD\uD835\uDDAD\uD83C\uDD7D\u20A6\uD83C\uDD5D\u0419\u040D\u24C3\u048B\u17F7\uFF2E\u1D0E\u0274\u019D\u144E\u51E0\u0438\u0548\u057C\u0418\u05D4\u041B\u03C0\u1D3A\u1DB0\u0143\u5200\u12AD\u1E44\u207F\u00D1\u041F\u039D\u1D28\u0578\u03D6\u01F8\u0147\u1E46\u0145\u1E4A\u1E48\u0E17\u014A\u04E2\u04E3\u04E4\u04E5\u045B\u045D\u0439\u1962\u048A\u1D3B\uD83C\uDDF3'],\n    ['n', '\u05D7\uD835\uDC8F\uD835\uDCF7\uD835\uDE63\uD835\uDC5B\uD835\uDD93\uD835\uDD2B\uD835\uDDC7\uD835\uDE97\uD835\uDDFB\u1952\u24DD\u03AE\uFF4E\u01F9\u1D12\u0144\u00F1\u1F97\u03B7\u1E45\u0148\u1E47\u0272\u0146\u1E4B\u1E49\u0572\u0E96\u054C\u019E\u014B\u24A9\u0E20\u0E01\u0273\u043F\u0149\u043B\u0509\u0220\u1F20\u1F21\u1FC3\u0564\u1F90\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1FC4\u1FC6\u1FC7\u1FC2\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F74\u1F75\u1260\u1261\u1262\u1263\u1264\u1265\u1266\u0235\uD835\uDEC8\uD835\uDF02\uD835\uDF3C\uD835\uDF76\uD835\uDFB0\uD835\uDD5F\uD835\uDE2F\uD835\uDC27\uD835\uDCC3\u1D87\u1D70\u1965\u2229'],\n    [\n        'O',\n        '\uA132\uD83C\uDD3E\uD800\uDE92\uD835\uDFEC\uA4F3\u2C9E\uD801\uDC04\uD800\uDEAB\uD801\uDCC2\uD835\uDF9E\uD83C\uDD5E\u2365\u25EF\u2D41\u2296\uFF10\u229D\uD835\uDF64\u0472\u03F4\uD835\uDEB6\uD835\uDF2A\u047A\u04E6\u04E8\u04EA\u038C\u0298\uD835\uDC0E\u01D1\u00D2\u014E\u00D3\u00D4\u00D5\u020C\u020E\u31FF\u274D\u24C4\uFF2F\u1F4B\u30ED\u2764\u0AE6\u2295\u00D8\u0424\u053E\u0398\u01A0\u1D3C\u1D52\u24AA\u0150\u00D6\u2092\u00A4\u25CA\u03A6\u3007\u039F\u041E\u0555\u0B20\u0D20\u0BE6\u05E1\u1ED2\u1ED0\u1ED6\u1ED4\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u022E\u0230\u022A\u1ECE\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u01FE\u019F\u2D54\u07C0\u17F0\u235C\u2394\u2395\u29B0\u29B1\u29B2\u29B3\u29B4\u29B5\u29B6\u29B7\u29B8\u29B9\u29BA\u29BB\u29BC\u29BD\u29BE\u29BF\u29C0\u29C1\u29C2\u29C3\u1F48\u1F49\u1F4A\u1F4C\u1F4D',\n    ],\n    [\n        'o',\n        '\uD835\uDE98\uD835\uDED0\uD835\uDDC8\uD835\uDFBC\u101D\u2C9F\uD835\uDE64\u1040\uD801\uDC2C\uD835\uDD2C\uD801\uDCEA\uD835\uDCF8\uD83C\uDDF4\u2364\u25CB\u03D9\uD83C\uDD7E\uD835\uDCAA\uD835\uDDAE\uD835\uDFE2\uD835\uDFF6\uD835\uDE7E\uD835\uDE30\uD835\uDDFC\uD835\uDD60\uD835\uDF0A\uD835\uDC28\uD835\uDF7E\uD835\uDFB8\u1424\u24DE\u0473\u19D0\u1972\u00F0\uFF4F\u0C20\u199E\u0553\u00F2\u04E9\u04E7\u00F3\u00BA\u014D\u00F4\u01D2\u020F\u014F\u1ED3\u1ED1\u020D\u1ED7\u1ED5\u00F5\u03C3\u1E4D\u022D\u1E4F\u1F44\u1E51\u1E53\u022F\u022B\u0E4F\u1D0F\u0151\u00F6\u047B\u043E\u12D0\u01ED\u0231\u09E6\u0B66\u0665\u0C66\u0CE6\u0D66\u0E50\u0ED0\u03BF\u0585\u1D11\u0966\u0A66\u1ECF\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u00F8\u01FF\u0275\u056E\u1F40\u1F41\u03CC\u1F78\u1F79\u1F42\u1F43\u1F45',\n    ],\n    ['P', '\uD83C\uDD3F\uA4D1\uD835\uDEB8\uD835\uDE7F\uD835\uDFA0\uD835\uDE4B\uABB2\u2CA2\uD835\uDCAB\uD835\uDF66\uD835\uDC43\uD835\uDC77\uD835\uDDE3\uD835\uDC0F\uD800\uDE95\uD835\uDF2C\uD835\uDE17\uD835\uDCDF\uD835\uDDAF\uD835\uDEF2\u13E2\uD83C\uDD5F\u048E\uD83C\uDD7F\u24C5\uFF30\u01A4\u146D\u5C38\u1E56\u0580\u03C6\u0584\u1D18\u1D3E\u1D56\u24AB\u1E54\uFF71\u05E7\u0420\u12E8\u1D29\u2C63\u2119\u03A1\u1FEC\u1478\u1476\u1477\u1479\u146C\u146E\uD83C\uDDF5\u20B1'],\n    ['p', '\u048F\u2117\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\u1FE5\u03C1\u0440\u01BF\u01F7\u1FE4\u2374\uD835\uDCF9\uD835\uDCC5\uD835\uDC29\uD835\uDC5D\uD835\uDC91\uD835\uDD2D\uD835\uDD61\uD835\uDD95\uD835\uDDC9\uD835\uDDFD\uD835\uDE31\uD835\uDE65\uD835\uDE99\uD835\uDED2\uD835\uDF46\uD835\uDFBA\uD835\uDF0C\uD835\uDF80'],\n    ['Q', '\uD83C\uDD40\uD83C\uDD80\uD83C\uDD60\u24C6\uFF31\u211A\u2D55\u051A\uD835\uDC10\uD835\uDC44\uD835\uDC78\uD835\uDCAC\uD835\uDCE0\uD835\uDE80\uD835\uDE18\uD835\uDE4C\uD835\uDDB0\uD835\uDD7C\uD835\uDD14\uD835\uDDE4\uD83C\uDDF6'],\n    ['q', '\u24E0\uFF51\u0563\u24AC\u06F9\u0566\u146B\u024B\u024A\u051B\uD835\uDDCA\uD835\uDC5E\uD835\uDE32\uD835\uDD62\uD835\uDE9A\uD835\uDC92\uD835\uDD96\uD835\uDC2A\uD835\uDD2E\uD835\uDCFA\uD835\uDE66'],\n    ['R', '\u211E\u211F\uAB71\u13D2\uD801\uDCB4\uABA2\u13A1\uA4E3\uD83C\uDD81\uD83C\uDD61\u24C7\uFF32\u1D19\u0212\u0280\u1587\u044F\u5C3A\u0154\u042F\u0AB0\u01A6\u1D3F\u12EA\u1E5A\u024C\u0281\u211B\u211C\u211D\u1E58\u0158\u0210\u1E5C\u0156\u1E5E\u2C64\uD835\uDC11\uD835\uDC45\uD835\uDC79\uD835\uDCE1\uD835\uDD7D\uD835\uDDB1\uD835\uDDE5\uD835\uDE19\uD835\uDE4D\uD835\uDE81\u16B1\uD83C\uDDF7\u1D1A'],\n    ['r', '\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u0433\u0550\u027E\u196C\u1E5F\u024D\u02B3\u24AD\u027C\u0453\u1D26\u1D89\uD835\uDC2B\uD835\uDC5F\uD835\uDC93\uD835\uDCC7\uD835\uDCFB\uD835\uDD2F\uD835\uDD63\uD835\uDD97\uD835\uDDCB\uD835\uDDFF\uD835\uDE33\uD835\uDE67\u1D72\u0491\u1D63'],\n    ['S', '\uD83C\uDD42\uA1D9\uD835\uDCE2\uD835\uDDE6\u13DA\uD835\uDCAE\u13D5\uD835\uDE82\uD835\uDC12\uA4E2\uD835\uDDB2\uD835\uDD16\uD835\uDE4E\uD800\uDE96\uD835\uDD7E\uD801\uDC20\uD835\uDE1A\uD835\uDD4A\uD835\uDC46\uD835\uDC7A\uD83C\uDD82\uD83C\uDD62\u24C8\uFF33\u1E68\u015E\u0586\u054F\u0218\u02E2\u24AE\u0405\u1E60\u0160\u015A\u1E64\u015C\u1E66\u1E62\u0D1F\u1515\u1516\u1522\u1521\u1523\u1524'],\n    ['s', '\u24E2\uA731\uD801\uDC48\uABAA\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u0282\u1E63\u1E69\u0455\u015F\u0219\u023F\u1D8A\u0C15\uD835\uDC2C\uD835\uDC60\uD835\uDC94\uD835\uDCC8\uD835\uDCFC\uD835\uDD30\uD835\uDD64\uD835\uDD98\uD835\uDDCC\uD835\uDE00\uD835\uDE34\uD835\uDE68\uD835\uDE9C\u078E\uD83C\uDDF8'],\n    ['T', '\uD83C\uDD43\uD83C\uDD83\uD800\uDF15\uD835\uDEBB\uD835\uDEF5\uD835\uDD4B\uD835\uDD7F\uD835\uDC7B\uD800\uDEB1\uD800\uDE97\uD835\uDDB3\uD835\uDE4F\uD83D\uDF68\uD835\uDF69\uD835\uDFA3\uD835\uDE83\uD835\uDE1B\uD835\uDC47\uA4D4\u27D9\uD835\uDC13\u2CA6\uD835\uDDE7\u22A4\uD835\uDD17\u13A2\uAB72\uD835\uDCAF\uD83C\uDD63\u23C7\u23C9\u24C9\uFF34\u0442\u04AC\u04AD\u01AC\u30A4\u0166\u0535\u03C4\u1D1B\u1D40\uFF72\u1355\u03EE\u0164\u22A5\u01AE\u03A4\u0422\u4E0B\u1E6A\u1E6C\u021A\u0162\u1E70\u1E6E\u4E05\u4E01\u142A\uD835\uDED5\uD835\uDF0F\uD835\uDF49\uD835\uDF83\uD835\uDFBD\uD835\uDCE3\u3112\uD83C\uDDF9\u1325'],\n    ['t', '\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0236\u0A6E\u0567\u0287\u2020\u0163\u1E71\u1E6F\u01AD\u0167\u1D57\u24AF\u0288\u0565\u01AB\uD835\uDC2D\uD835\uDC61\uD835\uDC95\uD835\uDCC9\uD835\uDCFD\uD835\uDD31\uD835\uDD65\uD835\uDD99\uD835\uDDCD\uD835\uDE01\uD835\uDE35\uD835\uDE69\uD835\uDE9D\u30CA'],\n    ['U', '\uD83C\uDD44\uA4F4\uD801\uDCCE\uA4A4\uD83C\uDD84\uD83C\uDD64\u0168\u016C\u016E\u1457\u1458\u01D3\u01D5\u01D7\u01D9\u24CA\uFF35\u0216\u144C\u51F5\u01B1\u0574\u0531\uA4F5\u0426\u016A\u0544\u01B2\u1640\u1D41\u1D58\u24B0\u0170\u0AAA\u00DC\u054D\u00D9\u00DA\u00DB\u1E78\u1E7A\u01DB\u1EE6\u0214\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244\u1969\u1467\u222A\u162E\u22C3\uD835\uDC14\uD835\uDC48\uD835\uDC7C\uD835\uDCB0\uD835\uDCE4\uD835\uDD18\uD835\uDD4C\uD835\uDD80\uD835\uDDB4\uD835\uDDE8\uD835\uDE1C\uD835\uDE50\uD835\uDE84\uD83C\uDDFA'],\n    ['u', '\u1F7A\u1F7B\u24E4\uFF55\u00F9\u0169\u016B\u1EEB\u1E77\u1E79\u016D\u01D6\u1EEF\u1959\u01DA\u01DC\u1F57\u03C5\u03B0\u0E19\u057D\u028A\u01D8\u01D4\u00FA\u016F\u1D1C\u0171\u0173\u0E22\u00FB\u1E7B\u0446\u1201\u00FC\u1D7E\u1D64\u00B5\u028B\u1EE7\u0215\u0217\u01B0\u1EE9\u1EED\u1EF1\u1EE5\u1E73\u1E75\u0289\u1FE0\u1FE1\u1FE2\u1FE3\u1FE6\u1FE7\u1F50\u1F51\u03CB\u03CD\u1F52\u1F53\u1F54\u1F55\u1F56\u1954\uD835\uDC2E\uD835\uDC62\uD835\uDC96\uD835\uDCCA\uD835\uDCFE\uD835\uDD32\uD835\uDD66\uD835\uDD9A\uD835\uDDCE\u1D99'],\n    ['V', '\uD83C\uDD45\uA4E6\uD835\uDC7D\uD835\uDDB5\uD835\uDE1D\u13D9\uD835\uDE85\uD835\uDE51\uD835\uDC15\uD83C\uDD85\uD83C\uDD65\u24CB\uFF36\u142F\u0474\u1D5B\u24B1\u06F7\u1E7E\u2174\u2164\u1E7C\u0667\u2D38\u0476\u143A\u143B\uD83C\uDDFB\uD835\uDCE5'],\n    ['v', '\u1200\u24E5\uFF56\uD835\uDF10\uD835\uDF4A\u1E7D\u1E7F\u0C6E\u0E07\u0475\u05E2\u1D20\u03BD\u05D8\u1D65\u0477\u17F4\u1601\uD835\uDE6B\uD835\uDE9F\uD835\uDECE\uD835\uDF08\uD835\uDF42\uD835\uDF7C\uD835\uDFB6\uD835\uDE37\uD835\uDE03\uD835\uDCFF'],\n    ['W', '\uD83C\uDD46\u13D4\u13B3\uD835\uDC7E\uA4EA\uD835\uDCB2\uD835\uDE1E\uD83C\uDD86\u24CC\uD83C\uDD66\uFF57\uFF37\u1E82\u1FA7\u15EF\u1955\u5C71\u0460\u0E9F\u0C1A\u0561\u0429\u0428\u03CE\u0449\u0E2C\u0448\u164E\u1D42\u02B7\u24B2\u0E1D\u1220\u1E84\u051C\u1E80\u0174\u1E86\u1E88\u0D27\u163A\u047F\u1661\u019C\u20A9\uD83C\uDDFC'],\n    ['w', '\u1E81\uAB83\u1E83\u24E6\u2375\u0175\u1E87\u1E85\u1E98\u1E89\u2C73\u1F7C\u1F60\u1F61\u1F62\u1F63\u03C9\u1F64\u1F65\u1F66\u1F67\u1FF2\u1FF3\u1FF4\u1FF6\u1FF7\u2C72\u0461\u051D\u1D21\u1F7D\u1FA0\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u026F\uD835\uDF55\uD835\uDFC9\uD835\uDF8F'],\n    ['X', '\uD83D\uDFA8\uD83D\uDFA9\uD83D\uDFAA\uD83C\uDD47\uD83D\uDFAB\uD83D\uDFAC\uD800\uDF17\u2CAC\uA4EB\uD835\uDD83\uD835\uDFA6\uD835\uDE1F\uD800\uDE90\uD835\uDEBE\uD835\uDF6C\uD835\uDF32\uA7B3\uD800\uDF22\uD835\uDDB7\uD835\uDC4B\uD835\uDD4F\uD835\uDD1B\uD800\uDEB4\uD835\uDDEB\uD83C\uDD87\uD83C\uDD67\u274C\u24CD\uD835\uDCE7\uFF38\u1E8A\u166D\u03C7\u3128\uD835\uDCB3\u04FE\u10EF\u04FC\u04B3\u0416\u03A7\u04B2\u1D61\u02E3\u24B3\u05D0\u1238\u1E8C\uA2BC\u2169\u0425\u2573\u166E\u1541\u157D\u2179\u16B7\u2D5D\uD835\uDE53\uD835\uDE87\u4E42\uD835\uDC17\uD83C\uDDFD'],\n    ['x', '\u24E7\uFF58\u0445\u1E8B\u00D7\u2093\u292B\u292C\u2A2F\u1E8D\u1D8D\uD835\uDE6D\u04FD\uD835\uDE39\uD835\uDC31\uD835\uDEA1\u2A30\uFF92\uD835\uDD01'],\n    ['Y', '\u2CA8\uD835\uDE88\uD835\uDC4C\uD835\uDDEC\uD835\uDC18\uA4EC\uD835\uDC80\uD835\uDF30\uD800\uDEB2\uD83C\uDD88\uD83C\uDD68\u24CE\uFF39\u1F5B\u01B3\u311A\u028F\u2144\u03D4\uFFE5\u00A5\u054E\u03D3\u03B3\u05E5\u04F2\u0427\u040E\u1203\u0178\u024E\u03E4\u03A5\u03D2\u04AE\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u1EF6\u1EF4\u1FE8\u1FE9\u1FEA\u1FEB\u1F59\u1F5D\u1F5F\u03AB\u038E\u04EE\u04F0\u04B0\u04B1\uD835\uDD50\uD83C\uDDFE'],\n    ['y', '\uD83C\uDD48\u13BD\u13A9\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u0443\u10E7\u1E99\u1EF5\u01B4\u024F\u1D5E\u0263\u02B8\u1D8C\u04AF\u24B4\u04F3\u04F1\u04EF\u045E\u0423\u028E'],\n    ['Z', '\uD83C\uDD49\uA4DC\uD835\uDDED\uD835\uDC19\u2621\u13C3\uD835\uDE21\uD83C\uDD89\uD83C\uDD69\u24CF\uFF3A\u1E94\u01B5\u4E59\u1E90\u0224\u1DBB\u24B5\u0179\u2124\u0396\u017B\u017D\u1E92\u2C6B\uD83C\uDDFF'],\n    ['z', '\uAB93\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u1D22\u130A\u0290\u2C6C\u1D8E\u0291\u1646'],\n]);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveConfusablesTransformer = void 0;\nconst remap_characters_1 = require(\"../remap-characters\");\nconst confusables_1 = require(\"./confusables\");\n/**\n * Creates a transformer that maps confusable Unicode characters to their\n * normalized equivalent. For example, `\u24F5`, `\u278A`, and `\u2474` become `1` when using\n * this transformer.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied near the start of the\n * transformer chain.\n *\n * @example\n * ```typescript\n * const transformer = resolveConfusablesTransformer();\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction resolveConfusablesTransformer() {\n    return (0, remap_characters_1.remapCharactersTransformer)(confusables_1.confusables);\n}\nexports.resolveConfusablesTransformer = resolveConfusablesTransformer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dictionary = void 0;\nexports.dictionary = new Map([\n    ['a', '@4'],\n    ['c', '('],\n    ['e', '3'],\n    ['i', '1|!'],\n    ['g', '6'],\n    ['o', '0'],\n    ['s', '$5'],\n    ['t', '7'],\n    ['z', '2'],\n]);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveLeetSpeakTransformer = void 0;\nconst remap_characters_1 = require(\"../remap-characters\");\nconst dictionary_1 = require(\"./dictionary\");\n/**\n * Creates a transformer that maps leet-speak characters to their normalized\n * equivalent. For example, `$` becomes `s` when using this transformer.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied near the start of the\n * transformer chain, but after similar transformers that map characters to\n * other characters, such as the [[resolveConfusablesTransformer | transformer\n * that resolves confusable Unicode characters]].\n *\n * @example\n * ```typescript\n * const transformer = resolveLeetSpeakTransformer();\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction resolveLeetSpeakTransformer() {\n    return (0, remap_characters_1.remapCharactersTransformer)(dictionary_1.dictionary);\n}\nexports.resolveLeetSpeakTransformer = resolveLeetSpeakTransformer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toAsciiLowerCaseTransformer = void 0;\nconst Char_1 = require(\"../../util/Char\");\nconst Transformers_1 = require(\"../Transformers\");\n/**\n * Creates a transformer that changes all ASCII alphabet characters to\n * lower-case, leaving other characters unchanged.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied near the end of the\n * transformer chain. Using it before other transformers may have the effect of\n * making its changes useless as transformers applied after produce characters\n * of varying cases.\n *\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction toAsciiLowerCaseTransformer() {\n    return (0, Transformers_1.createSimpleTransformer)((c) => ((0, Char_1.isUpperCase)(c) ? (0, Char_1.invertCaseOfAlphabeticChar)(c) : c));\n}\nexports.toAsciiLowerCaseTransformer = toAsciiLowerCaseTransformer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.englishDataset = exports.englishRecommendedTransformers = exports.englishRecommendedWhitelistMatcherTransformers = exports.englishRecommendedBlacklistMatcherTransformers = void 0;\nconst DataSet_1 = require(\"../dataset/DataSet\");\nconst Pattern_1 = require(\"../pattern/Pattern\");\nconst collapse_duplicates_1 = require(\"../transformer/collapse-duplicates\");\nconst resolve_confusables_1 = require(\"../transformer/resolve-confusables\");\nconst resolve_leetspeak_1 = require(\"../transformer/resolve-leetspeak\");\nconst to_ascii_lowercase_1 = require(\"../transformer/to-ascii-lowercase\");\n/**\n * A set of transformers to be used when matching blacklisted patterns with the\n * [[englishDataset | english word dataset]].\n */\nexports.englishRecommendedBlacklistMatcherTransformers = [\n    (0, resolve_confusables_1.resolveConfusablesTransformer)(),\n    (0, resolve_leetspeak_1.resolveLeetSpeakTransformer)(),\n    (0, to_ascii_lowercase_1.toAsciiLowerCaseTransformer)(),\n    // See #23 and #46.\n    // skipNonAlphabeticTransformer(),\n    (0, collapse_duplicates_1.collapseDuplicatesTransformer)({\n        defaultThreshold: 1,\n        customThresholds: new Map([\n            ['b', 2],\n            ['e', 2],\n            ['o', 2],\n            ['l', 2],\n            ['s', 2],\n            ['g', 2], // ni_gg_er\n        ]),\n    }),\n];\n/**\n * A set of transformers to be used when matching whitelisted terms with the\n * [[englishDataset | english word dataset]].\n */\nexports.englishRecommendedWhitelistMatcherTransformers = [\n    (0, to_ascii_lowercase_1.toAsciiLowerCaseTransformer)(),\n    (0, collapse_duplicates_1.collapseDuplicatesTransformer)({\n        defaultThreshold: Number.POSITIVE_INFINITY,\n        customThresholds: new Map([[' ', 1]]), // collapse spaces\n    }),\n];\n/**\n * Recommended transformers to be used with the [[englishDataset | english word\n * dataset]] and the [[RegExpMatcher]].\n */\nexports.englishRecommendedTransformers = {\n    blacklistMatcherTransformers: exports.englishRecommendedBlacklistMatcherTransformers,\n    whitelistMatcherTransformers: exports.englishRecommendedWhitelistMatcherTransformers,\n};\n/**\n * A dataset of profane English words.\n *\n * @example\n * ```typescript\n * const matcher = new RegExpMatcher({\n * \t...englishDataset.build(),\n * \t...englishRecommendedTransformers,\n * });\n * ```\n * @example\n * ```typescript\n * // Extending the data-set by adding a new word and removing an existing one.\n * const myDataset = new DataSet()\n * \t.addAll(englishDataset)\n * \t.removePhrasesIf((phrase) => phrase.metadata.originalWord === 'vagina')\n * \t.addPhrase((phrase) => phrase.addPattern(pattern`|balls|`));\n * ```\n * @copyright\n * The words are taken from the [cuss](https://github.com/words/cuss) project,\n * with some modifications.\n *\n * ```text\n * (The MIT License)\n *\n * Copyright (c) 2016 Titus Wormer <tituswormer@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ```\n */\nexports.englishDataset = new DataSet_1.DataSet()\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'abo' }).addPattern((0, Pattern_1.pattern) `|ab[b]o[s]|`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'abeed' }).addPattern((0, Pattern_1.pattern) `ab[b]eed`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'africoon' }).addPattern((0, Pattern_1.pattern) `africoon`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'anal' })\n    .addPattern((0, Pattern_1.pattern) `|anal`)\n    .addWhitelistedTerm('analabos')\n    .addWhitelistedTerm('analagous')\n    .addWhitelistedTerm('analav')\n    .addWhitelistedTerm('analy')\n    .addWhitelistedTerm('analog')\n    .addWhitelistedTerm('an al')\n    .addPattern((0, Pattern_1.pattern) `danal`)\n    .addPattern((0, Pattern_1.pattern) `eanal`)\n    .addPattern((0, Pattern_1.pattern) `fanal`)\n    .addWhitelistedTerm('fan al')\n    .addPattern((0, Pattern_1.pattern) `ganal`)\n    .addWhitelistedTerm('gan al')\n    .addPattern((0, Pattern_1.pattern) `ianal`)\n    .addWhitelistedTerm('ian al')\n    .addPattern((0, Pattern_1.pattern) `janal`)\n    .addWhitelistedTerm('trojan al')\n    .addPattern((0, Pattern_1.pattern) `kanal`)\n    .addPattern((0, Pattern_1.pattern) `lanal`)\n    .addWhitelistedTerm('lan al')\n    .addPattern((0, Pattern_1.pattern) `lanal`)\n    .addWhitelistedTerm('lan al')\n    .addPattern((0, Pattern_1.pattern) `oanal|`)\n    .addPattern((0, Pattern_1.pattern) `panal`)\n    .addWhitelistedTerm('pan al')\n    .addPattern((0, Pattern_1.pattern) `qanal`)\n    .addPattern((0, Pattern_1.pattern) `ranal`)\n    .addPattern((0, Pattern_1.pattern) `sanal`)\n    .addPattern((0, Pattern_1.pattern) `tanal`)\n    .addWhitelistedTerm('tan al')\n    .addPattern((0, Pattern_1.pattern) `uanal`)\n    .addWhitelistedTerm('uan al')\n    .addPattern((0, Pattern_1.pattern) `vanal`)\n    .addWhitelistedTerm('van al')\n    .addPattern((0, Pattern_1.pattern) `wanal`)\n    .addPattern((0, Pattern_1.pattern) `xanal`)\n    .addWhitelistedTerm('texan al')\n    .addPattern((0, Pattern_1.pattern) `yanal`)\n    .addPattern((0, Pattern_1.pattern) `zanal`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'anus' })\n    .addPattern((0, Pattern_1.pattern) `anus`)\n    .addWhitelistedTerm('an us')\n    .addWhitelistedTerm('tetanus')\n    .addWhitelistedTerm('uranus')\n    .addWhitelistedTerm('janus')\n    .addWhitelistedTerm('manus'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'arabush' }).addPattern((0, Pattern_1.pattern) `arab[b]ush`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'arse' })\n    .addPattern((0, Pattern_1.pattern) `|ars[s]e`)\n    .addWhitelistedTerm('arsen'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'ass' })\n    .addPattern((0, Pattern_1.pattern) `|ass`)\n    .addWhitelistedTerm('assa')\n    .addWhitelistedTerm('assem')\n    .addWhitelistedTerm('assen')\n    .addWhitelistedTerm('asser')\n    .addWhitelistedTerm('asset')\n    .addWhitelistedTerm('assev')\n    .addWhitelistedTerm('assi')\n    .addWhitelistedTerm('assoc')\n    .addWhitelistedTerm('assoi')\n    .addWhitelistedTerm('assu'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'bastard' }).addPattern((0, Pattern_1.pattern) `bas[s]tard`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'bestiality' }).addPattern((0, Pattern_1.pattern) `be[e][a]s[s]tial`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'bitch' })\n    .addPattern((0, Pattern_1.pattern) `bitch`)\n    .addPattern((0, Pattern_1.pattern) `bich|`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'blowjob' }).addPattern((0, Pattern_1.pattern) `b[b]l[l][o]wj[o]b`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'bollocks' }).addPattern((0, Pattern_1.pattern) `bol[l]ock`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'boob' }).addPattern((0, Pattern_1.pattern) `boob`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'boonga' })\n    .addPattern((0, Pattern_1.pattern) `boonga`)\n    .addWhitelistedTerm('baboon ga'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'buttplug' }).addPattern((0, Pattern_1.pattern) `buttplug`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'chingchong' }).addPattern((0, Pattern_1.pattern) `chingchong`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'chink' })\n    .addPattern((0, Pattern_1.pattern) `chink`)\n    .addWhitelistedTerm('chin k'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'cock' })\n    .addPattern((0, Pattern_1.pattern) `|cock|`)\n    .addPattern((0, Pattern_1.pattern) `|cocks`)\n    .addPattern((0, Pattern_1.pattern) `|cockp`)\n    .addPattern((0, Pattern_1.pattern) `|cocke[e]|`)\n    .addWhitelistedTerm('cockney'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'cuck' })\n    .addPattern((0, Pattern_1.pattern) `cuck`)\n    .addWhitelistedTerm('cuckoo'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'cum' })\n    .addPattern((0, Pattern_1.pattern) `|cum`)\n    .addWhitelistedTerm('cumu')\n    .addWhitelistedTerm('cumb'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'cunt' })\n    .addPattern((0, Pattern_1.pattern) `|cunt`)\n    .addPattern((0, Pattern_1.pattern) `cunt|`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'deepthroat' })\n    .addPattern((0, Pattern_1.pattern) `deepthro[o]at`)\n    .addPattern((0, Pattern_1.pattern) `deepthro[o]t`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'dick' })\n    .addPattern((0, Pattern_1.pattern) `|dck|`)\n    .addPattern((0, Pattern_1.pattern) `dick`)\n    .addWhitelistedTerm('benedick')\n    .addWhitelistedTerm('dickens'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'dildo' }).addPattern((0, Pattern_1.pattern) `dildo`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'doggystyle' }).addPattern((0, Pattern_1.pattern) `d[o]g[g]ys[s]t[y]l[l]`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'double penetration' }).addPattern((0, Pattern_1.pattern) `double penetra`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'dyke' })\n    .addPattern((0, Pattern_1.pattern) `dyke`)\n    .addWhitelistedTerm('van dyke'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'ejaculate' })\n    .addPattern((0, Pattern_1.pattern) `e[e]jacul`)\n    .addPattern((0, Pattern_1.pattern) `e[e]jakul`)\n    .addPattern((0, Pattern_1.pattern) `e[e]acul[l]ate`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'fag' })\n    .addPattern((0, Pattern_1.pattern) `|fag`)\n    .addPattern((0, Pattern_1.pattern) `fggot`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'felch' }).addPattern((0, Pattern_1.pattern) `fe[e]l[l]ch`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'fellatio' }).addPattern((0, Pattern_1.pattern) `f[e][e]llat`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'finger bang' }).addPattern((0, Pattern_1.pattern) `fingerbang`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'fisting' }).addPattern((0, Pattern_1.pattern) `fistin`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'fuck' })\n    .addPattern((0, Pattern_1.pattern) `f[?]ck`)\n    .addPattern((0, Pattern_1.pattern) `|fk`)\n    .addPattern((0, Pattern_1.pattern) `|fu|`)\n    .addPattern((0, Pattern_1.pattern) `|fuk`)\n    .addWhitelistedTerm('fick')\n    .addWhitelistedTerm('kung-fu')\n    .addWhitelistedTerm('kung fu'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'gangbang' }).addPattern((0, Pattern_1.pattern) `g[?]ngbang`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'handjob' }).addPattern((0, Pattern_1.pattern) `h[?]ndjob`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'hentai' }).addPattern((0, Pattern_1.pattern) `h[e][e]ntai`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'hooker' }).addPattern((0, Pattern_1.pattern) `hooker`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'incest' }).addPattern((0, Pattern_1.pattern) `incest`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'jerk off' }).addPattern((0, Pattern_1.pattern) `jerkoff`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'jizz' }).addPattern((0, Pattern_1.pattern) `jizz`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'kike' }).addPattern((0, Pattern_1.pattern) `kike`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'lubejob' }).addPattern((0, Pattern_1.pattern) `lubejob`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'masturbate' })\n    .addPattern((0, Pattern_1.pattern) `m[?]sturbate`)\n    .addPattern((0, Pattern_1.pattern) `masterbate`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'negro' })\n    .addPattern((0, Pattern_1.pattern) `negro`)\n    .addWhitelistedTerm('montenegro')\n    .addWhitelistedTerm('negron')\n    .addWhitelistedTerm('stoneground')\n    .addWhitelistedTerm('winegrow'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'nigger' })\n    .addPattern((0, Pattern_1.pattern) `n[i]gger`)\n    .addPattern((0, Pattern_1.pattern) `n[i]gga`)\n    .addPattern((0, Pattern_1.pattern) `|nig|`)\n    .addPattern((0, Pattern_1.pattern) `|nigs|`)\n    .addWhitelistedTerm('snigger'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'orgasm' })\n    .addPattern((0, Pattern_1.pattern) `[or]gasm`)\n    .addWhitelistedTerm('gasma'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'orgy' })\n    .addPattern((0, Pattern_1.pattern) `orgy`)\n    .addPattern((0, Pattern_1.pattern) `orgies`)\n    .addWhitelistedTerm('porgy'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'penis' })\n    .addPattern((0, Pattern_1.pattern) `pe[e]nis`)\n    .addPattern((0, Pattern_1.pattern) `|pnis`)\n    .addWhitelistedTerm('pen is'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'piss' }).addPattern((0, Pattern_1.pattern) `|piss`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'porn' })\n    .addPattern((0, Pattern_1.pattern) `|prn|`)\n    .addPattern((0, Pattern_1.pattern) `porn`)\n    .addWhitelistedTerm('p orna'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'prick' }).addPattern((0, Pattern_1.pattern) `|prick[s]|`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'pussy' }).addPattern((0, Pattern_1.pattern) `p[u]ssy`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'rape' })\n    .addPattern((0, Pattern_1.pattern) `|rape`)\n    .addPattern((0, Pattern_1.pattern) `|rapis[s]t`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'retard' }).addPattern((0, Pattern_1.pattern) `retard`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'scat' }).addPattern((0, Pattern_1.pattern) `|s[s]cat|`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'semen' }).addPattern((0, Pattern_1.pattern) `|s[s]e[e]me[e]n`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'sex' })\n    .addPattern((0, Pattern_1.pattern) `|s[s]e[e]x|`)\n    .addPattern((0, Pattern_1.pattern) `|s[s]e[e]xy|`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'shit' })\n    .addPattern((0, Pattern_1.pattern) `|shit`)\n    .addPattern((0, Pattern_1.pattern) `shit|`)\n    .addWhitelistedTerm('s hit')\n    .addWhitelistedTerm('sh it')\n    .addWhitelistedTerm('shi t')\n    .addWhitelistedTerm('shitake'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'slut' }).addPattern((0, Pattern_1.pattern) `s[s]lut`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'spastic' }).addPattern((0, Pattern_1.pattern) `|spastic`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'tit' })\n    .addPattern((0, Pattern_1.pattern) `|tit|`)\n    .addPattern((0, Pattern_1.pattern) `|tits|`)\n    .addPattern((0, Pattern_1.pattern) `|titt`)\n    .addPattern((0, Pattern_1.pattern) `|tiddies`)\n    .addPattern((0, Pattern_1.pattern) `|tities`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'tranny' }).addPattern((0, Pattern_1.pattern) `tranny`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'turd' })\n    .addPattern((0, Pattern_1.pattern) `|turd`)\n    .addWhitelistedTerm('turducken'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'twat' })\n    .addPattern((0, Pattern_1.pattern) `|twat`)\n    .addWhitelistedTerm('twattle'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'vagina' })\n    .addPattern((0, Pattern_1.pattern) `vagina`)\n    .addPattern((0, Pattern_1.pattern) `|v[?]gina`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'wank' }).addPattern((0, Pattern_1.pattern) `|wank`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'whore' })\n    .addPattern((0, Pattern_1.pattern) `|wh[o]re|`)\n    .addPattern((0, Pattern_1.pattern) `|who[o]res[s]|`)\n    .addWhitelistedTerm(\"who're\"));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.skipNonAlphabeticTransformer = void 0;\nconst Char_1 = require(\"../../util/Char\");\nconst Transformers_1 = require(\"../Transformers\");\n/**\n * Creates a transformer that skips non-alphabetic characters (`a`-`z`,\n * `A`-`Z`). This is useful when matching text on patterns that are solely\n * comprised of alphabetic characters (the pattern `hello` does not match\n * `h.e.l.l.o` by default, but does with this transformer).\n *\n * **Warning**\n *\n * This transformation is not part of the default set of transformations, as\n * there are some known rough edges with false negatives; see\n * [#23](https://github.com/jo3-l/obscenity/issues/23) and\n * [#46](https://github.com/jo3-l/obscenity/issues/46) on the GitHub issue\n * tracker.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied near the end of the\n * transformer chain, if at all.\n *\n * @example\n * ```typescript\n * const transformer = skipNonAlphabeticTransformer();\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction skipNonAlphabeticTransformer() {\n    return (0, Transformers_1.createSimpleTransformer)((c) => ((0, Char_1.isAlphabetic)(c) ? c : undefined));\n}\nexports.skipNonAlphabeticTransformer = skipNonAlphabeticTransformer;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./censor/BuiltinStrategies\"), exports);\n__exportStar(require(\"./censor/TextCensor\"), exports);\n__exportStar(require(\"./dataset/DataSet\"), exports);\n__exportStar(require(\"./matcher/regexp/RegExpMatcher\"), exports);\n__exportStar(require(\"./matcher/BlacklistedTerm\"), exports);\n__exportStar(require(\"./matcher/MatchPayload\"), exports);\n__exportStar(require(\"./matcher/Matcher\"), exports);\n__exportStar(require(\"./pattern/Nodes\"), exports);\n__exportStar(require(\"./pattern/ParserError\"), exports);\n__exportStar(require(\"./pattern/Pattern\"), exports);\n__exportStar(require(\"./preset/english\"), exports);\n__exportStar(require(\"./transformer/collapse-duplicates\"), exports);\n__exportStar(require(\"./transformer/remap-characters\"), exports);\n__exportStar(require(\"./transformer/resolve-confusables\"), exports);\n__exportStar(require(\"./transformer/resolve-leetspeak\"), exports);\n__exportStar(require(\"./transformer/skip-non-alphabetic\"), exports);\n__exportStar(require(\"./transformer/to-ascii-lowercase\"), exports);\n", "import mod from \"./index.js\";\n\nexport default mod;\nexport const DataSet = mod.DataSet;\nexport const ParserError = mod.ParserError;\nexport const PhraseBuilder = mod.PhraseBuilder;\nexport const RegExpMatcher = mod.RegExpMatcher;\nexport const SyntaxKind = mod.SyntaxKind;\nexport const TextCensor = mod.TextCensor;\nexport const assignIncrementingIds = mod.assignIncrementingIds;\nexport const asteriskCensorStrategy = mod.asteriskCensorStrategy;\nexport const collapseDuplicatesTransformer = mod.collapseDuplicatesTransformer;\nexport const compareMatchByPositionAndId = mod.compareMatchByPositionAndId;\nexport const englishDataset = mod.englishDataset;\nexport const englishRecommendedBlacklistMatcherTransformers = mod.englishRecommendedBlacklistMatcherTransformers;\nexport const englishRecommendedTransformers = mod.englishRecommendedTransformers;\nexport const englishRecommendedWhitelistMatcherTransformers = mod.englishRecommendedWhitelistMatcherTransformers;\nexport const fixedCharCensorStrategy = mod.fixedCharCensorStrategy;\nexport const fixedPhraseCensorStrategy = mod.fixedPhraseCensorStrategy;\nexport const grawlixCensorStrategy = mod.grawlixCensorStrategy;\nexport const keepEndCensorStrategy = mod.keepEndCensorStrategy;\nexport const keepStartCensorStrategy = mod.keepStartCensorStrategy;\nexport const parseRawPattern = mod.parseRawPattern;\nexport const pattern = mod.pattern;\nexport const randomCharFromSetCensorStrategy = mod.randomCharFromSetCensorStrategy;\nexport const remapCharactersTransformer = mod.remapCharactersTransformer;\nexport const resolveConfusablesTransformer = mod.resolveConfusablesTransformer;\nexport const resolveLeetSpeakTransformer = mod.resolveLeetSpeakTransformer;\nexport const skipNonAlphabeticTransformer = mod.skipNonAlphabeticTransformer;\nexport const toAsciiLowerCaseTransformer = mod.toAsciiLowerCaseTransformer;\n", "import Utilities from \"../core/Utilities\";\r\nimport IFile from \"./IFile\";\r\nimport IFolder from \"./IFolder\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport { RegExpMatcher, englishDataset, englishRecommendedTransformers } from \"obscenity\";\r\n\r\n/**\r\n * Maximum number of files allowed in shared content\r\n */\r\nexport const MAX_SHARED_FILES = 100;\r\n\r\n/**\r\n * Maximum total size of shared content in bytes (1MB)\r\n */\r\nexport const MAX_SHARED_TOTAL_SIZE = 1024 * 1024;\r\n\r\n/**\r\n * Allowed path patterns for shareable content.\r\n * Only files within these paths can be shared.\r\n */\r\nexport const ALLOWED_SHARE_PATHS: RegExp[] = [\r\n  /^\\/scripts\\//i, // Scripts folder\r\n  /^\\/behavior_packs?\\//i, // Behavior packs\r\n  /^\\/resource_packs?\\//i, // Resource packs\r\n  /^\\/texts\\//i, // Localization\r\n  /^\\/functions\\//i, // mcfunction files folder\r\n  /^\\/items\\//i, // Items folder\r\n  /^\\/entities\\//i, // Entities folder\r\n  /^\\/blocks\\//i, // Blocks folder\r\n  /^\\/recipes\\//i, // Recipes folder\r\n  /^\\/loot_tables\\//i, // Loot tables\r\n  /^\\/trading\\//i, // Trading tables\r\n  /^\\/spawn_rules\\//i, // Spawn rules\r\n  /^\\/animations?\\//i, // Animations\r\n  /^\\/animation_controllers?\\//i, // Animation controllers\r\n  /^\\/models?\\//i, // Models (geometry)\r\n  /^\\/render_controllers?\\//i, // Render controllers\r\n  /^\\/attachables?\\//i, // Attachables\r\n  /^\\/biomes?\\//i, // Biomes\r\n  /^\\/features?\\//i, // Features\r\n  /^\\/feature_rules?\\//i, // Feature rules\r\n  /^\\/structures?\\//i, // Structures\r\n];\r\n\r\n/**\r\n * Dangerous code patterns that should not be allowed in shared TypeScript/JavaScript files.\r\n * These patterns could enable code execution, file system access, or other security risks.\r\n */\r\nexport const DANGEROUS_CODE_PATTERNS: { pattern: RegExp; description: string }[] = [\r\n  { pattern: /import\\s+.*from\\s+['\"]child_process['\"]/i, description: \"child_process import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]child_process['\"]\\s*\\)/i, description: \"child_process require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]fs['\"]/i, description: \"fs module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]fs['\"]\\s*\\)/i, description: \"fs module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]path['\"]/i, description: \"path module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]path['\"]\\s*\\)/i, description: \"path module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]os['\"]/i, description: \"os module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]os['\"]\\s*\\)/i, description: \"os module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]net['\"]/i, description: \"net module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]net['\"]\\s*\\)/i, description: \"net module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]dgram['\"]/i, description: \"dgram module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]dgram['\"]\\s*\\)/i, description: \"dgram module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]cluster['\"]/i, description: \"cluster module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]cluster['\"]\\s*\\)/i, description: \"cluster module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]vm['\"]/i, description: \"vm module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]vm['\"]\\s*\\)/i, description: \"vm module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]worker_threads['\"]/i, description: \"worker_threads module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]worker_threads['\"]\\s*\\)/i, description: \"worker_threads module require\" },\r\n  { pattern: /\\beval\\s*\\(/i, description: \"eval() call\" },\r\n  { pattern: /\\bFunction\\s*\\(\\s*['\"`]/i, description: \"Function constructor with string\" },\r\n  { pattern: /\\bexec\\s*\\(/i, description: \"exec() call\" },\r\n  { pattern: /\\bexecSync\\s*\\(/i, description: \"execSync() call\" },\r\n  { pattern: /\\bspawn\\s*\\(/i, description: \"spawn() call\" },\r\n  { pattern: /\\bspawnSync\\s*\\(/i, description: \"spawnSync() call\" },\r\n  { pattern: /\\bfork\\s*\\(/i, description: \"fork() call\" },\r\n  { pattern: /process\\.exit/i, description: \"process.exit call\" },\r\n  { pattern: /process\\.env/i, description: \"process.env access\" },\r\n  { pattern: /process\\.cwd/i, description: \"process.cwd access\" },\r\n  { pattern: /__dirname/i, description: \"__dirname access\" },\r\n  { pattern: /__filename/i, description: \"__filename access\" },\r\n  { pattern: /import\\s*\\(\\s*[^)]*\\+/i, description: \"dynamic import with concatenation\" },\r\n  { pattern: /require\\s*\\(\\s*[^)]*\\+/i, description: \"dynamic require with concatenation\" },\r\n  { pattern: /globalThis\\s*\\[/i, description: \"globalThis bracket access\" },\r\n  { pattern: /global\\s*\\[/i, description: \"global bracket access\" },\r\n  { pattern: /window\\s*\\[/i, description: \"window bracket access\" },\r\n];\r\n\r\nexport class BasicValidators {\r\n  private static contentMatcher: RegExpMatcher | undefined = undefined;\r\n\r\n  /**\r\n   * Checks if a file's content contains dangerous code patterns that could pose security risks.\r\n   * This is used to validate shared TypeScript/JavaScript files.\r\n   * @param content The file content to check\r\n   * @returns An object with isUnsafe boolean and matched patterns, or undefined if safe\r\n   */\r\n  public static hasUnsafeCodePatterns(content: string): { isUnsafe: boolean; matches: string[] } | undefined {\r\n    if (!content || typeof content !== \"string\") {\r\n      return undefined;\r\n    }\r\n\r\n    const matches: string[] = [];\r\n\r\n    for (const { pattern, description } of DANGEROUS_CODE_PATTERNS) {\r\n      if (pattern.test(content)) {\r\n        matches.push(description);\r\n      }\r\n    }\r\n\r\n    if (matches.length > 0) {\r\n      return { isUnsafe: true, matches };\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Validates if a file path is within the allowed shareable paths.\r\n   * @param filePath The storage-relative path to validate\r\n   * @returns true if the path is allowed for sharing, false otherwise\r\n   */\r\n  public static isPathAllowedForSharing(filePath: string): boolean {\r\n    if (!filePath) {\r\n      return false;\r\n    }\r\n\r\n    // Normalize path\r\n    const normalizedPath = filePath.replace(/\\\\/g, \"/\");\r\n\r\n    // Check against allowed patterns\r\n    return ALLOWED_SHARE_PATHS.some((pattern) => pattern.test(normalizedPath));\r\n  }\r\n\r\n  static async isFolderSharingValid(\r\n    folder: IFolder,\r\n    isChildFolder?: boolean,\r\n    stats?: { fileCount: number; totalSize: number }\r\n  ): Promise<string | undefined> {\r\n    // Initialize stats on first call\r\n    if (!stats) {\r\n      stats = { fileCount: 0, totalSize: 0 };\r\n    }\r\n\r\n    if (!this.isFolderNameOKForSharing(folder.name)) {\r\n      return folder.name + \" is an unsupported folder name.\";\r\n    }\r\n\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    if (!isChildFolder && folder.fileCount > 0) {\r\n      return \"Folder that contains files at the root.\";\r\n    }\r\n\r\n    for (const childFileName in folder.files) {\r\n      const childFile = folder.files[childFileName];\r\n\r\n      if (childFile) {\r\n        // Check file count limit\r\n        stats.fileCount++;\r\n        if (stats.fileCount > MAX_SHARED_FILES) {\r\n          return `Too many files in shared content (limit: ${MAX_SHARED_FILES}).`;\r\n        }\r\n\r\n        const result = this.isFileNameOKForSharing(childFile.name);\r\n\r\n        if (!result) {\r\n          return childFile.name + \" is an unsupported file name.\";\r\n        }\r\n\r\n        // Load content to check for strong language and unsafe patterns\r\n        if (!childFile.isContentLoaded) {\r\n          await childFile.loadContent();\r\n        }\r\n\r\n        // Check total size\r\n        if (childFile.content && typeof childFile.content === \"string\") {\r\n          stats.totalSize += childFile.content.length;\r\n          if (stats.totalSize > MAX_SHARED_TOTAL_SIZE) {\r\n            return `Total shared content size exceeds limit (${MAX_SHARED_TOTAL_SIZE} bytes).`;\r\n          }\r\n        }\r\n\r\n        const res = await this.hasStrongLanguageContent(childFile);\r\n\r\n        if (res) {\r\n          return childFile.name + \" has unsupported content.\";\r\n        }\r\n\r\n        // Check for unsafe code patterns in TypeScript/JavaScript files\r\n        const ext = StorageUtilities.getTypeFromName(childFile.name);\r\n        if (ext === \"ts\" || ext === \"js\") {\r\n          if (childFile.content && typeof childFile.content === \"string\") {\r\n            const unsafeResult = this.hasUnsafeCodePatterns(childFile.content);\r\n            if (unsafeResult && unsafeResult.isUnsafe) {\r\n              return `${childFile.name} contains potentially unsafe code patterns: ${unsafeResult.matches.join(\", \")}.`;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const childFolderName in folder.folders) {\r\n      const childFolder = folder.folders[childFolderName];\r\n\r\n      if (childFolder) {\r\n        const result = await this.isFolderSharingValid(childFolder, true, stats);\r\n\r\n        if (result) {\r\n          return result;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public static isFileNameOKForSharing(fileName: string) {\r\n    fileName = fileName.toLowerCase();\r\n\r\n    const ext = StorageUtilities.getTypeFromName(fileName);\r\n\r\n    if (ext !== \"ts\" && ext !== \"json\" && ext !== \"lang\") {\r\n      return false;\r\n    }\r\n\r\n    if (\r\n      fileName.startsWith(\".\") ||\r\n      fileName.startsWith(\"just.config\") ||\r\n      fileName.endsWith(\".config.ts\") ||\r\n      fileName.endsWith(\".config.js\") ||\r\n      (fileName.startsWith(\"manifest\") && fileName.endsWith(\"json\")) ||\r\n      (fileName.startsWith(\"package\") && fileName.endsWith(\"json\"))\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    if (!Utilities.isUsableAsObjectKey(fileName)) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public static isFolderNameOKForSharing(folderName: string) {\r\n    if (\r\n      folderName.startsWith(\".\") ||\r\n      folderName === \"lib\" ||\r\n      folderName === \"node_modules\" ||\r\n      folderName === \".git\" ||\r\n      folderName === \"dist\" ||\r\n      folderName === \"build\"\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public static async hasStrongLanguageContent(file: IFile) {\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    if (file.isBinary) {\r\n      return undefined;\r\n    }\r\n\r\n    const str = file.content;\r\n\r\n    if (!str) {\r\n      return undefined;\r\n    }\r\n\r\n    if (typeof str !== \"string\") {\r\n      return undefined;\r\n    }\r\n\r\n    if (str.length < 1) {\r\n      return undefined;\r\n    }\r\n\r\n    const content = str.toLowerCase();\r\n\r\n    if (this.contentMatcher === undefined) {\r\n      this.contentMatcher = new RegExpMatcher({\r\n        ...englishDataset.build(),\r\n        ...englishRecommendedTransformers,\r\n      });\r\n    }\r\n\r\n    if (this.contentMatcher.hasMatch(content)) {\r\n      const matches = this.contentMatcher.getAllMatches(content);\r\n      let strMatches: string[] = [];\r\n      const strMatchesSet = new Set<string>();\r\n\r\n      for (let i = 0; i < matches.length && i < 100; i++) {\r\n        const match = matches[i];\r\n\r\n        if (match) {\r\n          const result = content.substring(match.startIndex, match.endIndex + 1);\r\n\r\n          if (!strMatchesSet.has(result)) {\r\n            strMatches.push(result);\r\n            strMatchesSet.add(result);\r\n          }\r\n        }\r\n      }\r\n\r\n      return strMatches.join(\", \");\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport DifferenceSet from \"./DifferenceSet\";\r\nimport { FolderDifferenceType } from \"./IFolderDifference\";\r\nimport { FileDifferenceType } from \"./IFileDifference\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ZipStorage from \"./ZipStorage\";\r\nimport Log from \"../core/Log\";\r\nimport IStorage, { StorageErrorStatus } from \"./IStorage\";\r\nimport Storage from \"./Storage\";\r\nimport { BasicValidators } from \"./BasicValidators\";\r\nimport IVersionContent from \"./IVersionContent\";\r\nimport JsonUtilities from \"../core/JsonUtilities\";\r\nexport const MaxShareableContentStringLength = 65536;\r\n\r\nexport const VersionCoalescingTimeThresholdMs = 10000;\r\nexport const VersionCoalescingSizeThresholdBytes = 1024;\r\nexport const VersionCoalescingVersionsToConsider = 100;\r\n\r\nexport const PackContainerFolderHints = [\r\n  \"bps\",\r\n  \"rps\",\r\n  \"content/resource_packs\",\r\n  \"content/behavior_packs\",\r\n  \"resource packs\",\r\n  \"behavior packs\",\r\n  \"behavior_packs\",\r\n  \"resource_packs\",\r\n  \"skin pack\",\r\n  \"skin packs\",\r\n  \"content/skin_packs\",\r\n  \"content/world_templates\",\r\n  \"world_template\",\r\n  \"worlds\",\r\n  \"world_templates\",\r\n];\r\n\r\nexport const PackFolderHints = [\r\n  \"behavior pack\",\r\n  \"resource pack\",\r\n  \"resource_pack\",\r\n  \"behavior_pack\",\r\n  \"skin_pack\",\r\n  \"world\",\r\n  \"world_template\",\r\n  \"rp\",\r\n  \"bp\",\r\n];\r\n\r\n// part of security/reliability and defense in depth is to only allow our file functions to work with files from an allow list\r\n// this list is also replicated in /public/preload.js\r\nexport const AllowedExtensionsSet = new Set([\r\n  \"js\",\r\n  \"ts\",\r\n  \"json\",\r\n  \"md\",\r\n  \"png\",\r\n  \"css\",\r\n  \"woff\",\r\n  \"ttf\",\r\n  \"woff2\",\r\n  \"jpg\",\r\n  \"gitignore\",\r\n  \"jpeg\",\r\n  \"gif\",\r\n  \"lang\",\r\n  \"fsb\",\r\n  \"map\",\r\n  \"yml\",\r\n  \"ico\",\r\n  \"ogg\",\r\n  \"flac\",\r\n  \"psd\",\r\n  \"nojekyll\",\r\n  \"mjs\",\r\n  \"env\",\r\n  \"wav\",\r\n  \"tga\",\r\n  \"old\",\r\n  \"mc\",\r\n  \"\",\r\n  \"zip\",\r\n  \"wlist\",\r\n  \"brarchive\",\r\n  \"nbt\",\r\n  \"webm\",\r\n  \"svg\",\r\n  \"otf\",\r\n  \"ttf\",\r\n  \"bin\",\r\n  \"obj\",\r\n  \"pdn\",\r\n  \"py\",\r\n  \"hdr\",\r\n  \"h\",\r\n  \"fontdata\",\r\n  \"mcstructure\",\r\n  \"mcworld\",\r\n  \"mcproject\",\r\n  \"material\",\r\n  \"vertex\",\r\n  \"md\",\r\n  \"geometry\",\r\n  \"fragment\",\r\n  \"map\",\r\n  \"js.map\",\r\n  \"mctemplate\",\r\n  \"mcfunction\",\r\n  \"mcaddon\",\r\n  \"mcpack\",\r\n  \"html\",\r\n  \"dat\",\r\n  \"dat_old\",\r\n  \"txt\",\r\n  \"ldb\",\r\n  \"log\",\r\n  \"in\",\r\n  \"cmake\",\r\n]);\r\n\r\nconst IgnoreExtensionsSet = new Set([\"ds_store\", \"brarchive\"]);\r\n\r\nconst IgnoreFileNames = new Set([\"thumbs.db\", \"desktop.ini\"]);\r\n\r\nconst IgnoreFolders = [\r\n  \"__MACOSX\",\r\n  \"credits\",\r\n  \"shaders\",\r\n  \"hbui\",\r\n  \"ray_tracing\",\r\n  \"node_modules\",\r\n  \"test\",\r\n  \"__brarchive\",\r\n  \"metadata\",\r\n];\r\n\r\nconst _minecraftProjectFolderNames = [\r\n  \"behavior_packs\",\r\n  \"resource_packs\",\r\n  \"worlds\",\r\n  \"world\",\r\n  \"world_template\",\r\n  \"skin_pack\",\r\n  \"scripts\",\r\n  \"content\",\r\n  \"marketing art\",\r\n  \"store art\",\r\n  \"db\",\r\n  \"texts\",\r\n  \"animation_controllers\",\r\n  \"blocks\",\r\n  \"structures\",\r\n  \"entities\",\r\n  \"functions\",\r\n  \"items\",\r\n  \"dialogue\",\r\n  \"animations\",\r\n  \"entity\",\r\n  \"materials\",\r\n  \"models\",\r\n  \"textures\",\r\n  \"fogs\",\r\n  \"materials\",\r\n  \"particles\",\r\n  \"ui\",\r\n];\r\n\r\nexport enum EncodingType {\r\n  ByteBuffer,\r\n  Utf8String,\r\n}\r\n\r\nexport default class StorageUtilities {\r\n  public static standardFolderDelimiter = \"/\";\r\n  private static textEncoder = new TextEncoder();\r\n\r\n  /**\r\n   * Debug flag: When true, getJsonObjectWithComments will use regular JSON.parse\r\n   * instead of comment-json to help isolate memory issues. Set via environment\r\n   * variable MCT_BYPASS_COMMENT_JSON=1 or programmatically.\r\n   */\r\n  public static bypassCommentJson =\r\n    typeof process !== \"undefined\" && process.env && process.env.MCT_BYPASS_COMMENT_JSON === \"1\";\r\n\r\n  /**\r\n   * Counter for tracking how many times comment-json parsing is invoked.\r\n   * Useful for debugging memory issues.\r\n   */\r\n  public static commentJsonParseCount = 0;\r\n\r\n  /**\r\n   * Log every Nth comment-json parse call (0 = disabled)\r\n   */\r\n  public static commentJsonLogFrequency = 0;\r\n\r\n  public static isUsableFile(path: string) {\r\n    const extension = StorageUtilities.getTypeFromName(path);\r\n\r\n    return AllowedExtensionsSet.has(extension);\r\n  }\r\n\r\n  public static canIgnoreFileName(fileName: string) {\r\n    return IgnoreFileNames.has(fileName.toLowerCase());\r\n  }\r\n\r\n  public static canIgnoreFileExtension(extension: string) {\r\n    return IgnoreExtensionsSet.has(extension);\r\n  }\r\n\r\n  public static isIgnorableFolder(folderName: string) {\r\n    const folderNameLower = folderName.toLowerCase();\r\n    return (\r\n      (folderNameLower.startsWith(\".\") && folderNameLower !== \".mcp\" && folderNameLower !== \".vscode\") ||\r\n      IgnoreFolders.includes(folderNameLower)\r\n    );\r\n  }\r\n\r\n  public static getSerializationOfChangeList(versionContentList: IVersionContent[]) {\r\n    let str = \"\";\r\n\r\n    for (const versionContent of versionContentList) {\r\n      str += \"|\" + versionContent.file.extendedPath + \"\\n\";\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  public static getEncodingByFileName(name: string): EncodingType {\r\n    const fileType = this.getTypeFromName(name);\r\n    const nameLow = name.toLowerCase();\r\n\r\n    switch (fileType) {\r\n      case \"mcstructure\":\r\n      case \"zip\":\r\n      case \"dat\":\r\n      case \"dat_old\":\r\n      case \"ldb\":\r\n      case \"ico\":\r\n      case \"tga\":\r\n      case \"hdr\":\r\n      case \"ogg\":\r\n      case \"flac\":\r\n      case \"wav\":\r\n      case \"gif\":\r\n      case \"jpeg\":\r\n      case \"jpg\":\r\n      case \"png\":\r\n      case \"psd\":\r\n      case \"mp3\":\r\n      case \"fsb\":\r\n      case \"woff\":\r\n      case \"woff2\":\r\n      case \"ttf\":\r\n      case \"pdb\":\r\n      case \"exe\":\r\n      case \"nbt\":\r\n      case \"mcworld\":\r\n      case \"mcproject\":\r\n      case \"mctemplate\":\r\n      case \"mcpack\":\r\n      case \"mcaddon\":\r\n        return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    if (fileType === \"\" && nameLow.startsWith(\"manifest-\")) {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    // LevelDB CURRENT file (no extension)\r\n    if (fileType === \"\" && nameLow === \"current\") {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    // LevelDB LOG file (no extension, write-ahead log)\r\n    if (fileType === \"\" && (nameLow === \"log\" || nameLow === \"lock\")) {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    // Linux executables (no extension)\r\n    if (fileType === \"\" && nameLow === \"bedrock_server\") {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    // LevelDB LOG.old file\r\n    if (nameLow === \"log.old\") {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    // LevelDB LOG files (e.g., 000003.log) - all .log files in LevelDB are binary\r\n    if (fileType === \"log\") {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    return EncodingType.Utf8String;\r\n  }\r\n\r\n  public static absolutize(path: string) {\r\n    if (!path.startsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = StorageUtilities.standardFolderDelimiter + path;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static stripExtension(path: string) {\r\n    const lastPeriodEnd = path.lastIndexOf(\".\");\r\n\r\n    if (lastPeriodEnd >= 0) {\r\n      path = path.substring(0, lastPeriodEnd);\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static getUniqueChildFolderName(name: string, folder: IFolder) {\r\n    let num = 1;\r\n    let nameCand = name;\r\n    let isUnique = false;\r\n\r\n    while (!isUnique) {\r\n      isUnique = true;\r\n      for (const childFolderName in folder.folders) {\r\n        if (StorageUtilities.canonicalizeName(childFolderName) === StorageUtilities.canonicalizeName(nameCand)) {\r\n          isUnique = false;\r\n        }\r\n      }\r\n\r\n      if (!isUnique) {\r\n        nameCand = name + \" \" + num;\r\n        num++;\r\n      }\r\n    }\r\n\r\n    return nameCand;\r\n  }\r\n\r\n  public static ensureEndsDelimited(path: string) {\r\n    if (!path.endsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = path + StorageUtilities.standardFolderDelimiter;\r\n    }\r\n\r\n    if (path.startsWith(\".\" + StorageUtilities.standardFolderDelimiter)) {\r\n      path = path.substring(1);\r\n    } else if (!path.startsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = StorageUtilities.standardFolderDelimiter + path;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static ensureEndsWithDelimiter(path: string) {\r\n    if (!path.endsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = path + StorageUtilities.standardFolderDelimiter;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  /***\r\n   * returns true if IFile argument is a .json file\r\n   */\r\n  public static isJsonFile(file?: IFile | null): file is IFile {\r\n    return !!file && file.fullPath.endsWith(\".json\");\r\n  }\r\n\r\n  /***\r\n   * Checks binary file contents for a UTF8 Byte Order Mark\r\n   *\r\n   * falsey contents will return false\r\n   */\r\n  public static hasUTF8ByteOrderMark(bytes?: Uint8Array | null) {\r\n    if (!bytes) {\r\n      return false;\r\n    }\r\n\r\n    return bytes.length >= 3 && bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf;\r\n  }\r\n\r\n  /***\r\n   * Normalizes file contents by converting non-binary contents into binary\r\n   *\r\n   * falsey content will return as null\r\n   */\r\n  public static getContentsAsBinary(file: IFile): Uint8Array | null {\r\n    if (!file || !file.content) return null;\r\n    if (typeof file.content === \"string\") {\r\n      return StorageUtilities.textEncoder.encode(file.content);\r\n    }\r\n\r\n    return file.content as Uint8Array;\r\n  }\r\n\r\n  public static ensureStartsWithDelimiter(path: string) {\r\n    if (!path.startsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = StorageUtilities.standardFolderDelimiter + path;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static ensureNotStartsWithDelimiter(path: string) {\r\n    if (path.startsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = path.substring(1);\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static getRootAndFocusPathFromInputPath(path: string) {\r\n    path = StorageUtilities.canonicalizePath(path);\r\n\r\n    let pathSegs = path.split(\"/\");\r\n\r\n    let i = pathSegs.length - 1;\r\n    let splitPoint = i;\r\n\r\n    // subtract out the file part of the path\r\n    if (pathSegs[i].indexOf(\".\") >= 0) {\r\n      i--;\r\n      splitPoint = i;\r\n    }\r\n\r\n    for (; i >= 1; i--) {\r\n      const seg = pathSegs[i];\r\n\r\n      if (seg === \"static-assets\" && i > 2) {\r\n        splitPoint = i - 2;\r\n        break;\r\n      }\r\n\r\n      if (PackContainerFolderHints.includes(seg)) {\r\n        splitPoint = i;\r\n        break;\r\n      }\r\n    }\r\n\r\n    let basePath = pathSegs.slice(0, splitPoint).join(\"/\").trim();\r\n\r\n    if (!basePath.endsWith(\"/\")) {\r\n      basePath += \"/\";\r\n    }\r\n\r\n    let focusPath: string | undefined = pathSegs.slice(splitPoint).join(\"/\").trim();\r\n\r\n    if (focusPath.length > 2) {\r\n      if (!focusPath.startsWith(\"/\")) {\r\n        focusPath = \"/\" + focusPath;\r\n      }\r\n    } else {\r\n      focusPath = undefined;\r\n    }\r\n\r\n    return {\r\n      basePath: basePath,\r\n      focusPath: focusPath,\r\n    };\r\n  }\r\n\r\n  public static joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      fullPath += StorageUtilities.standardFolderDelimiter;\r\n    }\r\n\r\n    if (pathB.startsWith(\"/\")) {\r\n      fullPath += pathB.substring(1, pathB.length);\r\n    } else {\r\n      fullPath += pathB;\r\n    }\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static getMimeTypeFromName(name: string): string {\r\n    switch (StorageUtilities.getTypeFromName(name)) {\r\n      case \"js\":\r\n        return \"application/javascript\";\r\n\r\n      case \"ts\":\r\n        return \"application/typescript\";\r\n\r\n      case \"json\":\r\n        return \"application/json\";\r\n\r\n      case \"mcworld\":\r\n      case \"mctemplate\":\r\n      case \"mcproject\":\r\n      case \"mcaddon\":\r\n      case \"mcpack\":\r\n      case \"zip\":\r\n        return \"application/zip\";\r\n\r\n      case \"mcstucture\":\r\n      case \"hdr\":\r\n      case \"fsb\":\r\n        return \"application/octet-stream\";\r\n\r\n      case \"mcfunction\":\r\n      case \"material\":\r\n      case \"env\":\r\n      case \"lang\":\r\n        return \"text/plain\";\r\n\r\n      case \"wav\":\r\n        return \"audio/wav\";\r\n\r\n      case \"mp3\":\r\n        return \"audio/mp3\";\r\n      case \"ogg\":\r\n        return \"audio/ogg\";\r\n      case \"flac\":\r\n        return \"audio/flac\";\r\n\r\n      case \"psd\":\r\n        return \"image/vnd.adobe.photoshop\";\r\n\r\n      case \"jpg\":\r\n      case \"jpeg\":\r\n        return \"image/jpeg\";\r\n\r\n      case \"png\":\r\n        return \"image/png\";\r\n\r\n      case \"gif\":\r\n        return \"image/gif\";\r\n\r\n      case \"webp\":\r\n        return \"image/webp\";\r\n\r\n      case \"svg\":\r\n        return \"image/svg+xml\";\r\n\r\n      case \"bmp\":\r\n        return \"image/bmp\";\r\n\r\n      case \"ico\":\r\n        return \"image/x-icon\";\r\n\r\n      case \"tiff\":\r\n      case \"tga\":\r\n        return \"image/tiff\";\r\n\r\n      case \"md\":\r\n        return \"text/markdown\";\r\n\r\n      case \"html\":\r\n      case \"htm\":\r\n        return \"text/html\";\r\n\r\n      case \"css\":\r\n        return \"text/css\";\r\n\r\n      case \"xml\":\r\n        return \"application/xml\";\r\n\r\n      case \"yaml\":\r\n      case \"yml\":\r\n        return \"application/yaml\";\r\n\r\n      default:\r\n        return \"application/octet-stream\";\r\n    }\r\n  }\r\n\r\n  static getMimeType(file: IFile): string {\r\n    return StorageUtilities.getMimeTypeFromName(file.name);\r\n  }\r\n\r\n  static isImageMimeType(mimeType: string): boolean {\r\n    return mimeType.startsWith(\"image/\");\r\n  }\r\n\r\n  public static getContentAsString(file: IFile) {\r\n    if (typeof file.content === \"string\") {\r\n      return file.content;\r\n    } else if (file.content instanceof Uint8Array) {\r\n      return \"data:\" + StorageUtilities.getMimeType(file) + \";base64,\" + Utilities.uint8ArrayToBase64(file.content);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public static sortChangeList(changeList: IVersionContent[]) {\r\n    changeList.sort((a: IVersionContent, b: IVersionContent) => {\r\n      if (!a.versionTime && !b.versionTime) {\r\n        return 0;\r\n      }\r\n\r\n      if (!a.versionTime) {\r\n        return -1;\r\n      }\r\n      if (!b.versionTime) {\r\n        return 1;\r\n      }\r\n\r\n      return a.versionTime.getTime() - b.versionTime.getTime();\r\n    });\r\n  }\r\n\r\n  // We don't want a new version every time the user hits a key stroke, so, look to see if it makes sense to\r\n  // remove \"trivial\" versions compared to the latest update\r\n  public static coalesceVersions(versionList: IVersionContent[]) {\r\n    const latestUpdate = versionList[versionList.length - 1];\r\n    let removingVersion = false;\r\n\r\n    if (!latestUpdate.versionTime || !latestUpdate.content) {\r\n      return versionList;\r\n    }\r\n\r\n    let latestVersionTime = latestUpdate.versionTime.getTime();\r\n    let latestVersionSize = latestUpdate.content.length;\r\n\r\n    const contentUpdatesToRemove: { [key: string]: boolean } = {};\r\n    const firstInstanceOfFile: { [key: string]: string } = {};\r\n\r\n    if (versionList.length >= 2) {\r\n      // get to the first instance of a particular file we're going to deal with\r\n      for (\r\n        let i = versionList.length - 2;\r\n        i >= Math.max(0, versionList.length - VersionCoalescingVersionsToConsider);\r\n        i--\r\n      ) {\r\n        const current = versionList[i];\r\n        if (current && current.file) {\r\n          firstInstanceOfFile[current.file.extendedPath] = current.id;\r\n        }\r\n      }\r\n\r\n      // moving backwards over the version list - considering a max set of VersionCoalescingVersionsToConsider,\r\n      // coalesce versions that are semantically similar enough to the latest version by essentially removing minor\r\n      // from the version list\r\n      // note that we are only considering coalescing into the latest version (lastestUpdate)\r\n      for (\r\n        let i = versionList.length - 2;\r\n        i >= Math.max(0, versionList.length - VersionCoalescingVersionsToConsider);\r\n        i--\r\n      ) {\r\n        const current = versionList[i];\r\n\r\n        if (current.file === latestUpdate.file) {\r\n          // is this change \"minor\" compared to the latest version\r\n          if (\r\n            firstInstanceOfFile[current.file.extendedPath] !== current.id &&\r\n            current.versionTime &&\r\n            latestVersionTime - current.versionTime.getTime() < VersionCoalescingTimeThresholdMs &&\r\n            current.content &&\r\n            Math.abs(latestVersionSize - current.content.length) < VersionCoalescingSizeThresholdBytes\r\n          ) {\r\n            contentUpdatesToRemove[current.id] = true;\r\n            removingVersion = true;\r\n            if (\r\n              !latestUpdate.startVersionTime ||\r\n              current.versionTime.getTime() < latestUpdate.startVersionTime.getTime()\r\n            ) {\r\n              latestUpdate.startVersionTime = current.versionTime;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!removingVersion) {\r\n      return versionList;\r\n    }\r\n\r\n    const newList: IVersionContent[] = [];\r\n    let previousMajorUpdate: IVersionContent | undefined = undefined;\r\n\r\n    for (const version of versionList) {\r\n      if (!contentUpdatesToRemove[version.id]) {\r\n        newList.push(version);\r\n\r\n        if (version.file === latestUpdate.file) {\r\n          if (previousMajorUpdate !== undefined) {\r\n            if (previousMajorUpdate.content && version.content) {\r\n              const byteDiff = version.content.length - previousMajorUpdate.content.length;\r\n\r\n              if (byteDiff > 0) {\r\n                version.description = \"+\" + byteDiff;\r\n              } else if (byteDiff < 0) {\r\n                version.description = \"-\" + Math.abs(byteDiff);\r\n              }\r\n            }\r\n          }\r\n          previousMajorUpdate = version;\r\n        }\r\n      }\r\n    }\r\n\r\n    // remove trivial versions from the per-file list too\r\n    const newPerFileList: IVersionContent[] = [];\r\n\r\n    for (const version of latestUpdate.file.priorVersions) {\r\n      if (!contentUpdatesToRemove[version.id]) {\r\n        newPerFileList.push(version);\r\n      }\r\n    }\r\n\r\n    latestUpdate.file.priorVersions = newPerFileList;\r\n\r\n    return newList;\r\n  }\r\n\r\n  public static getAvailableFolderName(folder: IFolder) {\r\n    // if we're inside of an MCPack or zip, the folder is \"/\" but the name of the mcpack file potentially\r\n    // provides hints, so scoop out the name of the parent zip\r\n    let basePathName = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    if ((basePathName === \"/\" || basePathName === \"\") && folder.extendedPath.length > 1) {\r\n      let hashIndex = folder.extendedPath.indexOf(\"#\");\r\n\r\n      if (hashIndex > 0) {\r\n        basePathName = folder.extendedPath.substring(0, hashIndex);\r\n\r\n        let lastPeriod = basePathName.lastIndexOf(\".\");\r\n\r\n        if (lastPeriod > 0) {\r\n          basePathName = basePathName.substring(0, lastPeriod);\r\n        }\r\n        let lastSlash = basePathName.lastIndexOf(\"/\");\r\n\r\n        if (lastSlash >= 0 && lastSlash < basePathName.length - 1) {\r\n          basePathName = basePathName.substring(lastSlash + 1);\r\n        }\r\n      }\r\n    }\r\n\r\n    return basePathName;\r\n  }\r\n\r\n  public static async getFileStorageFolder(file: IFile): Promise<IFolder | undefined | string> {\r\n    let zipStorage: IStorage | null | undefined = file.fileContainerStorage;\r\n\r\n    if (!zipStorage) {\r\n      zipStorage = await ZipStorage.loadFromFile(file);\r\n\r\n      if (!zipStorage) {\r\n        return undefined;\r\n      }\r\n\r\n      if (zipStorage.errorStatus === StorageErrorStatus.unprocessable) {\r\n        file.errorStateMessage = zipStorage.errorMessage;\r\n        return file.errorStateMessage;\r\n      }\r\n\r\n      file.fileContainerStorage = zipStorage;\r\n      file.fileContainerStorage.storagePath = file.storageRelativePath + \"#\";\r\n    }\r\n\r\n    return zipStorage.rootFolder;\r\n  }\r\n\r\n  public static getContaineredFileLeafPath(path: string | null | undefined) {\r\n    if (!path) {\r\n      return;\r\n    }\r\n    const lastHash = path.lastIndexOf(\"#\");\r\n\r\n    if (lastHash >= 0) {\r\n      path = path.substring(lastHash + 1);\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static isMinecraftInternalFolder(folder: IFolder) {\r\n    const nameCanon = folder.name.toLowerCase();\r\n\r\n    return _minecraftProjectFolderNames.includes(nameCanon);\r\n  }\r\n\r\n  public static isContainerFile(path: string) {\r\n    const extension = StorageUtilities.getTypeFromName(path);\r\n\r\n    if (\r\n      extension === \"zip\" ||\r\n      extension === \"mcworld\" ||\r\n      extension === \"mcproject\" ||\r\n      extension === \"mctemplate\" ||\r\n      extension === \"mcpack\" ||\r\n      extension === \"mcaddon\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public static isFileStorageItem(file: IFile) {\r\n    return this.isContainerFile(file.name);\r\n  }\r\n\r\n  public static canonicalizeName(name: string): string {\r\n    name = name.trim(); //.toLowerCase();\r\n\r\n    if (name.startsWith(\"/\") || name.startsWith(\"\\\\\")) {\r\n      name = name.substring(1, name.length);\r\n    }\r\n\r\n    if (name.endsWith(\"/\") || name.endsWith(\"\\\\\")) {\r\n      name = name.substring(0, name.length - 1);\r\n    }\r\n\r\n    // constructor is a keyword that will cause array existence checks to fail in interesting ways\r\n    if (name === \"constructor\") {\r\n      name = \"__constructor\";\r\n    }\r\n\r\n    name = name.replace(/%20/g, \" \");\r\n    name = name.replace(/%28/g, \"(\");\r\n    name = name.replace(/%29/g, \")\");\r\n\r\n    if (!Utilities.isUsableAsObjectKey(name)) {\r\n      name = \"named_\" + name;\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  public static isPathEqual(pathA: string, pathB: string) {\r\n    return StorageUtilities.canonicalizePath(pathA) === StorageUtilities.canonicalizePath(pathB);\r\n  }\r\n\r\n  public static canonicalizePath(path: string): string {\r\n    path = path.trim(); //  .toLowerCase();\r\n    path = path.replace(/\\\\/g, \"/\");\r\n    path = path.replace(/%20/g, \" \");\r\n    path = path.replace(/%28/g, \"(\");\r\n    path = path.replace(/%29/g, \")\");\r\n\r\n    return path;\r\n  }\r\n\r\n  public static canonicalizePathAsFileName(path: string): string {\r\n    let result = path.trim().toLowerCase();\r\n\r\n    path = path.replace(/%20/g, \" \");\r\n    path = path.replace(/%28/g, \"(\");\r\n    path = path.replace(/%29/g, \")\");\r\n\r\n    result = result.replace(/:/g, \"_\");\r\n    result = result.replace(/\\//g, \"-\");\r\n    result = result.replace(/\\\\/g, \"-\");\r\n    result = result.replace(/%/g, \"-\");\r\n    result = result.replace(/--/g, \"-\");\r\n    result = result.replace(/--/g, \"-\");\r\n\r\n    result = result.replace(/\\?/g, \"-\");\r\n    result = result.replace(/\\|/g, \"-\");\r\n\r\n    return result;\r\n  }\r\n\r\n  public static ensureFileNameIsSafe(path: string): string {\r\n    let result = path.trim().toLowerCase();\r\n\r\n    path = path.replace(/%20/g, \" \");\r\n    path = path.replace(/%28/g, \"(\");\r\n    path = path.replace(/%29/g, \")\");\r\n\r\n    result = result.replace(/:/g, \"_\");\r\n    result = result.replace(/\\//g, \"-\");\r\n    result = result.replace(/\\\\/g, \"-\");\r\n    result = result.replace(/%/g, \"-\");\r\n    result = result.replace(/--/g, \"-\");\r\n    result = result.replace(/`/g, \"-\");\r\n    result = result.replace(/'/g, \"-\");\r\n    result = result.replace(/\u2013/g, \"-\");\r\n\r\n    return result;\r\n  }\r\n\r\n  public static hasPathSeparator(path: string): boolean {\r\n    if (!path) {\r\n      return false;\r\n    }\r\n    let lastSlash = path.lastIndexOf(\"/\", path.length - 1);\r\n\r\n    if (lastSlash >= 0) {\r\n      return true;\r\n    }\r\n\r\n    lastSlash = path.lastIndexOf(\"\\\\\", path.length - 1);\r\n\r\n    if (lastSlash >= 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public static getLeafName(path: string): string {\r\n    let name = path;\r\n\r\n    if (name.endsWith(\"/\")) {\r\n      name = name.substring(0, name.length - 1);\r\n    }\r\n\r\n    if (name.endsWith(\"\\\\\")) {\r\n      name = name.substring(0, name.length - 1);\r\n    }\r\n\r\n    let lastSlash = name.lastIndexOf(\"/\", path.length - 1);\r\n\r\n    if (lastSlash >= 0) {\r\n      name = name.substring(lastSlash + 1, name.length);\r\n    }\r\n\r\n    lastSlash = name.lastIndexOf(\"\\\\\", name.length - 1);\r\n\r\n    if (lastSlash >= 0) {\r\n      name = name.substring(lastSlash + 1, name.length);\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  public static getFolderPath(path: string): string {\r\n    let lastSlash = path.lastIndexOf(\"/\", path.length - 1);\r\n\r\n    if (lastSlash >= 0 && lastSlash < path.length - 1) {\r\n      path = path.substring(0, lastSlash + 1);\r\n    } else {\r\n      lastSlash = path.lastIndexOf(\"\\\\\", path.length - 1);\r\n\r\n      if (lastSlash >= 0 && lastSlash < path.length - 1) {\r\n        path = path.substring(0, lastSlash + 1);\r\n      }\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static getParentFolderNameFromPath(path: string): string | undefined {\r\n    let lastSlash = path.lastIndexOf(\"/\", path.length - 1);\r\n\r\n    if (lastSlash >= 0 && lastSlash < path.length - 1) {\r\n      const nextLastSlash = path.lastIndexOf(\"/\", lastSlash - 1);\r\n\r\n      return path.substring(nextLastSlash + 1, lastSlash);\r\n    } else {\r\n      lastSlash = path.lastIndexOf(\"\\\\\", path.length - 1);\r\n\r\n      if (lastSlash >= 0 && lastSlash < path.length - 1) {\r\n        const nextLastSlash = path.lastIndexOf(\"/\", lastSlash - 1);\r\n\r\n        return path.substring(nextLastSlash + 1, lastSlash);\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public static removeContainerExtension(name: string): string {\r\n    let nameW = name.trim();\r\n\r\n    if (nameW.endsWith(\".zip\")) {\r\n      nameW = nameW.substring(0, nameW.length - 4);\r\n    }\r\n    return nameW;\r\n  }\r\n\r\n  // returns path relative to folder, with the file extension removed, as is commonly used in Minecraft resource references\r\n  public static getBaseRelativePath(file: IFile, folder: IFolder) {\r\n    let relativePath = file.getFolderRelativePath(folder);\r\n\r\n    if (relativePath) {\r\n      relativePath = StorageUtilities.getBaseFromName(relativePath).toLowerCase();\r\n\r\n      relativePath = StorageUtilities.ensureNotStartsWithDelimiter(relativePath);\r\n    }\r\n\r\n    return relativePath;\r\n  }\r\n\r\n  public static getBaseFromName(name: string): string {\r\n    const nameW = name.trim();\r\n\r\n    const lastPeriod = nameW.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod < 0) {\r\n      return nameW;\r\n    }\r\n\r\n    return nameW.substring(0, lastPeriod);\r\n  }\r\n\r\n  public static convertFolderPlaceholders(path: string) {\r\n    return this.convertFolderPlaceholdersPartial(path, 0);\r\n  }\r\n\r\n  public static convertFolderPlaceholdersPartial(path: string, startIndex?: number) {\r\n    if (startIndex === undefined) {\r\n      startIndex = 4; // default is to ignore the <pt_ at the start.\r\n    }\r\n\r\n    let pathTokenStart = path.indexOf(\"<pt_\", startIndex);\r\n\r\n    while (pathTokenStart >= startIndex) {\r\n      let pathTokenEnd = path.indexOf(\">\", pathTokenStart + 4);\r\n\r\n      if (pathTokenEnd > pathTokenStart) {\r\n        path =\r\n          path.substring(0, pathTokenStart) +\r\n          path.substring(pathTokenStart + 4, pathTokenEnd) +\r\n          path.substring(pathTokenEnd + 1);\r\n\r\n        pathTokenStart = path.indexOf(\"<pt_\", pathTokenStart);\r\n      } else {\r\n        pathTokenStart = path.indexOf(\"<pt_\", pathTokenStart + 1);\r\n      }\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  /**\r\n   * Well-known path token prefixes used in Electron for folder abstraction.\r\n   * Maps the token prefix (e.g., \"DOCP\") to a user-friendly display name.\r\n   */\r\n  private static readonly _friendlyTokenNames: { [token: string]: string } = {\r\n    DOCP: \"documents\",\r\n    BDRK: \"Minecraft\",\r\n    BDPV: \"Minecraft Preview\",\r\n    EDUR: \"Minecraft Education\",\r\n    EDUP: \"Minecraft Education Preview\",\r\n    MCPE: \"Minecraft PE\",\r\n  };\r\n\r\n  /**\r\n   * Strips the trailing random suffix (dash + 6 lowercase chars) that is appended\r\n   * to Electron path tokens for uniqueness. For example, \"base-packs-4kp0sp\" becomes \"base-packs\".\r\n   */\r\n  private static _stripTokenSuffix(tokenContent: string): string {\r\n    const lastDash = tokenContent.lastIndexOf(\"-\");\r\n\r\n    if (lastDash >= 1 && lastDash === tokenContent.length - 7) {\r\n      // Verify the suffix is all lowercase alphanumeric (the random ID format)\r\n      const suffix = tokenContent.substring(lastDash + 1);\r\n      if (/^[a-z0-9]{6}$/.test(suffix)) {\r\n        return tokenContent.substring(0, lastDash);\r\n      }\r\n    }\r\n\r\n    return tokenContent;\r\n  }\r\n\r\n  /**\r\n   * Converts a path or name containing Electron folder tokens into a user-friendly\r\n   * display string. Handles both `<pt_name-random>` project tokens (stripping the\r\n   * `<pt_>` wrapper and random suffix) and well-known tokens like `<DOCP>`, `<BDRK>`, etc.\r\n   *\r\n   * Examples:\r\n   *   \"<pt_base-packs-4kp0sp>\" -> \"base-packs\"\r\n   *   \"<DOCP>\" -> \"documents\"\r\n   *   \"<DOCP>/my-project/\" -> \"documents/my-project/\"\r\n   *   \"Opening <pt_my-addon-ab12cd>...\" -> \"Opening my-addon...\"\r\n   */\r\n  public static getFriendlyDisplayName(path: string): string {\r\n    // First, replace well-known tokens like <DOCP>, <BDRK>, etc.\r\n    for (const token in this._friendlyTokenNames) {\r\n      const tokenTag = \"<\" + token + \">\";\r\n      while (path.indexOf(tokenTag) >= 0) {\r\n        path = path.replace(tokenTag, this._friendlyTokenNames[token]);\r\n      }\r\n    }\r\n\r\n    // Then, replace <pt_...> tokens, stripping the random suffix\r\n    let ptStart = path.indexOf(\"<pt_\");\r\n    while (ptStart >= 0) {\r\n      const ptEnd = path.indexOf(\">\", ptStart + 4);\r\n      if (ptEnd > ptStart) {\r\n        const tokenContent = path.substring(ptStart + 4, ptEnd);\r\n        const friendlyName = this._stripTokenSuffix(tokenContent);\r\n        path = path.substring(0, ptStart) + friendlyName + path.substring(ptEnd + 1);\r\n        ptStart = path.indexOf(\"<pt_\", ptStart);\r\n      } else {\r\n        ptStart = path.indexOf(\"<pt_\", ptStart + 1);\r\n      }\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static getCoreBaseFromName(name: string): string {\r\n    const nameW = name.trim();\r\n\r\n    let firstPeriod = nameW.indexOf(\".\");\r\n\r\n    if (firstPeriod < 0) {\r\n      return name;\r\n    }\r\n\r\n    return nameW.substring(0, firstPeriod);\r\n  }\r\n\r\n  public static getTypeFromName(name: string): string {\r\n    const nameW = name.trim().toLowerCase();\r\n\r\n    const lastPeriod = nameW.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod < 0) {\r\n      return \"\";\r\n    }\r\n\r\n    return nameW.substring(lastPeriod + 1, nameW.length);\r\n  }\r\n\r\n  public static async folderContentsEqual(\r\n    folderA: IFolder | undefined,\r\n    folderB: IFolder | undefined,\r\n    excludingFilesOrFolders?: string[],\r\n    whitespaceAgnostic?: boolean,\r\n    ignoreAttributes?: string[],\r\n    volatilePatterns?: Array<{ pattern: RegExp; replacement: string }>\r\n  ): Promise<{ result: boolean; reason: string }> {\r\n    if (folderA === undefined && folderB === undefined) {\r\n      return { result: true, reason: \"Both folders are undefined.\" };\r\n    }\r\n\r\n    if (folderA === undefined) {\r\n      return { result: false, reason: \"First folder is undefined.\" };\r\n    }\r\n\r\n    if (folderB === undefined) {\r\n      return { result: false, reason: \"Second folder is undefined.\" };\r\n    }\r\n\r\n    await folderA.load(false);\r\n    await folderB.load(false);\r\n\r\n    if (folderA.fileCount !== folderB.fileCount) {\r\n      return {\r\n        result: false,\r\n        reason:\r\n          \"Folder '\" +\r\n          folderA.fullPath +\r\n          \"' has \" +\r\n          folderA.fileCount +\r\n          \" files; folder '\" +\r\n          folderB.fullPath +\r\n          \"' has \" +\r\n          folderB.fileCount +\r\n          \" files.\",\r\n      };\r\n    }\r\n\r\n    for (const fileName in folderA.files) {\r\n      const fileA = folderA.files[fileName];\r\n      const fileB = folderB.files[fileName];\r\n\r\n      if (fileA === undefined) {\r\n        return { result: false, reason: \"Unexpected file '\" + fileName + \"' undefined.\" };\r\n      }\r\n\r\n      if (fileB === undefined) {\r\n        return { result: false, reason: \"File '\" + fileName + \"' does not exist in '\" + folderB.fullPath + \"'\" };\r\n      }\r\n\r\n      let processFile = true;\r\n\r\n      if (excludingFilesOrFolders) {\r\n        if (excludingFilesOrFolders.includes(fileA.name)) {\r\n          processFile = false;\r\n        }\r\n\r\n        for (const excludeExt of excludingFilesOrFolders) {\r\n          if (fileA.name.toLowerCase().endsWith(excludeExt.toLowerCase())) {\r\n            processFile = false;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (processFile) {\r\n        const result = await StorageUtilities.fileContentsEqual(\r\n          fileA,\r\n          fileB,\r\n          whitespaceAgnostic,\r\n          ignoreAttributes,\r\n          volatilePatterns\r\n        );\r\n\r\n        if (!result) {\r\n          return {\r\n            result: false,\r\n            reason:\r\n              \"File '\" +\r\n              fileA.fullPath +\r\n              \"' (size: \" +\r\n              fileA.content?.length +\r\n              (fileA.isBinary ? \"B\" : \"C\") +\r\n              \") contents does not match '\" +\r\n              fileB.fullPath +\r\n              \"' (size: \" +\r\n              fileB.content?.length +\r\n              (fileB.isBinary ? \"B\" : \"C\") +\r\n              \")\",\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const folderName in folderA.folders) {\r\n      const childFolderA = folderA.folders[folderName];\r\n      const childFolderB = folderB.folders[folderName];\r\n\r\n      if (childFolderA === undefined) {\r\n        return { result: false, reason: \"Unexpected folder undefined. \" };\r\n      }\r\n\r\n      // Check if this folder should be excluded\r\n      let excludeFolder = false;\r\n      if (excludingFilesOrFolders) {\r\n        if (excludingFilesOrFolders.includes(folderName)) {\r\n          excludeFolder = true;\r\n        }\r\n      }\r\n\r\n      if (excludeFolder) {\r\n        continue;\r\n      }\r\n\r\n      if (childFolderB === undefined) {\r\n        return { result: false, reason: \"Folder '\" + folderName + \"' does not exist in '\" + folderB.fullPath + \"'\" };\r\n      }\r\n\r\n      const result = await StorageUtilities.folderContentsEqual(\r\n        childFolderA,\r\n        childFolderB,\r\n        excludingFilesOrFolders,\r\n        whitespaceAgnostic,\r\n        ignoreAttributes,\r\n        volatilePatterns\r\n      );\r\n\r\n      if (!result.result) {\r\n        return result;\r\n      }\r\n    }\r\n\r\n    return { result: true, reason: \"Folders are equal\" };\r\n  }\r\n\r\n  public static async fileContentsEqual(\r\n    fileA: IFile | undefined,\r\n    fileB: IFile | undefined,\r\n    whitespaceAgnostic?: boolean,\r\n    ignoreAttributes?: string[],\r\n    volatilePatterns?: Array<{ pattern: RegExp; replacement: string }>\r\n  ) {\r\n    if (fileA === undefined && fileB === undefined) {\r\n      return true;\r\n    }\r\n\r\n    if (fileA === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (fileB === undefined) {\r\n      return false;\r\n    }\r\n\r\n    const fileAExists = await fileA.exists();\r\n\r\n    if (!fileAExists) {\r\n      return false;\r\n    }\r\n\r\n    const fileBExists = await fileB.exists();\r\n\r\n    if (fileAExists && !fileBExists) {\r\n      return false;\r\n    }\r\n\r\n    await fileA.loadContent(false);\r\n    await fileB.loadContent(false);\r\n\r\n    if (fileA.content === undefined && fileB.content === undefined) {\r\n      return true;\r\n    }\r\n\r\n    const extA = StorageUtilities.getTypeFromName(fileA.name);\r\n    const extB = StorageUtilities.getTypeFromName(fileB.name);\r\n\r\n    let contentA = fileA.content;\r\n    let contentB = fileB.content;\r\n\r\n    if (contentA === null && contentB === null) {\r\n      return true;\r\n    }\r\n\r\n    if (contentA === null || contentB === null) {\r\n      return false;\r\n    }\r\n\r\n    if (extA === \"json\" && extB === \"json\" && typeof contentA === \"string\" && typeof contentB === \"string\") {\r\n      return this.jsonContentsAreEqualIgnoreWhitespace(contentA, contentB, ignoreAttributes, volatilePatterns);\r\n    } else if (whitespaceAgnostic) {\r\n      return StorageUtilities.contentsAreEqualIgnoreWhitespace(contentA, contentB, volatilePatterns);\r\n    }\r\n\r\n    return StorageUtilities.contentsAreEqual(contentA, contentB);\r\n  }\r\n\r\n  public static jsonContentsAreEqualIgnoreWhitespace(\r\n    contentA: string,\r\n    contentB: string,\r\n    ignoreAttributes?: string[],\r\n    volatilePatterns?: Array<{ pattern: RegExp; replacement: string }>\r\n  ) {\r\n    try {\r\n      let objA = JSON.parse(contentA);\r\n      let objB = JSON.parse(contentB);\r\n\r\n      if (ignoreAttributes && objA) {\r\n        objA = StorageUtilities.removeAttributesFromObject(objA, ignoreAttributes);\r\n      }\r\n\r\n      if (ignoreAttributes && objB) {\r\n        objB = StorageUtilities.removeAttributesFromObject(objB, ignoreAttributes);\r\n      }\r\n\r\n      // Apply volatile patterns to normalize dynamic content in strings\r\n      if (volatilePatterns) {\r\n        objA = StorageUtilities.applyVolatilePatternsToObject(objA, volatilePatterns);\r\n        objB = StorageUtilities.applyVolatilePatternsToObject(objB, volatilePatterns);\r\n      }\r\n\r\n      return Utilities.consistentStringifyTrimmed(objA) === Utilities.consistentStringifyTrimmed(objB);\r\n    } catch (e) {\r\n      Log.debug(\"Error parsing JSON for comparison: \" + e);\r\n    }\r\n\r\n    if (ignoreAttributes && typeof contentA === \"string\" && typeof contentB === \"string\") {\r\n      for (const ignoreLine of ignoreAttributes) {\r\n        contentA = Utilities.stripLinesContaining(contentA, '\"' + ignoreLine + '\":');\r\n        contentB = Utilities.stripLinesContaining(contentB, \"'\" + ignoreLine + \"':\");\r\n      }\r\n    }\r\n\r\n    // Apply volatile patterns to raw content as fallback\r\n    if (volatilePatterns && typeof contentA === \"string\" && typeof contentB === \"string\") {\r\n      for (const { pattern, replacement } of volatilePatterns) {\r\n        contentA = contentA.replace(pattern, replacement);\r\n        contentB = contentB.replace(pattern, replacement);\r\n      }\r\n    }\r\n\r\n    contentA = this.stripWhitespace(contentA);\r\n    contentB = this.stripWhitespace(contentB);\r\n\r\n    return contentA === contentB;\r\n  }\r\n\r\n  /**\r\n   * Recursively applies volatile patterns to normalize dynamic content within string values\r\n   * @param obj The object to process\r\n   * @param patterns Array of regex patterns and their replacements\r\n   * @returns A new object with patterns applied to string values\r\n   */\r\n  public static applyVolatilePatternsToObject(\r\n    obj: any,\r\n    patterns: Array<{ pattern: RegExp; replacement: string }>\r\n  ): any {\r\n    if (obj === null || obj === undefined) {\r\n      return obj;\r\n    }\r\n\r\n    // Handle strings - apply all patterns\r\n    if (typeof obj === \"string\") {\r\n      let result = obj;\r\n      for (const { pattern, replacement } of patterns) {\r\n        result = result.replace(pattern, replacement);\r\n      }\r\n      return result;\r\n    }\r\n\r\n    // Handle arrays\r\n    if (Array.isArray(obj)) {\r\n      return obj.map((item) => this.applyVolatilePatternsToObject(item, patterns));\r\n    }\r\n\r\n    // Handle objects\r\n    if (typeof obj === \"object\") {\r\n      const result: any = {};\r\n      for (const key in obj) {\r\n        if (obj.hasOwnProperty(key)) {\r\n          result[key] = this.applyVolatilePatternsToObject(obj[key], patterns);\r\n        }\r\n      }\r\n      return result;\r\n    }\r\n\r\n    // Handle other primitives\r\n    return obj;\r\n  }\r\n\r\n  /**\r\n   * Recursively sets attributes to undefined in a JSON object if they match any of the provided attribute names\r\n   * @param obj The object to process\r\n   * @param attributeNames Array of attribute names to set to undefined\r\n   * @returns A new object with specified attributes set to undefined\r\n   */\r\n  public static removeAttributesFromObject(obj: any, attributeNames: string[]): any {\r\n    if (obj === null || obj === undefined) {\r\n      return obj;\r\n    }\r\n\r\n    // Handle arrays\r\n    if (Array.isArray(obj)) {\r\n      return obj.map((item) => this.removeAttributesFromObject(item, attributeNames));\r\n    }\r\n\r\n    // Handle objects\r\n    if (typeof obj === \"object\") {\r\n      const result: any = {};\r\n\r\n      for (const key in obj) {\r\n        if (obj.hasOwnProperty(key)) {\r\n          if (attributeNames.includes(key)) {\r\n            // Skip this key entirely (don't add to result)\r\n            continue;\r\n          } else {\r\n            result[key] = this.removeAttributesFromObject(obj[key], attributeNames);\r\n          }\r\n        }\r\n      }\r\n\r\n      return result;\r\n    }\r\n\r\n    // Handle primitives\r\n    return obj;\r\n  }\r\n\r\n  public static stripWhitespace(content: string) {\r\n    content = content.trim();\r\n\r\n    content = content.replace(/ /gi, \"\");\r\n    content = content.replace(/\\r/gi, \"\");\r\n    content = content.replace(/\\n/gi, \"\");\r\n    content = content.replace(/\\t/gi, \"\");\r\n\r\n    return content;\r\n  }\r\n\r\n  public static contentsAreEqual(contentA: string | Uint8Array | null, contentB: string | Uint8Array | null) {\r\n    if (contentA === null && contentB === null) {\r\n      return true;\r\n    }\r\n\r\n    if (typeof contentA === \"string\" && typeof contentB === \"string\") {\r\n      return contentA === contentB;\r\n    }\r\n\r\n    if (contentA instanceof Uint8Array && contentB instanceof Uint8Array) {\r\n      return Utilities.uint8ArraysAreEqual(contentA, contentB);\r\n    }\r\n\r\n    return false;\r\n  }\r\n  public static contentsAreEqualIgnoreWhitespace(\r\n    contentA: string | Uint8Array | null,\r\n    contentB: string | Uint8Array | null,\r\n    volatilePatterns?: Array<{ pattern: RegExp; replacement: string }>\r\n  ) {\r\n    if (contentA === null && contentB === null) {\r\n      return true;\r\n    }\r\n\r\n    if (typeof contentA === \"string\" && typeof contentB === \"string\") {\r\n      let strA = contentA;\r\n      let strB = contentB;\r\n\r\n      // Apply volatile patterns to normalize dynamic content\r\n      if (volatilePatterns) {\r\n        for (const { pattern, replacement } of volatilePatterns) {\r\n          strA = strA.replace(pattern, replacement);\r\n          strB = strB.replace(pattern, replacement);\r\n        }\r\n      }\r\n\r\n      return this.stripWhitespace(strA) === this.stripWhitespace(strB);\r\n    }\r\n\r\n    if (contentA instanceof Uint8Array && contentB instanceof Uint8Array) {\r\n      return Utilities.uint8ArraysAreEqual(contentA, contentB);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public static async getDifferences(\r\n    original: IFolder,\r\n    updated: IFolder,\r\n    includeDeletions: boolean,\r\n    matchSingleChildFolders: boolean\r\n  ) {\r\n    // matchSingleChildFolders: for project template starters, where they have a structure like:\r\n    //     resource_packs/template_name\r\n    // that gets renamed to\r\n    //     resource_packs/mikesfooproject\r\n    // then -- if there is one folder in the original and one folder in the updated,\r\n    // we want to match them up irrespective of the name\r\n\r\n    const data = new DifferenceSet();\r\n\r\n    await this.addDifferences(data, original, updated, includeDeletions, matchSingleChildFolders);\r\n\r\n    return data;\r\n  }\r\n\r\n  public static getFirstFile(folder: IFolder): IFile | undefined {\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file && !file.canIgnore) {\r\n        return file;\r\n      }\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const subFolder = folder.folders[folderName];\r\n\r\n      if (subFolder) {\r\n        const file = this.getFirstFile(subFolder);\r\n\r\n        if (file && !file.canIgnore) {\r\n          return file;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public static async addDifferences(\r\n    differences: DifferenceSet,\r\n    original: IFolder,\r\n    updated: IFolder,\r\n    includeDeletions: boolean,\r\n    matchSingleFolders: boolean\r\n  ): Promise<FolderDifferenceType> {\r\n    await original.load(false);\r\n\r\n    await updated.load(false);\r\n\r\n    let result: FolderDifferenceType = FolderDifferenceType.none;\r\n\r\n    // get a list of existing files and folders in the target\r\n    const updatedFilesToConsider: { [id: string]: boolean } = {};\r\n    const updatedFoldersToConsider: { [id: string]: boolean } = {};\r\n\r\n    for (const updatedFileName in updated.files) {\r\n      if (BasicValidators.isFileNameOKForSharing(updatedFileName)) {\r\n        updatedFilesToConsider[updatedFileName] = true;\r\n      }\r\n    }\r\n\r\n    for (const updatedFolderName in updated.folders) {\r\n      if (BasicValidators.isFolderNameOKForSharing(updatedFolderName)) {\r\n        updatedFoldersToConsider[updatedFolderName] = true;\r\n      }\r\n    }\r\n\r\n    for (const originalFileName in original.files) {\r\n      if (BasicValidators.isFileNameOKForSharing(originalFileName)) {\r\n        const originalFile = original.files[originalFileName];\r\n\r\n        if (originalFile !== undefined) {\r\n          updatedFilesToConsider[originalFileName] = false;\r\n\r\n          if (updated.fileExists(originalFileName)) {\r\n            const updatedFile = updated.files[originalFileName];\r\n\r\n            const areEqual = await StorageUtilities.fileContentsEqual(originalFile, updatedFile);\r\n\r\n            if (!areEqual) {\r\n              if ((result & FolderDifferenceType.fileContentsDifferent) === 0) {\r\n                result += FolderDifferenceType.fileContentsDifferent;\r\n              }\r\n\r\n              differences.fileDifferences.push({\r\n                type: FileDifferenceType.contentsDifferent,\r\n                path: originalFile.storageRelativePath,\r\n                original: originalFile,\r\n                updated: updatedFile,\r\n              });\r\n            }\r\n          } else if (includeDeletions) {\r\n            if ((result & FolderDifferenceType.fileListDifferent) === 0) {\r\n              result += FolderDifferenceType.fileListDifferent;\r\n            }\r\n\r\n            differences.fileDifferences.push({\r\n              type: FileDifferenceType.fileDeleted,\r\n              path: originalFile.storageRelativePath,\r\n              original: originalFile,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const originalFolderName in original.folders) {\r\n      if (BasicValidators.isFolderNameOKForSharing(originalFolderName)) {\r\n        const originalChildFolder = original.folders[originalFolderName];\r\n\r\n        if (originalChildFolder !== undefined) {\r\n          updatedFoldersToConsider[originalFolderName] = false;\r\n\r\n          if (\r\n            updated.folderExists(originalFolderName) ||\r\n            (matchSingleFolders && updated.folderCount === 1 && original.folderCount === 1)\r\n          ) {\r\n            let updatedChildFolder = updated.folders[originalFolderName];\r\n\r\n            if (matchSingleFolders && updated.folderCount && original.folderCount && !updatedChildFolder) {\r\n              updatedChildFolder = updated.getFolderByIndex(0);\r\n            }\r\n\r\n            if (updatedChildFolder !== undefined) {\r\n              updatedFoldersToConsider[updatedChildFolder.name] = false;\r\n\r\n              const childResult = await StorageUtilities.addDifferences(\r\n                differences,\r\n                originalChildFolder,\r\n                updatedChildFolder,\r\n                includeDeletions,\r\n                matchSingleFolders\r\n              );\r\n\r\n              if (childResult !== FolderDifferenceType.none) {\r\n                result = result | childResult;\r\n              }\r\n            }\r\n          } else if (includeDeletions) {\r\n            if ((result & FolderDifferenceType.folderDeleted) === 0) {\r\n              result += FolderDifferenceType.folderDeleted;\r\n            }\r\n\r\n            this.addDifferencesAsFolderDelete(differences, originalChildFolder);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const updatedFileName in updatedFilesToConsider) {\r\n      if (updatedFilesToConsider[updatedFileName] === true) {\r\n        const updatedFile = updated.files[updatedFileName];\r\n\r\n        if (updatedFile !== undefined) {\r\n          if ((result & FolderDifferenceType.fileListDifferent) === 0) {\r\n            result += FolderDifferenceType.fileListDifferent;\r\n          }\r\n\r\n          if (updatedFile.content !== undefined && updatedFile.content !== null) {\r\n            differences.fileDifferences.push({\r\n              type: FileDifferenceType.fileAdded,\r\n              path: StorageUtilities.relativizePathToOriginal(original, updated, updatedFile.storageRelativePath),\r\n              updated: updatedFile,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const updatedFolderName in updatedFoldersToConsider) {\r\n      if (updatedFoldersToConsider[updatedFolderName] === true) {\r\n        const updatedFolder = updated.folders[updatedFolderName];\r\n\r\n        if (updatedFolder !== undefined) {\r\n          if ((result & FolderDifferenceType.folderAdded) === 0) {\r\n            result += FolderDifferenceType.folderAdded;\r\n          }\r\n\r\n          this.addDifferencesAsFolderAdd(differences, updatedFolder, original, updated);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (result !== FolderDifferenceType.none) {\r\n      differences.folderDifferences.push({\r\n        type: result,\r\n        path: original.storageRelativePath,\r\n        original: original,\r\n        updated: updated,\r\n      });\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  public static relativizePathToOriginal(original: IFolder, updated: IFolder, path: string) {\r\n    const folders = original.storageRelativePath.split(StorageUtilities.standardFolderDelimiter);\r\n\r\n    for (let i = folders.length - 1; i >= 0; i--) {\r\n      const lastIndexOfInPath = path.lastIndexOf(\"/\" + folders[i] + \"/\");\r\n      const lastIndexOfInSource = original.storageRelativePath.lastIndexOf(\"/\" + folders[i] + \"/\");\r\n\r\n      if (lastIndexOfInPath >= 0 && lastIndexOfInSource >= 0) {\r\n        return original.storageRelativePath.substring(0, lastIndexOfInSource) + path.substring(lastIndexOfInPath);\r\n      }\r\n    }\r\n\r\n    const originalPathLength = original.storageRelativePath.length;\r\n    const updatedPathLength = updated.storageRelativePath.length;\r\n\r\n    if (updatedPathLength > originalPathLength) {\r\n      path = path.substring(updatedPathLength - originalPathLength, path.length);\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static async addDifferencesAsFolderAdd(\r\n    differences: DifferenceSet,\r\n    childUpdated: IFolder,\r\n    original: IFolder,\r\n    updated: IFolder\r\n  ) {\r\n    await childUpdated.load(false);\r\n\r\n    differences.folderDifferences.push({\r\n      type: FolderDifferenceType.folderAdded,\r\n      path: StorageUtilities.relativizePathToOriginal(original, updated, childUpdated.storageRelativePath),\r\n      updated: childUpdated,\r\n    });\r\n\r\n    for (const updatedFileName in childUpdated.files) {\r\n      const updatedFile = childUpdated.files[updatedFileName];\r\n\r\n      if (updatedFile !== undefined) {\r\n        differences.fileDifferences.push({\r\n          type: FileDifferenceType.fileAdded,\r\n          path: StorageUtilities.relativizePathToOriginal(original, updated, updatedFile.storageRelativePath),\r\n          updated: updatedFile,\r\n        });\r\n      }\r\n    }\r\n\r\n    for (const updatedFolderName in childUpdated.folders) {\r\n      const updatedFolder = childUpdated.folders[updatedFolderName];\r\n\r\n      if (updatedFolder !== undefined) {\r\n        this.addDifferencesAsFolderAdd(differences, updatedFolder, original, updated);\r\n      }\r\n    }\r\n  }\r\n\r\n  public static async addDifferencesAsFolderDelete(differences: DifferenceSet, original: IFolder) {\r\n    await original.load(false);\r\n\r\n    differences.folderDifferences.push({\r\n      type: FolderDifferenceType.folderDeleted,\r\n      path: original.storageRelativePath,\r\n      updated: original,\r\n    });\r\n\r\n    for (const originalFileName in original.files) {\r\n      const originalFile = original.files[originalFileName];\r\n\r\n      if (originalFile !== undefined) {\r\n        differences.fileDifferences.push({\r\n          type: FileDifferenceType.fileDeleted,\r\n          path: originalFile.storageRelativePath,\r\n          original: originalFile,\r\n        });\r\n      }\r\n    }\r\n\r\n    for (const originalFolderName in original.folders) {\r\n      const originalFolder = original.folders[originalFolderName];\r\n\r\n      if (originalFolder !== undefined) {\r\n        this.addDifferencesAsFolderDelete(differences, originalFolder);\r\n      }\r\n    }\r\n  }\r\n\r\n  public static isPathRiskyForDelete(path: string) {\r\n    path = path.toLowerCase().trim();\r\n\r\n    if (path.indexOf(\"system32\") >= 0 || path.indexOf(\"program files\") >= 0 || path.indexOf(\"programdata\") >= 0) {\r\n      return true;\r\n    }\r\n\r\n    // a very crude way to ensure this code never removes c:\\ or c:\\my documents or whatever or something elemental.\r\n    return Utilities.countChar(path, \"/\") + Utilities.countChar(path, \"\\\\\") < 4;\r\n  }\r\n\r\n  public static getParentOfParentFolderNamed(folderName: string, folder: IFolder) {\r\n    let ancestorFolder = undefined;\r\n\r\n    while (folder.name !== folderName && folder.parentFolder) {\r\n      folder = folder.parentFolder;\r\n    }\r\n\r\n    if (folder.parentFolder) {\r\n      ancestorFolder = folder.parentFolder;\r\n    }\r\n\r\n    return ancestorFolder;\r\n  }\r\n\r\n  public static getJsonObject(file: IFile): any | undefined {\r\n    if (!file.content) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!(typeof file.content === \"string\")) {\r\n      return undefined;\r\n    }\r\n\r\n    let jsonObject = undefined;\r\n    let didFailToParse = false;\r\n    let contents = file.content;\r\n\r\n    contents = Utilities.fixJsonContent(contents);\r\n\r\n    try {\r\n      jsonObject = JSON.parse(contents);\r\n    } catch (e: any) {\r\n      file.isInErrorState = true;\r\n      file.errorStateMessage = e.message;\r\n      didFailToParse = true;\r\n      // Log.fail(\"Could not parse JSON from '\" + file.fullPath + \"': \" + e.message);\r\n    }\r\n\r\n    if (file.isInErrorState && !didFailToParse && contents.length > 0) {\r\n      file.isInErrorState = false;\r\n      file.errorStateMessage = undefined;\r\n    }\r\n\r\n    return jsonObject;\r\n  }\r\n\r\n  /**\r\n   * Gets the JSON object from a file, preserving any C-style comments (// and /* *\\/).\r\n   * The returned object contains comment metadata as Symbol properties that will be\r\n   * preserved when serializing back with JsonUtilities.stringifyJsonWithComments().\r\n   *\r\n   * Use this instead of getJsonObject() when you want to preserve comments through\r\n   * read/edit/save cycles.\r\n   *\r\n   * @param file The file to parse\r\n   * @returns The parsed JSON object with comment metadata, or undefined if parsing failed\r\n   */\r\n  public static getJsonObjectWithComments(file: IFile): any | undefined {\r\n    if (!file.content) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!(typeof file.content === \"string\")) {\r\n      return undefined;\r\n    }\r\n\r\n    // Return cached version if available\r\n    if (file.commentJsonCache !== undefined) {\r\n      return file.commentJsonCache;\r\n    }\r\n\r\n    // Track parse count for debugging\r\n    StorageUtilities.commentJsonParseCount++;\r\n    if (\r\n      StorageUtilities.commentJsonLogFrequency > 0 &&\r\n      StorageUtilities.commentJsonParseCount % StorageUtilities.commentJsonLogFrequency === 0\r\n    ) {\r\n      Log.debug(\r\n        `[comment-json] Parse #${StorageUtilities.commentJsonParseCount}: ${file.fullPath} (${file.content.length} bytes)`\r\n      );\r\n    }\r\n\r\n    let jsonObject = undefined;\r\n    let didFailToParse = false;\r\n    let contents = file.content;\r\n\r\n    // Debug mode: bypass comment-json entirely to isolate memory issues\r\n    if (StorageUtilities.bypassCommentJson) {\r\n      try {\r\n        // Use regular JSON.parse with basic content fixing\r\n        contents = Utilities.fixJsonContent(contents);\r\n        jsonObject = JSON.parse(contents);\r\n        file.commentJsonCache = jsonObject;\r\n      } catch (e: any) {\r\n        file.isInErrorState = true;\r\n        file.errorStateMessage = e.message;\r\n        didFailToParse = true;\r\n      }\r\n    } else {\r\n      // Fix trailing commas and control characters but preserve comments\r\n      contents = Utilities.fixJsonContentForCommentJson(contents);\r\n\r\n      try {\r\n        // Pass fixContent=false since we already fixed the content above\r\n        jsonObject = JsonUtilities.parseJsonWithComments(contents, false);\r\n        // Cache the parsed object on the file for reuse\r\n        file.commentJsonCache = jsonObject;\r\n      } catch (e: any) {\r\n        file.isInErrorState = true;\r\n        file.errorStateMessage = e.message;\r\n        didFailToParse = true;\r\n        // Log.fail(\"Could not parse JSON from '\" + file.fullPath + \"': \" + e.message);\r\n      }\r\n    }\r\n\r\n    if (file.isInErrorState && !didFailToParse && contents.length > 0) {\r\n      file.isInErrorState = false;\r\n      file.errorStateMessage = undefined;\r\n    }\r\n\r\n    return jsonObject;\r\n  }\r\n\r\n  public static async getUniqueFileName(baseName: string, extension: string, folder: IFolder) {\r\n    let candFileName = baseName + \".\" + extension;\r\n\r\n    let exists = folder.fileExists(candFileName);\r\n    let increment = 0;\r\n\r\n    while (exists && increment < 99) {\r\n      increment++;\r\n\r\n      candFileName = baseName + \" \" + String(increment) + \".\" + extension;\r\n\r\n      exists = folder.fileExists(candFileName);\r\n    }\r\n\r\n    return candFileName;\r\n  }\r\n\r\n  /**\r\n   * Write a file to a folder only if it doesn't already exist (prevents overwriting).\r\n   * Logs a debug message and returns false when the file is already present.\r\n   */\r\n  static writeFileIfNew(folder: IFolder, fileName: string, content: string | Uint8Array): boolean {\r\n    if (folder.fileExists(fileName)) {\r\n      Log.debug(`Skipping \"${fileName}\" \u2014 file already exists in ${folder.fullPath}`);\r\n      return false;\r\n    }\r\n\r\n    const file = folder.ensureFile(fileName);\r\n    file.setContent(content);\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Recursively deep-merges two plain JSON-compatible objects. Values in `override`\r\n   * take precedence over `base` for scalar and array keys; nested plain objects are\r\n   * merged recursively. Not suitable for Date, RegExp, class instances, etc.\r\n   */\r\n  static deepMergeJsonObjects(base: any, override: any): any {\r\n    const result = { ...base };\r\n\r\n    for (const key of Object.keys(override)) {\r\n      if (\r\n        typeof result[key] === \"object\" &&\r\n        result[key] !== null &&\r\n        !Array.isArray(result[key]) &&\r\n        typeof override[key] === \"object\" &&\r\n        override[key] !== null &&\r\n        !Array.isArray(override[key])\r\n      ) {\r\n        result[key] = StorageUtilities.deepMergeJsonObjects(result[key], override[key]);\r\n      } else {\r\n        result[key] = override[key];\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  static async ensureFilesFromJson(\r\n    storage: IStorage,\r\n    json: string | { [name: string]: object | string }\r\n  ): Promise<string | undefined> {\r\n    if (typeof json === \"string\") {\r\n      try {\r\n        json = JSON.parse(json);\r\n      } catch (e: any) {\r\n        return e.toString();\r\n      }\r\n    }\r\n\r\n    if (typeof json === \"object\") {\r\n      for (let path in json) {\r\n        let data = json[path];\r\n\r\n        if (!path.startsWith(StorageUtilities.standardFolderDelimiter)) {\r\n          path = StorageUtilities.standardFolderDelimiter + path;\r\n        }\r\n\r\n        const file = await storage.rootFolder.ensureFileFromRelativePath(path);\r\n\r\n        if (!file) {\r\n          return \"Could not create file '\" + path + \"'.\";\r\n        }\r\n\r\n        if (file.isBinary) {\r\n          return \"Could not create file '\" + path + \"'; it is a binary file.\";\r\n        }\r\n\r\n        if (typeof data === \"object\") {\r\n          try {\r\n            data = JSON.stringify(data, null, 2);\r\n          } catch (e: any) {\r\n            return e.toString();\r\n          }\r\n        }\r\n\r\n        file.setContent(data);\r\n      }\r\n    }\r\n\r\n    return;\r\n  }\r\n\r\n  public static async createStorageFromString(content: string): Promise<string | IStorage> {\r\n    let storage: IStorage | undefined = undefined;\r\n\r\n    try {\r\n      content = content.trim();\r\n\r\n      if (content.length < 1) {\r\n        return \"No content provided.\";\r\n      }\r\n\r\n      if (content.startsWith(\"{\") || content.startsWith(\"[\")) {\r\n        storage = new Storage();\r\n\r\n        const result = await StorageUtilities.ensureFilesFromJson(storage, content);\r\n\r\n        if (result) {\r\n          return result;\r\n        }\r\n      } else {\r\n        const contentUnbase64 = Utilities.base64ToUint8Array(content);\r\n\r\n        if (contentUnbase64.length < 2) {\r\n          return \"Invalid base64 content provided.\";\r\n        }\r\n\r\n        if (contentUnbase64[0] === \"{\".charCodeAt(0)) {\r\n          const jsonStr = new TextDecoder(\"utf-8\").decode(contentUnbase64);\r\n\r\n          storage = new Storage();\r\n\r\n          const result = await StorageUtilities.ensureFilesFromJson(storage, jsonStr);\r\n\r\n          if (!result && typeof result === \"string\") {\r\n            return result;\r\n          }\r\n        } else {\r\n          storage = new ZipStorage();\r\n\r\n          await (storage as ZipStorage).loadFromBase64(content);\r\n        }\r\n      }\r\n\r\n      if (storage.errorStatus) {\r\n        return \"Error processing content.\" + (storage.errorMessage ? \"Details: \" + storage.errorMessage : \"\");\r\n      }\r\n    } catch (e: any) {\r\n      return \"Unexpected error processing content.\";\r\n    }\r\n\r\n    return storage;\r\n  }\r\n\r\n  public static async createStorageFromUntrustedString(untrustedContent: string): Promise<string | IStorage> {\r\n    if (untrustedContent.length > MaxShareableContentStringLength) {\r\n      return (\r\n        \"Shared content are too large to include in the URL (\" +\r\n        untrustedContent.length +\r\n        \" > \" +\r\n        MaxShareableContentStringLength +\r\n        \").\"\r\n      );\r\n    }\r\n\r\n    const result = await StorageUtilities.createStorageFromString(untrustedContent);\r\n\r\n    if (!result || typeof result === \"string\") {\r\n      return result;\r\n    }\r\n\r\n    const valResult = await BasicValidators.isFolderSharingValid(result.rootFolder);\r\n\r\n    if (valResult !== undefined) {\r\n      return valResult;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  public static async syncFolderTo(\r\n    source: IFolder,\r\n    target: IFolder,\r\n    forceFolders: boolean,\r\n    forceFileUpdates: boolean,\r\n    removeOnTarget: boolean,\r\n    exclude?: string[],\r\n    include?: string[],\r\n    messageUpdater?: (message: string) => Promise<void>,\r\n    dontOverwriteExistingFiles?: boolean,\r\n    skipFilesAtRoot?: boolean,\r\n    extractContainers?: boolean\r\n  ): Promise<number> {\r\n    let modifiedFileCount = 0;\r\n    // Log.debug(\"Syncing folder '\" + source.storageRelativePath + \"' to '\" + target.storageRelativePath + \"'\");\r\n\r\n    if (StorageUtilities.isIgnorableFolder(source.name)) {\r\n      return 0;\r\n    }\r\n\r\n    // Security: Validate source and target paths\r\n    // Note: Import SecurityUtilities at the top of file if not already imported\r\n    // if (!SecurityUtilities.validatePath(source.storageRelativePath) ||\r\n    //     !SecurityUtilities.validatePath(target.storageRelativePath)) {\r\n    //   Log.fail(\"Invalid path detected in syncFolderTo: \" + source.storageRelativePath + \" -> \" + target.storageRelativePath);\r\n    //   return 0;\r\n    // }\r\n    /*\r\n    if (messageUpdater) {\r\n      await messageUpdater(\r\n        \"Syncing folder from '\" + source.storageRelativePath + \"' to '\" + target.storageRelativePath + \"'.\"\r\n      );\r\n    }*/\r\n\r\n    if (forceFolders || !source.isLoaded) {\r\n      await source.load(forceFolders);\r\n    }\r\n\r\n    if (forceFolders || !target.isLoaded) {\r\n      await target.load(forceFolders);\r\n    }\r\n\r\n    // get a list of existing files and folders in the target\r\n    let targetFiles: { [id: string]: boolean } = {};\r\n    let targetFolders: { [id: string]: boolean } = {};\r\n\r\n    for (const targetFileName in target.files) {\r\n      if (target.files[targetFileName] !== undefined) {\r\n        targetFiles[targetFileName] = true;\r\n      }\r\n    }\r\n\r\n    if (!skipFilesAtRoot) {\r\n      for (const targetFolderName in target.folders) {\r\n        if (target.folders[targetFolderName] !== undefined && !StorageUtilities.isIgnorableFolder(targetFolderName)) {\r\n          targetFolders[targetFolderName] = true;\r\n        }\r\n      }\r\n\r\n      for (const sourceFileName in source.files) {\r\n        const sourceFile = source.files[sourceFileName];\r\n\r\n        let process = true;\r\n\r\n        if (exclude !== undefined && StorageUtilities.matchesList(sourceFileName, exclude)) {\r\n          process = false;\r\n        }\r\n\r\n        if (include !== undefined && !StorageUtilities.matchesList(sourceFileName, include)) {\r\n          process = false;\r\n        }\r\n\r\n        if (sourceFile !== undefined) {\r\n          if (process) {\r\n            targetFiles[sourceFileName] = false;\r\n\r\n            if (extractContainers && StorageUtilities.isContainerFile(sourceFile.name)) {\r\n              const sourceFileContainerFolder = await StorageUtilities.getFileStorageFolder(sourceFile);\r\n\r\n              if (sourceFileContainerFolder && typeof sourceFileContainerFolder !== \"string\") {\r\n                const targetExtractedFolder = target.ensureFolder(StorageUtilities.getBaseFromName(sourceFile.name));\r\n\r\n                await StorageUtilities.syncFolderTo(\r\n                  sourceFileContainerFolder,\r\n                  targetExtractedFolder,\r\n                  forceFolders,\r\n                  forceFileUpdates,\r\n                  removeOnTarget,\r\n                  exclude,\r\n                  include,\r\n                  messageUpdater,\r\n                  dontOverwriteExistingFiles,\r\n                  false,\r\n                  true\r\n                );\r\n              }\r\n            } else {\r\n              const targetFile = target.ensureFile(sourceFile.name);\r\n\r\n              let updateFile = true;\r\n              if (dontOverwriteExistingFiles) {\r\n                if (await targetFile.exists()) {\r\n                  updateFile = false;\r\n                  if (messageUpdater) {\r\n                    messageUpdater(\"Not updating '\" + targetFile.fullPath + \"' as it already exists.\");\r\n                  }\r\n                }\r\n              }\r\n\r\n              if (updateFile) {\r\n                const wasUpdated = await this.syncFileTo(sourceFile, targetFile, forceFileUpdates, messageUpdater);\r\n\r\n                if (wasUpdated) {\r\n                  modifiedFileCount++;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const sourceFolderName in source.folders) {\r\n      if (!StorageUtilities.isIgnorableFolder(sourceFolderName)) {\r\n        const sourceChildFolder = source.folders[sourceFolderName];\r\n        let process = true;\r\n\r\n        if (exclude !== undefined && StorageUtilities.matchesList(\"/\" + sourceFolderName, exclude)) {\r\n          process = false;\r\n        }\r\n\r\n        if (sourceChildFolder !== undefined) {\r\n          if (process) {\r\n            targetFolders[sourceFolderName] = false;\r\n\r\n            const targetChildFolder = target.ensureFolder(sourceChildFolder.name);\r\n\r\n            await targetChildFolder.ensureExists();\r\n\r\n            const subfolderFilesUpdated = await this.syncFolderTo(\r\n              sourceChildFolder,\r\n              targetChildFolder,\r\n              forceFolders,\r\n              forceFileUpdates,\r\n              removeOnTarget,\r\n              exclude,\r\n              include,\r\n              messageUpdater,\r\n              dontOverwriteExistingFiles\r\n            );\r\n\r\n            modifiedFileCount += subfolderFilesUpdated;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (removeOnTarget) {\r\n      for (const targetFileName in targetFiles) {\r\n        let process = true;\r\n\r\n        /*\r\n        If a file matches the exclude list, ignore it, don't remove it. But commenting this out so that excluded files get removed on target.\r\n        if (exclude !== undefined && StorageUtilities.matchesList(targetFileName, exclude)) {\r\n          process = false;\r\n        }*/\r\n\r\n        if (process && targetFiles[targetFileName] === true) {\r\n          if (messageUpdater) {\r\n            await messageUpdater(\"Removing file '\" + target.fullPath + \"' (\" + targetFileName + \")\");\r\n          }\r\n\r\n          await target.deleteFile(targetFileName);\r\n          modifiedFileCount++;\r\n        }\r\n      }\r\n    }\r\n\r\n    return modifiedFileCount;\r\n  }\r\n\r\n  public static matchesList(name: string, list: string[]) {\r\n    name = StorageUtilities.canonicalizeName(name);\r\n    let nameMinusSlash = name;\r\n\r\n    if (nameMinusSlash.startsWith(\"/\")) {\r\n      nameMinusSlash = nameMinusSlash.substring(1, nameMinusSlash.length);\r\n    }\r\n\r\n    for (let i = 0; i < list.length; i++) {\r\n      const listC = StorageUtilities.canonicalizeName(list[i]);\r\n\r\n      if (name === listC) {\r\n        return true;\r\n      }\r\n\r\n      if (!listC.startsWith(\"/\")) {\r\n        if (nameMinusSlash === listC) {\r\n          return true;\r\n        }\r\n      }\r\n\r\n      if (listC.length > 2 && listC.startsWith(\"*\") && listC.endsWith(\"*\")) {\r\n        if (name.indexOf(listC.substring(1, listC.length - 1)) >= 0) {\r\n          return true;\r\n        }\r\n      } else if (listC.length > 2 && listC.startsWith(\"*\") && !listC.endsWith(\"*\")) {\r\n        if (name.endsWith(listC.substring(1))) {\r\n          return true;\r\n        }\r\n      } else if (listC.length > 2 && !listC.startsWith(\"*\") && listC.endsWith(\"*\")) {\r\n        if (name.startsWith(listC.substring(0, listC.length - 1))) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public static sanitizePathBasic(path: string) {\r\n    // Note: For proper security, use SecurityUtilities.sanitizePath() instead\r\n    path = path.replace(/</gi, \"_\");\r\n    path = path.replace(/>/gi, \"_\");\r\n    path = path.replace(/ /gi, \"_\");\r\n    path = path.replace(/\"/gi, \"_\");\r\n    path = path.replace(/'/gi, \"_\");\r\n    path = path.replace(/::/gi, \"_\");\r\n    path = path.replace(/,/gi, \"_\");\r\n    path = path.replace(/:/gi, \"_\");\r\n    path = path.replace(/\\r/gi, \"_\");\r\n    path = path.replace(/\\n/gi, \"_\");\r\n    path = path.replace(/__/gi, \"_\");\r\n    path = path.replace(/__/gi, \"_\");\r\n\r\n    while (path.length > 1 && path.startsWith(\"_\")) {\r\n      path = path.substring(1, path.length);\r\n    }\r\n\r\n    while (path.length > 1 && path.endsWith(\"_\")) {\r\n      path = path.substring(0, path.length - 1);\r\n    }\r\n\r\n    path = path.trim();\r\n\r\n    return path;\r\n  }\r\n\r\n  public static sanitizePath(path: string) {\r\n    // Security note: This function is deprecated for security-critical paths\r\n    // Use SecurityUtilities.sanitizePath() for proper path traversal prevention\r\n    if (Utilities.isAlphaNumeric(path)) {\r\n      return path;\r\n    }\r\n\r\n    let utf8Encode = new TextEncoder();\r\n\r\n    const base64 = Utilities.arrayBufferToBase64((utf8Encode as any).encode(path))\r\n      .replace(/\\//gi, \" \")\r\n      .replace(/=/gi, \"_\");\r\n\r\n    return base64;\r\n  }\r\n\r\n  public static async syncFileTo(\r\n    source: IFile,\r\n    target: IFile,\r\n    force: boolean,\r\n    messageUpdater?: (message: string) => Promise<void>\r\n  ) {\r\n    // Log.debug(\"Syncing file content '\" + source.fullPath + \"'\");\r\n\r\n    await source.loadContent(true);\r\n\r\n    if (source.content == null) {\r\n      Log.debug(\"No content for file \" + source.storageRelativePath);\r\n      return;\r\n    }\r\n\r\n    if (!force) {\r\n      if (await target.exists()) {\r\n        if (!target.isContentLoaded) {\r\n          await target.loadContent(false);\r\n        }\r\n\r\n        if (StorageUtilities.contentsAreEqual(source.content, target.content)) {\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (messageUpdater) {\r\n      let targetPath = target.fullPath;\r\n\r\n      targetPath = targetPath.replace(\"fs.mctprojects/root/\", \"\");\r\n\r\n      let mess = \"Updating file: \" + targetPath;\r\n\r\n      if (source.content) {\r\n        mess += \" (size: \" + source.content.length + \")\";\r\n      }\r\n\r\n      await messageUpdater(mess);\r\n    }\r\n\r\n    // Log.debug(\"Copying file \" + source.storageRelativePath + \" to \" + target.storageRelativePath);\r\n\r\n    target.setContent(source.content, FileUpdateType.versionlessEdit);\r\n    return true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class ScriptGen {\r\n  static getClassName(name: string) {\r\n    if (name.length < 2) {\r\n      return \"untitled\";\r\n    }\r\n\r\n    name = name[0].toUpperCase() + name.substring(1, name.length);\r\n\r\n    name = name.replace(/:/gi, \"\");\r\n\r\n    return name;\r\n  }\r\n\r\n  static getInstanceName(name: string) {\r\n    if (name.length < 2) {\r\n      return \"untitled\";\r\n    }\r\n\r\n    name = Utilities.lowerCaseStartOfString(name);\r\n\r\n    return name;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IComponent from \"./IComponent\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { IComponentContainer } from \"./IComponentDataItem\";\r\nimport IProperty from \"../dataform/IProperty\";\r\n\r\nexport class ManagedComponent implements IManagedComponent {\r\n  private _data: IComponent | string | string[] | boolean | number[] | number | undefined;\r\n  private _parent: IComponentContainer;\r\n  private _uniqueId: string;\r\n  id: string;\r\n\r\n  private _onPropertyChanged = new EventDispatcher<ManagedComponent, string>();\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  constructor(\r\n    parent: IComponentContainer,\r\n    id: string,\r\n    data: IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ) {\r\n    this._parent = parent;\r\n    this._data = data;\r\n    this.id = id;\r\n    this._uniqueId = Utilities.createRandomLowerId(8);\r\n    this.handlePropertyChanged = this.handlePropertyChanged.bind(this);\r\n  }\r\n\r\n  getData() {\r\n    return this._data;\r\n  }\r\n\r\n  getBaseValue() {\r\n    return this._data;\r\n  }\r\n\r\n  setData(newData: IComponent | string | string[] | boolean | number[] | number | undefined) {\r\n    if (Utilities.isUsableAsObjectKey(this.id)) {\r\n      this._parent[this.id] = newData;\r\n    }\r\n    this._data = newData;\r\n  }\r\n\r\n  setBaseValue(value: any): void {\r\n    this._parent[this.id] = value;\r\n    this._data = value;\r\n  }\r\n\r\n  handlePropertyChanged(props: any, property: IProperty, newValue: any, updatedObject?: object | undefined) {\r\n    if (updatedObject) {\r\n      this.setData(updatedObject as any);\r\n    }\r\n  }\r\n\r\n  getProperty(id: string) {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return (this._data as any)[id] as any;\r\n  }\r\n\r\n  setProperty(propertyId: string, value: any) {\r\n    if (\r\n      typeof this._data === \"string\" ||\r\n      typeof this._data === \"number\" ||\r\n      typeof this._data === \"boolean\" ||\r\n      Array.isArray(this._data)\r\n    ) {\r\n      if (typeof this._data === typeof value || typeof value === \"object\") {\r\n        this.setData(value);\r\n        return;\r\n      } else {\r\n        this.setData({\r\n          value: this._data,\r\n        });\r\n      }\r\n    }\r\n\r\n    if (this._data && Utilities.isUsableAsObjectKey(propertyId)) {\r\n      (this._data as any)[propertyId] = value;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport IComponentGroup from \"./IComponentGroup\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport IComponent from \"./IComponent\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class ManagedComponentGroup implements IManagedComponentSetItem {\r\n  _data?: IComponentGroup;\r\n  _managed?: { [id: string]: IManagedComponent | undefined };\r\n\r\n  id: string;\r\n\r\n  private _onComponentAdded = new EventDispatcher<ManagedComponentGroup, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<ManagedComponentGroup, string>();\r\n  private _onComponentChanged = new EventDispatcher<ManagedComponentGroup, IManagedComponent>();\r\n\r\n  public constructor(data: IComponentGroup, id: string) {\r\n    this._data = data;\r\n\r\n    this._managed = {};\r\n\r\n    this.id = id;\r\n  }\r\n\r\n  getData() {\r\n    return this._data;\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ): IManagedComponent {\r\n    if (!this._data) {\r\n      this._data = {};\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(this._data, id, componentOrData);\r\n\r\n    if (Utilities.isUsableAsObjectKey(mc.id)) {\r\n      this._data[mc.id] = mc.getData();\r\n      this._managed[mc.id] = mc;\r\n    }\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (!this._data || !Utilities.isUsableAsObjectKey(id)) {\r\n      return;\r\n    }\r\n\r\n    this._data[id] = undefined;\r\n\r\n    if (this._managed) {\r\n      this._managed[id] = undefined;\r\n    }\r\n  }\r\n\r\n  getComponent(id: string): IManagedComponent | undefined {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      const data = this._data[id];\r\n      if (data) {\r\n        this._managed[id] = new ManagedComponent(this._data, id, data);\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  getAllComponents() {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    if (!this._data) {\r\n      return [];\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n\r\n    const comparr: IManagedComponent[] = [];\r\n\r\n    for (const c in this._data) {\r\n      const comp = this._data[c];\r\n\r\n      if (!this._managed[c] && comp) {\r\n        this._managed[c] = new ManagedComponent(this._data, c, comp);\r\n      }\r\n\r\n      const mc = this._managed[c];\r\n\r\n      if (mc) {\r\n        comparr.push(mc);\r\n      }\r\n    }\r\n\r\n    return comparr;\r\n  }\r\n\r\n  notifyComponentUpdated(id: string): void {\r\n    if (!this._managed) {\r\n      return;\r\n    }\r\n\r\n    const comp = this._managed[id];\r\n\r\n    if (comp) {\r\n      this._onComponentChanged.dispatch(this, comp);\r\n    }\r\n  }\r\n}\r\n", "'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n", "'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\nconst kindOf = ((cache) => (thing) => {\n  const str = toString.call(thing);\n  return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return (\n    val !== null &&\n    !isUndefined(val) &&\n    val.constructor !== null &&\n    !isUndefined(val.constructor) &&\n    isFunction(val.constructor.isBuffer) &&\n    val.constructor.isBuffer(val)\n  );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = val && val.buffer && isArrayBuffer(val.buffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (kindOf(val) !== 'object') {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (\n    (prototype === null ||\n      prototype === Object.prototype ||\n      Object.getPrototypeOf(prototype) === null) &&\n    !(toStringTag in val) &&\n    !(iterator in val)\n  );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n  // Early return for non-objects or Buffers to prevent RangeError\n  if (!isObject(val) || isBuffer(val)) {\n    return false;\n  }\n\n  try {\n    return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n  } catch (e) {\n    // Fallback for any other objects that might cause RangeError with Object.keys()\n    return false;\n  }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a React Native Blob\n * React Native \"blob\": an object with a `uri` attribute. Optionally, it can\n * also have a `name` and `type` attribute to specify filename and content type\n *\n * @see https://github.com/facebook/react-native/blob/26684cf3adf4094eb6c405d345a75bf8c7c0bf88/Libraries/Network/FormData.js#L68-L71\n * \n * @param {*} value The value to test\n * \n * @returns {boolean} True if value is a React Native Blob, otherwise false\n */\nconst isReactNativeBlob = (value) => {\n  return !!(value && typeof value.uri !== 'undefined');\n}\n\n/**\n * Determine if environment is React Native\n * ReactNative `FormData` has a non-standard `getParts()` method\n * \n * @param {*} formData The formData to test\n * \n * @returns {boolean} True if environment is React Native, otherwise false\n */\nconst isReactNative = (formData) => formData && typeof formData.getParts !== 'undefined';\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction getGlobal() {\n  if (typeof globalThis !== 'undefined') return globalThis;\n  if (typeof self !== 'undefined') return self;\n  if (typeof window !== 'undefined') return window;\n  if (typeof global !== 'undefined') return global;\n  return {};\n}\n\nconst G = getGlobal();\nconst FormDataCtor = typeof G.FormData !== 'undefined' ? G.FormData : undefined;\n\nconst isFormData = (thing) => {\n  let kind;\n  return thing && (\n    (FormDataCtor && thing instanceof FormDataCtor) || (\n      isFunction(thing.append) && (\n        (kind = kindOf(thing)) === 'formdata' ||\n        // detect form-data instance\n        (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n      )\n    )\n  );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n  'ReadableStream',\n  'Request',\n  'Response',\n  'Headers',\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => {\n  return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n};\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array<unknown>} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  let i;\n  let l;\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Buffer check\n    if (isBuffer(obj)) {\n      return;\n    }\n\n    // Iterate over object keys\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\n/**\n * Finds a key in an object, case-insensitive, returning the actual key name.\n * Returns null if the object is a Buffer or if no match is found.\n *\n * @param {Object} obj - The object to search.\n * @param {string} key - The key to find (case-insensitive).\n * @returns {?string} The actual key name if found, otherwise null.\n */\nfunction findKey(obj, key) {\n  if (isBuffer(obj)) {\n    return null;\n  }\n\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== 'undefined') return globalThis;\n  return typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : global;\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    // Skip dangerous property names to prevent prototype pollution\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return;\n    }\n\n    const targetKey = (caseless && findKey(result, key)) || key;\n    if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n      result[targetKey] = merge(result[targetKey], val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else if (!skipUndefined || !isUndefined(val)) {\n      result[targetKey] = val;\n    }\n  };\n\n  for (let i = 0, l = arguments.length; i < l; i++) {\n    arguments[i] && forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n  forEach(\n    b,\n    (val, key) => {\n      if (thisArg && isFunction(val)) {\n        Object.defineProperty(a, key, {\n          value: bind(val, thisArg),\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      } else {\n        Object.defineProperty(a, key, {\n          value: val,\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      }\n    },\n    { allOwnKeys }\n  );\n  return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xfeff) {\n    content = content.slice(1);\n  }\n  return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  Object.defineProperty(constructor.prototype, 'constructor', {\n    value: constructor,\n    writable: true,\n    enumerable: false,\n    configurable: true,\n  });\n  Object.defineProperty(constructor, 'super', {\n    value: superConstructor.prototype,\n  });\n  props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n  // eslint-disable-next-line func-names\n  return (thing) => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[iterator];\n\n  const _iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = _iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = (str) => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n    return p1.toUpperCase() + p2;\n  });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n  ({ hasOwnProperty }) =>\n  (obj, prop) =>\n    hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if ('writable' in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n      };\n    }\n  });\n};\n\n/**\n * Converts an array or a delimited string into an object set with values as keys and true as values.\n * Useful for fast membership checks.\n *\n * @param {Array|string} arrayOrString - The array or string to convert.\n * @param {string} delimiter - The delimiter to use if input is a string.\n * @returns {Object} An object with keys from the array or string, values set to true.\n */\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach((value) => {\n      obj[value] = true;\n    });\n  };\n\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite((value = +value)) ? value : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(\n    thing &&\n    isFunction(thing.append) &&\n    thing[toStringTag] === 'FormData' &&\n    thing[iterator]\n  );\n}\n\n/**\n * Recursively converts an object to a JSON-compatible object, handling circular references and Buffers.\n *\n * @param {Object} obj - The object to convert.\n * @returns {Object} The JSON-compatible object.\n */\nconst toJSONObject = (obj) => {\n  const stack = new Array(10);\n\n  const visit = (source, i) => {\n    if (isObject(source)) {\n      if (stack.indexOf(source) >= 0) {\n        return;\n      }\n\n      //Buffer check\n      if (isBuffer(source)) {\n        return source;\n      }\n\n      if (!('toJSON' in source)) {\n        stack[i] = source;\n        const target = isArray(source) ? [] : {};\n\n        forEach(source, (value, key) => {\n          const reducedValue = visit(value, i + 1);\n          !isUndefined(reducedValue) && (target[key] = reducedValue);\n        });\n\n        stack[i] = undefined;\n\n        return target;\n      }\n    }\n\n    return source;\n  };\n\n  return visit(obj, 0);\n};\n\n/**\n * Determines if a value is an async function.\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is an async function, otherwise false.\n */\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\n/**\n * Determines if a value is thenable (has then and catch methods).\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is thenable, otherwise false.\n */\nconst isThenable = (thing) =>\n  thing &&\n  (isObject(thing) || isFunction(thing)) &&\n  isFunction(thing.then) &&\n  isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\n/**\n * Provides a cross-platform setImmediate implementation.\n * Uses native setImmediate if available, otherwise falls back to postMessage or setTimeout.\n *\n * @param {boolean} setImmediateSupported - Whether setImmediate is supported.\n * @param {boolean} postMessageSupported - Whether postMessage is supported.\n * @returns {Function} A function to schedule a callback asynchronously.\n */\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n\n  return postMessageSupported\n    ? ((token, callbacks) => {\n        _global.addEventListener(\n          'message',\n          ({ source, data }) => {\n            if (source === _global && data === token) {\n              callbacks.length && callbacks.shift()();\n            }\n          },\n          false\n        );\n\n        return (cb) => {\n          callbacks.push(cb);\n          _global.postMessage(token, '*');\n        };\n      })(`axios@${Math.random()}`, [])\n    : (cb) => setTimeout(cb);\n})(typeof setImmediate === 'function', isFunction(_global.postMessage));\n\n/**\n * Schedules a microtask or asynchronous callback as soon as possible.\n * Uses queueMicrotask if available, otherwise falls back to process.nextTick or _setImmediate.\n *\n * @type {Function}\n */\nconst asap =\n  typeof queueMicrotask !== 'undefined'\n    ? queueMicrotask.bind(_global)\n    : (typeof process !== 'undefined' && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isEmptyObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isReactNativeBlob,\n  isReactNative,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap,\n  isIterable,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\nclass AxiosError extends Error {\n  static from(error, code, config, request, response, customProps) {\n    const axiosError = new AxiosError(error.message, code || error.code, config, request, response);\n    axiosError.cause = error;\n    axiosError.name = error.name;\n\n    // Preserve status from the original error if not already set from response\n    if (error.status != null && axiosError.status == null) {\n      axiosError.status = error.status;\n    }\n\n    customProps && Object.assign(axiosError, customProps);\n    return axiosError;\n  }\n\n    /**\n     * Create an Error with the specified message, config, error code, request and response.\n     *\n     * @param {string} message The error message.\n     * @param {string} [code] The error code (for example, 'ECONNABORTED').\n     * @param {Object} [config] The config.\n     * @param {Object} [request] The request.\n     * @param {Object} [response] The response.\n     *\n     * @returns {Error} The created error.\n     */\n    constructor(message, code, config, request, response) {\n      super(message);\n      \n      // Make message enumerable to maintain backward compatibility\n      // The native Error constructor sets message as non-enumerable,\n      // but axios < v1.13.3 had it as enumerable\n      Object.defineProperty(this, 'message', {\n          value: message,\n          enumerable: true,\n          writable: true,\n          configurable: true\n      });\n      \n      this.name = 'AxiosError';\n      this.isAxiosError = true;\n      code && (this.code = code);\n      config && (this.config = config);\n      request && (this.request = request);\n      if (response) {\n          this.response = response;\n          this.status = response.status;\n      }\n    }\n\n  toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: utils.toJSONObject(this.config),\n      code: this.code,\n      status: this.status,\n    };\n  }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\n\nexport default AxiosError;\n", "var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n  this.source = null;\n  this.dataSize = 0;\n  this.maxDataSize = 1024 * 1024;\n  this.pauseStream = true;\n\n  this._maxDataSizeExceeded = false;\n  this._released = false;\n  this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n  var delayedStream = new this();\n\n  options = options || {};\n  for (var option in options) {\n    delayedStream[option] = options[option];\n  }\n\n  delayedStream.source = source;\n\n  var realEmit = source.emit;\n  source.emit = function() {\n    delayedStream._handleEmit(arguments);\n    return realEmit.apply(source, arguments);\n  };\n\n  source.on('error', function() {});\n  if (delayedStream.pauseStream) {\n    source.pause();\n  }\n\n  return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n  configurable: true,\n  enumerable: true,\n  get: function() {\n    return this.source.readable;\n  }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n  return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n  if (!this._released) {\n    this.release();\n  }\n\n  this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n  this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n  this._released = true;\n\n  this._bufferedEvents.forEach(function(args) {\n    this.emit.apply(this, args);\n  }.bind(this));\n  this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n  var r = Stream.prototype.pipe.apply(this, arguments);\n  this.resume();\n  return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n  if (this._released) {\n    this.emit.apply(this, args);\n    return;\n  }\n\n  if (args[0] === 'data') {\n    this.dataSize += args[1].length;\n    this._checkIfMaxDataSizeExceeded();\n  }\n\n  this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n  if (this._maxDataSizeExceeded) {\n    return;\n  }\n\n  if (this.dataSize <= this.maxDataSize) {\n    return;\n  }\n\n  this._maxDataSizeExceeded = true;\n  var message =\n    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n  this.emit('error', new Error(message));\n};\n", "var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n  this.writable = false;\n  this.readable = true;\n  this.dataSize = 0;\n  this.maxDataSize = 2 * 1024 * 1024;\n  this.pauseStreams = true;\n\n  this._released = false;\n  this._streams = [];\n  this._currentStream = null;\n  this._insideLoop = false;\n  this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n  var combinedStream = new this();\n\n  options = options || {};\n  for (var option in options) {\n    combinedStream[option] = options[option];\n  }\n\n  return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n  return (typeof stream !== 'function')\n    && (typeof stream !== 'string')\n    && (typeof stream !== 'boolean')\n    && (typeof stream !== 'number')\n    && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n  var isStreamLike = CombinedStream.isStreamLike(stream);\n\n  if (isStreamLike) {\n    if (!(stream instanceof DelayedStream)) {\n      var newStream = DelayedStream.create(stream, {\n        maxDataSize: Infinity,\n        pauseStream: this.pauseStreams,\n      });\n      stream.on('data', this._checkDataSize.bind(this));\n      stream = newStream;\n    }\n\n    this._handleErrors(stream);\n\n    if (this.pauseStreams) {\n      stream.pause();\n    }\n  }\n\n  this._streams.push(stream);\n  return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n  Stream.prototype.pipe.call(this, dest, options);\n  this.resume();\n  return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n  this._currentStream = null;\n\n  if (this._insideLoop) {\n    this._pendingNext = true;\n    return; // defer call\n  }\n\n  this._insideLoop = true;\n  try {\n    do {\n      this._pendingNext = false;\n      this._realGetNext();\n    } while (this._pendingNext);\n  } finally {\n    this._insideLoop = false;\n  }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n  var stream = this._streams.shift();\n\n\n  if (typeof stream == 'undefined') {\n    this.end();\n    return;\n  }\n\n  if (typeof stream !== 'function') {\n    this._pipeNext(stream);\n    return;\n  }\n\n  var getStream = stream;\n  getStream(function(stream) {\n    var isStreamLike = CombinedStream.isStreamLike(stream);\n    if (isStreamLike) {\n      stream.on('data', this._checkDataSize.bind(this));\n      this._handleErrors(stream);\n    }\n\n    this._pipeNext(stream);\n  }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n  this._currentStream = stream;\n\n  var isStreamLike = CombinedStream.isStreamLike(stream);\n  if (isStreamLike) {\n    stream.on('end', this._getNext.bind(this));\n    stream.pipe(this, {end: false});\n    return;\n  }\n\n  var value = stream;\n  this.write(value);\n  this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n  var self = this;\n  stream.on('error', function(err) {\n    self._emitError(err);\n  });\n};\n\nCombinedStream.prototype.write = function(data) {\n  this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n  if (!this.pauseStreams) {\n    return;\n  }\n\n  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n  this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n  if (!this._released) {\n    this._released = true;\n    this.writable = true;\n    this._getNext();\n  }\n\n  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n  this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n  this._reset();\n  this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n  this._reset();\n  this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n  this.writable = false;\n  this._streams = [];\n  this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n  this._updateDataSize();\n  if (this.dataSize <= this.maxDataSize) {\n    return;\n  }\n\n  var message =\n    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n  this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n  this.dataSize = 0;\n\n  var self = this;\n  this._streams.forEach(function(stream) {\n    if (!stream.dataSize) {\n      return;\n    }\n\n    self.dataSize += stream.dataSize;\n  });\n\n  if (this._currentStream && this._currentStream.dataSize) {\n    this.dataSize += this._currentStream.dataSize;\n  }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n  this._reset();\n  this.emit('error', err);\n};\n", "{\n  \"application/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/3gpdash-qoe-report+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/3gpp-ims+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphalforms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/a2l\": {\n    \"source\": \"iana\"\n  },\n  \"application/ace+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/activemessage\": {\n    \"source\": \"iana\"\n  },\n  \"application/activity+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-directory+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcost+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcostparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointprop+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointpropparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-error+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamcontrol+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/aml\": {\n    \"source\": \"iana\"\n  },\n  \"application/andrew-inset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez\"]\n  },\n  \"application/applefile\": {\n    \"source\": \"iana\"\n  },\n  \"application/applixware\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aw\"]\n  },\n  \"application/at+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/atf\": {\n    \"source\": \"iana\"\n  },\n  \"application/atfx\": {\n    \"source\": \"iana\"\n  },\n  \"application/atom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atom\"]\n  },\n  \"application/atomcat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomcat\"]\n  },\n  \"application/atomdeleted+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomdeleted\"]\n  },\n  \"application/atomicmail\": {\n    \"source\": \"iana\"\n  },\n  \"application/atomsvc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomsvc\"]\n  },\n  \"application/atsc-dwd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dwd\"]\n  },\n  \"application/atsc-dynamic-event-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/atsc-held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"held\"]\n  },\n  \"application/atsc-rdt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/atsc-rsat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsat\"]\n  },\n  \"application/atxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/auth-policy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/bacnet-xdd+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/batch-smtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/beep+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/calendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/calendar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xcs\"]\n  },\n  \"application/call-completion\": {\n    \"source\": \"iana\"\n  },\n  \"application/cals-1840\": {\n    \"source\": \"iana\"\n  },\n  \"application/captive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/cccex\": {\n    \"source\": \"iana\"\n  },\n  \"application/ccmp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ccxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ccxml\"]\n  },\n  \"application/cdfx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdfx\"]\n  },\n  \"application/cdmi-capability\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmia\"]\n  },\n  \"application/cdmi-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmic\"]\n  },\n  \"application/cdmi-domain\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmid\"]\n  },\n  \"application/cdmi-object\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmio\"]\n  },\n  \"application/cdmi-queue\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmiq\"]\n  },\n  \"application/cdni\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea-2018+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cellml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cfw\": {\n    \"source\": \"iana\"\n  },\n  \"application/city+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clr\": {\n    \"source\": \"iana\"\n  },\n  \"application/clue+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clue_info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cms\": {\n    \"source\": \"iana\"\n  },\n  \"application/cnrp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-group+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/commonground\": {\n    \"source\": \"iana\"\n  },\n  \"application/conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cose\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key-set\": {\n    \"source\": \"iana\"\n  },\n  \"application/cpl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cpl\"]\n  },\n  \"application/csrattrs\": {\n    \"source\": \"iana\"\n  },\n  \"application/csta+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cstadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/csvm+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cu-seeme\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cu\"]\n  },\n  \"application/cwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/cybercash\": {\n    \"source\": \"iana\"\n  },\n  \"application/dart\": {\n    \"compressible\": true\n  },\n  \"application/dash+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpd\"]\n  },\n  \"application/dash-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpp\"]\n  },\n  \"application/dashdelta\": {\n    \"source\": \"iana\"\n  },\n  \"application/davmount+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"davmount\"]\n  },\n  \"application/dca-rft\": {\n    \"source\": \"iana\"\n  },\n  \"application/dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/dec-dx\": {\n    \"source\": \"iana\"\n  },\n  \"application/dialog-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom\": {\n    \"source\": \"iana\"\n  },\n  \"application/dicom+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dii\": {\n    \"source\": \"iana\"\n  },\n  \"application/dit\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/docbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dbk\"]\n  },\n  \"application/dots+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/dskpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dssc+der\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dssc\"]\n  },\n  \"application/dssc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdssc\"]\n  },\n  \"application/dvcs\": {\n    \"source\": \"iana\"\n  },\n  \"application/ecmascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es\",\"ecma\"]\n  },\n  \"application/edi-consent\": {\n    \"source\": \"iana\"\n  },\n  \"application/edi-x12\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/edifact\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/efi\": {\n    \"source\": \"iana\"\n  },\n  \"application/elm+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/elm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.cap+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.comment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.deviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.ecall.msd\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.providerinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.serviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.subscriberinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.veds+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emma+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emma\"]\n  },\n  \"application/emotionml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emotionml\"]\n  },\n  \"application/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/epp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/epub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"epub\"]\n  },\n  \"application/eshop\": {\n    \"source\": \"iana\"\n  },\n  \"application/exi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exi\"]\n  },\n  \"application/expect-ct-report+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/express\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exp\"]\n  },\n  \"application/fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/fastsoap\": {\n    \"source\": \"iana\"\n  },\n  \"application/fdt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fdt\"]\n  },\n  \"application/fhir+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fhir+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fido.trusted-apps+json\": {\n    \"compressible\": true\n  },\n  \"application/fits\": {\n    \"source\": \"iana\"\n  },\n  \"application/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-tdpfr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pfr\"]\n  },\n  \"application/font-woff\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/framework-attributes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"geojson\"]\n  },\n  \"application/geo+json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/geopackage+sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/geoxacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/gltf-buffer\": {\n    \"source\": \"iana\"\n  },\n  \"application/gml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gml\"]\n  },\n  \"application/gpx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"gpx\"]\n  },\n  \"application/gxf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gxf\"]\n  },\n  \"application/gzip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gz\"]\n  },\n  \"application/h224\": {\n    \"source\": \"iana\"\n  },\n  \"application/held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/hjson\": {\n    \"extensions\": [\"hjson\"]\n  },\n  \"application/http\": {\n    \"source\": \"iana\"\n  },\n  \"application/hyperstudio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stk\"]\n  },\n  \"application/ibe-key-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pkg-reply+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pp-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/iges\": {\n    \"source\": \"iana\"\n  },\n  \"application/im-iscomposing+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/index\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.cmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.obj\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.response\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.vnd\": {\n    \"source\": \"iana\"\n  },\n  \"application/inkml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ink\",\"inkml\"]\n  },\n  \"application/iotp\": {\n    \"source\": \"iana\"\n  },\n  \"application/ipfix\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipfix\"]\n  },\n  \"application/ipp\": {\n    \"source\": \"iana\"\n  },\n  \"application/isup\": {\n    \"source\": \"iana\"\n  },\n  \"application/its+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"its\"]\n  },\n  \"application/java-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jar\",\"war\",\"ear\"]\n  },\n  \"application/java-serialized-object\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"ser\"]\n  },\n  \"application/java-vm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"class\"]\n  },\n  \"application/javascript\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"js\",\"mjs\"]\n  },\n  \"application/jf2feed+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jose\": {\n    \"source\": \"iana\"\n  },\n  \"application/jose+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jrd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jscalendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"json\",\"map\"]\n  },\n  \"application/json-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/json5\": {\n    \"extensions\": [\"json5\"]\n  },\n  \"application/jsonml+json\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonml\"]\n  },\n  \"application/jwk+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwk-set+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/kpml-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/kpml-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ld+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonld\"]\n  },\n  \"application/lgr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lgr\"]\n  },\n  \"application/link-format\": {\n    \"source\": \"iana\"\n  },\n  \"application/load-control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lost+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lostxml\"]\n  },\n  \"application/lostsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lpf+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/lxf\": {\n    \"source\": \"iana\"\n  },\n  \"application/mac-binhex40\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hqx\"]\n  },\n  \"application/mac-compactpro\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpt\"]\n  },\n  \"application/macwriteii\": {\n    \"source\": \"iana\"\n  },\n  \"application/mads+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mads\"]\n  },\n  \"application/manifest+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"webmanifest\"]\n  },\n  \"application/marc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mrc\"]\n  },\n  \"application/marcxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mrcx\"]\n  },\n  \"application/mathematica\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ma\",\"nb\",\"mb\"]\n  },\n  \"application/mathml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mathml\"]\n  },\n  \"application/mathml-content+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mathml-presentation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-associated-procedure-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-deregister+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-envelope+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-protection-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-reception-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-schedule+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-user-service-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbox\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbox\"]\n  },\n  \"application/media-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpf\"]\n  },\n  \"application/media_control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mediaservercontrol+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mscml\"]\n  },\n  \"application/merge-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/metalink+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"metalink\"]\n  },\n  \"application/metalink4+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"meta4\"]\n  },\n  \"application/mets+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mets\"]\n  },\n  \"application/mf4\": {\n    \"source\": \"iana\"\n  },\n  \"application/mikey\": {\n    \"source\": \"iana\"\n  },\n  \"application/mipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/missing-blocks+cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/mmt-aei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"maei\"]\n  },\n  \"application/mmt-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musd\"]\n  },\n  \"application/mods+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mods\"]\n  },\n  \"application/moss-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/moss-signature\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/mp21\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m21\",\"mp21\"]\n  },\n  \"application/mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mp4s\",\"m4p\"]\n  },\n  \"application/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod-xmt\": {\n    \"source\": \"iana\"\n  },\n  \"application/mrb-consumer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mrb-publish+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/msc-ivr+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msc-mixer+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msword\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"doc\",\"dot\"]\n  },\n  \"application/mud+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/multipart-core\": {\n    \"source\": \"iana\"\n  },\n  \"application/mxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxf\"]\n  },\n  \"application/n-quads\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nq\"]\n  },\n  \"application/n-triples\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nt\"]\n  },\n  \"application/nasdata\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-checkgroups\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-groupinfo\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-transmission\": {\n    \"source\": \"iana\"\n  },\n  \"application/nlsml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/node\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cjs\"]\n  },\n  \"application/nss\": {\n    \"source\": \"iana\"\n  },\n  \"application/oauth-authz-req+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/oblivious-dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/octet-stream\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n  },\n  \"application/oda\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oda\"]\n  },\n  \"application/odm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/odx\": {\n    \"source\": \"iana\"\n  },\n  \"application/oebps-package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"opf\"]\n  },\n  \"application/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogx\"]\n  },\n  \"application/omdoc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"omdoc\"]\n  },\n  \"application/onenote\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n  },\n  \"application/opc-nodeset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/oscore\": {\n    \"source\": \"iana\"\n  },\n  \"application/oxps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oxps\"]\n  },\n  \"application/p21\": {\n    \"source\": \"iana\"\n  },\n  \"application/p21+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/p2p-overlay+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"relo\"]\n  },\n  \"application/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/passport\": {\n    \"source\": \"iana\"\n  },\n  \"application/patch-ops-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xer\"]\n  },\n  \"application/pdf\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pdf\"]\n  },\n  \"application/pdx\": {\n    \"source\": \"iana\"\n  },\n  \"application/pem-certificate-chain\": {\n    \"source\": \"iana\"\n  },\n  \"application/pgp-encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pgp\"]\n  },\n  \"application/pgp-keys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\"]\n  },\n  \"application/pgp-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\",\"sig\"]\n  },\n  \"application/pics-rules\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prf\"]\n  },\n  \"application/pidf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pidf-diff+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pkcs10\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p10\"]\n  },\n  \"application/pkcs12\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkcs7-mime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7m\",\"p7c\"]\n  },\n  \"application/pkcs7-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7s\"]\n  },\n  \"application/pkcs8\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p8\"]\n  },\n  \"application/pkcs8-encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkix-attr-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ac\"]\n  },\n  \"application/pkix-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cer\"]\n  },\n  \"application/pkix-crl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"crl\"]\n  },\n  \"application/pkix-pkipath\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pkipath\"]\n  },\n  \"application/pkixcmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pki\"]\n  },\n  \"application/pls+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pls\"]\n  },\n  \"application/poc-settings+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/postscript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ai\",\"eps\",\"ps\"]\n  },\n  \"application/ppsp-tracker+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/provenance+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"provx\"]\n  },\n  \"application/prs.alvestrand.titrax-sheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.cww\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cww\"]\n  },\n  \"application/prs.cyn\": {\n    \"source\": \"iana\",\n    \"charset\": \"7-BIT\"\n  },\n  \"application/prs.hpub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/prs.nprend\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.plucker\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.rdf-xml-crypt\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.xsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/pskc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pskcxml\"]\n  },\n  \"application/pvd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/qsig\": {\n    \"source\": \"iana\"\n  },\n  \"application/raml+yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"raml\"]\n  },\n  \"application/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/rdap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rdf\",\"owl\"]\n  },\n  \"application/reginfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rif\"]\n  },\n  \"application/relax-ng-compact-syntax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rnc\"]\n  },\n  \"application/remote-printing\": {\n    \"source\": \"iana\"\n  },\n  \"application/reputon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/resource-lists+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rl\"]\n  },\n  \"application/resource-lists-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rld\"]\n  },\n  \"application/rfc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/riscos\": {\n    \"source\": \"iana\"\n  },\n  \"application/rlmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rls-services+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rs\"]\n  },\n  \"application/route-apd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rapd\"]\n  },\n  \"application/route-s-tsid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sls\"]\n  },\n  \"application/route-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rusd\"]\n  },\n  \"application/rpki-ghostbusters\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gbr\"]\n  },\n  \"application/rpki-manifest\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mft\"]\n  },\n  \"application/rpki-publication\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-roa\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"roa\"]\n  },\n  \"application/rpki-updown\": {\n    \"source\": \"iana\"\n  },\n  \"application/rsd+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rsd\"]\n  },\n  \"application/rss+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rss\"]\n  },\n  \"application/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"application/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"application/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"application/samlassertion+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/samlmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif-external-properties+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sbe\": {\n    \"source\": \"iana\"\n  },\n  \"application/sbml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sbml\"]\n  },\n  \"application/scaip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scim+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scvp-cv-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scq\"]\n  },\n  \"application/scvp-cv-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scs\"]\n  },\n  \"application/scvp-vp-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spq\"]\n  },\n  \"application/scvp-vp-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spp\"]\n  },\n  \"application/sdp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sdp\"]\n  },\n  \"application/secevent+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"senmlx\"]\n  },\n  \"application/senml-etch+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml-etch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sensml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sensmlx\"]\n  },\n  \"application/sensml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sep+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sep-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/session-info\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setpay\"]\n  },\n  \"application/set-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-registration-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setreg\"]\n  },\n  \"application/sgml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sgml-open-catalog\": {\n    \"source\": \"iana\"\n  },\n  \"application/shf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"shf\"]\n  },\n  \"application/sieve\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"siv\",\"sieve\"]\n  },\n  \"application/simple-filter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/simple-message-summary\": {\n    \"source\": \"iana\"\n  },\n  \"application/simplesymbolcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/sipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/slate\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"smi\",\"smil\"]\n  },\n  \"application/smpte336m\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sparql-query\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rq\"]\n  },\n  \"application/sparql-results+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"srx\"]\n  },\n  \"application/spdx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/spirits-event+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sql\": {\n    \"source\": \"iana\"\n  },\n  \"application/srgs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gram\"]\n  },\n  \"application/srgs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"grxml\"]\n  },\n  \"application/sru+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sru\"]\n  },\n  \"application/ssdl+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ssdl\"]\n  },\n  \"application/ssml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ssml\"]\n  },\n  \"application/stix+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/swid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"swidtag\"]\n  },\n  \"application/tamp-apex-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-apex-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-error\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tar\": {\n    \"compressible\": true\n  },\n  \"application/taxii+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/td+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tei\",\"teicorpus\"]\n  },\n  \"application/tetra_isi\": {\n    \"source\": \"iana\"\n  },\n  \"application/thraud+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tfi\"]\n  },\n  \"application/timestamp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamp-reply\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamped-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tsd\"]\n  },\n  \"application/tlsrpt+gzip\": {\n    \"source\": \"iana\"\n  },\n  \"application/tlsrpt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tnauthlist\": {\n    \"source\": \"iana\"\n  },\n  \"application/token-introspection+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/toml\": {\n    \"compressible\": true,\n    \"extensions\": [\"toml\"]\n  },\n  \"application/trickle-ice-sdpfrag\": {\n    \"source\": \"iana\"\n  },\n  \"application/trig\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"trig\"]\n  },\n  \"application/ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttml\"]\n  },\n  \"application/tve-trigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif-leap\": {\n    \"source\": \"iana\"\n  },\n  \"application/ubjson\": {\n    \"compressible\": false,\n    \"extensions\": [\"ubj\"]\n  },\n  \"application/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-grpsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/urc-ressheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsheet\"]\n  },\n  \"application/urc-targetdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"td\"]\n  },\n  \"application/urc-uisocketdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vemmi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vividence.scriptfile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.1000minds.decision-model+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"1km\"]\n  },\n  \"application/vnd.3gpp-prose+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-prose-pc3ch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-v2x-local-service-information\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.5gnas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.access-transfer-events+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.bsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gmop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gtpc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.interworking-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.lpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mc-signalling-ear\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-signalling\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-signed+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mid-call+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ngap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pfcp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pic-bw-large\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-small\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"psb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-var\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pvb\"]\n  },\n  \"application/vnd.3gpp.s1ap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-ext+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.state-and-event-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ussd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.tcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tcap\"]\n  },\n  \"application/vnd.3lightssoftware.imagescal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3m.post-it-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pwn\"]\n  },\n  \"application/vnd.accpac.simply.aso\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aso\"]\n  },\n  \"application/vnd.accpac.simply.imp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"imp\"]\n  },\n  \"application/vnd.acucobol\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acu\"]\n  },\n  \"application/vnd.acucorp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atc\",\"acutc\"]\n  },\n  \"application/vnd.adobe.air-application-installer-package+zip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"air\"]\n  },\n  \"application/vnd.adobe.flash.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.formscentral.fcdt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcdt\"]\n  },\n  \"application/vnd.adobe.fxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fxp\",\"fxpl\"]\n  },\n  \"application/vnd.adobe.partial-upload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.xdp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdp\"]\n  },\n  \"application/vnd.adobe.xfdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdf\"]\n  },\n  \"application/vnd.aether.imp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata-pagedef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.cmoca-cmresource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-charset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codedfont\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codepage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-cmtable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-formdef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-mediummap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-objectcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-overlay\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-pagesegment\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.age\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"age\"]\n  },\n  \"application/vnd.ah-barcode\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ahead.space\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ahead\"]\n  },\n  \"application/vnd.airzip.filesecure.azf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azf\"]\n  },\n  \"application/vnd.airzip.filesecure.azs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azs\"]\n  },\n  \"application/vnd.amadeus+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.amazon.ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"azw\"]\n  },\n  \"application/vnd.amazon.mobi8-ebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.americandynamics.acc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acc\"]\n  },\n  \"application/vnd.amiga.ami\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ami\"]\n  },\n  \"application/vnd.amundsen.maze+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.android.ota\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.android.package-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"apk\"]\n  },\n  \"application/vnd.anki\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.anser-web-certificate-issue-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cii\"]\n  },\n  \"application/vnd.anser-web-funds-transfer-initiation\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fti\"]\n  },\n  \"application/vnd.antix.game-component\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atx\"]\n  },\n  \"application/vnd.apache.arrow.file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.arrow.stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.compact\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.json\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.api+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.aplextor.warrp+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apothekende.reservation+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apple.installer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpkg\"]\n  },\n  \"application/vnd.apple.keynote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"key\"]\n  },\n  \"application/vnd.apple.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m3u8\"]\n  },\n  \"application/vnd.apple.numbers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/vnd.apple.pages\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pages\"]\n  },\n  \"application/vnd.apple.pkpass\": {\n    \"compressible\": false,\n    \"extensions\": [\"pkpass\"]\n  },\n  \"application/vnd.arastra.swi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.aristanetworks.swi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"swi\"]\n  },\n  \"application/vnd.artisan+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.artsquare\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.astraea-software.iota\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iota\"]\n  },\n  \"application/vnd.audiograph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aep\"]\n  },\n  \"application/vnd.autopackage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.avalon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.avistar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.balsamiq.bmml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmml\"]\n  },\n  \"application/vnd.balsamiq.bmpr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.banana-accounting\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.error\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bekitzur-stech+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bint.med-content\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.biopax.rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.blink-idb-value-wrapper\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.blueice.multipass\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpm\"]\n  },\n  \"application/vnd.bluetooth.ep.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bluetooth.le.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bmi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bmi\"]\n  },\n  \"application/vnd.bpf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bpf3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.businessobjects\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rep\"]\n  },\n  \"application/vnd.byu.uapi+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cab-jscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-cpdl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-lips\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.capasystems-pg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cendio.thinlinc.clientconf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.century-systems.tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chemdraw+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdxml\"]\n  },\n  \"application/vnd.chess-pgn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chipnuts.karaoke-mmd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmd\"]\n  },\n  \"application/vnd.ciedi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cinderella\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdy\"]\n  },\n  \"application/vnd.cirpack.isdn-ext\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.citationstyles.style+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csl\"]\n  },\n  \"application/vnd.claymore\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cla\"]\n  },\n  \"application/vnd.cloanto.rp9\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rp9\"]\n  },\n  \"application/vnd.clonk.c4group\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amc\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amz\"]\n  },\n  \"application/vnd.coffeescript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collection+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.doc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.next+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.comicbook+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.comicbook-rar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commerce-battelle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commonspace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"csp\"]\n  },\n  \"application/vnd.contact.cmsg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdbcmsg\"]\n  },\n  \"application/vnd.coreos.ignition+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cosmocaller\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmc\"]\n  },\n  \"application/vnd.crick.clicker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkx\"]\n  },\n  \"application/vnd.crick.clicker.keyboard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkk\"]\n  },\n  \"application/vnd.crick.clicker.palette\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkp\"]\n  },\n  \"application/vnd.crick.clicker.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkt\"]\n  },\n  \"application/vnd.crick.clicker.wordbank\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkw\"]\n  },\n  \"application/vnd.criticaltools.wbs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wbs\"]\n  },\n  \"application/vnd.cryptii.pipe+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.crypto-shade-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.vault\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ctc-posml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pml\"]\n  },\n  \"application/vnd.ctct.ws+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cups-pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-postscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-ppd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppd\"]\n  },\n  \"application/vnd.cups-raster\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-raw\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl.car\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"car\"]\n  },\n  \"application/vnd.curl.pcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcurl\"]\n  },\n  \"application/vnd.cyan.dean.root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cybank\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cyclonedx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cyclonedx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.d2l.coursepackage1p0+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.d3m-dataset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.d3m-problem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dart\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dart\"]\n  },\n  \"application/vnd.data-vision.rdz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rdz\"]\n  },\n  \"application/vnd.datapackage+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dataresource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dbf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dbf\"]\n  },\n  \"application/vnd.debian.binary-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dece.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n  },\n  \"application/vnd.dece.ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uvt\",\"uvvt\"]\n  },\n  \"application/vnd.dece.unspecified\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvx\",\"uvvx\"]\n  },\n  \"application/vnd.dece.zip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvz\",\"uvvz\"]\n  },\n  \"application/vnd.denovo.fcselayout-link\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fe_launch\"]\n  },\n  \"application/vnd.desmume.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dm.delegation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dna\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dna\"]\n  },\n  \"application/vnd.document+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dolby.mlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mlp\"]\n  },\n  \"application/vnd.dolby.mobile.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dolby.mobile.2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.doremir.scorecloud-binary-document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dpgraph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dpg\"]\n  },\n  \"application/vnd.dreamfactory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dfac\"]\n  },\n  \"application/vnd.drive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ds-keypoint\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"kpxx\"]\n  },\n  \"application/vnd.dtg.local\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.flash\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ait\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ait\"]\n  },\n  \"application/vnd.dvb.dvbisl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.dvbj\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.esgcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcdftnotifaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgpdd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcroaming\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-base\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-enhancement\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-aggregate-root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-container+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-generic+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-msglist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-init+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.pfr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.service\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svc\"]\n  },\n  \"application/vnd.dxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dynageo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"geo\"]\n  },\n  \"application/vnd.dzr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.easykaraoke.cdgdownload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecdis-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecip.rlp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eclipse.ditto+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ecowin.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mag\"]\n  },\n  \"application/vnd.ecowin.filerequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.fileupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.series\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesrequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.img\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.iso\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.emclient.accessrequest+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.enliven\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nml\"]\n  },\n  \"application/vnd.enphase.envoy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eprints.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.epson.esf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esf\"]\n  },\n  \"application/vnd.epson.msf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msf\"]\n  },\n  \"application/vnd.epson.quickanime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qam\"]\n  },\n  \"application/vnd.epson.salt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"slt\"]\n  },\n  \"application/vnd.epson.ssf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ssf\"]\n  },\n  \"application/vnd.ericsson.quickcall\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.espass-espass+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.eszigno3+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es3\",\"et3\"]\n  },\n  \"application/vnd.etsi.aoc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.asic-e+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.asic-s+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.cug+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvcommand+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-bc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-cod+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-npvr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvservice+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mcid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mheg5\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.pstn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.sci+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.simservs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.timestamp-token\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.tsl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.tsl.der\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eu.kasparian.car+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.eudora.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.profile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.settings\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.theme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.exstream-empower+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.exstream-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ezpix-album\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez2\"]\n  },\n  \"application/vnd.ezpix-package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez3\"]\n  },\n  \"application/vnd.f-secure.mobile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.familysearch.gedcom+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.fastcopy-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fdf\"]\n  },\n  \"application/vnd.fdsn.mseed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseed\"]\n  },\n  \"application/vnd.fdsn.seed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"seed\",\"dataless\"]\n  },\n  \"application/vnd.ffsns\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ficlab.flb+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.filmit.zfc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fints\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.firemonkeys.cloudcell\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.flographit\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gph\"]\n  },\n  \"application/vnd.fluxtime.clip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ftc\"]\n  },\n  \"application/vnd.font-fontforge-sfd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.framemaker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n  },\n  \"application/vnd.frogans.fnc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fnc\"]\n  },\n  \"application/vnd.frogans.ltf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ltf\"]\n  },\n  \"application/vnd.fsc.weblaunch\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fsc\"]\n  },\n  \"application/vnd.fujifilm.fb.docuworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.binder\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.jfi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fujitsu.oasys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oas\"]\n  },\n  \"application/vnd.fujitsu.oasys2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa2\"]\n  },\n  \"application/vnd.fujitsu.oasys3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa3\"]\n  },\n  \"application/vnd.fujitsu.oasysgp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fg5\"]\n  },\n  \"application/vnd.fujitsu.oasysprs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bh2\"]\n  },\n  \"application/vnd.fujixerox.art-ex\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.art4\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.ddd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ddd\"]\n  },\n  \"application/vnd.fujixerox.docuworks\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdw\"]\n  },\n  \"application/vnd.fujixerox.docuworks.binder\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xbd\"]\n  },\n  \"application/vnd.fujixerox.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.hbpl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fut-misnet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fuzzysheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fzs\"]\n  },\n  \"application/vnd.genomatix.tuxedo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txd\"]\n  },\n  \"application/vnd.gentics.grd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geocube+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geogebra.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggb\"]\n  },\n  \"application/vnd.geogebra.slides\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.geogebra.tool\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggt\"]\n  },\n  \"application/vnd.geometry-explorer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gex\",\"gre\"]\n  },\n  \"application/vnd.geonext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gxt\"]\n  },\n  \"application/vnd.geoplan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g2w\"]\n  },\n  \"application/vnd.geospace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3w\"]\n  },\n  \"application/vnd.gerber\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gmx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gmx\"]\n  },\n  \"application/vnd.google-apps.document\": {\n    \"compressible\": false,\n    \"extensions\": [\"gdoc\"]\n  },\n  \"application/vnd.google-apps.presentation\": {\n    \"compressible\": false,\n    \"extensions\": [\"gslides\"]\n  },\n  \"application/vnd.google-apps.spreadsheet\": {\n    \"compressible\": false,\n    \"extensions\": [\"gsheet\"]\n  },\n  \"application/vnd.google-earth.kml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"kml\"]\n  },\n  \"application/vnd.google-earth.kmz\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"kmz\"]\n  },\n  \"application/vnd.gov.sk.e-form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.gov.sk.e-form+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.grafeq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gqf\",\"gqs\"]\n  },\n  \"application/vnd.gridmp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.groove-account\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gac\"]\n  },\n  \"application/vnd.groove-help\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ghf\"]\n  },\n  \"application/vnd.groove-identity-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gim\"]\n  },\n  \"application/vnd.groove-injector\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"grv\"]\n  },\n  \"application/vnd.groove-tool-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtm\"]\n  },\n  \"application/vnd.groove-tool-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpl\"]\n  },\n  \"application/vnd.groove-vcard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcg\"]\n  },\n  \"application/vnd.hal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"hal\"]\n  },\n  \"application/vnd.handheld-entertainment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zmm\"]\n  },\n  \"application/vnd.hbci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hbci\"]\n  },\n  \"application/vnd.hc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hcl-bireports\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hdt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.heroku+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hhe.lesson-player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"les\"]\n  },\n  \"application/vnd.hl7cda+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hl7v2+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hp-hpgl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpgl\"]\n  },\n  \"application/vnd.hp-hpid\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpid\"]\n  },\n  \"application/vnd.hp-hps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hps\"]\n  },\n  \"application/vnd.hp-jlyt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jlt\"]\n  },\n  \"application/vnd.hp-pcl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcl\"]\n  },\n  \"application/vnd.hp-pclxl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pclxl\"]\n  },\n  \"application/vnd.httphone\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hydrostatix.sof-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfd-hdstx\"]\n  },\n  \"application/vnd.hyper+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyper-item+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyperdrive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hzn-3d-crossword\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.electronic-media\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.minipay\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpy\"]\n  },\n  \"application/vnd.ibm.modcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n  },\n  \"application/vnd.ibm.rights-management\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"irm\"]\n  },\n  \"application/vnd.ibm.secure-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sc\"]\n  },\n  \"application/vnd.iccprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"icc\",\"icm\"]\n  },\n  \"application/vnd.ieee.1905\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.igloader\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igl\"]\n  },\n  \"application/vnd.imagemeter.folder+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.imagemeter.image+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.immervision-ivp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivp\"]\n  },\n  \"application/vnd.immervision-ivu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivu\"]\n  },\n  \"application/vnd.ims.imsccv1p1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.lis.v2.result+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informedcontrol.rms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informix-visionary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.innopath.wamp.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.insors.igm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igm\"]\n  },\n  \"application/vnd.intercon.formnet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpw\",\"xpx\"]\n  },\n  \"application/vnd.intergeo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"i2g\"]\n  },\n  \"application/vnd.intertrust.digibox\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intertrust.nncp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intu.qbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qbo\"]\n  },\n  \"application/vnd.intu.qfx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qfx\"]\n  },\n  \"application/vnd.iptc.g2.catalogitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.conceptitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.packageitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.planningitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ipunplugged.rcprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rcprofile\"]\n  },\n  \"application/vnd.irepository.package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"irp\"]\n  },\n  \"application/vnd.is-xpr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpr\"]\n  },\n  \"application/vnd.isac.fcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcs\"]\n  },\n  \"application/vnd.iso11783-10+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.jam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jam\"]\n  },\n  \"application/vnd.japannet-directory-service\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-jpnstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-payment-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-setstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.jcp.javame.midlet-rms\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rms\"]\n  },\n  \"application/vnd.jisp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jisp\"]\n  },\n  \"application/vnd.joost.joda-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"joda\"]\n  },\n  \"application/vnd.jsk.isdn-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.kahootz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktz\",\"ktr\"]\n  },\n  \"application/vnd.kde.karbon\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"karbon\"]\n  },\n  \"application/vnd.kde.kchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chrt\"]\n  },\n  \"application/vnd.kde.kformula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kfo\"]\n  },\n  \"application/vnd.kde.kivio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flw\"]\n  },\n  \"application/vnd.kde.kontour\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kon\"]\n  },\n  \"application/vnd.kde.kpresenter\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kpr\",\"kpt\"]\n  },\n  \"application/vnd.kde.kspread\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ksp\"]\n  },\n  \"application/vnd.kde.kword\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kwd\",\"kwt\"]\n  },\n  \"application/vnd.kenameaapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"htke\"]\n  },\n  \"application/vnd.kidspiration\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kia\"]\n  },\n  \"application/vnd.kinar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kne\",\"knp\"]\n  },\n  \"application/vnd.koan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n  },\n  \"application/vnd.kodak-descriptor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sse\"]\n  },\n  \"application/vnd.las\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.las.las+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.las.las+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lasxml\"]\n  },\n  \"application/vnd.laszip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.leap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.liberty-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.llamagraphics.life-balance.desktop\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lbd\"]\n  },\n  \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lbe\"]\n  },\n  \"application/vnd.logipipe.circuit+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.loom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.lotus-1-2-3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"123\"]\n  },\n  \"application/vnd.lotus-approach\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"apr\"]\n  },\n  \"application/vnd.lotus-freelance\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pre\"]\n  },\n  \"application/vnd.lotus-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nsf\"]\n  },\n  \"application/vnd.lotus-organizer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"org\"]\n  },\n  \"application/vnd.lotus-screencam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scm\"]\n  },\n  \"application/vnd.lotus-wordpro\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lwp\"]\n  },\n  \"application/vnd.macports.portpkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"portpkg\"]\n  },\n  \"application/vnd.mapbox-vector-tile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mvt\"]\n  },\n  \"application/vnd.marlin.drm.actiontoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.conftoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.license+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.mdcf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mason+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.maxar.archive.3tz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.maxmind.maxmind-db\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mcd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mcd\"]\n  },\n  \"application/vnd.medcalcdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mc1\"]\n  },\n  \"application/vnd.mediastation.cdkey\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdkey\"]\n  },\n  \"application/vnd.meridian-slingshot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mfer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mwf\"]\n  },\n  \"application/vnd.mfmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mfm\"]\n  },\n  \"application/vnd.micro+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.micrografx.flo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flo\"]\n  },\n  \"application/vnd.micrografx.igx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igx\"]\n  },\n  \"application/vnd.microsoft.portable-executable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.microsoft.windows.thumbnail-cache\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.miele+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.mif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mif\"]\n  },\n  \"application/vnd.minisoft-hp3000-save\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mobius.daf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"daf\"]\n  },\n  \"application/vnd.mobius.dis\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dis\"]\n  },\n  \"application/vnd.mobius.mbk\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbk\"]\n  },\n  \"application/vnd.mobius.mqy\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mqy\"]\n  },\n  \"application/vnd.mobius.msl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msl\"]\n  },\n  \"application/vnd.mobius.plc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plc\"]\n  },\n  \"application/vnd.mobius.txf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txf\"]\n  },\n  \"application/vnd.mophun.application\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpn\"]\n  },\n  \"application/vnd.mophun.certificate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpc\"]\n  },\n  \"application/vnd.motorola.flexsuite\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.adsi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.fis\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.gotap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.kmr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.ttc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.wem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.iprm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mozilla.xul+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xul\"]\n  },\n  \"application/vnd.ms-3mfdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-artgalry\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cil\"]\n  },\n  \"application/vnd.ms-asf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-cab-compressed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cab\"]\n  },\n  \"application/vnd.ms-color.iccprofile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-excel\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n  },\n  \"application/vnd.ms-excel.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlam\"]\n  },\n  \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsb\"]\n  },\n  \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsm\"]\n  },\n  \"application/vnd.ms-excel.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltm\"]\n  },\n  \"application/vnd.ms-fontobject\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eot\"]\n  },\n  \"application/vnd.ms-htmlhelp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chm\"]\n  },\n  \"application/vnd.ms-ims\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ims\"]\n  },\n  \"application/vnd.ms-lrm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lrm\"]\n  },\n  \"application/vnd.ms-office.activex+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-officetheme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"thmx\"]\n  },\n  \"application/vnd.ms-opentype\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-outlook\": {\n    \"compressible\": false,\n    \"extensions\": [\"msg\"]\n  },\n  \"application/vnd.ms-package.obfuscated-opentype\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-pki.seccat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cat\"]\n  },\n  \"application/vnd.ms-pki.stl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stl\"]\n  },\n  \"application/vnd.ms-playready.initiator+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-powerpoint\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n  },\n  \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppam\"]\n  },\n  \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pptm\"]\n  },\n  \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldm\"]\n  },\n  \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsm\"]\n  },\n  \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potm\"]\n  },\n  \"application/vnd.ms-printdevicecapabilities+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printing.printticket+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printschematicket+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-project\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpp\",\"mpt\"]\n  },\n  \"application/vnd.ms-tnef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.nwprinting.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.printerpairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.wsd.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-word.document.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"docm\"]\n  },\n  \"application/vnd.ms-word.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotm\"]\n  },\n  \"application/vnd.ms-works\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n  },\n  \"application/vnd.ms-wpl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpl\"]\n  },\n  \"application/vnd.ms-xpsdocument\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xps\"]\n  },\n  \"application/vnd.msa-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mseq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseq\"]\n  },\n  \"application/vnd.msign\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator.cif\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.music-niff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.musician\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mus\"]\n  },\n  \"application/vnd.muvee.style\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msty\"]\n  },\n  \"application/vnd.mynfc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"taglet\"]\n  },\n  \"application/vnd.nacamar.ybrid+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ncd.control\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ncd.reference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nearst.inv+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nebumind.line\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nervana\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.netfpx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.neurolanguage.nlu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nlu\"]\n  },\n  \"application/vnd.nimn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.nitro.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.snes.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nitf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ntf\",\"nitf\"]\n  },\n  \"application/vnd.noblenet-directory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnd\"]\n  },\n  \"application/vnd.noblenet-sealer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nns\"]\n  },\n  \"application/vnd.noblenet-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnw\"]\n  },\n  \"application/vnd.nokia.catalogs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.iptv.config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.isds-radio-presets\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.landmarkcollection+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.n-gage.ac+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ac\"]\n  },\n  \"application/vnd.nokia.n-gage.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ngdat\"]\n  },\n  \"application/vnd.nokia.n-gage.symbian.install\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"n-gage\"]\n  },\n  \"application/vnd.nokia.ncd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.radio-preset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpst\"]\n  },\n  \"application/vnd.nokia.radio-presets\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpss\"]\n  },\n  \"application/vnd.novadigm.edm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edm\"]\n  },\n  \"application/vnd.novadigm.edx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edx\"]\n  },\n  \"application/vnd.novadigm.ext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ext\"]\n  },\n  \"application/vnd.ntt-local.content-share\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.file-transfer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.ogw_remote-access\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_remote\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oasis.opendocument.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odc\"]\n  },\n  \"application/vnd.oasis.opendocument.chart-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otc\"]\n  },\n  \"application/vnd.oasis.opendocument.database\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odb\"]\n  },\n  \"application/vnd.oasis.opendocument.formula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odf\"]\n  },\n  \"application/vnd.oasis.opendocument.formula-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odft\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odg\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otg\"]\n  },\n  \"application/vnd.oasis.opendocument.image\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odi\"]\n  },\n  \"application/vnd.oasis.opendocument.image-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oti\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odp\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otp\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ods\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ots\"]\n  },\n  \"application/vnd.oasis.opendocument.text\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odt\"]\n  },\n  \"application/vnd.oasis.opendocument.text-master\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odm\"]\n  },\n  \"application/vnd.oasis.opendocument.text-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ott\"]\n  },\n  \"application/vnd.oasis.opendocument.text-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oth\"]\n  },\n  \"application/vnd.obn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ocf+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oci.image.manifest.v1+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oftn.l10n+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessdownload+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessstreaming+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.cspg-hexbinary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.dae.svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.dae.xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.pae.gem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.spdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.spdlist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.ueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.userprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.olpc-sugar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xo\"]\n  },\n  \"application/vnd.oma-scws-config\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.drm-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.imd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.ltkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.notification+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.provisioningtrigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgboot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgdd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sgdu\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.simple-symbol-container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sprov+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.stkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-address-book+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-feature-handler+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-pcc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-subs-invite+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-user-prefs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dcdc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dd2+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dd2\"]\n  },\n  \"application/vnd.oma.drm.risd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.group-usage-list+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.lwm2m+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+tlv\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.pal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.final-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.groups+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.push\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.scidm.messages+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.xcap-directory+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-email+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-file+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-folder+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omaloc-supl-init\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepager\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertat\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openblox.game+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"obgx\"]\n  },\n  \"application/vnd.openblox.game-binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openeye.oeb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openofficeorg.extension\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"oxt\"]\n  },\n  \"application/vnd.openstreetmap.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osm\"]\n  },\n  \"application/vnd.opentimestamps.ots\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pptx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xlsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"docx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.core-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.relationships+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oracle.resource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.orange.indata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osa.netdeploy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgeo.mapguide.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgp\"]\n  },\n  \"application/vnd.osgi.bundle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgi.dp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dp\"]\n  },\n  \"application/vnd.osgi.subsystem\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esa\"]\n  },\n  \"application/vnd.otps.ct-kip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oxli.countgraph\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pagerduty+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.palm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n  },\n  \"application/vnd.panoply\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.paos.xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patentdive\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patientecommsdoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pawaafile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"paw\"]\n  },\n  \"application/vnd.pcos\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pg.format\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"str\"]\n  },\n  \"application/vnd.pg.osasli\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ei6\"]\n  },\n  \"application/vnd.piaccess.application-licence\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.picsel\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"efif\"]\n  },\n  \"application/vnd.pmi.widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wg\"]\n  },\n  \"application/vnd.poc.group-advertisement+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.pocketlearn\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plf\"]\n  },\n  \"application/vnd.powerbuilder6\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pbd\"]\n  },\n  \"application/vnd.powerbuilder6-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.preminet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.previewsystems.box\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"box\"]\n  },\n  \"application/vnd.proteus.magazine\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgz\"]\n  },\n  \"application/vnd.psfs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.publishare-delta-tree\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qps\"]\n  },\n  \"application/vnd.pvi.ptid1\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ptid\"]\n  },\n  \"application/vnd.pwg-multiplexed\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pwg-xhtml-print+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.qualcomm.brew-app-res\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quarantainenet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quark.quarkxpress\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n  },\n  \"application/vnd.quobject-quoxdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-stream+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-base+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-group+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-speech+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-transform+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rainstor.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rapid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rar\"]\n  },\n  \"application/vnd.realvnc.bed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bed\"]\n  },\n  \"application/vnd.recordare.musicxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxl\"]\n  },\n  \"application/vnd.recordare.musicxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musicxml\"]\n  },\n  \"application/vnd.renlearn.rlprint\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.resilient.logic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.restful+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rig.cryptonote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cryptonote\"]\n  },\n  \"application/vnd.rim.cod\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cod\"]\n  },\n  \"application/vnd.rn-realmedia\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rm\"]\n  },\n  \"application/vnd.rn-realmedia-vbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmvb\"]\n  },\n  \"application/vnd.route66.link66+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"link66\"]\n  },\n  \"application/vnd.rs-274x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ruckus.download\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.s3sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sailingtracker.track\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"st\"]\n  },\n  \"application/vnd.sar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.cid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.mid2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.scribus\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.3df\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.csf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.doc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.eml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.mht\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.net\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.ppt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.tiff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.xls\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.seemail\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"see\"]\n  },\n  \"application/vnd.seis+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.sema\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sema\"]\n  },\n  \"application/vnd.semd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semd\"]\n  },\n  \"application/vnd.semf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semf\"]\n  },\n  \"application/vnd.shade-save-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shana.informed.formdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ifm\"]\n  },\n  \"application/vnd.shana.informed.formtemplate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"itp\"]\n  },\n  \"application/vnd.shana.informed.interchange\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iif\"]\n  },\n  \"application/vnd.shana.informed.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipk\"]\n  },\n  \"application/vnd.shootproof+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shopkick+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sigrok.session\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.simtech-mindmapper\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"twd\",\"twds\"]\n  },\n  \"application/vnd.siren+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.smaf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmf\"]\n  },\n  \"application/vnd.smart.notebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.smart.teacher\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"teacher\"]\n  },\n  \"application/vnd.snesdev-page-table\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.software602.filler.form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fo\"]\n  },\n  \"application/vnd.software602.filler.form-xml-zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.solent.sdkm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sdkm\",\"sdkd\"]\n  },\n  \"application/vnd.spotfire.dxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxp\"]\n  },\n  \"application/vnd.spotfire.sfs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfs\"]\n  },\n  \"application/vnd.sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-cod\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-dtf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-ntf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.stardivision.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdc\"]\n  },\n  \"application/vnd.stardivision.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sda\"]\n  },\n  \"application/vnd.stardivision.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdd\"]\n  },\n  \"application/vnd.stardivision.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smf\"]\n  },\n  \"application/vnd.stardivision.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdw\",\"vor\"]\n  },\n  \"application/vnd.stardivision.writer-global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgl\"]\n  },\n  \"application/vnd.stepmania.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"smzip\"]\n  },\n  \"application/vnd.stepmania.stepchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sm\"]\n  },\n  \"application/vnd.street-stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sun.wadl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wadl\"]\n  },\n  \"application/vnd.sun.xml.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxc\"]\n  },\n  \"application/vnd.sun.xml.calc.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stc\"]\n  },\n  \"application/vnd.sun.xml.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxd\"]\n  },\n  \"application/vnd.sun.xml.draw.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"std\"]\n  },\n  \"application/vnd.sun.xml.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxi\"]\n  },\n  \"application/vnd.sun.xml.impress.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sti\"]\n  },\n  \"application/vnd.sun.xml.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxm\"]\n  },\n  \"application/vnd.sun.xml.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxw\"]\n  },\n  \"application/vnd.sun.xml.writer.global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxg\"]\n  },\n  \"application/vnd.sun.xml.writer.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stw\"]\n  },\n  \"application/vnd.sus-calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sus\",\"susp\"]\n  },\n  \"application/vnd.svd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svd\"]\n  },\n  \"application/vnd.swiftview-ics\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sycle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.syft+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.symbian.install\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sis\",\"sisx\"]\n  },\n  \"application/vnd.syncml+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xsm\"]\n  },\n  \"application/vnd.syncml.dm+wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"bdm\"]\n  },\n  \"application/vnd.syncml.dm+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xdm\"]\n  },\n  \"application/vnd.syncml.dm.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"ddf\"]\n  },\n  \"application/vnd.syncml.dmtnds+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmtnds+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.syncml.ds.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tableschema+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tao.intent-module-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tao\"]\n  },\n  \"application/vnd.tcpdump.pcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n  },\n  \"application/vnd.think-cell.ppttc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tmd.mediaflex.api+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tmobile-livetv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tmo\"]\n  },\n  \"application/vnd.tri.onesource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.trid.tpt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpt\"]\n  },\n  \"application/vnd.triscape.mxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxs\"]\n  },\n  \"application/vnd.trueapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tra\"]\n  },\n  \"application/vnd.truedoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ubisoft.webplayer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ufdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ufd\",\"ufdl\"]\n  },\n  \"application/vnd.uiq.theme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"utz\"]\n  },\n  \"application/vnd.umajin\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"umj\"]\n  },\n  \"application/vnd.unity\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"unityweb\"]\n  },\n  \"application/vnd.uoml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uoml\"]\n  },\n  \"application/vnd.uplanet.alert\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.alert-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.signal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uri-map\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.valve.source.material\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcx\"]\n  },\n  \"application/vnd.vd-study\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vectorworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vel+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.verimatrix.vcas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.veritone.aion+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.veryant.thin\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ves.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vidsoft.vidconference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.visio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n  },\n  \"application/vnd.visionary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vis\"]\n  },\n  \"application/vnd.vividence.scriptfile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vsf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsf\"]\n  },\n  \"application/vnd.wap.sic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.slc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"wbxml\"]\n  },\n  \"application/vnd.wap.wmlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlc\"]\n  },\n  \"application/vnd.wap.wmlscriptc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlsc\"]\n  },\n  \"application/vnd.webturbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wtb\"]\n  },\n  \"application/vnd.wfa.dpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.p2p\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.wsc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmf.bootstrap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica.package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nbp\"]\n  },\n  \"application/vnd.wordperfect\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpd\"]\n  },\n  \"application/vnd.wqd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wqd\"]\n  },\n  \"application/vnd.wrq-hp3000-labelled\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wt.stf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stf\"]\n  },\n  \"application/vnd.wv.csp+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wv.csp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.wv.ssp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xacml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xara\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xar\"]\n  },\n  \"application/vnd.xfdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdl\"]\n  },\n  \"application/vnd.xfdl.webform\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xmpie.cpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.dpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.plan\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.ppkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.xlim\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.hv-dic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvd\"]\n  },\n  \"application/vnd.yamaha.hv-script\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvs\"]\n  },\n  \"application/vnd.yamaha.hv-voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvp\"]\n  },\n  \"application/vnd.yamaha.openscoreformat\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"osf\"]\n  },\n  \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osfpvg\"]\n  },\n  \"application/vnd.yamaha.remote-setup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.smaf-audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"saf\"]\n  },\n  \"application/vnd.yamaha.smaf-phrase\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spf\"]\n  },\n  \"application/vnd.yamaha.through-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.tunnel-udpencap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yaoweme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yellowriver-custom-menu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmp\"]\n  },\n  \"application/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.zul\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zir\",\"zirz\"]\n  },\n  \"application/vnd.zzazz.deck+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zaz\"]\n  },\n  \"application/voicexml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vxml\"]\n  },\n  \"application/voucher-cms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vq-rtcpxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/wasm\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wasm\"]\n  },\n  \"application/watcherinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wif\"]\n  },\n  \"application/webpush-options+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/whoispp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/whoispp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wgt\"]\n  },\n  \"application/winhlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hlp\"]\n  },\n  \"application/wita\": {\n    \"source\": \"iana\"\n  },\n  \"application/wordperfect5.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/wsdl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wsdl\"]\n  },\n  \"application/wspolicy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wspolicy\"]\n  },\n  \"application/x-7z-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"7z\"]\n  },\n  \"application/x-abiword\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"abw\"]\n  },\n  \"application/x-ace-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ace\"]\n  },\n  \"application/x-amf\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-apple-diskimage\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dmg\"]\n  },\n  \"application/x-arj\": {\n    \"compressible\": false,\n    \"extensions\": [\"arj\"]\n  },\n  \"application/x-authorware-bin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n  },\n  \"application/x-authorware-map\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aam\"]\n  },\n  \"application/x-authorware-seg\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aas\"]\n  },\n  \"application/x-bcpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bcpio\"]\n  },\n  \"application/x-bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/x-bittorrent\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"torrent\"]\n  },\n  \"application/x-blorb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"blb\",\"blorb\"]\n  },\n  \"application/x-bzip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz\"]\n  },\n  \"application/x-bzip2\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz2\",\"boz\"]\n  },\n  \"application/x-cbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n  },\n  \"application/x-cdlink\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcd\"]\n  },\n  \"application/x-cfs-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cfs\"]\n  },\n  \"application/x-chat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"chat\"]\n  },\n  \"application/x-chess-pgn\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgn\"]\n  },\n  \"application/x-chrome-extension\": {\n    \"extensions\": [\"crx\"]\n  },\n  \"application/x-cocoa\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"cco\"]\n  },\n  \"application/x-compress\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-conference\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nsc\"]\n  },\n  \"application/x-cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpio\"]\n  },\n  \"application/x-csh\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csh\"]\n  },\n  \"application/x-deb\": {\n    \"compressible\": false\n  },\n  \"application/x-debian-package\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"deb\",\"udeb\"]\n  },\n  \"application/x-dgc-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dgc\"]\n  },\n  \"application/x-director\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n  },\n  \"application/x-doom\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wad\"]\n  },\n  \"application/x-dtbncx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ncx\"]\n  },\n  \"application/x-dtbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dtb\"]\n  },\n  \"application/x-dtbresource+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"res\"]\n  },\n  \"application/x-dvi\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"dvi\"]\n  },\n  \"application/x-envoy\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"evy\"]\n  },\n  \"application/x-eva\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"eva\"]\n  },\n  \"application/x-font-bdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bdf\"]\n  },\n  \"application/x-font-dos\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-framemaker\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-ghostscript\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gsf\"]\n  },\n  \"application/x-font-libgrx\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-linux-psf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"psf\"]\n  },\n  \"application/x-font-pcf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcf\"]\n  },\n  \"application/x-font-snf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"snf\"]\n  },\n  \"application/x-font-speedo\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-sunos-news\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-type1\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n  },\n  \"application/x-font-vfont\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-freearc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"arc\"]\n  },\n  \"application/x-futuresplash\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"spl\"]\n  },\n  \"application/x-gca-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gca\"]\n  },\n  \"application/x-glulx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ulx\"]\n  },\n  \"application/x-gnumeric\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gnumeric\"]\n  },\n  \"application/x-gramps-xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gramps\"]\n  },\n  \"application/x-gtar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gtar\"]\n  },\n  \"application/x-gzip\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-hdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hdf\"]\n  },\n  \"application/x-httpd-php\": {\n    \"compressible\": true,\n    \"extensions\": [\"php\"]\n  },\n  \"application/x-install-instructions\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"install\"]\n  },\n  \"application/x-iso9660-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"iso\"]\n  },\n  \"application/x-iwork-keynote-sffkey\": {\n    \"extensions\": [\"key\"]\n  },\n  \"application/x-iwork-numbers-sffnumbers\": {\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/x-iwork-pages-sffpages\": {\n    \"extensions\": [\"pages\"]\n  },\n  \"application/x-java-archive-diff\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jardiff\"]\n  },\n  \"application/x-java-jnlp-file\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jnlp\"]\n  },\n  \"application/x-javascript\": {\n    \"compressible\": true\n  },\n  \"application/x-keepass2\": {\n    \"extensions\": [\"kdbx\"]\n  },\n  \"application/x-latex\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"latex\"]\n  },\n  \"application/x-lua-bytecode\": {\n    \"extensions\": [\"luac\"]\n  },\n  \"application/x-lzh-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lzh\",\"lha\"]\n  },\n  \"application/x-makeself\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"run\"]\n  },\n  \"application/x-mie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mie\"]\n  },\n  \"application/x-mobipocket-ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prc\",\"mobi\"]\n  },\n  \"application/x-mpegurl\": {\n    \"compressible\": false\n  },\n  \"application/x-ms-application\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"application\"]\n  },\n  \"application/x-ms-shortcut\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lnk\"]\n  },\n  \"application/x-ms-wmd\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmd\"]\n  },\n  \"application/x-ms-wmz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmz\"]\n  },\n  \"application/x-ms-xbap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbap\"]\n  },\n  \"application/x-msaccess\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mdb\"]\n  },\n  \"application/x-msbinder\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obd\"]\n  },\n  \"application/x-mscardfile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"crd\"]\n  },\n  \"application/x-msclip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"clp\"]\n  },\n  \"application/x-msdos-program\": {\n    \"extensions\": [\"exe\"]\n  },\n  \"application/x-msdownload\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n  },\n  \"application/x-msmediaview\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n  },\n  \"application/x-msmetafile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n  },\n  \"application/x-msmoney\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mny\"]\n  },\n  \"application/x-mspublisher\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pub\"]\n  },\n  \"application/x-msschedule\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scd\"]\n  },\n  \"application/x-msterminal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"trm\"]\n  },\n  \"application/x-mswrite\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wri\"]\n  },\n  \"application/x-netcdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nc\",\"cdf\"]\n  },\n  \"application/x-ns-proxy-autoconfig\": {\n    \"compressible\": true,\n    \"extensions\": [\"pac\"]\n  },\n  \"application/x-nzb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nzb\"]\n  },\n  \"application/x-perl\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"pl\",\"pm\"]\n  },\n  \"application/x-pilot\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"prc\",\"pdb\"]\n  },\n  \"application/x-pkcs12\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"p12\",\"pfx\"]\n  },\n  \"application/x-pkcs7-certificates\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7b\",\"spc\"]\n  },\n  \"application/x-pkcs7-certreqresp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7r\"]\n  },\n  \"application/x-pki-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-rar-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"rar\"]\n  },\n  \"application/x-redhat-package-manager\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"rpm\"]\n  },\n  \"application/x-research-info-systems\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ris\"]\n  },\n  \"application/x-sea\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"sea\"]\n  },\n  \"application/x-sh\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"sh\"]\n  },\n  \"application/x-shar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"shar\"]\n  },\n  \"application/x-shockwave-flash\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"swf\"]\n  },\n  \"application/x-silverlight-app\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xap\"]\n  },\n  \"application/x-sql\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sql\"]\n  },\n  \"application/x-stuffit\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"sit\"]\n  },\n  \"application/x-stuffitx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sitx\"]\n  },\n  \"application/x-subrip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"srt\"]\n  },\n  \"application/x-sv4cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4cpio\"]\n  },\n  \"application/x-sv4crc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4crc\"]\n  },\n  \"application/x-t3vm-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"t3\"]\n  },\n  \"application/x-tads\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gam\"]\n  },\n  \"application/x-tar\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"tar\"]\n  },\n  \"application/x-tcl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tcl\",\"tk\"]\n  },\n  \"application/x-tex\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tex\"]\n  },\n  \"application/x-tex-tfm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tfm\"]\n  },\n  \"application/x-texinfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"texinfo\",\"texi\"]\n  },\n  \"application/x-tgif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obj\"]\n  },\n  \"application/x-ustar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ustar\"]\n  },\n  \"application/x-virtualbox-hdd\": {\n    \"compressible\": true,\n    \"extensions\": [\"hdd\"]\n  },\n  \"application/x-virtualbox-ova\": {\n    \"compressible\": true,\n    \"extensions\": [\"ova\"]\n  },\n  \"application/x-virtualbox-ovf\": {\n    \"compressible\": true,\n    \"extensions\": [\"ovf\"]\n  },\n  \"application/x-virtualbox-vbox\": {\n    \"compressible\": true,\n    \"extensions\": [\"vbox\"]\n  },\n  \"application/x-virtualbox-vbox-extpack\": {\n    \"compressible\": false,\n    \"extensions\": [\"vbox-extpack\"]\n  },\n  \"application/x-virtualbox-vdi\": {\n    \"compressible\": true,\n    \"extensions\": [\"vdi\"]\n  },\n  \"application/x-virtualbox-vhd\": {\n    \"compressible\": true,\n    \"extensions\": [\"vhd\"]\n  },\n  \"application/x-virtualbox-vmdk\": {\n    \"compressible\": true,\n    \"extensions\": [\"vmdk\"]\n  },\n  \"application/x-wais-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"src\"]\n  },\n  \"application/x-web-app-manifest+json\": {\n    \"compressible\": true,\n    \"extensions\": [\"webapp\"]\n  },\n  \"application/x-www-form-urlencoded\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/x-x509-ca-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"der\",\"crt\",\"pem\"]\n  },\n  \"application/x-x509-ca-ra-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-x509-next-ca-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-xfig\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fig\"]\n  },\n  \"application/x-xliff+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/x-xpinstall\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"xpi\"]\n  },\n  \"application/x-xz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xz\"]\n  },\n  \"application/x-zmachine\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n  },\n  \"application/x400-bp\": {\n    \"source\": \"iana\"\n  },\n  \"application/xacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xaml+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xaml\"]\n  },\n  \"application/xcap-att+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xav\"]\n  },\n  \"application/xcap-caps+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xca\"]\n  },\n  \"application/xcap-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdf\"]\n  },\n  \"application/xcap-el+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xel\"]\n  },\n  \"application/xcap-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcap-ns+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xns\"]\n  },\n  \"application/xcon-conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcon-conference-info-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xenc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xenc\"]\n  },\n  \"application/xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xhtml\",\"xht\"]\n  },\n  \"application/xhtml-voice+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/xliff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n  },\n  \"application/xml-dtd\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dtd\"]\n  },\n  \"application/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"application/xml-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xmpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xop\"]\n  },\n  \"application/xproc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xpl\"]\n  },\n  \"application/xslt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xsl\",\"xslt\"]\n  },\n  \"application/xspf+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xspf\"]\n  },\n  \"application/xv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n  },\n  \"application/yang\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"yang\"]\n  },\n  \"application/yang-data+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yin+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"yin\"]\n  },\n  \"application/zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"zip\"]\n  },\n  \"application/zlib\": {\n    \"source\": \"iana\"\n  },\n  \"application/zstd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/3gpp\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"3gpp\"]\n  },\n  \"audio/3gpp2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/adpcm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"adp\"]\n  },\n  \"audio/amr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"amr\"]\n  },\n  \"audio/amr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/amr-wb+\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aptx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/asc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-advanced-lossless\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/basic\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"au\",\"snd\"]\n  },\n  \"audio/bv16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/bv32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/clearmode\": {\n    \"source\": \"iana\"\n  },\n  \"audio/cn\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dat12\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dls\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es201108\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202050\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202211\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202212\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dvi4\": {\n    \"source\": \"iana\"\n  },\n  \"audio/eac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evs\": {\n    \"source\": \"iana\"\n  },\n  \"audio/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g711-0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g719\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g722\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7221\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g723\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-24\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-40\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g728\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7291\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729d\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729e\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-efr\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-hr-08\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ilbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ip-mr_v2.5\": {\n    \"source\": \"iana\"\n  },\n  \"audio/isac\": {\n    \"source\": \"apache\"\n  },\n  \"audio/l16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l20\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l24\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/l8\": {\n    \"source\": \"iana\"\n  },\n  \"audio/lpc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp1200\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp2400\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp600\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mhas\": {\n    \"source\": \"iana\"\n  },\n  \"audio/midi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n  },\n  \"audio/mobile-xmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxmf\"]\n  },\n  \"audio/mp3\": {\n    \"compressible\": false,\n    \"extensions\": [\"mp3\"]\n  },\n  \"audio/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"m4a\",\"mp4a\"]\n  },\n  \"audio/mp4a-latm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa-robust\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n  },\n  \"audio/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"audio/musepack\": {\n    \"source\": \"apache\"\n  },\n  \"audio/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n  },\n  \"audio/opus\": {\n    \"source\": \"iana\"\n  },\n  \"audio/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/prs.sid\": {\n    \"source\": \"iana\"\n  },\n  \"audio/qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/red\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/s3m\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s3m\"]\n  },\n  \"audio/scip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/silk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sil\"]\n  },\n  \"audio/smv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sofa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/speex\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t140c\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t38\": {\n    \"source\": \"iana\"\n  },\n  \"audio/telephone-event\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp_bb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tone\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tsvcis\": {\n    \"source\": \"iana\"\n  },\n  \"audio/uemclip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/usac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vdvi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vmr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.3gpp.iufp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.4sb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.audiokoz\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.celp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cisco.nse\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cmles.radio-events\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.anp1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.inf1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dece.audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uva\",\"uvva\"]\n  },\n  \"audio/vnd.digital-winds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"eol\"]\n  },\n  \"audio/vnd.dlna.adts\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mlp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mps\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2z\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pulse.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dra\"]\n  },\n  \"audio/vnd.dts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dts\"]\n  },\n  \"audio/vnd.dts.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dtshd\"]\n  },\n  \"audio/vnd.dts.uhd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dvb.file\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.everad.plj\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.hns.audio\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.lucent.voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lvp\"]\n  },\n  \"audio/vnd.ms-playready.media.pya\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pya\"]\n  },\n  \"audio/vnd.nokia.mobile-xmf\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nortel.vbk\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nuera.ecelp4800\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp4800\"]\n  },\n  \"audio/vnd.nuera.ecelp7470\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp7470\"]\n  },\n  \"audio/vnd.nuera.ecelp9600\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp9600\"]\n  },\n  \"audio/vnd.octel.sbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.presonus.multitrack\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rhetorex.32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rip\"]\n  },\n  \"audio/vnd.rn-realaudio\": {\n    \"compressible\": false\n  },\n  \"audio/vnd.sealedmedia.softseal.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.vmx.cvsd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.wave\": {\n    \"compressible\": false\n  },\n  \"audio/vorbis\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/vorbis-config\": {\n    \"source\": \"iana\"\n  },\n  \"audio/wav\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/wave\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"weba\"]\n  },\n  \"audio/x-aac\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"aac\"]\n  },\n  \"audio/x-aiff\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n  },\n  \"audio/x-caf\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"caf\"]\n  },\n  \"audio/x-flac\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"flac\"]\n  },\n  \"audio/x-m4a\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"m4a\"]\n  },\n  \"audio/x-matroska\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mka\"]\n  },\n  \"audio/x-mpegurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m3u\"]\n  },\n  \"audio/x-ms-wax\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wax\"]\n  },\n  \"audio/x-ms-wma\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wma\"]\n  },\n  \"audio/x-pn-realaudio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ram\",\"ra\"]\n  },\n  \"audio/x-pn-realaudio-plugin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmp\"]\n  },\n  \"audio/x-realaudio\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"ra\"]\n  },\n  \"audio/x-tta\": {\n    \"source\": \"apache\"\n  },\n  \"audio/x-wav\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/xm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xm\"]\n  },\n  \"chemical/x-cdx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cdx\"]\n  },\n  \"chemical/x-cif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cif\"]\n  },\n  \"chemical/x-cmdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmdf\"]\n  },\n  \"chemical/x-cml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cml\"]\n  },\n  \"chemical/x-csml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csml\"]\n  },\n  \"chemical/x-pdb\": {\n    \"source\": \"apache\"\n  },\n  \"chemical/x-xyz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xyz\"]\n  },\n  \"font/collection\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttc\"]\n  },\n  \"font/otf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"otf\"]\n  },\n  \"font/sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"font/ttf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttf\"]\n  },\n  \"font/woff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff\"]\n  },\n  \"font/woff2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff2\"]\n  },\n  \"image/aces\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exr\"]\n  },\n  \"image/apng\": {\n    \"compressible\": false,\n    \"extensions\": [\"apng\"]\n  },\n  \"image/avci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avci\"]\n  },\n  \"image/avcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avcs\"]\n  },\n  \"image/avif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"avif\"]\n  },\n  \"image/bmp\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/cgm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cgm\"]\n  },\n  \"image/dicom-rle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"drle\"]\n  },\n  \"image/emf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"emf\"]\n  },\n  \"image/fits\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fits\"]\n  },\n  \"image/g3fax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3\"]\n  },\n  \"image/gif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gif\"]\n  },\n  \"image/heic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heic\"]\n  },\n  \"image/heic-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heics\"]\n  },\n  \"image/heif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heif\"]\n  },\n  \"image/heif-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heifs\"]\n  },\n  \"image/hej2k\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hej2\"]\n  },\n  \"image/hsj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hsj2\"]\n  },\n  \"image/ief\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ief\"]\n  },\n  \"image/jls\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jls\"]\n  },\n  \"image/jp2\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jp2\",\"jpg2\"]\n  },\n  \"image/jpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n  },\n  \"image/jph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jph\"]\n  },\n  \"image/jphc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jhc\"]\n  },\n  \"image/jpm\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpm\"]\n  },\n  \"image/jpx\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpx\",\"jpf\"]\n  },\n  \"image/jxr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxr\"]\n  },\n  \"image/jxra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxra\"]\n  },\n  \"image/jxrs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxrs\"]\n  },\n  \"image/jxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxs\"]\n  },\n  \"image/jxsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsc\"]\n  },\n  \"image/jxsi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsi\"]\n  },\n  \"image/jxss\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxss\"]\n  },\n  \"image/ktx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx\"]\n  },\n  \"image/ktx2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx2\"]\n  },\n  \"image/naplps\": {\n    \"source\": \"iana\"\n  },\n  \"image/pjpeg\": {\n    \"compressible\": false\n  },\n  \"image/png\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"png\"]\n  },\n  \"image/prs.btif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"btif\"]\n  },\n  \"image/prs.pti\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pti\"]\n  },\n  \"image/pwg-raster\": {\n    \"source\": \"iana\"\n  },\n  \"image/sgi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgi\"]\n  },\n  \"image/svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"svg\",\"svgz\"]\n  },\n  \"image/t38\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t38\"]\n  },\n  \"image/tiff\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"tif\",\"tiff\"]\n  },\n  \"image/tiff-fx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tfx\"]\n  },\n  \"image/vnd.adobe.photoshop\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"psd\"]\n  },\n  \"image/vnd.airzip.accelerator.azv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azv\"]\n  },\n  \"image/vnd.cns.inf2\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.dece.graphic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n  },\n  \"image/vnd.djvu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"djvu\",\"djv\"]\n  },\n  \"image/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"image/vnd.dwg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwg\"]\n  },\n  \"image/vnd.dxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxf\"]\n  },\n  \"image/vnd.fastbidsheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fbs\"]\n  },\n  \"image/vnd.fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fpx\"]\n  },\n  \"image/vnd.fst\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fst\"]\n  },\n  \"image/vnd.fujixerox.edmics-mmr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmr\"]\n  },\n  \"image/vnd.fujixerox.edmics-rlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rlc\"]\n  },\n  \"image/vnd.globalgraphics.pgb\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.microsoft.icon\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/vnd.mix\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.mozilla.apng\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.ms-dds\": {\n    \"compressible\": true,\n    \"extensions\": [\"dds\"]\n  },\n  \"image/vnd.ms-modi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mdi\"]\n  },\n  \"image/vnd.ms-photo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wdp\"]\n  },\n  \"image/vnd.net-fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"npx\"]\n  },\n  \"image/vnd.pco.b16\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"b16\"]\n  },\n  \"image/vnd.radiance\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealed.png\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.gif\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.jpg\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.svf\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.tencent.tap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tap\"]\n  },\n  \"image/vnd.valve.source.texture\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtf\"]\n  },\n  \"image/vnd.wap.wbmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbmp\"]\n  },\n  \"image/vnd.xiff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xif\"]\n  },\n  \"image/vnd.zbrush.pcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/webp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"webp\"]\n  },\n  \"image/wmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmf\"]\n  },\n  \"image/x-3ds\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"3ds\"]\n  },\n  \"image/x-cmu-raster\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ras\"]\n  },\n  \"image/x-cmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmx\"]\n  },\n  \"image/x-freehand\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n  },\n  \"image/x-icon\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/x-jng\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jng\"]\n  },\n  \"image/x-mrsid-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sid\"]\n  },\n  \"image/x-ms-bmp\": {\n    \"source\": \"nginx\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/x-pcx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/x-pict\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pic\",\"pct\"]\n  },\n  \"image/x-portable-anymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pnm\"]\n  },\n  \"image/x-portable-bitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pbm\"]\n  },\n  \"image/x-portable-graymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgm\"]\n  },\n  \"image/x-portable-pixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ppm\"]\n  },\n  \"image/x-rgb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rgb\"]\n  },\n  \"image/x-tga\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tga\"]\n  },\n  \"image/x-xbitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbm\"]\n  },\n  \"image/x-xcf\": {\n    \"compressible\": false\n  },\n  \"image/x-xpixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xpm\"]\n  },\n  \"image/x-xwindowdump\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xwd\"]\n  },\n  \"message/cpim\": {\n    \"source\": \"iana\"\n  },\n  \"message/delivery-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\n      \"disposition-notification\"\n    ]\n  },\n  \"message/external-body\": {\n    \"source\": \"iana\"\n  },\n  \"message/feedback-report\": {\n    \"source\": \"iana\"\n  },\n  \"message/global\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8msg\"]\n  },\n  \"message/global-delivery-status\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8dsn\"]\n  },\n  \"message/global-disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8mdn\"]\n  },\n  \"message/global-headers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8hdr\"]\n  },\n  \"message/http\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/imdn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"message/news\": {\n    \"source\": \"iana\"\n  },\n  \"message/partial\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/rfc822\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eml\",\"mime\"]\n  },\n  \"message/s-http\": {\n    \"source\": \"iana\"\n  },\n  \"message/sip\": {\n    \"source\": \"iana\"\n  },\n  \"message/sipfrag\": {\n    \"source\": \"iana\"\n  },\n  \"message/tracking-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.si.simp\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.wfa.wsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wsc\"]\n  },\n  \"model/3mf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3mf\"]\n  },\n  \"model/e57\": {\n    \"source\": \"iana\"\n  },\n  \"model/gltf+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gltf\"]\n  },\n  \"model/gltf-binary\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"glb\"]\n  },\n  \"model/iges\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"igs\",\"iges\"]\n  },\n  \"model/mesh\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n  },\n  \"model/mtl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mtl\"]\n  },\n  \"model/obj\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"obj\"]\n  },\n  \"model/step\": {\n    \"source\": \"iana\"\n  },\n  \"model/step+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"stpx\"]\n  },\n  \"model/step+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpz\"]\n  },\n  \"model/step-xml+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpxz\"]\n  },\n  \"model/stl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stl\"]\n  },\n  \"model/vnd.collada+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dae\"]\n  },\n  \"model/vnd.dwf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwf\"]\n  },\n  \"model/vnd.flatland.3dml\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gdl\"]\n  },\n  \"model/vnd.gs-gdl\": {\n    \"source\": \"apache\"\n  },\n  \"model/vnd.gs.gdl\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gtw\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtw\"]\n  },\n  \"model/vnd.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"model/vnd.mts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mts\"]\n  },\n  \"model/vnd.opengex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ogex\"]\n  },\n  \"model/vnd.parasolid.transmit.binary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_b\"]\n  },\n  \"model/vnd.parasolid.transmit.text\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_t\"]\n  },\n  \"model/vnd.pytha.pyox\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.rosette.annotated-data-model\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.sap.vds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vds\"]\n  },\n  \"model/vnd.usdz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"usdz\"]\n  },\n  \"model/vnd.valve.source.compiled-map\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bsp\"]\n  },\n  \"model/vnd.vtu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtu\"]\n  },\n  \"model/vrml\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"wrl\",\"vrml\"]\n  },\n  \"model/x3d+binary\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3db\",\"x3dbz\"]\n  },\n  \"model/x3d+fastinfoset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3db\"]\n  },\n  \"model/x3d+vrml\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3dv\",\"x3dvz\"]\n  },\n  \"model/x3d+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"x3d\",\"x3dz\"]\n  },\n  \"model/x3d-vrml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3dv\"]\n  },\n  \"multipart/alternative\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/appledouble\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/byteranges\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/digest\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/form-data\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/header-set\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/mixed\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/multilingual\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/parallel\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/related\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/report\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/signed\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/vnd.bint.med-plus\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/voice-message\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/x-mixed-replace\": {\n    \"source\": \"iana\"\n  },\n  \"text/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/cache-manifest\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"appcache\",\"manifest\"]\n  },\n  \"text/calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ics\",\"ifb\"]\n  },\n  \"text/calender\": {\n    \"compressible\": true\n  },\n  \"text/cmd\": {\n    \"compressible\": true\n  },\n  \"text/coffeescript\": {\n    \"extensions\": [\"coffee\",\"litcoffee\"]\n  },\n  \"text/cql\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-expression\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-identifier\": {\n    \"source\": \"iana\"\n  },\n  \"text/css\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"css\"]\n  },\n  \"text/csv\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csv\"]\n  },\n  \"text/csv-schema\": {\n    \"source\": \"iana\"\n  },\n  \"text/directory\": {\n    \"source\": \"iana\"\n  },\n  \"text/dns\": {\n    \"source\": \"iana\"\n  },\n  \"text/ecmascript\": {\n    \"source\": \"iana\"\n  },\n  \"text/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"text/enriched\": {\n    \"source\": \"iana\"\n  },\n  \"text/fhirpath\": {\n    \"source\": \"iana\"\n  },\n  \"text/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"text/gff3\": {\n    \"source\": \"iana\"\n  },\n  \"text/grammar-ref-list\": {\n    \"source\": \"iana\"\n  },\n  \"text/html\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"html\",\"htm\",\"shtml\"]\n  },\n  \"text/jade\": {\n    \"extensions\": [\"jade\"]\n  },\n  \"text/javascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"text/jcr-cnd\": {\n    \"source\": \"iana\"\n  },\n  \"text/jsx\": {\n    \"compressible\": true,\n    \"extensions\": [\"jsx\"]\n  },\n  \"text/less\": {\n    \"compressible\": true,\n    \"extensions\": [\"less\"]\n  },\n  \"text/markdown\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"markdown\",\"md\"]\n  },\n  \"text/mathml\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"mml\"]\n  },\n  \"text/mdx\": {\n    \"compressible\": true,\n    \"extensions\": [\"mdx\"]\n  },\n  \"text/mizar\": {\n    \"source\": \"iana\"\n  },\n  \"text/n3\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"n3\"]\n  },\n  \"text/parameters\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/plain\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n  },\n  \"text/provenance-notation\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/prs.fallenstein.rst\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.lines.tag\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dsc\"]\n  },\n  \"text/prs.prop.logic\": {\n    \"source\": \"iana\"\n  },\n  \"text/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/red\": {\n    \"source\": \"iana\"\n  },\n  \"text/rfc822-headers\": {\n    \"source\": \"iana\"\n  },\n  \"text/richtext\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtx\"]\n  },\n  \"text/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"text/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"text/sgml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sgml\",\"sgm\"]\n  },\n  \"text/shaclc\": {\n    \"source\": \"iana\"\n  },\n  \"text/shex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"shex\"]\n  },\n  \"text/slim\": {\n    \"extensions\": [\"slim\",\"slm\"]\n  },\n  \"text/spdx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spdx\"]\n  },\n  \"text/strings\": {\n    \"source\": \"iana\"\n  },\n  \"text/stylus\": {\n    \"extensions\": [\"stylus\",\"styl\"]\n  },\n  \"text/t140\": {\n    \"source\": \"iana\"\n  },\n  \"text/tab-separated-values\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tsv\"]\n  },\n  \"text/troff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n  },\n  \"text/turtle\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"ttl\"]\n  },\n  \"text/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/uri-list\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uri\",\"uris\",\"urls\"]\n  },\n  \"text/vcard\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vcard\"]\n  },\n  \"text/vnd.a\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.abc\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ascii-art\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.curl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"curl\"]\n  },\n  \"text/vnd.curl.dcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dcurl\"]\n  },\n  \"text/vnd.curl.mcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mcurl\"]\n  },\n  \"text/vnd.curl.scurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scurl\"]\n  },\n  \"text/vnd.debian.copyright\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.dmclientscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"text/vnd.esmertec.theme-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.familysearch.gedcom\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ged\"]\n  },\n  \"text/vnd.ficlab.flt\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.fly\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fly\"]\n  },\n  \"text/vnd.fmi.flexstor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flx\"]\n  },\n  \"text/vnd.gml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.graphviz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gv\"]\n  },\n  \"text/vnd.hans\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.hgl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.in3d.3dml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3dml\"]\n  },\n  \"text/vnd.in3d.spot\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spot\"]\n  },\n  \"text/vnd.iptc.newsml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.iptc.nitf\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.latex-z\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.motorola.reflex\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ms-mediapackage\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.net2phone.commcenter.command\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.radisys.msml-basic-layout\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.senx.warpscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.si.uricatalogue\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sosi\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sun.j2me.app-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"jad\"]\n  },\n  \"text/vnd.trolltech.linguist\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.wap.si\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.sl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.wml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wml\"]\n  },\n  \"text/vnd.wap.wmlscript\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmls\"]\n  },\n  \"text/vtt\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"vtt\"]\n  },\n  \"text/x-asm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s\",\"asm\"]\n  },\n  \"text/x-c\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n  },\n  \"text/x-component\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"htc\"]\n  },\n  \"text/x-fortran\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n  },\n  \"text/x-gwt-rpc\": {\n    \"compressible\": true\n  },\n  \"text/x-handlebars-template\": {\n    \"extensions\": [\"hbs\"]\n  },\n  \"text/x-java-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"java\"]\n  },\n  \"text/x-jquery-tmpl\": {\n    \"compressible\": true\n  },\n  \"text/x-lua\": {\n    \"extensions\": [\"lua\"]\n  },\n  \"text/x-markdown\": {\n    \"compressible\": true,\n    \"extensions\": [\"mkd\"]\n  },\n  \"text/x-nfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nfo\"]\n  },\n  \"text/x-opml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"opml\"]\n  },\n  \"text/x-org\": {\n    \"compressible\": true,\n    \"extensions\": [\"org\"]\n  },\n  \"text/x-pascal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p\",\"pas\"]\n  },\n  \"text/x-processing\": {\n    \"compressible\": true,\n    \"extensions\": [\"pde\"]\n  },\n  \"text/x-sass\": {\n    \"extensions\": [\"sass\"]\n  },\n  \"text/x-scss\": {\n    \"extensions\": [\"scss\"]\n  },\n  \"text/x-setext\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"etx\"]\n  },\n  \"text/x-sfv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sfv\"]\n  },\n  \"text/x-suse-ymp\": {\n    \"compressible\": true,\n    \"extensions\": [\"ymp\"]\n  },\n  \"text/x-uuencode\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"uu\"]\n  },\n  \"text/x-vcalendar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcs\"]\n  },\n  \"text/x-vcard\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcf\"]\n  },\n  \"text/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\"]\n  },\n  \"text/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"text/yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"yaml\",\"yml\"]\n  },\n  \"video/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3gp\",\"3gpp\"]\n  },\n  \"video/3gpp-tt\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3g2\"]\n  },\n  \"video/av1\": {\n    \"source\": \"iana\"\n  },\n  \"video/bmpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/bt656\": {\n    \"source\": \"iana\"\n  },\n  \"video/celb\": {\n    \"source\": \"iana\"\n  },\n  \"video/dv\": {\n    \"source\": \"iana\"\n  },\n  \"video/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"video/ffv1\": {\n    \"source\": \"iana\"\n  },\n  \"video/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/h261\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h261\"]\n  },\n  \"video/h263\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h263\"]\n  },\n  \"video/h263-1998\": {\n    \"source\": \"iana\"\n  },\n  \"video/h263-2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h264\"]\n  },\n  \"video/h264-rcdo\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264-svc\": {\n    \"source\": \"iana\"\n  },\n  \"video/h265\": {\n    \"source\": \"iana\"\n  },\n  \"video/iso.segment\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m4s\"]\n  },\n  \"video/jpeg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jpgv\"]\n  },\n  \"video/jpeg2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/jpm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"jpm\",\"jpgm\"]\n  },\n  \"video/jxsv\": {\n    \"source\": \"iana\"\n  },\n  \"video/mj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mj2\",\"mjp2\"]\n  },\n  \"video/mp1s\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2p\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2t\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ts\"]\n  },\n  \"video/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n  },\n  \"video/mp4v-es\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n  },\n  \"video/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpv\": {\n    \"source\": \"iana\"\n  },\n  \"video/nv\": {\n    \"source\": \"iana\"\n  },\n  \"video/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogv\"]\n  },\n  \"video/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/pointer\": {\n    \"source\": \"iana\"\n  },\n  \"video/quicktime\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"qt\",\"mov\"]\n  },\n  \"video/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/raw\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"video/scip\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte291\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte292m\": {\n    \"source\": \"iana\"\n  },\n  \"video/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.cctv\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvh\",\"uvvh\"]\n  },\n  \"video/vnd.dece.mobile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvm\",\"uvvm\"]\n  },\n  \"video/vnd.dece.mp4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.pd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvp\",\"uvvp\"]\n  },\n  \"video/vnd.dece.sd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvs\",\"uvvs\"]\n  },\n  \"video/vnd.dece.video\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvv\",\"uvvv\"]\n  },\n  \"video/vnd.directv.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.directv.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dlna.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dvb.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dvb\"]\n  },\n  \"video/vnd.fvt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fvt\"]\n  },\n  \"video/vnd.hns.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsavc\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsmpeg2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.videop\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxu\",\"m4u\"]\n  },\n  \"video/vnd.ms-playready.media.pyv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pyv\"]\n  },\n  \"video/vnd.nokia.interleaved-multimedia\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.mp4vr\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.videovoip\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.objectvideo\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.bink\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.smacker\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.swf\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealedmedia.softseal.mov\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.uvvu.mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvu\",\"uvvu\"]\n  },\n  \"video/vnd.vivo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"viv\"]\n  },\n  \"video/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp8\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp9\": {\n    \"source\": \"iana\"\n  },\n  \"video/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"webm\"]\n  },\n  \"video/x-f4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f4v\"]\n  },\n  \"video/x-fli\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fli\"]\n  },\n  \"video/x-flv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"flv\"]\n  },\n  \"video/x-m4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m4v\"]\n  },\n  \"video/x-matroska\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n  },\n  \"video/x-mng\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mng\"]\n  },\n  \"video/x-ms-asf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"asf\",\"asx\"]\n  },\n  \"video/x-ms-vob\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vob\"]\n  },\n  \"video/x-ms-wm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wm\"]\n  },\n  \"video/x-ms-wmv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"wmv\"]\n  },\n  \"video/x-ms-wmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmx\"]\n  },\n  \"video/x-ms-wvx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wvx\"]\n  },\n  \"video/x-msvideo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"avi\"]\n  },\n  \"video/x-sgi-movie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"movie\"]\n  },\n  \"video/x-smv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smv\"]\n  },\n  \"x-conference/x-cooltalk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ice\"]\n  },\n  \"x-shader/x-fragment\": {\n    \"compressible\": true\n  },\n  \"x-shader/x-vertex\": {\n    \"compressible\": true\n  }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1\n    ? exports.lookup(str)\n    : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .substr(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana']\n\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source)\n        var to = preference.indexOf(mime.source)\n\n        if (types[extension] !== 'application/octet-stream' &&\n          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n          // skip the remapping\n          continue\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type\n    }\n  })\n}\n", "module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n  var nextTick = typeof setImmediate == 'function'\n    ? setImmediate\n    : (\n      typeof process == 'object' && typeof process.nextTick == 'function'\n      ? process.nextTick\n      : null\n    );\n\n  if (nextTick)\n  {\n    nextTick(fn);\n  }\n  else\n  {\n    setTimeout(fn, 0);\n  }\n}\n", "var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param   {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n  var isAsync = false;\n\n  // check if async happened\n  defer(function() { isAsync = true; });\n\n  return function async_callback(err, result)\n  {\n    if (isAsync)\n    {\n      callback(err, result);\n    }\n    else\n    {\n      defer(function nextTick_callback()\n      {\n        callback(err, result);\n      });\n    }\n  };\n}\n", "// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n  Object.keys(state.jobs).forEach(clean.bind(state));\n\n  // reset leftover jobs\n  state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this  state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n  if (typeof this.jobs[key] == 'function')\n  {\n    this.jobs[key]();\n  }\n}\n", "var async = require('./async.js')\n  , abort = require('./abort.js')\n  ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n  // store current index\n  var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n  state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n  {\n    // don't repeat yourself\n    // skip secondary callbacks\n    if (!(key in state.jobs))\n    {\n      return;\n    }\n\n    // clean up jobs\n    delete state.jobs[key];\n\n    if (error)\n    {\n      // don't process rest of the results\n      // stop still active jobs\n      // and reset the list\n      abort(state);\n    }\n    else\n    {\n      state.results[key] = output;\n    }\n\n    // return salvaged results\n    callback(error, state.results);\n  });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param   {function} iterator - iterator to invoke\n * @param   {string|number} key - key/index of the element in the list of jobs\n * @param   {mixed} item - job description\n * @param   {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n  var aborter;\n\n  // allow shortcut if iterator expects only two arguments\n  if (iterator.length == 2)\n  {\n    aborter = iterator(item, async(callback));\n  }\n  // otherwise go with full three arguments\n  else\n  {\n    aborter = iterator(item, key, async(callback));\n  }\n\n  return aborter;\n}\n", "// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param   {array|object} list - list to iterate over\n * @param   {function|null} sortMethod - function to use for keys sort,\n *                                     or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n  var isNamedList = !Array.isArray(list)\n    , initState =\n    {\n      index    : 0,\n      keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n      jobs     : {},\n      results  : isNamedList ? {} : [],\n      size     : isNamedList ? Object.keys(list).length : list.length\n    }\n    ;\n\n  if (sortMethod)\n  {\n    // sort array keys based on it's values\n    // sort object's keys just on own merit\n    initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n    {\n      return sortMethod(list[a], list[b]);\n    });\n  }\n\n  return initState;\n}\n", "var abort = require('./abort.js')\n  , async = require('./async.js')\n  ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this  AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n  if (!Object.keys(this.jobs).length)\n  {\n    return;\n  }\n\n  // fast forward iteration index\n  this.index = this.size;\n\n  // abort jobs\n  abort(this);\n\n  // send back results we have so far\n  async(callback)(null, this.results);\n}\n", "var iterate    = require('./lib/iterate.js')\n  , initState  = require('./lib/state.js')\n  , terminator = require('./lib/terminator.js')\n  ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n  var state = initState(list);\n\n  while (state.index < (state['keyedList'] || list).length)\n  {\n    iterate(list, iterator, state, function(error, result)\n    {\n      if (error)\n      {\n        callback(error, result);\n        return;\n      }\n\n      // looks like it's the last one\n      if (Object.keys(state.jobs).length === 0)\n      {\n        callback(null, state.results);\n        return;\n      }\n    });\n\n    state.index++;\n  }\n\n  return terminator.bind(state, callback);\n}\n", "var iterate    = require('./lib/iterate.js')\n  , initState  = require('./lib/state.js')\n  , terminator = require('./lib/terminator.js')\n  ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending  = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} sortMethod - custom sort function\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n  var state = initState(list, sortMethod);\n\n  iterate(list, iterator, state, function iteratorHandler(error, result)\n  {\n    if (error)\n    {\n      callback(error, result);\n      return;\n    }\n\n    state.index++;\n\n    // are we there yet?\n    if (state.index < (state['keyedList'] || list).length)\n    {\n      iterate(list, iterator, state, iteratorHandler);\n      return;\n    }\n\n    // done here\n    callback(null, state.results);\n  });\n\n  return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param   {mixed} a - an item to compare\n * @param   {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n  return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param   {mixed} a - an item to compare\n * @param   {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n  return -1 * ascending(a, b);\n}\n", "var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n  return serialOrdered(list, iterator, null, callback);\n}\n", "module.exports =\n{\n  parallel      : require('./parallel.js'),\n  serial        : require('./serial.js'),\n  serialOrdered : require('./serialOrdered.js')\n};\n", "'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar hasOwn = require('hasown');\nvar $TypeError = require('es-errors/type');\n\nvar toStringTag = hasToStringTag ? Symbol.toStringTag : null;\n\n/** @type {import('.')} */\nmodule.exports = function setToStringTag(object, value) {\n\tvar overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;\n\tvar nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;\n\tif (\n\t\t(typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean')\n\t\t|| (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean')\n\t) {\n\t\tthrow new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans');\n\t}\n\tif (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(object, toStringTag, {\n\t\t\t\tconfigurable: !nonConfigurable,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: value,\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tobject[toStringTag] = value; // eslint-disable-line no-param-reassign\n\t\t}\n\t}\n};\n", "'use strict';\n\n// populates missing values\nmodule.exports = function (dst, src) {\n  Object.keys(src).forEach(function (prop) {\n    dst[prop] = dst[prop] || src[prop]; // eslint-disable-line no-param-reassign\n  });\n\n  return dst;\n};\n", "'use strict';\n\nvar CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar crypto = require('crypto');\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar setToStringTag = require('es-set-tostringtag');\nvar hasOwn = require('hasown');\nvar populate = require('./populate.js');\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n  if (!(this instanceof FormData)) {\n    return new FormData(options);\n  }\n\n  this._overheadLength = 0;\n  this._valueLength = 0;\n  this._valuesToMeasure = [];\n\n  CombinedStream.call(this);\n\n  options = options || {}; // eslint-disable-line no-param-reassign\n  for (var option in options) { // eslint-disable-line no-restricted-syntax\n    this[option] = options[option];\n  }\n}\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function (field, value, options) {\n  options = options || {}; // eslint-disable-line no-param-reassign\n\n  // allow filename as single option\n  if (typeof options === 'string') {\n    options = { filename: options }; // eslint-disable-line no-param-reassign\n  }\n\n  var append = CombinedStream.prototype.append.bind(this);\n\n  // all that streamy business can't handle numbers\n  if (typeof value === 'number' || value == null) {\n    value = String(value); // eslint-disable-line no-param-reassign\n  }\n\n  // https://github.com/felixge/node-form-data/issues/38\n  if (Array.isArray(value)) {\n    /*\n     * Please convert your array into string\n     * the way web server expects it\n     */\n    this._error(new Error('Arrays are not supported.'));\n    return;\n  }\n\n  var header = this._multiPartHeader(field, value, options);\n  var footer = this._multiPartFooter();\n\n  append(header);\n  append(value);\n  append(footer);\n\n  // pass along options.knownLength\n  this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function (header, value, options) {\n  var valueLength = 0;\n\n  /*\n   * used w/ getLengthSync(), when length is known.\n   * e.g. for streaming directly from a remote server,\n   * w/ a known file a size, and not wanting to wait for\n   * incoming file to finish to get its size.\n   */\n  if (options.knownLength != null) {\n    valueLength += Number(options.knownLength);\n  } else if (Buffer.isBuffer(value)) {\n    valueLength = value.length;\n  } else if (typeof value === 'string') {\n    valueLength = Buffer.byteLength(value);\n  }\n\n  this._valueLength += valueLength;\n\n  // @check why add CRLF? does this account for custom/multiple CRLFs?\n  this._overheadLength += Buffer.byteLength(header) + FormData.LINE_BREAK.length;\n\n  // empty or either doesn't have path or not an http response or not a stream\n  if (!value || (!value.path && !(value.readable && hasOwn(value, 'httpVersion')) && !(value instanceof Stream))) {\n    return;\n  }\n\n  // no need to bother with the length\n  if (!options.knownLength) {\n    this._valuesToMeasure.push(value);\n  }\n};\n\nFormData.prototype._lengthRetriever = function (value, callback) {\n  if (hasOwn(value, 'fd')) {\n    // take read range into a account\n    // `end` = Infinity \u2013> read file till the end\n    //\n    // TODO: Looks like there is bug in Node fs.createReadStream\n    // it doesn't respect `end` options without `start` options\n    // Fix it when node fixes it.\n    // https://github.com/joyent/node/issues/7819\n    if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n      // when end specified\n      // no need to calculate range\n      // inclusive, starts with 0\n      callback(null, value.end + 1 - (value.start ? value.start : 0)); // eslint-disable-line callback-return\n\n      // not that fast snoopy\n    } else {\n      // still need to fetch file size from fs\n      fs.stat(value.path, function (err, stat) {\n        if (err) {\n          callback(err);\n          return;\n        }\n\n        // update final size based on the range options\n        var fileSize = stat.size - (value.start ? value.start : 0);\n        callback(null, fileSize);\n      });\n    }\n\n    // or http response\n  } else if (hasOwn(value, 'httpVersion')) {\n    callback(null, Number(value.headers['content-length'])); // eslint-disable-line callback-return\n\n    // or request stream http://github.com/mikeal/request\n  } else if (hasOwn(value, 'httpModule')) {\n    // wait till response come back\n    value.on('response', function (response) {\n      value.pause();\n      callback(null, Number(response.headers['content-length']));\n    });\n    value.resume();\n\n    // something else\n  } else {\n    callback('Unknown stream'); // eslint-disable-line callback-return\n  }\n};\n\nFormData.prototype._multiPartHeader = function (field, value, options) {\n  /*\n   * custom header specified (as string)?\n   * it becomes responsible for boundary\n   * (e.g. to handle extra CRLFs on .NET servers)\n   */\n  if (typeof options.header === 'string') {\n    return options.header;\n  }\n\n  var contentDisposition = this._getContentDisposition(value, options);\n  var contentType = this._getContentType(value, options);\n\n  var contents = '';\n  var headers = {\n    // add custom disposition as third element or keep it two elements if not\n    'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n    // if no content type. allow it to be empty array\n    'Content-Type': [].concat(contentType || [])\n  };\n\n  // allow custom headers.\n  if (typeof options.header === 'object') {\n    populate(headers, options.header);\n  }\n\n  var header;\n  for (var prop in headers) { // eslint-disable-line no-restricted-syntax\n    if (hasOwn(headers, prop)) {\n      header = headers[prop];\n\n      // skip nullish headers.\n      if (header == null) {\n        continue; // eslint-disable-line no-restricted-syntax, no-continue\n      }\n\n      // convert all headers to arrays.\n      if (!Array.isArray(header)) {\n        header = [header];\n      }\n\n      // add non-empty headers.\n      if (header.length) {\n        contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n      }\n    }\n  }\n\n  return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function (value, options) { // eslint-disable-line consistent-return\n  var filename;\n\n  if (typeof options.filepath === 'string') {\n    // custom filepath for relative paths\n    filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n  } else if (options.filename || (value && (value.name || value.path))) {\n    /*\n     * custom filename take precedence\n     * formidable and the browser add a name property\n     * fs- and request- streams have path property\n     */\n    filename = path.basename(options.filename || (value && (value.name || value.path)));\n  } else if (value && value.readable && hasOwn(value, 'httpVersion')) {\n    // or try http response\n    filename = path.basename(value.client._httpMessage.path || '');\n  }\n\n  if (filename) {\n    return 'filename=\"' + filename + '\"';\n  }\n};\n\nFormData.prototype._getContentType = function (value, options) {\n  // use custom content-type above all\n  var contentType = options.contentType;\n\n  // or try `name` from formidable, browser\n  if (!contentType && value && value.name) {\n    contentType = mime.lookup(value.name);\n  }\n\n  // or try `path` from fs-, request- streams\n  if (!contentType && value && value.path) {\n    contentType = mime.lookup(value.path);\n  }\n\n  // or if it's http-reponse\n  if (!contentType && value && value.readable && hasOwn(value, 'httpVersion')) {\n    contentType = value.headers['content-type'];\n  }\n\n  // or guess it from the filepath or filename\n  if (!contentType && (options.filepath || options.filename)) {\n    contentType = mime.lookup(options.filepath || options.filename);\n  }\n\n  // fallback to the default content type if `value` is not simple value\n  if (!contentType && value && typeof value === 'object') {\n    contentType = FormData.DEFAULT_CONTENT_TYPE;\n  }\n\n  return contentType;\n};\n\nFormData.prototype._multiPartFooter = function () {\n  return function (next) {\n    var footer = FormData.LINE_BREAK;\n\n    var lastPart = this._streams.length === 0;\n    if (lastPart) {\n      footer += this._lastBoundary();\n    }\n\n    next(footer);\n  }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function () {\n  return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function (userHeaders) {\n  var header;\n  var formHeaders = {\n    'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n  };\n\n  for (header in userHeaders) { // eslint-disable-line no-restricted-syntax\n    if (hasOwn(userHeaders, header)) {\n      formHeaders[header.toLowerCase()] = userHeaders[header];\n    }\n  }\n\n  return formHeaders;\n};\n\nFormData.prototype.setBoundary = function (boundary) {\n  if (typeof boundary !== 'string') {\n    throw new TypeError('FormData boundary must be a string');\n  }\n  this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function () {\n  if (!this._boundary) {\n    this._generateBoundary();\n  }\n\n  return this._boundary;\n};\n\nFormData.prototype.getBuffer = function () {\n  var dataBuffer = new Buffer.alloc(0); // eslint-disable-line new-cap\n  var boundary = this.getBoundary();\n\n  // Create the form content. Add Line breaks to the end of data.\n  for (var i = 0, len = this._streams.length; i < len; i++) {\n    if (typeof this._streams[i] !== 'function') {\n      // Add content to the buffer.\n      if (Buffer.isBuffer(this._streams[i])) {\n        dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]);\n      } else {\n        dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]);\n      }\n\n      // Add break after content.\n      if (typeof this._streams[i] !== 'string' || this._streams[i].substring(2, boundary.length + 2) !== boundary) {\n        dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData.LINE_BREAK)]);\n      }\n    }\n  }\n\n  // Add the footer and return the Buffer object.\n  return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);\n};\n\nFormData.prototype._generateBoundary = function () {\n  // This generates a 50 character boundary similar to those used by Firefox.\n\n  // They are optimized for boyer-moore parsing.\n  this._boundary = '--------------------------' + crypto.randomBytes(12).toString('hex');\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually and add it as knownLength option\nFormData.prototype.getLengthSync = function () {\n  var knownLength = this._overheadLength + this._valueLength;\n\n  // Don't get confused, there are 3 \"internal\" streams for each keyval pair so it basically checks if there is any value added to the form\n  if (this._streams.length) {\n    knownLength += this._lastBoundary().length;\n  }\n\n  // https://github.com/form-data/form-data/issues/40\n  if (!this.hasKnownLength()) {\n    /*\n     * Some async length retrievers are present\n     * therefore synchronous length calculation is false.\n     * Please use getLength(callback) to get proper length\n     */\n    this._error(new Error('Cannot calculate proper length in synchronous way.'));\n  }\n\n  return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function () {\n  var hasKnownLength = true;\n\n  if (this._valuesToMeasure.length) {\n    hasKnownLength = false;\n  }\n\n  return hasKnownLength;\n};\n\nFormData.prototype.getLength = function (cb) {\n  var knownLength = this._overheadLength + this._valueLength;\n\n  if (this._streams.length) {\n    knownLength += this._lastBoundary().length;\n  }\n\n  if (!this._valuesToMeasure.length) {\n    process.nextTick(cb.bind(this, null, knownLength));\n    return;\n  }\n\n  asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function (err, values) {\n    if (err) {\n      cb(err);\n      return;\n    }\n\n    values.forEach(function (length) {\n      knownLength += length;\n    });\n\n    cb(null, knownLength);\n  });\n};\n\nFormData.prototype.submit = function (params, cb) {\n  var request;\n  var options;\n  var defaults = { method: 'post' };\n\n  // parse provided url if it's string or treat it as options object\n  if (typeof params === 'string') {\n    params = parseUrl(params); // eslint-disable-line no-param-reassign\n    /* eslint sort-keys: 0 */\n    options = populate({\n      port: params.port,\n      path: params.pathname,\n      host: params.hostname,\n      protocol: params.protocol\n    }, defaults);\n  } else { // use custom params\n    options = populate(params, defaults);\n    // if no port provided use default one\n    if (!options.port) {\n      options.port = options.protocol === 'https:' ? 443 : 80;\n    }\n  }\n\n  // put that good code in getHeaders to some use\n  options.headers = this.getHeaders(params.headers);\n\n  // https if specified, fallback to http in any other case\n  if (options.protocol === 'https:') {\n    request = https.request(options);\n  } else {\n    request = http.request(options);\n  }\n\n  // get content length and fire away\n  this.getLength(function (err, length) {\n    if (err && err !== 'Unknown stream') {\n      this._error(err);\n      return;\n    }\n\n    // add content length\n    if (length) {\n      request.setHeader('Content-Length', length);\n    }\n\n    this.pipe(request);\n    if (cb) {\n      var onResponse;\n\n      var callback = function (error, responce) {\n        request.removeListener('error', callback);\n        request.removeListener('response', onResponse);\n\n        return cb.call(this, error, responce);\n      };\n\n      onResponse = callback.bind(this, null);\n\n      request.on('error', callback);\n      request.on('response', onResponse);\n    }\n  }.bind(this));\n\n  return request;\n};\n\nFormData.prototype._error = function (err) {\n  if (!this.error) {\n    this.error = err;\n    this.pause();\n    this.emit('error', err);\n  }\n};\n\nFormData.prototype.toString = function () {\n  return '[object FormData]';\n};\nsetToStringTag(FormData.prototype, 'FormData');\n\n// Public API\nmodule.exports = FormData;\n", "import FormData from 'form-data';\n\nexport default FormData;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path\n    .concat(key)\n    .map(function each(token, i) {\n      // eslint-disable-next-line no-param-reassign\n      token = removeBrackets(token);\n      return !dots && i ? '[' + token + ']' : token;\n    })\n    .join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  // eslint-disable-next-line no-param-reassign\n  options = utils.toFlatObject(\n    options,\n    {\n      metaTokens: true,\n      dots: false,\n      indexes: false,\n    },\n    false,\n    function defined(option, source) {\n      // eslint-disable-next-line no-eq-null,eqeqeq\n      return !utils.isUndefined(source[option]);\n    }\n  );\n\n  const metaTokens = options.metaTokens;\n  // eslint-disable-next-line no-use-before-define\n  const visitor = options.visitor || defaultVisitor;\n  const dots = options.dots;\n  const indexes = options.indexes;\n  const _Blob = options.Blob || (typeof Blob !== 'undefined' && Blob);\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (utils.isBoolean(value)) {\n      return value.toString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (utils.isReactNative(formData) && utils.isReactNativeBlob(value)) {\n      formData.append(renderKey(path, key, dots), convertValue(value));\n      return false;\n    }\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = JSON.stringify(value);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value)))\n      ) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) &&\n            formData.append(\n              // eslint-disable-next-line no-nested-ternary\n              indexes === true\n                ? renderKey([key], index, dots)\n                : indexes === null\n                  ? key\n                  : key + '[]',\n              convertValue(el)\n            );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const stack = [];\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable,\n  });\n\n  function build(value, path) {\n    if (utils.isUndefined(value)) return;\n\n    if (stack.indexOf(value) !== -1) {\n      throw Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result =\n        !(utils.isUndefined(el) || el === null) &&\n        visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key]);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n", "'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n    '%00': '\\x00',\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder\n    ? function (value) {\n        return encoder.call(this, value, encode);\n      }\n    : encode;\n\n  return this._pairs\n    .map(function each(pair) {\n      return _encode(pair[0]) + '=' + _encode(pair[1]);\n    }, '')\n    .join('&');\n};\n\nexport default AxiosURLSearchParams;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces URL-encoded forms of `:`, `$`, `,`, and spaces with\n * their plain counterparts (`:`, `$`, `,`, `+`).\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n  return encodeURIComponent(val)\n    .replace(/%3A/gi, ':')\n    .replace(/%24/g, '$')\n    .replace(/%2C/gi, ',')\n    .replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  if (!params) {\n    return url;\n  }\n\n  const _encode = (options && options.encode) || encode;\n\n  const _options = utils.isFunction(options)\n    ? {\n        serialize: options,\n      }\n    : options;\n\n  const serializeFn = _options && _options.serialize;\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, _options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params)\n      ? params.toString()\n      : new AxiosURLSearchParams(params, _options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf('#');\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\nclass InterceptorManager {\n  constructor() {\n    this.handlers = [];\n  }\n\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   * @param {Object} options The options for the interceptor, synchronous and runWhen\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    this.handlers.push({\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null,\n    });\n    return this.handlers.length - 1;\n  }\n\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {void}\n   */\n  eject(id) {\n    if (this.handlers[id]) {\n      this.handlers[id] = null;\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n    }\n  }\n\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    utils.forEach(this.handlers, function forEachHandler(h) {\n      if (h !== null) {\n        fn(h);\n      }\n    });\n  }\n}\n\nexport default InterceptorManager;\n", "'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false,\n  legacyInterceptorReqResOrdering: true,\n};\n", "'use strict';\n\nimport url from 'url';\nexport default url.URLSearchParams;\n", "import crypto from 'crypto';\nimport URLSearchParams from './classes/URLSearchParams.js';\nimport FormData from './classes/FormData.js';\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n  DIGIT,\n  ALPHA,\n  ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT,\n};\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n  let str = '';\n  const { length } = alphabet;\n  const randomValues = new Uint32Array(size);\n  crypto.randomFillSync(randomValues);\n  for (let i = 0; i < size; i++) {\n    str += alphabet[randomValues[i] % length];\n  }\n\n  return str;\n};\n\nexport default {\n  isNode: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob: (typeof Blob !== 'undefined' && Blob) || null,\n  },\n  ALPHABET,\n  generateString,\n  protocols: ['http', 'https', 'file', 'data'],\n};\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = (typeof navigator === 'object' && navigator) || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv =\n  hasBrowserEnv &&\n  (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = (hasBrowserEnv && window.location.href) || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  _navigator as navigator,\n  origin,\n};\n", "import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), {\n    visitor: function (value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    },\n    ...options,\n  });\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z]\n  // foo.x.y.z\n  // foo-x-y-z\n  // foo x y z\n  return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map((match) => {\n    return match[0] === '[]' ? '' : match[1] || match[0];\n  });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!target[name] || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [\n    function transformRequest(data, headers) {\n      const contentType = headers.getContentType() || '';\n      const hasJSONContentType = contentType.indexOf('application/json') > -1;\n      const isObjectPayload = utils.isObject(data);\n\n      if (isObjectPayload && utils.isHTMLForm(data)) {\n        data = new FormData(data);\n      }\n\n      const isFormData = utils.isFormData(data);\n\n      if (isFormData) {\n        return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n      }\n\n      if (\n        utils.isArrayBuffer(data) ||\n        utils.isBuffer(data) ||\n        utils.isStream(data) ||\n        utils.isFile(data) ||\n        utils.isBlob(data) ||\n        utils.isReadableStream(data)\n      ) {\n        return data;\n      }\n      if (utils.isArrayBufferView(data)) {\n        return data.buffer;\n      }\n      if (utils.isURLSearchParams(data)) {\n        headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n        return data.toString();\n      }\n\n      let isFileList;\n\n      if (isObjectPayload) {\n        if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n          return toURLEncodedForm(data, this.formSerializer).toString();\n        }\n\n        if (\n          (isFileList = utils.isFileList(data)) ||\n          contentType.indexOf('multipart/form-data') > -1\n        ) {\n          const _FormData = this.env && this.env.FormData;\n\n          return toFormData(\n            isFileList ? { 'files[]': data } : data,\n            _FormData && new _FormData(),\n            this.formSerializer\n          );\n        }\n      }\n\n      if (isObjectPayload || hasJSONContentType) {\n        headers.setContentType('application/json', false);\n        return stringifySafely(data);\n      }\n\n      return data;\n    },\n  ],\n\n  transformResponse: [\n    function transformResponse(data) {\n      const transitional = this.transitional || defaults.transitional;\n      const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n      const JSONRequested = this.responseType === 'json';\n\n      if (utils.isResponse(data) || utils.isReadableStream(data)) {\n        return data;\n      }\n\n      if (\n        data &&\n        utils.isString(data) &&\n        ((forcedJSONParsing && !this.responseType) || JSONRequested)\n      ) {\n        const silentJSONParsing = transitional && transitional.silentJSONParsing;\n        const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n        try {\n          return JSON.parse(data, this.parseReviver);\n        } catch (e) {\n          if (strictJSONParsing) {\n            if (e.name === 'SyntaxError') {\n              throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n            }\n            throw e;\n          }\n        }\n      }\n\n      return data;\n    },\n  ],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob,\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      Accept: 'application/json, text/plain, */*',\n      'Content-Type': undefined,\n    },\n  },\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n", "'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n  'age',\n  'authorization',\n  'content-length',\n  'content-type',\n  'etag',\n  'expires',\n  'from',\n  'host',\n  'if-modified-since',\n  'if-unmodified-since',\n  'last-modified',\n  'location',\n  'max-forwards',\n  'proxy-authorization',\n  'referer',\n  'retry-after',\n  'user-agent',\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default (rawHeaders) => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders &&\n    rawHeaders.split('\\n').forEach(function parser(line) {\n      i = line.indexOf(':');\n      key = line.substring(0, i).trim().toLowerCase();\n      val = line.substring(i + 1).trim();\n\n      if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n        return;\n      }\n\n      if (key === 'set-cookie') {\n        if (parsed[key]) {\n          parsed[key].push(val);\n        } else {\n          parsed[key] = [val];\n        }\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    });\n\n  return parsed;\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nconst isValidHeaderValue = (value) => !/[\\r\\n]/.test(value);\n\nfunction assertValidHeaderValue(value, header) {\n  if (value === false || value == null) {\n    return;\n  }\n\n  if (utils.isArray(value)) {\n    value.forEach((v) => assertValidHeaderValue(v, header));\n    return;\n  }\n\n  if (!isValidHeaderValue(String(value))) {\n    throw new Error(`Invalid character in header content [\"${header}\"]`);\n  }\n}\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction stripTrailingCRLF(str) {\n  let end = str.length;\n\n  while (end > 0) {\n    const charCode = str.charCodeAt(end - 1);\n\n    if (charCode !== 10 && charCode !== 13) {\n      break;\n    }\n\n    end -= 1;\n  }\n\n  return end === str.length ? str : str.slice(0, end);\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : stripTrailingCRLF(String(value));\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header\n    .trim()\n    .toLowerCase()\n    .replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach((methodName) => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      value: function (arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true,\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        throw new Error('header name must be a non-empty string');\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if (\n        !key ||\n        self[key] === undefined ||\n        _rewrite === true ||\n        (_rewrite === undefined && self[key] !== false)\n      ) {\n        assertValidHeaderValue(_value, _header);\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite);\n    } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isObject(header) && utils.isIterable(header)) {\n      let obj = {},\n        dest,\n        key;\n      for (const entry of header) {\n        if (!utils.isArray(entry)) {\n          throw TypeError('Object iterator must return a key-value pair');\n        }\n\n        obj[(key = entry[0])] = (dest = obj[key])\n          ? utils.isArray(dest)\n            ? [...dest, entry[1]]\n            : [dest, entry[1]]\n          : entry[1];\n      }\n\n      setHeaders(obj, valueOrRewrite);\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(\n        key &&\n        this[key] !== undefined &&\n        (!matcher || matchHeaderValue(this, this[key], key, matcher))\n      );\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null &&\n        value !== false &&\n        (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON())\n      .map(([header, value]) => header + ': ' + value)\n      .join('\\n');\n  }\n\n  getSetCookie() {\n    return this.get('set-cookie') || [];\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals =\n      (this[$internals] =\n      this[$internals] =\n        {\n          accessors: {},\n        });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor([\n  'Content-Type',\n  'Content-Length',\n  'Accept',\n  'Accept-Encoding',\n  'User-Agent',\n  'Authorization',\n]);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    },\n  };\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n", "'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n  /**\n   * A `CanceledError` is an object that is thrown when an operation is canceled.\n   *\n   * @param {string=} message The message.\n   * @param {Object=} config The config.\n   * @param {Object=} request The request.\n   *\n   * @returns {CanceledError} The created error.\n   */\n  constructor(message, config, request) {\n    super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n    this.name = 'CanceledError';\n    this.__CANCEL__ = true;\n  }\n}\n\nexport default CanceledError;\n", "'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(\n      new AxiosError(\n        'Request failed with status code ' + response.status,\n        [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][\n          Math.floor(response.status / 100) - 4\n        ],\n        response.config,\n        response.request,\n        response\n      )\n    );\n  }\n}\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  if (typeof url !== 'string') {\n    return false;\n  }\n\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n}\n", "'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n  let isRelativeUrl = !isAbsoluteURL(requestedURL);\n  if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n", "'use strict';\n\nvar DEFAULT_PORTS = {\n  ftp: 21,\n  gopher: 70,\n  http: 80,\n  https: 443,\n  ws: 80,\n  wss: 443,\n};\n\nfunction parseUrl(urlString) {\n  try {\n    return new URL(urlString);\n  } catch {\n    return null;\n  }\n}\n\n/**\n * @param {string|object|URL} url - The URL as a string or URL instance, or a\n *   compatible object (such as the result from legacy url.parse).\n * @return {string} The URL of the proxy that should handle the request to the\n *  given URL. If no proxy is set, this will be an empty string.\n */\nexport function getProxyForUrl(url) {\n  var parsedUrl = (typeof url === 'string' ? parseUrl(url) : url) || {};\n  var proto = parsedUrl.protocol;\n  var hostname = parsedUrl.host;\n  var port = parsedUrl.port;\n  if (typeof hostname !== 'string' || !hostname || typeof proto !== 'string') {\n    return '';  // Don't proxy URLs without a valid scheme or host.\n  }\n\n  proto = proto.split(':', 1)[0];\n  // Stripping ports in this way instead of using parsedUrl.hostname to make\n  // sure that the brackets around IPv6 addresses are kept.\n  hostname = hostname.replace(/:\\d*$/, '');\n  port = parseInt(port) || DEFAULT_PORTS[proto] || 0;\n  if (!shouldProxy(hostname, port)) {\n    return '';  // Don't proxy URLs that match NO_PROXY.\n  }\n\n  var proxy = getEnv(proto + '_proxy') || getEnv('all_proxy');\n  if (proxy && proxy.indexOf('://') === -1) {\n    // Missing scheme in proxy, default to the requested URL's scheme.\n    proxy = proto + '://' + proxy;\n  }\n  return proxy;\n}\n\n/**\n * Determines whether a given URL should be proxied.\n *\n * @param {string} hostname - The host name of the URL.\n * @param {number} port - The effective port of the URL.\n * @returns {boolean} Whether the given URL should be proxied.\n * @private\n */\nfunction shouldProxy(hostname, port) {\n  var NO_PROXY = getEnv('no_proxy').toLowerCase();\n  if (!NO_PROXY) {\n    return true;  // Always proxy if NO_PROXY is not set.\n  }\n  if (NO_PROXY === '*') {\n    return false;  // Never proxy if wildcard is set.\n  }\n\n  return NO_PROXY.split(/[,\\s]/).every(function(proxy) {\n    if (!proxy) {\n      return true;  // Skip zero-length hosts.\n    }\n    var parsedProxy = proxy.match(/^(.+):(\\d+)$/);\n    var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;\n    var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;\n    if (parsedProxyPort && parsedProxyPort !== port) {\n      return true;  // Skip if ports don't match.\n    }\n\n    if (!/^[.*]/.test(parsedProxyHostname)) {\n      // No wildcards, so stop proxying if there is an exact match.\n      return hostname !== parsedProxyHostname;\n    }\n\n    if (parsedProxyHostname.charAt(0) === '*') {\n      // Remove leading wildcard.\n      parsedProxyHostname = parsedProxyHostname.slice(1);\n    }\n    // Stop proxying if the hostname ends with the no_proxy host.\n    return !hostname.endsWith(parsedProxyHostname);\n  });\n}\n\n/**\n * Get the value for an environment variable.\n *\n * @param {string} key - The name of the environment variable.\n * @return {string} The value of the environment variable.\n * @private\n */\nfunction getEnv(key) {\n  return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || '';\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n", "'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n", "/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n", "/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n", "var debug;\n\nmodule.exports = function () {\n  if (!debug) {\n    try {\n      /* eslint global-require: off */\n      debug = require(\"debug\")(\"follow-redirects\");\n    }\n    catch (error) { /* */ }\n    if (typeof debug !== \"function\") {\n      debug = function () { /* */ };\n    }\n  }\n  debug.apply(null, arguments);\n};\n", "var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Preventive platform detection\n// istanbul ignore next\n(function detectUnsupportedEnvironment() {\n  var looksLikeNode = typeof process !== \"undefined\";\n  var looksLikeBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n  var looksLikeV8 = isFunction(Error.captureStackTrace);\n  if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) {\n    console.warn(\"The follow-redirects package should be excluded from browser builds.\");\n  }\n}());\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n  assert(new URL(\"\"));\n}\ncatch (error) {\n  useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n  \"auth\",\n  \"host\",\n  \"hostname\",\n  \"href\",\n  \"path\",\n  \"pathname\",\n  \"port\",\n  \"protocol\",\n  \"query\",\n  \"search\",\n  \"hash\",\n];\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n  eventHandlers[event] = function (arg1, arg2, arg3) {\n    this._redirectable.emit(event, arg1, arg2, arg3);\n  };\n});\n\n// Error types with codes\nvar InvalidUrlError = createErrorType(\n  \"ERR_INVALID_URL\",\n  \"Invalid URL\",\n  TypeError\n);\nvar RedirectionError = createErrorType(\n  \"ERR_FR_REDIRECTION_FAILURE\",\n  \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n  \"ERR_FR_TOO_MANY_REDIRECTS\",\n  \"Maximum number of redirects exceeded\",\n  RedirectionError\n);\nvar MaxBodyLengthExceededError = createErrorType(\n  \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n  \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n  \"ERR_STREAM_WRITE_AFTER_END\",\n  \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n  // Initialize the request\n  Writable.call(this);\n  this._sanitizeOptions(options);\n  this._options = options;\n  this._ended = false;\n  this._ending = false;\n  this._redirectCount = 0;\n  this._redirects = [];\n  this._requestBodyLength = 0;\n  this._requestBodyBuffers = [];\n\n  // Attach a callback if passed\n  if (responseCallback) {\n    this.on(\"response\", responseCallback);\n  }\n\n  // React to responses of native requests\n  var self = this;\n  this._onNativeResponse = function (response) {\n    try {\n      self._processResponse(response);\n    }\n    catch (cause) {\n      self.emit(\"error\", cause instanceof RedirectionError ?\n        cause : new RedirectionError({ cause: cause }));\n    }\n  };\n\n  // Perform the first request\n  this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n  destroyRequest(this._currentRequest);\n  this._currentRequest.abort();\n  this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n  destroyRequest(this._currentRequest, error);\n  destroy.call(this, error);\n  return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n  // Writing is not allowed if end has been called\n  if (this._ending) {\n    throw new WriteAfterEndError();\n  }\n\n  // Validate input and shift parameters if necessary\n  if (!isString(data) && !isBuffer(data)) {\n    throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n  }\n  if (isFunction(encoding)) {\n    callback = encoding;\n    encoding = null;\n  }\n\n  // Ignore empty buffers, since writing them doesn't invoke the callback\n  // https://github.com/nodejs/node/issues/22066\n  if (data.length === 0) {\n    if (callback) {\n      callback();\n    }\n    return;\n  }\n  // Only write when we don't exceed the maximum body length\n  if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n    this._requestBodyLength += data.length;\n    this._requestBodyBuffers.push({ data: data, encoding: encoding });\n    this._currentRequest.write(data, encoding, callback);\n  }\n  // Error when we exceed the maximum body length\n  else {\n    this.emit(\"error\", new MaxBodyLengthExceededError());\n    this.abort();\n  }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n  // Shift parameters if necessary\n  if (isFunction(data)) {\n    callback = data;\n    data = encoding = null;\n  }\n  else if (isFunction(encoding)) {\n    callback = encoding;\n    encoding = null;\n  }\n\n  // Write data if needed and end\n  if (!data) {\n    this._ended = this._ending = true;\n    this._currentRequest.end(null, null, callback);\n  }\n  else {\n    var self = this;\n    var currentRequest = this._currentRequest;\n    this.write(data, encoding, function () {\n      self._ended = true;\n      currentRequest.end(null, null, callback);\n    });\n    this._ending = true;\n  }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n  this._options.headers[name] = value;\n  this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n  delete this._options.headers[name];\n  this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n  var self = this;\n\n  // Destroys the socket on timeout\n  function destroyOnTimeout(socket) {\n    socket.setTimeout(msecs);\n    socket.removeListener(\"timeout\", socket.destroy);\n    socket.addListener(\"timeout\", socket.destroy);\n  }\n\n  // Sets up a timer to trigger a timeout event\n  function startTimer(socket) {\n    if (self._timeout) {\n      clearTimeout(self._timeout);\n    }\n    self._timeout = setTimeout(function () {\n      self.emit(\"timeout\");\n      clearTimer();\n    }, msecs);\n    destroyOnTimeout(socket);\n  }\n\n  // Stops a timeout from triggering\n  function clearTimer() {\n    // Clear the timeout\n    if (self._timeout) {\n      clearTimeout(self._timeout);\n      self._timeout = null;\n    }\n\n    // Clean up all attached listeners\n    self.removeListener(\"abort\", clearTimer);\n    self.removeListener(\"error\", clearTimer);\n    self.removeListener(\"response\", clearTimer);\n    self.removeListener(\"close\", clearTimer);\n    if (callback) {\n      self.removeListener(\"timeout\", callback);\n    }\n    if (!self.socket) {\n      self._currentRequest.removeListener(\"socket\", startTimer);\n    }\n  }\n\n  // Attach callback if passed\n  if (callback) {\n    this.on(\"timeout\", callback);\n  }\n\n  // Start the timer if or when the socket is opened\n  if (this.socket) {\n    startTimer(this.socket);\n  }\n  else {\n    this._currentRequest.once(\"socket\", startTimer);\n  }\n\n  // Clean up on events\n  this.on(\"socket\", destroyOnTimeout);\n  this.on(\"abort\", clearTimer);\n  this.on(\"error\", clearTimer);\n  this.on(\"response\", clearTimer);\n  this.on(\"close\", clearTimer);\n\n  return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n  \"flushHeaders\", \"getHeader\",\n  \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n  RedirectableRequest.prototype[method] = function (a, b) {\n    return this._currentRequest[method](a, b);\n  };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n  Object.defineProperty(RedirectableRequest.prototype, property, {\n    get: function () { return this._currentRequest[property]; },\n  });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n  // Ensure headers are always present\n  if (!options.headers) {\n    options.headers = {};\n  }\n\n  // Since http.request treats host as an alias of hostname,\n  // but the url module interprets host as hostname plus port,\n  // eliminate the host property to avoid confusion.\n  if (options.host) {\n    // Use hostname if set, because it has precedence\n    if (!options.hostname) {\n      options.hostname = options.host;\n    }\n    delete options.host;\n  }\n\n  // Complete the URL object when necessary\n  if (!options.pathname && options.path) {\n    var searchPos = options.path.indexOf(\"?\");\n    if (searchPos < 0) {\n      options.pathname = options.path;\n    }\n    else {\n      options.pathname = options.path.substring(0, searchPos);\n      options.search = options.path.substring(searchPos);\n    }\n  }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n  // Load the native protocol\n  var protocol = this._options.protocol;\n  var nativeProtocol = this._options.nativeProtocols[protocol];\n  if (!nativeProtocol) {\n    throw new TypeError(\"Unsupported protocol \" + protocol);\n  }\n\n  // If specified, use the agent corresponding to the protocol\n  // (HTTP and HTTPS use different types of agents)\n  if (this._options.agents) {\n    var scheme = protocol.slice(0, -1);\n    this._options.agent = this._options.agents[scheme];\n  }\n\n  // Create the native request and set up its event handlers\n  var request = this._currentRequest =\n        nativeProtocol.request(this._options, this._onNativeResponse);\n  request._redirectable = this;\n  for (var event of events) {\n    request.on(event, eventHandlers[event]);\n  }\n\n  // RFC7230\u00A75.3.1: When making a request directly to an origin server, [\u2026]\n  // a client MUST send only the absolute path [\u2026] as the request-target.\n  this._currentUrl = /^\\//.test(this._options.path) ?\n    url.format(this._options) :\n    // When making a request to a proxy, [\u2026]\n    // a client MUST send the target URI in absolute-form [\u2026].\n    this._options.path;\n\n  // End a redirected request\n  // (The first request must be ended explicitly with RedirectableRequest#end)\n  if (this._isRedirect) {\n    // Write the request entity and end\n    var i = 0;\n    var self = this;\n    var buffers = this._requestBodyBuffers;\n    (function writeNext(error) {\n      // Only write if this request has not been redirected yet\n      // istanbul ignore else\n      if (request === self._currentRequest) {\n        // Report any write errors\n        // istanbul ignore if\n        if (error) {\n          self.emit(\"error\", error);\n        }\n        // Write the next buffer if there are still left\n        else if (i < buffers.length) {\n          var buffer = buffers[i++];\n          // istanbul ignore else\n          if (!request.finished) {\n            request.write(buffer.data, buffer.encoding, writeNext);\n          }\n        }\n        // End the request if `end` has been called on us\n        else if (self._ended) {\n          request.end();\n        }\n      }\n    }());\n  }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n  // Store the redirected response\n  var statusCode = response.statusCode;\n  if (this._options.trackRedirects) {\n    this._redirects.push({\n      url: this._currentUrl,\n      headers: response.headers,\n      statusCode: statusCode,\n    });\n  }\n\n  // RFC7231\u00A76.4: The 3xx (Redirection) class of status code indicates\n  // that further action needs to be taken by the user agent in order to\n  // fulfill the request. If a Location header field is provided,\n  // the user agent MAY automatically redirect its request to the URI\n  // referenced by the Location field value,\n  // even if the specific status code is not understood.\n\n  // If the response is not a redirect; return it as-is\n  var location = response.headers.location;\n  if (!location || this._options.followRedirects === false ||\n      statusCode < 300 || statusCode >= 400) {\n    response.responseUrl = this._currentUrl;\n    response.redirects = this._redirects;\n    this.emit(\"response\", response);\n\n    // Clean up\n    this._requestBodyBuffers = [];\n    return;\n  }\n\n  // The response is a redirect, so abort the current request\n  destroyRequest(this._currentRequest);\n  // Discard the remainder of the response to avoid waiting for data\n  response.destroy();\n\n  // RFC7231\u00A76.4: A client SHOULD detect and intervene\n  // in cyclical redirections (i.e., \"infinite\" redirection loops).\n  if (++this._redirectCount > this._options.maxRedirects) {\n    throw new TooManyRedirectsError();\n  }\n\n  // Store the request headers if applicable\n  var requestHeaders;\n  var beforeRedirect = this._options.beforeRedirect;\n  if (beforeRedirect) {\n    requestHeaders = Object.assign({\n      // The Host header was set by nativeProtocol.request\n      Host: response.req.getHeader(\"host\"),\n    }, this._options.headers);\n  }\n\n  // RFC7231\u00A76.4: Automatic redirection needs to done with\n  // care for methods not known to be safe, [\u2026]\n  // RFC7231\u00A76.4.2\u20133: For historical reasons, a user agent MAY change\n  // the request method from POST to GET for the subsequent request.\n  var method = this._options.method;\n  if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n      // RFC7231\u00A76.4.4: The 303 (See Other) status code indicates that\n      // the server is redirecting the user agent to a different resource [\u2026]\n      // A user agent can perform a retrieval request targeting that URI\n      // (a GET or HEAD request if using HTTP) [\u2026]\n      (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n    this._options.method = \"GET\";\n    // Drop a possible entity and headers related to it\n    this._requestBodyBuffers = [];\n    removeMatchingHeaders(/^content-/i, this._options.headers);\n  }\n\n  // Drop the Host header, as the redirect might lead to a different host\n  var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n  // If the redirect is relative, carry over the host of the last request\n  var currentUrlParts = parseUrl(this._currentUrl);\n  var currentHost = currentHostHeader || currentUrlParts.host;\n  var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n    url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n  // Create the redirected request\n  var redirectUrl = resolveUrl(location, currentUrl);\n  debug(\"redirecting to\", redirectUrl.href);\n  this._isRedirect = true;\n  spreadUrlObject(redirectUrl, this._options);\n\n  // Drop confidential headers when redirecting to a less secure protocol\n  // or to a different domain that is not a superdomain\n  if (redirectUrl.protocol !== currentUrlParts.protocol &&\n     redirectUrl.protocol !== \"https:\" ||\n     redirectUrl.host !== currentHost &&\n     !isSubdomain(redirectUrl.host, currentHost)) {\n    removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n  }\n\n  // Evaluate the beforeRedirect callback\n  if (isFunction(beforeRedirect)) {\n    var responseDetails = {\n      headers: response.headers,\n      statusCode: statusCode,\n    };\n    var requestDetails = {\n      url: currentUrl,\n      method: method,\n      headers: requestHeaders,\n    };\n    beforeRedirect(this._options, responseDetails, requestDetails);\n    this._sanitizeOptions(this._options);\n  }\n\n  // Perform the redirected request\n  this._performRequest();\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n  // Default settings\n  var exports = {\n    maxRedirects: 21,\n    maxBodyLength: 10 * 1024 * 1024,\n  };\n\n  // Wrap each protocol\n  var nativeProtocols = {};\n  Object.keys(protocols).forEach(function (scheme) {\n    var protocol = scheme + \":\";\n    var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n    var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n    // Executes a request, following redirects\n    function request(input, options, callback) {\n      // Parse parameters, ensuring that input is an object\n      if (isURL(input)) {\n        input = spreadUrlObject(input);\n      }\n      else if (isString(input)) {\n        input = spreadUrlObject(parseUrl(input));\n      }\n      else {\n        callback = options;\n        options = validateUrl(input);\n        input = { protocol: protocol };\n      }\n      if (isFunction(options)) {\n        callback = options;\n        options = null;\n      }\n\n      // Set defaults\n      options = Object.assign({\n        maxRedirects: exports.maxRedirects,\n        maxBodyLength: exports.maxBodyLength,\n      }, input, options);\n      options.nativeProtocols = nativeProtocols;\n      if (!isString(options.host) && !isString(options.hostname)) {\n        options.hostname = \"::1\";\n      }\n\n      assert.equal(options.protocol, protocol, \"protocol mismatch\");\n      debug(\"options\", options);\n      return new RedirectableRequest(options, callback);\n    }\n\n    // Executes a GET request, following redirects\n    function get(input, options, callback) {\n      var wrappedRequest = wrappedProtocol.request(input, options, callback);\n      wrappedRequest.end();\n      return wrappedRequest;\n    }\n\n    // Expose the properties on the wrapped protocol\n    Object.defineProperties(wrappedProtocol, {\n      request: { value: request, configurable: true, enumerable: true, writable: true },\n      get: { value: get, configurable: true, enumerable: true, writable: true },\n    });\n  });\n  return exports;\n}\n\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n  var parsed;\n  // istanbul ignore else\n  if (useNativeURL) {\n    parsed = new URL(input);\n  }\n  else {\n    // Ensure the URL is valid and absolute\n    parsed = validateUrl(url.parse(input));\n    if (!isString(parsed.protocol)) {\n      throw new InvalidUrlError({ input });\n    }\n  }\n  return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n  // istanbul ignore next\n  return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n  if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n    throw new InvalidUrlError({ input: input.href || input });\n  }\n  if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n    throw new InvalidUrlError({ input: input.href || input });\n  }\n  return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n  var spread = target || {};\n  for (var key of preservedUrlFields) {\n    spread[key] = urlObject[key];\n  }\n\n  // Fix IPv6 hostname\n  if (spread.hostname.startsWith(\"[\")) {\n    spread.hostname = spread.hostname.slice(1, -1);\n  }\n  // Ensure port is a number\n  if (spread.port !== \"\") {\n    spread.port = Number(spread.port);\n  }\n  // Concatenate path\n  spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n  return spread;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n  var lastValue;\n  for (var header in headers) {\n    if (regex.test(header)) {\n      lastValue = headers[header];\n      delete headers[header];\n    }\n  }\n  return (lastValue === null || typeof lastValue === \"undefined\") ?\n    undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n  // Create constructor\n  function CustomError(properties) {\n    // istanbul ignore else\n    if (isFunction(Error.captureStackTrace)) {\n      Error.captureStackTrace(this, this.constructor);\n    }\n    Object.assign(this, properties || {});\n    this.code = code;\n    this.message = this.cause ? message + \": \" + this.cause.message : message;\n  }\n\n  // Attach constructor and set default properties\n  CustomError.prototype = new (baseClass || Error)();\n  Object.defineProperties(CustomError.prototype, {\n    constructor: {\n      value: CustomError,\n      enumerable: false,\n    },\n    name: {\n      value: \"Error [\" + code + \"]\",\n      enumerable: false,\n    },\n  });\n  return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n  for (var event of events) {\n    request.removeListener(event, eventHandlers[event]);\n  }\n  request.on(\"error\", noop);\n  request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n  assert(isString(subdomain) && isString(domain));\n  var dot = subdomain.length - domain.length - 1;\n  return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n  return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n  return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n  return URL && value instanceof URL;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n", "export const VERSION = \"1.15.0\";", "'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return (match && match[1]) || '';\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport parseProtocol from './parseProtocol.js';\nimport platform from '../platform/index.js';\n\nconst DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\\s\\S]*)$/;\n\n/**\n * Parse data uri to a Buffer or Blob\n *\n * @param {String} uri\n * @param {?Boolean} asBlob\n * @param {?Object} options\n * @param {?Function} options.Blob\n *\n * @returns {Buffer|Blob}\n */\nexport default function fromDataURI(uri, asBlob, options) {\n  const _Blob = (options && options.Blob) || platform.classes.Blob;\n  const protocol = parseProtocol(uri);\n\n  if (asBlob === undefined && _Blob) {\n    asBlob = true;\n  }\n\n  if (protocol === 'data') {\n    uri = protocol.length ? uri.slice(protocol.length + 1) : uri;\n\n    const match = DATA_URL_PATTERN.exec(uri);\n\n    if (!match) {\n      throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL);\n    }\n\n    const mime = match[1];\n    const isBase64 = match[2];\n    const body = match[3];\n    const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8');\n\n    if (asBlob) {\n      if (!_Blob) {\n        throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT);\n      }\n\n      return new _Blob([buffer], { type: mime });\n    }\n\n    return buffer;\n  }\n\n  throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT);\n}\n", "'use strict';\n\nimport stream from 'stream';\nimport utils from '../utils.js';\n\nconst kInternals = Symbol('internals');\n\nclass AxiosTransformStream extends stream.Transform {\n  constructor(options) {\n    options = utils.toFlatObject(\n      options,\n      {\n        maxRate: 0,\n        chunkSize: 64 * 1024,\n        minChunkSize: 100,\n        timeWindow: 500,\n        ticksRate: 2,\n        samplesCount: 15,\n      },\n      null,\n      (prop, source) => {\n        return !utils.isUndefined(source[prop]);\n      }\n    );\n\n    super({\n      readableHighWaterMark: options.chunkSize,\n    });\n\n    const internals = (this[kInternals] = {\n      timeWindow: options.timeWindow,\n      chunkSize: options.chunkSize,\n      maxRate: options.maxRate,\n      minChunkSize: options.minChunkSize,\n      bytesSeen: 0,\n      isCaptured: false,\n      notifiedBytesLoaded: 0,\n      ts: Date.now(),\n      bytes: 0,\n      onReadCallback: null,\n    });\n\n    this.on('newListener', (event) => {\n      if (event === 'progress') {\n        if (!internals.isCaptured) {\n          internals.isCaptured = true;\n        }\n      }\n    });\n  }\n\n  _read(size) {\n    const internals = this[kInternals];\n\n    if (internals.onReadCallback) {\n      internals.onReadCallback();\n    }\n\n    return super._read(size);\n  }\n\n  _transform(chunk, encoding, callback) {\n    const internals = this[kInternals];\n    const maxRate = internals.maxRate;\n\n    const readableHighWaterMark = this.readableHighWaterMark;\n\n    const timeWindow = internals.timeWindow;\n\n    const divider = 1000 / timeWindow;\n    const bytesThreshold = maxRate / divider;\n    const minChunkSize =\n      internals.minChunkSize !== false\n        ? Math.max(internals.minChunkSize, bytesThreshold * 0.01)\n        : 0;\n\n    const pushChunk = (_chunk, _callback) => {\n      const bytes = Buffer.byteLength(_chunk);\n      internals.bytesSeen += bytes;\n      internals.bytes += bytes;\n\n      internals.isCaptured && this.emit('progress', internals.bytesSeen);\n\n      if (this.push(_chunk)) {\n        process.nextTick(_callback);\n      } else {\n        internals.onReadCallback = () => {\n          internals.onReadCallback = null;\n          process.nextTick(_callback);\n        };\n      }\n    };\n\n    const transformChunk = (_chunk, _callback) => {\n      const chunkSize = Buffer.byteLength(_chunk);\n      let chunkRemainder = null;\n      let maxChunkSize = readableHighWaterMark;\n      let bytesLeft;\n      let passed = 0;\n\n      if (maxRate) {\n        const now = Date.now();\n\n        if (!internals.ts || (passed = now - internals.ts) >= timeWindow) {\n          internals.ts = now;\n          bytesLeft = bytesThreshold - internals.bytes;\n          internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;\n          passed = 0;\n        }\n\n        bytesLeft = bytesThreshold - internals.bytes;\n      }\n\n      if (maxRate) {\n        if (bytesLeft <= 0) {\n          // next time window\n          return setTimeout(() => {\n            _callback(null, _chunk);\n          }, timeWindow - passed);\n        }\n\n        if (bytesLeft < maxChunkSize) {\n          maxChunkSize = bytesLeft;\n        }\n      }\n\n      if (maxChunkSize && chunkSize > maxChunkSize && chunkSize - maxChunkSize > minChunkSize) {\n        chunkRemainder = _chunk.subarray(maxChunkSize);\n        _chunk = _chunk.subarray(0, maxChunkSize);\n      }\n\n      pushChunk(\n        _chunk,\n        chunkRemainder\n          ? () => {\n              process.nextTick(_callback, null, chunkRemainder);\n            }\n          : _callback\n      );\n    };\n\n    transformChunk(chunk, function transformNextChunk(err, _chunk) {\n      if (err) {\n        return callback(err);\n      }\n\n      if (_chunk) {\n        transformChunk(_chunk, transformNextChunk);\n      } else {\n        callback(null);\n      }\n    });\n  }\n}\n\nexport default AxiosTransformStream;\n", "const { asyncIterator } = Symbol;\n\nconst readBlob = async function* (blob) {\n  if (blob.stream) {\n    yield* blob.stream();\n  } else if (blob.arrayBuffer) {\n    yield await blob.arrayBuffer();\n  } else if (blob[asyncIterator]) {\n    yield* blob[asyncIterator]();\n  } else {\n    yield blob;\n  }\n};\n\nexport default readBlob;\n", "import util from 'util';\nimport { Readable } from 'stream';\nimport utils from '../utils.js';\nimport readBlob from './readBlob.js';\nimport platform from '../platform/index.js';\n\nconst BOUNDARY_ALPHABET = platform.ALPHABET.ALPHA_DIGIT + '-_';\n\nconst textEncoder = typeof TextEncoder === 'function' ? new TextEncoder() : new util.TextEncoder();\n\nconst CRLF = '\\r\\n';\nconst CRLF_BYTES = textEncoder.encode(CRLF);\nconst CRLF_BYTES_COUNT = 2;\n\nclass FormDataPart {\n  constructor(name, value) {\n    const { escapeName } = this.constructor;\n    const isStringValue = utils.isString(value);\n\n    let headers = `Content-Disposition: form-data; name=\"${escapeName(name)}\"${\n      !isStringValue && value.name ? `; filename=\"${escapeName(value.name)}\"` : ''\n    }${CRLF}`;\n\n    if (isStringValue) {\n      value = textEncoder.encode(String(value).replace(/\\r?\\n|\\r\\n?/g, CRLF));\n    } else {\n      headers += `Content-Type: ${value.type || 'application/octet-stream'}${CRLF}`;\n    }\n\n    this.headers = textEncoder.encode(headers + CRLF);\n\n    this.contentLength = isStringValue ? value.byteLength : value.size;\n\n    this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;\n\n    this.name = name;\n    this.value = value;\n  }\n\n  async *encode() {\n    yield this.headers;\n\n    const { value } = this;\n\n    if (utils.isTypedArray(value)) {\n      yield value;\n    } else {\n      yield* readBlob(value);\n    }\n\n    yield CRLF_BYTES;\n  }\n\n  static escapeName(name) {\n    return String(name).replace(\n      /[\\r\\n\"]/g,\n      (match) =>\n        ({\n          '\\r': '%0D',\n          '\\n': '%0A',\n          '\"': '%22',\n        })[match]\n    );\n  }\n}\n\nconst formDataToStream = (form, headersHandler, options) => {\n  const {\n    tag = 'form-data-boundary',\n    size = 25,\n    boundary = tag + '-' + platform.generateString(size, BOUNDARY_ALPHABET),\n  } = options || {};\n\n  if (!utils.isFormData(form)) {\n    throw TypeError('FormData instance required');\n  }\n\n  if (boundary.length < 1 || boundary.length > 70) {\n    throw Error('boundary must be 10-70 characters long');\n  }\n\n  const boundaryBytes = textEncoder.encode('--' + boundary + CRLF);\n  const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF);\n  let contentLength = footerBytes.byteLength;\n\n  const parts = Array.from(form.entries()).map(([name, value]) => {\n    const part = new FormDataPart(name, value);\n    contentLength += part.size;\n    return part;\n  });\n\n  contentLength += boundaryBytes.byteLength * parts.length;\n\n  contentLength = utils.toFiniteNumber(contentLength);\n\n  const computedHeaders = {\n    'Content-Type': `multipart/form-data; boundary=${boundary}`,\n  };\n\n  if (Number.isFinite(contentLength)) {\n    computedHeaders['Content-Length'] = contentLength;\n  }\n\n  headersHandler && headersHandler(computedHeaders);\n\n  return Readable.from(\n    (async function* () {\n      for (const part of parts) {\n        yield boundaryBytes;\n        yield* part.encode();\n      }\n\n      yield footerBytes;\n    })()\n  );\n};\n\nexport default formDataToStream;\n", "'use strict';\n\nimport stream from 'stream';\n\nclass ZlibHeaderTransformStream extends stream.Transform {\n  __transform(chunk, encoding, callback) {\n    this.push(chunk);\n    callback();\n  }\n\n  _transform(chunk, encoding, callback) {\n    if (chunk.length !== 0) {\n      this._transform = this.__transform;\n\n      // Add Default Compression headers if no zlib headers are present\n      if (chunk[0] !== 120) {\n        // Hex: 78\n        const header = Buffer.alloc(2);\n        header[0] = 120; // Hex: 78\n        header[1] = 156; // Hex: 9C\n        this.push(header, encoding);\n      }\n    }\n\n    this.__transform(chunk, encoding, callback);\n  }\n}\n\nexport default ZlibHeaderTransformStream;\n", "import utils from '../utils.js';\n\nconst callbackify = (fn, reducer) => {\n  return utils.isAsyncFn(fn)\n    ? function (...args) {\n        const cb = args.pop();\n        fn.apply(this, args).then((value) => {\n          try {\n            reducer ? cb(null, ...reducer(value)) : cb(null, value);\n          } catch (err) {\n            cb(err);\n          }\n        }, cb);\n      }\n    : fn;\n};\n\nexport default callbackify;\n", "const DEFAULT_PORTS = {\n  http: 80,\n  https: 443,\n  ws: 80,\n  wss: 443,\n  ftp: 21,\n};\n\nconst parseNoProxyEntry = (entry) => {\n  let entryHost = entry;\n  let entryPort = 0;\n\n  if (entryHost.charAt(0) === '[') {\n    const bracketIndex = entryHost.indexOf(']');\n\n    if (bracketIndex !== -1) {\n      const host = entryHost.slice(1, bracketIndex);\n      const rest = entryHost.slice(bracketIndex + 1);\n\n      if (rest.charAt(0) === ':' && /^\\d+$/.test(rest.slice(1))) {\n        entryPort = Number.parseInt(rest.slice(1), 10);\n      }\n\n      return [host, entryPort];\n    }\n  }\n\n  const firstColon = entryHost.indexOf(':');\n  const lastColon = entryHost.lastIndexOf(':');\n\n  if (\n    firstColon !== -1 &&\n    firstColon === lastColon &&\n    /^\\d+$/.test(entryHost.slice(lastColon + 1))\n  ) {\n    entryPort = Number.parseInt(entryHost.slice(lastColon + 1), 10);\n    entryHost = entryHost.slice(0, lastColon);\n  }\n\n  return [entryHost, entryPort];\n};\n\nconst normalizeNoProxyHost = (hostname) => {\n  if (!hostname) {\n    return hostname;\n  }\n\n  if (hostname.charAt(0) === '[' && hostname.charAt(hostname.length - 1) === ']') {\n    hostname = hostname.slice(1, -1);\n  }\n\n  return hostname.replace(/\\.+$/, '');\n};\n\nexport default function shouldBypassProxy(location) {\n  let parsed;\n\n  try {\n    parsed = new URL(location);\n  } catch (_err) {\n    return false;\n  }\n\n  const noProxy = (process.env.no_proxy || process.env.NO_PROXY || '').toLowerCase();\n\n  if (!noProxy) {\n    return false;\n  }\n\n  if (noProxy === '*') {\n    return true;\n  }\n\n  const port =\n    Number.parseInt(parsed.port, 10) || DEFAULT_PORTS[parsed.protocol.split(':', 1)[0]] || 0;\n\n  const hostname = normalizeNoProxyHost(parsed.hostname.toLowerCase());\n\n  return noProxy.split(/[\\s,]+/).some((entry) => {\n    if (!entry) {\n      return false;\n    }\n\n    let [entryHost, entryPort] = parseNoProxyEntry(entry);\n\n    entryHost = normalizeNoProxyHost(entryHost);\n\n    if (!entryHost) {\n      return false;\n    }\n\n    if (entryPort && entryPort !== port) {\n      return false;\n    }\n\n    if (entryHost.charAt(0) === '*') {\n      entryHost = entryHost.slice(1);\n    }\n\n    if (entryHost.charAt(0) === '.') {\n      return hostname.endsWith(entryHost);\n    }\n\n    return hostname === entryHost;\n  });\n}\n", "'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round((bytesCount * 1000) / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n", "/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1000 / freq;\n  let lastArgs;\n  let timer;\n\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn(...args);\n  };\n\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if (passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs);\n        }, threshold - passed);\n      }\n    }\n  };\n\n  const flush = () => lastArgs && invoke(lastArgs);\n\n  return [throttled, flush];\n}\n\nexport default throttle;\n", "import speedometer from './speedometer.js';\nimport throttle from './throttle.js';\nimport utils from '../utils.js';\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle((e) => {\n    const loaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const progressBytes = loaded - bytesNotified;\n    const rate = _speedometer(progressBytes);\n    const inRange = loaded <= total;\n\n    bytesNotified = loaded;\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? loaded / total : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? 'download' : 'upload']: true,\n    };\n\n    listener(data);\n  }, freq);\n};\n\nexport const progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n\n  return [\n    (loaded) =>\n      throttled[0]({\n        lengthComputable,\n        total,\n        loaded,\n      }),\n    throttled[1],\n  ];\n};\n\nexport const asyncDecorator =\n  (fn) =>\n  (...args) =>\n    utils.asap(() => fn(...args));\n", "/**\n * Estimate decoded byte length of a data:// URL *without* allocating large buffers.\n * - For base64: compute exact decoded size using length and padding;\n *               handle %XX at the character-count level (no string allocation).\n * - For non-base64: use UTF-8 byteLength of the encoded body as a safe upper bound.\n *\n * @param {string} url\n * @returns {number}\n */\nexport default function estimateDataURLDecodedBytes(url) {\n  if (!url || typeof url !== 'string') return 0;\n  if (!url.startsWith('data:')) return 0;\n\n  const comma = url.indexOf(',');\n  if (comma < 0) return 0;\n\n  const meta = url.slice(5, comma);\n  const body = url.slice(comma + 1);\n  const isBase64 = /;base64/i.test(meta);\n\n  if (isBase64) {\n    let effectiveLen = body.length;\n    const len = body.length; // cache length\n\n    for (let i = 0; i < len; i++) {\n      if (body.charCodeAt(i) === 37 /* '%' */ && i + 2 < len) {\n        const a = body.charCodeAt(i + 1);\n        const b = body.charCodeAt(i + 2);\n        const isHex =\n          ((a >= 48 && a <= 57) || (a >= 65 && a <= 70) || (a >= 97 && a <= 102)) &&\n          ((b >= 48 && b <= 57) || (b >= 65 && b <= 70) || (b >= 97 && b <= 102));\n\n        if (isHex) {\n          effectiveLen -= 2;\n          i += 2;\n        }\n      }\n    }\n\n    let pad = 0;\n    let idx = len - 1;\n\n    const tailIsPct3D = (j) =>\n      j >= 2 &&\n      body.charCodeAt(j - 2) === 37 && // '%'\n      body.charCodeAt(j - 1) === 51 && // '3'\n      (body.charCodeAt(j) === 68 || body.charCodeAt(j) === 100); // 'D' or 'd'\n\n    if (idx >= 0) {\n      if (body.charCodeAt(idx) === 61 /* '=' */) {\n        pad++;\n        idx--;\n      } else if (tailIsPct3D(idx)) {\n        pad++;\n        idx -= 3;\n      }\n    }\n\n    if (pad === 1 && idx >= 0) {\n      if (body.charCodeAt(idx) === 61 /* '=' */) {\n        pad++;\n      } else if (tailIsPct3D(idx)) {\n        pad++;\n      }\n    }\n\n    const groups = Math.floor(effectiveLen / 4);\n    const bytes = groups * 3 - (pad || 0);\n    return bytes > 0 ? bytes : 0;\n  }\n\n  return Buffer.byteLength(body, 'utf8');\n}\n", "import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport buildURL from '../helpers/buildURL.js';\nimport { getProxyForUrl } from 'proxy-from-env';\nimport http from 'http';\nimport https from 'https';\nimport http2 from 'http2';\nimport util from 'util';\nimport followRedirects from 'follow-redirects';\nimport zlib from 'zlib';\nimport { VERSION } from '../env/data.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport platform from '../platform/index.js';\nimport fromDataURI from '../helpers/fromDataURI.js';\nimport stream from 'stream';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport AxiosTransformStream from '../helpers/AxiosTransformStream.js';\nimport { EventEmitter } from 'events';\nimport formDataToStream from '../helpers/formDataToStream.js';\nimport readBlob from '../helpers/readBlob.js';\nimport ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js';\nimport callbackify from '../helpers/callbackify.js';\nimport shouldBypassProxy from '../helpers/shouldBypassProxy.js';\nimport {\n  progressEventReducer,\n  progressEventDecorator,\n  asyncDecorator,\n} from '../helpers/progressEventReducer.js';\nimport estimateDataURLDecodedBytes from '../helpers/estimateDataURLDecodedBytes.js';\n\nconst zlibOptions = {\n  flush: zlib.constants.Z_SYNC_FLUSH,\n  finishFlush: zlib.constants.Z_SYNC_FLUSH,\n};\n\nconst brotliOptions = {\n  flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n  finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH,\n};\n\nconst isBrotliSupported = utils.isFunction(zlib.createBrotliDecompress);\n\nconst { http: httpFollow, https: httpsFollow } = followRedirects;\n\nconst isHttps = /https:?/;\n\nconst supportedProtocols = platform.protocols.map((protocol) => {\n  return protocol + ':';\n});\n\nconst flushOnFinish = (stream, [throttled, flush]) => {\n  stream.on('end', flush).on('error', flush);\n\n  return throttled;\n};\n\nclass Http2Sessions {\n  constructor() {\n    this.sessions = Object.create(null);\n  }\n\n  getSession(authority, options) {\n    options = Object.assign(\n      {\n        sessionTimeout: 1000,\n      },\n      options\n    );\n\n    let authoritySessions = this.sessions[authority];\n\n    if (authoritySessions) {\n      let len = authoritySessions.length;\n\n      for (let i = 0; i < len; i++) {\n        const [sessionHandle, sessionOptions] = authoritySessions[i];\n        if (\n          !sessionHandle.destroyed &&\n          !sessionHandle.closed &&\n          util.isDeepStrictEqual(sessionOptions, options)\n        ) {\n          return sessionHandle;\n        }\n      }\n    }\n\n    const session = http2.connect(authority, options);\n\n    let removed;\n\n    const removeSession = () => {\n      if (removed) {\n        return;\n      }\n\n      removed = true;\n\n      let entries = authoritySessions,\n        len = entries.length,\n        i = len;\n\n      while (i--) {\n        if (entries[i][0] === session) {\n          if (len === 1) {\n            delete this.sessions[authority];\n          } else {\n            entries.splice(i, 1);\n          }\n          if (!session.closed) {\n            session.close();\n          }\n          return;\n        }\n      }\n    };\n\n    const originalRequestFn = session.request;\n\n    const { sessionTimeout } = options;\n\n    if (sessionTimeout != null) {\n      let timer;\n      let streamsCount = 0;\n\n      session.request = function () {\n        const stream = originalRequestFn.apply(this, arguments);\n\n        streamsCount++;\n\n        if (timer) {\n          clearTimeout(timer);\n          timer = null;\n        }\n\n        stream.once('close', () => {\n          if (!--streamsCount) {\n            timer = setTimeout(() => {\n              timer = null;\n              removeSession();\n            }, sessionTimeout);\n          }\n        });\n\n        return stream;\n      };\n    }\n\n    session.once('close', removeSession);\n\n    let entry = [session, options];\n\n    authoritySessions\n      ? authoritySessions.push(entry)\n      : (authoritySessions = this.sessions[authority] = [entry]);\n\n    return session;\n  }\n}\n\nconst http2Sessions = new Http2Sessions();\n\n/**\n * If the proxy or config beforeRedirects functions are defined, call them with the options\n * object.\n *\n * @param {Object<string, any>} options - The options object that was passed to the request.\n *\n * @returns {Object<string, any>}\n */\nfunction dispatchBeforeRedirect(options, responseDetails) {\n  if (options.beforeRedirects.proxy) {\n    options.beforeRedirects.proxy(options);\n  }\n  if (options.beforeRedirects.config) {\n    options.beforeRedirects.config(options, responseDetails);\n  }\n}\n\n/**\n * If the proxy or config afterRedirects functions are defined, call them with the options\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} configProxy configuration from Axios options object\n * @param {string} location\n *\n * @returns {http.ClientRequestArgs}\n */\nfunction setProxy(options, configProxy, location) {\n  let proxy = configProxy;\n  if (!proxy && proxy !== false) {\n    const proxyUrl = getProxyForUrl(location);\n    if (proxyUrl) {\n      if (!shouldBypassProxy(location)) {\n        proxy = new URL(proxyUrl);\n      }\n    }\n  }\n  if (proxy) {\n    // Basic proxy authorization\n    if (proxy.username) {\n      proxy.auth = (proxy.username || '') + ':' + (proxy.password || '');\n    }\n\n    if (proxy.auth) {\n      // Support proxy auth object form\n      const validProxyAuth = Boolean(proxy.auth.username || proxy.auth.password);\n\n      if (validProxyAuth) {\n        proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || '');\n      } else if (typeof proxy.auth === 'object') {\n        throw new AxiosError('Invalid proxy authorization', AxiosError.ERR_BAD_OPTION, { proxy });\n      }\n\n      const base64 = Buffer.from(proxy.auth, 'utf8').toString('base64');\n\n      options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n    }\n\n    options.headers.host = options.hostname + (options.port ? ':' + options.port : '');\n    const proxyHost = proxy.hostname || proxy.host;\n    options.hostname = proxyHost;\n    // Replace 'host' since options is not a URL object\n    options.host = proxyHost;\n    options.port = proxy.port;\n    options.path = location;\n    if (proxy.protocol) {\n      options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`;\n    }\n  }\n\n  options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {\n    // Configure proxy for redirected request, passing the original config proxy to apply\n    // the exact same logic as if the redirected request was performed by axios directly.\n    setProxy(redirectOptions, configProxy, redirectOptions.href);\n  };\n}\n\nconst isHttpAdapterSupported =\n  typeof process !== 'undefined' && utils.kindOf(process) === 'process';\n\n// temporary hotfix\n\nconst wrapAsync = (asyncExecutor) => {\n  return new Promise((resolve, reject) => {\n    let onDone;\n    let isDone;\n\n    const done = (value, isRejected) => {\n      if (isDone) return;\n      isDone = true;\n      onDone && onDone(value, isRejected);\n    };\n\n    const _resolve = (value) => {\n      done(value);\n      resolve(value);\n    };\n\n    const _reject = (reason) => {\n      done(reason, true);\n      reject(reason);\n    };\n\n    asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject);\n  });\n};\n\nconst resolveFamily = ({ address, family }) => {\n  if (!utils.isString(address)) {\n    throw TypeError('address must be a string');\n  }\n  return {\n    address,\n    family: family || (address.indexOf('.') < 0 ? 6 : 4),\n  };\n};\n\nconst buildAddressEntry = (address, family) =>\n  resolveFamily(utils.isObject(address) ? address : { address, family });\n\nconst http2Transport = {\n  request(options, cb) {\n    const authority =\n      options.protocol +\n      '//' +\n      options.hostname +\n      ':' +\n      (options.port || (options.protocol === 'https:' ? 443 : 80));\n\n    const { http2Options, headers } = options;\n\n    const session = http2Sessions.getSession(authority, http2Options);\n\n    const { HTTP2_HEADER_SCHEME, HTTP2_HEADER_METHOD, HTTP2_HEADER_PATH, HTTP2_HEADER_STATUS } =\n      http2.constants;\n\n    const http2Headers = {\n      [HTTP2_HEADER_SCHEME]: options.protocol.replace(':', ''),\n      [HTTP2_HEADER_METHOD]: options.method,\n      [HTTP2_HEADER_PATH]: options.path,\n    };\n\n    utils.forEach(headers, (header, name) => {\n      name.charAt(0) !== ':' && (http2Headers[name] = header);\n    });\n\n    const req = session.request(http2Headers);\n\n    req.once('response', (responseHeaders) => {\n      const response = req; //duplex\n\n      responseHeaders = Object.assign({}, responseHeaders);\n\n      const status = responseHeaders[HTTP2_HEADER_STATUS];\n\n      delete responseHeaders[HTTP2_HEADER_STATUS];\n\n      response.headers = responseHeaders;\n\n      response.statusCode = +status;\n\n      cb(response);\n    });\n\n    return req;\n  },\n};\n\n/*eslint consistent-return:0*/\nexport default isHttpAdapterSupported &&\n  function httpAdapter(config) {\n    return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {\n      let { data, lookup, family, httpVersion = 1, http2Options } = config;\n      const { responseType, responseEncoding } = config;\n      const method = config.method.toUpperCase();\n      let isDone;\n      let rejected = false;\n      let req;\n\n      httpVersion = +httpVersion;\n\n      if (Number.isNaN(httpVersion)) {\n        throw TypeError(`Invalid protocol version: '${config.httpVersion}' is not a number`);\n      }\n\n      if (httpVersion !== 1 && httpVersion !== 2) {\n        throw TypeError(`Unsupported protocol version '${httpVersion}'`);\n      }\n\n      const isHttp2 = httpVersion === 2;\n\n      if (lookup) {\n        const _lookup = callbackify(lookup, (value) => (utils.isArray(value) ? value : [value]));\n        // hotfix to support opt.all option which is required for node 20.x\n        lookup = (hostname, opt, cb) => {\n          _lookup(hostname, opt, (err, arg0, arg1) => {\n            if (err) {\n              return cb(err);\n            }\n\n            const addresses = utils.isArray(arg0)\n              ? arg0.map((addr) => buildAddressEntry(addr))\n              : [buildAddressEntry(arg0, arg1)];\n\n            opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);\n          });\n        };\n      }\n\n      const abortEmitter = new EventEmitter();\n\n      function abort(reason) {\n        try {\n          abortEmitter.emit(\n            'abort',\n            !reason || reason.type ? new CanceledError(null, config, req) : reason\n          );\n        } catch (err) {\n          console.warn('emit error', err);\n        }\n      }\n\n      abortEmitter.once('abort', reject);\n\n      const onFinished = () => {\n        if (config.cancelToken) {\n          config.cancelToken.unsubscribe(abort);\n        }\n\n        if (config.signal) {\n          config.signal.removeEventListener('abort', abort);\n        }\n\n        abortEmitter.removeAllListeners();\n      };\n\n      if (config.cancelToken || config.signal) {\n        config.cancelToken && config.cancelToken.subscribe(abort);\n        if (config.signal) {\n          config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort);\n        }\n      }\n\n      onDone((response, isRejected) => {\n        isDone = true;\n\n        if (isRejected) {\n          rejected = true;\n          onFinished();\n          return;\n        }\n\n        const { data } = response;\n\n        if (data instanceof stream.Readable || data instanceof stream.Duplex) {\n          const offListeners = stream.finished(data, () => {\n            offListeners();\n            onFinished();\n          });\n        } else {\n          onFinished();\n        }\n      });\n\n      // Parse url\n      const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n      const parsed = new URL(fullPath, platform.hasBrowserEnv ? platform.origin : undefined);\n      const protocol = parsed.protocol || supportedProtocols[0];\n\n      if (protocol === 'data:') {\n        // Apply the same semantics as HTTP: only enforce if a finite, non-negative cap is set.\n        if (config.maxContentLength > -1) {\n          // Use the exact string passed to fromDataURI (config.url); fall back to fullPath if needed.\n          const dataUrl = String(config.url || fullPath || '');\n          const estimated = estimateDataURLDecodedBytes(dataUrl);\n\n          if (estimated > config.maxContentLength) {\n            return reject(\n              new AxiosError(\n                'maxContentLength size of ' + config.maxContentLength + ' exceeded',\n                AxiosError.ERR_BAD_RESPONSE,\n                config\n              )\n            );\n          }\n        }\n\n        let convertedData;\n\n        if (method !== 'GET') {\n          return settle(resolve, reject, {\n            status: 405,\n            statusText: 'method not allowed',\n            headers: {},\n            config,\n          });\n        }\n\n        try {\n          convertedData = fromDataURI(config.url, responseType === 'blob', {\n            Blob: config.env && config.env.Blob,\n          });\n        } catch (err) {\n          throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config);\n        }\n\n        if (responseType === 'text') {\n          convertedData = convertedData.toString(responseEncoding);\n\n          if (!responseEncoding || responseEncoding === 'utf8') {\n            convertedData = utils.stripBOM(convertedData);\n          }\n        } else if (responseType === 'stream') {\n          convertedData = stream.Readable.from(convertedData);\n        }\n\n        return settle(resolve, reject, {\n          data: convertedData,\n          status: 200,\n          statusText: 'OK',\n          headers: new AxiosHeaders(),\n          config,\n        });\n      }\n\n      if (supportedProtocols.indexOf(protocol) === -1) {\n        return reject(\n          new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_BAD_REQUEST, config)\n        );\n      }\n\n      const headers = AxiosHeaders.from(config.headers).normalize();\n\n      // Set User-Agent (required by some servers)\n      // See https://github.com/axios/axios/issues/69\n      // User-Agent is specified; handle case where no UA header is desired\n      // Only set header if it hasn't been set in config\n      headers.set('User-Agent', 'axios/' + VERSION, false);\n\n      const { onUploadProgress, onDownloadProgress } = config;\n      const maxRate = config.maxRate;\n      let maxUploadRate = undefined;\n      let maxDownloadRate = undefined;\n\n      // support for spec compliant FormData objects\n      if (utils.isSpecCompliantForm(data)) {\n        const userBoundary = headers.getContentType(/boundary=([-_\\w\\d]{10,70})/i);\n\n        data = formDataToStream(\n          data,\n          (formHeaders) => {\n            headers.set(formHeaders);\n          },\n          {\n            tag: `axios-${VERSION}-boundary`,\n            boundary: (userBoundary && userBoundary[1]) || undefined,\n          }\n        );\n        // support for https://www.npmjs.com/package/form-data api\n      } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {\n        headers.set(data.getHeaders());\n\n        if (!headers.hasContentLength()) {\n          try {\n            const knownLength = await util.promisify(data.getLength).call(data);\n            Number.isFinite(knownLength) &&\n              knownLength >= 0 &&\n              headers.setContentLength(knownLength);\n            /*eslint no-empty:0*/\n          } catch (e) {}\n        }\n      } else if (utils.isBlob(data) || utils.isFile(data)) {\n        data.size && headers.setContentType(data.type || 'application/octet-stream');\n        headers.setContentLength(data.size || 0);\n        data = stream.Readable.from(readBlob(data));\n      } else if (data && !utils.isStream(data)) {\n        if (Buffer.isBuffer(data)) {\n          // Nothing to do...\n        } else if (utils.isArrayBuffer(data)) {\n          data = Buffer.from(new Uint8Array(data));\n        } else if (utils.isString(data)) {\n          data = Buffer.from(data, 'utf-8');\n        } else {\n          return reject(\n            new AxiosError(\n              'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n              AxiosError.ERR_BAD_REQUEST,\n              config\n            )\n          );\n        }\n\n        // Add Content-Length header if data exists\n        headers.setContentLength(data.length, false);\n\n        if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {\n          return reject(\n            new AxiosError(\n              'Request body larger than maxBodyLength limit',\n              AxiosError.ERR_BAD_REQUEST,\n              config\n            )\n          );\n        }\n      }\n\n      const contentLength = utils.toFiniteNumber(headers.getContentLength());\n\n      if (utils.isArray(maxRate)) {\n        maxUploadRate = maxRate[0];\n        maxDownloadRate = maxRate[1];\n      } else {\n        maxUploadRate = maxDownloadRate = maxRate;\n      }\n\n      if (data && (onUploadProgress || maxUploadRate)) {\n        if (!utils.isStream(data)) {\n          data = stream.Readable.from(data, { objectMode: false });\n        }\n\n        data = stream.pipeline(\n          [\n            data,\n            new AxiosTransformStream({\n              maxRate: utils.toFiniteNumber(maxUploadRate),\n            }),\n          ],\n          utils.noop\n        );\n\n        onUploadProgress &&\n          data.on(\n            'progress',\n            flushOnFinish(\n              data,\n              progressEventDecorator(\n                contentLength,\n                progressEventReducer(asyncDecorator(onUploadProgress), false, 3)\n              )\n            )\n          );\n      }\n\n      // HTTP basic authentication\n      let auth = undefined;\n      if (config.auth) {\n        const username = config.auth.username || '';\n        const password = config.auth.password || '';\n        auth = username + ':' + password;\n      }\n\n      if (!auth && parsed.username) {\n        const urlUsername = parsed.username;\n        const urlPassword = parsed.password;\n        auth = urlUsername + ':' + urlPassword;\n      }\n\n      auth && headers.delete('authorization');\n\n      let path;\n\n      try {\n        path = buildURL(\n          parsed.pathname + parsed.search,\n          config.params,\n          config.paramsSerializer\n        ).replace(/^\\?/, '');\n      } catch (err) {\n        const customErr = new Error(err.message);\n        customErr.config = config;\n        customErr.url = config.url;\n        customErr.exists = true;\n        return reject(customErr);\n      }\n\n      headers.set(\n        'Accept-Encoding',\n        'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''),\n        false\n      );\n\n      const options = {\n        path,\n        method: method,\n        headers: headers.toJSON(),\n        agents: { http: config.httpAgent, https: config.httpsAgent },\n        auth,\n        protocol,\n        family,\n        beforeRedirect: dispatchBeforeRedirect,\n        beforeRedirects: {},\n        http2Options,\n      };\n\n      // cacheable-lookup integration hotfix\n      !utils.isUndefined(lookup) && (options.lookup = lookup);\n\n      if (config.socketPath) {\n        options.socketPath = config.socketPath;\n      } else {\n        options.hostname = parsed.hostname.startsWith('[')\n          ? parsed.hostname.slice(1, -1)\n          : parsed.hostname;\n        options.port = parsed.port;\n        setProxy(\n          options,\n          config.proxy,\n          protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path\n        );\n      }\n      let transport;\n      const isHttpsRequest = isHttps.test(options.protocol);\n      options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n\n      if (isHttp2) {\n        transport = http2Transport;\n      } else {\n        if (config.transport) {\n          transport = config.transport;\n        } else if (config.maxRedirects === 0) {\n          transport = isHttpsRequest ? https : http;\n        } else {\n          if (config.maxRedirects) {\n            options.maxRedirects = config.maxRedirects;\n          }\n          if (config.beforeRedirect) {\n            options.beforeRedirects.config = config.beforeRedirect;\n          }\n          transport = isHttpsRequest ? httpsFollow : httpFollow;\n        }\n      }\n\n      if (config.maxBodyLength > -1) {\n        options.maxBodyLength = config.maxBodyLength;\n      } else {\n        // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited\n        options.maxBodyLength = Infinity;\n      }\n\n      if (config.insecureHTTPParser) {\n        options.insecureHTTPParser = config.insecureHTTPParser;\n      }\n\n      // Create the request\n      req = transport.request(options, function handleResponse(res) {\n        if (req.destroyed) return;\n\n        const streams = [res];\n\n        const responseLength = utils.toFiniteNumber(res.headers['content-length']);\n\n        if (onDownloadProgress || maxDownloadRate) {\n          const transformStream = new AxiosTransformStream({\n            maxRate: utils.toFiniteNumber(maxDownloadRate),\n          });\n\n          onDownloadProgress &&\n            transformStream.on(\n              'progress',\n              flushOnFinish(\n                transformStream,\n                progressEventDecorator(\n                  responseLength,\n                  progressEventReducer(asyncDecorator(onDownloadProgress), true, 3)\n                )\n              )\n            );\n\n          streams.push(transformStream);\n        }\n\n        // decompress the response body transparently if required\n        let responseStream = res;\n\n        // return the last request in case of redirects\n        const lastRequest = res.req || req;\n\n        // if decompress disabled we should not decompress\n        if (config.decompress !== false && res.headers['content-encoding']) {\n          // if no content, but headers still say that it is encoded,\n          // remove the header not confuse downstream operations\n          if (method === 'HEAD' || res.statusCode === 204) {\n            delete res.headers['content-encoding'];\n          }\n\n          switch ((res.headers['content-encoding'] || '').toLowerCase()) {\n            /*eslint default-case:0*/\n            case 'gzip':\n            case 'x-gzip':\n            case 'compress':\n            case 'x-compress':\n              // add the unzipper to the body stream processing pipeline\n              streams.push(zlib.createUnzip(zlibOptions));\n\n              // remove the content-encoding in order to not confuse downstream operations\n              delete res.headers['content-encoding'];\n              break;\n            case 'deflate':\n              streams.push(new ZlibHeaderTransformStream());\n\n              // add the unzipper to the body stream processing pipeline\n              streams.push(zlib.createUnzip(zlibOptions));\n\n              // remove the content-encoding in order to not confuse downstream operations\n              delete res.headers['content-encoding'];\n              break;\n            case 'br':\n              if (isBrotliSupported) {\n                streams.push(zlib.createBrotliDecompress(brotliOptions));\n                delete res.headers['content-encoding'];\n              }\n          }\n        }\n\n        responseStream = streams.length > 1 ? stream.pipeline(streams, utils.noop) : streams[0];\n\n        const response = {\n          status: res.statusCode,\n          statusText: res.statusMessage,\n          headers: new AxiosHeaders(res.headers),\n          config,\n          request: lastRequest,\n        };\n\n        if (responseType === 'stream') {\n          response.data = responseStream;\n          settle(resolve, reject, response);\n        } else {\n          const responseBuffer = [];\n          let totalResponseBytes = 0;\n\n          responseStream.on('data', function handleStreamData(chunk) {\n            responseBuffer.push(chunk);\n            totalResponseBytes += chunk.length;\n\n            // make sure the content length is not over the maxContentLength if specified\n            if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n              // stream.destroy() emit aborted event before calling reject() on Node.js v16\n              rejected = true;\n              responseStream.destroy();\n              abort(\n                new AxiosError(\n                  'maxContentLength size of ' + config.maxContentLength + ' exceeded',\n                  AxiosError.ERR_BAD_RESPONSE,\n                  config,\n                  lastRequest\n                )\n              );\n            }\n          });\n\n          responseStream.on('aborted', function handlerStreamAborted() {\n            if (rejected) {\n              return;\n            }\n\n            const err = new AxiosError(\n              'stream has been aborted',\n              AxiosError.ERR_BAD_RESPONSE,\n              config,\n              lastRequest\n            );\n            responseStream.destroy(err);\n            reject(err);\n          });\n\n          responseStream.on('error', function handleStreamError(err) {\n            if (req.destroyed) return;\n            reject(AxiosError.from(err, null, config, lastRequest));\n          });\n\n          responseStream.on('end', function handleStreamEnd() {\n            try {\n              let responseData =\n                responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);\n              if (responseType !== 'arraybuffer') {\n                responseData = responseData.toString(responseEncoding);\n                if (!responseEncoding || responseEncoding === 'utf8') {\n                  responseData = utils.stripBOM(responseData);\n                }\n              }\n              response.data = responseData;\n            } catch (err) {\n              return reject(AxiosError.from(err, null, config, response.request, response));\n            }\n            settle(resolve, reject, response);\n          });\n        }\n\n        abortEmitter.once('abort', (err) => {\n          if (!responseStream.destroyed) {\n            responseStream.emit('error', err);\n            responseStream.destroy();\n          }\n        });\n      });\n\n      abortEmitter.once('abort', (err) => {\n        if (req.close) {\n          req.close();\n        } else {\n          req.destroy(err);\n        }\n      });\n\n      // Handle errors\n      req.on('error', function handleRequestError(err) {\n        reject(AxiosError.from(err, null, config, req));\n      });\n\n      // set tcp keep alive to prevent drop connection by peer\n      req.on('socket', function handleRequestSocket(socket) {\n        // default interval of sending ack packet is 1 minute\n        socket.setKeepAlive(true, 1000 * 60);\n      });\n\n      // Handle request timeout\n      if (config.timeout) {\n        // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n        const timeout = parseInt(config.timeout, 10);\n\n        if (Number.isNaN(timeout)) {\n          abort(\n            new AxiosError(\n              'error trying to parse `config.timeout` to int',\n              AxiosError.ERR_BAD_OPTION_VALUE,\n              config,\n              req\n            )\n          );\n\n          return;\n        }\n\n        // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n        // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n        // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n        // And then these socket which be hang up will devouring CPU little by little.\n        // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n        req.setTimeout(timeout, function handleRequestTimeout() {\n          if (isDone) return;\n          let timeoutErrorMessage = config.timeout\n            ? 'timeout of ' + config.timeout + 'ms exceeded'\n            : 'timeout exceeded';\n          const transitional = config.transitional || transitionalDefaults;\n          if (config.timeoutErrorMessage) {\n            timeoutErrorMessage = config.timeoutErrorMessage;\n          }\n          abort(\n            new AxiosError(\n              timeoutErrorMessage,\n              transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n              config,\n              req\n            )\n          );\n        });\n      } else {\n        // explicitly reset the socket timeout value for a possible `keep-alive` request\n        req.setTimeout(0);\n      }\n\n      // Send the request\n      if (utils.isStream(data)) {\n        let ended = false;\n        let errored = false;\n\n        data.on('end', () => {\n          ended = true;\n        });\n\n        data.once('error', (err) => {\n          errored = true;\n          req.destroy(err);\n        });\n\n        data.on('close', () => {\n          if (!ended && !errored) {\n            abort(new CanceledError('Request stream has been aborted', config, req));\n          }\n        });\n\n        data.pipe(req);\n      } else {\n        data && req.write(data);\n        req.end();\n      }\n    });\n  };\n\nexport const __setProxy = setProxy;\n", "import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv\n  ? ((origin, isMSIE) => (url) => {\n      url = new URL(url, platform.origin);\n\n      return (\n        origin.protocol === url.protocol &&\n        origin.host === url.host &&\n        (isMSIE || origin.port === url.port)\n      );\n    })(\n      new URL(platform.origin),\n      platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n    )\n  : () => true;\n", "import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv\n  ? // Standard browser envs support document.cookie\n    {\n      write(name, value, expires, path, domain, secure, sameSite) {\n        if (typeof document === 'undefined') return;\n\n        const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n        if (utils.isNumber(expires)) {\n          cookie.push(`expires=${new Date(expires).toUTCString()}`);\n        }\n        if (utils.isString(path)) {\n          cookie.push(`path=${path}`);\n        }\n        if (utils.isString(domain)) {\n          cookie.push(`domain=${domain}`);\n        }\n        if (secure === true) {\n          cookie.push('secure');\n        }\n        if (utils.isString(sameSite)) {\n          cookie.push(`SameSite=${sameSite}`);\n        }\n\n        document.cookie = cookie.join('; ');\n      },\n\n      read(name) {\n        if (typeof document === 'undefined') return null;\n        const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n        return match ? decodeURIComponent(match[1]) : null;\n      },\n\n      remove(name) {\n        this.write(name, '', Date.now() - 86400000, '/');\n      },\n    }\n  : // Non-standard browser env (web workers, react-native) lack needed support.\n    {\n      write() {},\n      read() {\n        return null;\n      },\n      remove() {},\n    };\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst headersToObject = (thing) => (thing instanceof AxiosHeaders ? { ...thing } : thing);\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  const config = {};\n\n  function getMergedValue(target, source, prop, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({ caseless }, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  function mergeDeepProperties(a, b, prop, caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, prop, caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, prop, caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (prop in config2) {\n      return getMergedValue(a, b);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b, prop) =>\n      mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n  };\n\n  utils.forEach(Object.keys({ ...config1, ...config2 }), function computeConfigValue(prop) {\n    if (prop === '__proto__' || prop === 'constructor' || prop === 'prototype') return;\n    const merge = utils.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties;\n    const configValue = merge(config1[prop], config2[prop], prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n}\n", "import platform from '../platform/index.js';\nimport utils from '../utils.js';\nimport isURLSameOrigin from './isURLSameOrigin.js';\nimport cookies from './cookies.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport mergeConfig from '../core/mergeConfig.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport buildURL from './buildURL.js';\n\nexport default (config) => {\n  const newConfig = mergeConfig({}, config);\n\n  let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(\n    buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls),\n    config.params,\n    config.paramsSerializer\n  );\n\n  // HTTP basic authentication\n  if (auth) {\n    headers.set(\n      'Authorization',\n      'Basic ' +\n        btoa(\n          (auth.username || '') +\n            ':' +\n            (auth.password ? unescape(encodeURIComponent(auth.password)) : '')\n        )\n    );\n  }\n\n  if (utils.isFormData(data)) {\n    if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n      headers.setContentType(undefined); // browser handles it\n    } else if (utils.isFunction(data.getHeaders)) {\n      // Node.js FormData (like form-data package)\n      const formHeaders = data.getHeaders();\n      // Only set safe headers to avoid overwriting security headers\n      const allowedHeaders = ['content-type', 'content-length'];\n      Object.entries(formHeaders).forEach(([key, val]) => {\n        if (allowedHeaders.includes(key.toLowerCase())) {\n          headers.set(key, val);\n        }\n      });\n    }\n  }\n\n  // Add xsrf header\n  // This is only done if running in a standard browser environment.\n  // Specifically not if we're in a web worker, or react-native.\n\n  if (platform.hasStandardBrowserEnv) {\n    withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n    if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n      // Add xsrf header\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n};\n", "import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport { progressEventReducer } from '../helpers/progressEventReducer.js';\nimport resolveConfig from '../helpers/resolveConfig.js';\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported &&\n  function (config) {\n    return new Promise(function dispatchXhrRequest(resolve, reject) {\n      const _config = resolveConfig(config);\n      let requestData = _config.data;\n      const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n      let { responseType, onUploadProgress, onDownloadProgress } = _config;\n      let onCanceled;\n      let uploadThrottled, downloadThrottled;\n      let flushUpload, flushDownload;\n\n      function done() {\n        flushUpload && flushUpload(); // flush events\n        flushDownload && flushDownload(); // flush events\n\n        _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n        _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n      }\n\n      let request = new XMLHttpRequest();\n\n      request.open(_config.method.toUpperCase(), _config.url, true);\n\n      // Set the request timeout in MS\n      request.timeout = _config.timeout;\n\n      function onloadend() {\n        if (!request) {\n          return;\n        }\n        // Prepare the response\n        const responseHeaders = AxiosHeaders.from(\n          'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n        );\n        const responseData =\n          !responseType || responseType === 'text' || responseType === 'json'\n            ? request.responseText\n            : request.response;\n        const response = {\n          data: responseData,\n          status: request.status,\n          statusText: request.statusText,\n          headers: responseHeaders,\n          config,\n          request,\n        };\n\n        settle(\n          function _resolve(value) {\n            resolve(value);\n            done();\n          },\n          function _reject(err) {\n            reject(err);\n            done();\n          },\n          response\n        );\n\n        // Clean up request\n        request = null;\n      }\n\n      if ('onloadend' in request) {\n        // Use onloadend if available\n        request.onloadend = onloadend;\n      } else {\n        // Listen for ready state to emulate onloadend\n        request.onreadystatechange = function handleLoad() {\n          if (!request || request.readyState !== 4) {\n            return;\n          }\n\n          // The request errored out and we didn't get a response, this will be\n          // handled by onerror instead\n          // With one exception: request that using file: protocol, most browsers\n          // will return status as 0 even though it's a successful request\n          if (\n            request.status === 0 &&\n            !(request.responseURL && request.responseURL.indexOf('file:') === 0)\n          ) {\n            return;\n          }\n          // readystate handler is calling before onerror or ontimeout handlers,\n          // so we should call onloadend on the next 'tick'\n          setTimeout(onloadend);\n        };\n      }\n\n      // Handle browser request cancellation (as opposed to a manual cancellation)\n      request.onabort = function handleAbort() {\n        if (!request) {\n          return;\n        }\n\n        reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n        // Clean up request\n        request = null;\n      };\n\n      // Handle low level network errors\n      request.onerror = function handleError(event) {\n        // Browsers deliver a ProgressEvent in XHR onerror\n        // (message may be empty; when present, surface it)\n        // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n        const msg = event && event.message ? event.message : 'Network Error';\n        const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n        // attach the underlying event for consumers who want details\n        err.event = event || null;\n        reject(err);\n        request = null;\n      };\n\n      // Handle timeout\n      request.ontimeout = function handleTimeout() {\n        let timeoutErrorMessage = _config.timeout\n          ? 'timeout of ' + _config.timeout + 'ms exceeded'\n          : 'timeout exceeded';\n        const transitional = _config.transitional || transitionalDefaults;\n        if (_config.timeoutErrorMessage) {\n          timeoutErrorMessage = _config.timeoutErrorMessage;\n        }\n        reject(\n          new AxiosError(\n            timeoutErrorMessage,\n            transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n            config,\n            request\n          )\n        );\n\n        // Clean up request\n        request = null;\n      };\n\n      // Remove Content-Type if data is undefined\n      requestData === undefined && requestHeaders.setContentType(null);\n\n      // Add headers to the request\n      if ('setRequestHeader' in request) {\n        utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n          request.setRequestHeader(key, val);\n        });\n      }\n\n      // Add withCredentials to request if needed\n      if (!utils.isUndefined(_config.withCredentials)) {\n        request.withCredentials = !!_config.withCredentials;\n      }\n\n      // Add responseType to request if needed\n      if (responseType && responseType !== 'json') {\n        request.responseType = _config.responseType;\n      }\n\n      // Handle progress if needed\n      if (onDownloadProgress) {\n        [downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true);\n        request.addEventListener('progress', downloadThrottled);\n      }\n\n      // Not all browsers support upload events\n      if (onUploadProgress && request.upload) {\n        [uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress);\n\n        request.upload.addEventListener('progress', uploadThrottled);\n\n        request.upload.addEventListener('loadend', flushUpload);\n      }\n\n      if (_config.cancelToken || _config.signal) {\n        // Handle cancellation\n        // eslint-disable-next-line func-names\n        onCanceled = (cancel) => {\n          if (!request) {\n            return;\n          }\n          reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n          request.abort();\n          request = null;\n        };\n\n        _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n        if (_config.signal) {\n          _config.signal.aborted\n            ? onCanceled()\n            : _config.signal.addEventListener('abort', onCanceled);\n        }\n      }\n\n      const protocol = parseProtocol(_config.url);\n\n      if (protocol && platform.protocols.indexOf(protocol) === -1) {\n        reject(\n          new AxiosError(\n            'Unsupported protocol ' + protocol + ':',\n            AxiosError.ERR_BAD_REQUEST,\n            config\n          )\n        );\n        return;\n      }\n\n      // Send the request\n      request.send(requestData || null);\n    });\n  };\n", "import CanceledError from '../cancel/CanceledError.js';\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n  const { length } = (signals = signals ? signals.filter(Boolean) : []);\n\n  if (timeout || length) {\n    let controller = new AbortController();\n\n    let aborted;\n\n    const onabort = function (reason) {\n      if (!aborted) {\n        aborted = true;\n        unsubscribe();\n        const err = reason instanceof Error ? reason : this.reason;\n        controller.abort(\n          err instanceof AxiosError\n            ? err\n            : new CanceledError(err instanceof Error ? err.message : err)\n        );\n      }\n    };\n\n    let timer =\n      timeout &&\n      setTimeout(() => {\n        timer = null;\n        onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT));\n      }, timeout);\n\n    const unsubscribe = () => {\n      if (signals) {\n        timer && clearTimeout(timer);\n        timer = null;\n        signals.forEach((signal) => {\n          signal.unsubscribe\n            ? signal.unsubscribe(onabort)\n            : signal.removeEventListener('abort', onabort);\n        });\n        signals = null;\n      }\n    };\n\n    signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n    const { signal } = controller;\n\n    signal.unsubscribe = () => utils.asap(unsubscribe);\n\n    return signal;\n  }\n};\n\nexport default composeSignals;\n", "export const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n};\n\nexport const readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n};\n\nconst readStream = async function* (stream) {\n  if (stream[Symbol.asyncIterator]) {\n    yield* stream;\n    return;\n  }\n\n  const reader = stream.getReader();\n  try {\n    for (;;) {\n      const { done, value } = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n};\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n  const iterator = readBytes(stream, chunkSize);\n\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  };\n\n  return new ReadableStream(\n    {\n      async pull(controller) {\n        try {\n          const { done, value } = await iterator.next();\n\n          if (done) {\n            _onFinish();\n            controller.close();\n            return;\n          }\n\n          let len = value.byteLength;\n          if (onProgress) {\n            let loadedBytes = (bytes += len);\n            onProgress(loadedBytes);\n          }\n          controller.enqueue(new Uint8Array(value));\n        } catch (err) {\n          _onFinish(err);\n          throw err;\n        }\n      },\n      cancel(reason) {\n        _onFinish(reason);\n        return iterator.return();\n      },\n    },\n    {\n      highWaterMark: 2,\n    }\n  );\n};\n", "import platform from '../platform/index.js';\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport composeSignals from '../helpers/composeSignals.js';\nimport { trackStream } from '../helpers/trackStream.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {\n  progressEventReducer,\n  progressEventDecorator,\n  asyncDecorator,\n} from '../helpers/progressEventReducer.js';\nimport resolveConfig from '../helpers/resolveConfig.js';\nimport settle from '../core/settle.js';\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst { isFunction } = utils;\n\nconst globalFetchAPI = (({ Request, Response }) => ({\n  Request,\n  Response,\n}))(utils.global);\n\nconst { ReadableStream, TextEncoder } = utils.global;\n\nconst test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false;\n  }\n};\n\nconst factory = (env) => {\n  env = utils.merge.call(\n    {\n      skipUndefined: true,\n    },\n    globalFetchAPI,\n    env\n  );\n\n  const { fetch: envFetch, Request, Response } = env;\n  const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n  const isRequestSupported = isFunction(Request);\n  const isResponseSupported = isFunction(Response);\n\n  if (!isFetchSupported) {\n    return false;\n  }\n\n  const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n  const encodeText =\n    isFetchSupported &&\n    (typeof TextEncoder === 'function'\n      ? (\n          (encoder) => (str) =>\n            encoder.encode(str)\n        )(new TextEncoder())\n      : async (str) => new Uint8Array(await new Request(str).arrayBuffer()));\n\n  const supportsRequestStream =\n    isRequestSupported &&\n    isReadableStreamSupported &&\n    test(() => {\n      let duplexAccessed = false;\n\n      const body = new ReadableStream();\n\n      const hasContentType = new Request(platform.origin, {\n        body,\n        method: 'POST',\n        get duplex() {\n          duplexAccessed = true;\n          return 'half';\n        },\n      }).headers.has('Content-Type');\n\n      body.cancel();\n\n      return duplexAccessed && !hasContentType;\n    });\n\n  const supportsResponseStream =\n    isResponseSupported &&\n    isReadableStreamSupported &&\n    test(() => utils.isReadableStream(new Response('').body));\n\n  const resolvers = {\n    stream: supportsResponseStream && ((res) => res.body),\n  };\n\n  isFetchSupported &&\n    (() => {\n      ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach((type) => {\n        !resolvers[type] &&\n          (resolvers[type] = (res, config) => {\n            let method = res && res[type];\n\n            if (method) {\n              return method.call(res);\n            }\n\n            throw new AxiosError(\n              `Response type '${type}' is not supported`,\n              AxiosError.ERR_NOT_SUPPORT,\n              config\n            );\n          });\n      });\n    })();\n\n  const getBodyLength = async (body) => {\n    if (body == null) {\n      return 0;\n    }\n\n    if (utils.isBlob(body)) {\n      return body.size;\n    }\n\n    if (utils.isSpecCompliantForm(body)) {\n      const _request = new Request(platform.origin, {\n        method: 'POST',\n        body,\n      });\n      return (await _request.arrayBuffer()).byteLength;\n    }\n\n    if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n      return body.byteLength;\n    }\n\n    if (utils.isURLSearchParams(body)) {\n      body = body + '';\n    }\n\n    if (utils.isString(body)) {\n      return (await encodeText(body)).byteLength;\n    }\n  };\n\n  const resolveBodyLength = async (headers, body) => {\n    const length = utils.toFiniteNumber(headers.getContentLength());\n\n    return length == null ? getBodyLength(body) : length;\n  };\n\n  return async (config) => {\n    let {\n      url,\n      method,\n      data,\n      signal,\n      cancelToken,\n      timeout,\n      onDownloadProgress,\n      onUploadProgress,\n      responseType,\n      headers,\n      withCredentials = 'same-origin',\n      fetchOptions,\n    } = resolveConfig(config);\n\n    let _fetch = envFetch || fetch;\n\n    responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n    let composedSignal = composeSignals(\n      [signal, cancelToken && cancelToken.toAbortSignal()],\n      timeout\n    );\n\n    let request = null;\n\n    const unsubscribe =\n      composedSignal &&\n      composedSignal.unsubscribe &&\n      (() => {\n        composedSignal.unsubscribe();\n      });\n\n    let requestContentLength;\n\n    try {\n      if (\n        onUploadProgress &&\n        supportsRequestStream &&\n        method !== 'get' &&\n        method !== 'head' &&\n        (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n      ) {\n        let _request = new Request(url, {\n          method: 'POST',\n          body: data,\n          duplex: 'half',\n        });\n\n        let contentTypeHeader;\n\n        if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n          headers.setContentType(contentTypeHeader);\n        }\n\n        if (_request.body) {\n          const [onProgress, flush] = progressEventDecorator(\n            requestContentLength,\n            progressEventReducer(asyncDecorator(onUploadProgress))\n          );\n\n          data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n        }\n      }\n\n      if (!utils.isString(withCredentials)) {\n        withCredentials = withCredentials ? 'include' : 'omit';\n      }\n\n      // Cloudflare Workers throws when credentials are defined\n      // see https://github.com/cloudflare/workerd/issues/902\n      const isCredentialsSupported = isRequestSupported && 'credentials' in Request.prototype;\n\n      const resolvedOptions = {\n        ...fetchOptions,\n        signal: composedSignal,\n        method: method.toUpperCase(),\n        headers: headers.normalize().toJSON(),\n        body: data,\n        duplex: 'half',\n        credentials: isCredentialsSupported ? withCredentials : undefined,\n      };\n\n      request = isRequestSupported && new Request(url, resolvedOptions);\n\n      let response = await (isRequestSupported\n        ? _fetch(request, fetchOptions)\n        : _fetch(url, resolvedOptions));\n\n      const isStreamResponse =\n        supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n      if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n        const options = {};\n\n        ['status', 'statusText', 'headers'].forEach((prop) => {\n          options[prop] = response[prop];\n        });\n\n        const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n        const [onProgress, flush] =\n          (onDownloadProgress &&\n            progressEventDecorator(\n              responseContentLength,\n              progressEventReducer(asyncDecorator(onDownloadProgress), true)\n            )) ||\n          [];\n\n        response = new Response(\n          trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n            flush && flush();\n            unsubscribe && unsubscribe();\n          }),\n          options\n        );\n      }\n\n      responseType = responseType || 'text';\n\n      let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](\n        response,\n        config\n      );\n\n      !isStreamResponse && unsubscribe && unsubscribe();\n\n      return await new Promise((resolve, reject) => {\n        settle(resolve, reject, {\n          data: responseData,\n          headers: AxiosHeaders.from(response.headers),\n          status: response.status,\n          statusText: response.statusText,\n          config,\n          request,\n        });\n      });\n    } catch (err) {\n      unsubscribe && unsubscribe();\n\n      if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n        throw Object.assign(\n          new AxiosError(\n            'Network Error',\n            AxiosError.ERR_NETWORK,\n            config,\n            request,\n            err && err.response\n          ),\n          {\n            cause: err.cause || err,\n          }\n        );\n      }\n\n      throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n    }\n  };\n};\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n  let env = (config && config.env) || {};\n  const { fetch, Request, Response } = env;\n  const seeds = [Request, Response, fetch];\n\n  let len = seeds.length,\n    i = len,\n    seed,\n    target,\n    map = seedCache;\n\n  while (i--) {\n    seed = seeds[i];\n    target = map.get(seed);\n\n    target === undefined && map.set(seed, (target = i ? new Map() : factory(env)));\n\n    map = target;\n  }\n\n  return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n", "import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from '../core/AxiosError.js';\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n *\n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: {\n    get: fetchAdapter.getFetch,\n  },\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      Object.defineProperty(fn, 'name', { value });\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', { value });\n  }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n *\n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n *\n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) =>\n  utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n *\n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n  adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n  const { length } = adapters;\n  let nameOrAdapter;\n  let adapter;\n\n  const rejectedReasons = {};\n\n  for (let i = 0; i < length; i++) {\n    nameOrAdapter = adapters[i];\n    let id;\n\n    adapter = nameOrAdapter;\n\n    if (!isResolvedHandle(nameOrAdapter)) {\n      adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n      if (adapter === undefined) {\n        throw new AxiosError(`Unknown adapter '${id}'`);\n      }\n    }\n\n    if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n      break;\n    }\n\n    rejectedReasons[id || '#' + i] = adapter;\n  }\n\n  if (!adapter) {\n    const reasons = Object.entries(rejectedReasons).map(\n      ([id, state]) =>\n        `adapter ${id} ` +\n        (state === false ? 'is not supported by the environment' : 'is not available in the build')\n    );\n\n    let s = length\n      ? reasons.length > 1\n        ? 'since :\\n' + reasons.map(renderReason).join('\\n')\n        : ' ' + renderReason(reasons[0])\n      : 'as no adapter specified';\n\n    throw new AxiosError(\n      `There is no suitable adapter to dispatch the request ` + s,\n      'ERR_NOT_SUPPORT'\n    );\n  }\n\n  return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n  /**\n   * Resolve an adapter from a list of adapter names or functions.\n   * @type {Function}\n   */\n  getAdapter,\n\n  /**\n   * Exposes all known adapters\n   * @type {Object<string, Function|Object>}\n   */\n  adapters: knownAdapters,\n};\n", "'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from '../adapters/adapters.js';\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(config.headers);\n\n  // Transform request data\n  config.data = transformData.call(config, config.transformRequest);\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n  return adapter(config).then(\n    function onAdapterResolution(response) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      response.data = transformData.call(config, config.transformResponse, response);\n\n      response.headers = AxiosHeaders.from(response.headers);\n\n      return response;\n    },\n    function onAdapterRejection(reason) {\n      if (!isCancel(reason)) {\n        throwIfCancellationRequested(config);\n\n        // Transform response data\n        if (reason && reason.response) {\n          reason.response.data = transformData.call(\n            config,\n            config.transformResponse,\n            reason.response\n          );\n          reason.response.headers = AxiosHeaders.from(reason.response.headers);\n        }\n      }\n\n      return Promise.reject(reason);\n    }\n  );\n}\n", "'use strict';\n\nimport { VERSION } from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return (\n      '[Axios v' +\n      VERSION +\n      \"] Transitional option '\" +\n      opt +\n      \"'\" +\n      desc +\n      (message ? '. ' + message : '')\n    );\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n  return (value, opt) => {\n    // eslint-disable-next-line no-console\n    console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n    return true;\n  };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    const validator = schema[opt];\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError(\n          'option ' + opt + ' must be ' + result,\n          AxiosError.ERR_BAD_OPTION_VALUE\n        );\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig || {};\n    this.interceptors = {\n      request: new InterceptorManager(),\n      response: new InterceptorManager(),\n    };\n  }\n\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        let dummy = {};\n\n        Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n        // slice off the Error: ... line\n        const stack = (() => {\n          if (!dummy.stack) {\n            return '';\n          }\n\n          const firstNewlineIndex = dummy.stack.indexOf('\\n');\n\n          return firstNewlineIndex === -1 ? '' : dummy.stack.slice(firstNewlineIndex + 1);\n        })();\n        try {\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack) {\n            const firstNewlineIndex = stack.indexOf('\\n');\n            const secondNewlineIndex =\n              firstNewlineIndex === -1 ? -1 : stack.indexOf('\\n', firstNewlineIndex + 1);\n            const stackWithoutTwoTopLines =\n              secondNewlineIndex === -1 ? '' : stack.slice(secondNewlineIndex + 1);\n\n            if (!String(err.stack).endsWith(stackWithoutTwoTopLines)) {\n              err.stack += '\\n' + stack;\n            }\n          }\n        } catch (e) {\n          // ignore the case where \"stack\" is an un-writable property\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const { transitional, paramsSerializer, headers } = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(\n        transitional,\n        {\n          silentJSONParsing: validators.transitional(validators.boolean),\n          forcedJSONParsing: validators.transitional(validators.boolean),\n          clarifyTimeoutError: validators.transitional(validators.boolean),\n          legacyInterceptorReqResOrdering: validators.transitional(validators.boolean),\n        },\n        false\n      );\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer,\n        };\n      } else {\n        validator.assertOptions(\n          paramsSerializer,\n          {\n            encode: validators.function,\n            serialize: validators.function,\n          },\n          true\n        );\n      }\n    }\n\n    // Set config.allowAbsoluteUrls\n    if (config.allowAbsoluteUrls !== undefined) {\n      // do nothing\n    } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n      config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n    } else {\n      config.allowAbsoluteUrls = true;\n    }\n\n    validator.assertOptions(\n      config,\n      {\n        baseUrl: validators.spelling('baseURL'),\n        withXsrfToken: validators.spelling('withXSRFToken'),\n      },\n      true\n    );\n\n    // Set config.method\n    config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n\n    headers &&\n      utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], (method) => {\n        delete headers[method];\n      });\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      const transitional = config.transitional || transitionalDefaults;\n      const legacyInterceptorReqResOrdering =\n        transitional && transitional.legacyInterceptorReqResOrdering;\n\n      if (legacyInterceptorReqResOrdering) {\n        requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n      } else {\n        requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n      }\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift(...requestInterceptorChain);\n      chain.push(...responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled(newConfig);\n      } catch (error) {\n        onRejected.call(this, error);\n        break;\n      }\n    }\n\n    try {\n      promise = dispatchRequest.call(this, newConfig);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function (url, config) {\n    return this.request(\n      mergeConfig(config || {}, {\n        method,\n        url,\n        data: (config || {}).data,\n      })\n    );\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(\n        mergeConfig(config || {}, {\n          method,\n          headers: isForm\n            ? {\n                'Content-Type': 'multipart/form-data',\n              }\n            : {},\n          url,\n          data,\n        })\n      );\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n", "'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then((cancel) => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = (onfulfilled) => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise((resolve) => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  toAbortSignal() {\n    const controller = new AbortController();\n\n    const abort = (err) => {\n      controller.abort(err);\n    };\n\n    this.subscribe(abort);\n\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n    return controller.signal;\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel,\n    };\n  }\n}\n\nexport default CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  const args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && payload.isAxiosError === true;\n}\n", "const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n  WebServerIsDown: 521,\n  ConnectionTimedOut: 522,\n  OriginIsUnreachable: 523,\n  TimeoutOccurred: 524,\n  SslHandshakeFailed: 525,\n  InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n", "'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport { VERSION } from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from './core/AxiosHeaders.js';\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, { allOwnKeys: true });\n\n  // Copy context to instance\n  utils.extend(instance, context, null, { allOwnKeys: true });\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = (thing) => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios;\n", "import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig,\n} = axios;\n\nexport {\n  axios as default,\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig,\n};\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport enum BlockRenderType {\r\n  Custom = 0, // custom rendering\r\n  BlockOneTexture = 1, // cobblestone is cobblestone\r\n  BlockLogSideTop = 2,\r\n  FrontBaseSideTop = 3,\r\n  DoorMaterialDoorUpperLower = 4, // e.g., door_acacia_lower, door_acacia_upper\r\n  SignMaterial = 5,\r\n  AnvilBaseTopDamaged = 6, // eg anvil has anvil_base, anvil_top_damaged_0, anvil_top_damaged_1, anvil_top_damaged_2\r\n  BlockSideTop = 7, // eg ancient_debris has ancient_debris_side and ancient_debris_top\r\n  StairsMaterial = 8, // stairs with a material\r\n  PressurePlateMaterial = 9, // pressure plate with a material\r\n  FenceGateMaterial = 10, // acacia_fence_gate => acacia_fence_gate\r\n  ButtonMaterial = 11, // acacia_button\r\n  WallSignMaterial = 12, // acacia wall sign\r\n  Stem = 13, // eg bamboo => bamboo_stem\r\n  BottomSideTopOpen = 14, // barrel => barrel_bottom, barrel_side, barrel_top, barrel_top_open\r\n  BedFeetHeadEndSideTop = 15, // bed => bed_feet_end, bed_feet_side, bed_feet_top\r\n  Honeyable = 16, // bee_nest => bee_nest_front, bee_nest_front_honey, bee_nest_side, bee_nest_end, bee_nest_top\r\n  PluralStages0to4 = 17, // beetroot => beetroots_stage_0, beetroots_stage_1, -> 4\r\n  BottomSideTop = 18, // bell => bell_bottom, bell_side, bell_top\r\n  Trapdoor = 19, // acacia_trapdoor\r\n  BaseTop = 20, // blackstone => blackstone, blackstone_top\r\n  DoubleSlabMaterial = 21, // blackstone_double_slab\r\n  SlabMaterial = 22, // blackstone_slab\r\n  WallMaterial = 23, // blackstone_wall\r\n  BlockSideTopFrontOffOn = 24, // blast_furnace => blast_furnace_front_off, blast_furnace_front_on, blast_furnace_side, blast_furnace_top\r\n  RemoveBlock = 25, // border_block => border\r\n  BaseBase = 26, // brewing_stand => brewing_stand, brewing_stand_base\r\n  TgaBottomSideTop = 27, // cactus => cactus_bottom.tga, cactus_side.tga, cactus_top.tga\r\n  ColumnDownInnerOuterUp = 28, // bubble_column\r\n  MaterialOneTexture = 29, // brown_mushroom => mushroom_brown\r\n  RemoveBlockMaterialOneTexture = 30, // brown_mushroom => mushroom_brown\r\n  BottomInnerSideTop = 31, // cake => cake_bottom, cake_inner, cake_side, cake_top\r\n  BackFrontSideTop = 32, // camera => camera_back, camera_front, camera_side, camera_top\r\n  BottomInnerSideTopWater = 33, // cauldron\r\n  NumberedSide = 34, // cartography_table => cartography_table_side1, cartography_table_side2, cartography_table_side3,cartography_table_top\r\n  FrontSideTop = 35,\r\n  BaseDead = 36, // chorus_flower\r\n  Stages0to2 = 37, // cocoa\r\n  CustomBase = 38, // command_block\r\n  Water = 39, // water\r\n}\r\n", "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define(\"exifr\",[\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).exifr={})}(this,(function(e){\"use strict\";var t=\"undefined\"!=typeof self?self:global;const i=\"undefined\"!=typeof navigator,n=i&&\"undefined\"==typeof HTMLImageElement,s=!(\"undefined\"==typeof global||\"undefined\"==typeof process||!process.versions||!process.versions.node),r=t.Buffer,a=t.BigInt,o=!!r,l=e=>e;function h(e,t=l){if(s)try{return\"function\"==typeof require?Promise.resolve(t(require(e))):import(/* webpackIgnore: true */ e).then(t)}catch(t){console.warn(`Couldn't load ${e}`)}}let u=t.fetch;const c=e=>u=e;if(!t.fetch){const e=h(\"http\",(e=>e)),t=h(\"https\",(e=>e)),i=(n,{headers:s}={})=>new Promise((async(r,a)=>{let{port:o,hostname:l,pathname:h,protocol:u,search:c}=new URL(n);const f={method:\"GET\",hostname:l,path:encodeURI(h)+c,headers:s};\"\"!==o&&(f.port=Number(o));const d=(\"https:\"===u?await t:await e).request(f,(e=>{if(301===e.statusCode||302===e.statusCode){let t=new URL(e.headers.location,n).toString();return i(t,{headers:s}).then(r).catch(a)}r({status:e.statusCode,arrayBuffer:()=>new Promise((t=>{let i=[];e.on(\"data\",(e=>i.push(e))),e.on(\"end\",(()=>t(Buffer.concat(i))))}))})}));d.on(\"error\",a),d.end()}));c(i)}function f(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}const d=e=>g(e)?void 0:e,p=e=>void 0!==e;function g(e){return void 0===e||(e instanceof Map?0===e.size:0===Object.values(e).filter(p).length)}function m(e){let t=new Error(e);throw delete t.stack,t}function S(e){return\"\"===(e=function(e){for(;e.endsWith(\"\\0\");)e=e.slice(0,-1);return e}(e).trim())?void 0:e}function C(e){let t=function(e){let t=0;return e.ifd0.enabled&&(t+=1024),e.exif.enabled&&(t+=2048),e.makerNote&&(t+=2048),e.userComment&&(t+=1024),e.gps.enabled&&(t+=512),e.interop.enabled&&(t+=100),e.ifd1.enabled&&(t+=1024),t+2048}(e);return e.jfif.enabled&&(t+=50),e.xmp.enabled&&(t+=2e4),e.iptc.enabled&&(t+=14e3),e.icc.enabled&&(t+=6e3),t}const y=e=>String.fromCharCode.apply(null,e),b=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-8\"):void 0;function P(e){return b?b.decode(e):o?Buffer.from(e).toString(\"utf8\"):decodeURIComponent(escape(y(e)))}class I{static from(e,t){return e instanceof this&&e.le===t?e:new I(e,void 0,void 0,t)}constructor(e,t=0,i,n){if(\"boolean\"==typeof n&&(this.le=n),Array.isArray(e)&&(e=new Uint8Array(e)),0===e)this.byteOffset=0,this.byteLength=0;else if(e instanceof ArrayBuffer){void 0===i&&(i=e.byteLength-t);let n=new DataView(e,t,i);this._swapDataView(n)}else if(e instanceof Uint8Array||e instanceof DataView||e instanceof I){void 0===i&&(i=e.byteLength-t),(t+=e.byteOffset)+i>e.byteOffset+e.byteLength&&m(\"Creating view outside of available memory in ArrayBuffer\");let n=new DataView(e.buffer,t,i);this._swapDataView(n)}else if(\"number\"==typeof e){let t=new DataView(new ArrayBuffer(e));this._swapDataView(t)}else m(\"Invalid input argument for BufferView: \"+e)}_swapArrayBuffer(e){this._swapDataView(new DataView(e))}_swapBuffer(e){this._swapDataView(new DataView(e.buffer,e.byteOffset,e.byteLength))}_swapDataView(e){this.dataView=e,this.buffer=e.buffer,this.byteOffset=e.byteOffset,this.byteLength=e.byteLength}_lengthToEnd(e){return this.byteLength-e}set(e,t,i=I){return e instanceof DataView||e instanceof I?e=new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e instanceof ArrayBuffer&&(e=new Uint8Array(e)),e instanceof Uint8Array||m(\"BufferView.set(): Invalid data argument.\"),this.toUint8().set(e,t),new i(this,t,e.byteLength)}subarray(e,t){return t=t||this._lengthToEnd(e),new I(this,e,t)}toUint8(){return new Uint8Array(this.buffer,this.byteOffset,this.byteLength)}getUint8Array(e,t){return new Uint8Array(this.buffer,this.byteOffset+e,t)}getString(e=0,t=this.byteLength){return P(this.getUint8Array(e,t))}getLatin1String(e=0,t=this.byteLength){let i=this.getUint8Array(e,t);return y(i)}getUnicodeString(e=0,t=this.byteLength){const i=[];for(let n=0;n<t&&e+n<this.byteLength;n+=2)i.push(this.getUint16(e+n));return y(i)}getInt8(e){return this.dataView.getInt8(e)}getUint8(e){return this.dataView.getUint8(e)}getInt16(e,t=this.le){return this.dataView.getInt16(e,t)}getInt32(e,t=this.le){return this.dataView.getInt32(e,t)}getUint16(e,t=this.le){return this.dataView.getUint16(e,t)}getUint32(e,t=this.le){return this.dataView.getUint32(e,t)}getFloat32(e,t=this.le){return this.dataView.getFloat32(e,t)}getFloat64(e,t=this.le){return this.dataView.getFloat64(e,t)}getFloat(e,t=this.le){return this.dataView.getFloat32(e,t)}getDouble(e,t=this.le){return this.dataView.getFloat64(e,t)}getUintBytes(e,t,i){switch(t){case 1:return this.getUint8(e,i);case 2:return this.getUint16(e,i);case 4:return this.getUint32(e,i);case 8:return this.getUint64&&this.getUint64(e,i)}}getUint(e,t,i){switch(t){case 8:return this.getUint8(e,i);case 16:return this.getUint16(e,i);case 32:return this.getUint32(e,i);case 64:return this.getUint64&&this.getUint64(e,i)}}toString(e){return this.dataView.toString(e,this.constructor.name)}ensureChunk(){}}function k(e,t){m(`${e} '${t}' was not loaded, try using full build of exifr.`)}class w extends Map{constructor(e){super(),this.kind=e}get(e,t){return this.has(e)||k(this.kind,e),t&&(e in t||function(e,t){m(`Unknown ${e} '${t}'.`)}(this.kind,e),t[e].enabled||k(this.kind,e)),super.get(e)}keyList(){return Array.from(this.keys())}}var T=new w(\"file parser\"),A=new w(\"segment parser\"),D=new w(\"file reader\");const O=\"Invalid input argument\";function x(e,t){return\"string\"==typeof e?v(e,t):i&&!n&&e instanceof HTMLImageElement?v(e.src,t):e instanceof Uint8Array||e instanceof ArrayBuffer||e instanceof DataView?new I(e):i&&e instanceof Blob?M(e,t,\"blob\",U):void m(O)}function v(e,t){return(n=e).startsWith(\"data:\")||n.length>1e4?R(e,t,\"base64\"):s&&e.includes(\"://\")?M(e,t,\"url\",L):s?R(e,t,\"fs\"):i?M(e,t,\"url\",L):void m(O);var n}async function M(e,t,i,n){return D.has(i)?R(e,t,i):n?async function(e,t){let i=await t(e);return new I(i)}(e,n):void m(`Parser ${i} is not loaded`)}async function R(e,t,i){let n=new(D.get(i))(e,t);return await n.read(),n}const L=e=>u(e).then((e=>e.arrayBuffer())),U=e=>new Promise(((t,i)=>{let n=new FileReader;n.onloadend=()=>t(n.result||new ArrayBuffer),n.onerror=i,n.readAsArrayBuffer(e)}));class F extends Map{get tagKeys(){return this.allKeys||(this.allKeys=Array.from(this.keys())),this.allKeys}get tagValues(){return this.allValues||(this.allValues=Array.from(this.values())),this.allValues}}function B(e,t,i){let n=new F;for(let[e,t]of i)n.set(e,t);if(Array.isArray(t))for(let i of t)e.set(i,n);else e.set(t,n);return n}function E(e,t,i){let n,s=e.get(t);for(n of i)s.set(n[0],n[1])}const N=new Map,G=new Map,V=new Map,z=37500,H=37510,j=700,W=33723,K=34675,X=34665,_=34853,Y=40965,$=[\"chunked\",\"firstChunkSize\",\"firstChunkSizeNode\",\"firstChunkSizeBrowser\",\"chunkSize\",\"chunkLimit\"],J=[\"jfif\",\"xmp\",\"icc\",\"iptc\",\"ihdr\"],q=[\"tiff\",...J],Q=[\"ifd0\",\"ifd1\",\"exif\",\"gps\",\"interop\"],Z=[...q,...Q],ee=[\"makerNote\",\"userComment\"],te=[\"translateKeys\",\"translateValues\",\"reviveValues\",\"multiSegment\"],ie=[...te,\"sanitize\",\"mergeOutput\",\"silentErrors\"];class ne{get translate(){return this.translateKeys||this.translateValues||this.reviveValues}}class se extends ne{get needed(){return this.enabled||this.deps.size>0}constructor(e,t,i,n){if(super(),f(this,\"enabled\",!1),f(this,\"skip\",new Set),f(this,\"pick\",new Set),f(this,\"deps\",new Set),f(this,\"translateKeys\",!1),f(this,\"translateValues\",!1),f(this,\"reviveValues\",!1),this.key=e,this.enabled=t,this.parse=this.enabled,this.applyInheritables(n),this.canBeFiltered=Q.includes(e),this.canBeFiltered&&(this.dict=N.get(e)),void 0!==i)if(Array.isArray(i))this.parse=this.enabled=!0,this.canBeFiltered&&i.length>0&&this.translateTagSet(i,this.pick);else if(\"object\"==typeof i){if(this.enabled=!0,this.parse=!1!==i.parse,this.canBeFiltered){let{pick:e,skip:t}=i;e&&e.length>0&&this.translateTagSet(e,this.pick),t&&t.length>0&&this.translateTagSet(t,this.skip)}this.applyInheritables(i)}else!0===i||!1===i?this.parse=this.enabled=i:m(`Invalid options argument: ${i}`)}applyInheritables(e){let t,i;for(t of te)i=e[t],void 0!==i&&(this[t]=i)}translateTagSet(e,t){if(this.dict){let i,n,{tagKeys:s,tagValues:r}=this.dict;for(i of e)\"string\"==typeof i?(n=r.indexOf(i),-1===n&&(n=s.indexOf(Number(i))),-1!==n&&t.add(Number(s[n]))):t.add(i)}else for(let i of e)t.add(i)}finalizeFilters(){!this.enabled&&this.deps.size>0?(this.enabled=!0,ue(this.pick,this.deps)):this.enabled&&this.pick.size>0&&ue(this.pick,this.deps)}}var re={jfif:!1,tiff:!0,xmp:!1,icc:!1,iptc:!1,ifd0:!0,ifd1:!1,exif:!0,gps:!0,interop:!1,ihdr:void 0,makerNote:!1,userComment:!1,multiSegment:!1,skip:[],pick:[],translateKeys:!0,translateValues:!0,reviveValues:!0,sanitize:!0,mergeOutput:!0,silentErrors:!0,chunked:!0,firstChunkSize:void 0,firstChunkSizeNode:512,firstChunkSizeBrowser:65536,chunkSize:65536,chunkLimit:5},ae=new Map;class oe extends ne{static useCached(e){let t=ae.get(e);return void 0!==t||(t=new this(e),ae.set(e,t)),t}constructor(e){super(),!0===e?this.setupFromTrue():void 0===e?this.setupFromUndefined():Array.isArray(e)?this.setupFromArray(e):\"object\"==typeof e?this.setupFromObject(e):m(`Invalid options argument ${e}`),void 0===this.firstChunkSize&&(this.firstChunkSize=i?this.firstChunkSizeBrowser:this.firstChunkSizeNode),this.mergeOutput&&(this.ifd1.enabled=!1),this.filterNestedSegmentTags(),this.traverseTiffDependencyTree(),this.checkLoadedPlugins()}setupFromUndefined(){let e;for(e of $)this[e]=re[e];for(e of ie)this[e]=re[e];for(e of ee)this[e]=re[e];for(e of Z)this[e]=new se(e,re[e],void 0,this)}setupFromTrue(){let e;for(e of $)this[e]=re[e];for(e of ie)this[e]=re[e];for(e of ee)this[e]=!0;for(e of Z)this[e]=new se(e,!0,void 0,this)}setupFromArray(e){let t;for(t of $)this[t]=re[t];for(t of ie)this[t]=re[t];for(t of ee)this[t]=re[t];for(t of Z)this[t]=new se(t,!1,void 0,this);this.setupGlobalFilters(e,void 0,Q)}setupFromObject(e){let t;for(t of(Q.ifd0=Q.ifd0||Q.image,Q.ifd1=Q.ifd1||Q.thumbnail,Object.assign(this,e),$))this[t]=he(e[t],re[t]);for(t of ie)this[t]=he(e[t],re[t]);for(t of ee)this[t]=he(e[t],re[t]);for(t of q)this[t]=new se(t,re[t],e[t],this);for(t of Q)this[t]=new se(t,re[t],e[t],this.tiff);this.setupGlobalFilters(e.pick,e.skip,Q,Z),!0===e.tiff?this.batchEnableWithBool(Q,!0):!1===e.tiff?this.batchEnableWithUserValue(Q,e):Array.isArray(e.tiff)?this.setupGlobalFilters(e.tiff,void 0,Q):\"object\"==typeof e.tiff&&this.setupGlobalFilters(e.tiff.pick,e.tiff.skip,Q)}batchEnableWithBool(e,t){for(let i of e)this[i].enabled=t}batchEnableWithUserValue(e,t){for(let i of e){let e=t[i];this[i].enabled=!1!==e&&void 0!==e}}setupGlobalFilters(e,t,i,n=i){if(e&&e.length){for(let e of n)this[e].enabled=!1;let t=le(e,i);for(let[e,i]of t)ue(this[e].pick,i),this[e].enabled=!0}else if(t&&t.length){let e=le(t,i);for(let[t,i]of e)ue(this[t].skip,i)}}filterNestedSegmentTags(){let{ifd0:e,exif:t,xmp:i,iptc:n,icc:s}=this;this.makerNote?t.deps.add(z):t.skip.add(z),this.userComment?t.deps.add(H):t.skip.add(H),i.enabled||e.skip.add(j),n.enabled||e.skip.add(W),s.enabled||e.skip.add(K)}traverseTiffDependencyTree(){let{ifd0:e,exif:t,gps:i,interop:n}=this;n.needed&&(t.deps.add(Y),e.deps.add(Y)),t.needed&&e.deps.add(X),i.needed&&e.deps.add(_),this.tiff.enabled=Q.some((e=>!0===this[e].enabled))||this.makerNote||this.userComment;for(let e of Q)this[e].finalizeFilters()}get onlyTiff(){return!J.map((e=>this[e].enabled)).some((e=>!0===e))&&this.tiff.enabled}checkLoadedPlugins(){for(let e of q)this[e].enabled&&!A.has(e)&&k(\"segment parser\",e)}}function le(e,t){let i,n,s,r,a=[];for(s of t){for(r of(i=N.get(s),n=[],i))(e.includes(r[0])||e.includes(r[1]))&&n.push(r[0]);n.length&&a.push([s,n])}return a}function he(e,t){return void 0!==e?e:void 0!==t?t:void 0}function ue(e,t){for(let i of t)e.add(i)}f(oe,\"default\",re);class ce{constructor(e){f(this,\"parsers\",{}),f(this,\"output\",{}),f(this,\"errors\",[]),f(this,\"pushToErrors\",(e=>this.errors.push(e))),this.options=oe.useCached(e)}async read(e){this.file=await x(e,this.options)}setup(){if(this.fileParser)return;let{file:e}=this,t=e.getUint16(0);for(let[i,n]of T)if(n.canHandle(e,t))return this.fileParser=new n(this.options,this.file,this.parsers),e[i]=!0;this.file.close&&this.file.close(),m(\"Unknown file format\")}async parse(){let{output:e,errors:t}=this;return this.setup(),this.options.silentErrors?(await this.executeParsers().catch(this.pushToErrors),t.push(...this.fileParser.errors)):await this.executeParsers(),this.file.close&&this.file.close(),this.options.silentErrors&&t.length>0&&(e.errors=t),d(e)}async executeParsers(){let{output:e}=this;await this.fileParser.parse();let t=Object.values(this.parsers).map((async t=>{let i=await t.parse();t.assignToOutput(e,i)}));this.options.silentErrors&&(t=t.map((e=>e.catch(this.pushToErrors)))),await Promise.all(t)}async extractThumbnail(){this.setup();let{options:e,file:t}=this,i=A.get(\"tiff\",e);var n;if(t.tiff?n={start:0,type:\"tiff\"}:t.jpeg&&(n=await this.fileParser.getOrFindSegment(\"tiff\")),void 0===n)return;let s=await this.fileParser.ensureSegmentChunk(n),r=this.parsers.tiff=new i(s,e,t),a=await r.extractThumbnail();return t.close&&t.close(),a}}async function fe(e,t){let i=new ce(t);return await i.read(e),i.parse()}var de=Object.freeze({__proto__:null,parse:fe,Exifr:ce,fileParsers:T,segmentParsers:A,fileReaders:D,tagKeys:N,tagValues:G,tagRevivers:V,createDictionary:B,extendDictionary:E,fetchUrlAsArrayBuffer:L,readBlobAsArrayBuffer:U,chunkedProps:$,otherSegments:J,segments:q,tiffBlocks:Q,segmentsAndBlocks:Z,tiffExtractables:ee,inheritables:te,allFormatters:ie,Options:oe});class pe{constructor(e,t,i){f(this,\"errors\",[]),f(this,\"ensureSegmentChunk\",(async e=>{let t=e.start,i=e.size||65536;if(this.file.chunked)if(this.file.available(t,i))e.chunk=this.file.subarray(t,i);else try{e.chunk=await this.file.readChunk(t,i)}catch(t){m(`Couldn't read segment: ${JSON.stringify(e)}. ${t.message}`)}else this.file.byteLength>t+i?e.chunk=this.file.subarray(t,i):void 0===e.size?e.chunk=this.file.subarray(t):m(\"Segment unreachable: \"+JSON.stringify(e));return e.chunk})),this.extendOptions&&this.extendOptions(e),this.options=e,this.file=t,this.parsers=i}injectSegment(e,t){this.options[e].enabled&&this.createParser(e,t)}createParser(e,t){let i=new(A.get(e))(t,this.options,this.file);return this.parsers[e]=i}createParsers(e){for(let t of e){let{type:e,chunk:i}=t,n=this.options[e];if(n&&n.enabled){let t=this.parsers[e];t&&t.append||t||this.createParser(e,i)}}}async readSegments(e){let t=e.map(this.ensureSegmentChunk);await Promise.all(t)}}class ge{static findPosition(e,t){let i=e.getUint16(t+2)+2,n=\"function\"==typeof this.headerLength?this.headerLength(e,t,i):this.headerLength,s=t+n,r=i-n;return{offset:t,length:i,headerLength:n,start:s,size:r,end:s+r}}static parse(e,t={}){return new this(e,new oe({[this.type]:t}),e).parse()}normalizeInput(e){return e instanceof I?e:new I(e)}constructor(e,t={},i){f(this,\"errors\",[]),f(this,\"raw\",new Map),f(this,\"handleError\",(e=>{if(!this.options.silentErrors)throw e;this.errors.push(e.message)})),this.chunk=this.normalizeInput(e),this.file=i,this.type=this.constructor.type,this.globalOptions=this.options=t,this.localOptions=t[this.type],this.canTranslate=this.localOptions&&this.localOptions.translate}translate(){this.canTranslate&&(this.translated=this.translateBlock(this.raw,this.type))}get output(){return this.translated?this.translated:this.raw?Object.fromEntries(this.raw):void 0}translateBlock(e,t){let i=V.get(t),n=G.get(t),s=N.get(t),r=this.options[t],a=r.reviveValues&&!!i,o=r.translateValues&&!!n,l=r.translateKeys&&!!s,h={};for(let[t,r]of e)a&&i.has(t)?r=i.get(t)(r):o&&n.has(t)&&(r=this.translateValue(r,n.get(t))),l&&s.has(t)&&(t=s.get(t)||t),h[t]=r;return h}translateValue(e,t){return t[e]||t.DEFAULT||e}assignToOutput(e,t){this.assignObjectToOutput(e,this.constructor.type,t)}assignObjectToOutput(e,t,i){if(this.globalOptions.mergeOutput)return Object.assign(e,i);e[t]?Object.assign(e[t],i):e[t]=i}}f(ge,\"headerLength\",4),f(ge,\"type\",void 0),f(ge,\"multiSegment\",!1),f(ge,\"canHandle\",(()=>!1));function me(e){return 192===e||194===e||196===e||219===e||221===e||218===e||254===e}function Se(e){return e>=224&&e<=239}function Ce(e,t,i){for(let[n,s]of A)if(s.canHandle(e,t,i))return n}class ye extends pe{constructor(...e){super(...e),f(this,\"appSegments\",[]),f(this,\"jpegSegments\",[]),f(this,\"unknownSegments\",[])}static canHandle(e,t){return 65496===t}async parse(){await this.findAppSegments(),await this.readSegments(this.appSegments),this.mergeMultiSegments(),this.createParsers(this.mergedAppSegments||this.appSegments)}setupSegmentFinderArgs(e){!0===e?(this.findAll=!0,this.wanted=new Set(A.keyList())):(e=void 0===e?A.keyList().filter((e=>this.options[e].enabled)):e.filter((e=>this.options[e].enabled&&A.has(e))),this.findAll=!1,this.remaining=new Set(e),this.wanted=new Set(e)),this.unfinishedMultiSegment=!1}async findAppSegments(e=0,t){this.setupSegmentFinderArgs(t);let{file:i,findAll:n,wanted:s,remaining:r}=this;if(!n&&this.file.chunked&&(n=Array.from(s).some((e=>{let t=A.get(e),i=this.options[e];return t.multiSegment&&i.multiSegment})),n&&await this.file.readWhole()),e=this.findAppSegmentsInRange(e,i.byteLength),!this.options.onlyTiff&&i.chunked){let t=!1;for(;r.size>0&&!t&&(i.canReadNextChunk||this.unfinishedMultiSegment);){let{nextChunkOffset:n}=i,s=this.appSegments.some((e=>!this.file.available(e.offset||e.start,e.length||e.size)));if(t=e>n&&!s?!await i.readNextChunk(e):!await i.readNextChunk(n),void 0===(e=this.findAppSegmentsInRange(e,i.byteLength)))return}}}findAppSegmentsInRange(e,t){t-=2;let i,n,s,r,a,o,{file:l,findAll:h,wanted:u,remaining:c,options:f}=this;for(;e<t;e++)if(255===l.getUint8(e))if(i=l.getUint8(e+1),Se(i)){if(n=l.getUint16(e+2),s=Ce(l,e,n),s&&u.has(s)&&(r=A.get(s),a=r.findPosition(l,e),o=f[s],a.type=s,this.appSegments.push(a),!h&&(r.multiSegment&&o.multiSegment?(this.unfinishedMultiSegment=a.chunkNumber<a.chunkCount,this.unfinishedMultiSegment||c.delete(s)):c.delete(s),0===c.size)))break;f.recordUnknownSegments&&(a=ge.findPosition(l,e),a.marker=i,this.unknownSegments.push(a)),e+=n+1}else if(me(i)){if(n=l.getUint16(e+2),218===i&&!1!==f.stopAfterSos)return;f.recordJpegSegments&&this.jpegSegments.push({offset:e,length:n,marker:i}),e+=n+1}return e}mergeMultiSegments(){if(!this.appSegments.some((e=>e.multiSegment)))return;let e=function(e,t){let i,n,s,r=new Map;for(let a=0;a<e.length;a++)i=e[a],n=i[t],r.has(n)?s=r.get(n):r.set(n,s=[]),s.push(i);return Array.from(r)}(this.appSegments,\"type\");this.mergedAppSegments=e.map((([e,t])=>{let i=A.get(e,this.options);if(i.handleMultiSegments){return{type:e,chunk:i.handleMultiSegments(t)}}return t[0]}))}getSegment(e){return this.appSegments.find((t=>t.type===e))}async getOrFindSegment(e){let t=this.getSegment(e);return void 0===t&&(await this.findAppSegments(0,[e]),t=this.getSegment(e)),t}}f(ye,\"type\",\"jpeg\"),T.set(\"jpeg\",ye);const be=[void 0,1,1,2,4,8,1,1,2,4,8,4,8,4];class Pe extends ge{parseHeader(){var e=this.chunk.getUint16();18761===e?this.le=!0:19789===e&&(this.le=!1),this.chunk.le=this.le,this.headerParsed=!0}parseTags(e,t,i=new Map){let{pick:n,skip:s}=this.options[t];n=new Set(n);let r=n.size>0,a=0===s.size,o=this.chunk.getUint16(e);e+=2;for(let l=0;l<o;l++){let o=this.chunk.getUint16(e);if(r){if(n.has(o)&&(i.set(o,this.parseTag(e,o,t)),n.delete(o),0===n.size))break}else!a&&s.has(o)||i.set(o,this.parseTag(e,o,t));e+=12}return i}parseTag(e,t,i){let{chunk:n}=this,s=n.getUint16(e+2),r=n.getUint32(e+4),a=be[s];if(a*r<=4?e+=8:e=n.getUint32(e+8),(s<1||s>13)&&m(`Invalid TIFF value type. block: ${i.toUpperCase()}, tag: ${t.toString(16)}, type: ${s}, offset ${e}`),e>n.byteLength&&m(`Invalid TIFF value offset. block: ${i.toUpperCase()}, tag: ${t.toString(16)}, type: ${s}, offset ${e} is outside of chunk size ${n.byteLength}`),1===s)return n.getUint8Array(e,r);if(2===s)return S(n.getString(e,r));if(7===s)return n.getUint8Array(e,r);if(1===r)return this.parseTagValue(s,e);{let t=new(function(e){switch(e){case 1:return Uint8Array;case 3:return Uint16Array;case 4:return Uint32Array;case 5:return Array;case 6:return Int8Array;case 8:return Int16Array;case 9:return Int32Array;case 10:return Array;case 11:return Float32Array;case 12:return Float64Array;default:return Array}}(s))(r),i=a;for(let n=0;n<r;n++)t[n]=this.parseTagValue(s,e),e+=i;return t}}parseTagValue(e,t){let{chunk:i}=this;switch(e){case 1:return i.getUint8(t);case 3:return i.getUint16(t);case 4:return i.getUint32(t);case 5:return i.getUint32(t)/i.getUint32(t+4);case 6:return i.getInt8(t);case 8:return i.getInt16(t);case 9:return i.getInt32(t);case 10:return i.getInt32(t)/i.getInt32(t+4);case 11:return i.getFloat(t);case 12:return i.getDouble(t);case 13:return i.getUint32(t);default:m(`Invalid tiff type ${e}`)}}}class Ie extends Pe{static canHandle(e,t){return 225===e.getUint8(t+1)&&1165519206===e.getUint32(t+4)&&0===e.getUint16(t+8)}async parse(){this.parseHeader();let{options:e}=this;return e.ifd0.enabled&&await this.parseIfd0Block(),e.exif.enabled&&await this.safeParse(\"parseExifBlock\"),e.gps.enabled&&await this.safeParse(\"parseGpsBlock\"),e.interop.enabled&&await this.safeParse(\"parseInteropBlock\"),e.ifd1.enabled&&await this.safeParse(\"parseThumbnailBlock\"),this.createOutput()}safeParse(e){let t=this[e]();return void 0!==t.catch&&(t=t.catch(this.handleError)),t}findIfd0Offset(){void 0===this.ifd0Offset&&(this.ifd0Offset=this.chunk.getUint32(4))}findIfd1Offset(){if(void 0===this.ifd1Offset){this.findIfd0Offset();let e=this.chunk.getUint16(this.ifd0Offset),t=this.ifd0Offset+2+12*e;this.ifd1Offset=this.chunk.getUint32(t)}}parseBlock(e,t){let i=new Map;return this[t]=i,this.parseTags(e,t,i),i}async parseIfd0Block(){if(this.ifd0)return;let{file:e}=this;this.findIfd0Offset(),this.ifd0Offset<8&&m(\"Malformed EXIF data\"),!e.chunked&&this.ifd0Offset>e.byteLength&&m(`IFD0 offset points to outside of file.\\nthis.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e.byteLength}`),e.tiff&&await e.ensureChunk(this.ifd0Offset,C(this.options));let t=this.parseBlock(this.ifd0Offset,\"ifd0\");return 0!==t.size?(this.exifOffset=t.get(X),this.interopOffset=t.get(Y),this.gpsOffset=t.get(_),this.xmp=t.get(j),this.iptc=t.get(W),this.icc=t.get(K),this.options.sanitize&&(t.delete(X),t.delete(Y),t.delete(_),t.delete(j),t.delete(W),t.delete(K)),t):void 0}async parseExifBlock(){if(this.exif)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.exifOffset)return;this.file.tiff&&await this.file.ensureChunk(this.exifOffset,C(this.options));let e=this.parseBlock(this.exifOffset,\"exif\");return this.interopOffset||(this.interopOffset=e.get(Y)),this.makerNote=e.get(z),this.userComment=e.get(H),this.options.sanitize&&(e.delete(Y),e.delete(z),e.delete(H)),this.unpack(e,41728),this.unpack(e,41729),e}unpack(e,t){let i=e.get(t);i&&1===i.length&&e.set(t,i[0])}async parseGpsBlock(){if(this.gps)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.gpsOffset)return;let e=this.parseBlock(this.gpsOffset,\"gps\");return e&&e.has(2)&&e.has(4)&&(e.set(\"latitude\",ke(...e.get(2),e.get(1))),e.set(\"longitude\",ke(...e.get(4),e.get(3)))),e}async parseInteropBlock(){if(!this.interop&&(this.ifd0||await this.parseIfd0Block(),void 0!==this.interopOffset||this.exif||await this.parseExifBlock(),void 0!==this.interopOffset))return this.parseBlock(this.interopOffset,\"interop\")}async parseThumbnailBlock(e=!1){if(!this.ifd1&&!this.ifd1Parsed&&(!this.options.mergeOutput||e))return this.findIfd1Offset(),this.ifd1Offset>0&&(this.parseBlock(this.ifd1Offset,\"ifd1\"),this.ifd1Parsed=!0),this.ifd1}async extractThumbnail(){if(this.headerParsed||this.parseHeader(),this.ifd1Parsed||await this.parseThumbnailBlock(!0),void 0===this.ifd1)return;let e=this.ifd1.get(513),t=this.ifd1.get(514);return this.chunk.getUint8Array(e,t)}get image(){return this.ifd0}get thumbnail(){return this.ifd1}createOutput(){let e,t,i,n={};for(t of Q)if(e=this[t],!g(e))if(i=this.canTranslate?this.translateBlock(e,t):Object.fromEntries(e),this.options.mergeOutput){if(\"ifd1\"===t)continue;Object.assign(n,i)}else n[t]=i;return this.makerNote&&(n.makerNote=this.makerNote),this.userComment&&(n.userComment=this.userComment),n}assignToOutput(e,t){if(this.globalOptions.mergeOutput)Object.assign(e,t);else for(let[i,n]of Object.entries(t))this.assignObjectToOutput(e,i,n)}}function ke(e,t,i,n){var s=e+t/60+i/3600;return\"S\"!==n&&\"W\"!==n||(s*=-1),s}f(Ie,\"type\",\"tiff\"),f(Ie,\"headerLength\",10),A.set(\"tiff\",Ie);var we=Object.freeze({__proto__:null,default:de,Exifr:ce,fileParsers:T,segmentParsers:A,fileReaders:D,tagKeys:N,tagValues:G,tagRevivers:V,createDictionary:B,extendDictionary:E,fetchUrlAsArrayBuffer:L,readBlobAsArrayBuffer:U,chunkedProps:$,otherSegments:J,segments:q,tiffBlocks:Q,segmentsAndBlocks:Z,tiffExtractables:ee,inheritables:te,allFormatters:ie,Options:oe,parse:fe});const Te={ifd0:!1,ifd1:!1,exif:!1,gps:!1,interop:!1,sanitize:!1,reviveValues:!0,translateKeys:!1,translateValues:!1,mergeOutput:!1},Ae=Object.assign({},Te,{firstChunkSize:4e4,gps:[1,2,3,4]});async function De(e){let t=new ce(Ae);await t.read(e);let i=await t.parse();if(i&&i.gps){let{latitude:e,longitude:t}=i.gps;return{latitude:e,longitude:t}}}const Oe=Object.assign({},Te,{tiff:!1,ifd1:!0,mergeOutput:!1});async function xe(e){let t=new ce(Oe);await t.read(e);let i=await t.extractThumbnail();return i&&o?r.from(i):i}async function ve(e){let t=await this.thumbnail(e);if(void 0!==t){let e=new Blob([t]);return URL.createObjectURL(e)}}const Me=Object.assign({},Te,{firstChunkSize:4e4,ifd0:[274]});async function Re(e){let t=new ce(Me);await t.read(e);let i=await t.parse();if(i&&i.ifd0)return i.ifd0[274]}const Le=Object.freeze({1:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:0,rad:0},2:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:0,rad:0},3:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:180,rad:180*Math.PI/180},4:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:180,rad:180*Math.PI/180},5:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:90,rad:90*Math.PI/180},6:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:90,rad:90*Math.PI/180},7:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:270,rad:270*Math.PI/180},8:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:270,rad:270*Math.PI/180}});if(e.rotateCanvas=!0,e.rotateCss=!0,\"object\"==typeof navigator){let t=navigator.userAgent;if(t.includes(\"iPad\")||t.includes(\"iPhone\")){let i=t.match(/OS (\\d+)_(\\d+)/);if(i){let[,t,n]=i,s=Number(t)+.1*Number(n);e.rotateCanvas=s<13.4,e.rotateCss=!1}}else if(t.includes(\"OS X 10\")){let[,i]=t.match(/OS X 10[_.](\\d+)/);e.rotateCanvas=e.rotateCss=Number(i)<15}if(t.includes(\"Chrome/\")){let[,i]=t.match(/Chrome\\/(\\d+)/);e.rotateCanvas=e.rotateCss=Number(i)<81}else if(t.includes(\"Firefox/\")){let[,i]=t.match(/Firefox\\/(\\d+)/);e.rotateCanvas=e.rotateCss=Number(i)<77}}async function Ue(t){let i=await Re(t);return Object.assign({canvas:e.rotateCanvas,css:e.rotateCss},Le[i])}class Fe extends I{constructor(...e){super(...e),f(this,\"ranges\",new Be),0!==this.byteLength&&this.ranges.add(0,this.byteLength)}_tryExtend(e,t,i){if(0===e&&0===this.byteLength&&i){let e=new DataView(i.buffer||i,i.byteOffset,i.byteLength);this._swapDataView(e)}else{let i=e+t;if(i>this.byteLength){let{dataView:e}=this._extend(i);this._swapDataView(e)}}}_extend(e){let t;t=o?r.allocUnsafe(e):new Uint8Array(e);let i=new DataView(t.buffer,t.byteOffset,t.byteLength);return t.set(new Uint8Array(this.buffer,this.byteOffset,this.byteLength),0),{uintView:t,dataView:i}}subarray(e,t,i=!1){return t=t||this._lengthToEnd(e),i&&this._tryExtend(e,t),this.ranges.add(e,t),super.subarray(e,t)}set(e,t,i=!1){i&&this._tryExtend(t,e.byteLength,e);let n=super.set(e,t);return this.ranges.add(t,n.byteLength),n}async ensureChunk(e,t){this.chunked&&(this.ranges.available(e,t)||await this.readChunk(e,t))}available(e,t){return this.ranges.available(e,t)}}class Be{constructor(){f(this,\"list\",[])}get length(){return this.list.length}add(e,t,i=0){let n=e+t,s=this.list.filter((t=>Ee(e,t.offset,n)||Ee(e,t.end,n)));if(s.length>0){e=Math.min(e,...s.map((e=>e.offset))),n=Math.max(n,...s.map((e=>e.end))),t=n-e;let i=s.shift();i.offset=e,i.length=t,i.end=n,this.list=this.list.filter((e=>!s.includes(e)))}else this.list.push({offset:e,length:t,end:n})}available(e,t){let i=e+t;return this.list.some((t=>t.offset<=e&&i<=t.end))}}function Ee(e,t,i){return e<=t&&t<=i}class Ne extends Fe{constructor(e,t){super(0),f(this,\"chunksRead\",0),this.input=e,this.options=t}async readWhole(){this.chunked=!1,await this.readChunk(this.nextChunkOffset)}async readChunked(){this.chunked=!0,await this.readChunk(0,this.options.firstChunkSize)}async readNextChunk(e=this.nextChunkOffset){if(this.fullyRead)return this.chunksRead++,!1;let t=this.options.chunkSize,i=await this.readChunk(e,t);return!!i&&i.byteLength===t}async readChunk(e,t){if(this.chunksRead++,0!==(t=this.safeWrapAddress(e,t)))return this._readChunk(e,t)}safeWrapAddress(e,t){return void 0!==this.size&&e+t>this.size?Math.max(0,this.size-e):t}get nextChunkOffset(){if(0!==this.ranges.list.length)return this.ranges.list[0].length}get canReadNextChunk(){return this.chunksRead<this.options.chunkLimit}get fullyRead(){return void 0!==this.size&&this.nextChunkOffset===this.size}read(){return this.options.chunked?this.readChunked():this.readWhole()}close(){}}D.set(\"blob\",class extends Ne{async readWhole(){this.chunked=!1;let e=await U(this.input);this._swapArrayBuffer(e)}readChunked(){return this.chunked=!0,this.size=this.input.size,super.readChunked()}async _readChunk(e,t){let i=t?e+t:void 0,n=this.input.slice(e,i),s=await U(n);return this.set(s,e,!0)}});var Ge=Object.freeze({__proto__:null,default:we,Exifr:ce,fileParsers:T,segmentParsers:A,fileReaders:D,tagKeys:N,tagValues:G,tagRevivers:V,createDictionary:B,extendDictionary:E,fetchUrlAsArrayBuffer:L,readBlobAsArrayBuffer:U,chunkedProps:$,otherSegments:J,segments:q,tiffBlocks:Q,segmentsAndBlocks:Z,tiffExtractables:ee,inheritables:te,allFormatters:ie,Options:oe,parse:fe,gpsOnlyOptions:Ae,gps:De,thumbnailOnlyOptions:Oe,thumbnail:xe,thumbnailUrl:ve,orientationOnlyOptions:Me,orientation:Re,rotations:Le,get rotateCanvas(){return e.rotateCanvas},get rotateCss(){return e.rotateCss},rotation:Ue});D.set(\"url\",class extends Ne{async readWhole(){this.chunked=!1;let e=await L(this.input);e instanceof ArrayBuffer?this._swapArrayBuffer(e):e instanceof Uint8Array&&this._swapBuffer(e)}async _readChunk(e,t){let i=t?e+t-1:void 0,n=this.options.httpHeaders||{};(e||i)&&(n.range=`bytes=${[e,i].join(\"-\")}`);let s=await u(this.input,{headers:n}),r=await s.arrayBuffer(),a=r.byteLength;if(416!==s.status)return a!==t&&(this.size=e+a),this.set(r,e,!0)}});I.prototype.getUint64=function(e){let t=this.getUint32(e),i=this.getUint32(e+4);return t<1048575?t<<32|i:void 0!==typeof a?(console.warn(\"Using BigInt because of type 64uint but JS can only handle 53b numbers.\"),a(t)<<a(32)|a(i)):void m(\"Trying to read 64b value but JS can only handle 53b numbers.\")};class Ve extends pe{parseBoxes(e=0){let t=[];for(;e<this.file.byteLength-4;){let i=this.parseBoxHead(e);if(t.push(i),0===i.length)break;e+=i.length}return t}parseSubBoxes(e){e.boxes=this.parseBoxes(e.start)}findBox(e,t){return void 0===e.boxes&&this.parseSubBoxes(e),e.boxes.find((e=>e.kind===t))}parseBoxHead(e){let t=this.file.getUint32(e),i=this.file.getString(e+4,4),n=e+8;return 1===t&&(t=this.file.getUint64(e+8),n+=8),{offset:e,length:t,kind:i,start:n}}parseBoxFullHead(e){if(void 0!==e.version)return;let t=this.file.getUint32(e.start);e.version=t>>24,e.start+=4}}class ze extends Ve{static canHandle(e,t){if(0!==t)return!1;let i=e.getUint16(2);if(i>50)return!1;let n=16,s=[];for(;n<i;)s.push(e.getString(n,4)),n+=4;return s.includes(this.type)}async parse(){let e=this.file.getUint32(0),t=this.parseBoxHead(e);for(;\"meta\"!==t.kind;)e+=t.length,await this.file.ensureChunk(e,16),t=this.parseBoxHead(e);await this.file.ensureChunk(t.offset,t.length),this.parseBoxFullHead(t),this.parseSubBoxes(t),this.options.icc.enabled&&await this.findIcc(t),this.options.tiff.enabled&&await this.findExif(t)}async registerSegment(e,t,i){await this.file.ensureChunk(t,i);let n=this.file.subarray(t,i);this.createParser(e,n)}async findIcc(e){let t=this.findBox(e,\"iprp\");if(void 0===t)return;let i=this.findBox(t,\"ipco\");if(void 0===i)return;let n=this.findBox(i,\"colr\");void 0!==n&&await this.registerSegment(\"icc\",n.offset+12,n.length)}async findExif(e){let t=this.findBox(e,\"iinf\");if(void 0===t)return;let i=this.findBox(e,\"iloc\");if(void 0===i)return;let n=this.findExifLocIdInIinf(t),s=this.findExtentInIloc(i,n);if(void 0===s)return;let[r,a]=s;await this.file.ensureChunk(r,a);let o=4+this.file.getUint32(r);r+=o,a-=o,await this.registerSegment(\"tiff\",r,a)}findExifLocIdInIinf(e){this.parseBoxFullHead(e);let t,i,n,s,r=e.start,a=this.file.getUint16(r);for(r+=2;a--;){if(t=this.parseBoxHead(r),this.parseBoxFullHead(t),i=t.start,t.version>=2&&(n=3===t.version?4:2,s=this.file.getString(i+n+2,4),\"Exif\"===s))return this.file.getUintBytes(i,n);r+=t.length}}get8bits(e){let t=this.file.getUint8(e);return[t>>4,15&t]}findExtentInIloc(e,t){this.parseBoxFullHead(e);let i=e.start,[n,s]=this.get8bits(i++),[r,a]=this.get8bits(i++),o=2===e.version?4:2,l=1===e.version||2===e.version?2:0,h=a+n+s,u=2===e.version?4:2,c=this.file.getUintBytes(i,u);for(i+=u;c--;){let e=this.file.getUintBytes(i,o);i+=o+l+2+r;let u=this.file.getUint16(i);if(i+=2,e===t)return u>1&&console.warn(\"ILOC box has more than one extent but we're only processing one\\nPlease create an issue at https://github.com/MikeKovarik/exifr with this file\"),[this.file.getUintBytes(i+a,n),this.file.getUintBytes(i+a+n,s)];i+=u*h}}}class He extends ze{}f(He,\"type\",\"heic\");class je extends ze{}f(je,\"type\",\"avif\"),T.set(\"heic\",He),T.set(\"avif\",je),B(N,[\"ifd0\",\"ifd1\"],[[256,\"ImageWidth\"],[257,\"ImageHeight\"],[258,\"BitsPerSample\"],[259,\"Compression\"],[262,\"PhotometricInterpretation\"],[270,\"ImageDescription\"],[271,\"Make\"],[272,\"Model\"],[273,\"StripOffsets\"],[274,\"Orientation\"],[277,\"SamplesPerPixel\"],[278,\"RowsPerStrip\"],[279,\"StripByteCounts\"],[282,\"XResolution\"],[283,\"YResolution\"],[284,\"PlanarConfiguration\"],[296,\"ResolutionUnit\"],[301,\"TransferFunction\"],[305,\"Software\"],[306,\"ModifyDate\"],[315,\"Artist\"],[316,\"HostComputer\"],[317,\"Predictor\"],[318,\"WhitePoint\"],[319,\"PrimaryChromaticities\"],[513,\"ThumbnailOffset\"],[514,\"ThumbnailLength\"],[529,\"YCbCrCoefficients\"],[530,\"YCbCrSubSampling\"],[531,\"YCbCrPositioning\"],[532,\"ReferenceBlackWhite\"],[700,\"ApplicationNotes\"],[33432,\"Copyright\"],[33723,\"IPTC\"],[34665,\"ExifIFD\"],[34675,\"ICC\"],[34853,\"GpsIFD\"],[330,\"SubIFD\"],[40965,\"InteropIFD\"],[40091,\"XPTitle\"],[40092,\"XPComment\"],[40093,\"XPAuthor\"],[40094,\"XPKeywords\"],[40095,\"XPSubject\"]]),B(N,\"exif\",[[33434,\"ExposureTime\"],[33437,\"FNumber\"],[34850,\"ExposureProgram\"],[34852,\"SpectralSensitivity\"],[34855,\"ISO\"],[34858,\"TimeZoneOffset\"],[34859,\"SelfTimerMode\"],[34864,\"SensitivityType\"],[34865,\"StandardOutputSensitivity\"],[34866,\"RecommendedExposureIndex\"],[34867,\"ISOSpeed\"],[34868,\"ISOSpeedLatitudeyyy\"],[34869,\"ISOSpeedLatitudezzz\"],[36864,\"ExifVersion\"],[36867,\"DateTimeOriginal\"],[36868,\"CreateDate\"],[36873,\"GooglePlusUploadCode\"],[36880,\"OffsetTime\"],[36881,\"OffsetTimeOriginal\"],[36882,\"OffsetTimeDigitized\"],[37121,\"ComponentsConfiguration\"],[37122,\"CompressedBitsPerPixel\"],[37377,\"ShutterSpeedValue\"],[37378,\"ApertureValue\"],[37379,\"BrightnessValue\"],[37380,\"ExposureCompensation\"],[37381,\"MaxApertureValue\"],[37382,\"SubjectDistance\"],[37383,\"MeteringMode\"],[37384,\"LightSource\"],[37385,\"Flash\"],[37386,\"FocalLength\"],[37393,\"ImageNumber\"],[37394,\"SecurityClassification\"],[37395,\"ImageHistory\"],[37396,\"SubjectArea\"],[37500,\"MakerNote\"],[37510,\"UserComment\"],[37520,\"SubSecTime\"],[37521,\"SubSecTimeOriginal\"],[37522,\"SubSecTimeDigitized\"],[37888,\"AmbientTemperature\"],[37889,\"Humidity\"],[37890,\"Pressure\"],[37891,\"WaterDepth\"],[37892,\"Acceleration\"],[37893,\"CameraElevationAngle\"],[40960,\"FlashpixVersion\"],[40961,\"ColorSpace\"],[40962,\"ExifImageWidth\"],[40963,\"ExifImageHeight\"],[40964,\"RelatedSoundFile\"],[41483,\"FlashEnergy\"],[41486,\"FocalPlaneXResolution\"],[41487,\"FocalPlaneYResolution\"],[41488,\"FocalPlaneResolutionUnit\"],[41492,\"SubjectLocation\"],[41493,\"ExposureIndex\"],[41495,\"SensingMethod\"],[41728,\"FileSource\"],[41729,\"SceneType\"],[41730,\"CFAPattern\"],[41985,\"CustomRendered\"],[41986,\"ExposureMode\"],[41987,\"WhiteBalance\"],[41988,\"DigitalZoomRatio\"],[41989,\"FocalLengthIn35mmFormat\"],[41990,\"SceneCaptureType\"],[41991,\"GainControl\"],[41992,\"Contrast\"],[41993,\"Saturation\"],[41994,\"Sharpness\"],[41996,\"SubjectDistanceRange\"],[42016,\"ImageUniqueID\"],[42032,\"OwnerName\"],[42033,\"SerialNumber\"],[42034,\"LensInfo\"],[42035,\"LensMake\"],[42036,\"LensModel\"],[42037,\"LensSerialNumber\"],[42080,\"CompositeImage\"],[42081,\"CompositeImageCount\"],[42082,\"CompositeImageExposureTimes\"],[42240,\"Gamma\"],[59932,\"Padding\"],[59933,\"OffsetSchema\"],[65e3,\"OwnerName\"],[65001,\"SerialNumber\"],[65002,\"Lens\"],[65100,\"RawFile\"],[65101,\"Converter\"],[65102,\"WhiteBalance\"],[65105,\"Exposure\"],[65106,\"Shadows\"],[65107,\"Brightness\"],[65108,\"Contrast\"],[65109,\"Saturation\"],[65110,\"Sharpness\"],[65111,\"Smoothness\"],[65112,\"MoireFilter\"],[40965,\"InteropIFD\"]]),B(N,\"gps\",[[0,\"GPSVersionID\"],[1,\"GPSLatitudeRef\"],[2,\"GPSLatitude\"],[3,\"GPSLongitudeRef\"],[4,\"GPSLongitude\"],[5,\"GPSAltitudeRef\"],[6,\"GPSAltitude\"],[7,\"GPSTimeStamp\"],[8,\"GPSSatellites\"],[9,\"GPSStatus\"],[10,\"GPSMeasureMode\"],[11,\"GPSDOP\"],[12,\"GPSSpeedRef\"],[13,\"GPSSpeed\"],[14,\"GPSTrackRef\"],[15,\"GPSTrack\"],[16,\"GPSImgDirectionRef\"],[17,\"GPSImgDirection\"],[18,\"GPSMapDatum\"],[19,\"GPSDestLatitudeRef\"],[20,\"GPSDestLatitude\"],[21,\"GPSDestLongitudeRef\"],[22,\"GPSDestLongitude\"],[23,\"GPSDestBearingRef\"],[24,\"GPSDestBearing\"],[25,\"GPSDestDistanceRef\"],[26,\"GPSDestDistance\"],[27,\"GPSProcessingMethod\"],[28,\"GPSAreaInformation\"],[29,\"GPSDateStamp\"],[30,\"GPSDifferential\"],[31,\"GPSHPositioningError\"]]),B(G,[\"ifd0\",\"ifd1\"],[[274,{1:\"Horizontal (normal)\",2:\"Mirror horizontal\",3:\"Rotate 180\",4:\"Mirror vertical\",5:\"Mirror horizontal and rotate 270 CW\",6:\"Rotate 90 CW\",7:\"Mirror horizontal and rotate 90 CW\",8:\"Rotate 270 CW\"}],[296,{1:\"None\",2:\"inches\",3:\"cm\"}]]);let We=B(G,\"exif\",[[34850,{0:\"Not defined\",1:\"Manual\",2:\"Normal program\",3:\"Aperture priority\",4:\"Shutter priority\",5:\"Creative program\",6:\"Action program\",7:\"Portrait mode\",8:\"Landscape mode\"}],[37121,{0:\"-\",1:\"Y\",2:\"Cb\",3:\"Cr\",4:\"R\",5:\"G\",6:\"B\"}],[37383,{0:\"Unknown\",1:\"Average\",2:\"CenterWeightedAverage\",3:\"Spot\",4:\"MultiSpot\",5:\"Pattern\",6:\"Partial\",255:\"Other\"}],[37384,{0:\"Unknown\",1:\"Daylight\",2:\"Fluorescent\",3:\"Tungsten (incandescent light)\",4:\"Flash\",9:\"Fine weather\",10:\"Cloudy weather\",11:\"Shade\",12:\"Daylight fluorescent (D 5700 - 7100K)\",13:\"Day white fluorescent (N 4600 - 5400K)\",14:\"Cool white fluorescent (W 3900 - 4500K)\",15:\"White fluorescent (WW 3200 - 3700K)\",17:\"Standard light A\",18:\"Standard light B\",19:\"Standard light C\",20:\"D55\",21:\"D65\",22:\"D75\",23:\"D50\",24:\"ISO studio tungsten\",255:\"Other\"}],[37385,{0:\"Flash did not fire\",1:\"Flash fired\",5:\"Strobe return light not detected\",7:\"Strobe return light detected\",9:\"Flash fired, compulsory flash mode\",13:\"Flash fired, compulsory flash mode, return light not detected\",15:\"Flash fired, compulsory flash mode, return light detected\",16:\"Flash did not fire, compulsory flash mode\",24:\"Flash did not fire, auto mode\",25:\"Flash fired, auto mode\",29:\"Flash fired, auto mode, return light not detected\",31:\"Flash fired, auto mode, return light detected\",32:\"No flash function\",65:\"Flash fired, red-eye reduction mode\",69:\"Flash fired, red-eye reduction mode, return light not detected\",71:\"Flash fired, red-eye reduction mode, return light detected\",73:\"Flash fired, compulsory flash mode, red-eye reduction mode\",77:\"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected\",79:\"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected\",89:\"Flash fired, auto mode, red-eye reduction mode\",93:\"Flash fired, auto mode, return light not detected, red-eye reduction mode\",95:\"Flash fired, auto mode, return light detected, red-eye reduction mode\"}],[41495,{1:\"Not defined\",2:\"One-chip color area sensor\",3:\"Two-chip color area sensor\",4:\"Three-chip color area sensor\",5:\"Color sequential area sensor\",7:\"Trilinear sensor\",8:\"Color sequential linear sensor\"}],[41728,{1:\"Film Scanner\",2:\"Reflection Print Scanner\",3:\"Digital Camera\"}],[41729,{1:\"Directly photographed\"}],[41985,{0:\"Normal\",1:\"Custom\",2:\"HDR (no original saved)\",3:\"HDR (original saved)\",4:\"Original (for HDR)\",6:\"Panorama\",7:\"Portrait HDR\",8:\"Portrait\"}],[41986,{0:\"Auto\",1:\"Manual\",2:\"Auto bracket\"}],[41987,{0:\"Auto\",1:\"Manual\"}],[41990,{0:\"Standard\",1:\"Landscape\",2:\"Portrait\",3:\"Night\",4:\"Other\"}],[41991,{0:\"None\",1:\"Low gain up\",2:\"High gain up\",3:\"Low gain down\",4:\"High gain down\"}],[41996,{0:\"Unknown\",1:\"Macro\",2:\"Close\",3:\"Distant\"}],[42080,{0:\"Unknown\",1:\"Not a Composite Image\",2:\"General Composite Image\",3:\"Composite Image Captured While Shooting\"}]]);const Ke={1:\"No absolute unit of measurement\",2:\"Inch\",3:\"Centimeter\"};We.set(37392,Ke),We.set(41488,Ke);const Xe={0:\"Normal\",1:\"Low\",2:\"High\"};function _e(e){return\"object\"==typeof e&&void 0!==e.length?e[0]:e}function Ye(e){let t=Array.from(e).slice(1);return t[1]>15&&(t=t.map((e=>String.fromCharCode(e)))),\"0\"!==t[2]&&0!==t[2]||t.pop(),t.join(\".\")}function $e(e){if(\"string\"==typeof e){var[t,i,n,s,r,a]=e.trim().split(/[-: ]/g).map(Number),o=new Date(t,i-1,n);return Number.isNaN(s)||Number.isNaN(r)||Number.isNaN(a)||(o.setHours(s),o.setMinutes(r),o.setSeconds(a)),Number.isNaN(+o)?e:o}}function Je(e){if(\"string\"==typeof e)return e;let t=[];if(0===e[1]&&0===e[e.length-1])for(let i=0;i<e.length;i+=2)t.push(qe(e[i+1],e[i]));else for(let i=0;i<e.length;i+=2)t.push(qe(e[i],e[i+1]));return S(String.fromCodePoint(...t))}function qe(e,t){return e<<8|t}We.set(41992,Xe),We.set(41993,Xe),We.set(41994,Xe),B(V,[\"ifd0\",\"ifd1\"],[[50827,function(e){return\"string\"!=typeof e?P(e):e}],[306,$e],[40091,Je],[40092,Je],[40093,Je],[40094,Je],[40095,Je]]),B(V,\"exif\",[[40960,Ye],[36864,Ye],[36867,$e],[36868,$e],[40962,_e],[40963,_e]]),B(V,\"gps\",[[0,e=>Array.from(e).join(\".\")],[7,e=>Array.from(e).join(\":\")]]);const Qe=\"http://ns.adobe.com/\",Ze=\"http://ns.adobe.com/xmp/extension/\";class et extends ge{static canHandle(e,t){return 225===e.getUint8(t+1)&&1752462448===e.getUint32(t+4)&&e.getString(t+4,Qe.length)===Qe}static headerLength(e,t){return e.getString(t+4,Ze.length)===Ze?79:4+\"http://ns.adobe.com/xap/1.0/\".length+1}static findPosition(e,t){let i=super.findPosition(e,t);return i.multiSegment=i.extended=79===i.headerLength,i.multiSegment?(i.chunkCount=e.getUint8(t+72),i.chunkNumber=e.getUint8(t+76),0!==e.getUint8(t+77)&&i.chunkNumber++):(i.chunkCount=1/0,i.chunkNumber=-1),i}static handleMultiSegments(e){return e.map((e=>e.chunk.getString())).join(\"\")}normalizeInput(e){return\"string\"==typeof e?e:I.from(e).getString()}parse(e=this.chunk){if(!this.localOptions.parse)return e;e=function(e){let t={},i={};for(let e of ut)t[e]=[],i[e]=0;return e.replace(ct,((e,n,s)=>{if(\"<\"===n){let n=++i[s];return t[s].push(n),`${e}#${n}`}return`${e}#${t[s].pop()}`}))}(e);let t=nt.findAll(e,\"rdf\",\"Description\");0===t.length&&t.push(new nt(\"rdf\",\"Description\",void 0,e));let i,n={};for(let e of t)for(let t of e.properties)i=ot(t.ns,n),st(t,i);return function(e){let t;for(let i in e)t=e[i]=d(e[i]),void 0===t&&delete e[i];return d(e)}(n)}assignToOutput(e,t){if(this.localOptions.parse)for(let[i,n]of Object.entries(t))switch(i){case\"tiff\":this.assignObjectToOutput(e,\"ifd0\",n);break;case\"exif\":this.assignObjectToOutput(e,\"exif\",n);break;case\"xmlns\":break;default:this.assignObjectToOutput(e,i,n)}else e.xmp=t}}f(et,\"type\",\"xmp\"),f(et,\"multiSegment\",!0),A.set(\"xmp\",et);class tt{static findAll(e){return lt(e,/([a-zA-Z0-9-]+):([a-zA-Z0-9-]+)=(\"[^\"]*\"|'[^']*')/gm).map(tt.unpackMatch)}static unpackMatch(e){let t=e[1],i=e[2],n=e[3].slice(1,-1);return n=ht(n),new tt(t,i,n)}constructor(e,t,i){this.ns=e,this.name=t,this.value=i}serialize(){return this.value}}const it=\"[\\\\w\\\\d-]+\";class nt{static findAll(e,t,i){if(void 0!==t||void 0!==i){t=t||it,i=i||it;var n=new RegExp(`<(${t}):(${i})(#\\\\d+)?((\\\\s+?[\\\\w\\\\d-:]+=(\"[^\"]*\"|'[^']*'))*\\\\s*)(\\\\/>|>([\\\\s\\\\S]*?)<\\\\/\\\\1:\\\\2\\\\3>)`,\"gm\")}else n=/<([\\w\\d-]+):([\\w\\d-]+)(#\\d+)?((\\s+?[\\w\\d-:]+=(\"[^\"]*\"|'[^']*'))*\\s*)(\\/>|>([\\s\\S]*?)<\\/\\1:\\2\\3>)/gm;return lt(e,n).map(nt.unpackMatch)}static unpackMatch(e){let t=e[1],i=e[2],n=e[4],s=e[8];return new nt(t,i,n,s)}constructor(e,t,i,n){this.ns=e,this.name=t,this.attrString=i,this.innerXml=n,this.attrs=tt.findAll(i),this.children=nt.findAll(n),this.value=0===this.children.length?ht(n):void 0,this.properties=[...this.attrs,...this.children]}get isPrimitive(){return void 0!==this.value&&0===this.attrs.length&&0===this.children.length}get isListContainer(){return 1===this.children.length&&this.children[0].isList}get isList(){let{ns:e,name:t}=this;return\"rdf\"===e&&(\"Seq\"===t||\"Bag\"===t||\"Alt\"===t)}get isListItem(){return\"rdf\"===this.ns&&\"li\"===this.name}serialize(){if(0===this.properties.length&&void 0===this.value)return;if(this.isPrimitive)return this.value;if(this.isListContainer)return this.children[0].serialize();if(this.isList)return at(this.children.map(rt));if(this.isListItem&&1===this.children.length&&0===this.attrs.length)return this.children[0].serialize();let e={};for(let t of this.properties)st(t,e);return void 0!==this.value&&(e.value=this.value),d(e)}}function st(e,t){let i=e.serialize();void 0!==i&&(t[e.name]=i)}var rt=e=>e.serialize(),at=e=>1===e.length?e[0]:e,ot=(e,t)=>t[e]?t[e]:t[e]={};function lt(e,t){let i,n=[];if(!e)return n;for(;null!==(i=t.exec(e));)n.push(i);return n}function ht(e){if(function(e){return null==e||\"null\"===e||\"undefined\"===e||\"\"===e||\"\"===e.trim()}(e))return;let t=Number(e);if(!Number.isNaN(t))return t;let i=e.toLowerCase();return\"true\"===i||\"false\"!==i&&e.trim()}const ut=[\"rdf:li\",\"rdf:Seq\",\"rdf:Bag\",\"rdf:Alt\",\"rdf:Description\"],ct=new RegExp(`(<|\\\\/)(${ut.join(\"|\")})`,\"g\");var ft=Object.freeze({__proto__:null,default:Ge,Exifr:ce,fileParsers:T,segmentParsers:A,fileReaders:D,tagKeys:N,tagValues:G,tagRevivers:V,createDictionary:B,extendDictionary:E,fetchUrlAsArrayBuffer:L,readBlobAsArrayBuffer:U,chunkedProps:$,otherSegments:J,segments:q,tiffBlocks:Q,segmentsAndBlocks:Z,tiffExtractables:ee,inheritables:te,allFormatters:ie,Options:oe,parse:fe,gpsOnlyOptions:Ae,gps:De,thumbnailOnlyOptions:Oe,thumbnail:xe,thumbnailUrl:ve,orientationOnlyOptions:Me,orientation:Re,rotations:Le,get rotateCanvas(){return e.rotateCanvas},get rotateCss(){return e.rotateCss},rotation:Ue});const dt=[\"xmp\",\"icc\",\"iptc\",\"tiff\"],pt=()=>{};async function gt(e,t,i){let n=i[e];return n.enabled=!0,n.parse=!0,A.get(e).parse(t,n)}let mt=h(\"fs\",(e=>e.promises));D.set(\"fs\",class extends Ne{async readWhole(){this.chunked=!1,this.fs=await mt;let e=await this.fs.readFile(this.input);this._swapBuffer(e)}async readChunked(){this.chunked=!0,this.fs=await mt,await this.open(),await this.readChunk(0,this.options.firstChunkSize)}async open(){void 0===this.fh&&(this.fh=await this.fs.open(this.input,\"r\"),this.size=(await this.fh.stat(this.input)).size)}async _readChunk(e,t){void 0===this.fh&&await this.open(),e+t>this.size&&(t=this.size-e);var i=this.subarray(e,t,!0);return await this.fh.read(i.dataView,0,t,e),i}async close(){if(this.fh){let e=this.fh;this.fh=void 0,await e.close()}}});D.set(\"base64\",class extends Ne{constructor(...e){super(...e),this.input=this.input.replace(/^data:([^;]+);base64,/gim,\"\"),this.size=this.input.length/4*3,this.input.endsWith(\"==\")?this.size-=2:this.input.endsWith(\"=\")&&(this.size-=1)}async _readChunk(e,t){let i,n,s=this.input;void 0===e?(e=0,i=0,n=0):(i=4*Math.floor(e/3),n=e-i/4*3),void 0===t&&(t=this.size);let a=e+t,l=i+4*Math.ceil(a/3);s=s.slice(i,l);let h=Math.min(t,this.size-e);if(o){let t=r.from(s,\"base64\").slice(n,n+h);return this.set(t,e,!0)}{let t=this.subarray(e,h,!0),i=atob(s),r=t.toUint8();for(let e=0;e<h;e++)r[e]=i.charCodeAt(n+e);return t}}});class St extends pe{static canHandle(e,t){return 18761===t||19789===t}extendOptions(e){let{ifd0:t,xmp:i,iptc:n,icc:s}=e;i.enabled&&t.deps.add(j),n.enabled&&t.deps.add(W),s.enabled&&t.deps.add(K),t.finalizeFilters()}async parse(){let{tiff:e,xmp:t,iptc:i,icc:n}=this.options;if(e.enabled||t.enabled||i.enabled||n.enabled){let e=Math.max(C(this.options),this.options.chunkSize);await this.file.ensureChunk(0,e),this.createParser(\"tiff\",this.file),this.parsers.tiff.parseHeader(),await this.parsers.tiff.parseIfd0Block(),this.adaptTiffPropAsSegment(\"xmp\"),this.adaptTiffPropAsSegment(\"iptc\"),this.adaptTiffPropAsSegment(\"icc\")}}adaptTiffPropAsSegment(e){if(this.parsers.tiff[e]){let t=this.parsers.tiff[e];this.injectSegment(e,t)}}}f(St,\"type\",\"tiff\"),T.set(\"tiff\",St);let Ct=h(\"zlib\");const yt=\"XML:com.adobe.xmp\",bt=\"ihdr\",Pt=\"iccp\",It=\"text\",kt=\"itxt\",wt=[bt,Pt,It,kt,\"exif\"];class Tt extends pe{constructor(...e){super(...e),f(this,\"catchError\",(e=>this.errors.push(e))),f(this,\"metaChunks\",[]),f(this,\"unknownChunks\",[])}static canHandle(e,t){return 35152===t&&2303741511===e.getUint32(0)&&218765834===e.getUint32(4)}async parse(){let{file:e}=this;await this.findPngChunksInRange(\"\u0089PNG\\r\\n\u001A\\n\".length,e.byteLength),await this.readSegments(this.metaChunks),this.findIhdr(),this.parseTextChunks(),await this.findExif().catch(this.catchError),await this.findXmp().catch(this.catchError),await this.findIcc().catch(this.catchError)}async findPngChunksInRange(e,t){let{file:i}=this;for(;e<t;){let t=i.getUint32(e),n=i.getUint32(e+4),s=i.getString(e+4,4).toLowerCase(),r=t+4+4+4,a={type:s,offset:e,length:r,start:e+4+4,size:t,marker:n};wt.includes(s)?this.metaChunks.push(a):this.unknownChunks.push(a),e+=r}}parseTextChunks(){let e=this.metaChunks.filter((e=>e.type===It));for(let t of e){let[e,i]=this.file.getString(t.start,t.size).split(\"\\0\");this.injectKeyValToIhdr(e,i)}}injectKeyValToIhdr(e,t){let i=this.parsers.ihdr;i&&i.raw.set(e,t)}findIhdr(){let e=this.metaChunks.find((e=>e.type===bt));e&&!1!==this.options.ihdr.enabled&&this.createParser(bt,e.chunk)}async findExif(){let e=this.metaChunks.find((e=>\"exif\"===e.type));e&&this.injectSegment(\"tiff\",e.chunk)}async findXmp(){let e=this.metaChunks.filter((e=>e.type===kt));for(let t of e){t.chunk.getString(0,yt.length)===yt&&this.injectSegment(\"xmp\",t.chunk)}}async findIcc(){let e=this.metaChunks.find((e=>e.type===Pt));if(!e)return;let{chunk:t}=e,i=t.getUint8Array(0,81),n=0;for(;n<80&&0!==i[n];)n++;let r=n+2,a=t.getString(0,n);if(this.injectKeyValToIhdr(\"ProfileName\",a),s){let e=await Ct,i=t.getUint8Array(r);i=e.inflateSync(i),this.injectSegment(\"icc\",i)}}}f(Tt,\"type\",\"png\"),T.set(\"png\",Tt),B(N,\"interop\",[[1,\"InteropIndex\"],[2,\"InteropVersion\"],[4096,\"RelatedImageFileFormat\"],[4097,\"RelatedImageWidth\"],[4098,\"RelatedImageHeight\"]]),E(N,\"ifd0\",[[11,\"ProcessingSoftware\"],[254,\"SubfileType\"],[255,\"OldSubfileType\"],[263,\"Thresholding\"],[264,\"CellWidth\"],[265,\"CellLength\"],[266,\"FillOrder\"],[269,\"DocumentName\"],[280,\"MinSampleValue\"],[281,\"MaxSampleValue\"],[285,\"PageName\"],[286,\"XPosition\"],[287,\"YPosition\"],[290,\"GrayResponseUnit\"],[297,\"PageNumber\"],[321,\"HalftoneHints\"],[322,\"TileWidth\"],[323,\"TileLength\"],[332,\"InkSet\"],[337,\"TargetPrinter\"],[18246,\"Rating\"],[18249,\"RatingPercent\"],[33550,\"PixelScale\"],[34264,\"ModelTransform\"],[34377,\"PhotoshopSettings\"],[50706,\"DNGVersion\"],[50707,\"DNGBackwardVersion\"],[50708,\"UniqueCameraModel\"],[50709,\"LocalizedCameraModel\"],[50736,\"DNGLensInfo\"],[50739,\"ShadowScale\"],[50740,\"DNGPrivateData\"],[33920,\"IntergraphMatrix\"],[33922,\"ModelTiePoint\"],[34118,\"SEMInfo\"],[34735,\"GeoTiffDirectory\"],[34736,\"GeoTiffDoubleParams\"],[34737,\"GeoTiffAsciiParams\"],[50341,\"PrintIM\"],[50721,\"ColorMatrix1\"],[50722,\"ColorMatrix2\"],[50723,\"CameraCalibration1\"],[50724,\"CameraCalibration2\"],[50725,\"ReductionMatrix1\"],[50726,\"ReductionMatrix2\"],[50727,\"AnalogBalance\"],[50728,\"AsShotNeutral\"],[50729,\"AsShotWhiteXY\"],[50730,\"BaselineExposure\"],[50731,\"BaselineNoise\"],[50732,\"BaselineSharpness\"],[50734,\"LinearResponseLimit\"],[50735,\"CameraSerialNumber\"],[50741,\"MakerNoteSafety\"],[50778,\"CalibrationIlluminant1\"],[50779,\"CalibrationIlluminant2\"],[50781,\"RawDataUniqueID\"],[50827,\"OriginalRawFileName\"],[50828,\"OriginalRawFileData\"],[50831,\"AsShotICCProfile\"],[50832,\"AsShotPreProfileMatrix\"],[50833,\"CurrentICCProfile\"],[50834,\"CurrentPreProfileMatrix\"],[50879,\"ColorimetricReference\"],[50885,\"SRawType\"],[50898,\"PanasonicTitle\"],[50899,\"PanasonicTitle2\"],[50931,\"CameraCalibrationSig\"],[50932,\"ProfileCalibrationSig\"],[50933,\"ProfileIFD\"],[50934,\"AsShotProfileName\"],[50936,\"ProfileName\"],[50937,\"ProfileHueSatMapDims\"],[50938,\"ProfileHueSatMapData1\"],[50939,\"ProfileHueSatMapData2\"],[50940,\"ProfileToneCurve\"],[50941,\"ProfileEmbedPolicy\"],[50942,\"ProfileCopyright\"],[50964,\"ForwardMatrix1\"],[50965,\"ForwardMatrix2\"],[50966,\"PreviewApplicationName\"],[50967,\"PreviewApplicationVersion\"],[50968,\"PreviewSettingsName\"],[50969,\"PreviewSettingsDigest\"],[50970,\"PreviewColorSpace\"],[50971,\"PreviewDateTime\"],[50972,\"RawImageDigest\"],[50973,\"OriginalRawFileDigest\"],[50981,\"ProfileLookTableDims\"],[50982,\"ProfileLookTableData\"],[51043,\"TimeCodes\"],[51044,\"FrameRate\"],[51058,\"TStop\"],[51081,\"ReelName\"],[51089,\"OriginalDefaultFinalSize\"],[51090,\"OriginalBestQualitySize\"],[51091,\"OriginalDefaultCropSize\"],[51105,\"CameraLabel\"],[51107,\"ProfileHueSatMapEncoding\"],[51108,\"ProfileLookTableEncoding\"],[51109,\"BaselineExposureOffset\"],[51110,\"DefaultBlackRender\"],[51111,\"NewRawImageDigest\"],[51112,\"RawToPreviewGain\"]]);let At=[[273,\"StripOffsets\"],[279,\"StripByteCounts\"],[288,\"FreeOffsets\"],[289,\"FreeByteCounts\"],[291,\"GrayResponseCurve\"],[292,\"T4Options\"],[293,\"T6Options\"],[300,\"ColorResponseUnit\"],[320,\"ColorMap\"],[324,\"TileOffsets\"],[325,\"TileByteCounts\"],[326,\"BadFaxLines\"],[327,\"CleanFaxData\"],[328,\"ConsecutiveBadFaxLines\"],[330,\"SubIFD\"],[333,\"InkNames\"],[334,\"NumberofInks\"],[336,\"DotRange\"],[338,\"ExtraSamples\"],[339,\"SampleFormat\"],[340,\"SMinSampleValue\"],[341,\"SMaxSampleValue\"],[342,\"TransferRange\"],[343,\"ClipPath\"],[344,\"XClipPathUnits\"],[345,\"YClipPathUnits\"],[346,\"Indexed\"],[347,\"JPEGTables\"],[351,\"OPIProxy\"],[400,\"GlobalParametersIFD\"],[401,\"ProfileType\"],[402,\"FaxProfile\"],[403,\"CodingMethods\"],[404,\"VersionYear\"],[405,\"ModeNumber\"],[433,\"Decode\"],[434,\"DefaultImageColor\"],[435,\"T82Options\"],[437,\"JPEGTables\"],[512,\"JPEGProc\"],[515,\"JPEGRestartInterval\"],[517,\"JPEGLosslessPredictors\"],[518,\"JPEGPointTransforms\"],[519,\"JPEGQTables\"],[520,\"JPEGDCTables\"],[521,\"JPEGACTables\"],[559,\"StripRowCounts\"],[999,\"USPTOMiscellaneous\"],[18247,\"XP_DIP_XML\"],[18248,\"StitchInfo\"],[28672,\"SonyRawFileType\"],[28688,\"SonyToneCurve\"],[28721,\"VignettingCorrection\"],[28722,\"VignettingCorrParams\"],[28724,\"ChromaticAberrationCorrection\"],[28725,\"ChromaticAberrationCorrParams\"],[28726,\"DistortionCorrection\"],[28727,\"DistortionCorrParams\"],[29895,\"SonyCropTopLeft\"],[29896,\"SonyCropSize\"],[32781,\"ImageID\"],[32931,\"WangTag1\"],[32932,\"WangAnnotation\"],[32933,\"WangTag3\"],[32934,\"WangTag4\"],[32953,\"ImageReferencePoints\"],[32954,\"RegionXformTackPoint\"],[32955,\"WarpQuadrilateral\"],[32956,\"AffineTransformMat\"],[32995,\"Matteing\"],[32996,\"DataType\"],[32997,\"ImageDepth\"],[32998,\"TileDepth\"],[33300,\"ImageFullWidth\"],[33301,\"ImageFullHeight\"],[33302,\"TextureFormat\"],[33303,\"WrapModes\"],[33304,\"FovCot\"],[33305,\"MatrixWorldToScreen\"],[33306,\"MatrixWorldToCamera\"],[33405,\"Model2\"],[33421,\"CFARepeatPatternDim\"],[33422,\"CFAPattern2\"],[33423,\"BatteryLevel\"],[33424,\"KodakIFD\"],[33445,\"MDFileTag\"],[33446,\"MDScalePixel\"],[33447,\"MDColorTable\"],[33448,\"MDLabName\"],[33449,\"MDSampleInfo\"],[33450,\"MDPrepDate\"],[33451,\"MDPrepTime\"],[33452,\"MDFileUnits\"],[33589,\"AdventScale\"],[33590,\"AdventRevision\"],[33628,\"UIC1Tag\"],[33629,\"UIC2Tag\"],[33630,\"UIC3Tag\"],[33631,\"UIC4Tag\"],[33918,\"IntergraphPacketData\"],[33919,\"IntergraphFlagRegisters\"],[33921,\"INGRReserved\"],[34016,\"Site\"],[34017,\"ColorSequence\"],[34018,\"IT8Header\"],[34019,\"RasterPadding\"],[34020,\"BitsPerRunLength\"],[34021,\"BitsPerExtendedRunLength\"],[34022,\"ColorTable\"],[34023,\"ImageColorIndicator\"],[34024,\"BackgroundColorIndicator\"],[34025,\"ImageColorValue\"],[34026,\"BackgroundColorValue\"],[34027,\"PixelIntensityRange\"],[34028,\"TransparencyIndicator\"],[34029,\"ColorCharacterization\"],[34030,\"HCUsage\"],[34031,\"TrapIndicator\"],[34032,\"CMYKEquivalent\"],[34152,\"AFCP_IPTC\"],[34232,\"PixelMagicJBIGOptions\"],[34263,\"JPLCartoIFD\"],[34306,\"WB_GRGBLevels\"],[34310,\"LeafData\"],[34687,\"TIFF_FXExtensions\"],[34688,\"MultiProfiles\"],[34689,\"SharedData\"],[34690,\"T88Options\"],[34732,\"ImageLayer\"],[34750,\"JBIGOptions\"],[34856,\"Opto-ElectricConvFactor\"],[34857,\"Interlace\"],[34908,\"FaxRecvParams\"],[34909,\"FaxSubAddress\"],[34910,\"FaxRecvTime\"],[34929,\"FedexEDR\"],[34954,\"LeafSubIFD\"],[37387,\"FlashEnergy\"],[37388,\"SpatialFrequencyResponse\"],[37389,\"Noise\"],[37390,\"FocalPlaneXResolution\"],[37391,\"FocalPlaneYResolution\"],[37392,\"FocalPlaneResolutionUnit\"],[37397,\"ExposureIndex\"],[37398,\"TIFF-EPStandardID\"],[37399,\"SensingMethod\"],[37434,\"CIP3DataFile\"],[37435,\"CIP3Sheet\"],[37436,\"CIP3Side\"],[37439,\"StoNits\"],[37679,\"MSDocumentText\"],[37680,\"MSPropertySetStorage\"],[37681,\"MSDocumentTextPosition\"],[37724,\"ImageSourceData\"],[40965,\"InteropIFD\"],[40976,\"SamsungRawPointersOffset\"],[40977,\"SamsungRawPointersLength\"],[41217,\"SamsungRawByteOrder\"],[41218,\"SamsungRawUnknown\"],[41484,\"SpatialFrequencyResponse\"],[41485,\"Noise\"],[41489,\"ImageNumber\"],[41490,\"SecurityClassification\"],[41491,\"ImageHistory\"],[41494,\"TIFF-EPStandardID\"],[41995,\"DeviceSettingDescription\"],[42112,\"GDALMetadata\"],[42113,\"GDALNoData\"],[44992,\"ExpandSoftware\"],[44993,\"ExpandLens\"],[44994,\"ExpandFilm\"],[44995,\"ExpandFilterLens\"],[44996,\"ExpandScanner\"],[44997,\"ExpandFlashLamp\"],[46275,\"HasselbladRawImage\"],[48129,\"PixelFormat\"],[48130,\"Transformation\"],[48131,\"Uncompressed\"],[48132,\"ImageType\"],[48256,\"ImageWidth\"],[48257,\"ImageHeight\"],[48258,\"WidthResolution\"],[48259,\"HeightResolution\"],[48320,\"ImageOffset\"],[48321,\"ImageByteCount\"],[48322,\"AlphaOffset\"],[48323,\"AlphaByteCount\"],[48324,\"ImageDataDiscard\"],[48325,\"AlphaDataDiscard\"],[50215,\"OceScanjobDesc\"],[50216,\"OceApplicationSelector\"],[50217,\"OceIDNumber\"],[50218,\"OceImageLogic\"],[50255,\"Annotations\"],[50459,\"HasselbladExif\"],[50547,\"OriginalFileName\"],[50560,\"USPTOOriginalContentType\"],[50656,\"CR2CFAPattern\"],[50710,\"CFAPlaneColor\"],[50711,\"CFALayout\"],[50712,\"LinearizationTable\"],[50713,\"BlackLevelRepeatDim\"],[50714,\"BlackLevel\"],[50715,\"BlackLevelDeltaH\"],[50716,\"BlackLevelDeltaV\"],[50717,\"WhiteLevel\"],[50718,\"DefaultScale\"],[50719,\"DefaultCropOrigin\"],[50720,\"DefaultCropSize\"],[50733,\"BayerGreenSplit\"],[50737,\"ChromaBlurRadius\"],[50738,\"AntiAliasStrength\"],[50752,\"RawImageSegmentation\"],[50780,\"BestQualityScale\"],[50784,\"AliasLayerMetadata\"],[50829,\"ActiveArea\"],[50830,\"MaskedAreas\"],[50935,\"NoiseReductionApplied\"],[50974,\"SubTileBlockSize\"],[50975,\"RowInterleaveFactor\"],[51008,\"OpcodeList1\"],[51009,\"OpcodeList2\"],[51022,\"OpcodeList3\"],[51041,\"NoiseProfile\"],[51114,\"CacheVersion\"],[51125,\"DefaultUserCrop\"],[51157,\"NikonNEFInfo\"],[65024,\"KdcIFD\"]];E(N,\"ifd0\",At),E(N,\"exif\",At),B(G,\"gps\",[[23,{M:\"Magnetic North\",T:\"True North\"}],[25,{K:\"Kilometers\",M:\"Miles\",N:\"Nautical Miles\"}]]);class Dt extends ge{static canHandle(e,t){return 224===e.getUint8(t+1)&&1246120262===e.getUint32(t+4)&&0===e.getUint8(t+8)}parse(){return this.parseTags(),this.translate(),this.output}parseTags(){this.raw=new Map([[0,this.chunk.getUint16(0)],[2,this.chunk.getUint8(2)],[3,this.chunk.getUint16(3)],[5,this.chunk.getUint16(5)],[7,this.chunk.getUint8(7)],[8,this.chunk.getUint8(8)]])}}f(Dt,\"type\",\"jfif\"),f(Dt,\"headerLength\",9),A.set(\"jfif\",Dt),B(N,\"jfif\",[[0,\"JFIFVersion\"],[2,\"ResolutionUnit\"],[3,\"XResolution\"],[5,\"YResolution\"],[7,\"ThumbnailWidth\"],[8,\"ThumbnailHeight\"]]);class Ot extends ge{parse(){return this.parseTags(),this.translate(),this.output}parseTags(){this.raw=new Map([[0,this.chunk.getUint32(0)],[4,this.chunk.getUint32(4)],[8,this.chunk.getUint8(8)],[9,this.chunk.getUint8(9)],[10,this.chunk.getUint8(10)],[11,this.chunk.getUint8(11)],[12,this.chunk.getUint8(12)],...Array.from(this.raw)])}}f(Ot,\"type\",\"ihdr\"),A.set(\"ihdr\",Ot),B(N,\"ihdr\",[[0,\"ImageWidth\"],[4,\"ImageHeight\"],[8,\"BitDepth\"],[9,\"ColorType\"],[10,\"Compression\"],[11,\"Filter\"],[12,\"Interlace\"]]),B(G,\"ihdr\",[[9,{0:\"Grayscale\",2:\"RGB\",3:\"Palette\",4:\"Grayscale with Alpha\",6:\"RGB with Alpha\",DEFAULT:\"Unknown\"}],[10,{0:\"Deflate/Inflate\",DEFAULT:\"Unknown\"}],[11,{0:\"Adaptive\",DEFAULT:\"Unknown\"}],[12,{0:\"Noninterlaced\",1:\"Adam7 Interlace\",DEFAULT:\"Unknown\"}]]);const xt=\"\\0\\0\\0\\0\";class vt extends ge{static canHandle(e,t){return 226===e.getUint8(t+1)&&1229144927===e.getUint32(t+4)}static findPosition(e,t){let i=super.findPosition(e,t);return i.chunkNumber=e.getUint8(t+16),i.chunkCount=e.getUint8(t+17),i.multiSegment=i.chunkCount>1,i}static handleMultiSegments(e){return function(e){let t=function(e){let t=e[0].constructor,i=0;for(let t of e)i+=t.length;let n=new t(i),s=0;for(let t of e)n.set(t,s),s+=t.length;return n}(e.map((e=>e.chunk.toUint8())));return new I(t)}(e)}parse(){return this.raw=new Map,this.parseHeader(),this.parseTags(),this.translate(),this.output}parseHeader(){let{raw:e}=this;this.chunk.byteLength<84&&m(\"ICC header is too short\");for(let[t,i]of Object.entries(Mt)){t=parseInt(t,10);let n=i(this.chunk,t);n!==xt&&e.set(t,n)}}parseTags(){let e,t,i,n,s,{raw:r}=this,a=this.chunk.getUint32(128),o=132,l=this.chunk.byteLength;for(;a--;){if(e=this.chunk.getString(o,4),t=this.chunk.getUint32(o+4),i=this.chunk.getUint32(o+8),n=this.chunk.getString(t,4),t+i>l)return void console.warn(\"reached the end of the first ICC chunk. Enable options.tiff.multiSegment to read all ICC segments.\");s=this.parseTag(n,t,i),void 0!==s&&s!==xt&&r.set(e,s),o+=12}}parseTag(e,t,i){switch(e){case\"desc\":return this.parseDesc(t);case\"mluc\":return this.parseMluc(t);case\"text\":return this.parseText(t,i);case\"sig \":return this.parseSig(t)}if(!(t+i>this.chunk.byteLength))return this.chunk.getUint8Array(t,i)}parseDesc(e){let t=this.chunk.getUint32(e+8)-1;return S(this.chunk.getString(e+12,t))}parseText(e,t){return S(this.chunk.getString(e+8,t-8))}parseSig(e){return S(this.chunk.getString(e+8,4))}parseMluc(e){let{chunk:t}=this,i=t.getUint32(e+8),n=t.getUint32(e+12),s=e+16,r=[];for(let a=0;a<i;a++){let i=t.getString(s+0,2),a=t.getString(s+2,2),o=t.getUint32(s+4),l=t.getUint32(s+8)+e,h=S(t.getUnicodeString(l,o));r.push({lang:i,country:a,text:h}),s+=n}return 1===i?r[0].text:r}translateValue(e,t){return\"string\"==typeof e?t[e]||t[e.toLowerCase()]||e:t[e]||e}}f(vt,\"type\",\"icc\"),f(vt,\"multiSegment\",!0),f(vt,\"headerLength\",18);const Mt={4:Rt,8:function(e,t){return[e.getUint8(t),e.getUint8(t+1)>>4,e.getUint8(t+1)%16].map((e=>e.toString(10))).join(\".\")},12:Rt,16:Rt,20:Rt,24:function(e,t){const i=e.getUint16(t),n=e.getUint16(t+2)-1,s=e.getUint16(t+4),r=e.getUint16(t+6),a=e.getUint16(t+8),o=e.getUint16(t+10);return new Date(Date.UTC(i,n,s,r,a,o))},36:Rt,40:Rt,48:Rt,52:Rt,64:(e,t)=>e.getUint32(t),80:Rt};function Rt(e,t){return S(e.getString(t,4))}A.set(\"icc\",vt),B(N,\"icc\",[[4,\"ProfileCMMType\"],[8,\"ProfileVersion\"],[12,\"ProfileClass\"],[16,\"ColorSpaceData\"],[20,\"ProfileConnectionSpace\"],[24,\"ProfileDateTime\"],[36,\"ProfileFileSignature\"],[40,\"PrimaryPlatform\"],[44,\"CMMFlags\"],[48,\"DeviceManufacturer\"],[52,\"DeviceModel\"],[56,\"DeviceAttributes\"],[64,\"RenderingIntent\"],[68,\"ConnectionSpaceIlluminant\"],[80,\"ProfileCreator\"],[84,\"ProfileID\"],[\"Header\",\"ProfileHeader\"],[\"MS00\",\"WCSProfiles\"],[\"bTRC\",\"BlueTRC\"],[\"bXYZ\",\"BlueMatrixColumn\"],[\"bfd\",\"UCRBG\"],[\"bkpt\",\"MediaBlackPoint\"],[\"calt\",\"CalibrationDateTime\"],[\"chad\",\"ChromaticAdaptation\"],[\"chrm\",\"Chromaticity\"],[\"ciis\",\"ColorimetricIntentImageState\"],[\"clot\",\"ColorantTableOut\"],[\"clro\",\"ColorantOrder\"],[\"clrt\",\"ColorantTable\"],[\"cprt\",\"ProfileCopyright\"],[\"crdi\",\"CRDInfo\"],[\"desc\",\"ProfileDescription\"],[\"devs\",\"DeviceSettings\"],[\"dmdd\",\"DeviceModelDesc\"],[\"dmnd\",\"DeviceMfgDesc\"],[\"dscm\",\"ProfileDescriptionML\"],[\"fpce\",\"FocalPlaneColorimetryEstimates\"],[\"gTRC\",\"GreenTRC\"],[\"gXYZ\",\"GreenMatrixColumn\"],[\"gamt\",\"Gamut\"],[\"kTRC\",\"GrayTRC\"],[\"lumi\",\"Luminance\"],[\"meas\",\"Measurement\"],[\"meta\",\"Metadata\"],[\"mmod\",\"MakeAndModel\"],[\"ncl2\",\"NamedColor2\"],[\"ncol\",\"NamedColor\"],[\"ndin\",\"NativeDisplayInfo\"],[\"pre0\",\"Preview0\"],[\"pre1\",\"Preview1\"],[\"pre2\",\"Preview2\"],[\"ps2i\",\"PS2RenderingIntent\"],[\"ps2s\",\"PostScript2CSA\"],[\"psd0\",\"PostScript2CRD0\"],[\"psd1\",\"PostScript2CRD1\"],[\"psd2\",\"PostScript2CRD2\"],[\"psd3\",\"PostScript2CRD3\"],[\"pseq\",\"ProfileSequenceDesc\"],[\"psid\",\"ProfileSequenceIdentifier\"],[\"psvm\",\"PS2CRDVMSize\"],[\"rTRC\",\"RedTRC\"],[\"rXYZ\",\"RedMatrixColumn\"],[\"resp\",\"OutputResponse\"],[\"rhoc\",\"ReflectionHardcopyOrigColorimetry\"],[\"rig0\",\"PerceptualRenderingIntentGamut\"],[\"rig2\",\"SaturationRenderingIntentGamut\"],[\"rpoc\",\"ReflectionPrintOutputColorimetry\"],[\"sape\",\"SceneAppearanceEstimates\"],[\"scoe\",\"SceneColorimetryEstimates\"],[\"scrd\",\"ScreeningDesc\"],[\"scrn\",\"Screening\"],[\"targ\",\"CharTarget\"],[\"tech\",\"Technology\"],[\"vcgt\",\"VideoCardGamma\"],[\"view\",\"ViewingConditions\"],[\"vued\",\"ViewingCondDesc\"],[\"wtpt\",\"MediaWhitePoint\"]]);const Lt={\"4d2p\":\"Erdt Systems\",AAMA:\"Aamazing Technologies\",ACER:\"Acer\",ACLT:\"Acolyte Color Research\",ACTI:\"Actix Sytems\",ADAR:\"Adara Technology\",ADBE:\"Adobe\",ADI:\"ADI Systems\",AGFA:\"Agfa Graphics\",ALMD:\"Alps Electric\",ALPS:\"Alps Electric\",ALWN:\"Alwan Color Expertise\",AMTI:\"Amiable Technologies\",AOC:\"AOC International\",APAG:\"Apago\",APPL:\"Apple Computer\",AST:\"AST\",\"AT&T\":\"AT&T\",BAEL:\"BARBIERI electronic\",BRCO:\"Barco NV\",BRKP:\"Breakpoint\",BROT:\"Brother\",BULL:\"Bull\",BUS:\"Bus Computer Systems\",\"C-IT\":\"C-Itoh\",CAMR:\"Intel\",CANO:\"Canon\",CARR:\"Carroll Touch\",CASI:\"Casio\",CBUS:\"Colorbus PL\",CEL:\"Crossfield\",CELx:\"Crossfield\",CGS:\"CGS Publishing Technologies International\",CHM:\"Rochester Robotics\",CIGL:\"Colour Imaging Group, London\",CITI:\"Citizen\",CL00:\"Candela\",CLIQ:\"Color IQ\",CMCO:\"Chromaco\",CMiX:\"CHROMiX\",COLO:\"Colorgraphic Communications\",COMP:\"Compaq\",COMp:\"Compeq/Focus Technology\",CONR:\"Conrac Display Products\",CORD:\"Cordata Technologies\",CPQ:\"Compaq\",CPRO:\"ColorPro\",CRN:\"Cornerstone\",CTX:\"CTX International\",CVIS:\"ColorVision\",CWC:\"Fujitsu Laboratories\",DARI:\"Darius Technology\",DATA:\"Dataproducts\",DCP:\"Dry Creek Photo\",DCRC:\"Digital Contents Resource Center, Chung-Ang University\",DELL:\"Dell Computer\",DIC:\"Dainippon Ink and Chemicals\",DICO:\"Diconix\",DIGI:\"Digital\",\"DL&C\":\"Digital Light & Color\",DPLG:\"Doppelganger\",DS:\"Dainippon Screen\",DSOL:\"DOOSOL\",DUPN:\"DuPont\",EPSO:\"Epson\",ESKO:\"Esko-Graphics\",ETRI:\"Electronics and Telecommunications Research Institute\",EVER:\"Everex Systems\",EXAC:\"ExactCODE\",Eizo:\"Eizo\",FALC:\"Falco Data Products\",FF:\"Fuji Photo Film\",FFEI:\"FujiFilm Electronic Imaging\",FNRD:\"Fnord Software\",FORA:\"Fora\",FORE:\"Forefront Technology\",FP:\"Fujitsu\",FPA:\"WayTech Development\",FUJI:\"Fujitsu\",FX:\"Fuji Xerox\",GCC:\"GCC Technologies\",GGSL:\"Global Graphics Software\",GMB:\"Gretagmacbeth\",GMG:\"GMG\",GOLD:\"GoldStar Technology\",GOOG:\"Google\",GPRT:\"Giantprint\",GTMB:\"Gretagmacbeth\",GVC:\"WayTech Development\",GW2K:\"Sony\",HCI:\"HCI\",HDM:\"Heidelberger Druckmaschinen\",HERM:\"Hermes\",HITA:\"Hitachi America\",HP:\"Hewlett-Packard\",HTC:\"Hitachi\",HiTi:\"HiTi Digital\",IBM:\"IBM\",IDNT:\"Scitex\",IEC:\"Hewlett-Packard\",IIYA:\"Iiyama North America\",IKEG:\"Ikegami Electronics\",IMAG:\"Image Systems\",IMI:\"Ingram Micro\",INTC:\"Intel\",INTL:\"N/A (INTL)\",INTR:\"Intra Electronics\",IOCO:\"Iocomm International Technology\",IPS:\"InfoPrint Solutions Company\",IRIS:\"Scitex\",ISL:\"Ichikawa Soft Laboratory\",ITNL:\"N/A (ITNL)\",IVM:\"IVM\",IWAT:\"Iwatsu Electric\",Idnt:\"Scitex\",Inca:\"Inca Digital Printers\",Iris:\"Scitex\",JPEG:\"Joint Photographic Experts Group\",JSFT:\"Jetsoft Development\",JVC:\"JVC Information Products\",KART:\"Scitex\",KFC:\"KFC Computek Components\",KLH:\"KLH Computers\",KMHD:\"Konica Minolta\",KNCA:\"Konica\",KODA:\"Kodak\",KYOC:\"Kyocera\",Kart:\"Scitex\",LCAG:\"Leica\",LCCD:\"Leeds Colour\",LDAK:\"Left Dakota\",LEAD:\"Leading Technology\",LEXM:\"Lexmark International\",LINK:\"Link Computer\",LINO:\"Linotronic\",LITE:\"Lite-On\",Leaf:\"Leaf\",Lino:\"Linotronic\",MAGC:\"Mag Computronic\",MAGI:\"MAG Innovision\",MANN:\"Mannesmann\",MICN:\"Micron Technology\",MICR:\"Microtek\",MICV:\"Microvitec\",MINO:\"Minolta\",MITS:\"Mitsubishi Electronics America\",MITs:\"Mitsuba\",MNLT:\"Minolta\",MODG:\"Modgraph\",MONI:\"Monitronix\",MONS:\"Monaco Systems\",MORS:\"Morse Technology\",MOTI:\"Motive Systems\",MSFT:\"Microsoft\",MUTO:\"MUTOH INDUSTRIES\",Mits:\"Mitsubishi Electric\",NANA:\"NANAO\",NEC:\"NEC\",NEXP:\"NexPress Solutions\",NISS:\"Nissei Sangyo America\",NKON:\"Nikon\",NONE:\"none\",OCE:\"Oce Technologies\",OCEC:\"OceColor\",OKI:\"Oki\",OKID:\"Okidata\",OKIP:\"Okidata\",OLIV:\"Olivetti\",OLYM:\"Olympus\",ONYX:\"Onyx Graphics\",OPTI:\"Optiquest\",PACK:\"Packard Bell\",PANA:\"Matsushita Electric Industrial\",PANT:\"Pantone\",PBN:\"Packard Bell\",PFU:\"PFU\",PHIL:\"Philips Consumer Electronics\",PNTX:\"HOYA\",POne:\"Phase One A/S\",PREM:\"Premier Computer Innovations\",PRIN:\"Princeton Graphic Systems\",PRIP:\"Princeton Publishing Labs\",QLUX:\"Hong Kong\",QMS:\"QMS\",QPCD:\"QPcard AB\",QUAD:\"QuadLaser\",QUME:\"Qume\",RADI:\"Radius\",RDDx:\"Integrated Color Solutions\",RDG:\"Roland DG\",REDM:\"REDMS Group\",RELI:\"Relisys\",RGMS:\"Rolf Gierling Multitools\",RICO:\"Ricoh\",RNLD:\"Edmund Ronald\",ROYA:\"Royal\",RPC:\"Ricoh Printing Systems\",RTL:\"Royal Information Electronics\",SAMP:\"Sampo\",SAMS:\"Samsung\",SANT:\"Jaime Santana Pomares\",SCIT:\"Scitex\",SCRN:\"Dainippon Screen\",SDP:\"Scitex\",SEC:\"Samsung\",SEIK:\"Seiko Instruments\",SEIk:\"Seikosha\",SGUY:\"ScanGuy.com\",SHAR:\"Sharp Laboratories\",SICC:\"International Color Consortium\",SONY:\"Sony\",SPCL:\"SpectraCal\",STAR:\"Star\",STC:\"Sampo Technology\",Scit:\"Scitex\",Sdp:\"Scitex\",Sony:\"Sony\",TALO:\"Talon Technology\",TAND:\"Tandy\",TATU:\"Tatung\",TAXA:\"TAXAN America\",TDS:\"Tokyo Denshi Sekei\",TECO:\"TECO Information Systems\",TEGR:\"Tegra\",TEKT:\"Tektronix\",TI:\"Texas Instruments\",TMKR:\"TypeMaker\",TOSB:\"Toshiba\",TOSH:\"Toshiba\",TOTK:\"TOTOKU ELECTRIC\",TRIU:\"Triumph\",TSBT:\"Toshiba\",TTX:\"TTX Computer Products\",TVM:\"TVM Professional Monitor\",TW:\"TW Casper\",ULSX:\"Ulead Systems\",UNIS:\"Unisys\",UTZF:\"Utz Fehlau & Sohn\",VARI:\"Varityper\",VIEW:\"Viewsonic\",VISL:\"Visual communication\",VIVO:\"Vivo Mobile Communication\",WANG:\"Wang\",WLBR:\"Wilbur Imaging\",WTG2:\"Ware To Go\",WYSE:\"WYSE Technology\",XERX:\"Xerox\",XRIT:\"X-Rite\",ZRAN:\"Zoran\",Zebr:\"Zebra Technologies\",appl:\"Apple Computer\",bICC:\"basICColor\",berg:\"bergdesign\",ceyd:\"Integrated Color Solutions\",clsp:\"MacDermid ColorSpan\",ds:\"Dainippon Screen\",dupn:\"DuPont\",ffei:\"FujiFilm Electronic Imaging\",flux:\"FluxData\",iris:\"Scitex\",kart:\"Scitex\",lcms:\"Little CMS\",lino:\"Linotronic\",none:\"none\",ob4d:\"Erdt Systems\",obic:\"Medigraph\",quby:\"Qubyx Sarl\",scit:\"Scitex\",scrn:\"Dainippon Screen\",sdp:\"Scitex\",siwi:\"SIWI GRAFIKA\",yxym:\"YxyMaster\"},Ut={scnr:\"Scanner\",mntr:\"Monitor\",prtr:\"Printer\",link:\"Device Link\",abst:\"Abstract\",spac:\"Color Space Conversion Profile\",nmcl:\"Named Color\",cenc:\"ColorEncodingSpace profile\",mid:\"MultiplexIdentification profile\",mlnk:\"MultiplexLink profile\",mvis:\"MultiplexVisualization profile\",nkpf:\"Nikon Input Device Profile (NON-STANDARD!)\"};B(G,\"icc\",[[4,Lt],[12,Ut],[40,Object.assign({},Lt,Ut)],[48,Lt],[80,Lt],[64,{0:\"Perceptual\",1:\"Relative Colorimetric\",2:\"Saturation\",3:\"Absolute Colorimetric\"}],[\"tech\",{amd:\"Active Matrix Display\",crt:\"Cathode Ray Tube Display\",kpcd:\"Photo CD\",pmd:\"Passive Matrix Display\",dcam:\"Digital Camera\",dcpj:\"Digital Cinema Projector\",dmpc:\"Digital Motion Picture Camera\",dsub:\"Dye Sublimation Printer\",epho:\"Electrophotographic Printer\",esta:\"Electrostatic Printer\",flex:\"Flexography\",fprn:\"Film Writer\",fscn:\"Film Scanner\",grav:\"Gravure\",ijet:\"Ink Jet Printer\",imgs:\"Photo Image Setter\",mpfr:\"Motion Picture Film Recorder\",mpfs:\"Motion Picture Film Scanner\",offs:\"Offset Lithography\",pjtv:\"Projection Television\",rpho:\"Photographic Paper Printer\",rscn:\"Reflective Scanner\",silk:\"Silkscreen\",twax:\"Thermal Wax Printer\",vidc:\"Video Camera\",vidm:\"Video Monitor\"}]]);class Ft extends ge{static canHandle(e,t,i){return 237===e.getUint8(t+1)&&\"Photoshop\"===e.getString(t+4,9)&&void 0!==this.containsIptc8bim(e,t,i)}static headerLength(e,t,i){let n,s=this.containsIptc8bim(e,t,i);if(void 0!==s)return n=e.getUint8(t+s+7),n%2!=0&&(n+=1),0===n&&(n=4),s+8+n}static containsIptc8bim(e,t,i){for(let n=0;n<i;n++)if(this.isIptcSegmentHead(e,t+n))return n}static isIptcSegmentHead(e,t){return 56===e.getUint8(t)&&943868237===e.getUint32(t)&&1028===e.getUint16(t+4)}parse(){let{raw:e}=this,t=this.chunk.byteLength-1,i=!1;for(let n=0;n<t;n++)if(28===this.chunk.getUint8(n)&&2===this.chunk.getUint8(n+1)){i=!0;let t=this.chunk.getUint16(n+3),s=this.chunk.getUint8(n+2),r=this.chunk.getLatin1String(n+5,t);e.set(s,this.pluralizeValue(e.get(s),r)),n+=4+t}else if(i)break;return this.translate(),this.output}pluralizeValue(e,t){return void 0!==e?e instanceof Array?(e.push(t),e):[e,t]:t}}f(Ft,\"type\",\"iptc\"),f(Ft,\"translateValues\",!1),f(Ft,\"reviveValues\",!1),A.set(\"iptc\",Ft),B(N,\"iptc\",[[0,\"ApplicationRecordVersion\"],[3,\"ObjectTypeReference\"],[4,\"ObjectAttributeReference\"],[5,\"ObjectName\"],[7,\"EditStatus\"],[8,\"EditorialUpdate\"],[10,\"Urgency\"],[12,\"SubjectReference\"],[15,\"Category\"],[20,\"SupplementalCategories\"],[22,\"FixtureIdentifier\"],[25,\"Keywords\"],[26,\"ContentLocationCode\"],[27,\"ContentLocationName\"],[30,\"ReleaseDate\"],[35,\"ReleaseTime\"],[37,\"ExpirationDate\"],[38,\"ExpirationTime\"],[40,\"SpecialInstructions\"],[42,\"ActionAdvised\"],[45,\"ReferenceService\"],[47,\"ReferenceDate\"],[50,\"ReferenceNumber\"],[55,\"DateCreated\"],[60,\"TimeCreated\"],[62,\"DigitalCreationDate\"],[63,\"DigitalCreationTime\"],[65,\"OriginatingProgram\"],[70,\"ProgramVersion\"],[75,\"ObjectCycle\"],[80,\"Byline\"],[85,\"BylineTitle\"],[90,\"City\"],[92,\"Sublocation\"],[95,\"State\"],[100,\"CountryCode\"],[101,\"Country\"],[103,\"OriginalTransmissionReference\"],[105,\"Headline\"],[110,\"Credit\"],[115,\"Source\"],[116,\"CopyrightNotice\"],[118,\"Contact\"],[120,\"Caption\"],[121,\"LocalCaption\"],[122,\"Writer\"],[125,\"RasterizedCaption\"],[130,\"ImageType\"],[131,\"ImageOrientation\"],[135,\"LanguageIdentifier\"],[150,\"AudioType\"],[151,\"AudioSamplingRate\"],[152,\"AudioSamplingResolution\"],[153,\"AudioDuration\"],[154,\"AudioOutcue\"],[184,\"JobID\"],[185,\"MasterDocumentID\"],[186,\"ShortDocumentID\"],[187,\"UniqueDocumentID\"],[188,\"OwnerID\"],[200,\"ObjectPreviewFileFormat\"],[201,\"ObjectPreviewFileVersion\"],[202,\"ObjectPreviewData\"],[221,\"Prefs\"],[225,\"ClassifyState\"],[228,\"SimilarityIndex\"],[230,\"DocumentNotes\"],[231,\"DocumentHistory\"],[232,\"ExifCameraInfo\"],[255,\"CatalogSets\"]]),B(G,\"iptc\",[[10,{0:\"0 (reserved)\",1:\"1 (most urgent)\",2:\"2\",3:\"3\",4:\"4\",5:\"5 (normal urgency)\",6:\"6\",7:\"7\",8:\"8 (least urgent)\",9:\"9 (user-defined priority)\"}],[75,{a:\"Morning\",b:\"Both Morning and Evening\",p:\"Evening\"}],[131,{L:\"Landscape\",P:\"Portrait\",S:\"Square\"}]]),e.Exifr=ce,e.Options=oe,e.allFormatters=ie,e.chunkedProps=$,e.createDictionary=B,e.default=ft,e.extendDictionary=E,e.fetchUrlAsArrayBuffer=L,e.fileParsers=T,e.fileReaders=D,e.gps=De,e.gpsOnlyOptions=Ae,e.inheritables=te,e.orientation=Re,e.orientationOnlyOptions=Me,e.otherSegments=J,e.parse=fe,e.readBlobAsArrayBuffer=U,e.rotation=Ue,e.rotations=Le,e.segmentParsers=A,e.segments=q,e.segmentsAndBlocks=Z,e.sidecar=async function(e,t,i){let n=new oe(t);n.chunked=!1,void 0===i&&\"string\"==typeof e&&(i=function(e){let t=e.toLowerCase().split(\".\").pop();if(function(e){return\"exif\"===e||\"tiff\"===e||\"tif\"===e}(t))return\"tiff\";if(dt.includes(t))return t}(e));let s=await x(e,n);if(i){if(dt.includes(i))return gt(i,s,n);m(\"Invalid segment type\")}else{if(function(e){let t=e.getString(0,50).trim();return t.includes(\"<?xpacket\")||t.includes(\"<x:\")}(s))return gt(\"xmp\",s,n);for(let[e]of A){if(!dt.includes(e))continue;let t=await gt(e,s,n).catch(pt);if(t)return t}m(\"Unknown file format\")}},e.tagKeys=N,e.tagRevivers=V,e.tagValues=G,e.thumbnail=xe,e.thumbnailOnlyOptions=Oe,e.thumbnailUrl=ve,e.tiffBlocks=Q,e.tiffExtractables=ee,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.handleWarning = exports.DecodeWarning = exports.DecodeError = void 0;\r\nclass DecodeError extends Error {\r\n    constructor(ctx, message, offset) {\r\n        super(message);\r\n        this.offset = offset;\r\n        this.partiallyDecodedImage = {\r\n            details: {\r\n                header: ctx.header,\r\n                footer: ctx.footer,\r\n                imageId: ctx.identificationField,\r\n                developerDirectory: ctx.developerDirectory,\r\n                extensionArea: ctx.extensionArea,\r\n            },\r\n            warnings: ctx.warnings\r\n        };\r\n    }\r\n}\r\nexports.DecodeError = DecodeError;\r\nclass DecodeWarning extends Error {\r\n    constructor(message, offset) {\r\n        super(message);\r\n        this.offset = offset;\r\n    }\r\n}\r\nexports.DecodeWarning = DecodeWarning;\r\nfunction handleWarning(ctx, warning) {\r\n    if (ctx.options.strictMode) {\r\n        throw warning;\r\n    }\r\n    ctx.warnings.push(warning);\r\n}\r\nexports.handleWarning = handleWarning;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ByteStreamReader = void 0;\r\nclass ByteStreamReader {\r\n    constructor(data, _le) {\r\n        this.data = data;\r\n        this._le = _le;\r\n        this.offset = 0;\r\n        this.view = new DataView(data.buffer, data.byteOffset, data.byteLength);\r\n    }\r\n    readUint8() {\r\n        return this.view.getUint8(this.offset++);\r\n    }\r\n    readUint16() {\r\n        const value = this.view.getUint16(this.offset, this._le);\r\n        this.offset += 2;\r\n        return value;\r\n    }\r\n    readUint32() {\r\n        const value = this.view.getUint32(this.offset, this._le);\r\n        this.offset += 4;\r\n        return value;\r\n    }\r\n}\r\nexports.ByteStreamReader = ByteStreamReader;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.readText = void 0;\r\nconst assert_js_1 = require(\"./assert.js\");\r\nfunction readText(ctx, textDecoder, maxLength, isCompressed) {\r\n    const bytes = [];\r\n    let current = 0;\r\n    let i = 0;\r\n    const startOffset = ctx.reader.offset;\r\n    for (; i < maxLength; i++) {\r\n        try {\r\n            current = ctx.reader.view.getUint8(ctx.reader.offset);\r\n        }\r\n        catch (e) {\r\n            if (e instanceof Error && e.message === 'Offset is outside the bounds of the DataView') {\r\n                (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning('EOF while reading text', ctx.reader.offset));\r\n            }\r\n            throw e;\r\n        }\r\n        if (!isCompressed && current === 0) {\r\n            break;\r\n        }\r\n        ctx.reader.offset++;\r\n        bytes.push(current);\r\n    }\r\n    ctx.reader.offset = startOffset + maxLength;\r\n    if (textDecoder) {\r\n        return textDecoder.decode(new Uint8Array(bytes));\r\n    }\r\n    return String.fromCharCode(...bytes);\r\n}\r\nexports.readText = readText;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.isValidBitDepth = exports.isValidColorMapDepth = exports.isValidImageType = void 0;\r\nfunction isValidImageType(imageType) {\r\n    return (imageType === 1 ||\r\n        imageType === 2 ||\r\n        imageType === 3 ||\r\n        imageType === 9 ||\r\n        imageType === 10 ||\r\n        imageType === 11);\r\n}\r\nexports.isValidImageType = isValidImageType;\r\nfunction isValidColorMapDepth(colorMapDepth) {\r\n    return (colorMapDepth === 15 ||\r\n        colorMapDepth === 16 ||\r\n        colorMapDepth === 24 ||\r\n        colorMapDepth === 32);\r\n}\r\nexports.isValidColorMapDepth = isValidColorMapDepth;\r\nfunction isValidBitDepth(bitDepth, imageType) {\r\n    if (imageType === 1 ||\r\n        imageType === 9) {\r\n        return bitDepth === 8;\r\n    }\r\n    if (imageType === 3 ||\r\n        imageType === 11) {\r\n        return bitDepth === 8 || bitDepth === 16;\r\n    }\r\n    return (bitDepth === 15 ||\r\n        bitDepth === 16 ||\r\n        bitDepth === 24 ||\r\n        bitDepth === 32);\r\n}\r\nexports.isValidBitDepth = isValidBitDepth;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.decodeTga = void 0;\r\nconst assert_js_1 = require(\"./assert.js\");\r\nconst byteStreamReader_js_1 = require(\"./byteStreamReader.js\");\r\nconst text_js_1 = require(\"./text.js\");\r\nconst validate_js_1 = require(\"./validate.js\");\r\nasync function decodeTga(data, options = {}) {\r\n    const initialCtx = {\r\n        reader: new byteStreamReader_js_1.ByteStreamReader(data, true),\r\n        hasAlpha: false,\r\n        ambiguousAlpha: false,\r\n        options,\r\n        warnings: []\r\n    };\r\n    const header = parseHeader(initialCtx);\r\n    const ctx = {\r\n        ...initialCtx,\r\n        header\r\n    };\r\n    ctx.identificationField = (0, text_js_1.readText)(ctx, undefined, ctx.header.idLength);\r\n    const colorMapOffset = ctx.reader.offset;\r\n    ctx.footer = parseFooter(ctx);\r\n    ctx.extensionArea = parseExtensionArea(ctx);\r\n    ctx.developerDirectory = parseDeveloperDirectory(ctx);\r\n    ctx.reader.offset = colorMapOffset;\r\n    if (ctx.header.colorMap?.type === 1) {\r\n        ctx.colorMap = parseColorMap(ctx, ctx.header.colorMap);\r\n    }\r\n    ctx.hasAlpha = ((ctx.colorMap && ctx.header.colorMap?.depth === 32) || ((ctx.header.attributeBitsPerPixel > 0 ||\r\n        ctx.header.bitDepth === 32) && (ctx.extensionArea === undefined ||\r\n        ctx.extensionArea.attributesType > 2)));\r\n    ctx.ambiguousAlpha = ctx.hasAlpha && ctx.header.attributeBitsPerPixel === 0;\r\n    ctx.image = parseImageData(ctx, ctx.reader.offset);\r\n    return {\r\n        image: ctx.image,\r\n        details: {\r\n            header: ctx.header,\r\n            imageId: ctx.identificationField,\r\n            footer: ctx.footer,\r\n            extensionArea: ctx.extensionArea,\r\n            developerDirectory: ctx.developerDirectory,\r\n        },\r\n        warnings: ctx.warnings\r\n    };\r\n}\r\nexports.decodeTga = decodeTga;\r\nfunction parseHeader(ctx) {\r\n    const idLength = ctx.reader.readUint8();\r\n    const colorMapTypeRaw = ctx.reader.readUint8();\r\n    let colorMapType;\r\n    if (colorMapTypeRaw === 0 ||\r\n        colorMapTypeRaw === 1) {\r\n        colorMapType = colorMapTypeRaw;\r\n    }\r\n    else {\r\n        (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning('Color map type unrecognized', ctx.reader.offset - 1));\r\n        colorMapType = 2;\r\n    }\r\n    const imageType = ctx.reader.readUint8();\r\n    if (!(0, validate_js_1.isValidImageType)(imageType)) {\r\n        throw new assert_js_1.DecodeError(ctx, `Invalid image type \"${imageType}\"`, ctx.reader.offset - 1);\r\n    }\r\n    if (colorMapType === 1 &&\r\n        imageType !== 1 &&\r\n        imageType !== 9) {\r\n        (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning(`Image type \"${imageType}\" cannot have a color map`, ctx.reader.offset - 2));\r\n    }\r\n    const colorMapOrigin = ctx.reader.readUint16();\r\n    const colorMapLength = ctx.reader.readUint16();\r\n    const colorMapDepth = ctx.reader.readUint8();\r\n    if (colorMapType === 1) {\r\n        if (colorMapOrigin >= colorMapLength) {\r\n            (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning(`Color map origin \"${colorMapOrigin}\" is greater than color map length \"${colorMapLength}\"`, ctx.reader.offset - 5));\r\n        }\r\n        if (!(0, validate_js_1.isValidColorMapDepth)(colorMapDepth)) {\r\n            throw new assert_js_1.DecodeError(ctx, `Unsupported color map bit depth \"${colorMapDepth}\"`, ctx.reader.offset - 1);\r\n        }\r\n    }\r\n    const xOrigin = ctx.reader.readUint16();\r\n    const yOrigin = ctx.reader.readUint16();\r\n    const width = ctx.reader.readUint16();\r\n    const height = ctx.reader.readUint16();\r\n    const bitDepth = ctx.reader.readUint8();\r\n    if (!(0, validate_js_1.isValidBitDepth)(bitDepth, imageType)) {\r\n        throw new assert_js_1.DecodeError(ctx, `Unsupported TGA bit depth \"${bitDepth}\" with image type ${imageType}`, 0x10);\r\n    }\r\n    const imageDescriptor = ctx.reader.readUint8();\r\n    const attributeBitsPerPixel = (imageDescriptor & 15) >> 0;\r\n    const screenOrigin = ((imageDescriptor & 48) >> 4);\r\n    return {\r\n        idLength,\r\n        colorMap: colorMapType !== 0 ? {\r\n            type: colorMapType,\r\n            depth: colorMapDepth,\r\n            length: colorMapLength,\r\n            origin: colorMapOrigin\r\n        } : undefined,\r\n        imageType,\r\n        origin: {\r\n            x: xOrigin,\r\n            y: yOrigin,\r\n        },\r\n        width,\r\n        height,\r\n        bitDepth,\r\n        imageDescriptor,\r\n        attributeBitsPerPixel,\r\n        screenOrigin\r\n    };\r\n}\r\nfunction parseColorMap(ctx, colorMap) {\r\n    const colorMapOffset = ctx.reader.offset;\r\n    const bytesPerEntry = Math.ceil(colorMap.depth / 8);\r\n    ctx.reader.offset += colorMap.length * bytesPerEntry;\r\n    let readPixel;\r\n    switch (colorMap.depth) {\r\n        case 15:\r\n            readPixel = readPixel15Bit;\r\n            break;\r\n        case 16:\r\n            if (ctx.hasAlpha) {\r\n                readPixel = readPixel16Bit;\r\n            }\r\n            else {\r\n                readPixel = readPixel15Bit;\r\n            }\r\n            break;\r\n        case 24:\r\n            readPixel = readPixel24Bit;\r\n            break;\r\n        case 32:\r\n            readPixel = readPixel32Bit;\r\n            break;\r\n    }\r\n    return (imageData, imageOffset, view, viewOffset) => {\r\n        const colorIndex = view.getUint8(viewOffset);\r\n        readPixel(imageData, imageOffset, ctx.reader.view, colorMapOffset + colorIndex * bytesPerEntry);\r\n        return 1;\r\n    };\r\n}\r\nfunction parseImageData(ctx, offset) {\r\n    const image = {\r\n        width: ctx.header.width,\r\n        height: ctx.header.height,\r\n        data: new Uint8Array(ctx.header.width * ctx.header.height * 4)\r\n    };\r\n    let readPixel;\r\n    if (ctx.colorMap) {\r\n        readPixel = ctx.colorMap;\r\n    }\r\n    else {\r\n        switch (ctx.header.bitDepth) {\r\n            case 8:\r\n                readPixel = readPixel8BitGreyscale;\r\n                break;\r\n            case 15:\r\n                readPixel = readPixel15Bit;\r\n                break;\r\n            case 16:\r\n                if (ctx.header.imageType === 11 || ctx.header.imageType === 3) {\r\n                    readPixel = readPixel16BitGreyscale;\r\n                }\r\n                else {\r\n                    if (ctx.hasAlpha) {\r\n                        readPixel = readPixel16Bit;\r\n                    }\r\n                    else {\r\n                        readPixel = readPixel15Bit;\r\n                    }\r\n                }\r\n                break;\r\n            case 24:\r\n                readPixel = readPixel24Bit;\r\n                break;\r\n            case 32:\r\n                if (ctx.hasAlpha) {\r\n                    readPixel = readPixel32Bit;\r\n                }\r\n                else {\r\n                    readPixel = readPixel32BitNoAlpha;\r\n                }\r\n                break;\r\n        }\r\n    }\r\n    let view = ctx.reader.view;\r\n    if (ctx.header.imageType & 8) {\r\n        const decoded = decodeRunLengthEncoding(ctx);\r\n        view = new DataView(decoded.buffer, decoded.byteOffset, decoded.length);\r\n        offset = 0;\r\n    }\r\n    if (ctx.header.screenOrigin === 2) {\r\n        let imageOffset = 0;\r\n        for (let y = 0; y < image.height; y++) {\r\n            for (let x = 0; x < image.width; x++) {\r\n                offset += readPixel(image.data, imageOffset, view, offset);\r\n                imageOffset += 4;\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        let imageOffset = 0;\r\n        for (let y = image.height - 1; y >= 0; y--) {\r\n            imageOffset = ctx.header.width * y * 4;\r\n            for (let x = 0; x < image.width; x++) {\r\n                offset += readPixel(image.data, imageOffset, view, offset);\r\n                imageOffset += 4;\r\n            }\r\n        }\r\n    }\r\n    if (ctx.ambiguousAlpha && !ctx.options.strictMode && ctx.options.detectAmbiguousAlphaChannel) {\r\n        let hasOpacity = false;\r\n        for (let i = 3; i < image.width * image.height * 4; i += 4) {\r\n            if (image.data[i] > 0) {\r\n                hasOpacity = true;\r\n            }\r\n        }\r\n        if (!hasOpacity) {\r\n            (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning('Image has ambiguous alpha and is fully transparent, alpha has been disabled', -1));\r\n            for (let i = 3; i < image.width * image.height * 4; i += 4) {\r\n                image.data[i] = 255;\r\n            }\r\n        }\r\n    }\r\n    return image;\r\n}\r\nfunction decodeRunLengthEncoding(ctx) {\r\n    const bytesPerPixel = Math.ceil(ctx.header.bitDepth / 8);\r\n    const result = new Uint8Array(ctx.header.width * ctx.header.height * bytesPerPixel);\r\n    let byte = 0;\r\n    let count = 0;\r\n    let i = 0, j = 0, k = 0;\r\n    while (i < result.length - 1) {\r\n        byte = ctx.reader.readUint8();\r\n        count = (byte & 127) + 1;\r\n        if (byte & 128) {\r\n            for (j = 0; j < bytesPerPixel; j++) {\r\n                byte = ctx.reader.readUint8();\r\n                for (k = 0; k < count; k++) {\r\n                    result[i + k * bytesPerPixel + j] = byte;\r\n                }\r\n            }\r\n            i += count * bytesPerPixel;\r\n        }\r\n        else {\r\n            count *= bytesPerPixel;\r\n            for (let k = 0; k < count; k++) {\r\n                result[i++] = ctx.reader.readUint8();\r\n            }\r\n        }\r\n    }\r\n    return result;\r\n}\r\nfunction readPixel8BitGreyscale(imageData, imageOffset, view, viewOffset) {\r\n    imageData[imageOffset] = view.getUint8(viewOffset);\r\n    imageData[imageOffset + 1] = imageData[imageOffset];\r\n    imageData[imageOffset + 2] = imageData[imageOffset];\r\n    imageData[imageOffset + 3] = 255;\r\n    return 1;\r\n}\r\nfunction readPixel16BitGreyscale(imageData, imageOffset, view, viewOffset) {\r\n    imageData[imageOffset] = view.getUint8(viewOffset);\r\n    imageData[imageOffset + 1] = imageData[imageOffset];\r\n    imageData[imageOffset + 2] = imageData[imageOffset];\r\n    imageData[imageOffset + 3] = view.getUint8(viewOffset + 1);\r\n    return 2;\r\n}\r\nlet currentValue = 0;\r\nfunction readPixel15Bit(imageData, imageOffset, view, viewOffset) {\r\n    currentValue = view.getUint16(viewOffset, true);\r\n    imageData[imageOffset] = currentValue >> 10 & 0x1f;\r\n    imageData[imageOffset + 1] = currentValue >> 5 & 0x1f;\r\n    imageData[imageOffset + 2] = currentValue & 0x1f;\r\n    imageData[imageOffset] = (imageData[imageOffset] << 3) | (imageData[imageOffset] >> 2);\r\n    imageData[imageOffset + 1] = (imageData[imageOffset + 1] << 3) | (imageData[imageOffset + 1] >> 2);\r\n    imageData[imageOffset + 2] = (imageData[imageOffset + 2] << 3) | (imageData[imageOffset + 2] >> 2);\r\n    imageData[imageOffset + 3] = 255;\r\n    return 2;\r\n}\r\nfunction readPixel16Bit(imageData, imageOffset, view, viewOffset) {\r\n    currentValue = view.getUint16(viewOffset, true);\r\n    imageData[imageOffset] = currentValue >> 10 & 0x1f;\r\n    imageData[imageOffset + 1] = currentValue >> 5 & 0x1f;\r\n    imageData[imageOffset + 2] = currentValue & 0x1f;\r\n    imageData[imageOffset] = (imageData[imageOffset] << 3) | (imageData[imageOffset] >> 2);\r\n    imageData[imageOffset + 1] = (imageData[imageOffset + 1] << 3) | (imageData[imageOffset + 1] >> 2);\r\n    imageData[imageOffset + 2] = (imageData[imageOffset + 2] << 3) | (imageData[imageOffset + 2] >> 2);\r\n    imageData[imageOffset + 3] = (currentValue & 0x8000) ? 0 : 255;\r\n    return 2;\r\n}\r\nfunction readPixel24Bit(imageData, imageOffset, view, viewOffset) {\r\n    imageData[imageOffset] = view.getUint8(viewOffset + 2);\r\n    imageData[imageOffset + 1] = view.getUint8(viewOffset + 1);\r\n    imageData[imageOffset + 2] = view.getUint8(viewOffset);\r\n    imageData[imageOffset + 3] = 255;\r\n    return 3;\r\n}\r\nfunction readPixel32Bit(imageData, imageOffset, view, viewOffset) {\r\n    imageData[imageOffset] = view.getUint8(viewOffset + 2);\r\n    imageData[imageOffset + 1] = view.getUint8(viewOffset + 1);\r\n    imageData[imageOffset + 2] = view.getUint8(viewOffset);\r\n    imageData[imageOffset + 3] = view.getUint8(viewOffset + 3);\r\n    return 4;\r\n}\r\nfunction readPixel32BitNoAlpha(imageData, imageOffset, view, viewOffset) {\r\n    imageData[imageOffset] = view.getUint8(viewOffset + 2);\r\n    imageData[imageOffset + 1] = view.getUint8(viewOffset + 1);\r\n    imageData[imageOffset + 2] = view.getUint8(viewOffset);\r\n    imageData[imageOffset + 3] = 255;\r\n    return 4;\r\n}\r\nfunction parseExtensionArea(ctx) {\r\n    if (ctx.footer?.extensionAreaOffset === undefined || ctx.footer.extensionAreaOffset === 0) {\r\n        return undefined;\r\n    }\r\n    ctx.reader.offset = ctx.footer.extensionAreaOffset;\r\n    const extensionSize = ctx.reader.readUint16();\r\n    if (extensionSize !== 495) {\r\n        (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning('TGA file is a version other than v2', ctx.reader.offset - 2));\r\n    }\r\n    const authorName = (0, text_js_1.readText)(ctx, undefined, 41).trim() || undefined;\r\n    const authorComments = (0, text_js_1.readText)(ctx, undefined, 324).trim() || undefined;\r\n    const dateTimestamp = readDateTimestamp(ctx);\r\n    const jobName = (0, text_js_1.readText)(ctx, undefined, 41).trim() || undefined;\r\n    const jobTime = readTimestamp(ctx);\r\n    const softwareId = (0, text_js_1.readText)(ctx, undefined, 41).trim() || undefined;\r\n    const softwareVersionNumber = ctx.reader.readUint8() / 100;\r\n    const softwareVersionLetter = (0, text_js_1.readText)(ctx, undefined, 2);\r\n    let softwareVersion;\r\n    if (softwareVersionNumber === 0 && (softwareVersionLetter === ' ' || softwareVersionLetter.length === 0)) {\r\n        softwareVersion = undefined;\r\n    }\r\n    else {\r\n        softwareVersion = `${softwareVersionNumber}${softwareVersionLetter}`;\r\n    }\r\n    const keyColorA = ctx.reader.readUint8();\r\n    const keyColorR = ctx.reader.readUint8();\r\n    const keyColorG = ctx.reader.readUint8();\r\n    const keyColorB = ctx.reader.readUint8();\r\n    let keyColor;\r\n    if (keyColorA === 0 && keyColorR === 0 && keyColorG === 0 && keyColorB === 0) {\r\n        keyColor = undefined;\r\n    }\r\n    else {\r\n        keyColor = new Uint8Array([keyColorR, keyColorG, keyColorB, keyColorA]);\r\n    }\r\n    const aspectRatioNumerator = ctx.reader.readUint16();\r\n    const aspectRatioDenominator = ctx.reader.readUint16();\r\n    let aspectRatio;\r\n    if (aspectRatioDenominator === 0) {\r\n        aspectRatio = undefined;\r\n    }\r\n    else {\r\n        aspectRatio = aspectRatioNumerator / aspectRatioDenominator;\r\n    }\r\n    const gammaNumerator = ctx.reader.readUint16();\r\n    const gammaDenominator = ctx.reader.readUint16();\r\n    let gamma;\r\n    if (gammaDenominator === 0) {\r\n        gamma = undefined;\r\n    }\r\n    else {\r\n        gamma = gammaNumerator / gammaDenominator;\r\n    }\r\n    const colorCorrectionOffset = ctx.reader.readUint32();\r\n    const postageStampOffset = ctx.reader.readUint32();\r\n    const scanLineOffset = ctx.reader.readUint32();\r\n    const attributesType = ctx.reader.readUint8();\r\n    return {\r\n        extensionSize,\r\n        authorName,\r\n        authorComments,\r\n        dateTimestamp,\r\n        jobName,\r\n        jobTime,\r\n        softwareId,\r\n        softwareVersion,\r\n        keyColor,\r\n        aspectRatio,\r\n        gamma,\r\n        colorCorrectionOffset,\r\n        postageStampOffset,\r\n        scanLineOffset,\r\n        attributesType,\r\n    };\r\n}\r\nfunction parseDeveloperDirectory(ctx) {\r\n    if (ctx.footer?.developerDirectoryOffset === undefined || ctx.footer.developerDirectoryOffset === 0) {\r\n        return [];\r\n    }\r\n    ctx.reader.offset = ctx.footer.developerDirectoryOffset;\r\n    const tagCount = ctx.reader.readUint16();\r\n    const directory = [];\r\n    for (let i = 0; i < tagCount; i++) {\r\n        const tag = ctx.reader.readUint16();\r\n        const offset = ctx.reader.readUint32();\r\n        const length = ctx.reader.readUint32();\r\n        directory.push({ tag, offset, length });\r\n    }\r\n    return directory;\r\n}\r\nfunction readDateTimestamp(ctx) {\r\n    const month = ctx.reader.readUint16();\r\n    const day = ctx.reader.readUint16();\r\n    const year = ctx.reader.readUint16();\r\n    const hour = ctx.reader.readUint16();\r\n    const minute = ctx.reader.readUint16();\r\n    const second = ctx.reader.readUint16();\r\n    if (month === 0 && day === 0 && year === 0 && hour === 0 && minute === 0 && second === 0) {\r\n        return undefined;\r\n    }\r\n    return new Date(year, month, day, hour, minute, second);\r\n}\r\nfunction readTimestamp(ctx) {\r\n    const hours = ctx.reader.readUint16();\r\n    const minutes = ctx.reader.readUint16();\r\n    const seconds = ctx.reader.readUint16();\r\n    if (hours === 0 && minutes === 0 && seconds === 0) {\r\n        return undefined;\r\n    }\r\n    return { hours, minutes, seconds };\r\n}\r\nfunction parseFooter(ctx) {\r\n    ctx.reader.offset = ctx.reader.view.byteLength - 26 + 8;\r\n    const signature = (0, text_js_1.readText)(ctx, undefined, 17);\r\n    if (signature !== 'TRUEVISION-XFILE.' || ctx.reader.readUint8() !== 0) {\r\n        return {\r\n            extensionAreaOffset: 0,\r\n            developerDirectoryOffset: 0\r\n        };\r\n    }\r\n    ctx.reader.offset = ctx.reader.view.byteLength - 26;\r\n    let extensionAreaOffset = ctx.reader.readUint32();\r\n    if (extensionAreaOffset >= ctx.reader.view.byteLength) {\r\n        (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning(`Extension area offset \"${extensionAreaOffset}\" is invalid`, ctx.reader.offset - 4));\r\n        extensionAreaOffset = 0;\r\n    }\r\n    let developerDirectoryOffset = ctx.reader.readUint32();\r\n    if (developerDirectoryOffset >= ctx.reader.view.byteLength) {\r\n        (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning(`Developer directory offset \"${developerDirectoryOffset}\" is invalid`, ctx.reader.offset - 4));\r\n        developerDirectoryOffset = 0;\r\n    }\r\n    return {\r\n        extensionAreaOffset,\r\n        developerDirectoryOffset\r\n    };\r\n}\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.decodeTga = exports.DecodeWarning = exports.DecodeError = void 0;\r\nvar assert_js_1 = require(\"../decode/assert.js\");\r\nObject.defineProperty(exports, \"DecodeError\", { enumerable: true, get: function () { return assert_js_1.DecodeError; } });\r\nObject.defineProperty(exports, \"DecodeWarning\", { enumerable: true, get: function () { return assert_js_1.DecodeWarning; } });\r\nasync function decodeTga(data, options) {\r\n    return (await Promise.resolve().then(() => require('../decode/decoder.js'))).decodeTga(data, options);\r\n}\r\nexports.decodeTga = decodeTga;\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n// ============================================================================\r\n// AMBIENT TYPE DECLARATIONS FOR BROWSER APIS\r\n// ============================================================================\r\n// These declarations allow TypeScript to understand browser APIs when compiling\r\n// for non-DOM environments (VS Code extension, Node.js). The runtime code uses\r\n// typeof checks to ensure these APIs are only called in browser contexts.\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\ndeclare const createImageBitmap: ((blob: Blob) => Promise<ImageBitmap>) | undefined;\r\ndeclare const document: { createElement(tagName: \"canvas\"): HTMLCanvasElement } | undefined;\r\n\r\ninterface ImageBitmap {\r\n  readonly width: number;\r\n  readonly height: number;\r\n  close(): void;\r\n}\r\n\r\ninterface ImageData {\r\n  readonly data: Uint8ClampedArray;\r\n  readonly width: number;\r\n  readonly height: number;\r\n}\r\n\r\ninterface CanvasRenderingContext2D {\r\n  drawImage(image: ImageBitmap, dx: number, dy: number): void;\r\n  getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;\r\n  createImageData(sw: number, sh: number): ImageData;\r\n  putImageData(imageData: ImageData, dx: number, dy: number): void;\r\n}\r\n\r\ninterface HTMLCanvasElement {\r\n  width: number;\r\n  height: number;\r\n  getContext(contextId: \"2d\"): CanvasRenderingContext2D | null;\r\n  toBlob(callback: (blob: Blob | null) => void, type?: string, quality?: number): void;\r\n}\r\n\r\ninterface OffscreenCanvasRenderingContext2D {\r\n  drawImage(image: ImageBitmap, dx: number, dy: number): void;\r\n  getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;\r\n  createImageData(sw: number, sh: number): ImageData;\r\n  putImageData(imageData: ImageData, dx: number, dy: number): void;\r\n}\r\n\r\ndeclare class OffscreenCanvas {\r\n  constructor(width: number, height: number);\r\n  width: number;\r\n  height: number;\r\n  getContext(contextId: \"2d\"): OffscreenCanvasRenderingContext2D | null;\r\n  convertToBlob(options?: { type?: string; quality?: number }): Promise<Blob>;\r\n}\r\n/* eslint-enable @typescript-eslint/no-explicit-any */\r\n\r\n/**\r\n * ImageCodec - Unified cross-platform image encoding/decoding utilities\r\n *\r\n * ARCHITECTURE NOTES:\r\n * ------------------\r\n * This module consolidates all image encoding/decoding logic that was previously\r\n * scattered across multiple files:\r\n *\r\n * - TGA decoding: Previously in TextureDefinition, Model2DRenderer, project.worker,\r\n *   ImageManager, ModelMeshFactory\r\n * - PNG decoding: Previously in Model2DRenderer, TextureDefinition, project.worker\r\n * - PNG encoding: Previously in ImageGenerationUtilities\r\n *\r\n * PLATFORM SUPPORT:\r\n * -----------------\r\n * This module supports three environments:\r\n *\r\n * 1. **Node.js** (CLI, server, VS Code extension host):\r\n *    - Uses pngjs for fast synchronous PNG encoding/decoding\r\n *    - Uses zlib for compression\r\n *    - Uses Buffer for binary data\r\n *    - Import: `import ImageCodec from \"../core/ImageCodec\"`\r\n *\r\n * 2. **Browser main thread** (web app, Electron renderer):\r\n *    - Uses Canvas/HTMLImageElement for PNG decoding\r\n *    - Uses createImageBitmap + canvas.toDataURL for encoding\r\n *    - Falls back to Pako for zlib if available\r\n *\r\n * 3. **Web Worker** (project.worker.ts):\r\n *    - Uses OffscreenCanvas + createImageBitmap\r\n *    - No DOM access\r\n *\r\n * ENVIRONMENT DETECTION:\r\n * ----------------------\r\n * The module auto-detects the environment using:\r\n * - `typeof Buffer !== \"undefined\"` for Node.js\r\n * - `typeof createImageBitmap !== \"undefined\"` for browser/worker\r\n * - `typeof OffscreenCanvas !== \"undefined\"` for web worker\r\n * - `typeof document !== \"undefined\"` for browser main thread\r\n *\r\n * For explicit control, use CreatorToolsHost.isNodeJs.\r\n *\r\n * USAGE:\r\n * ------\r\n * ```typescript\r\n * import ImageCodec, { IDecodedImage } from \"../core/ImageCodec\";\r\n *\r\n * // Decode any image type (auto-detects format)\r\n * const decoded = await ImageCodec.decodeAuto(data);\r\n *\r\n * // Decode specific format\r\n * const png = await ImageCodec.decodePng(data);\r\n * const tga = await ImageCodec.decodeTga(data);\r\n *\r\n * // Encode to PNG\r\n * const pngBytes = await ImageCodec.encodeToPng(pixels, width, height);\r\n *\r\n * // Convert TGA to PNG\r\n * const pngBytes = await ImageCodec.tgaToPng(tgaData);\r\n *\r\n * // Check format\r\n * if (ImageCodec.isTgaData(data)) { ... }\r\n *\r\n * // Get data URL\r\n * const dataUrl = ImageCodec.toDataUrl(pngBytes, \"image/png\");\r\n * ```\r\n *\r\n * NODE.JS ONLY USAGE:\r\n * -------------------\r\n * For Node.js-only code (tests, CLI), you can import ImageCodecNode directly\r\n * for synchronous operations:\r\n *\r\n * ```typescript\r\n * import ImageCodecNode from \"../local/ImageCodecNode\";\r\n * const decoded = ImageCodecNode.decodePng(data); // synchronous\r\n * ```\r\n *\r\n * Related files:\r\n * - ImageCodecNode.ts - Node.js-specific implementation (pngjs, zlib)\r\n * - ImageGenerationUtilities.ts - Higher-level image generation (SVG\u2192PNG, atlas)\r\n * - TextureDefinition.ts - Minecraft texture file wrapper\r\n * - Model2DRenderer.ts - 2D model rendering\r\n * - ModelMeshFactory.ts - 3D mesh creation\r\n */\r\n\r\nimport Log from \"./Log\";\r\nimport Utilities from \"./Utilities\";\r\nimport { decodeTga as decodeTgaCodec } from \"@lunapaint/tga-codec\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\n\r\n/**\r\n * Decoded image pixel data.\r\n * All decoders return this common format.\r\n */\r\nexport interface IDecodedImage {\r\n  /** Image width in pixels */\r\n  width: number;\r\n  /** Image height in pixels */\r\n  height: number;\r\n  /** RGBA pixel data (4 bytes per pixel: R, G, B, A) */\r\n  pixels: Uint8Array;\r\n}\r\n\r\n/**\r\n * Supported image formats for decoding\r\n */\r\nexport type ImageFormat = \"png\" | \"tga\" | \"jpg\" | \"jpeg\";\r\n\r\n/**\r\n * Check if we're in a browser environment with canvas support.\r\n */\r\nfunction isBrowserEnvironment(): boolean {\r\n  return typeof createImageBitmap !== \"undefined\" || typeof document !== \"undefined\";\r\n}\r\n\r\n/**\r\n * Check if we're in a web worker (OffscreenCanvas available, no document).\r\n */\r\nfunction isWebWorkerEnvironment(): boolean {\r\n  return typeof OffscreenCanvas !== \"undefined\" && typeof document === \"undefined\";\r\n}\r\n\r\n/**\r\n * Unified image encoding/decoding utilities.\r\n *\r\n * This is the main entry point for all image operations.\r\n * It automatically selects the best implementation for the current environment.\r\n */\r\nexport default class ImageCodec {\r\n  // Cached CRC32 table for PNG encoding (browser fallback)\r\n  private static _crc32Table: Uint32Array | undefined;\r\n\r\n  // ============================================================================\r\n  // TGA DECODING\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode TGA image data to RGBA pixels.\r\n   * Works in all environments (Node.js, browser, web worker).\r\n   *\r\n   * Uses @lunapaint/tga-codec which handles:\r\n   * - Uncompressed true-color (type 2)\r\n   * - Uncompressed grayscale (type 3)\r\n   * - RLE compressed (types 9, 10, 11)\r\n   * - Various bit depths (8, 16, 24, 32)\r\n   *\r\n   * @param data Raw TGA file bytes\r\n   * @returns Decoded image with RGBA pixels, or undefined if decoding fails\r\n   */\r\n  static async decodeTga(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    try {\r\n      // Use the statically imported decodeTga function\r\n      // This ensures the codec is bundled and works in web workers\r\n      const decoded = await decodeTgaCodec(data);\r\n      return {\r\n        width: decoded.image.width,\r\n        height: decoded.image.height,\r\n        pixels: new Uint8Array(decoded.image.data),\r\n      };\r\n    } catch (e) {\r\n      Log.debug(`TGA decode failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // PNG DECODING\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode PNG image data to RGBA pixels.\r\n   * Automatically uses the best decoder for the current environment.\r\n   *\r\n   * - Node.js: Uses pngjs (synchronous, fast)\r\n   * - Browser: Uses createImageBitmap + Canvas (async)\r\n   * - Web Worker: Uses createImageBitmap + OffscreenCanvas (async)\r\n   *\r\n   * @param data Raw PNG file bytes\r\n   * @returns Decoded image with RGBA pixels, or undefined if decoding fails\r\n   */\r\n  static async decodePng(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    // Try Node.js decoder first via platform thunk (faster, synchronous)\r\n    if (CreatorToolsHost.decodePng) {\r\n      try {\r\n        const result = CreatorToolsHost.decodePng(data);\r\n        if (result) return result;\r\n      } catch (e) {\r\n        Log.debug(`Node PNG decode failed, falling back to browser: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Fall back to browser decoder\r\n    return this.decodePngBrowser(data);\r\n  }\r\n\r\n  /**\r\n   * Decode PNG using browser APIs (createImageBitmap + Canvas).\r\n   * Works in browser main thread and web workers.\r\n   *\r\n   * @param data Raw PNG file bytes\r\n   * @returns Decoded image, or undefined if not in browser or decoding fails\r\n   */\r\n  static async decodePngBrowser(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    if (typeof createImageBitmap === \"undefined\") {\r\n      return undefined;\r\n    }\r\n\r\n    try {\r\n      const blob = new Blob([data], { type: \"image/png\" });\r\n      const imageBitmap = await createImageBitmap(blob);\r\n\r\n      let canvas: OffscreenCanvas | HTMLCanvasElement;\r\n      let ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D | null;\r\n\r\n      if (isWebWorkerEnvironment()) {\r\n        canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height);\r\n        ctx = canvas.getContext(\"2d\") as OffscreenCanvasRenderingContext2D | null;\r\n      } else if (typeof document !== \"undefined\") {\r\n        canvas = document.createElement(\"canvas\");\r\n        canvas.width = imageBitmap.width;\r\n        canvas.height = imageBitmap.height;\r\n        ctx = canvas.getContext(\"2d\");\r\n      } else {\r\n        return undefined;\r\n      }\r\n\r\n      if (!ctx) return undefined;\r\n\r\n      ctx.drawImage(imageBitmap, 0, 0);\r\n      const imageData = ctx.getImageData(0, 0, imageBitmap.width, imageBitmap.height);\r\n\r\n      return {\r\n        width: imageBitmap.width,\r\n        height: imageBitmap.height,\r\n        pixels: new Uint8Array(imageData.data),\r\n      };\r\n    } catch (e) {\r\n      Log.debug(`Browser PNG decode failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // JPEG DECODING\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode JPEG image data to RGBA pixels.\r\n   * Only works in browser environments (uses createImageBitmap).\r\n   *\r\n   * @param data Raw JPEG file bytes\r\n   * @returns Decoded image with RGBA pixels, or undefined if decoding fails\r\n   */\r\n  static async decodeJpeg(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    if (!isBrowserEnvironment()) {\r\n      Log.debug(\"JPEG decoding requires browser environment\");\r\n      return undefined;\r\n    }\r\n\r\n    try {\r\n      const blob = new Blob([data], { type: \"image/jpeg\" });\r\n      if (typeof createImageBitmap === \"undefined\") {\r\n        return undefined;\r\n      }\r\n      const imageBitmap = await createImageBitmap(blob);\r\n\r\n      let canvas: OffscreenCanvas | HTMLCanvasElement;\r\n      let ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D | null;\r\n\r\n      if (isWebWorkerEnvironment()) {\r\n        canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height);\r\n        ctx = canvas.getContext(\"2d\") as OffscreenCanvasRenderingContext2D | null;\r\n      } else if (typeof document !== \"undefined\") {\r\n        canvas = document.createElement(\"canvas\");\r\n        canvas.width = imageBitmap.width;\r\n        canvas.height = imageBitmap.height;\r\n        ctx = canvas.getContext(\"2d\");\r\n      } else {\r\n        return undefined;\r\n      }\r\n\r\n      if (!ctx) return undefined;\r\n\r\n      ctx.drawImage(imageBitmap, 0, 0);\r\n      const imageData = ctx.getImageData(0, 0, imageBitmap.width, imageBitmap.height);\r\n\r\n      return {\r\n        width: imageBitmap.width,\r\n        height: imageBitmap.height,\r\n        pixels: new Uint8Array(imageData.data),\r\n      };\r\n    } catch (e) {\r\n      Log.debug(`JPEG decode failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // UNIFIED DECODING\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode image data to RGBA pixels based on specified format.\r\n   *\r\n   * @param data Raw image file bytes\r\n   * @param format File format (\"png\", \"tga\", \"jpg\", \"jpeg\")\r\n   * @returns Decoded image, or undefined if decoding fails\r\n   */\r\n  static async decode(data: Uint8Array, format: ImageFormat | string): Promise<IDecodedImage | undefined> {\r\n    const normalizedFormat = format.toLowerCase().replace(\".\", \"\") as ImageFormat;\r\n\r\n    switch (normalizedFormat) {\r\n      case \"tga\":\r\n        return this.decodeTga(data);\r\n      case \"png\":\r\n        return this.decodePng(data);\r\n      case \"jpg\":\r\n      case \"jpeg\":\r\n        return this.decodeJpeg(data);\r\n      default:\r\n        Log.debug(`Unsupported image format: ${format}`);\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Decode image data, auto-detecting format from file header.\r\n   *\r\n   * @param data Raw image file bytes\r\n   * @returns Decoded image, or undefined if format unknown or decoding fails\r\n   */\r\n  static async decodeAuto(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    const format = this.detectFormat(data);\r\n    if (!format) {\r\n      Log.debug(\"Could not detect image format from file header\");\r\n      return undefined;\r\n    }\r\n    return this.decode(data, format);\r\n  }\r\n\r\n  // ============================================================================\r\n  // PNG ENCODING\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format.\r\n   * Automatically uses the best encoder for the current environment.\r\n   *\r\n   * - Node.js: Uses pngjs (synchronous, optimized)\r\n   * - Browser: Uses canvas.toBlob (async)\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width in pixels\r\n   * @param height Image height in pixels\r\n   * @returns PNG file bytes, or undefined if encoding fails\r\n   */\r\n  static async encodeToPng(pixels: Uint8Array, width: number, height: number): Promise<Uint8Array | undefined> {\r\n    // Try Node.js encoder first via platform thunk\r\n    if (CreatorToolsHost.encodeToPng) {\r\n      try {\r\n        const result = CreatorToolsHost.encodeToPng(pixels, width, height);\r\n        if (result) return result;\r\n      } catch (e) {\r\n        Log.debug(`Node PNG encode failed, falling back to browser: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Fall back to browser encoder\r\n    return this.encodeToPngBrowser(pixels, width, height);\r\n  }\r\n\r\n  /**\r\n   * Synchronous PNG encoding (Node.js only).\r\n   * Use this when you need synchronous behavior and know you're in Node.js.\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width in pixels\r\n   * @param height Image height in pixels\r\n   * @returns PNG file bytes, or undefined if not in Node.js or encoding fails\r\n   */\r\n  static encodeToPngSync(pixels: Uint8Array, width: number, height: number): Uint8Array | undefined {\r\n    // Use platform thunk if available (Node.js environments)\r\n    if (CreatorToolsHost.encodeToPng) {\r\n      try {\r\n        return CreatorToolsHost.encodeToPng(pixels, width, height);\r\n      } catch (e) {\r\n        Log.debug(`Sync PNG encode failed: ${e}`);\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    // Not available in browser environments\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Encode RGBA pixels to PNG using browser Canvas API.\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width in pixels\r\n   * @param height Image height in pixels\r\n   * @returns PNG file bytes, or undefined if not in browser or encoding fails\r\n   */\r\n  static async encodeToPngBrowser(pixels: Uint8Array, width: number, height: number): Promise<Uint8Array | undefined> {\r\n    try {\r\n      let offscreenCanvas: OffscreenCanvas | undefined;\r\n      let htmlCanvas: HTMLCanvasElement | undefined;\r\n      let ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D | null;\r\n\r\n      if (isWebWorkerEnvironment()) {\r\n        offscreenCanvas = new OffscreenCanvas(width, height);\r\n        ctx = offscreenCanvas.getContext(\"2d\") as OffscreenCanvasRenderingContext2D | null;\r\n      } else if (typeof document !== \"undefined\") {\r\n        htmlCanvas = document.createElement(\"canvas\");\r\n        htmlCanvas.width = width;\r\n        htmlCanvas.height = height;\r\n        ctx = htmlCanvas.getContext(\"2d\");\r\n      } else {\r\n        return undefined;\r\n      }\r\n\r\n      if (!ctx) return undefined;\r\n\r\n      const imageData = ctx.createImageData(width, height);\r\n      imageData.data.set(pixels);\r\n      ctx.putImageData(imageData, 0, 0);\r\n\r\n      // Get PNG data\r\n      if (offscreenCanvas) {\r\n        const blob = await (offscreenCanvas as any).convertToBlob({ type: \"image/png\" });\r\n        const arrayBuffer = await blob.arrayBuffer();\r\n        return new Uint8Array(arrayBuffer);\r\n      } else if (htmlCanvas) {\r\n        return new Promise<Uint8Array | undefined>((resolve) => {\r\n          htmlCanvas!.toBlob(\r\n            async (blob) => {\r\n              if (!blob) {\r\n                resolve(undefined);\r\n                return;\r\n              }\r\n              const arrayBuffer = await blob.arrayBuffer();\r\n              resolve(new Uint8Array(arrayBuffer));\r\n            },\r\n            \"image/png\",\r\n            1.0\r\n          );\r\n        });\r\n      }\r\n      return undefined;\r\n    } catch (e) {\r\n      Log.debug(`Browser PNG encode failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // FORMAT DETECTION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Check if data is a PNG file (magic number: 0x89 0x50 0x4E 0x47).\r\n   */\r\n  static isPngData(data: Uint8Array): boolean {\r\n    return data.length >= 4 && data[0] === 0x89 && data[1] === 0x50 && data[2] === 0x4e && data[3] === 0x47;\r\n  }\r\n\r\n  /**\r\n   * Check if data is a JPEG file (magic number: 0xFF 0xD8 0xFF).\r\n   */\r\n  static isJpegData(data: Uint8Array): boolean {\r\n    return data.length >= 3 && data[0] === 0xff && data[1] === 0xd8 && data[2] === 0xff;\r\n  }\r\n\r\n  /**\r\n   * Check if data is a TGA file.\r\n   *\r\n   * TGA has no magic number, so we check:\r\n   * 1. It's NOT PNG or JPEG (which have magic numbers)\r\n   * 2. Byte 2 (image type) is a valid TGA type\r\n   *\r\n   * Valid TGA types:\r\n   * - 1: Uncompressed color-mapped\r\n   * - 2: Uncompressed true-color\r\n   * - 3: Uncompressed grayscale\r\n   * - 9: RLE color-mapped\r\n   * - 10: RLE true-color\r\n   * - 11: RLE grayscale\r\n   */\r\n  static isTgaData(data: Uint8Array): boolean {\r\n    if (data.length < 18) return false;\r\n    if (this.isPngData(data) || this.isJpegData(data)) return false;\r\n\r\n    const imageType = data[2];\r\n    return [1, 2, 3, 9, 10, 11].includes(imageType);\r\n  }\r\n\r\n  /**\r\n   * Detect image format from file header bytes.\r\n   *\r\n   * @param data Raw file bytes\r\n   * @returns Detected format, or undefined if unknown\r\n   */\r\n  static detectFormat(data: Uint8Array): ImageFormat | undefined {\r\n    if (this.isPngData(data)) return \"png\";\r\n    if (this.isJpegData(data)) return \"jpg\";\r\n    if (this.isTgaData(data)) return \"tga\";\r\n    return undefined;\r\n  }\r\n\r\n  // ============================================================================\r\n  // DATA URL CONVERSION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Convert raw image bytes to a data URL.\r\n   *\r\n   * @param data Image file bytes (PNG, JPEG, etc.)\r\n   * @param mimeType MIME type (e.g., \"image/png\")\r\n   * @returns Data URL string (data:image/png;base64,...)\r\n   */\r\n  static toDataUrl(data: Uint8Array, mimeType: string): string {\r\n    const base64 = Utilities.uint8ArrayToBase64(data);\r\n    return `data:${mimeType};base64,${base64}`;\r\n  }\r\n\r\n  /**\r\n   * Convert decoded image to PNG data URL.\r\n   *\r\n   * @param image Decoded image with RGBA pixels\r\n   * @returns PNG data URL, or undefined if encoding fails\r\n   */\r\n  static async toPngDataUrl(image: IDecodedImage): Promise<string | undefined> {\r\n    const pngData = await this.encodeToPng(image.pixels, image.width, image.height);\r\n    if (!pngData) return undefined;\r\n    return this.toDataUrl(pngData, \"image/png\");\r\n  }\r\n\r\n  // ============================================================================\r\n  // TGA TO PNG CONVERSION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Convert TGA data directly to PNG data.\r\n   *\r\n   * @param tgaData Raw TGA file bytes\r\n   * @returns PNG file bytes, or undefined if conversion fails\r\n   */\r\n  static async tgaToPng(tgaData: Uint8Array): Promise<Uint8Array | undefined> {\r\n    const decoded = await this.decodeTga(tgaData);\r\n    if (!decoded) return undefined;\r\n    return this.encodeToPng(decoded.pixels, decoded.width, decoded.height);\r\n  }\r\n\r\n  /**\r\n   * Convert TGA data to PNG data URL.\r\n   *\r\n   * @param tgaData Raw TGA file bytes\r\n   * @returns PNG data URL (data:image/png;base64,...), or undefined if fails\r\n   */\r\n  static async tgaToPngDataUrl(tgaData: Uint8Array): Promise<string | undefined> {\r\n    const pngData = await this.tgaToPng(tgaData);\r\n    if (!pngData) return undefined;\r\n    return this.toDataUrl(pngData, \"image/png\");\r\n  }\r\n\r\n  // ============================================================================\r\n  // PIXEL MANIPULATION UTILITIES\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Convert BGRA pixel data to RGBA.\r\n   * TGA files often store pixels in BGRA format.\r\n   *\r\n   * @param pixels BGRA pixel data (modified in place)\r\n   * @returns The same array with R and B swapped\r\n   */\r\n  static bgraToRgba(pixels: Uint8Array): Uint8Array {\r\n    for (let i = 0; i < pixels.length; i += 4) {\r\n      const b = pixels[i];\r\n      pixels[i] = pixels[i + 2]; // R = B\r\n      pixels[i + 2] = b; // B = R\r\n    }\r\n    return pixels;\r\n  }\r\n\r\n  /**\r\n   * Create a solid color image.\r\n   *\r\n   * @param width Image width\r\n   * @param height Image height\r\n   * @param r Red component (0-255)\r\n   * @param g Green component (0-255)\r\n   * @param b Blue component (0-255)\r\n   * @param a Alpha component (0-255, default 255)\r\n   * @returns Decoded image with solid color\r\n   */\r\n  static createSolidColor(\r\n    width: number,\r\n    height: number,\r\n    r: number,\r\n    g: number,\r\n    b: number,\r\n    a: number = 255\r\n  ): IDecodedImage {\r\n    const pixels = new Uint8Array(width * height * 4);\r\n    for (let i = 0; i < pixels.length; i += 4) {\r\n      pixels[i] = r;\r\n      pixels[i + 1] = g;\r\n      pixels[i + 2] = b;\r\n      pixels[i + 3] = a;\r\n    }\r\n    return { width, height, pixels };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport StorageUtilities, { AllowedExtensionsSet } from \"../storage/StorageUtilities\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Project from \"../app/Project\";\r\nimport * as exifrModule from \"exifr\";\r\n// Handle CJS/ESM interop: esbuild wraps CJS default export, while ts-node uses named exports directly\r\nconst Exifr = (exifrModule as any).Exifr || (exifrModule as any).default?.Exifr;\r\nimport ImageCodec from \"../core/ImageCodec\";\r\n\r\nexport type ImageCoords = {\r\n  x1: number;\r\n  y1: number;\r\n  x2: number;\r\n  y2: number;\r\n};\r\n\r\nexport const VibrantVisualsFileExtensionVariants = [\r\n  \"_mer.png\",\r\n  \"_mer.tga\",\r\n  \"_mers.png\",\r\n  \"_mers.tga\",\r\n  // \"_normal.png\", <-- too many false positives\r\n  // \"_normal.tga\",\r\n  \".texture_set.json\",\r\n];\r\n\r\nexport default class TextureDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _isContentProcessed: boolean = false;\r\n  private _width: number | undefined;\r\n  private _height: number | undefined;\r\n  private _errorMessage: string | undefined;\r\n  private _errorProcessing: boolean | undefined;\r\n  private _imageData: Uint8Array | undefined;\r\n\r\n  private _onLoaded = new EventDispatcher<TextureDefinition, TextureDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get width() {\r\n    return this._width;\r\n  }\r\n\r\n  public get height() {\r\n    return this._height;\r\n  }\r\n\r\n  public get errorMessage() {\r\n    return this._errorMessage;\r\n  }\r\n\r\n  public get errorProcessing() {\r\n    return this._errorProcessing;\r\n  }\r\n\r\n  public get imageData() {\r\n    return this._imageData;\r\n  }\r\n\r\n  public get data() {\r\n    if (!this._file || !this._file.content || typeof this._file.content === \"string\") {\r\n      return undefined;\r\n    }\r\n\r\n    return this._file.content;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  getPixel(x: number, y: number) {\r\n    if (!this._imageData) {\r\n      throw new Error(\"Image data is not available.\");\r\n    }\r\n\r\n    const width = this._width ?? 0;\r\n    const height = this._height ?? 0;\r\n\r\n    if (x < 0 || x >= width || y < 0 || y >= height) {\r\n      throw new Error(\"Invalid pixel coordinates.\");\r\n    }\r\n\r\n    const index = (y * width + x) * 4;\r\n    return {\r\n      r: this._imageData[index],\r\n      g: this._imageData[index + 1],\r\n      b: this._imageData[index + 2],\r\n      a: this._imageData[index + 3],\r\n    };\r\n  }\r\n\r\n  get isContentProcessed() {\r\n    return this._isContentProcessed;\r\n  }\r\n\r\n  async processContent() {\r\n    if (this._isContentProcessed) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || !(this._file.content instanceof Uint8Array)) {\r\n      return;\r\n    }\r\n\r\n    if (this._file.type !== \"tga\") {\r\n      const exifr = new Exifr({});\r\n\r\n      try {\r\n        await exifr.read(this._file.content);\r\n\r\n        const results = await exifr.parse();\r\n\r\n        if (!results) {\r\n          this._errorProcessing = true;\r\n          this._errorMessage = \"No results returned.\";\r\n        } else {\r\n          this._width = results.ImageWidth;\r\n          this._height = results.ImageHeight;\r\n        }\r\n      } catch (e: any) {\r\n        this._errorProcessing = true;\r\n        this._errorMessage = e.message ? e.message : e.toString();\r\n      }\r\n    } else {\r\n      try {\r\n        const decoded = await ImageCodec.decodeTga(this._file.content);\r\n\r\n        if (decoded) {\r\n          this._width = decoded.width;\r\n          this._height = decoded.height;\r\n          this._imageData = decoded.pixels;\r\n        } else {\r\n          this._errorProcessing = true;\r\n          this._errorMessage = \"Failed to decode TGA image.\";\r\n        }\r\n      } catch (e: any) {\r\n        this._errorProcessing = true;\r\n        this._errorMessage = e.message ? e.message : e.toString();\r\n      }\r\n    }\r\n\r\n    /*\r\n    this usage of pngjs didn't seem to work for a significant portion of PNGs\r\n    same with the upnp library\r\n    if (this._file.type === \"png\" && this._file.content && this._file.content instanceof Uint8Array) {\r\n      try {\r\n        const pngm = PNG.sync.read(Buffer.from(this._file.content.buffer));\r\n\r\n        if (pngm.width !== this._width || pngm.height !== this._height) {\r\n          throw new Error(\"Mismatch in parsed image dimensions.\");\r\n        }\r\n\r\n        this._imageData = new Uint8Array(pngm.data);\r\n      } catch (e: any) {\r\n        Log.verbose(\"Could not get PNG data for \" + this._file.extendedPath);\r\n      }\r\n    }*/\r\n\r\n    this._isContentProcessed = true;\r\n  }\r\n\r\n  unloadContent() {\r\n    this._isContentProcessed = false;\r\n    this._imageData = undefined;\r\n  }\r\n\r\n  /**\r\n   * Decode image data (PNG or TGA) to raw RGBA pixels.\r\n   * This is a shared utility method for use by Model2DRenderer, ModelMeshFactory, etc.\r\n   *\r\n   * @param data Raw image file bytes\r\n   * @param fileType File extension ('png' or 'tga')\r\n   * @returns Decoded pixels with width, height, and RGBA data, or undefined if decoding fails\r\n   */\r\n  static async decodeToPixels(\r\n    data: Uint8Array,\r\n    fileType: string\r\n  ): Promise<{ width: number; height: number; pixels: Uint8Array } | undefined> {\r\n    if (fileType === \"tga\") {\r\n      return ImageCodec.decodeTga(data);\r\n    } else if (fileType === \"png\") {\r\n      return ImageCodec.decodePng(data);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<TextureDefinition, TextureDefinition>) {\r\n    let texd: TextureDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      texd = new TextureDefinition();\r\n\r\n      texd.file = file;\r\n\r\n      file.manager = texd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof TextureDefinition) {\r\n      texd = file.manager as TextureDefinition;\r\n\r\n      if (!texd.isLoaded) {\r\n        if (loadHandler) {\r\n          texd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await texd.load();\r\n      }\r\n    }\r\n\r\n    return texd;\r\n  }\r\n\r\n  getReferencePath() {\r\n    if (!this._file) {\r\n      return undefined;\r\n    }\r\n\r\n    let projectPath = this._file.storageRelativePath;\r\n\r\n    return TextureDefinition.getTexturePath(projectPath);\r\n  }\r\n\r\n  static canonicalizeTexturePath(projectPath: string | undefined) {\r\n    if (projectPath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    projectPath = projectPath.toLowerCase();\r\n\r\n    const lastPeriod = projectPath.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod >= 0) {\r\n      const removedPart = projectPath.substring(lastPeriod + 1);\r\n\r\n      if (AllowedExtensionsSet.has(removedPart)) {\r\n        projectPath = projectPath.substring(0, lastPeriod);\r\n      }\r\n    }\r\n\r\n    return projectPath;\r\n  }\r\n\r\n  static getTexturePath(projectPath: string) {\r\n    const lastPeriod = projectPath.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod >= 0) {\r\n      projectPath = projectPath.substring(0, lastPeriod);\r\n    }\r\n\r\n    const ppLower = projectPath.toLowerCase();\r\n\r\n    const texturesIndex = ppLower.indexOf(\"/textures/\");\r\n\r\n    if (texturesIndex < 0) {\r\n      return undefined;\r\n    }\r\n\r\n    return projectPath.substring(texturesIndex + 1);\r\n  }\r\n\r\n  persist(): boolean {\r\n    return false;\r\n  }\r\n\r\n  async load() {\r\n    if (this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TSCDF\");\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent();\r\n\r\n    if (!this._file.content || typeof this._file.content === \"string\") {\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    // Only process VV sidecar files for this specific texture item\r\n    let pf = item.primaryFile;\r\n\r\n    if (!pf) {\r\n      await item.ensureStorage();\r\n      pf = item.primaryFile;\r\n    }\r\n\r\n    if (pf) {\r\n      const parentFolder = pf.parentFolder;\r\n\r\n      if (!parentFolder) {\r\n        return;\r\n      }\r\n\r\n      if (!parentFolder.isLoaded) {\r\n        await parentFolder.load();\r\n      }\r\n\r\n      let baseName = StorageUtilities.getBaseFromName(pf.name);\r\n      const parentFiles = parentFolder.files;\r\n\r\n      for (const ext of VibrantVisualsFileExtensionVariants) {\r\n        const vvSidecarFile = parentFiles[baseName + ext];\r\n        if (vvSidecarFile !== undefined && vvSidecarFile.extendedPath) {\r\n          const sidecarItem = project.getItemByExtendedOrProjectPath(vvSidecarFile.extendedPath);\r\n\r\n          if (sidecarItem && sidecarItem !== item) {\r\n            item.addChildItem(sidecarItem);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IItemTexture, IItemTextureNode } from \"./IItemTexture\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\n\r\nexport default class ItemTextureCatalogDefinition {\r\n  private _data?: IItemTexture;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<ItemTextureCatalogDefinition, ItemTextureCatalogDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get textureData() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._data.texture_data === undefined) {\r\n      this._data.texture_data = {};\r\n    }\r\n\r\n    return this._data.texture_data;\r\n  }\r\n\r\n  public getCanonicalizedTexturePathList() {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const key in this._data.texture_data) {\r\n      const texturePathArr = this._data.texture_data[key];\r\n\r\n      if (texturePathArr && texturePathArr.textures) {\r\n        if (typeof texturePathArr.textures === \"string\") {\r\n          const path = TextureDefinition.canonicalizeTexturePath(texturePathArr.textures);\r\n          if (path) {\r\n            textureList.push(path);\r\n          }\r\n        } else if (Array.isArray(texturePathArr.textures)) {\r\n          for (const texturePath of texturePathArr.textures) {\r\n            if (typeof texturePath === \"string\") {\r\n              const path = TextureDefinition.canonicalizeTexturePath(texturePath);\r\n              if (path) {\r\n                textureList.push(path);\r\n              }\r\n            } else if (texturePath) {\r\n              let tpath: string | undefined = (texturePath as IItemTextureNode).path;\r\n              if (typeof tpath === \"string\") {\r\n                tpath = TextureDefinition.canonicalizeTexturePath(tpath);\r\n                if (tpath) {\r\n                  textureList.push(tpath);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public getTexturePathList() {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const key in this._data.texture_data) {\r\n      const texturePathArr = this._data.texture_data[key];\r\n\r\n      if (texturePathArr && texturePathArr.textures) {\r\n        if (typeof texturePathArr.textures === \"string\") {\r\n          textureList.push(texturePathArr.textures);\r\n        } else if (Array.isArray(texturePathArr.textures)) {\r\n          for (const texturePath of texturePathArr.textures) {\r\n            if (typeof texturePath === \"string\") {\r\n              const path = TextureDefinition.canonicalizeTexturePath(texturePath);\r\n              if (path) {\r\n                textureList.push(path);\r\n              }\r\n            } else if (texturePath) {\r\n              let tpath: string | undefined = (texturePath as IItemTextureNode).path;\r\n              if (typeof tpath === \"string\") {\r\n                tpath = TextureDefinition.canonicalizeTexturePath(tpath);\r\n                if (tpath) {\r\n                  textureList.push(tpath);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get texturesIdList() {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureIdList = [];\r\n\r\n    for (const key in this._data.texture_data) {\r\n      textureIdList.push(key);\r\n    }\r\n\r\n    return textureIdList;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<ItemTextureCatalogDefinition, ItemTextureCatalogDefinition>\r\n  ) {\r\n    let et: ItemTextureCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new ItemTextureCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ItemTextureCatalogDefinition) {\r\n      et = file.manager as ItemTextureCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"textures\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  getTextureReferences() {\r\n    const textureRefs: string[] = [];\r\n    if (this.data?.texture_data) {\r\n      for (const resourceId in this.data.texture_data) {\r\n        const resource = this.data.texture_data[resourceId];\r\n\r\n        if (resource && resource.textures) {\r\n          if (!textureRefs.includes(resourceId)) {\r\n            textureRefs.push(resourceId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureRefs;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let texturePathList = this.getCanonicalizedTexturePathList();\r\n\r\n    for (const candItem of textureItems) {\r\n      if (packRootFolder && texturePathList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n            StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n          );\r\n\r\n          if (relativePath) {\r\n            if (texturePathList && texturePathList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              texturePathList = Utilities.removeItemInArray(relativePath, texturePathList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (texturePathList) {\r\n      for (const texturePath of texturePathList) {\r\n        item.addUnfulfilledRelationship(\r\n          texturePath,\r\n          ProjectItemType.texture,\r\n          await Database.isVanillaToken(texturePath)\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"ITCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class INbtTag {\r\n  type?: number = 99;\r\n  name?: string;\r\n  value?: string | number | bigint | bigint[] | number[] | boolean | null;\r\n  childTagType?: number;\r\n  children?: INbtTag[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"./../core/Utilities\";\r\nimport Log from \"./../core/Log\";\r\n\r\nimport INbtTag from \"./INbtTag\";\r\n\r\nexport enum NbtTagType {\r\n  end = 0,\r\n  byte = 1,\r\n  short = 2,\r\n  int = 3,\r\n  long = 4,\r\n  float = 5,\r\n  double = 6,\r\n  byteArray = 7,\r\n  string = 8,\r\n  list = 9,\r\n  compound = 10,\r\n  intArray = 11,\r\n  longArray = 12,\r\n  unknown = 99,\r\n}\r\n\r\nexport default class NbtBinaryTag {\r\n  type: NbtTagType;\r\n  childTagType: NbtTagType = NbtTagType.unknown;\r\n  name: string;\r\n\r\n  value: string | number | bigint | bigint[] | number[] | boolean | null = null;\r\n\r\n  isListChild: boolean;\r\n\r\n  private _children: NbtBinaryTag[] = [];\r\n\r\n  get childrenWithEnd() {\r\n    return this._children;\r\n  }\r\n\r\n  getTagChildren(): NbtBinaryTag[] {\r\n    if (this._children.length === 0) {\r\n      return [];\r\n    }\r\n\r\n    if (this.lastTagIsEnd) {\r\n      return this._children.slice(0, -1);\r\n    }\r\n\r\n    return this._children;\r\n  }\r\n\r\n  getTagLength() {\r\n    if (this.lastTagIsEnd) {\r\n      return this._children.length - 1;\r\n    }\r\n\r\n    return this._children.length;\r\n  }\r\n\r\n  get lastTagIsEnd() {\r\n    if (this._children.length === 0) {\r\n      return false;\r\n    }\r\n\r\n    const lastTag = this._children[this._children.length - 1];\r\n\r\n    if (lastTag.type === NbtTagType.end) {\r\n      return true;\r\n    } else if (this.childTagType === NbtTagType.end && lastTag._children.length === 0) {\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  get valueAsString() {\r\n    if (typeof this.value === \"number\") {\r\n      return this.value.toString();\r\n    } else if (typeof this.value === \"string\") {\r\n      return this.value;\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n\r\n  get valueAsJSONObject() {\r\n    let obj = undefined;\r\n    const str = this.valueAsString;\r\n\r\n    if (str) {\r\n      try {\r\n        obj = JSON.parse(str);\r\n      } catch (e) {\r\n        obj = undefined;\r\n      }\r\n    }\r\n\r\n    return obj;\r\n  }\r\n\r\n  get valueAsNumericArray() {\r\n    const childTags = this.getTagChildren();\r\n    const numarr = [];\r\n\r\n    for (const childTag of childTags) {\r\n      numarr.push(childTag.valueAsInt);\r\n    }\r\n\r\n    return numarr;\r\n  }\r\n\r\n  get valueAsStringArray() {\r\n    const childTags = this.getTagChildren();\r\n    const numarr = [];\r\n\r\n    for (const childTag of childTags) {\r\n      numarr.push(childTag.valueAsString);\r\n    }\r\n\r\n    return numarr;\r\n  }\r\n\r\n  get valueAsBoolean() {\r\n    if (typeof this.value === \"boolean\") {\r\n      return this.value;\r\n    } else if (typeof this.value === \"string\") {\r\n      if (this.value === \"true\" || this.value === \"TRUE\" || this.value === \"1\") {\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    } else if (typeof this.value === \"number\") {\r\n      if (this.value <= 0) {\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  get valueAsInt() {\r\n    if (typeof this.value === \"number\") {\r\n      return this.value;\r\n    } else if (typeof this.value === \"string\") {\r\n      return parseInt(this.value);\r\n    } else if (typeof this.value === \"boolean\" && this.value === true) {\r\n      return 1;\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  get valueAsFloat() {\r\n    if (typeof this.value === \"number\") {\r\n      return this.value;\r\n    } else if (typeof this.value === \"string\") {\r\n      return parseFloat(this.value);\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  get valueAsBigInt(): bigint {\r\n    if (typeof this.value === \"bigint\") {\r\n      return this.value;\r\n    }\r\n\r\n    const type = typeof this.value;\r\n\r\n    if (this.value !== null && (type === \"number\" || type === \"string\" || type === \"boolean\" || type === \"bigint\")) {\r\n      return BigInt(this.value as string | number | boolean | bigint);\r\n    }\r\n\r\n    return BigInt(0);\r\n  }\r\n\r\n  constructor(type: NbtTagType, name: string, isListChild: boolean) {\r\n    this.type = type;\r\n    this.name = name;\r\n    this.isListChild = isListChild;\r\n  }\r\n\r\n  setListFromArray(arr: number[]) {\r\n    let children = this.getTagChildren();\r\n\r\n    if (children.length > arr.length) {\r\n      while (children.length > arr.length) {\r\n        this.removeTagByIndex(children.length - 1);\r\n        children = this.getTagChildren();\r\n      }\r\n    } else {\r\n      while (children.length < arr.length) {\r\n        const newTag = new NbtBinaryTag(NbtTagType.int, \"\", this.type === NbtTagType.list);\r\n        this.pushTag(newTag);\r\n        children = this.getTagChildren();\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < children.length; i++) {\r\n      children[i].value = arr[i];\r\n    }\r\n  }\r\n\r\n  pushTag(tag: NbtBinaryTag) {\r\n    // if this is a list we've got an end tag at the 0 slot, swap it out\r\n    if (\r\n      this.type === NbtTagType.list &&\r\n      this.lastTagIsEnd &&\r\n      this._children.length === 1 &&\r\n      tag.type !== NbtTagType.end\r\n    ) {\r\n      this._children[0] = tag;\r\n\r\n      if (\r\n        (this.childTagType === NbtTagType.unknown || this.childTagType === NbtTagType.end) &&\r\n        tag.childTagType !== NbtTagType.end\r\n      ) {\r\n        this.childTagType = tag.type;\r\n      }\r\n    } else if (this.type === NbtTagType.list) {\r\n      if (\r\n        (this.childTagType === NbtTagType.unknown || this.childTagType === NbtTagType.end) &&\r\n        tag.childTagType !== NbtTagType.end\r\n      ) {\r\n        this.childTagType = tag.type;\r\n      }\r\n\r\n      this._children.push(tag);\r\n    } else if (this.type === NbtTagType.compound && this.lastTagIsEnd && tag.type !== NbtTagType.end) {\r\n      // duplicate the End tag a the end\r\n      this._children.push(this._children[this._children.length - 1]);\r\n\r\n      this._children[this._children.length - 2] = tag;\r\n    } else {\r\n      this._children.push(tag);\r\n    }\r\n  }\r\n\r\n  prepareForSave(includingChildren: boolean) {\r\n    if (this.type === NbtTagType.list) {\r\n      if (this._children.length === 0) {\r\n        this.childTagType = NbtTagType.end;\r\n        this.addTag(NbtTagType.end);\r\n      } else if (this._children.length > 1 && this.lastTagIsEnd) {\r\n        this._children = this._children.slice(0, -1);\r\n      }\r\n    } else if (this.type === NbtTagType.compound && !this.lastTagIsEnd) {\r\n      this.addTag(NbtTagType.end);\r\n    }\r\n\r\n    if (includingChildren) {\r\n      for (let i = 0; i < this._children.length; i++) {\r\n        this._children[i].prepareForSave(includingChildren);\r\n      }\r\n    }\r\n  }\r\n\r\n  getByteSize() {\r\n    this.prepareForSave(false);\r\n    let byteSize = 0;\r\n\r\n    if (!this.isListChild) {\r\n      byteSize += 1; // one byte for type of NBT Tag\r\n\r\n      if (this.type !== NbtTagType.end) {\r\n        byteSize += 2 + this.name.length; // two bytes + name length for name.  assumes name is ASCII (1 byte per char)\r\n      }\r\n    }\r\n\r\n    switch (this.type) {\r\n      case NbtTagType.byte:\r\n        byteSize += 1;\r\n        break;\r\n\r\n      case NbtTagType.short:\r\n        byteSize += 2;\r\n        break;\r\n\r\n      case NbtTagType.int:\r\n        byteSize += 4;\r\n        break;\r\n\r\n      case NbtTagType.long:\r\n        byteSize += 8;\r\n        break;\r\n\r\n      case NbtTagType.float:\r\n        byteSize += 4;\r\n        break;\r\n\r\n      case NbtTagType.double:\r\n        byteSize += 8;\r\n        break;\r\n\r\n      case NbtTagType.string:\r\n        byteSize += 2; // length of string is 2-byte short\r\n\r\n        if (typeof this.value === \"string\") {\r\n          const bytes = Utilities.convertStringToBytes(this.value, \"UTF-8\");\r\n\r\n          if (bytes === undefined) {\r\n            throw new Error(\"Unexpected NBT conversion error in writing string.\");\r\n          }\r\n\r\n          byteSize += bytes.length;\r\n        }\r\n\r\n        break;\r\n\r\n      case NbtTagType.list:\r\n        byteSize += 5; // one byte for type of items, + 4 bytes for length;\r\n        break;\r\n\r\n      case NbtTagType.intArray:\r\n        byteSize += 4; // length of array\r\n\r\n        byteSize += 4 * (this.value as number[]).length;\r\n        break;\r\n\r\n      case NbtTagType.longArray:\r\n        byteSize += 4; // length of array\r\n\r\n        byteSize += 8 * (this.value as number[]).length;\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      byteSize += this._children[i].getByteSize();\r\n    }\r\n\r\n    return byteSize;\r\n  }\r\n\r\n  public getJsonString() {\r\n    return JSON.stringify(this.getJson(), null, 2);\r\n  }\r\n\r\n  public getJson() {\r\n    this.prepareForSave(false);\r\n\r\n    const tag = new INbtTag();\r\n\r\n    if (this.name !== undefined && this.name !== \"\") {\r\n      tag.name = this.name;\r\n    }\r\n\r\n    if (this.type !== NbtTagType.unknown) {\r\n      tag.type = this.type;\r\n    }\r\n\r\n    if (this.value !== undefined) {\r\n      tag.value = this.value;\r\n    }\r\n\r\n    if (this.childTagType !== NbtTagType.unknown) {\r\n      tag.childTagType = this.childTagType;\r\n    }\r\n\r\n    if (this._children.length > 0) {\r\n      tag.children = [];\r\n\r\n      for (let i = 0; i < this._children.length; i++) {\r\n        tag.children.push(this._children[i].getJson());\r\n      }\r\n    }\r\n\r\n    return tag;\r\n  }\r\n\r\n  public writeBytes(bytes: Uint8Array, index: number, littleEndian: boolean) {\r\n    this.prepareForSave(false);\r\n\r\n    const byteLength = bytes.buffer.byteLength;\r\n    const dv = new DataView(bytes.buffer, 0, byteLength);\r\n\r\n    if (!this.isListChild) {\r\n      // write out type.\r\n      dv.setInt8(index, this.type);\r\n      index += 1;\r\n\r\n      if (this.type !== NbtTagType.end) {\r\n        // write out name length;\r\n        dv.setInt16(index, this.name.length, littleEndian);\r\n        index += 2;\r\n\r\n        // TODO: probably an incorrect assumption that name is always \"ASCII\"\r\n        for (let j = 0; j < this.name.length; j++) {\r\n          bytes[index++] = this.name.charCodeAt(j);\r\n        }\r\n      }\r\n    }\r\n\r\n    switch (this.type) {\r\n      case NbtTagType.byte:\r\n        dv.setInt8(index, this.valueAsInt);\r\n        index += 1;\r\n        break;\r\n\r\n      case NbtTagType.short:\r\n        dv.setInt16(index, this.valueAsInt, littleEndian);\r\n        index += 2;\r\n        break;\r\n\r\n      case NbtTagType.int:\r\n        dv.setInt32(index, this.valueAsInt, littleEndian);\r\n        index += 4;\r\n        break;\r\n\r\n      case NbtTagType.long:\r\n        dv.setBigInt64(index, this.valueAsBigInt, littleEndian);\r\n        index += 8;\r\n        break;\r\n\r\n      case NbtTagType.float:\r\n        dv.setFloat32(index, this.valueAsFloat, littleEndian);\r\n        index += 4;\r\n        break;\r\n\r\n      case NbtTagType.double:\r\n        dv.setFloat64(index, this.valueAsFloat, littleEndian);\r\n        index += 8;\r\n        break;\r\n\r\n      case NbtTagType.string:\r\n        if (typeof this.value === \"string\") {\r\n          const bytes = Utilities.convertStringToBytes(this.value, \"UTF-8\");\r\n\r\n          if (bytes === undefined) {\r\n            throw new Error(\"Unexpected NBT conversion error in writing string.\");\r\n          }\r\n\r\n          dv.setInt16(index, bytes.length, littleEndian);\r\n\r\n          index += 2;\r\n\r\n          index = Utilities.writeString(dv, index, this.value, \"UTF-8\");\r\n          if (index < 0 || index >= byteLength) {\r\n            throw new Error(\"Unexpected error writing string.\");\r\n          }\r\n        } else {\r\n          dv.setInt16(index, 0, littleEndian);\r\n          index += 2;\r\n        }\r\n        break;\r\n\r\n      case NbtTagType.list:\r\n        dv.setInt8(index, this.childTagType);\r\n        index += 1;\r\n\r\n        dv.setInt32(index, this.getTagLength(), littleEndian);\r\n        index += 4;\r\n\r\n        break;\r\n\r\n      case NbtTagType.intArray:\r\n        // array length\r\n        dv.setInt32(index, this._children.length, littleEndian);\r\n        index += 4;\r\n\r\n        const nums = this.value as number[];\r\n\r\n        for (let i = 0; i < nums.length; i++) {\r\n          dv.setInt32(index, nums[i], littleEndian);\r\n          index += 4;\r\n        }\r\n\r\n        break;\r\n\r\n      case NbtTagType.longArray:\r\n        // array length\r\n        dv.setInt32(index, this._children.length, littleEndian);\r\n        index += 4;\r\n\r\n        const bigints = this.value as bigint[];\r\n\r\n        for (let i = 0; i < bigints.length; i++) {\r\n          dv.setBigInt64(index, bigints[i], littleEndian);\r\n          index += 8;\r\n        }\r\n\r\n        break;\r\n    }\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      index = this._children[i].writeBytes(bytes, index, littleEndian);\r\n    }\r\n\r\n    return index;\r\n  }\r\n\r\n  public removeTagByIndex(index: number) {\r\n    const newChildren = [];\r\n\r\n    let removedItem = false;\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      if (i !== index) {\r\n        newChildren.push(this._children[i]);\r\n      } else {\r\n        removedItem = true;\r\n      }\r\n    }\r\n\r\n    this._children = newChildren;\r\n\r\n    return removedItem;\r\n  }\r\n\r\n  public removeTag(tagName: string) {\r\n    const newChildren = [];\r\n\r\n    let removedItem = false;\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      if (this._children[i].name !== tagName) {\r\n        newChildren.push(this._children[i]);\r\n      } else {\r\n        removedItem = true;\r\n      }\r\n    }\r\n\r\n    this._children = newChildren;\r\n\r\n    return removedItem;\r\n  }\r\n\r\n  public ensureTag(tagName: string, tagType: NbtTagType) {\r\n    const tag = this.child(tagName);\r\n\r\n    if (tag !== null) {\r\n      Log.assert(tag.type === tagType, \"Unexpected data type '\" + tag.type + \"' for an nbt tag '\" + tagName + \"'\");\r\n\r\n      return tag;\r\n    }\r\n\r\n    return this.addTag(tagType, tagName);\r\n  }\r\n\r\n  public addTag(tagType: NbtTagType, tagName?: string) {\r\n    if (this.type !== NbtTagType.compound && this.type !== NbtTagType.list) {\r\n      throw new Error(\"Unsupported type for adding a tag\");\r\n    }\r\n\r\n    if (tagName === undefined) {\r\n      tagName = \"\";\r\n    }\r\n\r\n    const newTag = new NbtBinaryTag(tagType, tagName, this.type === NbtTagType.list);\r\n\r\n    this.pushTag(newTag);\r\n\r\n    return newTag;\r\n  }\r\n\r\n  public getProperty(name: string): NbtBinaryTag | null {\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      if (this._children[i].name === name) {\r\n        return this._children[i];\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  public child(name: string): NbtBinaryTag | null {\r\n    if (this.name === name) {\r\n      return this;\r\n    }\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      if (this._children[i].name === name) {\r\n        return this._children[i];\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  public find(name: string): NbtBinaryTag | null {\r\n    if (this.name === name) {\r\n      return this;\r\n    }\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      if (this._children[i].name === name) {\r\n        return this._children[i];\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      const tagChild = this._children[i];\r\n\r\n      if (tagChild.type === NbtTagType.compound || tagChild.type === NbtTagType.list) {\r\n        const result = tagChild.find(name);\r\n\r\n        if (result != null) {\r\n          return result;\r\n        }\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IBlockTypePropertyValueData from \"./IBlockTypePropertyValueData\";\r\n\r\nexport enum BlockPropertyType {\r\n  int = 0,\r\n  boolean = 1,\r\n  string = 2,\r\n  float = 3,\r\n  stringEnum = 4,\r\n  intEnum = 5,\r\n  intBoolean = 6,\r\n}\r\n\r\nexport default interface IBlockTypePropertyData {\r\n  name: string;\r\n  default?: string | number | number[] | bigint | bigint[] | boolean | null;\r\n  type: BlockPropertyType;\r\n  title?: string;\r\n  values?: IBlockTypePropertyValueData[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { NbtTagType } from \"./NbtBinaryTag\";\r\nimport { BlockPropertyType } from \"./IBlockTypePropertyData\";\r\nimport Block from \"./Block\";\r\nimport IProperty from \"../dataform/IProperty\";\r\n\r\nexport default class BlockProperty implements IProperty {\r\n  private _value?: string | number | number[] | bigint | bigint[] | boolean;\r\n  private _nbtType: NbtTagType | null = null;\r\n\r\n  public id: string | undefined;\r\n  private _block: Block;\r\n\r\n  constructor(block: Block) {\r\n    this._block = block;\r\n  }\r\n\r\n  static getBlockPropertyTypeByName(name: string) {\r\n    switch (this.name) {\r\n      case \"direction\":\r\n      case \"age\":\r\n      case \"stage\":\r\n        return BlockPropertyType.int;\r\n\r\n      case \"leaves\":\r\n      case \"damage\":\r\n        return BlockPropertyType.stringEnum;\r\n    }\r\n\r\n    throw new Error();\r\n  }\r\n\r\n  public get type() {\r\n    if (typeof this._value === \"string\") {\r\n      return BlockPropertyType.string;\r\n    } else if (typeof this._value === \"number\") {\r\n      return BlockPropertyType.int;\r\n    } else if (typeof this._value === \"boolean\") {\r\n      return BlockPropertyType.boolean;\r\n    } else {\r\n      return BlockPropertyType.int;\r\n    }\r\n  }\r\n\r\n  public get nbtType(): NbtTagType {\r\n    if (this._nbtType === null) {\r\n      if (typeof this._value === \"string\") {\r\n        return NbtTagType.string;\r\n      } else if (typeof this._value === \"number\") {\r\n        return NbtTagType.int;\r\n      } else if (typeof this._value === \"boolean\") {\r\n        return NbtTagType.byte;\r\n      } else {\r\n        return NbtTagType.byte;\r\n      }\r\n    }\r\n\r\n    return this._nbtType;\r\n  }\r\n\r\n  public set nbtType(newType: NbtTagType) {\r\n    this._nbtType = newType;\r\n  }\r\n\r\n  get value(): string | number | number[] | bigint | bigint[] | boolean | undefined {\r\n    return this._value;\r\n  }\r\n\r\n  asBoolean(defaultVal: boolean): boolean {\r\n    if (this._value === null || this._value === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    if (typeof this._value === \"boolean\") {\r\n      return this._value;\r\n    } else if (typeof this._value === \"number\") {\r\n      return this._value !== 0;\r\n    } else if (typeof this._value === \"string\") {\r\n      return this._value === \"true\" || this._value === \"1\";\r\n    }\r\n\r\n    return defaultVal;\r\n  }\r\n\r\n  asString(defaultVal: string): string {\r\n    if (this._value === null || this._value === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    return this._value.toString();\r\n  }\r\n\r\n  asNumber(defaultVal: number): number {\r\n    if (this._value === null || this._value === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    if (typeof this._value === \"number\") {\r\n      return this._value;\r\n    } else if (typeof this._value === \"string\") {\r\n      return parseInt(this._value);\r\n    } else if (typeof this._value === \"boolean\") {\r\n      if (this._value) {\r\n        return 1;\r\n      } else {\r\n        return 0;\r\n      }\r\n    }\r\n\r\n    return defaultVal;\r\n  }\r\n\r\n  set value(newValue: string | number | number[] | bigint | bigint[] | boolean | undefined) {\r\n    if (this._value !== newValue) {\r\n      this._value = newValue;\r\n\r\n      this._block._notifyPropertyChanged(this);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IComponent from \"../IComponent\";\r\nimport NbtBinaryTag from \"../NbtBinaryTag\";\r\n\r\nexport default class AttributeComponent implements IComponent {\r\n  id?: string;\r\n  base?: number;\r\n  current?: number;\r\n  minimum?: number;\r\n  maximum?: number;\r\n  defaultMinimum?: number;\r\n  defaultMaximum?: number;\r\n  [propertyId: string]: string | number | number[] | bigint | bigint[] | boolean | object | undefined;\r\n\r\n  loadFromNbtTag(tag: NbtBinaryTag) {\r\n    const minTag = tag.find(\"Min\");\r\n\r\n    if (minTag !== null) {\r\n      this.minimum = minTag.valueAsInt;\r\n    }\r\n\r\n    let maxTag = tag.find(\"Max\");\r\n\r\n    if (maxTag !== null) {\r\n      this.maximum = maxTag.valueAsInt;\r\n    }\r\n\r\n    const dminTag = tag.find(\"DefaultMin\");\r\n\r\n    if (dminTag !== null) {\r\n      this.defaultMinimum = dminTag.valueAsInt;\r\n    }\r\n\r\n    const dmaxTag = tag.find(\"DefaultMax\");\r\n\r\n    if (dmaxTag !== null) {\r\n      this.defaultMaximum = dmaxTag.valueAsInt;\r\n    }\r\n\r\n    const baseTag = tag.find(\"Base\");\r\n\r\n    if (baseTag !== null) {\r\n      this.base = baseTag.valueAsInt;\r\n    }\r\n\r\n    const currentTag = tag.find(\"Current\");\r\n\r\n    if (currentTag !== null) {\r\n      this.current = currentTag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IComponent from \"../IComponent\";\r\nimport NbtBinaryTag from \"../NbtBinaryTag\";\r\n\r\nexport default class AttributeComponent implements IComponent {\r\n  id?: string;\r\n  base?: number;\r\n  current?: number;\r\n  minimum?: number;\r\n  maximum?: number;\r\n  defaultMinimum?: number;\r\n  defaultMaximum?: number;\r\n  [propertyId: string]: string | number | number[] | bigint | bigint[] | boolean | object | undefined;\r\n\r\n  loadFromNbtTag(tag: NbtBinaryTag) {\r\n    const minTag = tag.find(\"Min\");\r\n\r\n    if (minTag !== null) {\r\n      this.minimum = minTag.valueAsFloat;\r\n    }\r\n\r\n    const maxTag = tag.find(\"Max\");\r\n\r\n    if (maxTag !== null) {\r\n      this.maximum = maxTag.valueAsFloat;\r\n    }\r\n\r\n    let dminTag = tag.find(\"DefaultMin\");\r\n\r\n    if (dminTag !== null) {\r\n      this.defaultMinimum = dminTag.valueAsFloat;\r\n    }\r\n\r\n    const dmaxTag = tag.find(\"DefaultMax\");\r\n\r\n    if (dmaxTag !== null) {\r\n      this.defaultMaximum = dmaxTag.valueAsFloat;\r\n    }\r\n\r\n    const baseTag = tag.find(\"Base\");\r\n\r\n    if (baseTag !== null) {\r\n      this.base = baseTag.valueAsFloat;\r\n    }\r\n\r\n    const currentTag = tag.find(\"Current\");\r\n\r\n    if (currentTag !== null) {\r\n      this.current = currentTag.valueAsFloat;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IProperty from \"../dataform/IProperty\";\r\nimport ComponentizedBase from \"./ComponentizedBase\";\r\nimport Database from \"./../minecraft/Database\";\r\nimport Log from \"./../core/Log\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\nimport IField, { FieldDataType } from \"../dataform/IField\";\r\nimport NumberValueComponent from \"./components/NumberValueComponent\";\r\n\r\nexport default class ComponentProperty implements IProperty {\r\n  public id: string;\r\n  private _item: ComponentizedBase;\r\n\r\n  private _form?: IFormDefinition;\r\n  private _field?: IField;\r\n  private isCoreProp: boolean = false;\r\n  private isInstanceProp: boolean = false;\r\n\r\n  constructor(item: ComponentizedBase, id: string) {\r\n    this._item = item;\r\n    this.id = id;\r\n  }\r\n\r\n  load() {\r\n    if (Database.uxCatalog === null || this._form !== undefined) {\r\n      return;\r\n    }\r\n\r\n    const result = Database.getComponentFormField(this.id);\r\n\r\n    if (result !== undefined) {\r\n      this._form = result.form;\r\n\r\n      if (this._form.id === \"entityCore\") {\r\n        this.isCoreProp = true;\r\n      } else if (this._form.id === \"entityInstance\") {\r\n        this.isInstanceProp = true;\r\n      }\r\n\r\n      this._field = result.field;\r\n    } else {\r\n      Log.debugAlert(\"Form field \" + this.id + \" not found.\");\r\n    }\r\n  }\r\n\r\n  public get type() {\r\n    if (this._field !== undefined) {\r\n      return this._field.dataType;\r\n    }\r\n\r\n    return FieldDataType.string;\r\n  }\r\n\r\n  get defaultValue():\r\n    | string\r\n    | number\r\n    | number[]\r\n    | bigint\r\n    | bigint[]\r\n    | string[]\r\n    | object\r\n    | object[]\r\n    | boolean\r\n    | null\r\n    | undefined {\r\n    if (this._field === undefined) {\r\n      Log.fail(\"Unbacked component property '\" + this.id + \"' found.\");\r\n      return undefined;\r\n    }\r\n\r\n    return this._field.defaultValue;\r\n  }\r\n\r\n  get value():\r\n    | string\r\n    | number\r\n    | number[]\r\n    | bigint\r\n    | bigint[]\r\n    | string[]\r\n    | object\r\n    | object[]\r\n    | boolean\r\n    | undefined\r\n    | null {\r\n    if (this._field === undefined) {\r\n      Log.fail(\"Unbacked component property '\" + this.id + \"' found.\");\r\n      return undefined;\r\n    }\r\n\r\n    if (this.isCoreProp && this._field.groupId !== undefined) {\r\n      const componentId = this._field.groupId;\r\n      const component = this._item.getComponent(componentId);\r\n\r\n      if (this._field.dataType === FieldDataType.boolean) {\r\n        if (component !== undefined) {\r\n          return true;\r\n        } else {\r\n          return false;\r\n        }\r\n      } else if (\r\n        this._field.dataType === FieldDataType.number ||\r\n        this._field.dataType === FieldDataType.int ||\r\n        this._field.dataType === FieldDataType.intBoolean ||\r\n        this._field.dataType === FieldDataType.intValueLookup\r\n      ) {\r\n        if (component !== undefined) {\r\n          const val = (component as NumberValueComponent).value;\r\n\r\n          return val;\r\n        }\r\n      }\r\n    } else if (!this.isCoreProp && this._form !== undefined && this._field !== undefined && this._form.id) {\r\n      const componentId = this._form.id;\r\n\r\n      const component = this._item.getComponent(componentId);\r\n      if (component !== undefined && typeof component !== \"object\") {\r\n        return component[this._field.id];\r\n      }\r\n    }\r\n\r\n    return this.defaultValue;\r\n  }\r\n\r\n  asBoolean(defaultVal: boolean): boolean {\r\n    const val = this.value;\r\n\r\n    if (val === null || val === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    if (typeof val === \"boolean\") {\r\n      return val;\r\n    } else if (typeof val === \"number\") {\r\n      return val !== 0;\r\n    } else if (typeof val === \"string\") {\r\n      return val === \"true\" || val === \"1\";\r\n    }\r\n\r\n    return defaultVal;\r\n  }\r\n\r\n  asString(defaultVal: string): string {\r\n    const val = this.value;\r\n\r\n    if (val === null || val === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    return val.toString();\r\n  }\r\n\r\n  asNumber(defaultVal: number): number {\r\n    const val = this.value;\r\n\r\n    if (val === null || val === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    if (typeof val === \"number\") {\r\n      return val;\r\n    } else if (typeof val === \"string\") {\r\n      return parseInt(val);\r\n    } else if (typeof val === \"boolean\") {\r\n      if (val) {\r\n        return 1;\r\n      } else {\r\n        return 0;\r\n      }\r\n    }\r\n\r\n    return defaultVal;\r\n  }\r\n\r\n  set value(\r\n    newValue: string | string[] | number | number[] | bigint | bigint[] | object | object[] | boolean | undefined | null\r\n  ) {\r\n    const val = this.value;\r\n\r\n    if (val !== newValue) {\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IComponent from \"./IComponent\";\r\nimport Log from \"../core/Log\";\r\nimport IntAttributeComponent from \"./components/IntAttributeComponent\";\r\nimport FloatAttributeComponent from \"./components/FloatAttributeComponent\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport ComponentProperty from \"./ComponentProperty\";\r\nimport NbtBinaryTag from \"./NbtBinaryTag\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class ComponentizedBase implements IManagedComponentSetItem {\r\n  private _components: { [id: string]: IComponent | string | string[] | boolean | number[] | number | undefined };\r\n  private _managedComponents: { [id: string]: IManagedComponent };\r\n\r\n  private _componentProperties: { [id: string]: ComponentProperty };\r\n\r\n  private _onComponentAdded = new EventDispatcher<ComponentizedBase, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<ComponentizedBase, string>();\r\n  private _onComponentChanged = new EventDispatcher<ComponentizedBase, IManagedComponent>();\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  id: string = \"\";\r\n\r\n  constructor() {\r\n    this._componentProperties = {};\r\n    this._components = {};\r\n    this._managedComponents = {};\r\n  }\r\n\r\n  getComponent(id: string) {\r\n    if (this._components === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    id = MinecraftUtilities.canonicalizeFullName(id);\r\n\r\n    const component = this._components[id];\r\n\r\n    if (component === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managedComponents[id] && Utilities.isUsableAsObjectKey(id)) {\r\n      this._managedComponents[id] = new ManagedComponent(this._components, id, component);\r\n    }\r\n\r\n    return this._managedComponents[id];\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"CBNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents() {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._components !== undefined) {\r\n      for (const componentName in this._managedComponents) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  ensureDataComponent(\r\n    id: string,\r\n    component: IComponent | string | number\r\n  ): IComponent | string | string[] | boolean | number[] | number | undefined {\r\n    this._ensureComponentsInitialized();\r\n\r\n    id = MinecraftUtilities.canonicalizeFullName(id);\r\n\r\n    if (this._components === undefined || this._managedComponents === undefined) {\r\n      Log.unexpectedUndefined(\"CBEDC\");\r\n      throw new Error();\r\n    }\r\n\r\n    if (this._managedComponents[id] !== undefined) {\r\n      return this._managedComponents[id].getData();\r\n    }\r\n\r\n    const mc = this.ensureComponent(id, new ManagedComponent(this._components, id, component));\r\n\r\n    if (mc) {\r\n      return mc.getData();\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  ensureComponent(id: string, component: IManagedComponent): IManagedComponent {\r\n    this._ensureComponentsInitialized();\r\n\r\n    id = MinecraftUtilities.canonicalizeFullName(id);\r\n\r\n    if (this._components === undefined || this._managedComponents === undefined || !Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unexpectedUndefined(\"CBEC\");\r\n      throw new Error();\r\n    }\r\n\r\n    if (this._managedComponents[id] !== undefined) {\r\n      return this._managedComponents[id];\r\n    }\r\n\r\n    this._managedComponents[id] = component;\r\n    this._components[id] = component.getData();\r\n\r\n    this._onComponentAdded.dispatch(this, component);\r\n\r\n    return component;\r\n  }\r\n\r\n  addComponent(id: string, component: IManagedComponent) {\r\n    this._ensureComponentsInitialized();\r\n\r\n    id = MinecraftUtilities.canonicalizeFullName(id);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    component.id = id;\r\n\r\n    if (this._managedComponents !== undefined) {\r\n      this._managedComponents[id] = component;\r\n\r\n      this._onComponentAdded.dispatch(this, component);\r\n    }\r\n\r\n    if (this._components) {\r\n      this._components[id] = component.getData();\r\n    }\r\n\r\n    return component;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._components === undefined) {\r\n      return;\r\n    }\r\n\r\n    id = MinecraftUtilities.canonicalizeFullName(id);\r\n\r\n    const newComponents: { [id: string]: IComponent | string | string[] | boolean | number[] | number | undefined } =\r\n      {};\r\n    const newManagedComponents: { [id: string]: IManagedComponent } = {};\r\n\r\n    for (const name in this._components) {\r\n      const nameCanon = MinecraftUtilities.canonicalizeFullName(name);\r\n\r\n      if (nameCanon !== id) {\r\n        const component = this._components[name];\r\n\r\n        newComponents[name] = component;\r\n      }\r\n    }\r\n\r\n    for (const name in this._managedComponents) {\r\n      const nameCanon = MinecraftUtilities.canonicalizeFullName(name);\r\n\r\n      if (nameCanon !== id) {\r\n        const component = this._managedComponents[name];\r\n\r\n        newManagedComponents[name] = component;\r\n      }\r\n    }\r\n\r\n    this._components = newComponents;\r\n    this._managedComponents = newManagedComponents;\r\n  }\r\n\r\n  public getComponentProperty(name: string) {\r\n    return this._componentProperties[name];\r\n  }\r\n\r\n  public ensureComponentProperty(name: string) {\r\n    return this.addComponentProperty(name);\r\n  }\r\n\r\n  public addComponentProperty(name: string) {\r\n    let property = this._componentProperties[name];\r\n\r\n    if (property == null) {\r\n      property = new ComponentProperty(this, name);\r\n      property.id = name;\r\n\r\n      this._componentProperties[name] = property;\r\n\r\n      this.notifyComponentPropertyChanged(property);\r\n    }\r\n\r\n    return property;\r\n  }\r\n\r\n  notifyComponentPropertyChanged(property: ComponentProperty) {}\r\n\r\n  loadAttributeComponentsFromNbtTag(attributesTag: NbtBinaryTag) {\r\n    const attributesChildren = attributesTag.getTagChildren();\r\n\r\n    for (let i = 0; i < attributesChildren.length; i++) {\r\n      const attributeChild = attributesChildren[i];\r\n\r\n      const nameChild = attributeChild.find(\"Name\");\r\n\r\n      if (nameChild !== null) {\r\n        const name = nameChild.valueAsString;\r\n\r\n        let component: IComponent | null = null;\r\n        if (\r\n          name.endsWith(\"luck\") ||\r\n          name.endsWith(\"health\") ||\r\n          name.endsWith(\"absorption\") ||\r\n          name.endsWith(\"knockback_resistance\") ||\r\n          name.endsWith(\"follow_range\")\r\n        ) {\r\n          component = new IntAttributeComponent();\r\n        } else if (name.endsWith(\"movement\") || name.endsWith(\"jump_strength\") || name.endsWith(\"attack_damage\")) {\r\n          // movement, underwater_movement, lava_movement, horse.jump_strength\r\n          component = new FloatAttributeComponent();\r\n        } else {\r\n          Log.debugAlert(\"Unknown component '\" + name + \"' found\");\r\n          component = new FloatAttributeComponent();\r\n        }\r\n\r\n        const managedComponent = new ManagedComponent(this._components, name, component);\r\n\r\n        this.ensureComponent(name, managedComponent);\r\n      }\r\n    }\r\n  }\r\n\r\n  _ensureComponentsInitialized() {\r\n    if (this._components === null) {\r\n      this._components = {};\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockVolumeLine from \"./BlockVolumeLine\";\r\nimport BlockProperty from \"./BlockProperty\";\r\nimport IBlockData from \"./IBlockData\";\r\nimport IBlockSurroundings from \"./IBlockSurroundings\";\r\nimport Database from \"./Database\";\r\nimport BlockType from \"./BlockType\";\r\nimport { BlockRenderType } from \"./BlockRenderType\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Log from \"../core/Log\";\r\nimport IPropertyObject from \"../dataform/IPropertyObject\";\r\nimport ComponentizedBase from \"./ComponentizedBase\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport enum BlockFacingDirection {\r\n  Down = 0,\r\n  up = 1,\r\n  north = 2,\r\n  south = 3,\r\n  west = 4,\r\n  east = 5,\r\n}\r\n\r\nexport enum BlockDirection {\r\n  South = 0,\r\n  West = 1,\r\n  North = 2,\r\n  East = 3,\r\n}\r\n\r\nexport default class Block extends ComponentizedBase implements IPropertyObject {\r\n  public static MAX_WATER_LEVEL = 16;\r\n\r\n  private _type: BlockType | undefined;\r\n  private _blockType: BlockType | undefined;\r\n  private _data: number = 0;\r\n\r\n  private _covered: boolean | undefined;\r\n  private _typeId: string | undefined;\r\n  private _z: number | undefined;\r\n\r\n  private _surroundings: IBlockSurroundings | undefined;\r\n\r\n  public line: BlockVolumeLine | undefined;\r\n  public extraLiquidDepth: number = -1;\r\n  public persistenceVersion: number = -1;\r\n\r\n  public properties: { [id: string]: BlockProperty } = {};\r\n\r\n  private _onTypeChanged = new EventDispatcher<Block, Block>();\r\n  private _onPropertyChanged = new EventDispatcher<Block, BlockProperty>();\r\n\r\n  public get onTypeChanged() {\r\n    return this._onTypeChanged.asEvent();\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public set data(newData: number) {\r\n    this._data = newData;\r\n  }\r\n\r\n  public get surroundings() {\r\n    if (this._surroundings !== undefined) {\r\n      return this._surroundings;\r\n    }\r\n\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    return this._surroundings;\r\n  }\r\n\r\n  /**\r\n   * Clears the cached surroundings so they will be recalculated on next access.\r\n   * This should be called when a neighboring block changes.\r\n   */\r\n  public clearSurroundings() {\r\n    this._surroundings = undefined;\r\n  }\r\n\r\n  public setType(blockType: BlockType) {\r\n    this._type = blockType;\r\n    this._blockType = blockType; // Keep reference to preserve baseType with shape data\r\n    this._typeId = blockType.id;\r\n  }\r\n\r\n  public get opaqueSideCount() {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    let count = 0;\r\n\r\n    const blockShortTypeName = this.shortTypeId;\r\n\r\n    let adjacent = this._surroundings.left;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    adjacent = this._surroundings.right;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    adjacent = this._surroundings.up;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    adjacent = this._surroundings.down;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    adjacent = this._surroundings.forward;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    adjacent = this._surroundings.backward;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  public get isOpaque() {\r\n    if (this._blockType === undefined) {\r\n      this._ensureTypes();\r\n    }\r\n\r\n    if (this._blockType !== undefined) {\r\n      const baseType = this._blockType.baseType;\r\n\r\n      return baseType.isOpaque;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private _ensureTypes() {\r\n    if (this._blockType !== undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this._typeId === undefined) {\r\n      return;\r\n    }\r\n\r\n    this._type = Database.ensureBlockType(this._typeId);\r\n\r\n    if (\r\n      this._type.javaData !== null &&\r\n      this._type.javaData.name !== null &&\r\n      this._type.javaData.name !== this._typeId\r\n    ) {\r\n      this._blockType = Database.ensureBlockType(this._type.javaData.name);\r\n\r\n      const typeProp = this.getProperty(\"type\");\r\n\r\n      if (typeProp !== undefined) {\r\n        if (this._blockType.shortId === \"piston\" && typeProp.asString(\"\") === \"sticky\") {\r\n          this._blockType = Database.ensureBlockType(\"sticky_piston\");\r\n        } else if (this._blockType.shortId === \"sticky_piston\" && typeProp.asString(\"\") === \"normal\") {\r\n          this._blockType = Database.ensureBlockType(\"piston\");\r\n        }\r\n      }\r\n    } else {\r\n      this._blockType = this._type;\r\n    }\r\n  }\r\n\r\n  _updateDataFromProperties() {\r\n    this._ensureTypes();\r\n\r\n    if (this._blockType === undefined) {\r\n      return;\r\n    }\r\n\r\n    const baseType = this._blockType.baseType;\r\n\r\n    let data = 0;\r\n\r\n    if (baseType.data.properties !== undefined) {\r\n      for (let i = 0; i < baseType.data.properties.length; i++) {\r\n        const propData = baseType.data.properties[i];\r\n\r\n        if (propData.values !== undefined) {\r\n          const prop = this.getProperty(propData.name);\r\n\r\n          if (prop !== null && prop !== undefined) {\r\n            for (let j = 0; j < propData.values.length; j++) {\r\n              if (prop.value === propData.values[j].id) {\r\n                const dataAdd = propData.values[j].data;\r\n                if (dataAdd !== undefined) {\r\n                  data += dataAdd;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this._data = data;\r\n  }\r\n\r\n  _notifyTypeChanged() {\r\n    this._onTypeChanged.dispatch(this, this);\r\n  }\r\n\r\n  _notifyPropertyChanged(blockProperty: BlockProperty) {\r\n    this._updateDataFromProperties();\r\n\r\n    this._onPropertyChanged.dispatch(this, blockProperty);\r\n\r\n    if (this.line !== undefined && this.line.cube !== undefined) {\r\n      this.line.cube._notifyBlockPropertyChanged(this);\r\n    }\r\n  }\r\n\r\n  public get blockType() {\r\n    this._ensureTypes();\r\n\r\n    if (this._blockType === undefined) {\r\n      throw new Error(\"Block type is undefined for block: \" + this.id);\r\n    }\r\n\r\n    return this._blockType;\r\n  }\r\n\r\n  public get textureName() {\r\n    this._ensureTypes();\r\n\r\n    if (this._blockType === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.shortTypeId === \"water\") {\r\n      return undefined;\r\n    }\r\n\r\n    return this._blockType.baseType.name;\r\n  }\r\n\r\n  public copyFrom(block: Block) {\r\n    this.typeName = block.typeName;\r\n  }\r\n\r\n  public static fromLegacyId(byte: number) {\r\n    if (byte === 0 || byte >= 256 || byte === undefined) {\r\n      return new Block(\"minecraft:air\");\r\n    }\r\n\r\n    const blockType = Database.getBlockTypeByLegacyId(byte);\r\n\r\n    if (blockType) {\r\n      return new Block(blockType.id);\r\n    }\r\n\r\n    // Log.fail(\"Could not find block identifier: \" + byte);\r\n\r\n    return new Block(\"minecraft:dirt\");\r\n  }\r\n\r\n  public get effectiveWaterLevel() {\r\n    let prop = this.getProperty(\"level\");\r\n\r\n    if (prop !== undefined) {\r\n      return prop.asNumber(0) * 2;\r\n    }\r\n\r\n    const shortTypeName = this.shortTypeId;\r\n\r\n    if (shortTypeName === \"water\") {\r\n      return 15;\r\n    }\r\n\r\n    prop = this.getProperty(\"liquid_depth\");\r\n\r\n    if (prop !== undefined) {\r\n      return 15 - prop.asNumber(0);\r\n    }\r\n\r\n    if (this.extraLiquidDepth < 0) {\r\n      return 0;\r\n    }\r\n\r\n    return 15 - this.extraLiquidDepth;\r\n  }\r\n\r\n  public get renderType(): BlockRenderType {\r\n    this._ensureTypes();\r\n\r\n    if (this._blockType === undefined) {\r\n      return BlockRenderType.BlockOneTexture;\r\n    }\r\n\r\n    if (this.shortTypeId === \"water\") {\r\n      return BlockRenderType.Water;\r\n    }\r\n\r\n    return this._blockType.renderType;\r\n  }\r\n\r\n  public getProperty(name: string) {\r\n    return this.properties[name];\r\n  }\r\n\r\n  public ensureProperty(name: string) {\r\n    return this.addProperty(name);\r\n  }\r\n\r\n  public getPropertyBoolean(name: string, defaultValue: boolean) {\r\n    const prop = this.properties[name];\r\n\r\n    if (prop === undefined || prop === null) {\r\n      return defaultValue;\r\n    }\r\n\r\n    return prop.asBoolean(defaultValue);\r\n  }\r\n\r\n  public getPropertyString(name: string, defaultValue: string) {\r\n    const prop = this.properties[name];\r\n\r\n    if (prop === undefined || prop === null) {\r\n      return defaultValue;\r\n    }\r\n\r\n    return prop.asString(defaultValue);\r\n  }\r\n\r\n  public getPropertyNumber(name: string, defaultValue: number) {\r\n    const prop = this.properties[name];\r\n\r\n    if (prop === undefined || prop === null) {\r\n      return defaultValue;\r\n    }\r\n\r\n    return prop.asNumber(defaultValue);\r\n  }\r\n\r\n  public addProperty(name: string) {\r\n    if (!Utilities.isUsableAsObjectKey(name)) {\r\n      Log.unsupportedToken(name);\r\n      throw new Error();\r\n    }\r\n\r\n    let property = this.properties[name];\r\n\r\n    if (property == null) {\r\n      property = new BlockProperty(this);\r\n      property.id = name;\r\n\r\n      this.properties[name] = property;\r\n    }\r\n\r\n    return property;\r\n  }\r\n\r\n  public get z() {\r\n    return this._z;\r\n  }\r\n\r\n  public set z(value: number | undefined) {\r\n    this._z = value;\r\n  }\r\n\r\n  public get x() {\r\n    if (this.line === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.line.x;\r\n  }\r\n\r\n  public get y() {\r\n    if (this.line === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.line.y;\r\n  }\r\n\r\n  public get coordinatesString(): string {\r\n    if (this.line === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this.x + \".\" + this.y + \".\" + this.z;\r\n  }\r\n\r\n  public get typeName(): string | undefined {\r\n    return this._typeId;\r\n  }\r\n\r\n  public set typeName(val: string | undefined) {\r\n    if (this._typeId !== val) {\r\n      this._typeId = val;\r\n      this._blockType = undefined;\r\n      this._type = undefined;\r\n\r\n      if (this.line !== undefined && this.line.cube !== undefined) {\r\n        this.line.cube._notifyBlockTypeChanged(this);\r\n      }\r\n    }\r\n  }\r\n\r\n  public getBlockData() {\r\n    let typeId = this.typeName;\r\n\r\n    if (typeId === null || typeId === undefined) {\r\n      typeId = \"\";\r\n    }\r\n\r\n    const props: { [id: string]: any } = {};\r\n\r\n    for (const id in this.properties) {\r\n      const blockProp = this.properties[id];\r\n\r\n      props[id] = blockProp.value;\r\n    }\r\n\r\n    const blockData: IBlockData = {\r\n      typeId: typeId,\r\n      state: props,\r\n    };\r\n\r\n    return blockData;\r\n  }\r\n\r\n  public toString(): string {\r\n    return JSON.stringify(this.getBlockData(), null, 2);\r\n  }\r\n\r\n  public get isEmpty() {\r\n    return this._typeId == null || this.shortTypeId === \"air\";\r\n  }\r\n\r\n  private _ensureSurroundingsIfCube() {\r\n    if (this.line === undefined || this._z === undefined || this._surroundings !== undefined) {\r\n      return;\r\n    }\r\n\r\n    const cube = this.line.cube;\r\n    const curX = this.line.x;\r\n    const curY = this.line.y;\r\n    const curZ = this._z;\r\n\r\n    let down = undefined;\r\n    let up = undefined;\r\n    let left = undefined;\r\n    let right = undefined;\r\n    let forward = undefined;\r\n    let backward = undefined;\r\n\r\n    const plane = cube.x(curX);\r\n\r\n    if (curY >= 1) {\r\n      down = plane.y(curY - 1).z(curZ);\r\n    }\r\n\r\n    if (curY < cube.maxY - 1) {\r\n      up = plane.y(curY + 1).z(curZ);\r\n    }\r\n\r\n    if (curX >= 1) {\r\n      left = cube\r\n        .x(curX - 1)\r\n        .y(curY)\r\n        .z(curZ);\r\n    }\r\n\r\n    if (curX < cube.maxX - 1) {\r\n      right = cube\r\n        .x(curX + 1)\r\n        .y(curY)\r\n        .z(curZ);\r\n    }\r\n\r\n    const line = cube.x(curX).y(curY);\r\n\r\n    if (curZ >= 1) {\r\n      backward = line.z(curZ - 1);\r\n    }\r\n\r\n    if (curZ < cube.maxZ - 1) {\r\n      forward = line.z(curZ + 1);\r\n    }\r\n\r\n    this._surroundings = {\r\n      down: down,\r\n      up: up,\r\n      left: left,\r\n      right: right,\r\n      backward: backward,\r\n      forward: forward,\r\n    };\r\n  }\r\n\r\n  public get isCovered(): boolean {\r\n    if (this._covered !== undefined) {\r\n      return this._covered;\r\n    }\r\n\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined || this._z === undefined) {\r\n      this._covered = false;\r\n      return false;\r\n    }\r\n\r\n    const surround = this._surroundings;\r\n\r\n    if (\r\n      surround.down === undefined ||\r\n      surround.down.isEmpty ||\r\n      !surround.down.isOpaque ||\r\n      !surround.down.isCovered ||\r\n      surround.up === undefined ||\r\n      surround.up.isEmpty ||\r\n      !surround.up.isOpaque ||\r\n      !surround.up.isCovered ||\r\n      surround.left === undefined ||\r\n      surround.left.isEmpty ||\r\n      !surround.left.isOpaque ||\r\n      !surround.left.isCovered ||\r\n      surround.right === undefined ||\r\n      surround.right.isEmpty ||\r\n      !surround.right.isOpaque ||\r\n      !surround.right.isCovered ||\r\n      surround.forward === undefined ||\r\n      surround.forward.isEmpty ||\r\n      !surround.forward.isOpaque ||\r\n      !surround.forward.isCovered ||\r\n      surround.backward === undefined ||\r\n      surround.backward.isEmpty ||\r\n      !surround.backward.isOpaque ||\r\n      !surround.backward.isCovered\r\n    ) {\r\n      this._covered = false;\r\n      return false;\r\n    }\r\n\r\n    this._covered = true;\r\n    return true;\r\n  }\r\n\r\n  public get isTouchingOtherBlock(): boolean {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return false;\r\n    }\r\n\r\n    const surr = this._surroundings;\r\n\r\n    if (\r\n      (surr.down !== undefined && !surr.down.isEmpty) ||\r\n      (surr.up !== undefined && !surr.up.isEmpty) ||\r\n      (surr.left !== undefined && !surr.left.isEmpty) ||\r\n      (surr.right !== undefined && !surr.right.isEmpty) ||\r\n      (surr.forward !== undefined && !surr.forward.isEmpty) ||\r\n      (surr.backward !== undefined && !surr.backward.isEmpty)\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public get up(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.up;\r\n  }\r\n\r\n  public get down(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.down;\r\n  }\r\n\r\n  public get left(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.left;\r\n  }\r\n\r\n  public get right(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.right;\r\n  }\r\n\r\n  public get forward(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.forward;\r\n  }\r\n\r\n  public get backward(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.backward;\r\n  }\r\n\r\n  public get shortTypeId() {\r\n    if (this._typeId !== undefined) {\r\n      if (this._typeId.startsWith(\"minecraft:\")) {\r\n        return this._typeId.substring(10, this._typeId.length);\r\n      }\r\n\r\n      return this._typeId;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  constructor(typeId?: string) {\r\n    super();\r\n\r\n    this._typeId = typeId;\r\n  }\r\n\r\n  applyFrom(template: Block) {\r\n    Log.assert(template !== null && template !== undefined, \"Undefined block template\");\r\n\r\n    this._typeId = template.typeName;\r\n\r\n    for (const propName in template.properties) {\r\n      const property = template.getProperty(propName);\r\n\r\n      const prop = this.ensureProperty(propName);\r\n\r\n      prop.nbtType = property.nbtType;\r\n      prop.value = property.value;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockVolume from \"./BlockVolume\";\r\nimport Block from \"./Block\";\r\nimport BlockVolumePlane from \"./BlockVolumePlane\";\r\n\r\nexport default class BlockVolumeLine {\r\n  private _cube: BlockVolume;\r\n  private _plane: BlockVolumePlane;\r\n  private _y: number;\r\n\r\n  get cube() {\r\n    return this._cube;\r\n  }\r\n\r\n  get y() {\r\n    return this._y;\r\n  }\r\n\r\n  get x() {\r\n    return this._plane.x;\r\n  }\r\n\r\n  get plane() {\r\n    return this._plane;\r\n  }\r\n\r\n  blocks: Block[];\r\n\r\n  constructor(cube: BlockVolume, plane: BlockVolumePlane, y: number) {\r\n    this.blocks = [];\r\n    this._cube = cube;\r\n    this._plane = plane;\r\n    this._y = y;\r\n  }\r\n\r\n  z(z: number): Block {\r\n    if (z > this._cube.maxZ) {\r\n      throw new Error(\"Value exceeds maximum Z\");\r\n    }\r\n\r\n    while (z >= this.blocks.length) {\r\n      const block = new Block(undefined);\r\n\r\n      block.line = this;\r\n      block.z = this.blocks.length;\r\n\r\n      this.blocks[this.blocks.length] = block;\r\n    }\r\n\r\n    return this.blocks[z];\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockVolume from \"./BlockVolume\";\r\nimport BlockVolumeLine from \"./BlockVolumeLine\";\r\n\r\nexport default class BlockVolumePlane {\r\n  private _cube: BlockVolume;\r\n  private _x: number;\r\n\r\n  lines: BlockVolumeLine[];\r\n\r\n  get x() {\r\n    return this._x;\r\n  }\r\n\r\n  constructor(cube: BlockVolume, x: number) {\r\n    this.lines = [];\r\n    this._cube = cube;\r\n    this._x = x;\r\n  }\r\n\r\n  y(y: number): BlockVolumeLine {\r\n    if (y > this._cube.maxY) {\r\n      throw new Error(\"Value exceeds maximum Y\");\r\n    }\r\n\r\n    while (y >= this.lines.length) {\r\n      const newY = this.lines.length;\r\n      this.lines[newY] = new BlockVolumeLine(this._cube, this, newY);\r\n    }\r\n\r\n    return this.lines[y];\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Location from \"./Location\";\r\n\r\nexport default class BlockLocation {\r\n  private _x: number;\r\n  private _y: number;\r\n  private _z: number;\r\n\r\n  public get x() {\r\n    return this._x;\r\n  }\r\n\r\n  public set x(newX: number) {\r\n    Log.assertIsInt(newX, \"BLX\");\r\n    this._x = newX;\r\n  }\r\n\r\n  public get y() {\r\n    return this._y;\r\n  }\r\n\r\n  public set y(newY: number) {\r\n    Log.assertIsInt(newY, \"BLY\");\r\n    this._y = newY;\r\n  }\r\n\r\n  public get z() {\r\n    return this._z;\r\n  }\r\n\r\n  public set z(newZ: number) {\r\n    Log.assertIsInt(newZ, \"BLZ\");\r\n    this._z = newZ;\r\n  }\r\n\r\n  public get title() {\r\n    return this.x + \"x\" + this.y + \"y\" + this.z + \"z\";\r\n  }\r\n\r\n  public toLocation() {\r\n    return new Location(this.x, this.y, this.z);\r\n  }\r\n\r\n  public toArray() {\r\n    return [this.x, this.y, this.z];\r\n  }\r\n\r\n  public toSummary() {\r\n    return \"(\" + this.x + \",\" + this.y + \",\" + this.z + \");\";\r\n  }\r\n\r\n  constructor(x?: number | undefined, y?: number | undefined, z?: number | undefined) {\r\n    this._x = x === undefined ? 0 : x;\r\n    this._y = y === undefined ? 0 : y;\r\n    this._z = z === undefined ? 0 : z;\r\n\r\n    Log.assertIsInt(this._x, \"BLCX\");\r\n    Log.assertIsInt(this._y, \"BLCY\");\r\n    Log.assertIsInt(this._z, \"BLCZ\");\r\n  }\r\n\r\n  static from(value: any): BlockLocation {\r\n    if (value instanceof BlockLocation) {\r\n      return value;\r\n    }\r\n\r\n    if (value instanceof Location) {\r\n      return value.toRoundedBlockLocation();\r\n    }\r\n\r\n    if (value.length && value.length === 3) {\r\n      return new BlockLocation(value[0], value[1], value[2]);\r\n    }\r\n\r\n    if (!value) {\r\n      return new BlockLocation(0, 0, 0);\r\n    }\r\n\r\n    if (value.x || value.y || value.z) {\r\n      return new BlockLocation(value.x, value.y, value.z);\r\n    }\r\n\r\n    return new BlockLocation(0, 0, 0);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockLocation from \"./BlockLocation\";\r\n\r\nexport default class Location {\r\n  private _x: number;\r\n  private _y: number;\r\n  private _z: number;\r\n\r\n  public get x() {\r\n    return this._x;\r\n  }\r\n\r\n  public set x(newX: number) {\r\n    this._x = newX;\r\n  }\r\n\r\n  public get y() {\r\n    return this._y;\r\n  }\r\n\r\n  public set y(newY: number) {\r\n    this._y = newY;\r\n  }\r\n\r\n  public get z() {\r\n    return this._z;\r\n  }\r\n\r\n  public set z(newZ: number) {\r\n    this._z = newZ;\r\n  }\r\n\r\n  public toSummary() {\r\n    return \"(\" + this.x.toPrecision(4) + \",\" + this.y.toPrecision(4) + \",\" + this.z.toPrecision(4) + \")\";\r\n  }\r\n\r\n  public toRoundedBlockLocation() {\r\n    return new BlockLocation(Math.round(this.x), Math.round(this.y), Math.round(this.z));\r\n  }\r\n\r\n  constructor(x?: number | undefined, y?: number | undefined, z?: number | undefined) {\r\n    this._x = x === undefined ? 0 : x;\r\n    this._y = y === undefined ? 0 : y;\r\n    this._z = z === undefined ? 0 : z;\r\n  }\r\n\r\n  distanceTo(location: Location) {\r\n    return Math.sqrt(\r\n      Math.pow(Math.abs(this._x - location.x), 2) +\r\n        Math.pow(Math.abs(this._y - location.y), 2) +\r\n        Math.pow(Math.abs(this._z - location.z), 2)\r\n    );\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class Rotation {\r\n  private _yaw: number;\r\n  private _pitch: number;\r\n\r\n  public get yaw() {\r\n    return this._yaw;\r\n  }\r\n\r\n  public set yaw(newYaw: number) {\r\n    this._yaw = newYaw;\r\n  }\r\n\r\n  public get pitch() {\r\n    return this._pitch;\r\n  }\r\n\r\n  public set pitch(newPitch: number) {\r\n    this._pitch = newPitch;\r\n  }\r\n\r\n  constructor(yaw?: number | undefined, pitch?: number | undefined) {\r\n    this._yaw = yaw === undefined ? 0 : yaw;\r\n    this._pitch = pitch === undefined ? 0 : pitch;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Location from \"./Location\";\r\nimport Log from \"./../core/Log\";\r\nimport ComponentizedBase from \"./ComponentizedBase\";\r\nimport NbtBinaryTag from \"./NbtBinaryTag\";\r\nimport Rotation from \"./Rotation\";\r\nimport IPropertyObject from \"../dataform/IPropertyObject\";\r\nimport IProperty from \"./../dataform/IProperty\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport ComponentProperty from \"./ComponentProperty\";\r\nimport ModelGeometryDefinition from \"./ModelGeometryDefinition\";\r\nimport { IGeometry } from \"./IModelGeometry\";\r\n\r\nexport default class Entity extends ComponentizedBase implements IPropertyObject {\r\n  _typeId: string = \"\";\r\n\r\n  location: Location = new Location();\r\n  rotation: Rotation = new Rotation();\r\n  tags: string[] = [];\r\n  definitions: string[] = [];\r\n\r\n  customModel?: ModelGeometryDefinition | undefined;\r\n  /** Pre-transformed geometry that takes precedence over customModel.defaultGeometry.\r\n   *  Set by VanillaProjectManager after applying VanillaGeometryTransforms. */\r\n  customGeometry?: IGeometry | undefined;\r\n  customTextureData?: Uint8Array | undefined;\r\n  customTextureUrl?: string | undefined;\r\n  customTintColor?: { r: number; g: number; b: number; a: number } | undefined;\r\n  customIgnoreAlpha?: boolean | undefined;\r\n\r\n  private _onPropertyChanged = new EventDispatcher<Entity, IProperty>();\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  get typeId() {\r\n    return this._typeId;\r\n  }\r\n\r\n  set typeId(newTypeId: string) {\r\n    this._typeId = newTypeId;\r\n  }\r\n\r\n  public getProperty(name: string) {\r\n    return this.getComponentProperty(name);\r\n  }\r\n\r\n  public ensureProperty(name: string) {\r\n    return this.addComponentProperty(name);\r\n  }\r\n\r\n  public addProperty(name: string) {\r\n    return this.addComponentProperty(name);\r\n  }\r\n\r\n  notifyComponentPropertyChanged(property: ComponentProperty) {\r\n    this._onPropertyChanged.dispatch(this, property);\r\n  }\r\n\r\n  loadDefinitionsFromNbtTag(tagsTag: NbtBinaryTag) {\r\n    const entityDefinitionChildren = tagsTag.getTagChildren();\r\n\r\n    const newDefinitions: string[] = [];\r\n\r\n    for (let i = 0; i < entityDefinitionChildren.length; i++) {\r\n      const definitionChild = entityDefinitionChildren[i];\r\n\r\n      newDefinitions.push(definitionChild.valueAsString);\r\n    }\r\n\r\n    this.definitions = newDefinitions;\r\n  }\r\n\r\n  loadTagsFromNbtTag(tagsTag: NbtBinaryTag) {\r\n    const entityTagChildren = tagsTag.getTagChildren();\r\n\r\n    const newTags: string[] = [];\r\n\r\n    for (let i = 0; i < entityTagChildren.length; i++) {\r\n      const tagChild = entityTagChildren[i];\r\n\r\n      newTags.push(tagChild.valueAsString);\r\n    }\r\n\r\n    this.tags = newTags;\r\n  }\r\n\r\n  loadRotationFromNbtTag(rotationTag: NbtBinaryTag) {\r\n    const entityRotChildren = rotationTag.getTagChildren();\r\n\r\n    if (entityRotChildren.length === 2) {\r\n      this.rotation.yaw = entityRotChildren[0].valueAsFloat;\r\n      this.rotation.pitch = entityRotChildren[1].valueAsFloat;\r\n    } else {\r\n      Log.debugAlert(\"Unexpected rotation\");\r\n    }\r\n  }\r\n\r\n  loadLocationFromNbtTag(locationTag: NbtBinaryTag) {\r\n    const tagChildren = locationTag.getTagChildren();\r\n\r\n    if (tagChildren.length === 3) {\r\n      this.location.x = tagChildren[0].valueAsFloat;\r\n      this.location.y = tagChildren[1].valueAsFloat;\r\n      this.location.z = tagChildren[2].valueAsFloat;\r\n    } else {\r\n      Log.debugAlert(\"Unexpected pos\");\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockVolumePlane from \"./BlockVolumePlane\";\r\nimport Block from \"./Block\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IBlockVolumeColumn from \"./IBlockVolumeColumn\";\r\nimport IDimension from \"./IDimension\";\r\nimport BlockLocation from \"./BlockLocation\";\r\nimport Entity from \"./Entity\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class BlockVolume implements IDimension {\r\n  _maxX: number = 1;\r\n  _maxY: number = 1;\r\n  _maxZ: number = 1;\r\n\r\n  private _onMaxDimensionsChanged = new EventDispatcher<BlockVolume, string>();\r\n  private _onBlockTypeChanged = new EventDispatcher<BlockVolume, Block>();\r\n  private _onBlockPropertyChanged = new EventDispatcher<BlockVolume, Block>();\r\n\r\n  private _columns: IBlockVolumeColumn[][] | undefined;\r\n\r\n  private _entities: Entity[] = [];\r\n\r\n  public get onMaxDimensionsChanged() {\r\n    return this._onMaxDimensionsChanged.asEvent();\r\n  }\r\n\r\n  public get onBlockTypeChanged() {\r\n    return this._onBlockTypeChanged.asEvent();\r\n  }\r\n\r\n  public get onBlockPropertyChanged() {\r\n    return this._onBlockPropertyChanged.asEvent();\r\n  }\r\n\r\n  get columns() {\r\n    if (this._columns === undefined) {\r\n      this._columns = this._generateColumnInfo();\r\n    }\r\n\r\n    return this._columns;\r\n  }\r\n\r\n  get maxX() {\r\n    return this._maxX;\r\n  }\r\n\r\n  get maxY() {\r\n    return this._maxY;\r\n  }\r\n\r\n  get maxZ() {\r\n    return this._maxZ;\r\n  }\r\n\r\n  set maxX(newMaxX: number) {\r\n    this._maxX = newMaxX;\r\n\r\n    this._onMaxDimensionsChanged.dispatch(this, \"x\");\r\n  }\r\n\r\n  set maxY(newMaxY: number) {\r\n    this._maxY = newMaxY;\r\n\r\n    this._onMaxDimensionsChanged.dispatch(this, \"y\");\r\n  }\r\n\r\n  set maxZ(newMaxZ: number) {\r\n    this._maxZ = newMaxZ;\r\n\r\n    this._onMaxDimensionsChanged.dispatch(this, \"z\");\r\n  }\r\n\r\n  setMaxDimensions(newMaxX: number, newMaxY: number, newMaxZ: number) {\r\n    this._maxX = newMaxX;\r\n    this._maxY = newMaxY;\r\n    this._maxZ = newMaxZ;\r\n\r\n    this._onMaxDimensionsChanged.dispatch(this, \"xyz\");\r\n  }\r\n\r\n  planes: BlockVolumePlane[];\r\n\r\n  constructor() {\r\n    this.planes = [];\r\n  }\r\n\r\n  spawnEntity(entityTypeId: string, location: BlockLocation) {\r\n    const e = new Entity();\r\n\r\n    return e;\r\n  }\r\n\r\n  getBlock(location: BlockLocation) {\r\n    Log.assert(\r\n      location.x >= 0 &&\r\n        location.x <= this.maxX &&\r\n        location.y >= 0 &&\r\n        location.x <= this.maxY &&\r\n        location.z >= 0 &&\r\n        location.z <= this.maxZ,\r\n      \"Block location not within bounds.\"\r\n    );\r\n\r\n    return this.x(location.x).y(location.y).z(location.z);\r\n  }\r\n\r\n  getCommandList(fromX: number, fromY: number, fromZ: number) {\r\n    const commands: string[] = [];\r\n\r\n    for (let x = 0; x < this.maxX; x++) {\r\n      for (let y = 0; y < this.maxY; y++) {\r\n        for (let z = 0; z < this.maxZ; z++) {\r\n          const block = this.x(x).y(y).z(z);\r\n\r\n          if (!block.isEmpty) {\r\n            commands.push(\"setblock ~\" + (fromX + x) + \" ~\" + (fromY + y) + \" ~\" + (fromZ + z) + \" \" + block.typeName);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return commands;\r\n  }\r\n\r\n  _generateColumnInfo() {\r\n    const newColumns: IBlockVolumeColumn[][] = new Array(this.maxZ);\r\n\r\n    for (let z = 0; z < this.maxY; z++) {\r\n      newColumns[z] = new Array(this.maxX);\r\n\r\n      for (let x = 0; x < this.maxX; x++) {\r\n        const blockX = this.x(x);\r\n        let foundOpaqueTop = false;\r\n        let foundContiguousTop = false;\r\n        let opaqueTop = 0;\r\n        let contiguousTop = 0;\r\n        let top = 0;\r\n\r\n        for (let y = 0; z < this.maxY; y++) {\r\n          const block = blockX.y(y).z(z);\r\n\r\n          if (!block.isEmpty && block.isOpaque && !foundOpaqueTop) {\r\n            opaqueTop++;\r\n          } else if (!block.isEmpty) {\r\n            if (!foundContiguousTop) {\r\n              contiguousTop++;\r\n            }\r\n\r\n            top = y;\r\n\r\n            if (!block.isOpaque) {\r\n              foundOpaqueTop = true;\r\n            }\r\n          } else {\r\n            foundOpaqueTop = true;\r\n            foundContiguousTop = true;\r\n          }\r\n        }\r\n\r\n        newColumns[x][z] = {\r\n          contiguousHeight: contiguousTop,\r\n          height: top,\r\n          opaqueHeight: opaqueTop,\r\n        };\r\n      }\r\n    }\r\n\r\n    return newColumns;\r\n  }\r\n\r\n  _notifyBlockTypeChanged(block: Block) {\r\n    this._columns = undefined;\r\n\r\n    this._onBlockTypeChanged.dispatch(this, block);\r\n  }\r\n\r\n  _notifyBlockPropertyChanged(block: Block) {\r\n    this._onBlockPropertyChanged.dispatch(this, block);\r\n  }\r\n\r\n  x(int: number): BlockVolumePlane {\r\n    if (int > this.maxX) {\r\n      throw new Error(\"Value exceeds maximum X\");\r\n    }\r\n\r\n    while (int >= this.planes.length) {\r\n      const newX = this.planes.length;\r\n      this.planes[newX] = new BlockVolumePlane(this, newX);\r\n    }\r\n\r\n    return this.planes[int];\r\n  }\r\n\r\n  fillEmpty(blockTypeId: string, xFrom: number, yFrom: number, zFrom: number, xTo: number, yTo: number, zTo: number) {\r\n    for (let x = xFrom; x <= xTo; x++) {\r\n      for (let y = yFrom; y <= yTo; y++) {\r\n        let block = this.x(x).y(y).z(zFrom);\r\n\r\n        block.typeName = blockTypeId;\r\n\r\n        block = this.x(x).y(y).z(zTo);\r\n\r\n        block.typeName = blockTypeId;\r\n      }\r\n    }\r\n\r\n    for (let y = yFrom; y <= yTo; y++) {\r\n      for (let z = zFrom + 1; z < zTo; z++) {\r\n        let block = this.x(xFrom).y(y).z(z);\r\n\r\n        block.typeName = blockTypeId;\r\n\r\n        block = this.x(xTo).y(y).z(z);\r\n\r\n        block.typeName = blockTypeId;\r\n      }\r\n    }\r\n  }\r\n\r\n  fill(blockTypeId: string, xFrom: number, yFrom: number, zFrom: number, xTo: number, yTo: number, zTo: number) {\r\n    for (let x = xFrom; x <= xTo; x++) {\r\n      for (let y = yFrom; y <= yTo; y++) {\r\n        for (let z = zFrom; z <= zTo; z++) {\r\n          const block = this.x(x).y(y).z(z);\r\n\r\n          block.typeName = blockTypeId;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  fillY(blockTypeId: string, y: number) {\r\n    for (let x = 0; x < this.maxX; x++) {\r\n      const zSlice = this.x(x).y(y);\r\n\r\n      for (let z = 0; z < this.maxZ; z++) {\r\n        const block = zSlice.z(z);\r\n\r\n        block.typeName = blockTypeId;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Resizes the volume to new dimensions, preserving existing block data\r\n   * within the overlapping region. Growth fills with air; blocks outside\r\n   * shrunken bounds are discarded. Corner-anchored (origin stays at 0,0,0).\r\n   */\r\n  resize(newMaxX: number, newMaxY: number, newMaxZ: number) {\r\n    const oldMaxX = this._maxX;\r\n    const oldMaxY = this._maxY;\r\n    const oldMaxZ = this._maxZ;\r\n    const oldPlanes = this.planes;\r\n\r\n    // Create fresh planes array\r\n    this.planes = [];\r\n    this._maxX = newMaxX;\r\n    this._maxY = newMaxY;\r\n    this._maxZ = newMaxZ;\r\n\r\n    // Copy blocks from old data where coordinates exist in both old and new bounds\r\n    const copyX = Math.min(oldMaxX, newMaxX);\r\n    const copyY = Math.min(oldMaxY, newMaxY);\r\n    const copyZ = Math.min(oldMaxZ, newMaxZ);\r\n\r\n    for (let xI = 0; xI < copyX; xI++) {\r\n      if (xI >= oldPlanes.length) {\r\n        break;\r\n      }\r\n      const oldPlane = oldPlanes[xI];\r\n\r\n      for (let yI = 0; yI < copyY; yI++) {\r\n        if (yI >= oldPlane.lines.length) {\r\n          break;\r\n        }\r\n        const oldLine = oldPlane.lines[yI];\r\n\r\n        for (let zI = 0; zI < copyZ; zI++) {\r\n          if (zI >= oldLine.blocks.length) {\r\n            break;\r\n          }\r\n          const oldBlock = oldLine.blocks[zI];\r\n\r\n          if (oldBlock && !oldBlock.isEmpty) {\r\n            const newBlock = this.x(xI).y(yI).z(zI);\r\n            newBlock.typeName = oldBlock.typeName;\r\n\r\n            if (oldBlock.properties) {\r\n              for (const key in oldBlock.properties) {\r\n                const prop = oldBlock.properties[key];\r\n                if (prop && prop.value !== undefined) {\r\n                  newBlock.ensureProperty(key).value = prop.value;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this._columns = undefined;\r\n    this._onMaxDimensionsChanged.dispatch(this, \"xyz\");\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class DataUtilities {\r\n  static getUnsignedInteger(num1: number, num2: number, num3: number, num4: number, littleEndian: boolean): number {\r\n    // Ensure inputs are valid bytes and convert to unsigned 32-bit result\r\n    let result: number;\r\n    if (littleEndian) {\r\n      result = ((num4 & 0xff) << 24) | ((num3 & 0xff) << 16) | ((num2 & 0xff) << 8) | (num1 & 0xff);\r\n    } else {\r\n      result = ((num1 & 0xff) << 24) | ((num2 & 0xff) << 16) | ((num3 & 0xff) << 8) | (num4 & 0xff);\r\n    }\r\n    // Convert to unsigned 32-bit by using unsigned right shift\r\n    return result >>> 0;\r\n  }\r\n\r\n  static writeUnsignedInteger(data: Uint8Array, index: number, value: number, littleEndian: boolean) {\r\n    const view = new DataView(data.buffer, index, 4);\r\n\r\n    view.setUint32(0, value, littleEndian);\r\n  }\r\n\r\n  static getFloat(num1: number, num2: number, num3: number, num4: number, littleEndian: boolean): number {\r\n    // Get the 32-bit integer representation first\r\n    let intValue: number;\r\n    if (littleEndian) {\r\n      intValue = ((num4 & 0xff) << 24) | ((num3 & 0xff) << 16) | ((num2 & 0xff) << 8) | (num1 & 0xff);\r\n    } else {\r\n      intValue = ((num1 & 0xff) << 24) | ((num2 & 0xff) << 16) | ((num3 & 0xff) << 8) | (num4 & 0xff);\r\n    }\r\n\r\n    // Use Float32Array to convert the bit pattern to float\r\n    const floatArray = new Float32Array(1);\r\n    const intArray = new Uint32Array(floatArray.buffer);\r\n    intArray[0] = intValue >>> 0; // Ensure unsigned\r\n    return floatArray[0];\r\n  }\r\n\r\n  static getSignedLong(\r\n    num1: number,\r\n    num2: number,\r\n    num3: number,\r\n    num4: number,\r\n    num5: number,\r\n    num6: number,\r\n    num7: number,\r\n    num8: number,\r\n    littleEndian: boolean\r\n  ): bigint {\r\n    // For 64-bit values, we need to use BigInt to maintain precision\r\n    // Convert each byte to BigInt and shift appropriately\r\n    const bytes = [num1, num2, num3, num4, num5, num6, num7, num8];\r\n\r\n    let result = 0n;\r\n    if (littleEndian) {\r\n      // Little endian: least significant byte first\r\n      for (let i = 7; i >= 0; i--) {\r\n        result = (result << 8n) | BigInt(bytes[i] & 0xff);\r\n      }\r\n    } else {\r\n      // Big endian: most significant byte first\r\n      for (let i = 0; i < 8; i++) {\r\n        result = (result << 8n) | BigInt(bytes[i] & 0xff);\r\n      }\r\n    }\r\n\r\n    // Convert to signed 64-bit value\r\n    // If the sign bit is set, subtract 2^64\r\n    if (result >= 0x8000000000000000n) {\r\n      result = result - 0x10000000000000000n;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  static getVarInt(data: Uint8Array, index: number) {\r\n    // most significant group first?\r\n    let bytesRead = 0;\r\n    let result = 0;\r\n    let currentByte = 0;\r\n\r\n    do {\r\n      currentByte = data[index];\r\n\r\n      const currentByteVal = currentByte & 0b01111111;\r\n\r\n      result |= currentByteVal << (7 * bytesRead);\r\n\r\n      bytesRead++;\r\n\r\n      if (bytesRead > 5) {\r\n        throw new Error(\"VarInt is unexpectedly large\");\r\n      }\r\n    } while ((currentByte & 0b10000000) !== 0);\r\n\r\n    return {\r\n      value: result,\r\n      bytesRead: bytesRead,\r\n    };\r\n  }\r\n\r\n  static getSignedShort(num1: number, num2: number, littleEndian: boolean): number {\r\n    // Get unsigned 16-bit value first\r\n    let value: number;\r\n    if (littleEndian) {\r\n      value = ((num2 & 0xff) << 8) | (num1 & 0xff);\r\n    } else {\r\n      value = ((num1 & 0xff) << 8) | (num2 & 0xff);\r\n    }\r\n\r\n    // Convert to signed 16-bit value\r\n    return value & 0x8000 ? value - 0x10000 : value;\r\n  }\r\n\r\n  static getUnsignedShort(num1: number, num2: number, littleEndian: boolean): number {\r\n    // Direct bitwise operations for 16-bit unsigned value\r\n    if (littleEndian) {\r\n      return ((num2 & 0xff) << 8) | (num1 & 0xff);\r\n    } else {\r\n      return ((num1 & 0xff) << 8) | (num2 & 0xff);\r\n    }\r\n  }\r\n\r\n  static getSignedInteger(num1: number, num2: number, num3: number, num4: number, littleEndian: boolean): number {\r\n    // Get unsigned 32-bit value first\r\n    let value: number;\r\n    if (littleEndian) {\r\n      value = ((num4 & 0xff) << 24) | ((num3 & 0xff) << 16) | ((num2 & 0xff) << 8) | (num1 & 0xff);\r\n    } else {\r\n      value = ((num1 & 0xff) << 24) | ((num2 & 0xff) << 16) | ((num3 & 0xff) << 8) | (num4 & 0xff);\r\n    }\r\n\r\n    // Convert to signed 32-bit value using JavaScript's signed right shift\r\n    return value | 0;\r\n  }\r\n\r\n  static getSignedByte(value: number): number {\r\n    // Convert to signed 8-bit value\r\n    return value & 0x80 ? value - 0x100 : value;\r\n  }\r\n\r\n  static getSignedDouble(\r\n    num1: number,\r\n    num2: number,\r\n    num3: number,\r\n    num4: number,\r\n    num5: number,\r\n    num6: number,\r\n    num7: number,\r\n    num8: number,\r\n    littleEndian: boolean\r\n  ) {\r\n    const buffer = new ArrayBuffer(8);\r\n    const bytes = new Uint8Array(buffer);\r\n\r\n    bytes[0] = num1;\r\n    bytes[1] = num2;\r\n    bytes[2] = num3;\r\n    bytes[3] = num4;\r\n    bytes[4] = num5;\r\n    bytes[5] = num6;\r\n    bytes[6] = num7;\r\n    bytes[7] = num8;\r\n\r\n    const view = new DataView(buffer);\r\n\r\n    return view.getFloat64(0, littleEndian);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport NbtBinaryTag, { NbtTagType } from \"./NbtBinaryTag\";\r\nimport Utilities from \"./../core/Utilities\";\r\nimport INbtTag from \"./INbtTag\";\r\nimport Log from \"../core/Log\";\r\nimport { IErrorMessage, IErrorable } from \"../core/IErrorable\";\r\nimport DataUtilities from \"../core/DataUtilities\";\r\n\r\nexport default class NbtBinary implements IErrorable {\r\n  roots: NbtBinaryTag[] | null = null;\r\n  context?: string;\r\n  isInErrorState?: boolean;\r\n  errorMessages?: IErrorMessage[];\r\n\r\n  static readonly MAX_ARRAY_LENGTH = 10_000_000;\r\n  static readonly MAX_STRING_LENGTH = 1_000_000;\r\n\r\n  get singleRoot() {\r\n    if (this.roots === null) {\r\n      return null;\r\n    }\r\n\r\n    if (this.roots.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    if (this.roots.length !== 1) {\r\n      this._pushError(\"Unexpectedly did not find a single root (\" + this.roots.length + \")\");\r\n    }\r\n\r\n    return this.roots[0];\r\n  }\r\n\r\n  private _pushError(message: string, contextIn?: string) {\r\n    this.isInErrorState = true;\r\n\r\n    if (this.errorMessages === undefined) {\r\n      this.errorMessages = [];\r\n    }\r\n\r\n    let contextOut = undefined;\r\n\r\n    if (contextIn) {\r\n      contextOut = this.context ? this.context + \"-\" + contextIn : contextIn;\r\n    } else {\r\n      contextOut = this.context;\r\n    }\r\n\r\n    Log.error(message + (contextOut ? \" \" + contextOut : \"\"));\r\n\r\n    this.errorMessages.push({\r\n      message: message,\r\n      context: contextOut,\r\n    });\r\n  }\r\n\r\n  private _getVarInt(data: Uint8Array, index: number) {\r\n    let bytesRead = 0;\r\n    let result = 0;\r\n    let currentByte = 0;\r\n\r\n    do {\r\n      currentByte = data[index];\r\n\r\n      const currentByteVal = currentByte & 0b01111111;\r\n\r\n      result |= currentByteVal << (7 * bytesRead);\r\n\r\n      bytesRead++;\r\n\r\n      if (bytesRead > 5) {\r\n        throw new Error(\"VarInt is unexpectedly large\");\r\n      }\r\n    } while ((currentByte & 0b10000000) !== 0);\r\n\r\n    return {\r\n      value: result,\r\n      bytesRead: bytesRead,\r\n    };\r\n  }\r\n\r\n  getJsonString() {\r\n    return JSON.stringify(this.getJson());\r\n  }\r\n\r\n  getJson(): INbtTag {\r\n    if (this.roots === null) {\r\n      return {};\r\n    }\r\n\r\n    if (this.roots.length === 1) {\r\n      return this.roots[0].getJson();\r\n    }\r\n\r\n    throw new Error(\"Unexpected multiple roots.\");\r\n  }\r\n\r\n  toBinary(): Uint8Array | undefined {\r\n    if (this.roots === undefined || this.roots === null) {\r\n      return undefined;\r\n    }\r\n\r\n    let byteSize = 0;\r\n    for (let i = 0; i < this.roots.length; i++) {\r\n      byteSize += this.roots[i].getByteSize();\r\n    }\r\n    const ab = new ArrayBuffer(byteSize);\r\n    const bytes = new Uint8Array(ab);\r\n\r\n    let bytesWrittenAll = 0;\r\n\r\n    for (let i = 0; i < this.roots.length; i++) {\r\n      bytesWrittenAll += this.roots[i].writeBytes(bytes, bytesWrittenAll, true);\r\n    }\r\n\r\n    Log.assert(bytesWrittenAll === byteSize, \"Unexpectedly did not write full NBT.\");\r\n\r\n    return bytes;\r\n  }\r\n\r\n  ensureSingleRoot() {\r\n    if (this.roots) {\r\n      if (this.roots.length !== 1) {\r\n        throw new Error(\"Unexpected root count.\");\r\n      }\r\n\r\n      return this.roots[0];\r\n    }\r\n\r\n    this.roots = [];\r\n\r\n    this.roots.push(new NbtBinaryTag(NbtTagType.compound, \"\", false));\r\n\r\n    return this.roots[0];\r\n  }\r\n\r\n  fromBinary(\r\n    data: Uint8Array,\r\n    littleEndian: boolean,\r\n    isVarint: boolean,\r\n    skipBytes?: number,\r\n    stringsAreASCII?: boolean,\r\n    processAsList?: boolean\r\n  ) {\r\n    const tagStack: NbtBinaryTag[] = [];\r\n    const listCountStack: number[] = [];\r\n    const listTypeStack: NbtTagType[] = [];\r\n\r\n    this.roots = [];\r\n\r\n    let i = 0;\r\n\r\n    if (skipBytes !== undefined) {\r\n      i = skipBytes;\r\n    }\r\n    if (!stringsAreASCII) {\r\n      stringsAreASCII = false;\r\n    }\r\n\r\n    while (i < data.length) {\r\n      let tagType: NbtTagType = NbtTagType.unknown;\r\n      let name = \"\";\r\n\r\n      let isListChild = false;\r\n\r\n      if (tagStack.length === 0 || tagStack[tagStack.length - 1].type !== NbtTagType.list) {\r\n        tagType = data[i++] as NbtTagType;\r\n\r\n        if (tagType > 13 && tagType !== 99) {\r\n          this._pushError(\"Unexpected NBT tag type: \" + tagType);\r\n        }\r\n\r\n        if (tagType !== NbtTagType.end) {\r\n          let nameLength = 0;\r\n\r\n          if (isVarint) {\r\n            const result = this._getVarInt(data, i);\r\n            nameLength = result.value;\r\n            i += result.bytesRead;\r\n          } else {\r\n            nameLength = data[i++];\r\n            nameLength += data[i++] * 256;\r\n          }\r\n\r\n          if (nameLength < 0 || nameLength > NbtBinary.MAX_STRING_LENGTH) {\r\n            this._pushError(\"Invalid NBT name length: \" + nameLength);\r\n            return 0;\r\n          }\r\n\r\n          for (let j = 0; j < nameLength; j++) {\r\n            if (i >= data.length) {\r\n              this._pushError(\"Unexpected end of data while reading NBT name\");\r\n              return 0;\r\n            }\r\n            name += String.fromCharCode(data[i++]);\r\n          }\r\n        } else if (tagStack.length === 0) {\r\n          break;\r\n        }\r\n      } // we're in list sub tag parsing mode\r\n      else {\r\n        tagType = listTypeStack[tagStack.length - 1];\r\n        isListChild = true;\r\n      }\r\n\r\n      const activeTag = new NbtBinaryTag(tagType, name, isListChild);\r\n\r\n      if (tagStack.length === 0) {\r\n        this.roots.push(activeTag);\r\n      } // if (activeTag.type !== NbtTagType.end)\r\n      else {\r\n        const parentTag = tagStack[tagStack.length - 1];\r\n\r\n        if (\r\n          parentTag.type === NbtTagType.list &&\r\n          (parentTag.childTagType === undefined || parentTag.childTagType === NbtTagType.unknown)\r\n        ) {\r\n          parentTag.childTagType = activeTag.type;\r\n        }\r\n\r\n        parentTag.childrenWithEnd.push(activeTag);\r\n      }\r\n\r\n      if (tagStack.length > 0 && tagStack[tagStack.length - 1].type === NbtTagType.list) {\r\n        listCountStack[tagStack.length - 1]--;\r\n\r\n        if (listCountStack[tagStack.length - 1] === 0) {\r\n          tagStack.pop();\r\n        }\r\n      }\r\n\r\n      if (activeTag.type === NbtTagType.compound) {\r\n        tagStack.push(activeTag);\r\n      } else if (activeTag.type === NbtTagType.end) {\r\n        tagStack.pop();\r\n        if (tagStack.length === 0 && !processAsList) {\r\n          break;\r\n        }\r\n      } else if (activeTag.type === NbtTagType.byte) {\r\n        activeTag.value = DataUtilities.getSignedByte(data[i++]);\r\n      } else if (activeTag.type === NbtTagType.byteArray) {\r\n        const arrayLength = DataUtilities.getSignedInteger(data[i++], data[i++], data[i++], data[i++], littleEndian);\r\n\r\n        if (arrayLength < 0 || arrayLength > NbtBinary.MAX_ARRAY_LENGTH || i + arrayLength > data.length) {\r\n          this._pushError(\"Invalid NBT byteArray length: \" + arrayLength);\r\n          return 0;\r\n        }\r\n\r\n        const numberArray: number[] = [];\r\n\r\n        for (let j = 0; j < arrayLength; j++) {\r\n          numberArray.push(DataUtilities.getSignedByte(data[i++]));\r\n        }\r\n\r\n        activeTag.value = numberArray;\r\n      } else if (activeTag.type === NbtTagType.list) {\r\n        activeTag.type = NbtTagType.list;\r\n        tagStack.push(activeTag);\r\n\r\n        listTypeStack[tagStack.length - 1] = data[i++] as NbtTagType;\r\n        listCountStack[tagStack.length - 1] = DataUtilities.getSignedInteger(\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          littleEndian\r\n        );\r\n      } else if (activeTag.type === NbtTagType.intArray) {\r\n        const arrayLength = DataUtilities.getSignedInteger(data[i++], data[i++], data[i++], data[i++], littleEndian);\r\n\r\n        if (arrayLength < 0 || arrayLength > NbtBinary.MAX_ARRAY_LENGTH || i + arrayLength * 4 > data.length) {\r\n          this._pushError(\"Invalid NBT intArray length: \" + arrayLength);\r\n          return 0;\r\n        }\r\n\r\n        const numberArray: number[] = [];\r\n\r\n        for (let j = 0; j < arrayLength; j++) {\r\n          numberArray.push(DataUtilities.getSignedInteger(data[i++], data[i++], data[i++], data[i++], littleEndian));\r\n        }\r\n\r\n        activeTag.value = numberArray;\r\n      } else if (activeTag.type === NbtTagType.longArray) {\r\n        const arrayLength = DataUtilities.getSignedInteger(data[i++], data[i++], data[i++], data[i++], littleEndian);\r\n\r\n        if (arrayLength < 0 || arrayLength > NbtBinary.MAX_ARRAY_LENGTH || i + arrayLength * 8 > data.length) {\r\n          this._pushError(\"Invalid NBT longArray length: \" + arrayLength);\r\n          return 0;\r\n        }\r\n\r\n        const numberArray: bigint[] = [];\r\n\r\n        for (let j = 0; j < arrayLength; j++) {\r\n          numberArray.push(\r\n            DataUtilities.getSignedLong(\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              littleEndian\r\n            )\r\n          );\r\n        }\r\n\r\n        activeTag.value = numberArray;\r\n      } else if (activeTag.type === NbtTagType.short) {\r\n        activeTag.value = DataUtilities.getSignedShort(data[i++], data[i++], littleEndian);\r\n      } else if (activeTag.type === NbtTagType.int) {\r\n        activeTag.value = DataUtilities.getSignedInteger(data[i++], data[i++], data[i++], data[i++], littleEndian);\r\n      } else if (activeTag.type === NbtTagType.float) {\r\n        activeTag.value = DataUtilities.getFloat(data[i++], data[i++], data[i++], data[i++], littleEndian);\r\n      } else if (activeTag.type === NbtTagType.double) {\r\n        activeTag.value = DataUtilities.getSignedDouble(\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          littleEndian\r\n        );\r\n      } else if (activeTag.type === NbtTagType.long) {\r\n        activeTag.value = DataUtilities.getSignedLong(\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          littleEndian\r\n        );\r\n      } else if (activeTag.type === NbtTagType.string) {\r\n        let stringLength = 0;\r\n\r\n        if (isVarint) {\r\n          const result = this._getVarInt(data, i);\r\n\r\n          stringLength = result.value;\r\n\r\n          i += result.bytesRead;\r\n        } else {\r\n          stringLength = DataUtilities.getUnsignedShort(data[i++], data[i++], littleEndian);\r\n        }\r\n\r\n        const view = new DataView(data.buffer);\r\n        let str: string | undefined;\r\n\r\n        if (stringsAreASCII) {\r\n          str = Utilities.readStringASCIIBuffer(data, i, stringLength);\r\n        } else {\r\n          str = Utilities.getString(view, i, stringLength, \"UTF8\");\r\n        }\r\n\r\n        if (str === undefined) {\r\n          throw new Error(\"Unexpectedly could not read a string.\");\r\n        }\r\n\r\n        activeTag.value = str;\r\n        i += stringLength;\r\n        Log.assert(i <= data.length, \"NBTFB\");\r\n\r\n        /*\r\n                let valueString = \"\";\r\n\r\n                for (let j=0; j<stringLength; j++)\r\n                {\r\n                    valueString += String.fromCharCode(data[i++]);\r\n                }\r\n\r\n                activeTag.value = valueString;*/\r\n      } else {\r\n        Log.unexpectedError(\"Unsupported NBT tag type '\" + activeTag.type + \"'\");\r\n      }\r\n    }\r\n\r\n    let bytesRead = i;\r\n    if (skipBytes !== undefined) {\r\n      bytesRead -= skipBytes;\r\n    }\r\n\r\n    return bytesRead;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class InventorySlot {\r\n  name?: string;\r\n  count?: number;\r\n  slot: number;\r\n  wasPickedUp?: boolean;\r\n  damage?: number;\r\n\r\n  constructor(slotIndex: number) {\r\n    this.slot = slotIndex;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class ComponentBase {\r\n  id?: string;\r\n  [propertyId: string]: string | number | number[] | bigint | bigint[] | boolean | object | undefined;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IComponent from \"../IComponent\";\r\nimport InventorySlot from \"../InventorySlot\";\r\nimport NbtBinaryTag from \"../NbtBinaryTag\";\r\nimport Log from \"../../core/Log\";\r\nimport ComponentBase from \"../ComponentBase\";\r\n\r\nexport default class EntityInventoryComponent extends ComponentBase implements IComponent {\r\n  slots: { [slotIndex: number]: InventorySlot };\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    this.slots = {};\r\n  }\r\n\r\n  ensureSlot(slotIndex: number) {\r\n    let slot = this.slots[slotIndex];\r\n\r\n    if (slot === undefined) {\r\n      slot = new InventorySlot(slotIndex);\r\n\r\n      this.slots[slotIndex] = slot;\r\n    }\r\n\r\n    return slot;\r\n  }\r\n\r\n  loadFromNbtTag(tag: NbtBinaryTag) {\r\n    const childSlotTags = tag.getTagChildren();\r\n\r\n    for (let k = 0; k < childSlotTags.length; k++) {\r\n      const childSlotTag = childSlotTags[k];\r\n      const slotIndexTag = childSlotTag.find(\"Slot\");\r\n      const nameTag = childSlotTag.find(\"Name\");\r\n      const countTag = childSlotTag.find(\"Count\");\r\n      const wasPickedUpTag = childSlotTag.find(\"WasPickedUp\");\r\n      const damageTag = childSlotTag.find(\"Damage\");\r\n\r\n      if (\r\n        nameTag !== null &&\r\n        nameTag.value !== null &&\r\n        countTag !== null &&\r\n        countTag !== null &&\r\n        damageTag !== null &&\r\n        damageTag.value !== null &&\r\n        wasPickedUpTag !== null &&\r\n        wasPickedUpTag.value !== null\r\n      ) {\r\n        let slotIndex = k;\r\n\r\n        if (slotIndexTag !== null) {\r\n          slotIndex = slotIndexTag.valueAsInt;\r\n        }\r\n\r\n        const slot = this.ensureSlot(slotIndex);\r\n\r\n        slot.name = nameTag.valueAsString;\r\n        slot.count = countTag.valueAsInt;\r\n        slot.wasPickedUp = wasPickedUpTag.valueAsBoolean;\r\n        slot.damage = damageTag.valueAsInt;\r\n      } else {\r\n        Log.fail(\"Unexpected inventory item in structure.\");\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockVolume from \"./BlockVolume\";\r\nimport NbtBinary from \"./NbtBinary\";\r\nimport { NbtTagType } from \"./NbtBinaryTag\";\r\nimport ISnbtContent from \"./ISnbtContent\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport ISnbtBlock from \"./ISnbtBlock\";\r\nimport Block from \"./Block\";\r\nimport Entity from \"./Entity\";\r\nimport Log from \"../core/Log\";\r\nimport Database from \"./Database\";\r\nimport EntityInventoryComponent from \"./components/EntityInventoryComponent\";\r\n\r\nexport default class Structure {\r\n  private _cube: BlockVolume | undefined;\r\n  private _entities: Entity[] | undefined;\r\n  private _blockPalette: Block[] = [];\r\n  public nbt: NbtBinary | undefined;\r\n\r\n  public defaultBlockPersistenceVersion: number = 17879555;\r\n\r\n  public originX: number | undefined;\r\n  public originY: number | undefined;\r\n  public originZ: number | undefined;\r\n\r\n  get cube() {\r\n    return this._cube;\r\n  }\r\n\r\n  set cube(newCube: BlockVolume | undefined) {\r\n    this._cube = newCube;\r\n  }\r\n\r\n  get entities() {\r\n    return this._entities;\r\n  }\r\n\r\n  shallowCopyFrom(structure: Structure) {\r\n    this.cube = structure.cube;\r\n    this._entities = structure.entities;\r\n    this.originX = structure.originX;\r\n    this.originY = structure.originY;\r\n    this.originZ = structure.originZ;\r\n  }\r\n\r\n  createNbt() {\r\n    if (this._cube === undefined) {\r\n      return;\r\n    }\r\n\r\n    const nbt = new NbtBinary();\r\n\r\n    const root = nbt.ensureSingleRoot();\r\n\r\n    root.addTag(NbtTagType.int, \"format_version\").value = 1;\r\n\r\n    const sizeList = root.addTag(NbtTagType.list, \"size\");\r\n    sizeList.childTagType = NbtTagType.unknown;\r\n\r\n    sizeList.addTag(NbtTagType.int).value = this._cube.maxX;\r\n    sizeList.addTag(NbtTagType.int).value = this._cube.maxY;\r\n    sizeList.addTag(NbtTagType.int).value = this._cube.maxZ;\r\n\r\n    const structure = root.addTag(NbtTagType.compound, \"structure\");\r\n\r\n    const blockIndices = structure.addTag(NbtTagType.list, \"block_indices\");\r\n    const primaryLayer = blockIndices.addTag(NbtTagType.list);\r\n    const secondaryLayer = blockIndices.addTag(NbtTagType.list);\r\n\r\n    const blockPalette: { [blockId: string]: number } = {};\r\n    const paletteBlocks: Block[] = [];\r\n\r\n    for (let x = 0; x < this._cube.maxX; x++) {\r\n      for (let y = 0; y < this._cube.maxY; y++) {\r\n        for (let z = 0; z < this._cube.maxZ; z++) {\r\n          const block = this._cube.x(x).y(y).z(z);\r\n\r\n          const blockFingerprint = block.toString();\r\n\r\n          let paletteId = blockPalette[blockFingerprint];\r\n\r\n          if (block.typeName == null || block.typeName === \"air\") {\r\n            paletteId = -1;\r\n          } else if (paletteId == null) {\r\n            paletteId = paletteBlocks.length;\r\n            blockPalette[blockFingerprint] = paletteId;\r\n            paletteBlocks.push(block);\r\n          }\r\n\r\n          primaryLayer.addTag(NbtTagType.int).value = paletteId;\r\n          secondaryLayer.addTag(NbtTagType.int).value = block.extraLiquidDepth;\r\n        }\r\n      }\r\n    }\r\n\r\n    /*const entities = */ structure.addTag(NbtTagType.list, \"entities\");\r\n\r\n    if (this._entities !== undefined) {\r\n    }\r\n\r\n    const palette = structure.addTag(NbtTagType.compound, \"palette\");\r\n\r\n    structure.addTag(NbtTagType.end);\r\n\r\n    const paletteDefault = palette.addTag(NbtTagType.compound, \"default\");\r\n\r\n    palette.addTag(NbtTagType.end);\r\n\r\n    const blockStates = paletteDefault.addTag(NbtTagType.list, \"block_palette\");\r\n\r\n    for (let i = 0; i < paletteBlocks.length; i++) {\r\n      const block = paletteBlocks[i];\r\n\r\n      if (block.typeName == null) {\r\n        throw new Error(\"Unexpected palette block.\");\r\n      }\r\n\r\n      const blockState = blockStates.addTag(NbtTagType.compound);\r\n\r\n      blockState.addTag(NbtTagType.string, \"name\").value = block.typeName;\r\n\r\n      const blockStateStates = blockState.addTag(NbtTagType.compound, \"states\");\r\n\r\n      for (const propertyName in block.properties) {\r\n        const blockProperty = block.getProperty(propertyName);\r\n\r\n        const propType = blockProperty.nbtType;\r\n        const value = blockProperty.value;\r\n\r\n        if (value === undefined) {\r\n          blockStateStates.addTag(propType, propertyName).value = null;\r\n        } else {\r\n          blockStateStates.addTag(propType, propertyName).value = value;\r\n        }\r\n      }\r\n\r\n      let version = block.persistenceVersion;\r\n\r\n      if (version <= 0) {\r\n        version = this.defaultBlockPersistenceVersion;\r\n      }\r\n\r\n      blockState.addTag(NbtTagType.int, \"version\").value = version;\r\n      blockState.addTag(NbtTagType.end);\r\n    }\r\n\r\n    // TODO: add block_position_data here to paletteDefault;\r\n    const blockPositionData = paletteDefault.addTag(NbtTagType.compound, \"block_position_data\");\r\n    blockPositionData.addTag(NbtTagType.end);\r\n\r\n    paletteDefault.addTag(NbtTagType.end);\r\n\r\n    if (this.originX !== undefined && this.originY !== undefined && this.originZ !== undefined) {\r\n      const structureOrigin = root.addTag(NbtTagType.list, \"structure_world_origin\");\r\n\r\n      structureOrigin.addTag(NbtTagType.int).value = this.originX;\r\n      structureOrigin.addTag(NbtTagType.int).value = this.originY;\r\n      structureOrigin.addTag(NbtTagType.int).value = this.originZ;\r\n    }\r\n\r\n    root.addTag(NbtTagType.end);\r\n\r\n    return nbt;\r\n  }\r\n\r\n  loadFromSnbtText(text: string) {\r\n    let structure = null;\r\n\r\n    const content = MinecraftUtilities.fixupJson(text);\r\n\r\n    try {\r\n      // temporarily putting back in the safe code.\r\n      structure = JSON.stringify(content); // eval('(' + content + ')');\r\n    } catch (e) {\r\n      throw new Error(\"Error processing SNBT.\");\r\n    }\r\n\r\n    if (structure === null || structure === undefined) {\r\n      throw new Error(\"Could not create SNBT.\");\r\n    }\r\n  }\r\n\r\n  loadFromSnbt(content: ISnbtContent) {\r\n    if (\r\n      content.size === null ||\r\n      content.size === undefined ||\r\n      content.size.length !== 3 ||\r\n      content.data === undefined\r\n    ) {\r\n      throw new Error(\"Unexpected structure to Snbt file.\");\r\n    }\r\n\r\n    if (this._cube === undefined) {\r\n      this._cube = new BlockVolume();\r\n    }\r\n\r\n    this._cube.setMaxDimensions(content.size[0], content.size[1], content.size[2]);\r\n\r\n    for (let i = 0; i < content.data.length; i++) {\r\n      const block: ISnbtBlock = content.data[i];\r\n\r\n      if (block.pos === undefined || block.pos.length !== 3 || block.state === undefined) {\r\n        throw new Error(\"Unexpected format for a block in an Snbt\");\r\n      }\r\n\r\n      const targetBlock = this._cube.x(block.pos[0]).y(block.pos[1]).z(block.pos[2]);\r\n\r\n      let blockTypeId = block.state;\r\n\r\n      const firstCurly = blockTypeId.indexOf(\"{\");\r\n\r\n      if (firstCurly >= 0) {\r\n        if (blockTypeId[blockTypeId.length - 1] !== \"}\") {\r\n          throw new Error(\"Unexpected property found.\");\r\n        }\r\n\r\n        const props = blockTypeId.substring(firstCurly + 1, blockTypeId.length - 1).split(\",\");\r\n\r\n        for (const prop of props) {\r\n          const propArr = prop.split(\":\");\r\n\r\n          if (propArr.length === 2) {\r\n            targetBlock.ensureProperty(propArr[0]).value = propArr[1];\r\n          } else {\r\n            throw new Error(\"Unexpected property found.\");\r\n          }\r\n        }\r\n\r\n        blockTypeId = blockTypeId.substring(0, firstCurly);\r\n      }\r\n\r\n      targetBlock.typeName = blockTypeId;\r\n    }\r\n  }\r\n\r\n  async loadFromNbtBytes(bytes: Uint8Array) {\r\n    const tag = new NbtBinary();\r\n\r\n    tag.fromBinary(bytes, true, false);\r\n\r\n    this.nbt = tag;\r\n\r\n    await this.loadFromNbt(tag);\r\n  }\r\n\r\n  getMCStructureBytes() {\r\n    if (this.originX === undefined) {\r\n      this.originX = 10;\r\n    }\r\n\r\n    if (this.originY === undefined) {\r\n      this.originY = 10;\r\n    }\r\n\r\n    if (this.originZ === undefined) {\r\n      this.originZ = 10;\r\n    }\r\n\r\n    const nbt = this.createNbt();\r\n\r\n    if (nbt !== undefined) {\r\n      const bytes = nbt.toBinary();\r\n\r\n      return bytes;\r\n    }\r\n\r\n    Log.fail(\"Could not create MC Structure bytes for updated.\");\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async loadFromNbt(binary: NbtBinary) {\r\n    const cube = new BlockVolume();\r\n\r\n    const root = binary.singleRoot;\r\n\r\n    if (root === null) {\r\n      return;\r\n    }\r\n\r\n    const paletteTag = root.find(\"block_palette\");\r\n    const indicesTag = root.find(\"block_indices\");\r\n    const sizeTag = root.find(\"size\");\r\n\r\n    if (\r\n      paletteTag === null ||\r\n      sizeTag === null ||\r\n      indicesTag === null ||\r\n      sizeTag.getTagChildren().length !== 3 ||\r\n      indicesTag.getTagChildren().length !== 2\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const sizeTagChildren = sizeTag.getTagChildren();\r\n    const indicesChildren = indicesTag.getTagChildren();\r\n    const paletteTagChildren = paletteTag.getTagChildren();\r\n\r\n    cube.setMaxDimensions(\r\n      sizeTagChildren[0].value as number,\r\n      sizeTagChildren[1].value as number,\r\n      sizeTagChildren[2].value as number\r\n    );\r\n\r\n    this._blockPalette = [];\r\n\r\n    for (let i = 0; i < paletteTagChildren.length; i++) {\r\n      const state = paletteTagChildren[i];\r\n\r\n      const name = state.getProperty(\"name\");\r\n      const states = state.getProperty(\"states\");\r\n      const version = state.getProperty(\"version\");\r\n\r\n      if (name != null && states != null && version != null) {\r\n        const block = new Block(name.value as string);\r\n\r\n        this._blockPalette.push(block);\r\n\r\n        const statesChildren = states.getTagChildren();\r\n\r\n        for (let j = 0; j < statesChildren.length; j++) {\r\n          const state = statesChildren[j];\r\n\r\n          const blockProp = block.ensureProperty(state.name);\r\n\r\n          blockProp.nbtType = state.type;\r\n\r\n          if (state.value === null) {\r\n            blockProp.value = undefined;\r\n          } else {\r\n            blockProp.value = state.value;\r\n          }\r\n        }\r\n\r\n        block.persistenceVersion = version.value as number;\r\n        this.defaultBlockPersistenceVersion = block.persistenceVersion;\r\n      }\r\n    }\r\n\r\n    const blockRefs = indicesChildren[0].getTagChildren();\r\n\r\n    let i = 0;\r\n\r\n    for (let x = 0; x < cube.maxX; x++) {\r\n      for (let y = 0; y < cube.maxY; y++) {\r\n        for (let z = 0; z < cube.maxZ; z++) {\r\n          const blockRefNum = blockRefs[i].value as number;\r\n          const block = cube.x(x).y(y).z(z);\r\n\r\n          if (blockRefNum === -1) {\r\n            block.typeName = \"minecraft:air\";\r\n          } else {\r\n            block.applyFrom(this._blockPalette[blockRefNum]);\r\n          }\r\n          block.extraLiquidDepth = -1;\r\n\r\n          i++;\r\n        }\r\n      }\r\n    }\r\n\r\n    const waterLevels = indicesChildren[1].getTagChildren();\r\n    i = 0;\r\n    for (let x = 0; x < cube.maxX; x++) {\r\n      for (let y = 0; y < cube.maxY; y++) {\r\n        for (let z = 0; z < cube.maxZ; z++) {\r\n          const secondaryBlockIndex = waterLevels[i].value as number;\r\n\r\n          if (secondaryBlockIndex !== -1) {\r\n            const block = cube.x(x).y(y).z(z);\r\n\r\n            const secondaryBlock = this._blockPalette[secondaryBlockIndex];\r\n\r\n            if (secondaryBlock.shortTypeId === \"water\") {\r\n              block.extraLiquidDepth = secondaryBlock.getPropertyNumber(\"liquid_depth\", -1);\r\n            }\r\n          }\r\n\r\n          i++;\r\n        }\r\n      }\r\n    }\r\n\r\n    const entities = root.find(\"entities\");\r\n\r\n    this._entities = [];\r\n\r\n    if (entities !== null) {\r\n      await Database.loadUx();\r\n\r\n      if (Database.uxCatalog !== undefined) {\r\n        const entitiesChildren = entities.getTagChildren();\r\n\r\n        for (let i = 0; i < entitiesChildren.length; i++) {\r\n          const entityTag = entitiesChildren[i];\r\n\r\n          const entity = new Entity();\r\n\r\n          const entityTagChildren = entityTag.getTagChildren();\r\n\r\n          for (let j = 0; j < entityTagChildren.length; j++) {\r\n            const entityPropertyTag = entityTagChildren[j];\r\n\r\n            if (entityPropertyTag.name === \"definitions\") {\r\n              entity.loadDefinitionsFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"identifier\") {\r\n              Log.assert(entityPropertyTag.type === NbtTagType.string, \"Expected string type\");\r\n\r\n              entity.typeId = entityPropertyTag.valueAsString;\r\n            } else if (entityPropertyTag.name === \"Attributes\") {\r\n              entity.loadAttributeComponentsFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"Rotation\") {\r\n              entity.loadRotationFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"Tags\") {\r\n              entity.loadTagsFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"ChestItems\") {\r\n              const inventoryComponent = entity.ensureDataComponent(\r\n                \"inventory\",\r\n                new EntityInventoryComponent()\r\n              ) as EntityInventoryComponent;\r\n\r\n              inventoryComponent.loadFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"Armor\") {\r\n              const inventoryComponent = entity.ensureDataComponent(\r\n                \"armor_inventory\",\r\n                new EntityInventoryComponent()\r\n              ) as EntityInventoryComponent;\r\n\r\n              inventoryComponent.loadFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"Mainhand\") {\r\n              const subElement = entityPropertyTag.getTagChildren();\r\n\r\n              if (subElement.length === 1) {\r\n                const inventoryComponent = entity.ensureDataComponent(\r\n                  \"mainhand\",\r\n                  new EntityInventoryComponent()\r\n                ) as EntityInventoryComponent;\r\n\r\n                inventoryComponent.loadFromNbtTag(entityPropertyTag);\r\n              }\r\n            } else if (entityPropertyTag.name === \"Offhand\") {\r\n              const subElement = entityPropertyTag.getTagChildren();\r\n\r\n              if (subElement.length === 1) {\r\n                const inventoryComponent = entity.ensureDataComponent(\r\n                  \"offhand\",\r\n                  new EntityInventoryComponent()\r\n                ) as EntityInventoryComponent;\r\n\r\n                inventoryComponent.loadFromNbtTag(entityPropertyTag);\r\n              }\r\n            } else if (entityPropertyTag.name === \"Pos\") {\r\n              entity.loadLocationFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"internalComponents\") {\r\n            } else if (entityPropertyTag.value === null) {\r\n              const prop = entity.ensureComponentProperty(entityPropertyTag.name);\r\n              prop.load();\r\n              prop.value = undefined;\r\n            } else if (\r\n              entityPropertyTag.name === \"Air\" ||\r\n              entityPropertyTag.name === \"Chested\" ||\r\n              entityPropertyTag.name === \"Color\" ||\r\n              entityPropertyTag.name === \"Color2\" ||\r\n              entityPropertyTag.name === \"Dead\" ||\r\n              entityPropertyTag.name === \"DeathTime\" ||\r\n              entityPropertyTag.name === \"FallDistance\" ||\r\n              entityPropertyTag.name === \"HurtTime\" ||\r\n              entityPropertyTag.name === \"Invulnerable\" ||\r\n              entityPropertyTag.name === \"IsAngry\" ||\r\n              entityPropertyTag.name === \"IsAutonomous\" ||\r\n              entityPropertyTag.name === \"IsBaby\" ||\r\n              entityPropertyTag.name === \"IsEating\" ||\r\n              entityPropertyTag.name === \"IsGliding\" ||\r\n              entityPropertyTag.name === \"IsGlobal\" ||\r\n              entityPropertyTag.name === \"IsIllagerCaptain\" ||\r\n              entityPropertyTag.name === \"IsOrphaned\" ||\r\n              entityPropertyTag.name === \"IsOutOfControl\" ||\r\n              entityPropertyTag.name === \"IsPregnant\" ||\r\n              entityPropertyTag.name === \"IsRoaring\" ||\r\n              entityPropertyTag.name === \"IsScared\" ||\r\n              entityPropertyTag.name === \"IsStunned\" ||\r\n              entityPropertyTag.name === \"IsSwimming\" ||\r\n              entityPropertyTag.name === \"IsTamed\" ||\r\n              entityPropertyTag.name === \"IsTrusting\" ||\r\n              entityPropertyTag.name === \"LeasherID\" ||\r\n              entityPropertyTag.name === \"LootDropped\" ||\r\n              entityPropertyTag.name === \"MarkVariant\" ||\r\n              entityPropertyTag.name === \"NaturalSpawn\" ||\r\n              entityPropertyTag.name === \"OnGround\" ||\r\n              entityPropertyTag.name === \"OwnerNew\" ||\r\n              entityPropertyTag.name === \"PortalCooldown\" ||\r\n              entityPropertyTag.name === \"Saddled\" ||\r\n              entityPropertyTag.name === \"Sheared\" ||\r\n              entityPropertyTag.name === \"ShowBottom\" ||\r\n              entityPropertyTag.name === \"Sitting\" ||\r\n              entityPropertyTag.name === \"SkinID\" ||\r\n              entityPropertyTag.name === \"SpawnedByNight\" ||\r\n              entityPropertyTag.name === \"Strength\" ||\r\n              entityPropertyTag.name === \"StrengthMax\" ||\r\n              entityPropertyTag.name === \"Surface\" ||\r\n              entityPropertyTag.name === \"TargetID\" ||\r\n              entityPropertyTag.name === \"TradeExperience\" ||\r\n              entityPropertyTag.name === \"TradeTier\" ||\r\n              entityPropertyTag.name === \"UniqueID\" ||\r\n              entityPropertyTag.name === \"Variant\" ||\r\n              entityPropertyTag.name === \"boundX\" ||\r\n              entityPropertyTag.name === \"boundY\" ||\r\n              entityPropertyTag.name === \"boundZ\" ||\r\n              entityPropertyTag.name === \"canPickupItems\" ||\r\n              entityPropertyTag.name === \"expDropEnabled\" ||\r\n              entityPropertyTag.name === \"hasBoundOrigin\" ||\r\n              entityPropertyTag.name === \"hasSetCanPickupItems\" ||\r\n              entityPropertyTag.name === \"isOrphaned\"\r\n            ) {\r\n              // placeholder for unimplemented properties\r\n              // entity.loadTagsFromNbtTag(entityPropertyTag);\r\n            } else {\r\n              const prop = entity.ensureComponentProperty(entityPropertyTag.name);\r\n              prop.load();\r\n              prop.value = entityPropertyTag.value;\r\n            }\r\n          }\r\n\r\n          this._entities.push(entity);\r\n        }\r\n      }\r\n    }\r\n\r\n    const structureOrigin = root.find(\"structure_world_origin\");\r\n\r\n    if (structureOrigin !== null && structureOrigin.getTagChildren().length === 3) {\r\n      const structuresOriginChildren = structureOrigin.getTagChildren();\r\n\r\n      this.originX = structuresOriginChildren[0].valueAsInt;\r\n      this.originY = structuresOriginChildren[1].valueAsInt;\r\n      this.originZ = structuresOriginChildren[2].valueAsInt;\r\n    } else {\r\n      this.originX = undefined;\r\n      this.originY = undefined;\r\n      this.originZ = undefined;\r\n    }\r\n\r\n    this._cube = cube;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport BlockVolume from \"../minecraft/BlockVolume\";\r\nimport Structure from \"../minecraft/Structure\";\r\n\r\nexport default class ProjectContent {\r\n  static defaultTestJavaScript = `import { Test } from \"@minecraft/server-gametest\";\r\nimport { world, system } from \"@minecraft/server\";\r\n        \r\nfunction basicTest(test) {\r\n    const zoglinEntityType = \"zoglin\";\r\n    const skeletonEntityType = \"skeleton\";\r\n        \r\n    test.spawn(zoglinEntityType, { x: 2, y: 2, z: 3});\r\n    test.spawn(skeletonEntityType, { x: 5, y: 2, z: 3});\r\n    \r\n    test.succeedWhen( ()=> {\r\n            test.assertEntityPresentInArea(skeletonEntityType, false);\r\n        }\r\n    );\r\n}\r\n        \r\ngt.register(\"MyProject\", \"basicTest\", basicTest).structureName(\"gametests:basic\");     \r\n`;\r\n\r\n  static emptyTestJavaScript = `import { Test } from \"@minecraft/server-gametest\";\r\nimport { world, system } from \"@minecraft/server\";\r\n        \r\nfunction basicTest(test) {\r\n\r\n}\r\n        \r\ngt.register(\"MyProject\", \"basicTest\", basicTest).structureName(\"gametests:basic\");     \r\n`;\r\n\r\n  static emptyJavaScript = `import { world, system } from \"@minecraft/server\";\r\n        \r\nfunction myFunction() \r\n{\r\n\r\n}\r\n`;\r\n\r\n  static emptyActionSet = `{\r\n}\r\n`;\r\n\r\n  static emptyWorldTest = `{\r\n}\r\n`;\r\n\r\n  static getItemName(name: string) {\r\n    name = name.trim();\r\n    name = name.replace(/ /gi, \"\");\r\n    name = Utilities.lowerCaseStartOfString(name);\r\n\r\n    return name;\r\n  }\r\n\r\n  static getDefaultTestJavaScript(projectName: string, testName: string) {\r\n    let content = ProjectContent.defaultTestJavaScript;\r\n\r\n    content = this.replaceCommonItems(content, projectName);\r\n\r\n    content = content.replace(/basicTest/gi, ProjectContent.getItemName(testName));\r\n\r\n    return content;\r\n  }\r\n\r\n  static getDefaultTestTypeScript(projectName: string, testName: string) {\r\n    let content = ProjectContent.defaultTestJavaScript;\r\n\r\n    content = content.replace(\"(test)\", \"(test : gt.Test)\");\r\n\r\n    content = this.replaceCommonItems(content, projectName);\r\n\r\n    content = content.replace(/basicTest/gi, ProjectContent.getItemName(testName));\r\n\r\n    return content;\r\n  }\r\n\r\n  static getEmptyTestJavaScript(projectName: string, testName: string) {\r\n    let content = ProjectContent.emptyTestJavaScript;\r\n\r\n    content = this.replaceCommonItems(content, projectName);\r\n\r\n    content = content.replace(/basicTest/gi, ProjectContent.getItemName(testName));\r\n\r\n    return content;\r\n  }\r\n\r\n  static getEmptyTestTypeScript(projectName: string, testName: string) {\r\n    let content = ProjectContent.emptyTestJavaScript;\r\n\r\n    content = content.replace(\"(test)\", \"(test : gt.Helper)\");\r\n\r\n    content = this.replaceCommonItems(content, projectName);\r\n\r\n    content = content.replace(/basicTest/gi, ProjectContent.getItemName(testName));\r\n\r\n    return content;\r\n  }\r\n\r\n  static replaceCommonItems(content: string, projectName: string) {\r\n    return content.replace('\"MyProject\"', '\"' + ProjectContent.getItemName(projectName) + '\"');\r\n  }\r\n\r\n  static getEmptyActionSet(projectName: string, testName: string) {\r\n    const content = ProjectContent.emptyActionSet;\r\n\r\n    return content;\r\n  }\r\n\r\n  static getEmptyWorldTest(projectName: string, testName: string) {\r\n    const content = ProjectContent.emptyActionSet;\r\n\r\n    return content;\r\n  }\r\n\r\n  static getEmptyJavaScript(projectName: string, testName: string) {\r\n    let content = ProjectContent.emptyJavaScript;\r\n\r\n    content = content.replace(\"myFunction\", ProjectContent.getItemName(projectName) + \"Action\");\r\n\r\n    return content;\r\n  }\r\n\r\n  static getEmptyTypeScript(projectName: string, testName: string) {\r\n    return this.getEmptyJavaScript(projectName, testName);\r\n  }\r\n\r\n  static generateDefaultStructure() {\r\n    const structure = new Structure();\r\n    const cube = new BlockVolume();\r\n\r\n    cube.setMaxDimensions(8, 8, 8);\r\n\r\n    structure.cube = cube;\r\n\r\n    cube.fillY(\"minecraft:dirt\", 0);\r\n    cube.fillEmpty(\"minecraft:glass\", 0, 1, 0, 7, 7, 7);\r\n\r\n    return structure.getMCStructureBytes();\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport { IAddonManifestHeader, IAddonMetadata, IResourcePackManifest } from \"./IAddonManifest\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport BehaviorManifestDefinition from \"./BehaviorManifestDefinition\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class ResourceManifestDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IResourcePackManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<ResourceManifestDefinition, ResourceManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get packScope() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.pack_scope;\r\n  }\r\n\r\n  public set packScope(newValue: \"world\" | \"global\" | \"any\" | undefined) {\r\n    if (!this.definition || !this.definition.header) {\r\n      return;\r\n    }\r\n\r\n    this.definition.header.pack_scope = newValue;\r\n  }\r\n\r\n  public get productType() {\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.metadata.product_type;\r\n  }\r\n\r\n  public set productType(value: \"\" | \"addon\" | undefined) {\r\n    this.ensureMetadata();\r\n\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return;\r\n    }\r\n\r\n    this.definition.metadata.product_type = value;\r\n  }\r\n\r\n  get subpacks() {\r\n    if (!this.definition || !this.definition.subpacks) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.subpacks;\r\n  }\r\n\r\n  get capabilities() {\r\n    if (!this.definition || !this.definition.capabilities) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.capabilities;\r\n  }\r\n\r\n  get version() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.version;\r\n  }\r\n\r\n  get dependencies() {\r\n    if (!this.definition || !this.definition.dependencies) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.dependencies;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  public get id() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public async setUuid(newId: string | undefined, project?: Project) {\r\n    const oldUuid = this.id;\r\n\r\n    this.id = newId;\r\n\r\n    if (newId && oldUuid && project) {\r\n      await ResourceManifestDefinition.setNewResourcePackId(project, newId, oldUuid);\r\n    }\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IAddonManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  get minEngineVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.min_engine_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.min_engine_version;\r\n  }\r\n\r\n  setMinEngineVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.min_engine_version = versionArray;\r\n  }\r\n\r\n  static async setNewResourcePackId(project: Project, newResourcePackId: string, oldResourcePackId: string) {\r\n    const itemsCopy = project.getItemsCopy();\r\n    let setResourcePack = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (pi.itemType === ProjectItemType.resourcePackManifestJson && !setResourcePack) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            if (rpManifestJson.id && Utilities.uuidEqual(rpManifestJson.id, oldResourcePackId)) {\r\n              rpManifestJson.id = newResourcePackId;\r\n              setResourcePack = true;\r\n              await rpManifestJson.save();\r\n            } else if (rpManifestJson.definition && rpManifestJson.definition.dependencies) {\r\n              const deps = rpManifestJson.definition?.dependencies;\r\n\r\n              for (const dep of deps) {\r\n                if (dep.uuid === oldResourcePackId) {\r\n                  dep.uuid = newResourcePackId;\r\n                }\r\n              }\r\n              await rpManifestJson.save();\r\n            }\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            if (bpManifestJson.definition && bpManifestJson.definition.dependencies) {\r\n              const deps = bpManifestJson.definition?.dependencies;\r\n\r\n              for (const dep of deps) {\r\n                if (dep.uuid === oldResourcePackId) {\r\n                  dep.uuid = newResourcePackId;\r\n                }\r\n              }\r\n\r\n              await bpManifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public hasAddonProperties(): boolean {\r\n    return this.productType === \"addon\" && this.packScope === \"world\";\r\n  }\r\n\r\n  public async setAddonProperties() {\r\n    this.productType = \"addon\";\r\n    this.packScope = \"world\";\r\n\r\n    await this.save();\r\n  }\r\n\r\n  public randomizeModuleUuids(newDataModuleId?: string, oldDataModuleId?: string) {\r\n    if (!this.definition) {\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < this.definition.modules.length; i++) {\r\n      const mod = this.definition.modules[i];\r\n\r\n      if (mod.uuid) {\r\n        if (oldDataModuleId && newDataModuleId && (mod.uuid === oldDataModuleId || mod.uuid === newDataModuleId)) {\r\n          mod.uuid = newDataModuleId;\r\n        } else {\r\n          mod.uuid = Utilities.createUuid();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<ResourceManifestDefinition, ResourceManifestDefinition>\r\n  ) {\r\n    let rmj: ResourceManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rmj = new ResourceManifestDefinition();\r\n\r\n      rmj.file = file;\r\n\r\n      file.manager = rmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ResourceManifestDefinition) {\r\n      rmj = file.manager as ResourceManifestDefinition;\r\n\r\n      if (!rmj.isLoaded) {\r\n        if (loadHandler) {\r\n          rmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rmj.load();\r\n      }\r\n    }\r\n\r\n    return rmj;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      Log.unexpectedUndefined(\"RMDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          min_engine_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n        dependencies: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public getSubpackByFolderName(folderName: string) {\r\n    if (!this.definition) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this.definition.subpacks) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const subpack of this.definition.subpacks) {\r\n      if (subpack.folder_name === folderName) {\r\n        return subpack;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IAddonManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public ensureMetadata(): IAddonMetadata | undefined {\r\n    if (!this.definition) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this.definition.metadata) {\r\n      this.definition.metadata = {};\r\n    }\r\n\r\n    return this.definition.metadata;\r\n  }\r\n\r\n  public ensureGeneratedWith(toolName: string, versionString: string): void {\r\n    const metadata = this.ensureMetadata();\r\n\r\n    if (!metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!metadata.generated_with) {\r\n      metadata.generated_with = {};\r\n    }\r\n\r\n    if (!metadata.generated_with[toolName]) {\r\n      metadata.generated_with[toolName] = [];\r\n    }\r\n\r\n    if (!metadata.generated_with[toolName].includes(versionString)) {\r\n      metadata.generated_with[toolName].push(versionString);\r\n    }\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n    };\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  static validatePackReferenceVersion(version: any): {\r\n    isValid: boolean;\r\n    versionArray?: number[];\r\n    errorMessage?: string;\r\n  } {\r\n    if (!version) {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: \"Missing version\",\r\n      };\r\n    }\r\n\r\n    // Use MinecraftUtilities to parse version\r\n    const versionArray = MinecraftUtilities.getVersionArrayFrom(version);\r\n\r\n    if (\r\n      !versionArray ||\r\n      versionArray.length !== 3 ||\r\n      !versionArray.every((v: number) => typeof v === \"number\" && v >= 0)\r\n    ) {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: \"Invalid version format. Expected valid version string or array of 3 non-negative numbers\",\r\n      };\r\n    }\r\n\r\n    return {\r\n      isValid: true,\r\n      versionArray: versionArray,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IAddonManifest, { IAddonDependency, IAddonManifestHeader, IAddonMetadata, IAddonModule } from \"./IAddonManifest\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project, { AUTOGENERATED_WHOLEFILE_GENERAL_SEPARATOR, minecraftScriptModules } from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { ProjectFocus } from \"../app/IProjectData\";\r\nimport ResourceManifestDefinition from \"./ResourceManifestDefinition\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class BehaviorManifestDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IAddonManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<BehaviorManifestDefinition, BehaviorManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get productType() {\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.metadata.product_type;\r\n  }\r\n\r\n  public set productType(value: \"\" | \"addon\" | undefined) {\r\n    this.ensureMetadata();\r\n\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return;\r\n    }\r\n\r\n    this.definition.metadata.product_type = value;\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  get capabilities() {\r\n    if (!this.definition || !this.definition.capabilities) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.capabilities;\r\n  }\r\n\r\n  public get id() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public async setUuid(newId: string | undefined, project?: Project) {\r\n    const oldId = this.id;\r\n\r\n    this.id = newId;\r\n\r\n    if (newId && oldId && project) {\r\n      await BehaviorManifestDefinition.setNewBehaviorPackId(project, newId, oldId);\r\n    }\r\n  }\r\n\r\n  static async setNewBehaviorPackId(project: Project, newBehaviorPackId: string, oldBehaviorPackId: string) {\r\n    const itemsCopy = project.getItemsCopy();\r\n    let setBehaviorPack = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (pi.itemType === ProjectItemType.behaviorPackManifestJson && !setBehaviorPack) {\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            if (bpManifestJson.id && Utilities.uuidEqual(bpManifestJson.id, oldBehaviorPackId)) {\r\n              bpManifestJson.id = newBehaviorPackId;\r\n              setBehaviorPack = true;\r\n\r\n              await bpManifestJson.save();\r\n            } else if (bpManifestJson.definition && bpManifestJson.definition.dependencies) {\r\n              const deps = bpManifestJson.definition?.dependencies;\r\n\r\n              if (deps && Array.isArray(deps)) {\r\n                for (const dep of deps) {\r\n                  if (dep.uuid === oldBehaviorPackId) {\r\n                    dep.uuid = newBehaviorPackId;\r\n                  }\r\n                }\r\n              }\r\n\r\n              await bpManifestJson.save();\r\n            }\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            if (rpManifestJson.definition && rpManifestJson.definition.dependencies) {\r\n              const deps = rpManifestJson.definition?.dependencies;\r\n\r\n              if (deps && Array.isArray(deps)) {\r\n                for (const dep of deps) {\r\n                  if (dep.uuid === oldBehaviorPackId) {\r\n                    dep.uuid = newBehaviorPackId;\r\n                  }\r\n                }\r\n              }\r\n\r\n              await rpManifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public hasAddonProperties(): boolean {\r\n    return this.productType === \"addon\";\r\n  }\r\n\r\n  public async setAddonProperties() {\r\n    this.productType = \"addon\";\r\n\r\n    await this.save();\r\n  }\r\n\r\n  public randomizeModuleUuids(newScriptModuleId?: string, oldScriptModuleId?: string) {\r\n    if (!this.definition) {\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < this.definition.modules.length; i++) {\r\n      const mod = this.definition.modules[i];\r\n\r\n      if (mod.uuid) {\r\n        if (\r\n          oldScriptModuleId &&\r\n          newScriptModuleId &&\r\n          (mod.uuid === oldScriptModuleId || mod.uuid === newScriptModuleId)\r\n        ) {\r\n          mod.uuid = newScriptModuleId;\r\n        } else {\r\n          mod.uuid = Utilities.createUuid();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public getNonScriptModuleDependencyCount() {\r\n    if (!this.definition || !this.definition.dependencies || !Array.isArray(this.definition.dependencies)) {\r\n      return 0;\r\n    }\r\n\r\n    let count = 0;\r\n\r\n    for (let dependency of this.definition.dependencies) {\r\n      if (dependency.uuid) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  public getFirstNonScriptModuleDependency() {\r\n    if (!this.definition || !this.definition.dependencies || !Array.isArray(this.definition.dependencies)) {\r\n      return undefined;\r\n    }\r\n\r\n    for (let dependency of this.definition.dependencies) {\r\n      if (dependency.uuid) {\r\n        return dependency;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<BehaviorManifestDefinition, BehaviorManifestDefinition>\r\n  ) {\r\n    let bmj: BehaviorManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      bmj = new BehaviorManifestDefinition();\r\n\r\n      bmj.file = file;\r\n\r\n      file.manager = bmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof BehaviorManifestDefinition) {\r\n      bmj = file.manager as BehaviorManifestDefinition;\r\n\r\n      if (!bmj.isLoaded) {\r\n        if (loadHandler) {\r\n          bmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await bmj.load();\r\n      }\r\n    }\r\n\r\n    return bmj;\r\n  }\r\n\r\n  get version() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.version;\r\n  }\r\n\r\n  get minEngineVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.min_engine_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.min_engine_version;\r\n  }\r\n\r\n  setMinEngineVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.min_engine_version = versionArray;\r\n  }\r\n\r\n  setModuleVersion(moduleName: string, version: string) {\r\n    if (!this.definition || !this.definition.dependencies) {\r\n      return false;\r\n    }\r\n\r\n    let verActual: string | number[] = version;\r\n    let changedVals = false;\r\n    if (version.indexOf(\"-\") < 1) {\r\n      const verArr = version.split(\".\");\r\n\r\n      if (verArr && verArr.length === 3) {\r\n        verActual = [];\r\n\r\n        for (let i = 0; i < verArr.length; i++) {\r\n          try {\r\n            verActual.push(parseInt(verArr[i]));\r\n          } catch (e) {\r\n            throw e;\r\n          }\r\n\r\n          if (Number.isNaN(verActual[i])) {\r\n            throw new Error(\"Could not parse \" + version);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < this.definition.dependencies.length; i++) {\r\n      const dep = this.definition.dependencies[i];\r\n\r\n      if (dep.module_name === moduleName) {\r\n        if (dep.version !== verActual) {\r\n          dep.version = verActual;\r\n          changedVals = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return changedVals;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"BMDP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          min_engine_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n        dependencies: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IAddonManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  public ensureMetadata(): IAddonMetadata | undefined {\r\n    if (!this.definition) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this.definition.metadata) {\r\n      this.definition.metadata = {};\r\n    }\r\n\r\n    return this.definition.metadata;\r\n  }\r\n\r\n  public ensureGeneratedWith(toolName: string, versionString: string): void {\r\n    const metadata = this.ensureMetadata();\r\n\r\n    if (!metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!metadata.generated_with) {\r\n      metadata.generated_with = {};\r\n    }\r\n\r\n    if (!metadata.generated_with[toolName]) {\r\n      metadata.generated_with[toolName] = [];\r\n    }\r\n\r\n    if (!metadata.generated_with[toolName].includes(versionString)) {\r\n      metadata.generated_with[toolName].push(versionString);\r\n    }\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IAddonManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n    };\r\n  }\r\n\r\n  public getScriptModule(): IAddonModule | undefined {\r\n    if (!this.definition) {\r\n      return undefined;\r\n    }\r\n\r\n    for (let i = 0; i < this.definition.modules.length; i++) {\r\n      const mod = this.definition.modules[i];\r\n\r\n      if (mod.type && mod.type.toLowerCase() === \"script\") {\r\n        return mod;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public ensureScriptModule(name: string, description: string): IAddonModule {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    for (let i = 0; i < this.definition.modules.length; i++) {\r\n      const mod = this.definition.modules[i];\r\n\r\n      if (mod.type && mod.type.toLowerCase() === \"script\") {\r\n        return mod;\r\n      }\r\n    }\r\n\r\n    const mod: IAddonModule = {\r\n      type: \"script\",\r\n      description: name,\r\n      version: [0, 0, 1],\r\n      uuid: Utilities.createUuid(),\r\n      language: \"javascript\",\r\n    };\r\n\r\n    this.definition.modules.push(mod);\r\n\r\n    return mod;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  static async getContent(project: Project, contentOnlyUpdate?: boolean) {\r\n    let versionMajor = 0;\r\n    let versionMinor = 0;\r\n    let versionPatch = 1;\r\n\r\n    if (project.versionMajor !== undefined) {\r\n      versionMajor = project.versionMajor;\r\n    }\r\n\r\n    if (project.versionMinor !== undefined) {\r\n      versionMinor = project.versionMinor;\r\n    }\r\n\r\n    if (project.versionPatch !== undefined) {\r\n      versionPatch = project.versionPatch;\r\n    }\r\n\r\n    const modulesList: IAddonModule[] = [];\r\n    const dependenciesList: IAddonDependency[] = [];\r\n    let scriptFile = undefined;\r\n    let pi = project.getFirstItemByType(ProjectItemType.catalogIndexJs);\r\n\r\n    if (pi !== undefined) {\r\n      scriptFile = pi.primaryFile;\r\n    }\r\n\r\n    const behaviorPackRootFolder = await project.getDefaultBehaviorPackFolder(false, contentOnlyUpdate);\r\n\r\n    if (scriptFile === undefined) {\r\n      pi = project.getFirstItemByType(ProjectItemType.js);\r\n      if (pi !== undefined) {\r\n        scriptFile = pi.primaryFile;\r\n      }\r\n\r\n      if (scriptFile === undefined) {\r\n        pi = project.getFirstItemByType(ProjectItemType.testJs);\r\n\r\n        if (pi !== undefined) {\r\n          scriptFile = pi.primaryFile;\r\n        }\r\n      }\r\n    }\r\n\r\n    const scriptState = await project.getScriptState();\r\n\r\n    if (scriptState.hasScript && scriptFile !== null && scriptFile !== undefined && behaviorPackRootFolder !== null) {\r\n      let path = scriptFile.getFolderRelativePath(behaviorPackRootFolder);\r\n\r\n      if (path !== undefined) {\r\n        if (path.startsWith(\"/\")) {\r\n          path = path.substring(1, path.length);\r\n        }\r\n\r\n        modulesList.push({\r\n          description: project.title + \" script\",\r\n          language: \"javascript\",\r\n          type: \"script\",\r\n          uuid: project.defaultScriptModuleUniqueId,\r\n          version: [versionMajor, versionMinor, versionPatch],\r\n          entry: path,\r\n        });\r\n\r\n        for (let i = 0; i < minecraftScriptModules.length; i++) {\r\n          const mod = minecraftScriptModules[i];\r\n\r\n          if (scriptState.hasModule[mod.id]) {\r\n            dependenciesList.push({\r\n              uuid: mod.uuid,\r\n              module_name: mod.module_name,\r\n              version: mod.preferredVersion,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const manifest: IAddonManifest = {\r\n      format_version: 2,\r\n      __comment__: AUTOGENERATED_WHOLEFILE_GENERAL_SEPARATOR,\r\n      header: {\r\n        description: project.description,\r\n        name: project.title,\r\n        uuid: project.defaultBehaviorPackUniqueId,\r\n        version: [versionMajor, versionMinor, versionPatch],\r\n        min_engine_version: [1, 20, 10],\r\n      },\r\n      modules: modulesList,\r\n      dependencies: dependenciesList,\r\n    };\r\n\r\n    if (project.focus === ProjectFocus.editorExtension) {\r\n      manifest.capabilities = [\"editorExtension\"];\r\n    }\r\n\r\n    return JSON.stringify(manifest, null, 2);\r\n  }\r\n\r\n  static validatePackReferenceVersion(version: any): {\r\n    isValid: boolean;\r\n    versionArray?: number[];\r\n    errorMessage?: string;\r\n  } {\r\n    if (!version) {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: \"Missing version\",\r\n      };\r\n    }\r\n\r\n    // Use MinecraftUtilities to parse version (handles both string and array formats)\r\n    const versionArray = MinecraftUtilities.getVersionArrayFrom(version);\r\n\r\n    if (\r\n      !versionArray ||\r\n      versionArray.length !== 3 ||\r\n      !versionArray.every((v: number) => typeof v === \"number\" && v >= 0)\r\n    ) {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: \"Invalid version format. Expected valid version string or array of 3 non-negative numbers\",\r\n      };\r\n    }\r\n\r\n    return {\r\n      isValid: true,\r\n      versionArray: versionArray,\r\n    };\r\n  }\r\n\r\n  static validatePackId(packId: any): { isValid: boolean; errorMessage?: string } {\r\n    if (!packId || typeof packId !== \"string\") {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: \"Missing or invalid pack_id\",\r\n      };\r\n    }\r\n\r\n    if (!MinecraftUtilities.isValidUuid(packId)) {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: `Invalid UUID format for pack_id [${packId}]`,\r\n      };\r\n    }\r\n\r\n    return { isValid: true };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport { IAddonManifestHeader, ISkinPackManifest } from \"./IAddonManifest\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\n\r\nexport default class SkinManifestDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: ISkinPackManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<SkinManifestDefinition, SkinManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get packScope() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.pack_scope;\r\n  }\r\n\r\n  public get productType() {\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.metadata.product_type;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  public get uuid() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set uuid(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IAddonManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  get minEngineVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.min_engine_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.min_engine_version;\r\n  }\r\n\r\n  setMinEngineVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.min_engine_version = versionArray;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<SkinManifestDefinition, SkinManifestDefinition>) {\r\n    let rmj: SkinManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rmj = new SkinManifestDefinition();\r\n\r\n      rmj.file = file;\r\n\r\n      file.manager = rmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof SkinManifestDefinition) {\r\n      rmj = file.manager as SkinManifestDefinition;\r\n\r\n      if (!rmj.isLoaded) {\r\n        if (loadHandler) {\r\n          rmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rmj.load();\r\n      }\r\n    }\r\n\r\n    return rmj;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          min_engine_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n        dependencies: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IAddonManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n    };\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this.uuid = this._file.name;\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport { IAddonManifestHeader, IPersonaManifest } from \"./IAddonManifest\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class PersonaManifestDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IPersonaManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<PersonaManifestDefinition, PersonaManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get packScope() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.pack_scope;\r\n  }\r\n\r\n  public get productType() {\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.metadata.product_type;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  public get uuid() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set uuid(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IAddonManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  get minEngineVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.min_engine_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.min_engine_version;\r\n  }\r\n\r\n  setMinEngineVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.min_engine_version = versionArray;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<PersonaManifestDefinition, PersonaManifestDefinition>\r\n  ) {\r\n    let rmj: PersonaManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rmj = new PersonaManifestDefinition();\r\n\r\n      rmj.file = file;\r\n\r\n      file.manager = rmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof PersonaManifestDefinition) {\r\n      rmj = file.manager as PersonaManifestDefinition;\r\n\r\n      if (!rmj.isLoaded) {\r\n        if (loadHandler) {\r\n          rmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rmj.load();\r\n      }\r\n    }\r\n\r\n    return rmj;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      Log.unexpectedUndefined(\"PMRDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          min_engine_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n        dependencies: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IAddonManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n    };\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this.uuid = this._file.name;\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport { IAddonManifestHeader, IDesignPackManifest } from \"./IAddonManifest\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class DesignManifestDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IDesignPackManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<DesignManifestDefinition, DesignManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get packScope() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.pack_scope;\r\n  }\r\n\r\n  public get productType() {\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.metadata.product_type;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  public get uuid() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set uuid(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IAddonManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  get minEngineVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.min_engine_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.min_engine_version;\r\n  }\r\n\r\n  setMinEngineVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.min_engine_version = versionArray;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<DesignManifestDefinition, DesignManifestDefinition>\r\n  ) {\r\n    let rmj: DesignManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rmj = new DesignManifestDefinition();\r\n\r\n      rmj.file = file;\r\n\r\n      file.manager = rmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof DesignManifestDefinition) {\r\n      rmj = file.manager as DesignManifestDefinition;\r\n\r\n      if (!rmj.isLoaded) {\r\n        if (loadHandler) {\r\n          rmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rmj.load();\r\n      }\r\n    }\r\n\r\n    return rmj;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"DMDP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          min_engine_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n        dependencies: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IAddonManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n    };\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this.uuid = this._file.name;\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Project from \"../app/Project\";\r\nimport IFile from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport BehaviorManifestDefinition from \"./BehaviorManifestDefinition\";\r\nimport ResourceManifestDefinition from \"./ResourceManifestDefinition\";\r\nimport SkinManifestDefinition from \"./SkinManifestDefinition\";\r\nimport PersonaManifestDefinition from \"./PersonaManifestDefinition\";\r\nimport DesignManifestDefinition from \"./DesignManifestDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport enum PackType {\r\n  resource = 0,\r\n  behavior = 1,\r\n  skin = 2,\r\n  persona = 3,\r\n  design = 4,\r\n}\r\n\r\nexport default class Pack {\r\n  packType: PackType;\r\n  manifestFile?: IFile;\r\n  folder: IFolder;\r\n  project: Project;\r\n  projectItem: ProjectItem;\r\n  isInWorld: boolean = false;\r\n  manifest?:\r\n    | BehaviorManifestDefinition\r\n    | ResourceManifestDefinition\r\n    | SkinManifestDefinition\r\n    | PersonaManifestDefinition\r\n    | DesignManifestDefinition\r\n    | undefined;\r\n\r\n  private _items: ProjectItem[] | undefined;\r\n\r\n  //stubbing in for use later\r\n  get isEDUOffer() {\r\n    return false;\r\n  }\r\n\r\n  constructor(folderIn: IFolder, packTypeIn: PackType, project: Project, projectItem: ProjectItem) {\r\n    this.project = project;\r\n    this.projectItem = projectItem;\r\n    this.folder = folderIn;\r\n    this.packType = packTypeIn;\r\n  }\r\n\r\n  ensureManifestFile() {\r\n    if (this.manifestFile === undefined) {\r\n      this.manifestFile = this.folder.ensureFile(\"manifest.json\");\r\n    }\r\n\r\n    return this.manifestFile;\r\n  }\r\n\r\n  async ensureManifest() {\r\n    if (this.manifest) {\r\n      return this.manifest;\r\n    }\r\n\r\n    this.manifestFile = this.ensureManifestFile();\r\n\r\n    if (this.packType === PackType.behavior) {\r\n      this.manifest = await BehaviorManifestDefinition.ensureOnFile(this.manifestFile);\r\n    } else if (this.packType === PackType.skin) {\r\n      this.manifest = await SkinManifestDefinition.ensureOnFile(this.manifestFile);\r\n    } else if (this.packType === PackType.persona) {\r\n      this.manifest = await PersonaManifestDefinition.ensureOnFile(this.manifestFile);\r\n    } else if (this.packType === PackType.design) {\r\n      this.manifest = await DesignManifestDefinition.ensureOnFile(this.manifestFile);\r\n    } else {\r\n      this.manifest = await ResourceManifestDefinition.ensureOnFile(this.manifestFile);\r\n    }\r\n\r\n    if (this.manifest && !this.manifest.isLoaded) {\r\n      this.manifest.load();\r\n    }\r\n\r\n    // If the manifest file was newly created or is empty, populate it with default content\r\n    if (this.manifest && !this.manifest.definition) {\r\n      this.manifest.ensureHeaderForProject(this.project);\r\n      this.manifest.persist();\r\n    }\r\n\r\n    return this.manifest;\r\n  }\r\n\r\n  getManifest(): ProjectItem {\r\n    const manifest = this.getPackItems().find((item) => item.name === \"manifest.json\");\r\n    Log.assert(!!manifest, \"Pack should always have a manifest item\");\r\n    return manifest;\r\n  }\r\n\r\n  getPackItems(): readonly ProjectItem[] {\r\n    if (!!this._items) {\r\n      return this._items;\r\n    }\r\n    const folderPath = this.projectItem.projectPath;\r\n\r\n    if (!folderPath) {\r\n      throw new Error(\"Pack.getPackItems called without a project path\");\r\n    }\r\n\r\n    this._items = this.project.items.filter((item) => item.projectPath?.startsWith(folderPath));\r\n    return this._items;\r\n  }\r\n\r\n  hasVibrantVisualsContent(): boolean {\r\n    return this.getPackItems().some((item) => ProjectItemUtilities.isVibrantVisualsRelated(item));\r\n  }\r\n\r\n  static ensureOnFolder(folder: IFolder, packType: PackType, project: Project, projectItem: ProjectItem) {\r\n    if (folder.manager === undefined) {\r\n      const pack = new Pack(folder, packType, project, projectItem);\r\n\r\n      if (projectItem.isInWorld) {\r\n        pack.isInWorld = true;\r\n      }\r\n      pack.project = project;\r\n      pack.packType = packType;\r\n\r\n      return pack;\r\n    } else {\r\n      return folder.manager as Pack;\r\n    }\r\n  }\r\n\r\n  get name(): string {\r\n    return this.projectItem?.name || \"Unnamed pack\";\r\n  }\r\n\r\n  async getFiles(predicate?: (file: IFile) => boolean): Promise<IFile[]> {\r\n    const result = [];\r\n    for await (const file of this.folder.allFiles) {\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent();\r\n      }\r\n\r\n      if (file.content && (!predicate || predicate(file))) {\r\n        result.push(file);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\nimport Project from \"../app/Project\";\r\nimport { PackageJSON } from \"@npm/types\";\r\n\r\nexport const DevDependenciesDefault: Record<string, string> = {\r\n  \"@minecraft/core-build-tasks\": \"5.2.0\",\r\n  \"@minecraft/creator-tools\": \"0.16.2\",\r\n  \"eslint-plugin-minecraft-linting\": \"2.0.2\",\r\n  \"source-map\": \"0.7.4\",\r\n  \"ts-node\": \"10.9.1\",\r\n  typescript: \"5.5.4\",\r\n};\r\n\r\nexport const ScriptsDefault: Record<string, string> = {\r\n  lint: \"just-scripts lint\",\r\n  build: \"just-scripts build\",\r\n  \"build:production\": \"just-scripts build --production\",\r\n  clean: \"just-scripts clean\",\r\n  deploy: \"npm run build && npx mct deploy env -i .\",\r\n  \"local-deploy\": \"just-scripts local-deploy\",\r\n  mcaddon: \"just-scripts mcaddon\",\r\n  \"mcaddon:production\": \"just-scripts mcaddon --production\",\r\n  enablemcloopback:\r\n    \"CheckNetIsolation.exe LoopbackExempt -a -p=S-1-15-2-1958404141-86561845-1752920682-3514627264-368642714-62675701-733520436\",\r\n  enablemcpreviewloopback:\r\n    \"CheckNetIsolation.exe LoopbackExempt -a -p=S-1-15-2-424268864-5579737-879501358-346833251-474568803-887069379-4040235476\",\r\n  buildsnippets: \"just-scripts buildSnippets\",\r\n};\r\n\r\nexport const DependenciesDefault: Record<string, string> = {\r\n  \"@minecraft/math\": \"2.4.0\",\r\n  \"@minecraft/server\": \"2.0.0\",\r\n  \"@minecraft/server-editor\": \"0.1.0-beta.1.21.30-preview.24\",\r\n  \"@minecraft/server-ui\": \"2.0.0\",\r\n  \"@minecraft/vanilla-data\": \"1.26.13\",\r\n};\r\n\r\nexport const OverridesDefault: { [name: string]: any } = {\r\n  \"@minecraft/math\": {\r\n    \"@minecraft/server\": \"$@minecraft/server\",\r\n  },\r\n  \"@minecraft/server-gametest\": {\r\n    \"@minecraft/server\": \"$@minecraft/server\",\r\n  },\r\n  \"@minecraft/server-ui\": {\r\n    \"@minecraft/server\": \"$@minecraft/server\",\r\n  },\r\n};\r\n\r\nexport const PackageJsonDefault: PackageJSON = {\r\n  name: \"my-project\",\r\n  version: \"0.1.0\",\r\n  description: \"My Minecraft Addon Project\",\r\n  private: true,\r\n  devDependencies: DevDependenciesDefault,\r\n  scripts: ScriptsDefault,\r\n  dependencies: DependenciesDefault,\r\n};\r\n\r\nexport const SetupRequiredScripts: Record<string, string> = {\r\n  lint: \"just-scripts lint\",\r\n  build: \"just-scripts build\",\r\n  clean: \"just-scripts clean\",\r\n  deploy: \"npm run build && npx mct deploy env -i .\",\r\n  \"local-deploy\": \"just-scripts local-deploy\",\r\n  mcaddon: \"just-scripts mcaddon\",\r\n};\r\n\r\nexport const SetupRequiredDependencies: Record<string, string> = {\r\n  \"@minecraft/server\": DependenciesDefault[\"@minecraft/server\"],\r\n  \"@minecraft/server-ui\": DependenciesDefault[\"@minecraft/server-ui\"],\r\n};\r\n\r\nexport const NpmPackageSettingAllowList = [\r\n  \"name\",\r\n  \"author\",\r\n  \"dependencies\",\r\n  \"devDependencies\",\r\n  \"contributors\",\r\n  \"license\",\r\n  \"overrides\",\r\n  \"version\",\r\n  \"productName\",\r\n  \"description\",\r\n  \"private\",\r\n  \"scripts\",\r\n];\r\n\r\n/**\r\n * Strips semver range prefixes (^, ~, >=, etc.) from a version string,\r\n * returning an exact pinned version. This prevents uncontrolled automatic\r\n * upgrades when `npm install` is run.\r\n */\r\nexport function pinVersion(version: string): string {\r\n  return version.replace(/^[~^>=<]+/, \"\");\r\n}\r\n\r\n/**\r\n * Strips semver range prefixes from every value in a dependency record.\r\n */\r\nexport function pinDependencies(deps: Record<string, string>): Record<string, string> {\r\n  const pinned: Record<string, string> = {};\r\n  for (const key of Object.keys(deps)) {\r\n    pinned[key] = pinVersion(deps[key]);\r\n  }\r\n  return pinned;\r\n}\r\n\r\nexport default class NpmPackageDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: PackageJSON;\r\n\r\n  private _onLoaded = new EventDispatcher<NpmPackageDefinition, NpmPackageDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.description;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition) {\r\n      return this.definition.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<NpmPackageDefinition, NpmPackageDefinition>) {\r\n    let dt: NpmPackageDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new NpmPackageDefinition();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof NpmPackageDefinition) {\r\n      dt = file.manager as NpmPackageDefinition;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"NPDP\");\r\n\r\n    if (this.definition) {\r\n      return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async ensureMinContent(project: Project) {\r\n    await this.load();\r\n\r\n    if (!this.definition) {\r\n      this.definition = PackageJsonDefault;\r\n    }\r\n\r\n    await this.updateContent(project);\r\n    await this.ensureStandardContent();\r\n  }\r\n\r\n  async updateContent(project: Project) {\r\n    await this.load();\r\n\r\n    if (!this.definition) {\r\n      return;\r\n    }\r\n\r\n    this.definition.name = project.name;\r\n    this.definition.description = project.description;\r\n    this.definition.version = project.versionAsString;\r\n  }\r\n\r\n  async ensureStandardContent() {\r\n    await this.load();\r\n\r\n    if (!this.definition) {\r\n      return;\r\n    }\r\n\r\n    if (this.definition.devDependencies) {\r\n      let isValidDevDependencies = true;\r\n\r\n      for (const devDepend in this.definition.devDependencies) {\r\n        if (DevDependenciesDefault[devDepend] === undefined) {\r\n          Log.debugAlert(\"Unexpected dev dependency '\" + devDepend + \"' found.\");\r\n          isValidDevDependencies = false;\r\n        }\r\n      }\r\n\r\n      if (!isValidDevDependencies) {\r\n        this.definition.devDependencies = DevDependenciesDefault;\r\n      } else {\r\n        this.definition.devDependencies = pinDependencies(this.definition.devDependencies);\r\n      }\r\n    }\r\n\r\n    if (this.definition.dependencies) {\r\n      let isValidDependencies = true;\r\n\r\n      for (const dependencyName in this.definition.dependencies) {\r\n        if (DependenciesDefault[dependencyName] === undefined) {\r\n          Log.debugAlert(\"Unexpected dependency '\" + dependencyName + \"' found.\");\r\n          isValidDependencies = false;\r\n        }\r\n      }\r\n\r\n      if (!isValidDependencies) {\r\n        this.definition.dependencies = DependenciesDefault;\r\n      } else {\r\n        this.definition.dependencies = pinDependencies(this.definition.dependencies);\r\n      }\r\n    }\r\n\r\n    if ((this.definition as any).overrides) {\r\n      const overrides: { [name: string]: any } = (this.definition as any).overrides;\r\n\r\n      let isOverrideValid = true;\r\n\r\n      for (const overrideName in overrides) {\r\n        if (OverridesDefault[overrideName] === undefined) {\r\n          Log.debugAlert(\"Unexpected override '\" + overrideName + \"' found.\");\r\n          isOverrideValid = false;\r\n        } else if (JSON.stringify(OverridesDefault[overrideName]) !== JSON.stringify(overrides[overrideName])) {\r\n          Log.debugAlert(\r\n            \"Unexpected override '\" +\r\n              overrideName +\r\n              \"' is not in exepected form: \" +\r\n              JSON.stringify(overrides[overrideName])\r\n          );\r\n          isOverrideValid = false;\r\n        }\r\n      }\r\n\r\n      if (!isOverrideValid) {\r\n        (this.definition as any).overrides = OverridesDefault;\r\n      }\r\n    }\r\n\r\n    if (this.definition.scripts) {\r\n      let isValidScripts = true;\r\n\r\n      for (const scriptName in this.definition.scripts) {\r\n        if (ScriptsDefault[scriptName] === undefined) {\r\n          Log.debugAlert(\"Unexpected script '\" + scriptName + \"' found.\");\r\n          isValidScripts = false;\r\n        } else if (this.definition.scripts[scriptName] !== ScriptsDefault[scriptName]) {\r\n          Log.debugAlert(\"Script '\" + scriptName + \"' is in unexpected form: \" + this.definition.scripts[scriptName]);\r\n          isValidScripts = false;\r\n        }\r\n      }\r\n\r\n      if (!isValidScripts) {\r\n        this.definition.scripts = ScriptsDefault;\r\n      }\r\n    }\r\n\r\n    for (const key in this.definition) {\r\n      if (!NpmPackageSettingAllowList.includes(key)) {\r\n        (this.definition as any)[key] = undefined;\r\n        Log.debugAlert(\"Unexpected setting '\" + key + \"' found in package.json.\");\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensureSetupContent(bpTitle?: string): Promise<boolean> {\r\n    await this.load();\r\n\r\n    let changed = false;\r\n\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        name: \"my-project\",\r\n        version: \"0.1.0\",\r\n        description: \"My Minecraft Addon Project\",\r\n        private: true,\r\n      };\r\n      changed = true;\r\n    }\r\n\r\n    if (bpTitle && (!this.definition.name || this.definition.name === \"my-project\")) {\r\n      const slugified = bpTitle\r\n        .toLowerCase()\r\n        .replace(/[^a-z0-9-]/g, \"-\")\r\n        .replace(/-+/g, \"-\")\r\n        .replace(/^-|-$/g, \"\");\r\n\r\n      if (slugified && slugified !== this.definition.name) {\r\n        this.definition.name = slugified;\r\n        changed = true;\r\n      }\r\n    }\r\n\r\n    if (!this.definition.scripts) {\r\n      this.definition.scripts = {};\r\n    }\r\n\r\n    for (const scriptName in SetupRequiredScripts) {\r\n      if (!this.definition.scripts[scriptName]) {\r\n        this.definition.scripts[scriptName] = SetupRequiredScripts[scriptName];\r\n        changed = true;\r\n      }\r\n    }\r\n\r\n    if (!this.definition.dependencies) {\r\n      this.definition.dependencies = {};\r\n    }\r\n\r\n    for (const depName in SetupRequiredDependencies) {\r\n      if (!this.definition.dependencies[depName]) {\r\n        this.definition.dependencies[depName] = SetupRequiredDependencies[depName];\r\n        changed = true;\r\n      }\r\n    }\r\n\r\n    // Pin all dependency versions (strip ^ and ~ prefixes)\r\n    for (const depName in this.definition.dependencies) {\r\n      const pinned = pinVersion(this.definition.dependencies[depName]);\r\n      if (pinned !== this.definition.dependencies[depName]) {\r\n        this.definition.dependencies[depName] = pinned;\r\n        changed = true;\r\n      }\r\n    }\r\n\r\n    if (this.definition.devDependencies) {\r\n      for (const depName in this.definition.devDependencies) {\r\n        const pinned = pinVersion(this.definition.devDependencies[depName]);\r\n        if (pinned !== this.definition.devDependencies[depName]) {\r\n          this.definition.devDependencies[depName] = pinned;\r\n          changed = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return changed;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (this._file.isContentLoaded === false) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    this.definition = StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "export enum MolangNodeType {\r\n  unknown = 0,\r\n  number = 1,\r\n  variable = 2,\r\n  operator = 3,\r\n  function = 4,\r\n  condition = 5,\r\n  clauseSet = 6,\r\n}\r\n\r\nexport default interface IMolangNode {\r\n  type: MolangNodeType;\r\n  value?: string;\r\n  left?: IMolangNode;\r\n  right?: IMolangNode;\r\n}\r\n", "import IMolangNode from \"./IMolangNode\";\r\n\r\nexport default class MolangNode {\r\n  _data: IMolangNode;\r\n\r\n  get data() {\r\n    return this._data;\r\n  }\r\n\r\n  constructor(data: IMolangNode) {\r\n    this._data = data;\r\n  }\r\n}\r\n", "import { IMolangExpression } from \"./IMolangExpression\";\r\nimport IMolangNode, { MolangNodeType } from \"./IMolangNode\";\r\nimport MolangNode from \"./MolangNode\";\r\n\r\n// NOTE NOTE: I tried to call this MolangExpression but it was giving errors in the vscbuild process\r\nexport default class Molang {\r\n  _data: IMolangExpression;\r\n\r\n  constructor(molang: string) {\r\n    const node = this.parse(molang);\r\n    this._data = { rootNode: node.data };\r\n  }\r\n\r\n  parse(molangExpression: string): MolangNode {\r\n    const tokens = this.tokenize(molangExpression);\r\n    const syntaxTree = this.parseTokens(tokens);\r\n\r\n    return syntaxTree;\r\n  }\r\n\r\n  private tokenize(expression: string): string[] {\r\n    // Simple tokenizer splitting by spaces and operators\r\n    return expression.match(/(\\d+|\\w+|[()+\\-/])/g) || [];\r\n  }\r\n\r\n  private parseTokens(tokens: string[]): MolangNode {\r\n    const stack: MolangNode[] = [];\r\n    const operators: string[] = [];\r\n\r\n    const precedence: { [key: string]: number } = {\r\n      \"+\": 1,\r\n      \"-\": 1,\r\n      \"*\": 2,\r\n      \"/\": 2,\r\n    };\r\n\r\n    const operatorSet = new Set([\"+\", \"-\", \"*\", \"/\"]);\r\n\r\n    const applyOperator = () => {\r\n      const operator = operators.pop();\r\n      const right = stack.pop();\r\n      const left = stack.pop();\r\n\r\n      const node: IMolangNode = {\r\n        type: MolangNodeType.operator,\r\n        value: operator,\r\n        left: left?.data,\r\n        right: right?.data,\r\n      };\r\n\r\n      stack.push(new MolangNode(node));\r\n    };\r\n\r\n    for (const token of tokens) {\r\n      if (/\\d+/.test(token)) {\r\n        stack.push(new MolangNode({ type: MolangNodeType.number, value: token }));\r\n      } else if (/\\w+/.test(token)) {\r\n        stack.push(new MolangNode({ type: MolangNodeType.variable, value: token }));\r\n      } else if (token === \"(\") {\r\n        operators.push(token);\r\n      } else if (token === \")\") {\r\n        while (operators.length && operators[operators.length - 1] !== \"(\") {\r\n          applyOperator();\r\n        }\r\n        operators.pop(); // Remove '('\r\n      } else if (operatorSet.has(token)) {\r\n        while (operators.length && precedence[operators[operators.length - 1]] >= precedence[token]) {\r\n          applyOperator();\r\n        }\r\n        operators.push(token);\r\n      }\r\n    }\r\n\r\n    while (operators.length) {\r\n      applyOperator();\r\n    }\r\n\r\n    return stack[0];\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport { IBlockPermutation } from \"./IBlockTypeBehaviorPack\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport Molang from \"./Molang\";\r\nimport IComponent from \"./IComponent\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class ManagedPermutation implements IManagedComponentSetItem {\r\n  _data?: IBlockPermutation;\r\n  _managed?: { [id: string]: IManagedComponent | undefined };\r\n\r\n  _conditionMolang: Molang | undefined;\r\n\r\n  private _onComponentAdded = new EventDispatcher<ManagedPermutation, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<ManagedPermutation, string>();\r\n  private _onComponentChanged = new EventDispatcher<ManagedPermutation, IManagedComponent>();\r\n\r\n  public constructor(data: IBlockPermutation) {\r\n    this._data = data;\r\n\r\n    this._managed = {};\r\n  }\r\n\r\n  id: string = \"\";\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  public get condition() {\r\n    return this._data?.condition;\r\n  }\r\n\r\n  public set condition(value: string | undefined) {\r\n    if (value) {\r\n      if (!this._data) {\r\n        this._data = {\r\n          condition: \"\",\r\n          components: {},\r\n        };\r\n      }\r\n\r\n      this._data.condition = value;\r\n    }\r\n  }\r\n\r\n  public get conditionExpression() {\r\n    if (this._conditionMolang) {\r\n      return this._conditionMolang;\r\n    }\r\n\r\n    const cond = this.condition;\r\n\r\n    if (!cond) {\r\n      return undefined;\r\n    }\r\n\r\n    this._conditionMolang = new Molang(cond);\r\n\r\n    return this._conditionMolang;\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ): IManagedComponent {\r\n    if (!this._data) {\r\n      this._data = {\r\n        condition: \"\",\r\n        components: {},\r\n      };\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(this._data.components, id, componentOrData);\r\n\r\n    if (Utilities.isUsableAsObjectKey(mc.id)) {\r\n      this._data.components[mc.id] = mc.getData();\r\n      this._managed[mc.id] = mc;\r\n    }\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (!this._data) {\r\n      return;\r\n    }\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      throw new Error();\r\n    }\r\n\r\n    this._data.components[id] = undefined;\r\n\r\n    if (this._managed) {\r\n      this._managed[id] = undefined;\r\n    }\r\n  }\r\n\r\n  getComponent(id: string): IManagedComponent | undefined {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      const comps = this._data.components;\r\n\r\n      if (!comps) {\r\n        return undefined;\r\n      }\r\n\r\n      const data = comps[id];\r\n\r\n      if (data) {\r\n        this._managed[id] = new ManagedComponent(this._data.components, id, data);\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  getAllComponents() {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    if (!this._data) {\r\n      return [];\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n\r\n    const comparr: IManagedComponent[] = [];\r\n\r\n    for (const c in this._data) {\r\n      const comp = this._data.components[c];\r\n\r\n      if (!this._managed[c] && comp) {\r\n        this._managed[c] = new ManagedComponent(this._data.components, c, comp);\r\n      }\r\n\r\n      const mc = this._managed[c];\r\n\r\n      if (mc) {\r\n        comparr.push(mc);\r\n      }\r\n    }\r\n\r\n    return comparr;\r\n  }\r\n\r\n  notifyComponentUpdated(id: string): void {\r\n    if (!this._managed) {\r\n      return;\r\n    }\r\n\r\n    const comp = this._managed[id];\r\n\r\n    if (comp) {\r\n      this._onComponentChanged.dispatch(this, comp);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IModelGeometry, { IGeometry } from \"./IModelGeometry\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class ModelGeometryDefinition {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: IModelGeometry;\r\n  public definitions: IGeometry[] = [];\r\n\r\n  private _identifiers: string[] = [];\r\n\r\n  private _onLoaded = new EventDispatcher<ModelGeometryDefinition, ModelGeometryDefinition>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get formatVersion() {\r\n    return this._data?.format_version;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get defaultGeometry() {\r\n    if (this.definitions && this.definitions.length > 0) {\r\n      return this.definitions[0];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get identifiers(): string[] {\r\n    if (this._identifiers) {\r\n      return this._identifiers;\r\n    }\r\n\r\n    if (\r\n      !this._data ||\r\n      !this._data[\"minecraft:geometry\"] ||\r\n      this._data[\"minecraft:geometry\"].length !== 1 ||\r\n      !this._data[\"minecraft:geometry\"][0].description\r\n    ) {\r\n      return [];\r\n    }\r\n\r\n    const ids: string[] = [];\r\n\r\n    for (const def of this.definitions) {\r\n      if (def.description && def.description.identifier) {\r\n        ids.push(def.description.identifier);\r\n      }\r\n    }\r\n\r\n    return ids;\r\n  }\r\n\r\n  public getById(id: string): IGeometry | undefined {\r\n    Log.assert(id !== \"minecraft:geometry\");\r\n\r\n    let model = (this._data as any)[id];\r\n\r\n    if (model) {\r\n      return model as IGeometry;\r\n    }\r\n\r\n    // Check for v1 format keys with inheritance syntax (e.g., \"geometry.sheep.v1.8:geometry.sheep.sheared.v1.8\")\r\n    // When looking for \"geometry.sheep.v1.8\", check if any key starts with that ID followed by \":\"\r\n    for (const key of Object.keys(this._data || {})) {\r\n      if (key.startsWith(id + \":\")) {\r\n        return (this._data as any)[key] as IGeometry;\r\n      }\r\n    }\r\n\r\n    for (const def of this.definitions) {\r\n      if (def.description && def.description.identifier === id) {\r\n        return def;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public getVisibleBoundsWidth(defIndex: number): number | undefined {\r\n    if (defIndex < 0 || defIndex >= this.definitions.length) {\r\n      return;\r\n    }\r\n\r\n    if (!this.definitions[defIndex]) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.definitions[defIndex].description) {\r\n      return this.definitions[defIndex].description.visible_bounds_width;\r\n    }\r\n\r\n    return this.definitions[defIndex].visible_bounds_width;\r\n  }\r\n\r\n  public getVisibleBoundsHeight(defIndex: number): number | undefined {\r\n    if (defIndex < 0 || defIndex >= this.definitions.length) {\r\n      return;\r\n    }\r\n\r\n    if (!this.definitions[defIndex]) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.definitions[defIndex].description) {\r\n      return this.definitions[defIndex].description.visible_bounds_height;\r\n    }\r\n\r\n    return this.definitions[defIndex].visible_bounds_height;\r\n  }\r\n\r\n  public getVisibleBoundsOffset(defIndex: number): number[] | undefined {\r\n    if (defIndex < 0 || defIndex >= this.definitions.length) {\r\n      return;\r\n    }\r\n\r\n    if (!this.definitions[defIndex]) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.definitions[defIndex].description) {\r\n      return this.definitions[defIndex].description.visible_bounds_offset;\r\n    }\r\n\r\n    return this.definitions[defIndex].visible_bounds_offset;\r\n  }\r\n\r\n  public getTextureWidth(defIndex: number): number | undefined {\r\n    if (defIndex < 0 || defIndex >= this.definitions.length) {\r\n      return;\r\n    }\r\n\r\n    if (!this.definitions[defIndex]) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.definitions[defIndex].description) {\r\n      return this.definitions[defIndex].description.texture_width;\r\n    }\r\n\r\n    return this.definitions[defIndex].texturewidth;\r\n  }\r\n\r\n  public ensureDefault(id: string) {\r\n    if (!this._data) {\r\n      this._data = {\r\n        format_version: \"1.12.0\",\r\n        \"minecraft:geometry\": [\r\n          {\r\n            description: {\r\n              identifier: id,\r\n              texture_width: 128,\r\n              texture_height: 64,\r\n              visible_bounds_width: 4,\r\n              visible_bounds_height: 3.5,\r\n              visible_bounds_offset: [0, 1.25, 0],\r\n            },\r\n            bones: [],\r\n          },\r\n        ],\r\n      };\r\n\r\n      this.persist();\r\n      this.populateDefsAndIds();\r\n      this._isLoaded = true;\r\n    }\r\n  }\r\n\r\n  public getTextureHeight(defIndex: number): number | undefined {\r\n    if (defIndex < 0 || defIndex >= this.definitions.length) {\r\n      return;\r\n    }\r\n\r\n    if (!this.definitions[defIndex]) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.definitions[defIndex].description) {\r\n      return this.definitions[defIndex].description.texture_height;\r\n    }\r\n\r\n    return this.definitions[defIndex].textureheight;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<ModelGeometryDefinition, ModelGeometryDefinition>\r\n  ) {\r\n    let rc: ModelGeometryDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rc = new ModelGeometryDefinition();\r\n\r\n      rc.file = file;\r\n\r\n      file.manager = rc;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ModelGeometryDefinition) {\r\n      rc = file.manager as ModelGeometryDefinition;\r\n\r\n      if (!rc.isLoaded) {\r\n        if (loadHandler) {\r\n          rc.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rc.load();\r\n      }\r\n    }\r\n\r\n    return rc;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] {\r\n    if (!this._data || !this._data.format_version) {\r\n      return [0, 0, 0];\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._data.format_version);\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"MGDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  public ensureDefinition(name: string) {\r\n    if (!this._data) {\r\n      this._data = {\r\n        format_version: \"1.12.0\",\r\n        \"minecraft:geometry\": [\r\n          {\r\n            description: {\r\n              identifier: name,\r\n              texture_width: 32,\r\n              texture_height: 32,\r\n              visible_bounds_width: 2,\r\n              visible_bounds_height: 2,\r\n              visible_bounds_offset: [0, 0, 0],\r\n            },\r\n            bones: [],\r\n          },\r\n        ],\r\n      };\r\n    }\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  populateDefsAndIds() {\r\n    this.definitions = [];\r\n    this._identifiers = [];\r\n\r\n    if (this._data && this._data[\"minecraft:geometry\"]) {\r\n      for (const def of this._data[\"minecraft:geometry\"]) {\r\n        if (def.description && def.description.identifier) {\r\n          this._identifiers.push(def.description.identifier);\r\n        }\r\n\r\n        this.definitions.push(def);\r\n      }\r\n    } else if (this._data) {\r\n      // look for 1.8.0 style geometries:\r\n      // {\r\n      //   \"format_version\": ...\r\n      //   \"geometry.foobar\": {}\r\n      // }\r\n\r\n      for (const elt in this._data) {\r\n        if (elt !== \"format_version\" && elt.startsWith(\"geometry.\") && (this._data as any)[elt]) {\r\n          this._identifiers.push(elt);\r\n\r\n          this.definitions.push((this._data as any)[elt]);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Load geometry data from a raw JavaScript object (parsed JSON).\r\n   * Useful for loading geometry data without a file reference.\r\n   * @param data The geometry JSON data object\r\n   * @param geometryId Optional specific geometry identifier to select from multi-geometry files\r\n   */\r\n  loadFromData(data: object, geometryId?: string) {\r\n    this._data = data as IModelGeometry;\r\n    this.populateDefsAndIds();\r\n    this._isLoaded = true;\r\n\r\n    // If a specific geometry ID is requested and there are multiple, reorder to make it default\r\n    if (geometryId && this.definitions.length > 1) {\r\n      const index = this._identifiers.indexOf(geometryId);\r\n      if (index > 0) {\r\n        // Move the requested geometry to the front\r\n        const [geo] = this.definitions.splice(index, 1);\r\n        const [id] = this._identifiers.splice(index, 1);\r\n        this.definitions.unshift(geo);\r\n        this._identifiers.unshift(id);\r\n      }\r\n    }\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this.populateDefsAndIds();\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n}\r\n", "var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/syntax.ts\nvar Syntax = /* @__PURE__ */ ((Syntax2) => {\n  Syntax2[\"AssignmentExpression\"] = \"AssignmentExpression\";\n  Syntax2[\"AssignmentPattern\"] = \"AssignmentPattern\";\n  Syntax2[\"ArrayExpression\"] = \"ArrayExpression\";\n  Syntax2[\"ArrayPattern\"] = \"ArrayPattern\";\n  Syntax2[\"ArrowFunctionExpression\"] = \"ArrowFunctionExpression\";\n  Syntax2[\"AwaitExpression\"] = \"AwaitExpression\";\n  Syntax2[\"BlockStatement\"] = \"BlockStatement\";\n  Syntax2[\"BinaryExpression\"] = \"BinaryExpression\";\n  Syntax2[\"BreakStatement\"] = \"BreakStatement\";\n  Syntax2[\"CallExpression\"] = \"CallExpression\";\n  Syntax2[\"CatchClause\"] = \"CatchClause\";\n  Syntax2[\"ChainExpression\"] = \"ChainExpression\";\n  Syntax2[\"ClassBody\"] = \"ClassBody\";\n  Syntax2[\"ClassDeclaration\"] = \"ClassDeclaration\";\n  Syntax2[\"ClassExpression\"] = \"ClassExpression\";\n  Syntax2[\"ConditionalExpression\"] = \"ConditionalExpression\";\n  Syntax2[\"ContinueStatement\"] = \"ContinueStatement\";\n  Syntax2[\"Decorator\"] = \"Decorator\";\n  Syntax2[\"DoWhileStatement\"] = \"DoWhileStatement\";\n  Syntax2[\"DebuggerStatement\"] = \"DebuggerStatement\";\n  Syntax2[\"EmptyStatement\"] = \"EmptyStatement\";\n  Syntax2[\"ExportAllDeclaration\"] = \"ExportAllDeclaration\";\n  Syntax2[\"ExportDefaultDeclaration\"] = \"ExportDefaultDeclaration\";\n  Syntax2[\"ExportNamedDeclaration\"] = \"ExportNamedDeclaration\";\n  Syntax2[\"ExportSpecifier\"] = \"ExportSpecifier\";\n  Syntax2[\"ExpressionStatement\"] = \"ExpressionStatement\";\n  Syntax2[\"ForStatement\"] = \"ForStatement\";\n  Syntax2[\"ForOfStatement\"] = \"ForOfStatement\";\n  Syntax2[\"ForInStatement\"] = \"ForInStatement\";\n  Syntax2[\"FunctionDeclaration\"] = \"FunctionDeclaration\";\n  Syntax2[\"FunctionExpression\"] = \"FunctionExpression\";\n  Syntax2[\"Identifier\"] = \"Identifier\";\n  Syntax2[\"IfStatement\"] = \"IfStatement\";\n  Syntax2[\"ImportAttribute\"] = \"ImportAttribute\";\n  Syntax2[\"ImportExpression\"] = \"ImportExpression\";\n  Syntax2[\"ImportDeclaration\"] = \"ImportDeclaration\";\n  Syntax2[\"ImportDefaultSpecifier\"] = \"ImportDefaultSpecifier\";\n  Syntax2[\"ImportNamespaceSpecifier\"] = \"ImportNamespaceSpecifier\";\n  Syntax2[\"ImportSpecifier\"] = \"ImportSpecifier\";\n  Syntax2[\"Literal\"] = \"Literal\";\n  Syntax2[\"LabeledStatement\"] = \"LabeledStatement\";\n  Syntax2[\"LogicalExpression\"] = \"LogicalExpression\";\n  Syntax2[\"MemberExpression\"] = \"MemberExpression\";\n  Syntax2[\"MetaProperty\"] = \"MetaProperty\";\n  Syntax2[\"MethodDefinition\"] = \"MethodDefinition\";\n  Syntax2[\"NewExpression\"] = \"NewExpression\";\n  Syntax2[\"ObjectExpression\"] = \"ObjectExpression\";\n  Syntax2[\"ObjectPattern\"] = \"ObjectPattern\";\n  Syntax2[\"Program\"] = \"Program\";\n  Syntax2[\"Property\"] = \"Property\";\n  Syntax2[\"PrivateIdentifier\"] = \"PrivateIdentifier\";\n  Syntax2[\"RestElement\"] = \"RestElement\";\n  Syntax2[\"ReturnStatement\"] = \"ReturnStatement\";\n  Syntax2[\"SequenceExpression\"] = \"SequenceExpression\";\n  Syntax2[\"SpreadElement\"] = \"SpreadElement\";\n  Syntax2[\"StaticBlock\"] = \"StaticBlock\";\n  Syntax2[\"Super\"] = \"Super\";\n  Syntax2[\"SwitchCase\"] = \"SwitchCase\";\n  Syntax2[\"SwitchStatement\"] = \"SwitchStatement\";\n  Syntax2[\"TaggedTemplateExpression\"] = \"TaggedTemplateExpression\";\n  Syntax2[\"TemplateElement\"] = \"TemplateElement\";\n  Syntax2[\"TemplateLiteral\"] = \"TemplateLiteral\";\n  Syntax2[\"ThisExpression\"] = \"ThisExpression\";\n  Syntax2[\"ThrowStatement\"] = \"ThrowStatement\";\n  Syntax2[\"TryStatement\"] = \"TryStatement\";\n  Syntax2[\"UnaryExpression\"] = \"UnaryExpression\";\n  Syntax2[\"UpdateExpression\"] = \"UpdateExpression\";\n  Syntax2[\"VariableDeclaration\"] = \"VariableDeclaration\";\n  Syntax2[\"VariableDeclarator\"] = \"VariableDeclarator\";\n  Syntax2[\"WhileStatement\"] = \"WhileStatement\";\n  Syntax2[\"WithStatement\"] = \"WithStatement\";\n  Syntax2[\"YieldExpression\"] = \"YieldExpression\";\n  return Syntax2;\n})(Syntax || {});\n\n// src/comment-handler.ts\nvar CommentHandler = class {\n  attach;\n  comments;\n  stack;\n  leading;\n  trailing;\n  constructor() {\n    this.attach = false;\n    this.comments = [];\n    this.stack = [];\n    this.leading = [];\n    this.trailing = [];\n  }\n  insertInnerComments(node, metadata) {\n    if (node.type === \"BlockStatement\" /* BlockStatement */ && node.body.length === 0) {\n      const innerComments = [];\n      for (let i = this.leading.length - 1; i >= 0; --i) {\n        const entry = this.leading[i];\n        if (metadata.end.offset >= entry.start) {\n          innerComments.unshift(entry.comment);\n          this.leading.splice(i, 1);\n          this.trailing.splice(i, 1);\n        }\n      }\n      if (innerComments.length) {\n        node.innerComments = innerComments;\n      }\n    }\n  }\n  findTrailingComments(metadata) {\n    let trailingComments = [];\n    if (this.trailing.length > 0) {\n      for (let i = this.trailing.length - 1; i >= 0; --i) {\n        const entry = this.trailing[i];\n        if (entry.start >= metadata.end.offset) {\n          trailingComments.unshift(entry.comment);\n        }\n      }\n      this.trailing.length = 0;\n      return trailingComments;\n    }\n    const last = this.stack[this.stack.length - 1];\n    if (last && last.node.trailingComments) {\n      const firstComment = last.node.trailingComments[0];\n      if (firstComment && firstComment.range[0] >= metadata.end.offset) {\n        trailingComments = last.node.trailingComments;\n        delete last.node.trailingComments;\n      }\n    }\n    return trailingComments;\n  }\n  findLeadingComments(metadata) {\n    const leadingComments = [];\n    let target;\n    while (this.stack.length > 0) {\n      const entry = this.stack[this.stack.length - 1];\n      if (entry && entry.start >= metadata.start.offset) {\n        target = entry.node;\n        this.stack.pop();\n      } else {\n        break;\n      }\n    }\n    if (target) {\n      const count = target.leadingComments ? target.leadingComments.length : 0;\n      for (let i = count - 1; i >= 0; --i) {\n        const comment = target.leadingComments[i];\n        if (comment.range[1] <= metadata.start.offset) {\n          leadingComments.unshift(comment);\n          target.leadingComments.splice(i, 1);\n        }\n      }\n      if (target.leadingComments && target.leadingComments.length === 0) {\n        delete target.leadingComments;\n      }\n      return leadingComments;\n    }\n    for (let i = this.leading.length - 1; i >= 0; --i) {\n      const entry = this.leading[i];\n      if (entry.start <= metadata.start.offset) {\n        leadingComments.unshift(entry.comment);\n        this.leading.splice(i, 1);\n      }\n    }\n    return leadingComments;\n  }\n  visitNode(node, metadata) {\n    if (node.type === \"Program\" /* Program */ && node.body.length > 0) {\n      return;\n    }\n    this.insertInnerComments(node, metadata);\n    const trailingComments = this.findTrailingComments(metadata);\n    const leadingComments = this.findLeadingComments(metadata);\n    if (leadingComments.length > 0) {\n      node.leadingComments = leadingComments;\n    }\n    if (trailingComments.length > 0) {\n      node.trailingComments = trailingComments;\n    }\n    this.stack.push({\n      node,\n      start: metadata.start.offset\n    });\n  }\n  visitComment(node, metadata) {\n    const type = node.type[0] === \"L\" ? \"Line\" : \"Block\";\n    const comment = {\n      type,\n      value: node.value\n    };\n    if (node.range) {\n      comment.range = node.range;\n    }\n    if (node.loc) {\n      comment.loc = node.loc;\n    }\n    this.comments.push(comment);\n    if (this.attach) {\n      const entry = {\n        comment: {\n          type,\n          value: node.value,\n          range: [metadata.start.offset, metadata.end.offset]\n        },\n        start: metadata.start.offset\n      };\n      if (node.loc) {\n        entry.comment.loc = node.loc;\n      }\n      node.type = type;\n      this.leading.push(entry);\n      this.trailing.push(entry);\n    }\n  }\n  visit(node, metadata) {\n    if (node.type === \"LineComment\") {\n      this.visitComment(node, metadata);\n    } else if (node.type === \"BlockComment\") {\n      this.visitComment(node, metadata);\n    } else if (this.attach) {\n      this.visitNode(node, metadata);\n    }\n  }\n};\n\n// src/character.ts\nvar Regex = {\n  // Unicode v12.1.0 NonAsciiIdentifierStart:\n  NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEF\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7C6\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB67\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDEC0-\\uDEEB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/,\n  // Unicode v12.1.0 NonAsciiIdentifierPart:\n  // eslint-disable-next-line no-misleading-character-class\n  NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u07FD\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D3-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u09FE\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CD0-\\u1CD2\\u1CD4-\\u1CFA\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEF\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7C6\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB67\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD27\\uDD30-\\uDD39\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF50\\uDFE0-\\uDFF6]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD44-\\uDD46\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDC9-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3B-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC5E\\uDC5F\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDC00-\\uDC3A\\uDCA0-\\uDCE9\\uDCFF\\uDDA0-\\uDDA7\\uDDAA-\\uDDD7\\uDDDA-\\uDDE1\\uDDE3\\uDDE4\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE99\\uDE9D\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF6]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF4F-\\uDF87\\uDF8F-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDD00-\\uDD2C\\uDD30-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDEC0-\\uDEF9]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n};\nvar Character = {\n  fromCodePoint(cp) {\n    return cp < 65536 ? String.fromCharCode(cp) : String.fromCharCode(55296 + (cp - 65536 >> 10)) + String.fromCharCode(56320 + (cp - 65536 & 1023));\n  },\n  isStringWellFormedUnicode(text) {\n    for (let i = 0; i < text.length; i++) {\n      let c = text.charCodeAt(i);\n      if (c >= 55296 && c <= 56319) {\n        if (i === text.length - 1) {\n          return false;\n        }\n        i++;\n        c = text.charCodeAt(i);\n        if (c < 56320 && c > 57343) {\n          return false;\n        }\n      } else if (c >= 56320 && c <= 57343) {\n        return false;\n      }\n    }\n    return true;\n  },\n  // https://tc39.github.io/ecma262/#sec-white-space\n  isWhiteSpace(cp) {\n    return cp === 32 || cp === 9 || cp === 11 || cp === 12 || cp === 160 || cp >= 5760 && [5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8239, 8287, 12288, 65279].indexOf(cp) >= 0;\n  },\n  // https://tc39.github.io/ecma262/#sec-line-terminators\n  isLineTerminator(cp) {\n    return cp === 10 || cp === 13 || cp === 8232 || cp === 8233;\n  },\n  // https://tc39.github.io/ecma262/#sec-names-and-keywords\n  isIdentifierStart(cp) {\n    return cp === 36 || cp === 95 || // $ (dollar) and _ (underscore)\n    cp >= 65 && cp <= 90 || // A..Z\n    cp >= 97 && cp <= 122 || // a..z\n    cp === 92 || // \\ (backslash)\n    cp >= 128 && Regex.NonAsciiIdentifierStart.test(Character.fromCodePoint(cp));\n  },\n  isIdentifierPart(cp) {\n    return cp === 36 || cp === 95 || // $ (dollar) and _ (underscore)\n    cp >= 65 && cp <= 90 || // A..Z\n    cp >= 97 && cp <= 122 || // a..z\n    cp >= 48 && cp <= 57 || // 0..9\n    cp === 92 || // \\ (backslash)\n    cp >= 128 && Regex.NonAsciiIdentifierPart.test(Character.fromCodePoint(cp));\n  },\n  // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n  isDecimalDigit(cp) {\n    return cp >= 48 && cp <= 57;\n  },\n  isDecimalDigitChar(ch) {\n    return ch.length === 1 && Character.isDecimalDigit(ch.charCodeAt(0));\n  },\n  isHexDigit(cp) {\n    return cp >= 48 && cp <= 57 || // 0..9\n    cp >= 65 && cp <= 70 || // A..F\n    cp >= 97 && cp <= 102;\n  },\n  isHexDigitChar(ch) {\n    return ch.length === 1 && Character.isHexDigit(ch.charCodeAt(0));\n  },\n  isOctalDigit(cp) {\n    return cp >= 48 && cp <= 55;\n  },\n  isOctalDigitChar(ch) {\n    return ch.length === 1 && Character.isOctalDigit(ch.charCodeAt(0));\n  }\n};\n\n// src/jsx-nodes.ts\nvar JSXClosingElement = class {\n  type;\n  name;\n  constructor(name) {\n    this.type = \"JSXClosingElement\" /* JSXClosingElement */;\n    this.name = name;\n  }\n};\nvar JSXClosingFragment = class {\n  type;\n  constructor() {\n    this.type = \"JSXClosingFragment\" /* JSXClosingFragment */;\n  }\n};\nvar JSXElement = class {\n  type;\n  openingElement;\n  children;\n  closingElement;\n  constructor(openingElement, children, closingElement) {\n    this.type = \"JSXElement\" /* JSXElement */;\n    this.openingElement = openingElement;\n    this.children = children;\n    this.closingElement = closingElement;\n  }\n};\nvar JSXEmptyExpression = class {\n  type;\n  constructor() {\n    this.type = \"JSXEmptyExpression\" /* JSXEmptyExpression */;\n  }\n};\nvar JSXExpressionContainer = class {\n  type;\n  expression;\n  constructor(expression) {\n    this.type = \"JSXExpressionContainer\" /* JSXExpressionContainer */;\n    this.expression = expression;\n  }\n};\nvar JSXIdentifier = class {\n  type;\n  name;\n  constructor(name) {\n    this.type = \"JSXIdentifier\" /* JSXIdentifier */;\n    this.name = name;\n  }\n};\nvar JSXMemberExpression = class {\n  type;\n  object;\n  property;\n  constructor(object, property) {\n    this.type = \"JSXMemberExpression\" /* JSXMemberExpression */;\n    this.object = object;\n    this.property = property;\n  }\n};\nvar JSXAttribute = class {\n  type;\n  name;\n  value;\n  constructor(name, value) {\n    this.type = \"JSXAttribute\" /* JSXAttribute */;\n    this.name = name;\n    this.value = value;\n  }\n};\nvar JSXNamespacedName = class {\n  type;\n  namespace;\n  name;\n  constructor(namespace, name) {\n    this.type = \"JSXNamespacedName\" /* JSXNamespacedName */;\n    this.namespace = namespace;\n    this.name = name;\n  }\n};\nvar JSXOpeningElement = class {\n  type;\n  name;\n  selfClosing;\n  attributes;\n  constructor(name, selfClosing, attributes) {\n    this.type = \"JSXOpeningElement\" /* JSXOpeningElement */;\n    this.name = name;\n    this.selfClosing = selfClosing;\n    this.attributes = attributes;\n  }\n};\nvar JSXOpeningFragment = class {\n  type;\n  selfClosing;\n  constructor(selfClosing) {\n    this.type = \"JSXOpeningFragment\" /* JSXOpeningFragment */;\n    this.selfClosing = selfClosing;\n  }\n};\nvar JSXSpreadAttribute = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"JSXSpreadAttribute\" /* JSXSpreadAttribute */;\n    this.argument = argument;\n  }\n};\nvar JSXText = class {\n  type;\n  value;\n  raw;\n  constructor(value, raw) {\n    this.type = \"JSXText\" /* JSXText */;\n    this.value = value;\n    this.raw = raw;\n  }\n};\n\n// src/nodes.ts\nvar nodes_exports = {};\n__export(nodes_exports, {\n  ArrayExpression: () => ArrayExpression,\n  ArrayPattern: () => ArrayPattern,\n  ArrowFunctionExpression: () => ArrowFunctionExpression,\n  AssignmentExpression: () => AssignmentExpression,\n  AssignmentPattern: () => AssignmentPattern,\n  AsyncFunctionDeclaration: () => AsyncFunctionDeclaration,\n  AwaitExpression: () => AwaitExpression,\n  BigIntLiteral: () => BigIntLiteral,\n  BinaryExpression: () => BinaryExpression,\n  BlockStatement: () => BlockStatement,\n  BreakStatement: () => BreakStatement,\n  CallExpression: () => CallExpression,\n  CatchClause: () => CatchClause,\n  ChainExpression: () => ChainExpression,\n  ClassBody: () => ClassBody,\n  ClassDeclaration: () => ClassDeclaration,\n  ClassExpression: () => ClassExpression,\n  ConditionalExpression: () => ConditionalExpression,\n  ContinueStatement: () => ContinueStatement,\n  DebuggerStatement: () => DebuggerStatement,\n  Decorator: () => Decorator,\n  Directive: () => Directive,\n  DoWhileStatement: () => DoWhileStatement,\n  EmptyStatement: () => EmptyStatement,\n  ExportAllDeclaration: () => ExportAllDeclaration,\n  ExportDefaultDeclaration: () => ExportDefaultDeclaration,\n  ExportNamedDeclaration: () => ExportNamedDeclaration,\n  ExportSpecifier: () => ExportSpecifier,\n  ExpressionStatement: () => ExpressionStatement,\n  ForInStatement: () => ForInStatement,\n  ForOfStatement: () => ForOfStatement,\n  ForStatement: () => ForStatement,\n  FunctionDeclaration: () => FunctionDeclaration,\n  FunctionExpression: () => FunctionExpression,\n  Identifier: () => Identifier,\n  IfStatement: () => IfStatement,\n  ImportAttribute: () => ImportAttribute,\n  ImportDeclaration: () => ImportDeclaration,\n  ImportDefaultSpecifier: () => ImportDefaultSpecifier,\n  ImportExpression: () => ImportExpression,\n  ImportNamespaceSpecifier: () => ImportNamespaceSpecifier,\n  ImportSpecifier: () => ImportSpecifier,\n  LabeledStatement: () => LabeledStatement,\n  Literal: () => Literal,\n  LogicalExpression: () => LogicalExpression,\n  MemberExpression: () => MemberExpression,\n  MetaProperty: () => MetaProperty,\n  MethodDefinition: () => MethodDefinition,\n  Module: () => Module,\n  NewExpression: () => NewExpression,\n  ObjectExpression: () => ObjectExpression,\n  ObjectPattern: () => ObjectPattern,\n  PrivateIdentifier: () => PrivateIdentifier,\n  Program: () => Program,\n  Property: () => Property,\n  PropertyDefinition: () => PropertyDefinition,\n  RegexLiteral: () => RegexLiteral,\n  RestElement: () => RestElement,\n  ReturnStatement: () => ReturnStatement,\n  Script: () => Script,\n  SequenceExpression: () => SequenceExpression,\n  SpreadElement: () => SpreadElement,\n  StaticBlock: () => StaticBlock,\n  Super: () => Super,\n  SwitchCase: () => SwitchCase,\n  SwitchStatement: () => SwitchStatement,\n  TaggedTemplateExpression: () => TaggedTemplateExpression,\n  TemplateElement: () => TemplateElement,\n  TemplateLiteral: () => TemplateLiteral,\n  ThisExpression: () => ThisExpression,\n  ThrowStatement: () => ThrowStatement,\n  TryStatement: () => TryStatement,\n  UnaryExpression: () => UnaryExpression,\n  UpdateExpression: () => UpdateExpression,\n  VariableDeclaration: () => VariableDeclaration,\n  VariableDeclarator: () => VariableDeclarator,\n  WhileStatement: () => WhileStatement,\n  WithStatement: () => WithStatement,\n  YieldExpression: () => YieldExpression\n});\nvar ArrayExpression = class {\n  type;\n  elements;\n  constructor(elements) {\n    this.type = \"ArrayExpression\" /* ArrayExpression */;\n    this.elements = elements;\n  }\n};\nvar ArrayPattern = class {\n  type;\n  elements;\n  constructor(elements) {\n    this.type = \"ArrayPattern\" /* ArrayPattern */;\n    this.elements = elements;\n  }\n};\nvar ArrowFunctionExpression = class {\n  type;\n  id;\n  params;\n  body;\n  generator;\n  expression;\n  async;\n  constructor(params, body, expression, isAsync) {\n    this.type = \"ArrowFunctionExpression\" /* ArrowFunctionExpression */;\n    this.id = null;\n    this.params = params;\n    this.body = body;\n    this.generator = false;\n    this.expression = expression;\n    this.async = isAsync;\n  }\n};\nvar AssignmentExpression = class {\n  type;\n  operator;\n  left;\n  right;\n  constructor(operator, left, right) {\n    this.type = \"AssignmentExpression\" /* AssignmentExpression */;\n    this.operator = operator;\n    this.left = left;\n    this.right = right;\n  }\n};\nvar AssignmentPattern = class {\n  type;\n  left;\n  right;\n  constructor(left, right) {\n    this.type = \"AssignmentPattern\" /* AssignmentPattern */;\n    this.left = left;\n    this.right = right;\n  }\n};\nvar AsyncFunctionDeclaration = class {\n  type;\n  id;\n  params;\n  body;\n  generator;\n  expression;\n  async;\n  constructor(id, params, body, generator) {\n    this.type = \"FunctionDeclaration\" /* FunctionDeclaration */;\n    this.id = id;\n    this.params = params;\n    this.body = body;\n    this.generator = generator;\n    this.expression = false;\n    this.async = true;\n  }\n};\nvar AwaitExpression = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"AwaitExpression\" /* AwaitExpression */;\n    this.argument = argument;\n  }\n};\nvar BigIntLiteral = class {\n  type;\n  value;\n  raw;\n  bigint;\n  constructor(value, raw, bigint) {\n    this.type = \"Literal\" /* Literal */;\n    this.value = value;\n    this.raw = raw;\n    this.bigint = bigint;\n  }\n};\nvar BinaryExpression = class {\n  type;\n  operator;\n  left;\n  right;\n  constructor(operator, left, right) {\n    this.type = \"BinaryExpression\" /* BinaryExpression */;\n    this.operator = operator;\n    this.left = left;\n    this.right = right;\n  }\n};\nvar BlockStatement = class {\n  type;\n  body;\n  constructor(body) {\n    this.type = \"BlockStatement\" /* BlockStatement */;\n    this.body = body;\n  }\n};\nvar BreakStatement = class {\n  type;\n  label;\n  constructor(label) {\n    this.type = \"BreakStatement\" /* BreakStatement */;\n    this.label = label;\n  }\n};\nvar CallExpression = class {\n  type;\n  callee;\n  arguments;\n  optional;\n  constructor(callee, args, optional) {\n    this.type = \"CallExpression\" /* CallExpression */;\n    this.callee = callee;\n    this.arguments = args;\n    this.optional = optional;\n  }\n};\nvar CatchClause = class {\n  type;\n  param;\n  body;\n  constructor(param, body) {\n    this.type = \"CatchClause\" /* CatchClause */;\n    this.param = param;\n    this.body = body;\n  }\n};\nvar ChainExpression = class {\n  type;\n  expression;\n  constructor(expression) {\n    this.type = \"ChainExpression\" /* ChainExpression */;\n    this.expression = expression;\n  }\n};\nvar ClassBody = class {\n  type;\n  body;\n  constructor(body) {\n    this.type = \"ClassBody\" /* ClassBody */;\n    this.body = body;\n  }\n};\nvar ClassDeclaration = class {\n  type;\n  id;\n  superClass;\n  body;\n  decorators;\n  constructor(id, superClass, body, decorators) {\n    this.type = \"ClassDeclaration\" /* ClassDeclaration */;\n    this.id = id;\n    this.superClass = superClass;\n    this.body = body;\n    this.decorators = decorators;\n  }\n};\nvar ClassExpression = class {\n  type;\n  id;\n  superClass;\n  body;\n  decorators;\n  constructor(id, superClass, body, decorators) {\n    this.type = \"ClassExpression\" /* ClassExpression */;\n    this.id = id;\n    this.superClass = superClass;\n    this.body = body;\n    this.decorators = decorators;\n  }\n};\nvar ConditionalExpression = class {\n  type;\n  test;\n  consequent;\n  alternate;\n  constructor(test, consequent, alternate) {\n    this.type = \"ConditionalExpression\" /* ConditionalExpression */;\n    this.test = test;\n    this.consequent = consequent;\n    this.alternate = alternate;\n  }\n};\nvar ContinueStatement = class {\n  type;\n  label;\n  constructor(label) {\n    this.type = \"ContinueStatement\" /* ContinueStatement */;\n    this.label = label;\n  }\n};\nvar DebuggerStatement = class {\n  type;\n  constructor() {\n    this.type = \"DebuggerStatement\" /* DebuggerStatement */;\n  }\n};\nvar Decorator = class {\n  type;\n  expression;\n  constructor(expression) {\n    this.type = \"Decorator\" /* Decorator */;\n    this.expression = expression;\n  }\n};\nvar Directive = class {\n  type;\n  expression;\n  directive;\n  constructor(expression, directive) {\n    this.type = \"ExpressionStatement\" /* ExpressionStatement */;\n    this.expression = expression;\n    this.directive = directive;\n  }\n};\nvar DoWhileStatement = class {\n  type;\n  body;\n  test;\n  constructor(body, test) {\n    this.type = \"DoWhileStatement\" /* DoWhileStatement */;\n    this.body = body;\n    this.test = test;\n  }\n};\nvar EmptyStatement = class {\n  type;\n  constructor() {\n    this.type = \"EmptyStatement\" /* EmptyStatement */;\n  }\n};\nvar ExportAllDeclaration = class {\n  type;\n  source;\n  exported;\n  assertions;\n  constructor(source, exported, assertions) {\n    this.type = \"ExportAllDeclaration\" /* ExportAllDeclaration */;\n    this.source = source;\n    this.exported = exported;\n    this.assertions = assertions;\n  }\n};\nvar ExportDefaultDeclaration = class {\n  type;\n  declaration;\n  constructor(declaration) {\n    this.type = \"ExportDefaultDeclaration\" /* ExportDefaultDeclaration */;\n    this.declaration = declaration;\n  }\n};\nvar ExportNamedDeclaration = class {\n  type;\n  declaration;\n  specifiers;\n  source;\n  assertions;\n  constructor(declaration, specifiers, source, assertions) {\n    this.type = \"ExportNamedDeclaration\" /* ExportNamedDeclaration */;\n    this.declaration = declaration;\n    this.specifiers = specifiers;\n    this.source = source;\n    this.assertions = assertions;\n  }\n};\nvar ExportSpecifier = class {\n  type;\n  exported;\n  local;\n  constructor(local, exported) {\n    this.type = \"ExportSpecifier\" /* ExportSpecifier */;\n    this.exported = exported;\n    this.local = local;\n  }\n};\nvar ExpressionStatement = class {\n  type;\n  expression;\n  constructor(expression) {\n    this.type = \"ExpressionStatement\" /* ExpressionStatement */;\n    this.expression = expression;\n  }\n};\nvar ForInStatement = class {\n  type;\n  left;\n  right;\n  body;\n  each;\n  constructor(left, right, body) {\n    this.type = \"ForInStatement\" /* ForInStatement */;\n    this.left = left;\n    this.right = right;\n    this.body = body;\n    this.each = false;\n  }\n};\nvar ForOfStatement = class {\n  type;\n  await;\n  left;\n  right;\n  body;\n  constructor(left, right, body, _await) {\n    this.type = \"ForOfStatement\" /* ForOfStatement */;\n    this.await = _await;\n    this.left = left;\n    this.right = right;\n    this.body = body;\n  }\n};\nvar ForStatement = class {\n  type;\n  init;\n  test;\n  update;\n  body;\n  constructor(init, test, update, body) {\n    this.type = \"ForStatement\" /* ForStatement */;\n    this.init = init;\n    this.test = test;\n    this.update = update;\n    this.body = body;\n  }\n};\nvar FunctionDeclaration = class {\n  type;\n  id;\n  params;\n  body;\n  generator;\n  expression;\n  async;\n  constructor(id, params, body, generator) {\n    this.type = \"FunctionDeclaration\" /* FunctionDeclaration */;\n    this.id = id;\n    this.params = params;\n    this.body = body;\n    this.generator = generator;\n    this.expression = false;\n    this.async = false;\n  }\n};\nvar FunctionExpression = class {\n  type;\n  id;\n  params;\n  body;\n  generator;\n  expression;\n  async;\n  constructor(id, params, body, generator, isAsync) {\n    this.type = \"FunctionExpression\" /* FunctionExpression */;\n    this.id = id;\n    this.params = params;\n    this.body = body;\n    this.generator = generator;\n    this.expression = false;\n    this.async = isAsync;\n  }\n};\nvar Identifier = class {\n  type;\n  name;\n  constructor(name) {\n    this.type = \"Identifier\" /* Identifier */;\n    this.name = name;\n  }\n};\nvar IfStatement = class {\n  type;\n  test;\n  consequent;\n  alternate;\n  constructor(test, consequent, alternate) {\n    this.type = \"IfStatement\" /* IfStatement */;\n    this.test = test;\n    this.consequent = consequent;\n    this.alternate = alternate;\n  }\n};\nvar ImportAttribute = class {\n  type;\n  key;\n  value;\n  constructor(key, value) {\n    this.type = \"ImportAttribute\" /* ImportAttribute */;\n    this.key = key;\n    this.value = value;\n  }\n};\nvar ImportExpression = class {\n  type;\n  source;\n  attributes;\n  constructor(source, attributes) {\n    this.type = \"ImportExpression\" /* ImportExpression */;\n    this.source = source;\n    this.attributes = attributes;\n  }\n};\nvar ImportDeclaration = class {\n  type;\n  specifiers;\n  source;\n  assertions;\n  constructor(specifiers, source, assertions) {\n    this.type = \"ImportDeclaration\" /* ImportDeclaration */;\n    this.specifiers = specifiers;\n    this.source = source;\n    this.assertions = assertions;\n  }\n};\nvar ImportDefaultSpecifier = class {\n  type;\n  local;\n  constructor(local) {\n    this.type = \"ImportDefaultSpecifier\" /* ImportDefaultSpecifier */;\n    this.local = local;\n  }\n};\nvar ImportNamespaceSpecifier = class {\n  type;\n  local;\n  constructor(local) {\n    this.type = \"ImportNamespaceSpecifier\" /* ImportNamespaceSpecifier */;\n    this.local = local;\n  }\n};\nvar ImportSpecifier = class {\n  type;\n  local;\n  imported;\n  constructor(local, imported) {\n    this.type = \"ImportSpecifier\" /* ImportSpecifier */;\n    this.local = local;\n    this.imported = imported;\n  }\n};\nvar LabeledStatement = class {\n  type;\n  label;\n  body;\n  constructor(label, body) {\n    this.type = \"LabeledStatement\" /* LabeledStatement */;\n    this.label = label;\n    this.body = body;\n  }\n};\nvar Literal = class {\n  type;\n  value;\n  raw;\n  constructor(value, raw) {\n    this.type = \"Literal\" /* Literal */;\n    this.value = value;\n    this.raw = raw;\n  }\n};\nvar LogicalExpression = class {\n  type;\n  operator;\n  left;\n  right;\n  constructor(operator, left, right) {\n    this.type = \"LogicalExpression\" /* LogicalExpression */;\n    this.operator = operator;\n    this.left = left;\n    this.right = right;\n  }\n};\nvar MemberExpression = class {\n  type;\n  computed;\n  object;\n  property;\n  optional;\n  constructor(computed, object, property, optional) {\n    this.type = \"MemberExpression\" /* MemberExpression */;\n    this.computed = computed;\n    this.object = object;\n    this.property = property;\n    this.optional = optional;\n  }\n};\nvar MetaProperty = class {\n  type;\n  meta;\n  property;\n  constructor(meta, property) {\n    this.type = \"MetaProperty\" /* MetaProperty */;\n    this.meta = meta;\n    this.property = property;\n  }\n};\nvar MethodDefinition = class {\n  type;\n  key;\n  computed;\n  value;\n  kind;\n  static;\n  decorators;\n  constructor(key, computed, value, kind, isStatic, decorators) {\n    this.type = \"MethodDefinition\" /* MethodDefinition */;\n    this.key = key;\n    this.computed = computed;\n    this.value = value;\n    this.kind = kind;\n    this.static = isStatic;\n    this.decorators = decorators;\n  }\n};\nvar Module = class {\n  type;\n  body;\n  sourceType;\n  constructor(body) {\n    this.type = \"Program\" /* Program */;\n    this.body = body;\n    this.sourceType = \"module\";\n  }\n};\nvar NewExpression = class {\n  type;\n  callee;\n  arguments;\n  constructor(callee, args) {\n    this.type = \"NewExpression\" /* NewExpression */;\n    this.callee = callee;\n    this.arguments = args;\n  }\n};\nvar ObjectExpression = class {\n  type;\n  properties;\n  constructor(properties) {\n    this.type = \"ObjectExpression\" /* ObjectExpression */;\n    this.properties = properties;\n  }\n};\nvar ObjectPattern = class {\n  type;\n  properties;\n  constructor(properties) {\n    this.type = \"ObjectPattern\" /* ObjectPattern */;\n    this.properties = properties;\n  }\n};\nvar PrivateIdentifier = class {\n  type;\n  name;\n  constructor(name) {\n    this.type = \"PrivateIdentifier\" /* PrivateIdentifier */;\n    this.name = name;\n  }\n};\nvar Program = class {\n  type;\n  body;\n  sourceType;\n  constructor(sourceType, body) {\n    this.type = \"Program\" /* Program */;\n    this.sourceType = sourceType;\n    this.body = body;\n  }\n};\nvar Property = class {\n  type;\n  key;\n  computed;\n  value;\n  kind;\n  method;\n  shorthand;\n  constructor(kind, key, computed, value, method, shorthand) {\n    this.type = \"Property\" /* Property */;\n    this.key = key;\n    this.computed = computed;\n    this.value = value;\n    this.kind = kind;\n    this.method = method;\n    this.shorthand = shorthand;\n  }\n};\nvar PropertyDefinition = class {\n  type;\n  key;\n  computed;\n  value;\n  static;\n  decorators;\n  constructor(key, computed, value, isStatic, decorators) {\n    this.type = \"Property\" /* Property */;\n    this.key = key;\n    this.computed = computed;\n    this.value = value;\n    this.static = isStatic;\n    this.decorators = decorators;\n  }\n};\nvar RegexLiteral = class {\n  type;\n  value;\n  raw;\n  regex;\n  constructor(value, raw, pattern, flags) {\n    this.type = \"Literal\" /* Literal */;\n    this.value = value;\n    this.raw = raw;\n    this.regex = { pattern, flags };\n  }\n};\nvar RestElement = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"RestElement\" /* RestElement */;\n    this.argument = argument;\n  }\n};\nvar ReturnStatement = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"ReturnStatement\" /* ReturnStatement */;\n    this.argument = argument;\n  }\n};\nvar Script = class {\n  type;\n  body;\n  sourceType;\n  constructor(body) {\n    this.type = \"Program\" /* Program */;\n    this.body = body;\n    this.sourceType = \"script\";\n  }\n};\nvar SequenceExpression = class {\n  type;\n  expressions;\n  constructor(expressions) {\n    this.type = \"SequenceExpression\" /* SequenceExpression */;\n    this.expressions = expressions;\n  }\n};\nvar SpreadElement = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"SpreadElement\" /* SpreadElement */;\n    this.argument = argument;\n  }\n};\nvar StaticBlock = class {\n  type;\n  body;\n  constructor(body) {\n    this.type = \"StaticBlock\" /* StaticBlock */;\n    this.body = body;\n  }\n};\nvar Super = class {\n  type;\n  constructor() {\n    this.type = \"Super\" /* Super */;\n  }\n};\nvar SwitchCase = class {\n  type;\n  test;\n  consequent;\n  constructor(test, consequent) {\n    this.type = \"SwitchCase\" /* SwitchCase */;\n    this.test = test;\n    this.consequent = consequent;\n  }\n};\nvar SwitchStatement = class {\n  type;\n  discriminant;\n  cases;\n  constructor(discriminant, cases) {\n    this.type = \"SwitchStatement\" /* SwitchStatement */;\n    this.discriminant = discriminant;\n    this.cases = cases;\n  }\n};\nvar TaggedTemplateExpression = class {\n  type;\n  tag;\n  quasi;\n  constructor(tag, quasi) {\n    this.type = \"TaggedTemplateExpression\" /* TaggedTemplateExpression */;\n    this.tag = tag;\n    this.quasi = quasi;\n  }\n};\nvar TemplateElement = class {\n  type;\n  value;\n  tail;\n  constructor(value, tail) {\n    this.type = \"TemplateElement\" /* TemplateElement */;\n    this.value = value;\n    this.tail = tail;\n  }\n};\nvar TemplateLiteral = class {\n  type;\n  quasis;\n  expressions;\n  constructor(quasis, expressions) {\n    this.type = \"TemplateLiteral\" /* TemplateLiteral */;\n    this.quasis = quasis;\n    this.expressions = expressions;\n  }\n};\nvar ThisExpression = class {\n  type;\n  constructor() {\n    this.type = \"ThisExpression\" /* ThisExpression */;\n  }\n};\nvar ThrowStatement = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"ThrowStatement\" /* ThrowStatement */;\n    this.argument = argument;\n  }\n};\nvar TryStatement = class {\n  type;\n  block;\n  handler;\n  finalizer;\n  constructor(block, handler, finalizer) {\n    this.type = \"TryStatement\" /* TryStatement */;\n    this.block = block;\n    this.handler = handler;\n    this.finalizer = finalizer;\n  }\n};\nvar UnaryExpression = class {\n  type;\n  operator;\n  argument;\n  prefix;\n  constructor(operator, argument) {\n    this.type = \"UnaryExpression\" /* UnaryExpression */;\n    this.operator = operator;\n    this.argument = argument;\n    this.prefix = true;\n  }\n};\nvar UpdateExpression = class {\n  type;\n  operator;\n  argument;\n  prefix;\n  constructor(operator, argument, prefix) {\n    this.type = \"UpdateExpression\" /* UpdateExpression */;\n    this.operator = operator;\n    this.argument = argument;\n    this.prefix = prefix;\n  }\n};\nvar VariableDeclaration = class {\n  type;\n  declarations;\n  kind;\n  constructor(declarations, kind) {\n    this.type = \"VariableDeclaration\" /* VariableDeclaration */;\n    this.declarations = declarations;\n    this.kind = kind;\n  }\n};\nvar VariableDeclarator = class {\n  type;\n  id;\n  init;\n  constructor(id, init) {\n    this.type = \"VariableDeclarator\" /* VariableDeclarator */;\n    this.id = id;\n    this.init = init;\n  }\n};\nvar WhileStatement = class {\n  type;\n  test;\n  body;\n  constructor(test, body) {\n    this.type = \"WhileStatement\" /* WhileStatement */;\n    this.test = test;\n    this.body = body;\n  }\n};\nvar WithStatement = class {\n  type;\n  object;\n  body;\n  constructor(object, body) {\n    this.type = \"WithStatement\" /* WithStatement */;\n    this.object = object;\n    this.body = body;\n  }\n};\nvar YieldExpression = class {\n  type;\n  argument;\n  delegate;\n  constructor(argument, delegate) {\n    this.type = \"YieldExpression\" /* YieldExpression */;\n    this.argument = argument;\n    this.delegate = delegate;\n  }\n};\n\n// src/assert.ts\nfunction assert(condition, message) {\n  if (!condition) {\n    throw new Error(\"ASSERT: \" + message);\n  }\n}\n\n// src/error-handler.ts\nvar ErrorHandler = class {\n  errors;\n  tolerant;\n  constructor() {\n    this.errors = [];\n    this.tolerant = false;\n  }\n  recordError(error) {\n    this.errors.push(error);\n  }\n  tolerate(error) {\n    if (this.tolerant) {\n      this.recordError(error);\n    } else {\n      throw error;\n    }\n  }\n  constructError(msg, column) {\n    let error = new Error(msg);\n    try {\n      throw error;\n    } catch (base) {\n      if (Object.create && Object.defineProperty) {\n        error = Object.create(base);\n        Object.defineProperty(error, \"column\", { value: column });\n      }\n    }\n    return error;\n  }\n  createError(index, line, col, description) {\n    const msg = \"Line \" + line + \": \" + description;\n    const _error = this.constructError(msg, col);\n    _error.index = index;\n    _error.lineNumber = line;\n    _error.description = description;\n    const error = _error;\n    return error;\n  }\n  throwError(index, line, col, description) {\n    throw this.createError(index, line, col, description);\n  }\n  tolerateError(index, line, col, description) {\n    const error = this.createError(index, line, col, description);\n    if (this.tolerant) {\n      this.recordError(error);\n    } else {\n      throw error;\n    }\n  }\n};\n\n// src/messages.ts\nvar Messages = {\n  AsyncFunctionInSingleStatementContext: \"Async functions can only be declared at the top level or inside a block.\",\n  BadImportCallArity: \"Unexpected token\",\n  BadGetterArity: \"Getter must not have any formal parameters\",\n  BadSetterArity: \"Setter must have exactly one formal parameter\",\n  BadSetterRestParameter: \"Setter function argument must not be a rest parameter\",\n  CannotUseImportMetaOutsideAModule: \"Cannot use 'import.meta' outside a module\",\n  ConstructorIsAsync: \"Class constructor may not be an async method\",\n  ConstructorIsPrivate: \"Class constructor may not be a private method\",\n  ConstructorSpecialMethod: \"Class constructor may not be an accessor\",\n  DeclarationMissingInitializer: \"Missing initializer in %0 declaration\",\n  DefaultRestParameter: \"Unexpected token =\",\n  DefaultRestProperty: \"Unexpected token =\",\n  DuplicateBinding: \"Duplicate binding %0\",\n  DuplicateConstructor: \"A class may only have one constructor\",\n  DuplicateParameter: \"Duplicate parameter name not allowed in this context\",\n  DuplicateProtoProperty: \"Duplicate __proto__ fields are not allowed in object literals\",\n  ForInOfLoopInitializer: \"%0 loop variable declaration may not have an initializer\",\n  GeneratorInLegacyContext: \"Generator declarations are not allowed in legacy contexts\",\n  IllegalBreak: \"Illegal break statement\",\n  IllegalContinue: \"Illegal continue statement\",\n  IllegalExportDeclaration: \"Unexpected token\",\n  IllegalImportDeclaration: \"Unexpected token\",\n  IllegalLanguageModeDirective: \"Illegal 'use strict' directive in function with non-simple parameter list\",\n  IllegalReturn: \"Illegal return statement\",\n  InvalidEscapedReservedWord: \"Keyword must not contain escaped characters\",\n  InvalidHexEscapeSequence: \"Invalid hexadecimal escape sequence\",\n  InvalidLHSInAssignment: \"Invalid left-hand side in assignment\",\n  InvalidLHSInForIn: \"Invalid left-hand side in for-in\",\n  InvalidLHSInForLoop: \"Invalid left-hand side in for-loop\",\n  InvalidModuleSpecifier: \"Unexpected token\",\n  InvalidRegExp: \"Invalid regular expression\",\n  InvalidTaggedTemplateOnOptionalChain: \"Invalid tagged template on optional chain\",\n  InvalidUnicodeEscapeSequence: \"Invalid Unicode escape sequence\",\n  LetInLexicalBinding: \"let is disallowed as a lexically bound name\",\n  MissingFromClause: \"Unexpected token\",\n  MultipleDefaultsInSwitch: \"More than one default clause in switch statement\",\n  NewlineAfterThrow: \"Illegal newline after throw\",\n  NoAsAfterImportNamespace: \"Unexpected token\",\n  NoAsAndFromEscapeSequences: \"The `as` and `from` contextual keywords must not contain Unicode escape sequences.\",\n  NoCatchOrFinally: \"Missing catch or finally after try\",\n  NoSemicolonAfterDecorator: \"Decorators must not be followed by a semicolon.\",\n  NumericSeperatorOneUnderscore: \"Numeric separator must be exactly one underscore\",\n  NumericSeperatorNotAllowedHere: \"Numeric separator is not allowed here\",\n  ParameterAfterRestParameter: \"Rest parameter must be last formal parameter\",\n  PropertyAfterRestProperty: \"Unexpected token\",\n  Redeclaration: \"%0 '%1' has already been declared\",\n  StaticPrototype: \"Classes may not have static property named prototype\",\n  StrictCatchVariable: \"Catch variable may not be eval or arguments in strict mode\",\n  StrictDelete: \"Delete of an unqualified identifier in strict mode.\",\n  StrictFunction: \"In strict mode code, functions can only be declared at top level or inside a block\",\n  StrictFunctionName: \"Function name may not be eval or arguments in strict mode\",\n  StrictLHSAssignment: \"Assignment to eval or arguments is not allowed in strict mode\",\n  StrictLHSPostfix: \"Postfix increment/decrement may not have eval or arguments operand in strict mode\",\n  StrictLHSPrefix: \"Prefix increment/decrement may not have eval or arguments operand in strict mode\",\n  StrictModeWith: \"Strict mode code may not include a with statement\",\n  StrictOctalLiteral: \"Octal literals are not allowed in strict mode.\",\n  StrictParamName: \"Parameter name eval or arguments is not allowed in strict mode\",\n  StrictReservedWord: \"Use of future reserved word in strict mode\",\n  StrictVarName: \"Variable name may not be eval or arguments in strict mode\",\n  TemplateOctalLiteral: \"Octal literals are not allowed in template strings.\",\n  TemplateEscape89: \"\\\\8 and \\\\9 are not allowed in template strings.\",\n  UnexpectedEOS: \"Unexpected end of input\",\n  UnexpectedIdentifier: \"Unexpected identifier\",\n  UnexpectedNumber: \"Unexpected number\",\n  UnexpectedReserved: \"Unexpected reserved word\",\n  UnexpectedString: \"Unexpected string\",\n  UnexpectedSuper: \"'super' keyword unexpected here\",\n  UnexpectedTemplate: \"Unexpected quasi %0\",\n  UnexpectedToken: \"Unexpected token %0\",\n  UnexpectedTokenIllegal: \"Unexpected token ILLEGAL\",\n  UnknownLabel: \"Undefined label '%0'\",\n  UnterminatedRegExp: \"Invalid regular expression: missing /\"\n};\n\n// src/token.ts\nvar TokenName = {};\nTokenName[1 /* BooleanLiteral */] = \"Boolean\";\nTokenName[2 /* EOF */] = \"<end>\";\nTokenName[3 /* Identifier */] = \"Identifier\";\nTokenName[4 /* Keyword */] = \"Keyword\";\nTokenName[5 /* NullLiteral */] = \"Null\";\nTokenName[6 /* NumericLiteral */] = \"Numeric\";\nTokenName[7 /* Punctuator */] = \"Punctuator\";\nTokenName[8 /* StringLiteral */] = \"String\";\nTokenName[9 /* RegularExpression */] = \"RegularExpression\";\nTokenName[10 /* Template */] = \"Template\";\n\n// src/scanner.ts\nfunction hexValue(ch) {\n  return \"0123456789abcdef\".indexOf(ch.toLowerCase());\n}\nfunction octalValue(ch) {\n  return \"01234567\".indexOf(ch);\n}\nvar Scanner = class {\n  source;\n  errorHandler;\n  trackComment;\n  isModule;\n  index;\n  lineNumber;\n  lineStart;\n  curlyStack;\n  length;\n  constructor(code, handler) {\n    this.source = code;\n    this.errorHandler = handler;\n    this.trackComment = false;\n    this.isModule = false;\n    this.length = code.length;\n    this.index = 0;\n    this.lineNumber = code.length > 0 ? 1 : 0;\n    this.lineStart = 0;\n    this.curlyStack = [];\n  }\n  saveState() {\n    return {\n      index: this.index,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      curlyStack: this.curlyStack.slice()\n    };\n  }\n  restoreState(state) {\n    this.index = state.index;\n    this.lineNumber = state.lineNumber;\n    this.lineStart = state.lineStart;\n    this.curlyStack = state.curlyStack;\n  }\n  eof() {\n    return this.index >= this.length;\n  }\n  throwUnexpectedToken(message = Messages.UnexpectedTokenIllegal) {\n    return this.errorHandler.throwError(\n      this.index,\n      this.lineNumber,\n      this.index - this.lineStart + 1,\n      message\n    );\n  }\n  tolerateUnexpectedToken(message = Messages.UnexpectedTokenIllegal) {\n    this.errorHandler.tolerateError(\n      this.index,\n      this.lineNumber,\n      this.index - this.lineStart + 1,\n      message\n    );\n  }\n  // https://tc39.github.io/ecma262/#sec-comments\n  skipSingleLineComment(offset) {\n    let comments = [];\n    let start, loc;\n    if (this.trackComment) {\n      comments = [];\n      start = this.index - offset;\n      loc = {\n        start: {\n          line: this.lineNumber,\n          column: this.index - this.lineStart - offset\n        },\n        end: {}\n      };\n    }\n    while (!this.eof()) {\n      const ch = this.source.charCodeAt(this.index);\n      ++this.index;\n      if (Character.isLineTerminator(ch)) {\n        if (this.trackComment) {\n          loc.end = {\n            line: this.lineNumber,\n            column: this.index - this.lineStart - 1\n          };\n          const entry = {\n            multiLine: false,\n            slice: [start + offset, this.index - 1],\n            range: [start, this.index - 1],\n            loc\n          };\n          comments.push(entry);\n        }\n        if (ch === 13 && this.source.charCodeAt(this.index) === 10) {\n          ++this.index;\n        }\n        ++this.lineNumber;\n        this.lineStart = this.index;\n        return comments;\n      }\n    }\n    if (this.trackComment) {\n      loc.end = {\n        line: this.lineNumber,\n        column: this.index - this.lineStart\n      };\n      const entry = {\n        multiLine: false,\n        slice: [start + offset, this.index],\n        range: [start, this.index],\n        loc\n      };\n      comments.push(entry);\n    }\n    return comments;\n  }\n  skipMultiLineComment() {\n    let comments = [];\n    let start, loc;\n    if (this.trackComment) {\n      comments = [];\n      start = this.index - 2;\n      loc = {\n        start: {\n          line: this.lineNumber,\n          column: this.index - this.lineStart - 2\n        },\n        end: {}\n      };\n    }\n    while (!this.eof()) {\n      const ch = this.source.charCodeAt(this.index);\n      if (Character.isLineTerminator(ch)) {\n        if (ch === 13 && this.source.charCodeAt(this.index + 1) === 10) {\n          ++this.index;\n        }\n        ++this.lineNumber;\n        ++this.index;\n        this.lineStart = this.index;\n      } else if (ch === 42) {\n        if (this.source.charCodeAt(this.index + 1) === 47) {\n          this.index += 2;\n          if (this.trackComment) {\n            loc.end = {\n              line: this.lineNumber,\n              column: this.index - this.lineStart\n            };\n            const entry = {\n              multiLine: true,\n              slice: [start + 2, this.index - 2],\n              range: [start, this.index],\n              loc\n            };\n            comments.push(entry);\n          }\n          return comments;\n        }\n        ++this.index;\n      } else {\n        ++this.index;\n      }\n    }\n    if (this.trackComment) {\n      loc.end = {\n        line: this.lineNumber,\n        column: this.index - this.lineStart\n      };\n      const entry = {\n        multiLine: true,\n        slice: [start + 2, this.index],\n        range: [start, this.index],\n        loc\n      };\n      comments.push(entry);\n    }\n    this.tolerateUnexpectedToken();\n    return comments;\n  }\n  scanComments() {\n    let comments;\n    if (this.trackComment) {\n      comments = [];\n    }\n    let start = this.index === 0;\n    while (!this.eof()) {\n      let ch = this.source.charCodeAt(this.index);\n      if (Character.isWhiteSpace(ch)) {\n        ++this.index;\n      } else if (Character.isLineTerminator(ch)) {\n        ++this.index;\n        if (ch === 13 && this.source.charCodeAt(this.index) === 10) {\n          ++this.index;\n        }\n        ++this.lineNumber;\n        this.lineStart = this.index;\n        start = true;\n      } else if (ch === 47) {\n        ch = this.source.charCodeAt(this.index + 1);\n        if (ch === 47) {\n          this.index += 2;\n          const comment = this.skipSingleLineComment(2);\n          if (this.trackComment) {\n            comments = comments.concat(comment);\n          }\n          start = true;\n        } else if (ch === 42) {\n          this.index += 2;\n          const comment = this.skipMultiLineComment();\n          if (this.trackComment) {\n            comments = comments.concat(comment);\n          }\n        } else {\n          break;\n        }\n      } else if (start && ch === 45) {\n        if (this.source.charCodeAt(this.index + 1) === 45 && this.source.charCodeAt(this.index + 2) === 62) {\n          this.index += 3;\n          const comment = this.skipSingleLineComment(3);\n          if (this.trackComment) {\n            comments = comments.concat(comment);\n          }\n        } else {\n          break;\n        }\n      } else if (ch === 60 && !this.isModule) {\n        if (this.source.slice(this.index + 1, this.index + 4) === \"!--\") {\n          this.index += 4;\n          const comment = this.skipSingleLineComment(4);\n          if (this.trackComment) {\n            comments = comments.concat(comment);\n          }\n        } else {\n          break;\n        }\n      } else {\n        break;\n      }\n    }\n    return comments;\n  }\n  // https://tc39.github.io/ecma262/#sec-future-reserved-words\n  isFutureReservedWord(id) {\n    switch (id) {\n      case \"enum\":\n      case \"export\":\n      case \"import\":\n      case \"super\":\n        return true;\n      default:\n        return false;\n    }\n  }\n  isStrictModeReservedWord(id) {\n    switch (id) {\n      case \"implements\":\n      case \"interface\":\n      case \"package\":\n      case \"private\":\n      case \"protected\":\n      case \"public\":\n      case \"static\":\n      case \"yield\":\n      case \"let\":\n        return true;\n      default:\n        return false;\n    }\n  }\n  isRestrictedWord(id) {\n    return id === \"eval\" || id === \"arguments\";\n  }\n  // https://tc39.github.io/ecma262/#sec-keywords\n  isKeyword(id) {\n    switch (id.length) {\n      case 2:\n        return id === \"if\" || id === \"in\" || id === \"do\";\n      case 3:\n        return id === \"var\" || id === \"for\" || id === \"new\" || id === \"try\" || id === \"let\";\n      case 4:\n        return id === \"this\" || id === \"else\" || id === \"case\" || id === \"void\" || id === \"with\" || id === \"enum\";\n      case 5:\n        return id === \"while\" || id === \"break\" || id === \"catch\" || id === \"throw\" || id === \"const\" || id === \"yield\" || id === \"class\" || id === \"super\";\n      case 6:\n        return id === \"return\" || id === \"typeof\" || id === \"delete\" || id === \"switch\" || id === \"export\" || id === \"import\";\n      case 7:\n        return id === \"default\" || id === \"finally\" || id === \"extends\";\n      case 8:\n        return id === \"function\" || id === \"continue\" || id === \"debugger\";\n      case 10:\n        return id === \"instanceof\";\n      default:\n        return false;\n    }\n  }\n  codePointAt(i) {\n    let cp = this.source.charCodeAt(i);\n    if (cp >= 55296 && cp <= 56319) {\n      const second = this.source.charCodeAt(i + 1);\n      if (second >= 56320 && second <= 57343) {\n        const first = cp;\n        cp = (first - 55296) * 1024 + second - 56320 + 65536;\n      }\n    }\n    return cp;\n  }\n  scanHexEscape(prefix) {\n    const len = prefix === \"u\" ? 4 : 2;\n    let code = 0;\n    for (let i = 0; i < len; ++i) {\n      if (!this.eof() && Character.isHexDigit(this.source.charCodeAt(this.index))) {\n        code = code * 16 + hexValue(this.source[this.index++]);\n      } else {\n        return null;\n      }\n    }\n    return String.fromCharCode(code);\n  }\n  tryToScanUnicodeCodePointEscape() {\n    let ch = this.source[this.index];\n    let code = 0;\n    if (ch === \"}\") {\n      return null;\n    }\n    while (!this.eof()) {\n      ch = this.source[this.index++];\n      if (!Character.isHexDigit(ch.charCodeAt(0))) {\n        break;\n      }\n      code = code * 16 + hexValue(ch);\n    }\n    if (code > 1114111 || ch !== \"}\") {\n      return null;\n    }\n    return Character.fromCodePoint(code);\n  }\n  scanUnicodeCodePointEscape() {\n    const result = this.tryToScanUnicodeCodePointEscape();\n    if (result === null) {\n      return this.throwUnexpectedToken();\n    }\n    return result;\n  }\n  getIdentifier() {\n    const start = this.index++;\n    while (!this.eof()) {\n      const ch = this.source.charCodeAt(this.index);\n      if (ch === 92) {\n        this.index = start;\n        return this.getComplexIdentifier();\n      } else if (ch >= 55296 && ch < 57343) {\n        this.index = start;\n        return this.getComplexIdentifier();\n      }\n      if (Character.isIdentifierPart(ch)) {\n        ++this.index;\n      } else {\n        break;\n      }\n    }\n    return this.source.slice(start, this.index);\n  }\n  getComplexIdentifier() {\n    let cp = this.codePointAt(this.index);\n    let id = Character.fromCodePoint(cp);\n    this.index += id.length;\n    let ch;\n    if (cp === 92) {\n      if (this.source.charCodeAt(this.index) !== 117) {\n        this.throwUnexpectedToken();\n      }\n      ++this.index;\n      if (this.source[this.index] === \"{\") {\n        ++this.index;\n        ch = this.scanUnicodeCodePointEscape();\n      } else {\n        ch = this.scanHexEscape(\"u\");\n        if (ch === null || ch === \"\\\\\" || !Character.isIdentifierStart(ch.charCodeAt(0))) {\n          this.throwUnexpectedToken();\n        }\n      }\n      id = ch;\n    }\n    while (!this.eof()) {\n      cp = this.codePointAt(this.index);\n      if (!Character.isIdentifierPart(cp)) {\n        break;\n      }\n      ch = Character.fromCodePoint(cp);\n      id += ch;\n      this.index += ch.length;\n      if (cp === 92) {\n        id = id.substr(0, id.length - 1);\n        if (this.source.charCodeAt(this.index) !== 117) {\n          this.throwUnexpectedToken();\n        }\n        ++this.index;\n        if (this.source[this.index] === \"{\") {\n          ++this.index;\n          ch = this.scanUnicodeCodePointEscape();\n        } else {\n          ch = this.scanHexEscape(\"u\");\n          if (ch === null || ch === \"\\\\\" || !Character.isIdentifierPart(ch.charCodeAt(0))) {\n            this.throwUnexpectedToken();\n          }\n        }\n        id += ch;\n      }\n    }\n    return id;\n  }\n  octalToDecimal(ch) {\n    let octal = ch !== \"0\";\n    let code = octalValue(ch);\n    if (!this.eof() && Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n      octal = true;\n      code = code * 8 + octalValue(this.source[this.index++]);\n      if (\"0123\".indexOf(ch) >= 0 && !this.eof() && Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n        code = code * 8 + octalValue(this.source[this.index++]);\n      }\n    }\n    return {\n      code,\n      octal\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-names-and-keywords\n  scanIdentifier() {\n    let type;\n    const start = this.index;\n    const escaped = this.source.charCodeAt(start) === 92;\n    const id = escaped ? this.getComplexIdentifier() : this.getIdentifier();\n    if (id.length === 1) {\n      type = 3 /* Identifier */;\n    } else if (this.isKeyword(id)) {\n      type = 4 /* Keyword */;\n    } else if (id === \"null\") {\n      type = 5 /* NullLiteral */;\n    } else if (id === \"true\" || id === \"false\") {\n      type = 1 /* BooleanLiteral */;\n    } else {\n      type = 3 /* Identifier */;\n    }\n    if (type !== 3 /* Identifier */ && start + id.length !== this.index) {\n      const restore = this.index;\n      this.index = start;\n      this.tolerateUnexpectedToken(Messages.InvalidEscapedReservedWord);\n      this.index = restore;\n    }\n    return {\n      type,\n      value: id,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index,\n      escaped\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-punctuators\n  scanPunctuator() {\n    const start = this.index;\n    let str = this.source[this.index];\n    switch (str) {\n      case \"(\":\n      case \"{\":\n        if (str === \"{\") {\n          this.curlyStack.push(\"{\");\n        }\n        ++this.index;\n        break;\n      case \".\":\n        ++this.index;\n        if (this.source[this.index] === \".\" && this.source[this.index + 1] === \".\") {\n          this.index += 2;\n          str = \"...\";\n        }\n        break;\n      case \"}\":\n        ++this.index;\n        this.curlyStack.pop();\n        break;\n      case \"?\":\n        ++this.index;\n        if (this.source[this.index] === \"?\") {\n          ++this.index;\n          if (this.source[this.index] === \"=\") {\n            ++this.index;\n            str = \"??=\";\n          } else {\n            str = \"??\";\n          }\n        }\n        if (this.source[this.index] === \".\" && !/^\\d$/.test(this.source[this.index + 1])) {\n          ++this.index;\n          str = \"?.\";\n        }\n        break;\n      case \"#\":\n      case \")\":\n      case \";\":\n      case \",\":\n      case \"[\":\n      case \"]\":\n      case \":\":\n      case \"~\":\n      case \"@\":\n        ++this.index;\n        break;\n      default:\n        str = this.source.substr(this.index, 4);\n        if (str === \">>>=\") {\n          this.index += 4;\n        } else {\n          str = str.substr(0, 3);\n          if (str === \"===\" || str === \"!==\" || str === \">>>\" || str === \"<<=\" || str === \">>=\" || str === \"**=\" || str === \"&&=\" || str === \"||=\") {\n            this.index += 3;\n          } else {\n            str = str.substr(0, 2);\n            if (str === \"&&\" || str === \"||\" || str === \"==\" || str === \"!=\" || str === \"+=\" || str === \"-=\" || str === \"*=\" || str === \"/=\" || str === \"++\" || str === \"--\" || str === \"<<\" || str === \">>\" || str === \"&=\" || str === \"|=\" || str === \"^=\" || str === \"%=\" || str === \"<=\" || str === \">=\" || str === \"=>\" || str === \"**\") {\n              this.index += 2;\n            } else {\n              str = this.source[this.index];\n              if (\"<>=!+-*%&|^/\".indexOf(str) >= 0) {\n                ++this.index;\n              }\n            }\n          }\n        }\n    }\n    if (this.index === start) {\n      this.throwUnexpectedToken();\n    }\n    return {\n      type: 7 /* Punctuator */,\n      value: str,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n  scanHexLiteral(start) {\n    let num = this.scanLiteralPart(Character.isHexDigitChar);\n    if (num.length === 0) {\n      this.throwUnexpectedToken();\n    }\n    if (this.source[this.index] === \"n\") {\n      this.index++;\n      return {\n        type: 6 /* NumericLiteral */,\n        value: BigInt(\"0x\" + num),\n        lineNumber: this.lineNumber,\n        lineStart: this.lineStart,\n        start,\n        end: this.index\n      };\n    }\n    if (Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n      this.throwUnexpectedToken();\n    }\n    return {\n      type: 6 /* NumericLiteral */,\n      value: parseInt(\"0x\" + num, 16),\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  scanBinaryLiteral(start) {\n    let ch;\n    let num = this.scanLiteralPart((c) => c === \"0\" || c === \"1\");\n    if (num.length === 0) {\n      this.throwUnexpectedToken();\n    }\n    if (this.source[this.index] === \"n\") {\n      this.index++;\n      return {\n        type: 6 /* NumericLiteral */,\n        value: BigInt(\"0b\" + num),\n        lineNumber: this.lineNumber,\n        lineStart: this.lineStart,\n        start,\n        end: this.index\n      };\n    }\n    if (!this.eof()) {\n      ch = this.source.charCodeAt(this.index);\n      if (Character.isIdentifierStart(ch) || Character.isDecimalDigit(ch)) {\n        this.throwUnexpectedToken();\n      }\n    }\n    return {\n      type: 6 /* NumericLiteral */,\n      value: parseInt(num, 2),\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  scanOctalLiteral(prefix, start) {\n    let num = \"\";\n    let octal = false;\n    if (Character.isOctalDigit(prefix.charCodeAt(0))) {\n      octal = true;\n      num = \"0\" + this.source[this.index++];\n    } else {\n      ++this.index;\n    }\n    num += this.scanLiteralPart(Character.isOctalDigitChar);\n    if (!octal && num.length === 0) {\n      this.throwUnexpectedToken();\n    }\n    if (this.source[this.index] === \"n\") {\n      this.index++;\n      return {\n        type: 6 /* NumericLiteral */,\n        value: BigInt(\"0o\" + num),\n        lineNumber: this.lineNumber,\n        lineStart: this.lineStart,\n        start,\n        end: this.index\n      };\n    }\n    if (Character.isIdentifierStart(this.source.charCodeAt(this.index)) || Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n      this.throwUnexpectedToken();\n    }\n    return {\n      type: 6 /* NumericLiteral */,\n      value: parseInt(num, 8),\n      octal,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  isImplicitOctalLiteral() {\n    for (let i = this.index + 1; i < this.length; ++i) {\n      const ch = this.source[i];\n      if (ch === \"8\" || ch === \"9\" || ch === \"n\") {\n        return false;\n      }\n      if (!Character.isOctalDigit(ch.charCodeAt(0))) {\n        return true;\n      }\n    }\n    return true;\n  }\n  scanLiteralPart(check) {\n    let num = \"\";\n    if (this.source[this.index] === \"_\")\n      this.throwUnexpectedToken(Messages.NumericSeperatorNotAllowedHere);\n    while (this.source[this.index] && (check(this.source[this.index]) || this.source[this.index] === \"_\")) {\n      if (this.source[this.index] !== \"_\")\n        num += this.source[this.index];\n      this.index++;\n      if (this.source[this.index - 1] === \"_\" && this.source[this.index] === \"_\")\n        this.throwUnexpectedToken(Messages.NumericSeperatorOneUnderscore);\n    }\n    if (this.source[this.index - 1] === \"_\")\n      this.throwUnexpectedToken(Messages.NumericSeperatorNotAllowedHere);\n    return num;\n  }\n  scanNumericLiteral() {\n    const start = this.index;\n    let ch = this.source[start];\n    assert(\n      Character.isDecimalDigit(ch.charCodeAt(0)) || ch === \".\",\n      \"Numeric literal must start with a decimal digit or a decimal point\"\n    );\n    let num = \"\";\n    if (ch !== \".\") {\n      num = this.source[this.index++];\n      ch = this.source[this.index];\n      if (num === \"0\") {\n        if (ch === \"x\" || ch === \"X\") {\n          ++this.index;\n          return this.scanHexLiteral(start);\n        }\n        if (ch === \"b\" || ch === \"B\") {\n          ++this.index;\n          return this.scanBinaryLiteral(start);\n        }\n        if (ch === \"o\" || ch === \"O\") {\n          return this.scanOctalLiteral(ch, start);\n        }\n        if (ch && Character.isOctalDigit(ch.charCodeAt(0))) {\n          if (this.isImplicitOctalLiteral()) {\n            return this.scanOctalLiteral(ch, start);\n          }\n        }\n      }\n      this.index--;\n      num = this.scanLiteralPart(Character.isDecimalDigitChar);\n      ch = this.source[this.index];\n    }\n    if (ch === \".\") {\n      num += this.source[this.index++];\n      num += this.scanLiteralPart(Character.isDecimalDigitChar);\n      ch = this.source[this.index];\n    }\n    if (ch === \"e\" || ch === \"E\") {\n      num += this.source[this.index++];\n      ch = this.source[this.index];\n      if (ch === \"+\" || ch === \"-\") {\n        num += this.source[this.index++];\n      }\n      if (Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n        num += this.scanLiteralPart(Character.isDecimalDigitChar);\n      } else {\n        this.throwUnexpectedToken();\n      }\n    } else if (ch === \"n\") {\n      if (num.length > 1 && num[0] === \"0\") {\n        this.throwUnexpectedToken();\n      }\n      this.index++;\n      return {\n        type: 6 /* NumericLiteral */,\n        value: BigInt(num),\n        lineNumber: this.lineNumber,\n        lineStart: this.lineStart,\n        start,\n        end: this.index\n      };\n    }\n    if (Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n      this.throwUnexpectedToken();\n    }\n    return {\n      type: 6 /* NumericLiteral */,\n      value: parseFloat(num),\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-literals-string-literals\n  scanStringLiteral() {\n    const start = this.index;\n    let quote = this.source[start];\n    assert(\n      quote === \"'\" || quote === '\"',\n      \"String literal must starts with a quote\"\n    );\n    ++this.index;\n    let octal = false;\n    let str = \"\";\n    while (!this.eof()) {\n      let ch = this.source[this.index++];\n      if (ch === quote) {\n        quote = \"\";\n        break;\n      } else if (ch === \"\\\\\") {\n        ch = this.source[this.index++];\n        if (!ch || !Character.isLineTerminator(ch.charCodeAt(0))) {\n          switch (ch) {\n            case \"u\":\n              if (this.source[this.index] === \"{\") {\n                ++this.index;\n                str += this.scanUnicodeCodePointEscape();\n              } else {\n                const unescapedChar = this.scanHexEscape(ch);\n                if (unescapedChar === null) {\n                  this.throwUnexpectedToken();\n                }\n                str += unescapedChar;\n              }\n              break;\n            case \"x\":\n              const unescaped = this.scanHexEscape(ch);\n              if (unescaped === null) {\n                this.throwUnexpectedToken(Messages.InvalidHexEscapeSequence);\n              }\n              str += unescaped;\n              break;\n            case \"n\":\n              str += \"\\n\";\n              break;\n            case \"r\":\n              str += \"\\r\";\n              break;\n            case \"t\":\n              str += \"\t\";\n              break;\n            case \"b\":\n              str += \"\\b\";\n              break;\n            case \"f\":\n              str += \"\\f\";\n              break;\n            case \"v\":\n              str += \"\\v\";\n              break;\n            case \"8\":\n            case \"9\":\n              str += ch;\n              this.tolerateUnexpectedToken();\n              break;\n            default:\n              if (ch && Character.isOctalDigit(ch.charCodeAt(0))) {\n                const octToDec = this.octalToDecimal(ch);\n                octal = octToDec.octal || octal;\n                str += String.fromCharCode(octToDec.code);\n              } else {\n                str += ch;\n              }\n              break;\n          }\n        } else {\n          ++this.lineNumber;\n          if (ch === \"\\r\" && this.source[this.index] === \"\\n\") {\n            ++this.index;\n          }\n          this.lineStart = this.index;\n        }\n      } else if (Character.isLineTerminator(ch.charCodeAt(0))) {\n        break;\n      } else {\n        str += ch;\n      }\n    }\n    if (quote !== \"\") {\n      this.index = start;\n      this.throwUnexpectedToken();\n    }\n    return {\n      type: 8 /* StringLiteral */,\n      value: str,\n      octal,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-template-literal-lexical-components\n  scanTemplate() {\n    let cooked = \"\";\n    let terminated = false;\n    const start = this.index;\n    const head = this.source[start] === \"`\";\n    let tail = false;\n    let notEscapeSequenceHead = null;\n    let rawOffset = 2;\n    ++this.index;\n    while (!this.eof()) {\n      let ch = this.source[this.index++];\n      if (ch === \"`\") {\n        rawOffset = 1;\n        tail = true;\n        terminated = true;\n        break;\n      } else if (ch === \"$\") {\n        if (this.source[this.index] === \"{\") {\n          this.curlyStack.push(\"${\");\n          ++this.index;\n          terminated = true;\n          break;\n        }\n        cooked += ch;\n      } else if (notEscapeSequenceHead !== null) {\n        continue;\n      } else if (ch === \"\\\\\") {\n        ch = this.source[this.index++];\n        if (!Character.isLineTerminator(ch.charCodeAt(0))) {\n          switch (ch) {\n            case \"n\":\n              cooked += \"\\n\";\n              break;\n            case \"r\":\n              cooked += \"\\r\";\n              break;\n            case \"t\":\n              cooked += \"\t\";\n              break;\n            case \"u\":\n              if (this.source[this.index] === \"{\") {\n                ++this.index;\n                const unicodeCodePointEscape = this.tryToScanUnicodeCodePointEscape();\n                if (unicodeCodePointEscape === null) {\n                  notEscapeSequenceHead = \"u\";\n                } else {\n                  cooked += unicodeCodePointEscape;\n                }\n              } else {\n                const unescapedChar = this.scanHexEscape(ch);\n                if (unescapedChar === null) {\n                  notEscapeSequenceHead = \"u\";\n                } else {\n                  cooked += unescapedChar;\n                }\n              }\n              break;\n            case \"x\":\n              const unescaped = this.scanHexEscape(ch);\n              if (unescaped === null) {\n                notEscapeSequenceHead = \"x\";\n              } else {\n                cooked += unescaped;\n              }\n              break;\n            case \"b\":\n              cooked += \"\\b\";\n              break;\n            case \"f\":\n              cooked += \"\\f\";\n              break;\n            case \"v\":\n              cooked += \"\\v\";\n              break;\n            default:\n              if (ch === \"0\") {\n                if (Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n                  notEscapeSequenceHead = \"0\";\n                } else {\n                  cooked += \"\\0\";\n                }\n              } else if (Character.isDecimalDigitChar(ch)) {\n                notEscapeSequenceHead = ch;\n              } else {\n                cooked += ch;\n              }\n              break;\n          }\n        } else {\n          ++this.lineNumber;\n          if (ch === \"\\r\" && this.source[this.index] === \"\\n\") {\n            ++this.index;\n          }\n          this.lineStart = this.index;\n        }\n      } else if (Character.isLineTerminator(ch.charCodeAt(0))) {\n        ++this.lineNumber;\n        if (ch === \"\\r\" && this.source[this.index] === \"\\n\") {\n          ++this.index;\n        }\n        this.lineStart = this.index;\n        cooked += \"\\n\";\n      } else {\n        cooked += ch;\n      }\n    }\n    if (!terminated) {\n      this.throwUnexpectedToken();\n    }\n    if (!head) {\n      this.curlyStack.pop();\n    }\n    return {\n      type: 10 /* Template */,\n      value: this.source.slice(start + 1, this.index - rawOffset),\n      cooked: notEscapeSequenceHead === null ? cooked : null,\n      head,\n      tail,\n      notEscapeSequenceHead,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n  testRegExp(pattern, flags) {\n    const astralSubstitute = \"\\uFFFF\";\n    let tmp = pattern;\n    if (flags.indexOf(\"u\") >= 0) {\n      tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, ($0, $1, $2) => {\n        const codePoint = parseInt($1 || $2, 16);\n        if (codePoint > 1114111) {\n          this.throwUnexpectedToken(Messages.InvalidRegExp);\n        }\n        if (codePoint <= 65535) {\n          return String.fromCharCode(codePoint);\n        }\n        return astralSubstitute;\n      }).replace(\n        /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n        astralSubstitute\n      );\n    }\n    try {\n      RegExp(tmp);\n    } catch (e) {\n      this.throwUnexpectedToken(Messages.InvalidRegExp);\n    }\n    try {\n      return new RegExp(pattern, flags);\n    } catch (exception) {\n      return null;\n    }\n  }\n  scanRegExpBody() {\n    let ch = this.source[this.index];\n    assert(ch === \"/\", \"Regular expression literal must start with a slash\");\n    let str = this.source[this.index++];\n    let classMarker = false;\n    let terminated = false;\n    while (!this.eof()) {\n      ch = this.source[this.index++];\n      str += ch;\n      if (ch === \"\\\\\") {\n        ch = this.source[this.index++];\n        if (Character.isLineTerminator(ch.charCodeAt(0))) {\n          this.throwUnexpectedToken(Messages.UnterminatedRegExp);\n        }\n        str += ch;\n      } else if (Character.isLineTerminator(ch.charCodeAt(0))) {\n        this.throwUnexpectedToken(Messages.UnterminatedRegExp);\n      } else if (classMarker) {\n        if (ch === \"]\") {\n          classMarker = false;\n        }\n      } else {\n        if (ch === \"/\") {\n          terminated = true;\n          break;\n        } else if (ch === \"[\") {\n          classMarker = true;\n        }\n      }\n    }\n    if (!terminated) {\n      this.throwUnexpectedToken(Messages.UnterminatedRegExp);\n    }\n    return str.substr(1, str.length - 2);\n  }\n  scanRegExpFlags() {\n    let str = \"\";\n    let flags = \"\";\n    while (!this.eof()) {\n      let ch = this.source[this.index];\n      if (!Character.isIdentifierPart(ch.charCodeAt(0))) {\n        break;\n      }\n      ++this.index;\n      if (ch === \"\\\\\" && !this.eof()) {\n        ch = this.source[this.index];\n        if (ch === \"u\") {\n          ++this.index;\n          let restore = this.index;\n          const char = this.scanHexEscape(\"u\");\n          if (char !== null) {\n            flags += char;\n            for (str += \"\\\\u\"; restore < this.index; ++restore) {\n              str += this.source[restore];\n            }\n          } else {\n            this.index = restore;\n            flags += \"u\";\n            str += \"\\\\u\";\n          }\n          this.tolerateUnexpectedToken();\n        } else {\n          str += \"\\\\\";\n          this.tolerateUnexpectedToken();\n        }\n      } else {\n        flags += ch;\n        str += ch;\n      }\n    }\n    return flags;\n  }\n  scanRegExp() {\n    const start = this.index;\n    const pattern = this.scanRegExpBody();\n    const flags = this.scanRegExpFlags();\n    const value = this.testRegExp(pattern, flags);\n    return {\n      type: 9 /* RegularExpression */,\n      value: \"\",\n      pattern,\n      flags,\n      regex: value,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  lex() {\n    if (this.eof()) {\n      return {\n        type: 2 /* EOF */,\n        value: \"\",\n        lineNumber: this.lineNumber,\n        lineStart: this.lineStart,\n        start: this.index,\n        end: this.index\n      };\n    }\n    const cp = this.source.charCodeAt(this.index);\n    if (Character.isIdentifierStart(cp)) {\n      return this.scanIdentifier();\n    }\n    if (cp === 40 || cp === 41 || cp === 59) {\n      return this.scanPunctuator();\n    }\n    if (cp === 39 || cp === 34) {\n      return this.scanStringLiteral();\n    }\n    if (cp === 46) {\n      if (Character.isDecimalDigit(this.source.charCodeAt(this.index + 1))) {\n        return this.scanNumericLiteral();\n      }\n      return this.scanPunctuator();\n    }\n    if (Character.isDecimalDigit(cp)) {\n      return this.scanNumericLiteral();\n    }\n    if (cp === 96 || cp === 125 && this.curlyStack[this.curlyStack.length - 1] === \"${\") {\n      return this.scanTemplate();\n    }\n    if (cp >= 55296 && cp < 57343) {\n      if (Character.isIdentifierStart(this.codePointAt(this.index))) {\n        return this.scanIdentifier();\n      }\n    }\n    return this.scanPunctuator();\n  }\n};\n\n// src/parser.ts\nvar ArrowParameterPlaceHolder = \"ArrowParameterPlaceHolder\";\nvar Parser = class {\n  config;\n  delegate;\n  errorHandler;\n  scanner;\n  operatorPrecedence;\n  lookahead;\n  hasLineTerminator;\n  context;\n  tokens;\n  startMarker;\n  lastMarker;\n  constructor(code, options = {}, delegate) {\n    this.config = {\n      range: typeof options.range === \"boolean\" && options.range,\n      loc: typeof options.loc === \"boolean\" && options.loc,\n      source: null,\n      tokens: typeof options.tokens === \"boolean\" && options.tokens,\n      comment: typeof options.comment === \"boolean\" && options.comment,\n      tolerant: typeof options.tolerant === \"boolean\" && options.tolerant\n    };\n    if (this.config.loc && options.source && options.source !== null) {\n      this.config.source = String(options.source);\n    }\n    this.delegate = delegate;\n    this.errorHandler = new ErrorHandler();\n    this.errorHandler.tolerant = this.config.tolerant == true;\n    this.scanner = new Scanner(code, this.errorHandler);\n    this.scanner.trackComment = this.config.comment == true;\n    this.operatorPrecedence = {\n      \")\": 0,\n      \";\": 0,\n      \",\": 0,\n      \"=\": 0,\n      \"]\": 0,\n      \"??\": 5,\n      \"||\": 6,\n      \"&&\": 7,\n      \"|\": 8,\n      \"^\": 9,\n      \"&\": 10,\n      \"==\": 11,\n      \"!=\": 11,\n      \"===\": 11,\n      \"!==\": 11,\n      \"<\": 12,\n      \">\": 12,\n      \"<=\": 12,\n      \">=\": 12,\n      \"<<\": 13,\n      \">>\": 13,\n      \">>>\": 13,\n      \"+\": 14,\n      \"-\": 14,\n      \"*\": 15,\n      \"/\": 15,\n      \"%\": 15\n    };\n    this.lookahead = {\n      type: 2 /* EOF */,\n      value: \"\",\n      lineNumber: this.scanner.lineNumber,\n      lineStart: 0,\n      start: 0,\n      end: 0\n    };\n    this.hasLineTerminator = false;\n    this.context = {\n      isModule: false,\n      isAsync: false,\n      allowIn: true,\n      allowStrictDirective: true,\n      allowSuper: false,\n      allowYield: true,\n      firstCoverInitializedNameError: null,\n      isAssignmentTarget: false,\n      isBindingElement: false,\n      inConstructor: false,\n      inFunctionBody: false,\n      inIteration: false,\n      inSwitch: false,\n      inClassConstructor: false,\n      labelSet: {},\n      strict: false,\n      decorators: null\n    };\n    this.tokens = [];\n    this.startMarker = {\n      index: 0,\n      line: this.scanner.lineNumber,\n      column: 0\n    };\n    this.lastMarker = {\n      index: 0,\n      line: this.scanner.lineNumber,\n      column: 0\n    };\n    this.nextToken();\n    this.lastMarker = {\n      index: this.scanner.index,\n      line: this.scanner.lineNumber,\n      column: this.scanner.index - this.scanner.lineStart\n    };\n  }\n  throwError(messageFormat, ...values) {\n    const args = values.slice();\n    const msg = messageFormat.replace(\n      /%(\\d)/g,\n      (whole, idx) => {\n        assert(idx < args.length, \"Message reference must be in range\");\n        return args[idx];\n      }\n    );\n    const index = this.lastMarker.index;\n    const line = this.lastMarker.line;\n    const column = this.lastMarker.column + 1;\n    throw this.errorHandler.createError(index, line, column, msg);\n  }\n  tolerateError(messageFormat, ...values) {\n    const args = values.slice();\n    const msg = messageFormat.replace(\n      /%(\\d)/g,\n      (whole, idx) => {\n        assert(idx < args.length, \"Message reference must be in range\");\n        return args[idx];\n      }\n    );\n    const index = this.lastMarker.index;\n    const line = this.scanner.lineNumber;\n    const column = this.lastMarker.column + 1;\n    this.errorHandler.tolerateError(index, line, column, msg);\n  }\n  // Throw an exception because of the token.\n  unexpectedTokenError(token, message) {\n    let msg = message || Messages.UnexpectedToken;\n    let value;\n    if (token) {\n      if (!message) {\n        msg = token.type === 2 /* EOF */ ? Messages.UnexpectedEOS : token.type === 3 /* Identifier */ ? Messages.UnexpectedIdentifier : token.type === 6 /* NumericLiteral */ ? Messages.UnexpectedNumber : token.type === 8 /* StringLiteral */ ? Messages.UnexpectedString : token.type === 10 /* Template */ ? Messages.UnexpectedTemplate : Messages.UnexpectedToken;\n        if (token.type === 4 /* Keyword */) {\n          if (this.scanner.isFutureReservedWord(token.value)) {\n            msg = Messages.UnexpectedReserved;\n          } else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) {\n            msg = Messages.StrictReservedWord;\n          }\n        }\n      }\n      value = token.value;\n    } else {\n      value = \"ILLEGAL\";\n    }\n    msg = msg.replace(\"%0\", value);\n    if (token && typeof token.lineNumber === \"number\") {\n      const index = token.start;\n      const line = token.lineNumber;\n      const lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column;\n      const column = token.start - lastMarkerLineStart + 1;\n      return this.errorHandler.createError(index, line, column, msg);\n    } else {\n      const index = this.lastMarker.index;\n      const line = this.lastMarker.line;\n      const column = this.lastMarker.column + 1;\n      return this.errorHandler.createError(index, line, column, msg);\n    }\n  }\n  throwUnexpectedToken(token, message) {\n    throw this.unexpectedTokenError(token, message);\n  }\n  tolerateUnexpectedToken(token, message) {\n    this.errorHandler.tolerate(this.unexpectedTokenError(token, message));\n  }\n  tolerateInvalidLoopStatement() {\n    if (this.matchKeyword(\"class\") || this.matchKeyword(\"function\")) {\n      this.tolerateError(Messages.UnexpectedToken, this.lookahead);\n    }\n  }\n  collectComments() {\n    if (!this.config.comment) {\n      this.scanner.scanComments();\n    } else {\n      const comments = this.scanner.scanComments();\n      if (comments.length > 0 && this.delegate) {\n        for (let i = 0; i < comments.length; ++i) {\n          const e = comments[i];\n          const node = {\n            type: e.multiLine ? \"BlockComment\" : \"LineComment\",\n            value: this.scanner.source.slice(e.slice[0], e.slice[1])\n          };\n          if (this.config.range) {\n            node.range = e.range;\n          }\n          if (this.config.loc) {\n            node.loc = e.loc;\n          }\n          const metadata = {\n            start: {\n              line: e.loc.start.line,\n              column: e.loc.start.column,\n              offset: e.range[0]\n            },\n            end: {\n              line: e.loc.end.line,\n              column: e.loc.end.column,\n              offset: e.range[1]\n            }\n          };\n          this.delegate(node, metadata);\n        }\n      }\n    }\n  }\n  // From internal representation to an external structure\n  getTokenRaw(token) {\n    return this.scanner.source.slice(token.start, token.end);\n  }\n  convertToken(token) {\n    const t = {\n      type: TokenName[token.type],\n      value: this.getTokenRaw(token)\n    };\n    if (this.config.range) {\n      t.range = [token.start, token.end];\n    }\n    if (this.config.loc) {\n      t.loc = {\n        start: {\n          line: this.startMarker.line,\n          column: this.startMarker.column\n        },\n        end: {\n          line: this.scanner.lineNumber,\n          column: this.scanner.index - this.scanner.lineStart\n        }\n      };\n    }\n    if (token.type === 9 /* RegularExpression */) {\n      const pattern = token.pattern;\n      const flags = token.flags;\n      t.regex = { pattern, flags };\n    }\n    return t;\n  }\n  nextToken() {\n    const token = this.lookahead;\n    this.lastMarker.index = this.scanner.index;\n    this.lastMarker.line = this.scanner.lineNumber;\n    this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n    this.collectComments();\n    if (this.scanner.index !== this.startMarker.index) {\n      this.startMarker.index = this.scanner.index;\n      this.startMarker.line = this.scanner.lineNumber;\n      this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n    }\n    const next = this.scanner.lex();\n    this.hasLineTerminator = token.lineNumber !== next.lineNumber;\n    if (next && this.context.strict && next.type === 3 /* Identifier */) {\n      if (this.scanner.isStrictModeReservedWord(next.value)) {\n        next.type = 4 /* Keyword */;\n      }\n    }\n    this.lookahead = next;\n    if (this.config.tokens && next.type !== 2 /* EOF */) {\n      this.tokens.push(this.convertToken(next));\n    }\n    return token;\n  }\n  nextRegexToken() {\n    this.collectComments();\n    const token = this.scanner.scanRegExp();\n    if (this.config.tokens) {\n      this.tokens.pop();\n      this.tokens.push(this.convertToken(token));\n    }\n    this.lookahead = token;\n    this.nextToken();\n    return token;\n  }\n  createNode() {\n    return {\n      index: this.startMarker.index,\n      line: this.startMarker.line,\n      column: this.startMarker.column\n    };\n  }\n  startNode(token, lastLineStart = 0) {\n    let column = token.start - token.lineStart;\n    let line = token.lineNumber;\n    if (column < 0) {\n      column += lastLineStart;\n      line--;\n    }\n    return {\n      index: token.start,\n      line,\n      column\n    };\n  }\n  finalize(marker, node) {\n    if (this.config.range) {\n      node.range = [marker.index, this.lastMarker.index];\n    }\n    if (this.config.loc) {\n      node.loc = {\n        start: {\n          line: marker.line,\n          column: marker.column\n        },\n        end: {\n          line: this.lastMarker.line,\n          column: this.lastMarker.column\n        }\n      };\n      if (this.config.source) {\n        node.loc.source = this.config.source;\n      }\n    }\n    if (this.delegate) {\n      const metadata = {\n        start: {\n          line: marker.line,\n          column: marker.column,\n          offset: marker.index\n        },\n        end: {\n          line: this.lastMarker.line,\n          column: this.lastMarker.column,\n          offset: this.lastMarker.index\n        }\n      };\n      this.delegate(node, metadata);\n    }\n    return node;\n  }\n  // Expect the next token to match the specified punctuator.\n  // If not, an exception will be thrown.\n  expect(value) {\n    const token = this.nextToken();\n    if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n      this.throwUnexpectedToken(token);\n    }\n  }\n  // Quietly expect a comma when in tolerant mode, otherwise delegates to expect().\n  expectCommaSeparator() {\n    if (this.config.tolerant) {\n      const token = this.lookahead;\n      if (token.type === 7 /* Punctuator */ && token.value === \",\") {\n        this.nextToken();\n      } else if (token.type === 7 /* Punctuator */ && token.value === \";\") {\n        this.nextToken();\n        this.tolerateUnexpectedToken(token);\n      } else {\n        this.tolerateUnexpectedToken(token, Messages.UnexpectedToken);\n      }\n    } else {\n      this.expect(\",\");\n    }\n  }\n  // Expect the next token to match the specified keyword.\n  // If not, an exception will be thrown.\n  expectKeyword(keyword) {\n    const token = this.nextToken();\n    if (token.type !== 4 /* Keyword */ || token.value !== keyword) {\n      this.throwUnexpectedToken(token);\n    }\n  }\n  // Return true if the next token matches the specified punctuator.\n  match(value) {\n    return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value;\n  }\n  // Return true if the next token matches the specified keyword\n  matchKeyword(keyword) {\n    return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword;\n  }\n  // Return true if the next token matches the specified contextual keyword\n  // (where an identifier is sometimes a keyword depending on the context)\n  matchContextualKeyword(keyword) {\n    return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword;\n  }\n  // Return true if the next token is an assignment operator\n  matchAssign() {\n    if (this.lookahead.type !== 7 /* Punctuator */) {\n      return false;\n    }\n    const op = this.lookahead.value;\n    return op === \"=\" || op === \"*=\" || op === \"**=\" || op === \"/=\" || op === \"%=\" || op === \"+=\" || op === \"-=\" || op === \"<<=\" || op === \">>=\" || op === \">>>=\" || op === \"&=\" || op === \"^=\" || op === \"|=\" || op === \"&&=\" || op === \"||=\" || op === \"??=\";\n  }\n  // Cover grammar support.\n  //\n  // When an assignment expression position starts with an left parenthesis, the determination of the type\n  // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n  // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n  //\n  // There are three productions that can be parsed in a parentheses pair that needs to be determined\n  // after the outermost pair is closed. They are:\n  //\n  //   1. AssignmentExpression\n  //   2. BindingElements\n  //   3. AssignmentTargets\n  //\n  // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n  // binding element or assignment target.\n  //\n  // The three productions have the relationship:\n  //\n  //   BindingElements \u2286 AssignmentTargets \u2286 AssignmentExpression\n  //\n  // with a single exception that CoverInitializedName when used directly in an Expression, generates\n  // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n  // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n  //\n  // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n  // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n  // the CoverInitializedName check is conducted.\n  //\n  // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n  // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n  // pattern. The CoverInitializedName check is deferred.\n  isolateCoverGrammar(parseFunction) {\n    const previousIsBindingElement = this.context.isBindingElement;\n    const previousIsAssignmentTarget = this.context.isAssignmentTarget;\n    const previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n    this.context.isBindingElement = true;\n    this.context.isAssignmentTarget = true;\n    this.context.firstCoverInitializedNameError = null;\n    const result = parseFunction.call(this);\n    if (this.context.firstCoverInitializedNameError !== null) {\n      this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);\n    }\n    this.context.isBindingElement = previousIsBindingElement;\n    this.context.isAssignmentTarget = previousIsAssignmentTarget;\n    this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;\n    return result;\n  }\n  inheritCoverGrammar(parseFunction) {\n    const previousIsBindingElement = this.context.isBindingElement;\n    const previousIsAssignmentTarget = this.context.isAssignmentTarget;\n    const previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n    this.context.isBindingElement = true;\n    this.context.isAssignmentTarget = true;\n    this.context.firstCoverInitializedNameError = null;\n    const result = parseFunction.call(this);\n    this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement;\n    this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget;\n    this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError;\n    return result;\n  }\n  consumeSemicolon() {\n    if (this.match(\";\")) {\n      this.nextToken();\n    } else if (!this.hasLineTerminator) {\n      if (this.lookahead.type !== 2 /* EOF */ && !this.match(\"}\")) {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n      this.lastMarker.index = this.startMarker.index;\n      this.lastMarker.line = this.startMarker.line;\n      this.lastMarker.column = this.startMarker.column;\n    }\n  }\n  // https://tc39.github.io/ecma262/#sec-primary-expression\n  parsePrimaryExpression() {\n    const node = this.createNode();\n    let expr;\n    let token, raw;\n    switch (this.lookahead.type) {\n      case 3 /* Identifier */:\n        if ((this.context.isModule || this.context.isAsync) && this.lookahead.value === \"await\") {\n          this.tolerateUnexpectedToken(this.lookahead);\n        }\n        expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Identifier(this.nextToken().value));\n        break;\n      case 6 /* NumericLiteral */:\n      case 8 /* StringLiteral */:\n        if (this.context.strict && this.lookahead.octal) {\n          this.tolerateUnexpectedToken(this.lookahead, Messages.StrictOctalLiteral);\n        }\n        this.context.isAssignmentTarget = false;\n        this.context.isBindingElement = false;\n        token = this.nextToken();\n        raw = this.getTokenRaw(token);\n        if (typeof token.value === \"bigint\")\n          expr = this.finalize(node, new BigIntLiteral(token.value, raw, token.value.toString()));\n        else\n          expr = this.finalize(node, new Literal(token.value, raw));\n        break;\n      case 1 /* BooleanLiteral */:\n        this.context.isAssignmentTarget = false;\n        this.context.isBindingElement = false;\n        token = this.nextToken();\n        raw = this.getTokenRaw(token);\n        expr = this.finalize(node, new Literal(token.value === \"true\", raw));\n        break;\n      case 5 /* NullLiteral */:\n        this.context.isAssignmentTarget = false;\n        this.context.isBindingElement = false;\n        token = this.nextToken();\n        raw = this.getTokenRaw(token);\n        expr = this.finalize(node, new Literal(null, raw));\n        break;\n      case 10 /* Template */:\n        expr = this.parseTemplateLiteral({ isTagged: false });\n        break;\n      case 7 /* Punctuator */:\n        switch (this.lookahead.value) {\n          case \"(\":\n            this.context.isBindingElement = false;\n            expr = this.inheritCoverGrammar(this.parseGroupExpression);\n            break;\n          case \"[\":\n            expr = this.inheritCoverGrammar(this.parseArrayInitializer);\n            break;\n          case \"{\":\n            expr = this.inheritCoverGrammar(this.parseObjectInitializer);\n            break;\n          case \"/\":\n          case \"/=\":\n            this.context.isAssignmentTarget = false;\n            this.context.isBindingElement = false;\n            this.scanner.index = this.startMarker.index;\n            token = this.nextRegexToken();\n            raw = this.getTokenRaw(token);\n            expr = this.finalize(node, new RegexLiteral(token.regex, raw, token.pattern, token.flags));\n            break;\n          case \"#\":\n            this.nextToken();\n            expr = this.finalize(node, new PrivateIdentifier(this.nextToken().value));\n            break;\n          case \"@\":\n            let decorators = this.parseDecorators();\n            this.context.decorators = decorators;\n            let expression = this.parsePrimaryExpression();\n            this.context.decorators = null;\n            expr = this.finalize(node, new PrivateIdentifier(this.nextToken().value));\n            break;\n          default:\n            expr = this.throwUnexpectedToken(this.nextToken());\n        }\n        break;\n      case 4 /* Keyword */:\n        if (!this.context.strict && this.context.allowYield && this.matchKeyword(\"yield\")) {\n          expr = this.parseIdentifierName();\n        } else if (!this.context.strict && this.matchKeyword(\"let\")) {\n          expr = this.finalize(node, new Identifier(this.nextToken().value));\n        } else {\n          this.context.isAssignmentTarget = false;\n          this.context.isBindingElement = false;\n          if (this.matchKeyword(\"function\")) {\n            expr = this.parseFunctionExpression();\n          } else if (this.matchKeyword(\"this\")) {\n            this.nextToken();\n            expr = this.finalize(node, new ThisExpression());\n          } else if (this.matchKeyword(\"class\")) {\n            expr = this.parseClassExpression();\n          } else if (this.matchKeyword(\"new\")) {\n            expr = this.parseNewExpression();\n          } else if (this.matchImportCall()) {\n            expr = this.parseImportCall();\n          } else if (this.matchImportMeta()) {\n            if (!this.context.isModule) {\n              this.tolerateUnexpectedToken(this.lookahead, Messages.CannotUseImportMetaOutsideAModule);\n            }\n            expr = this.parseImportMeta();\n          } else {\n            expr = this.throwUnexpectedToken(this.nextToken());\n          }\n        }\n        break;\n      default:\n        expr = this.throwUnexpectedToken(this.nextToken());\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-array-initializer\n  parseSpreadElement() {\n    const node = this.createNode();\n    this.expect(\"...\");\n    const arg = this.inheritCoverGrammar(this.parseAssignmentExpression);\n    return this.finalize(node, new SpreadElement(arg));\n  }\n  parseArrayInitializer() {\n    const node = this.createNode();\n    const elements = [];\n    this.expect(\"[\");\n    while (!this.match(\"]\")) {\n      if (this.match(\",\")) {\n        this.nextToken();\n        elements.push(null);\n      } else if (this.match(\"...\")) {\n        const element = this.parseSpreadElement();\n        if (!this.match(\"]\")) {\n          this.context.isAssignmentTarget = false;\n          this.context.isBindingElement = false;\n          this.expect(\",\");\n        }\n        elements.push(element);\n      } else {\n        elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n        if (!this.match(\"]\")) {\n          this.expect(\",\");\n        }\n      }\n    }\n    this.expect(\"]\");\n    return this.finalize(node, new ArrayExpression(elements));\n  }\n  // https://tc39.github.io/ecma262/#sec-object-initializer\n  parsePropertyMethod(params) {\n    this.context.isAssignmentTarget = false;\n    this.context.isBindingElement = false;\n    const previousStrict = this.context.strict;\n    const previousAllowStrictDirective = this.context.allowStrictDirective;\n    this.context.allowStrictDirective = params.simple;\n    const body = this.isolateCoverGrammar(this.parseFunctionSourceElements);\n    if (this.context.strict && params.firstRestricted) {\n      this.tolerateUnexpectedToken(params.firstRestricted, params.message);\n    }\n    if (this.context.strict && params.stricted) {\n      this.tolerateUnexpectedToken(params.stricted, params.message);\n    }\n    this.context.strict = previousStrict;\n    this.context.allowStrictDirective = previousAllowStrictDirective;\n    return body;\n  }\n  parsePropertyMethodFunction(isGenerator) {\n    const node = this.createNode();\n    const previousAllowYield = this.context.allowYield;\n    this.context.allowYield = true;\n    const params = this.parseFormalParameters();\n    const method = this.parsePropertyMethod(params);\n    this.context.allowYield = previousAllowYield;\n    return this.finalize(node, new FunctionExpression(null, params.params, method, isGenerator, false));\n  }\n  parsePropertyMethodAsyncFunction(isGenerator) {\n    const node = this.createNode();\n    const previousAllowYield = this.context.allowYield;\n    const previousIsAsync = this.context.isAsync;\n    this.context.allowYield = false;\n    this.context.isAsync = true;\n    const params = this.parseFormalParameters();\n    const method = this.parsePropertyMethod(params);\n    this.context.allowYield = previousAllowYield;\n    this.context.isAsync = previousIsAsync;\n    return this.finalize(node, new FunctionExpression(null, params.params, method, isGenerator, true));\n  }\n  parseObjectPropertyKey(isPrivate = false) {\n    const node = this.createNode();\n    const token = this.nextToken();\n    let key;\n    switch (token.type) {\n      case 8 /* StringLiteral */:\n      case 6 /* NumericLiteral */:\n        if (this.context.strict && token.octal) {\n          this.tolerateUnexpectedToken(token, Messages.StrictOctalLiteral);\n        }\n        const raw = this.getTokenRaw(token);\n        if (typeof token.value === \"bigint\")\n          key = this.finalize(node, new BigIntLiteral(token.value, raw, token.value.toString()));\n        else\n          key = this.finalize(node, new Literal(token.value, raw));\n        break;\n      case 3 /* Identifier */:\n      case 1 /* BooleanLiteral */:\n      case 5 /* NullLiteral */:\n      case 4 /* Keyword */:\n        key = this.finalize(node, isPrivate ? new PrivateIdentifier(token.value) : new Identifier(token.value));\n        break;\n      case 7 /* Punctuator */:\n        if (token.value === \"[\") {\n          key = this.isolateCoverGrammar(this.parseAssignmentExpression);\n          this.expect(\"]\");\n        } else {\n          key = this.throwUnexpectedToken(token);\n        }\n        break;\n      default:\n        key = this.throwUnexpectedToken(token);\n    }\n    return key;\n  }\n  isPropertyKey(key, value) {\n    return key.type === \"Identifier\" /* Identifier */ && key.name === value || key.type === \"Literal\" /* Literal */ && key.value === value;\n  }\n  parseObjectProperty(hasProto) {\n    const node = this.createNode();\n    const token = this.lookahead;\n    let kind;\n    let key = null;\n    let value = null;\n    let computed = false;\n    let method = false;\n    let shorthand = false;\n    let isAsync = false;\n    let isGenerator = false;\n    if (token.type === 3 /* Identifier */) {\n      const id = token.value;\n      this.nextToken();\n      computed = this.match(\"[\");\n      isAsync = !this.hasLineTerminator && id === \"async\" && !this.match(\":\") && !this.match(\"(\") && !this.match(\",\");\n      isGenerator = this.match(\"*\");\n      if (isGenerator) {\n        this.nextToken();\n      }\n      key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Identifier(id));\n    } else if (this.match(\"*\")) {\n      this.nextToken();\n    } else {\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey();\n    }\n    const lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n    if (token.type === 3 /* Identifier */ && !isAsync && token.value === \"get\" && lookaheadPropertyKey) {\n      kind = \"get\";\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey();\n      this.context.allowYield = false;\n      value = this.parseGetterMethod();\n    } else if (token.type === 3 /* Identifier */ && !isAsync && token.value === \"set\" && lookaheadPropertyKey) {\n      kind = \"set\";\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey();\n      value = this.parseSetterMethod();\n    } else if (token.type === 7 /* Punctuator */ && token.value === \"*\" && lookaheadPropertyKey) {\n      kind = \"init\";\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey();\n      value = this.parseGeneratorMethod(false);\n      method = true;\n    } else {\n      if (!key) {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n      kind = \"init\";\n      if (this.match(\":\") && !isAsync) {\n        if (!computed && this.isPropertyKey(key, \"__proto__\")) {\n          if (hasProto.value) {\n            this.tolerateError(Messages.DuplicateProtoProperty);\n          }\n          hasProto.value = true;\n        }\n        this.nextToken();\n        value = this.inheritCoverGrammar(this.parseAssignmentExpression);\n      } else if (this.match(\"(\")) {\n        value = isAsync ? this.parsePropertyMethodAsyncFunction(isGenerator) : this.parsePropertyMethodFunction(isGenerator);\n        method = true;\n      } else if (token.type === 3 /* Identifier */) {\n        const id = this.finalize(node, new Identifier(token.value));\n        if (this.match(\"=\")) {\n          this.context.firstCoverInitializedNameError = this.lookahead;\n          this.nextToken();\n          shorthand = true;\n          const init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n          value = this.finalize(node, new AssignmentPattern(id, init));\n        } else {\n          shorthand = true;\n          value = id;\n        }\n      } else {\n        this.throwUnexpectedToken(this.nextToken());\n      }\n    }\n    return this.finalize(node, new Property(kind, key, computed, value, method, shorthand));\n  }\n  parseObjectInitializer() {\n    const node = this.createNode();\n    this.expect(\"{\");\n    const properties = [];\n    const hasProto = { value: false };\n    while (!this.match(\"}\")) {\n      const property = this.match(\"...\") ? this.parseSpreadElement() : this.parseObjectProperty(hasProto);\n      properties.push(property);\n      if (!this.match(\"}\") && (!property.method || this.match(\",\"))) {\n        this.expectCommaSeparator();\n      }\n    }\n    this.expect(\"}\");\n    return this.finalize(node, new ObjectExpression(properties));\n  }\n  // https://tc39.es/proposal-template-literal-revision/#sec-static-semantics-template-early-errors\n  throwTemplateLiteralEarlyErrors(token) {\n    switch (token.notEscapeSequenceHead) {\n      case \"u\":\n        return this.throwUnexpectedToken(token, Messages.InvalidUnicodeEscapeSequence);\n      case \"x\":\n        return this.throwUnexpectedToken(token, Messages.InvalidHexEscapeSequence);\n      case \"8\":\n      case \"9\":\n        return this.throwUnexpectedToken(token, Messages.TemplateEscape89);\n      default:\n        return this.throwUnexpectedToken(token, Messages.TemplateOctalLiteral);\n    }\n  }\n  // https://tc39.github.io/ecma262/#sec-template-literals\n  parseTemplateHead(options) {\n    assert(this.lookahead.head, \"Template literal must start with a template head\");\n    const node = this.createNode();\n    const token = this.nextToken();\n    if (!options.isTagged && token.notEscapeSequenceHead !== null) {\n      this.throwTemplateLiteralEarlyErrors(token);\n    }\n    const raw = token.value;\n    const cooked = token.cooked;\n    return this.finalize(node, new TemplateElement({ raw, cooked }, token.tail));\n  }\n  parseTemplateElement(options) {\n    if (this.lookahead.type !== 10 /* Template */) {\n      this.throwUnexpectedToken();\n    }\n    const node = this.createNode();\n    const token = this.nextToken();\n    if (!options.isTagged && token.notEscapeSequenceHead !== null) {\n      this.throwTemplateLiteralEarlyErrors(token);\n    }\n    const raw = token.value;\n    const cooked = token.cooked;\n    return this.finalize(node, new TemplateElement({ raw, cooked }, token.tail));\n  }\n  parseTemplateLiteral(options) {\n    const node = this.createNode();\n    const expressions = [];\n    const quasis = [];\n    let quasi = this.parseTemplateHead(options);\n    quasis.push(quasi);\n    while (!quasi.tail) {\n      expressions.push(this.parseExpression());\n      quasi = this.parseTemplateElement(options);\n      quasis.push(quasi);\n    }\n    return this.finalize(node, new TemplateLiteral(quasis, expressions));\n  }\n  // https://tc39.github.io/ecma262/#sec-grouping-operator\n  reinterpretExpressionAsPattern(expr) {\n    switch (expr.type) {\n      case \"Identifier\" /* Identifier */:\n      case \"MemberExpression\" /* MemberExpression */:\n      case \"RestElement\" /* RestElement */:\n      case \"AssignmentPattern\" /* AssignmentPattern */:\n        break;\n      case \"SpreadElement\" /* SpreadElement */:\n        expr.type = \"RestElement\" /* RestElement */;\n        this.reinterpretExpressionAsPattern(expr.argument);\n        break;\n      case \"ArrayExpression\" /* ArrayExpression */:\n        expr.type = \"ArrayPattern\" /* ArrayPattern */;\n        for (let i = 0; i < expr.elements.length; i++) {\n          if (expr.elements[i] !== null) {\n            this.reinterpretExpressionAsPattern(expr.elements[i]);\n          }\n        }\n        break;\n      case \"ObjectExpression\" /* ObjectExpression */:\n        expr.type = \"ObjectPattern\" /* ObjectPattern */;\n        for (let i = 0; i < expr.properties.length; i++) {\n          const property = expr.properties[i];\n          this.reinterpretExpressionAsPattern(property.type === \"SpreadElement\" /* SpreadElement */ ? property : property.value);\n        }\n        break;\n      case \"AssignmentExpression\" /* AssignmentExpression */:\n        expr.type = \"AssignmentPattern\" /* AssignmentPattern */;\n        delete expr.operator;\n        this.reinterpretExpressionAsPattern(expr.left);\n        break;\n      default:\n        break;\n    }\n  }\n  parseGroupExpression() {\n    let expr;\n    this.expect(\"(\");\n    if (this.match(\")\")) {\n      this.nextToken();\n      if (!this.match(\"=>\")) {\n        this.expect(\"=>\");\n      }\n      expr = {\n        type: ArrowParameterPlaceHolder,\n        params: [],\n        async: false\n      };\n    } else {\n      const startToken = this.lookahead;\n      const params = [];\n      if (this.match(\"...\")) {\n        expr = this.parseRestElement(params);\n        this.expect(\")\");\n        if (!this.match(\"=>\")) {\n          this.expect(\"=>\");\n        }\n        expr = {\n          type: ArrowParameterPlaceHolder,\n          params: [expr],\n          async: false\n        };\n      } else {\n        let arrow = false;\n        this.context.isBindingElement = true;\n        expr = this.inheritCoverGrammar(this.parseAssignmentExpression);\n        if (this.match(\",\")) {\n          const expressions = [];\n          this.context.isAssignmentTarget = false;\n          expressions.push(expr);\n          while (this.lookahead.type !== 2 /* EOF */) {\n            if (!this.match(\",\")) {\n              break;\n            }\n            this.nextToken();\n            if (this.match(\")\")) {\n              this.nextToken();\n              for (let i = 0; i < expressions.length; i++) {\n                this.reinterpretExpressionAsPattern(expressions[i]);\n              }\n              arrow = true;\n              expr = {\n                type: ArrowParameterPlaceHolder,\n                params: expressions,\n                async: false\n              };\n            } else if (this.match(\"...\")) {\n              if (!this.context.isBindingElement) {\n                this.throwUnexpectedToken(this.lookahead);\n              }\n              expressions.push(this.parseRestElement(params));\n              this.expect(\")\");\n              if (!this.match(\"=>\")) {\n                this.expect(\"=>\");\n              }\n              this.context.isBindingElement = false;\n              for (let i = 0; i < expressions.length; i++) {\n                this.reinterpretExpressionAsPattern(expressions[i]);\n              }\n              arrow = true;\n              expr = {\n                type: ArrowParameterPlaceHolder,\n                params: expressions,\n                async: false\n              };\n            } else {\n              expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n            }\n            if (arrow) {\n              break;\n            }\n          }\n          if (!arrow) {\n            expr = this.finalize(this.startNode(startToken), new SequenceExpression(expressions));\n          }\n        }\n        if (!arrow) {\n          this.expect(\")\");\n          if (this.match(\"=>\")) {\n            if (expr.type === \"Identifier\" /* Identifier */ && expr.name === \"yield\") {\n              arrow = true;\n              expr = {\n                type: ArrowParameterPlaceHolder,\n                params: [expr],\n                async: false\n              };\n            }\n            if (!arrow) {\n              if (!this.context.isBindingElement) {\n                this.throwUnexpectedToken(this.lookahead);\n              }\n              if (expr.type === \"SequenceExpression\" /* SequenceExpression */) {\n                for (let i = 0; i < expr.expressions.length; i++) {\n                  this.reinterpretExpressionAsPattern(expr.expressions[i]);\n                }\n              } else {\n                this.reinterpretExpressionAsPattern(expr);\n              }\n              const parameters = expr.type === \"SequenceExpression\" /* SequenceExpression */ ? expr.expressions : [expr];\n              expr = {\n                type: ArrowParameterPlaceHolder,\n                params: parameters,\n                async: false\n              };\n            }\n          }\n          this.context.isBindingElement = false;\n        }\n      }\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions\n  parseArguments() {\n    this.expect(\"(\");\n    const args = [];\n    if (!this.match(\")\")) {\n      while (true) {\n        const expr = this.match(\"...\") ? this.parseSpreadElement() : this.isolateCoverGrammar(this.parseAssignmentExpression);\n        args.push(expr);\n        if (this.match(\")\")) {\n          break;\n        }\n        this.expectCommaSeparator();\n        if (this.match(\")\")) {\n          break;\n        }\n      }\n    }\n    this.expect(\")\");\n    return args;\n  }\n  isIdentifierName(token) {\n    return token.type === 3 /* Identifier */ || token.type === 4 /* Keyword */ || token.type === 1 /* BooleanLiteral */ || token.type === 5 /* NullLiteral */;\n  }\n  parseIdentifierName(allowPrivateField = false) {\n    let isPrivateField = false;\n    let node = this.createNode();\n    let token = this.nextToken();\n    if (token.value === \"#\" && allowPrivateField) {\n      token = this.nextToken();\n      isPrivateField = true;\n    }\n    if (!this.isIdentifierName(token)) {\n      this.throwUnexpectedToken(token);\n    }\n    return this.finalize(node, isPrivateField ? new PrivateIdentifier(token.value) : new Identifier(token.value));\n  }\n  parseNewExpression() {\n    const node = this.createNode();\n    const id = this.parseIdentifierName();\n    assert(id.name === \"new\", \"New expression must start with `new`\");\n    let expr;\n    if (this.match(\".\")) {\n      this.nextToken();\n      if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === \"target\") {\n        const property = this.parseIdentifierName();\n        expr = new MetaProperty(id, property);\n      } else {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n    } else if (this.matchKeyword(\"import\")) {\n      this.throwUnexpectedToken(this.lookahead);\n    } else {\n      const callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression);\n      const args = this.match(\"(\") ? this.parseArguments() : [];\n      expr = new NewExpression(callee, args);\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n    }\n    return this.finalize(node, expr);\n  }\n  parseAsyncArgument() {\n    const arg = this.parseAssignmentExpression();\n    this.context.firstCoverInitializedNameError = null;\n    return arg;\n  }\n  parseAsyncArguments() {\n    this.expect(\"(\");\n    const args = [];\n    if (!this.match(\")\")) {\n      while (true) {\n        const expr = this.match(\"...\") ? this.parseSpreadElement() : this.isolateCoverGrammar(this.parseAsyncArgument);\n        args.push(expr);\n        if (this.match(\")\")) {\n          break;\n        }\n        this.expectCommaSeparator();\n        if (this.match(\")\")) {\n          break;\n        }\n      }\n    }\n    this.expect(\")\");\n    return args;\n  }\n  matchImportCall() {\n    let match = this.matchKeyword(\"import\");\n    if (match) {\n      const state = this.scanner.saveState();\n      this.scanner.scanComments();\n      const next = this.scanner.lex();\n      this.scanner.restoreState(state);\n      match = next.type === 7 /* Punctuator */ && next.value === \"(\";\n    }\n    return match;\n  }\n  parseImportCall() {\n    const node = this.createNode();\n    this.expectKeyword(\"import\");\n    this.expect(\"(\");\n    var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n    this.context.isAssignmentTarget = true;\n    const source = this.parseAssignmentExpression();\n    let attributes = null;\n    if (this.match(\",\")) {\n      this.nextToken();\n      if (!this.match(\")\"))\n        attributes = this.parseAssignmentExpression();\n    }\n    this.context.isAssignmentTarget = previousIsAssignmentTarget;\n    if (!this.match(\")\")) {\n      if (this.match(\",\")) {\n        this.nextToken();\n      }\n      this.expect(\")\");\n    } else {\n      this.nextToken();\n    }\n    return this.finalize(node, new ImportExpression(source, attributes));\n  }\n  matchImportMeta() {\n    let match = this.matchKeyword(\"import\");\n    if (match) {\n      const state = this.scanner.saveState();\n      this.scanner.scanComments();\n      const dot = this.scanner.lex();\n      if (dot.type === 7 /* Punctuator */ && dot.value === \".\") {\n        this.scanner.scanComments();\n        const meta = this.scanner.lex();\n        match = meta.type === 3 /* Identifier */ && meta.value === \"meta\";\n        if (match) {\n          if (meta.end - meta.start !== \"meta\".length) {\n            this.tolerateUnexpectedToken(meta, Messages.InvalidEscapedReservedWord);\n          }\n        }\n      } else {\n        match = false;\n      }\n      this.scanner.restoreState(state);\n    }\n    return match;\n  }\n  parseImportMeta() {\n    const node = this.createNode();\n    const id = this.parseIdentifierName();\n    this.expect(\".\");\n    const property = this.parseIdentifierName();\n    this.context.isAssignmentTarget = false;\n    return this.finalize(node, new MetaProperty(id, property));\n  }\n  parseLeftHandSideExpressionAllowCall() {\n    const startToken = this.lookahead;\n    const maybeAsync = this.matchContextualKeyword(\"async\");\n    const previousAllowIn = this.context.allowIn;\n    this.context.allowIn = true;\n    let expr;\n    const isSuper = this.matchKeyword(\"super\");\n    if (isSuper && this.context.inFunctionBody) {\n      expr = this.createNode();\n      this.nextToken();\n      expr = this.finalize(expr, new Super());\n      if (!this.match(\"(\") && !this.match(\".\") && !this.match(\"[\")) {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n    } else {\n      expr = this.inheritCoverGrammar(this.matchKeyword(\"new\") ? this.parseNewExpression : this.parsePrimaryExpression);\n    }\n    if (isSuper && this.match(\"(\") && (!this.context.inClassConstructor || !this.context.allowSuper)) {\n      this.tolerateError(Messages.UnexpectedSuper);\n    }\n    let hasOptional = false;\n    while (true) {\n      let optional = false;\n      if (this.match(\"?.\")) {\n        optional = true;\n        hasOptional = true;\n        this.expect(\"?.\");\n      }\n      if (this.match(\"(\")) {\n        const asyncArrow = maybeAsync && startToken.lineNumber === this.lookahead.lineNumber;\n        this.context.isBindingElement = false;\n        this.context.isAssignmentTarget = false;\n        const args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments();\n        if (expr.type === \"ImportExpression\" /* ImportExpression */ && args.length !== 1) {\n          this.tolerateError(Messages.BadImportCallArity);\n        }\n        expr = this.finalize(this.startNode(startToken), new CallExpression(expr, args, optional));\n        if (asyncArrow && this.match(\"=>\")) {\n          for (let i = 0; i < args.length; ++i) {\n            this.reinterpretExpressionAsPattern(args[i]);\n          }\n          expr = {\n            type: ArrowParameterPlaceHolder,\n            params: args,\n            async: true\n          };\n        }\n      } else if (this.match(\"[\")) {\n        this.context.isBindingElement = false;\n        this.context.isAssignmentTarget = !optional;\n        this.expect(\"[\");\n        const property = this.isolateCoverGrammar(this.parseExpression);\n        this.expect(\"]\");\n        expr = this.finalize(this.startNode(startToken), new MemberExpression(true, expr, property, optional));\n      } else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n        if (optional) {\n          this.throwUnexpectedToken(this.lookahead);\n        }\n        if (hasOptional) {\n          this.throwError(Messages.InvalidTaggedTemplateOnOptionalChain);\n        }\n        const quasi = this.parseTemplateLiteral({ isTagged: true });\n        expr = this.finalize(this.startNode(startToken), new TaggedTemplateExpression(expr, quasi));\n      } else if (this.match(\".\") || optional) {\n        this.context.isBindingElement = false;\n        this.context.isAssignmentTarget = !optional;\n        if (!optional) {\n          this.expect(\".\");\n        }\n        const property = this.parseIdentifierName(true);\n        expr = this.finalize(this.startNode(startToken), new MemberExpression(false, expr, property, optional));\n      } else {\n        break;\n      }\n    }\n    this.context.allowIn = previousAllowIn;\n    if (hasOptional) {\n      return new ChainExpression(expr);\n    }\n    return expr;\n  }\n  parseSuper() {\n    const node = this.createNode();\n    this.expectKeyword(\"super\");\n    if (!this.match(\"[\") && !this.match(\".\")) {\n      this.throwUnexpectedToken(this.lookahead);\n    }\n    return this.finalize(node, new Super());\n  }\n  parseLeftHandSideExpression() {\n    assert(this.context.allowIn, \"callee of new expression always allow in keyword.\");\n    const node = this.startNode(this.lookahead);\n    let expr = this.matchKeyword(\"super\") && this.context.inFunctionBody ? this.parseSuper() : this.inheritCoverGrammar(this.matchKeyword(\"new\") ? this.parseNewExpression : this.parsePrimaryExpression);\n    let hasOptional = false;\n    while (true) {\n      let optional = false;\n      if (this.match(\"?.\")) {\n        optional = true;\n        hasOptional = true;\n        this.expect(\"?.\");\n      }\n      if (this.match(\"[\")) {\n        this.context.isBindingElement = false;\n        this.context.isAssignmentTarget = !optional;\n        this.expect(\"[\");\n        const property = this.isolateCoverGrammar(this.parseExpression);\n        this.expect(\"]\");\n        expr = this.finalize(node, new MemberExpression(true, expr, property, optional));\n      } else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n        if (optional) {\n          this.throwUnexpectedToken(this.lookahead);\n        }\n        if (hasOptional) {\n          this.throwError(Messages.InvalidTaggedTemplateOnOptionalChain);\n        }\n        const quasi = this.parseTemplateLiteral({ isTagged: true });\n        expr = this.finalize(node, new TaggedTemplateExpression(expr, quasi));\n      } else if (this.match(\".\") || optional) {\n        this.context.isBindingElement = false;\n        this.context.isAssignmentTarget = !optional;\n        if (!optional) {\n          this.expect(\".\");\n        }\n        const property = this.parseIdentifierName();\n        expr = this.finalize(node, new MemberExpression(false, expr, property, optional));\n      } else {\n        break;\n      }\n    }\n    if (hasOptional) {\n      return new ChainExpression(expr);\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-update-expressions\n  parseUpdateExpression() {\n    let expr;\n    const startToken = this.lookahead;\n    if (this.match(\"++\") || this.match(\"--\")) {\n      const node = this.startNode(startToken);\n      const token = this.nextToken();\n      expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n      if (this.context.strict && expr.type === \"Identifier\" /* Identifier */ && this.scanner.isRestrictedWord(expr.name)) {\n        this.tolerateError(Messages.StrictLHSPrefix);\n      }\n      if (!this.context.isAssignmentTarget) {\n        this.tolerateError(Messages.InvalidLHSInAssignment);\n      }\n      const prefix = true;\n      expr = this.finalize(node, new UpdateExpression(token.value, expr, prefix));\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n    } else {\n      expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n      if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) {\n        if (this.match(\"++\") || this.match(\"--\")) {\n          if (this.context.strict && expr.type === \"Identifier\" /* Identifier */ && this.scanner.isRestrictedWord(expr.name)) {\n            this.tolerateError(Messages.StrictLHSPostfix);\n          }\n          if (!this.context.isAssignmentTarget) {\n            this.tolerateError(Messages.InvalidLHSInAssignment);\n          }\n          this.context.isAssignmentTarget = false;\n          this.context.isBindingElement = false;\n          const operator = this.nextToken().value;\n          const prefix = false;\n          expr = this.finalize(this.startNode(startToken), new UpdateExpression(operator, expr, prefix));\n        }\n      }\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-unary-operators\n  parseAwaitExpression() {\n    const node = this.createNode();\n    this.nextToken();\n    const argument = this.parseUnaryExpression();\n    return this.finalize(node, new AwaitExpression(argument));\n  }\n  parseUnaryExpression() {\n    let expr;\n    if (this.match(\"+\") || this.match(\"-\") || this.match(\"~\") || this.match(\"!\") || this.matchKeyword(\"delete\") || this.matchKeyword(\"void\") || this.matchKeyword(\"typeof\")) {\n      const node = this.startNode(this.lookahead);\n      const token = this.nextToken();\n      expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n      expr = this.finalize(node, new UnaryExpression(token.value, expr));\n      if (this.context.strict && expr.operator === \"delete\" && expr.argument.type === \"Identifier\" /* Identifier */) {\n        this.tolerateError(Messages.StrictDelete);\n      }\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n    } else if ((this.context.isModule && !this.context.inFunctionBody || this.context.isAsync) && this.matchContextualKeyword(\"await\")) {\n      expr = this.parseAwaitExpression();\n    } else {\n      expr = this.parseUpdateExpression();\n    }\n    return expr;\n  }\n  parseExponentiationExpression() {\n    const startToken = this.lookahead;\n    const isLeftParenthesized = this.match(\"(\");\n    let expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n    const exponentAllowed = expr.type !== \"UnaryExpression\" /* UnaryExpression */ || isLeftParenthesized;\n    if (exponentAllowed && this.match(\"**\")) {\n      this.nextToken();\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n      const left = expr;\n      const right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n      expr = this.finalize(this.startNode(startToken), new BinaryExpression(\"**\", left, right));\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-exp-operator\n  // https://tc39.github.io/ecma262/#sec-multiplicative-operators\n  // https://tc39.github.io/ecma262/#sec-additive-operators\n  // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators\n  // https://tc39.github.io/ecma262/#sec-relational-operators\n  // https://tc39.github.io/ecma262/#sec-equality-operators\n  // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators\n  // https://tc39.github.io/ecma262/#sec-binary-logical-operators\n  binaryPrecedence(token) {\n    const op = token.value;\n    let precedence;\n    if (token.type === 7 /* Punctuator */) {\n      precedence = this.operatorPrecedence[op] || 0;\n    } else if (token.type === 4 /* Keyword */) {\n      precedence = op === \"instanceof\" || this.context.allowIn && op === \"in\" ? 12 : 0;\n    } else {\n      precedence = 0;\n    }\n    return precedence;\n  }\n  parseBinaryExpression() {\n    const startToken = this.lookahead;\n    let expr = this.inheritCoverGrammar(this.parseExponentiationExpression);\n    let allowAndOr = true;\n    let allowNullishCoalescing = true;\n    const updateNullishCoalescingRestrictions = (token2) => {\n      if (token2.value === \"&&\" || token2.value === \"||\") {\n        allowNullishCoalescing = false;\n      }\n      if (token2.value === \"??\") {\n        allowAndOr = false;\n      }\n    };\n    const token = this.lookahead;\n    let prec = this.binaryPrecedence(token);\n    if (prec > 0) {\n      updateNullishCoalescingRestrictions(token);\n      this.nextToken();\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n      const markers = [startToken, this.lookahead];\n      let left = expr;\n      let right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n      const stack = [left, token.value, right];\n      const precedences = [prec];\n      while (true) {\n        prec = this.binaryPrecedence(this.lookahead);\n        if (prec <= 0) {\n          break;\n        }\n        if (!allowAndOr && (this.lookahead.value === \"&&\" || this.lookahead.value === \"||\") || !allowNullishCoalescing && this.lookahead.value === \"??\") {\n          this.throwUnexpectedToken(this.lookahead);\n        }\n        updateNullishCoalescingRestrictions(this.lookahead);\n        while (stack.length > 2 && prec <= precedences[precedences.length - 1]) {\n          right = stack.pop();\n          const operator = stack.pop();\n          precedences.pop();\n          left = stack.pop();\n          markers.pop();\n          const marker = markers[markers.length - 1];\n          const node = this.startNode(marker, marker.lineStart);\n          const logical = operator === \"||\" || operator === \"&&\" || operator === \"??\";\n          stack.push(this.finalize(node, logical ? new LogicalExpression(operator, left, right) : new BinaryExpression(operator, left, right)));\n        }\n        stack.push(this.nextToken().value);\n        precedences.push(prec);\n        markers.push(this.lookahead);\n        stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));\n      }\n      let i = stack.length - 1;\n      expr = stack[i];\n      let lastMarker = markers.pop();\n      while (i > 1) {\n        const marker = markers.pop();\n        const lastLineStart = lastMarker && lastMarker.lineStart;\n        const node = this.startNode(marker, lastLineStart);\n        const operator = stack[i - 1];\n        const logical = operator === \"||\" || operator === \"&&\" || operator === \"??\";\n        expr = this.finalize(node, logical ? new LogicalExpression(operator, stack[i - 2], expr) : new BinaryExpression(operator, stack[i - 2], expr));\n        i -= 2;\n        lastMarker = marker;\n      }\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-conditional-operator\n  parseConditionalExpression() {\n    const startToken = this.lookahead;\n    let expr = this.inheritCoverGrammar(this.parseBinaryExpression);\n    if (this.match(\"?\")) {\n      this.nextToken();\n      const previousAllowIn = this.context.allowIn;\n      this.context.allowIn = true;\n      const consequent = this.isolateCoverGrammar(this.parseAssignmentExpression);\n      this.context.allowIn = previousAllowIn;\n      this.expect(\":\");\n      const alternate = this.isolateCoverGrammar(this.parseAssignmentExpression);\n      expr = this.finalize(this.startNode(startToken), new ConditionalExpression(expr, consequent, alternate));\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-assignment-operators\n  checkPatternParam(options, param) {\n    switch (param.type) {\n      case \"Identifier\" /* Identifier */:\n        this.validateParam(options, param, param.name);\n        break;\n      case \"RestElement\" /* RestElement */:\n        this.checkPatternParam(options, param.argument);\n        break;\n      case \"AssignmentPattern\" /* AssignmentPattern */:\n        this.checkPatternParam(options, param.left);\n        break;\n      case \"ArrayPattern\" /* ArrayPattern */:\n        for (let i = 0; i < param.elements.length; i++) {\n          if (param.elements[i] !== null) {\n            this.checkPatternParam(options, param.elements[i]);\n          }\n        }\n        break;\n      case \"ObjectPattern\" /* ObjectPattern */:\n        for (let i = 0; i < param.properties.length; i++) {\n          const property = param.properties[i];\n          this.checkPatternParam(options, property.type === \"RestElement\" /* RestElement */ ? property : property.value);\n        }\n        break;\n      default:\n        break;\n    }\n    options.simple = options.simple && param instanceof Identifier;\n  }\n  reinterpretAsCoverFormalsList(expr) {\n    let params = [expr];\n    const options = {\n      simple: true,\n      paramSet: {}\n    };\n    let asyncArrow = false;\n    switch (expr.type) {\n      case \"Identifier\" /* Identifier */:\n        break;\n      case ArrowParameterPlaceHolder:\n        params = expr.params;\n        asyncArrow = expr.async;\n        break;\n      default:\n        return null;\n    }\n    for (let i = 0; i < params.length; ++i) {\n      const param = params[i];\n      if (param.type === \"AssignmentPattern\" /* AssignmentPattern */) {\n        if (param.right.type === \"YieldExpression\" /* YieldExpression */) {\n          if (param.right.argument) {\n            this.throwUnexpectedToken(this.lookahead);\n          }\n          param.right.type = \"Identifier\" /* Identifier */;\n          param.right.name = \"yield\";\n          delete param.right.argument;\n          delete param.right.delegate;\n        }\n      } else if (asyncArrow && param.type === \"Identifier\" /* Identifier */ && param.name === \"await\") {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n      this.checkPatternParam(options, param);\n      params[i] = param;\n    }\n    if (this.context.strict || !this.context.allowYield) {\n      for (let i = 0; i < params.length; ++i) {\n        const param = params[i];\n        if (param.type === \"YieldExpression\" /* YieldExpression */) {\n          this.throwUnexpectedToken(this.lookahead);\n        }\n      }\n    }\n    if (options.hasDuplicateParameterNames) {\n      const token = this.context.strict ? options.stricted : options.firstRestricted;\n      this.throwUnexpectedToken(token, Messages.DuplicateParameter);\n    }\n    return {\n      simple: options.simple,\n      params,\n      stricted: options.stricted,\n      firstRestricted: options.firstRestricted,\n      message: options.message\n    };\n  }\n  parseAssignmentExpression() {\n    let expr;\n    if (!this.context.allowYield && this.matchKeyword(\"yield\")) {\n      expr = this.parseYieldExpression();\n    } else {\n      const startToken = this.lookahead;\n      let token = startToken;\n      expr = this.parseConditionalExpression();\n      if (token.type === 3 /* Identifier */ && token.lineNumber === this.lookahead.lineNumber && token.value === \"async\") {\n        if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword(\"yield\")) {\n          const arg = this.parsePrimaryExpression();\n          this.reinterpretExpressionAsPattern(arg);\n          expr = {\n            type: ArrowParameterPlaceHolder,\n            params: [arg],\n            async: true\n          };\n        }\n      }\n      if (expr.type === ArrowParameterPlaceHolder || this.match(\"=>\")) {\n        this.context.isAssignmentTarget = false;\n        this.context.isBindingElement = false;\n        const isAsync = expr.async;\n        const list = this.reinterpretAsCoverFormalsList(expr);\n        if (list) {\n          if (this.hasLineTerminator) {\n            this.tolerateUnexpectedToken(this.lookahead);\n          }\n          this.context.firstCoverInitializedNameError = null;\n          const previousStrict = this.context.strict;\n          const previousAllowStrictDirective = this.context.allowStrictDirective;\n          this.context.allowStrictDirective = list.simple;\n          const previousAllowYield = this.context.allowYield;\n          const previousIsAsync = this.context.isAsync;\n          this.context.allowYield = true;\n          this.context.isAsync = isAsync;\n          const node = this.startNode(startToken);\n          this.expect(\"=>\");\n          let body;\n          if (this.match(\"{\")) {\n            const previousAllowIn = this.context.allowIn;\n            this.context.allowIn = true;\n            body = this.parseFunctionSourceElements();\n            this.context.allowIn = previousAllowIn;\n          } else {\n            body = this.isolateCoverGrammar(this.parseAssignmentExpression);\n          }\n          const expression = body.type !== \"BlockStatement\" /* BlockStatement */;\n          if (this.context.strict && list.firstRestricted) {\n            this.throwUnexpectedToken(list.firstRestricted, list.message);\n          }\n          if (this.context.strict && list.stricted) {\n            this.tolerateUnexpectedToken(list.stricted, list.message);\n          }\n          expr = this.finalize(node, new ArrowFunctionExpression(list.params, body, expression, isAsync));\n          this.context.strict = previousStrict;\n          this.context.allowStrictDirective = previousAllowStrictDirective;\n          this.context.allowYield = previousAllowYield;\n          this.context.isAsync = previousIsAsync;\n        }\n      } else {\n        if (this.matchAssign()) {\n          if (!this.context.isAssignmentTarget) {\n            this.tolerateError(Messages.InvalidLHSInAssignment);\n          }\n          if (this.context.strict && expr.type === \"Identifier\" /* Identifier */) {\n            const id = expr;\n            if (this.scanner.isRestrictedWord(id.name)) {\n              this.tolerateUnexpectedToken(token, Messages.StrictLHSAssignment);\n            }\n            if (this.scanner.isStrictModeReservedWord(id.name)) {\n              this.tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n            }\n          }\n          if (!this.match(\"=\")) {\n            this.context.isAssignmentTarget = false;\n            this.context.isBindingElement = false;\n          } else {\n            this.reinterpretExpressionAsPattern(expr);\n          }\n          token = this.nextToken();\n          const operator = token.value;\n          const right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n          expr = this.finalize(this.startNode(startToken), new AssignmentExpression(operator, expr, right));\n          this.context.firstCoverInitializedNameError = null;\n        }\n      }\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-comma-operator\n  parseExpression() {\n    const startToken = this.lookahead;\n    let expr = this.isolateCoverGrammar(this.parseAssignmentExpression);\n    if (this.match(\",\")) {\n      const expressions = [];\n      expressions.push(expr);\n      while (this.lookahead.type !== 2 /* EOF */) {\n        if (!this.match(\",\")) {\n          break;\n        }\n        this.nextToken();\n        expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n      }\n      expr = this.finalize(this.startNode(startToken), new SequenceExpression(expressions));\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-block\n  parseStatementListItem() {\n    let statement;\n    this.context.isAssignmentTarget = true;\n    this.context.isBindingElement = true;\n    if (this.lookahead.type === 4 /* Keyword */) {\n      switch (this.lookahead.value) {\n        case \"export\":\n          if (!this.context.isModule) {\n            this.tolerateUnexpectedToken(this.lookahead, Messages.IllegalExportDeclaration);\n          }\n          statement = this.parseExportDeclaration();\n          break;\n        case \"import\":\n          if (this.matchImportCall()) {\n            statement = this.parseExpressionStatement();\n          } else if (this.matchImportMeta()) {\n            statement = this.parseStatement();\n          } else {\n            if (!this.context.isModule) {\n              this.tolerateUnexpectedToken(this.lookahead, Messages.IllegalImportDeclaration);\n            }\n            statement = this.parseImportDeclaration();\n          }\n          break;\n        case \"const\":\n          statement = this.parseLexicalDeclaration({ inFor: false });\n          break;\n        case \"function\":\n          statement = this.parseFunctionDeclaration();\n          break;\n        case \"class\":\n          statement = this.parseClassDeclaration();\n          break;\n        case \"let\":\n          statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement();\n          break;\n        default:\n          statement = this.parseStatement();\n          break;\n      }\n    } else {\n      statement = this.parseStatement();\n    }\n    return statement;\n  }\n  parseBlock() {\n    const node = this.createNode();\n    this.expect(\"{\");\n    const block = [];\n    while (true) {\n      if (this.match(\"}\")) {\n        break;\n      }\n      block.push(this.parseStatementListItem());\n    }\n    this.expect(\"}\");\n    return this.finalize(node, new BlockStatement(block));\n  }\n  // https://tc39.github.io/ecma262/#sec-let-and-const-declarations\n  parseLexicalBinding(kind, options) {\n    const node = this.createNode();\n    const params = [];\n    const id = this.parsePattern(params, kind);\n    if (this.context.strict && id.type === \"Identifier\" /* Identifier */) {\n      if (this.scanner.isRestrictedWord(id.name)) {\n        this.tolerateError(Messages.StrictVarName);\n      }\n    }\n    let init = null;\n    if (kind === \"const\") {\n      if (!this.matchKeyword(\"in\") && !this.matchContextualKeyword(\"of\")) {\n        if (this.match(\"=\")) {\n          this.nextToken();\n          init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n        } else {\n          this.throwError(Messages.DeclarationMissingInitializer, \"const\");\n        }\n      }\n    } else if (!options.inFor && id.type !== \"Identifier\" /* Identifier */ || this.match(\"=\")) {\n      this.expect(\"=\");\n      init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n    }\n    return this.finalize(node, new VariableDeclarator(id, init));\n  }\n  parseBindingList(kind, options) {\n    const list = [this.parseLexicalBinding(kind, options)];\n    while (this.match(\",\")) {\n      this.nextToken();\n      list.push(this.parseLexicalBinding(kind, options));\n    }\n    return list;\n  }\n  isLexicalDeclaration() {\n    const state = this.scanner.saveState();\n    this.scanner.scanComments();\n    const next = this.scanner.lex();\n    this.scanner.restoreState(state);\n    return next.type === 3 /* Identifier */ || next.type === 7 /* Punctuator */ && next.value === \"[\" || next.type === 7 /* Punctuator */ && next.value === \"{\" || next.type === 4 /* Keyword */ && next.value === \"let\" || next.type === 4 /* Keyword */ && next.value === \"yield\";\n  }\n  parseLexicalDeclaration(options) {\n    const node = this.createNode();\n    const kind = this.nextToken().value;\n    assert(kind === \"let\" || kind === \"const\", \"Lexical declaration must be either let or const\");\n    const declarations = this.parseBindingList(kind, options);\n    this.consumeSemicolon();\n    return this.finalize(node, new VariableDeclaration(declarations, kind));\n  }\n  /**\n   * This function checks to see if a property is initialized in a Class\n   * e.g.\n   * publicProp = 123;\n   * @returns {Boolean}\n   */\n  isInitializedProperty() {\n    let state = this.scanner.saveState();\n    this.scanner.scanComments();\n    let next = this.scanner.lex();\n    this.scanner.restoreState(state);\n    return this.lookahead.type === 3 && next.value === \"=\";\n  }\n  /**\n   * This function checks to see if a property is declared in a Class\n   * e.g.\n   * publicProp;\n   * @returns {Boolean}\n   */\n  isDeclaredProperty() {\n    let state = this.scanner.saveState();\n    this.scanner.scanComments();\n    let next = this.scanner.lex();\n    this.scanner.restoreState(state);\n    return this.lookahead.type === 3 && next.value === \";\" || this.lookahead.type === 3 && next.lineNumber !== this.startMarker.line;\n  }\n  // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns\n  parseBindingRestElement(params, kind) {\n    const node = this.createNode();\n    this.expect(\"...\");\n    const arg = this.parsePattern(params, kind);\n    return this.finalize(node, new RestElement(arg));\n  }\n  parseArrayPattern(params, kind) {\n    const node = this.createNode();\n    this.expect(\"[\");\n    const elements = [];\n    while (!this.match(\"]\")) {\n      if (this.match(\",\")) {\n        this.nextToken();\n        elements.push(null);\n      } else {\n        if (this.match(\"...\")) {\n          elements.push(this.parseBindingRestElement(params, kind));\n          break;\n        } else {\n          elements.push(this.parsePatternWithDefault(params, kind));\n        }\n        if (!this.match(\"]\")) {\n          this.expect(\",\");\n        }\n      }\n    }\n    this.expect(\"]\");\n    return this.finalize(node, new ArrayPattern(elements));\n  }\n  parsePropertyPattern(params, kind) {\n    const node = this.createNode();\n    let computed = false;\n    let shorthand = false;\n    const method = false;\n    let key;\n    let value;\n    if (this.lookahead.type === 3 /* Identifier */) {\n      const keyToken = this.lookahead;\n      key = this.parseVariableIdentifier();\n      const init = this.finalize(node, new Identifier(keyToken.value));\n      if (this.match(\"=\")) {\n        params.push(keyToken);\n        shorthand = true;\n        this.nextToken();\n        const expr = this.parseAssignmentExpression();\n        value = this.finalize(this.startNode(keyToken), new AssignmentPattern(init, expr));\n      } else if (!this.match(\":\")) {\n        params.push(keyToken);\n        shorthand = true;\n        value = init;\n      } else {\n        this.expect(\":\");\n        value = this.parsePatternWithDefault(params, kind);\n      }\n    } else {\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey();\n      this.expect(\":\");\n      value = this.parsePatternWithDefault(params, kind);\n    }\n    return this.finalize(node, new Property(\"init\", key, computed, value, method, shorthand));\n  }\n  parseRestProperty(params) {\n    const node = this.createNode();\n    this.expect(\"...\");\n    const arg = this.parsePattern(params);\n    if (this.match(\"=\")) {\n      this.throwError(Messages.DefaultRestProperty);\n    }\n    if (!this.match(\"}\")) {\n      this.throwError(Messages.PropertyAfterRestProperty);\n    }\n    return this.finalize(node, new RestElement(arg));\n  }\n  parseObjectPattern(params, kind) {\n    const node = this.createNode();\n    const properties = [];\n    this.expect(\"{\");\n    while (!this.match(\"}\")) {\n      properties.push(this.match(\"...\") ? this.parseRestProperty(params) : this.parsePropertyPattern(params, kind));\n      if (!this.match(\"}\")) {\n        this.expect(\",\");\n      }\n    }\n    this.expect(\"}\");\n    return this.finalize(node, new ObjectPattern(properties));\n  }\n  parsePattern(params, kind) {\n    let pattern;\n    if (this.match(\"[\")) {\n      pattern = this.parseArrayPattern(params, kind);\n    } else if (this.match(\"{\")) {\n      pattern = this.parseObjectPattern(params, kind);\n    } else {\n      if (this.matchKeyword(\"let\") && (kind === \"const\" || kind === \"let\")) {\n        this.tolerateUnexpectedToken(this.lookahead, Messages.LetInLexicalBinding);\n      }\n      params.push(this.lookahead);\n      pattern = this.parseVariableIdentifier(kind);\n    }\n    return pattern;\n  }\n  parsePatternWithDefault(params, kind) {\n    const startToken = this.lookahead;\n    let pattern = this.parsePattern(params, kind);\n    if (this.match(\"=\")) {\n      this.nextToken();\n      const previousAllowYield = this.context.allowYield;\n      this.context.allowYield = true;\n      const right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n      this.context.allowYield = previousAllowYield;\n      pattern = this.finalize(this.startNode(startToken), new AssignmentPattern(pattern, right));\n    }\n    return pattern;\n  }\n  // https://tc39.github.io/ecma262/#sec-variable-statement\n  parseVariableIdentifier(kind) {\n    const node = this.createNode();\n    const token = this.nextToken();\n    if (token.type === 4 /* Keyword */ && token.value === \"yield\") {\n      if (this.context.strict) {\n        this.tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n      } else if (!this.context.allowYield) {\n        this.throwUnexpectedToken(token);\n      }\n    } else if (token.type !== 3 /* Identifier */) {\n      if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) {\n        this.tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n      } else {\n        if (this.context.strict || token.value !== \"let\" || kind !== \"var\") {\n          this.throwUnexpectedToken(token);\n        }\n      }\n    } else if ((this.context.isModule || this.context.isAsync) && token.type === 3 /* Identifier */ && token.value === \"await\") {\n      this.tolerateUnexpectedToken(token);\n    }\n    return this.finalize(node, new Identifier(token.value));\n  }\n  parseVariableDeclaration(options) {\n    const node = this.createNode();\n    const params = [];\n    const id = this.parsePattern(params, \"var\");\n    if (this.context.strict && id.type === \"Identifier\" /* Identifier */) {\n      if (this.scanner.isRestrictedWord(id.name)) {\n        this.tolerateError(Messages.StrictVarName);\n      }\n    }\n    let init = null;\n    if (this.match(\"=\")) {\n      this.nextToken();\n      init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n    } else if (id.type !== \"Identifier\" /* Identifier */ && !options.inFor) {\n      this.expect(\"=\");\n    }\n    return this.finalize(node, new VariableDeclarator(id, init));\n  }\n  parseVariableDeclarationList(options) {\n    const opt = { inFor: options.inFor };\n    const list = [];\n    list.push(this.parseVariableDeclaration(opt));\n    while (this.match(\",\")) {\n      this.nextToken();\n      list.push(this.parseVariableDeclaration(opt));\n    }\n    return list;\n  }\n  parseVariableStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"var\");\n    const declarations = this.parseVariableDeclarationList({ inFor: false });\n    this.consumeSemicolon();\n    return this.finalize(node, new VariableDeclaration(declarations, \"var\"));\n  }\n  // https://tc39.github.io/ecma262/#sec-empty-statement\n  parseEmptyStatement() {\n    const node = this.createNode();\n    this.expect(\";\");\n    return this.finalize(node, new EmptyStatement());\n  }\n  // https://tc39.github.io/ecma262/#sec-expression-statement\n  parseExpressionStatement() {\n    const node = this.createNode();\n    const expr = this.parseExpression();\n    this.consumeSemicolon();\n    return this.finalize(node, new ExpressionStatement(expr));\n  }\n  // https://tc39.github.io/ecma262/#sec-if-statement\n  parseIfClause() {\n    if (this.context.strict && this.matchKeyword(\"function\")) {\n      this.tolerateError(Messages.StrictFunction);\n    }\n    return this.parseStatement();\n  }\n  parseIfStatement() {\n    const node = this.createNode();\n    let consequent;\n    let alternate = null;\n    this.expectKeyword(\"if\");\n    this.expect(\"(\");\n    const test = this.parseExpression();\n    if (!this.match(\")\") && this.config.tolerant) {\n      this.tolerateUnexpectedToken(this.nextToken());\n      consequent = this.finalize(this.createNode(), new EmptyStatement());\n    } else {\n      this.expect(\")\");\n      consequent = this.parseIfClause();\n      if (this.matchKeyword(\"else\")) {\n        this.nextToken();\n        alternate = this.parseIfClause();\n      }\n    }\n    return this.finalize(node, new IfStatement(test, consequent, alternate));\n  }\n  // https://tc39.github.io/ecma262/#sec-do-while-statement\n  parseDoWhileStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"do\");\n    this.tolerateInvalidLoopStatement();\n    const previousInIteration = this.context.inIteration;\n    this.context.inIteration = true;\n    const body = this.parseStatement();\n    this.context.inIteration = previousInIteration;\n    this.expectKeyword(\"while\");\n    this.expect(\"(\");\n    const test = this.parseExpression();\n    if (!this.match(\")\") && this.config.tolerant) {\n      this.tolerateUnexpectedToken(this.nextToken());\n    } else {\n      this.expect(\")\");\n      if (this.match(\";\")) {\n        this.nextToken();\n      }\n    }\n    return this.finalize(node, new DoWhileStatement(body, test));\n  }\n  // https://tc39.github.io/ecma262/#sec-while-statement\n  parseWhileStatement() {\n    const node = this.createNode();\n    let body;\n    this.expectKeyword(\"while\");\n    this.expect(\"(\");\n    const test = this.parseExpression();\n    if (!this.match(\")\") && this.config.tolerant) {\n      this.tolerateUnexpectedToken(this.nextToken());\n      body = this.finalize(this.createNode(), new EmptyStatement());\n    } else {\n      this.expect(\")\");\n      const previousInIteration = this.context.inIteration;\n      this.context.inIteration = true;\n      body = this.parseStatement();\n      this.context.inIteration = previousInIteration;\n    }\n    return this.finalize(node, new WhileStatement(test, body));\n  }\n  // https://tc39.github.io/ecma262/#sec-for-statement\n  // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements\n  parseForStatement() {\n    let init = null;\n    let test = null;\n    let update = null;\n    let forIn = true;\n    let left, right;\n    let _await = false;\n    const node = this.createNode();\n    this.expectKeyword(\"for\");\n    if (this.matchContextualKeyword(\"await\")) {\n      if (!this.context.isAsync) {\n        this.tolerateUnexpectedToken(this.lookahead);\n      }\n      _await = true;\n      this.nextToken();\n    }\n    this.expect(\"(\");\n    if (this.match(\";\")) {\n      this.nextToken();\n    } else {\n      if (this.matchKeyword(\"var\")) {\n        init = this.createNode();\n        this.nextToken();\n        const previousAllowIn = this.context.allowIn;\n        this.context.allowIn = false;\n        const declarations = this.parseVariableDeclarationList({ inFor: true });\n        this.context.allowIn = previousAllowIn;\n        if (!_await && declarations.length === 1 && this.matchKeyword(\"in\")) {\n          const decl = declarations[0];\n          if (decl.init && (decl.id.type === \"ArrayPattern\" /* ArrayPattern */ || decl.id.type === \"ObjectPattern\" /* ObjectPattern */ || this.context.strict)) {\n            this.tolerateError(Messages.ForInOfLoopInitializer, \"for-in\");\n          }\n          init = this.finalize(init, new VariableDeclaration(declarations, \"var\"));\n          this.nextToken();\n          left = init;\n          right = this.parseExpression();\n          init = null;\n        } else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword(\"of\")) {\n          init = this.finalize(init, new VariableDeclaration(declarations, \"var\"));\n          this.nextToken();\n          left = init;\n          right = this.parseAssignmentExpression();\n          init = null;\n          forIn = false;\n        } else {\n          init = this.finalize(init, new VariableDeclaration(declarations, \"var\"));\n          this.expect(\";\");\n        }\n      } else if (this.matchKeyword(\"const\") || this.matchKeyword(\"let\")) {\n        init = this.createNode();\n        const kind = this.nextToken().value;\n        if (!this.context.strict && this.lookahead.value === \"in\") {\n          init = this.finalize(init, new Identifier(kind));\n          this.nextToken();\n          left = init;\n          right = this.parseExpression();\n          init = null;\n        } else {\n          const previousAllowIn = this.context.allowIn;\n          this.context.allowIn = false;\n          const declarations = this.parseBindingList(kind, { inFor: true });\n          this.context.allowIn = previousAllowIn;\n          if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword(\"in\")) {\n            init = this.finalize(init, new VariableDeclaration(declarations, kind));\n            this.nextToken();\n            left = init;\n            right = this.parseExpression();\n            init = null;\n          } else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword(\"of\")) {\n            init = this.finalize(init, new VariableDeclaration(declarations, kind));\n            this.nextToken();\n            left = init;\n            right = this.parseAssignmentExpression();\n            init = null;\n            forIn = false;\n          } else {\n            this.consumeSemicolon();\n            init = this.finalize(init, new VariableDeclaration(declarations, kind));\n          }\n        }\n      } else {\n        const initStartToken = this.lookahead;\n        const previousIsBindingElement = this.context.isBindingElement;\n        const previousIsAssignmentTarget = this.context.isAssignmentTarget;\n        const previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n        const previousAllowIn = this.context.allowIn;\n        this.context.allowIn = false;\n        init = this.inheritCoverGrammar(this.parseAssignmentExpression);\n        this.context.allowIn = previousAllowIn;\n        if (this.matchKeyword(\"in\")) {\n          if (!this.context.isAssignmentTarget || init.type === \"AssignmentExpression\" /* AssignmentExpression */) {\n            this.tolerateError(Messages.InvalidLHSInForIn);\n          }\n          this.nextToken();\n          this.reinterpretExpressionAsPattern(init);\n          left = init;\n          right = this.parseExpression();\n          init = null;\n        } else if (this.matchContextualKeyword(\"of\")) {\n          if (!this.context.isAssignmentTarget || init.type === \"AssignmentExpression\" /* AssignmentExpression */) {\n            this.tolerateError(Messages.InvalidLHSInForLoop);\n          }\n          this.nextToken();\n          this.reinterpretExpressionAsPattern(init);\n          left = init;\n          right = this.parseAssignmentExpression();\n          init = null;\n          forIn = false;\n        } else {\n          this.context.isBindingElement = previousIsBindingElement;\n          this.context.isAssignmentTarget = previousIsAssignmentTarget;\n          this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;\n          if (this.match(\",\")) {\n            const initSeq = [init];\n            while (this.match(\",\")) {\n              this.nextToken();\n              initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n            }\n            init = this.finalize(this.startNode(initStartToken), new SequenceExpression(initSeq));\n          }\n          this.expect(\";\");\n        }\n      }\n    }\n    if (typeof left === \"undefined\") {\n      if (!this.match(\";\")) {\n        test = this.isolateCoverGrammar(this.parseExpression);\n      }\n      this.expect(\";\");\n      if (!this.match(\")\")) {\n        update = this.isolateCoverGrammar(this.parseExpression);\n      }\n    }\n    let body;\n    if (!this.match(\")\") && this.config.tolerant) {\n      this.tolerateUnexpectedToken(this.nextToken());\n      body = this.finalize(this.createNode(), new EmptyStatement());\n    } else {\n      this.expect(\")\");\n      this.tolerateInvalidLoopStatement();\n      const previousInIteration = this.context.inIteration;\n      this.context.inIteration = true;\n      body = this.isolateCoverGrammar(this.parseStatement);\n      this.context.inIteration = previousInIteration;\n    }\n    return typeof left === \"undefined\" ? this.finalize(node, new ForStatement(init, test, update, body)) : forIn ? this.finalize(node, new ForInStatement(left, right, body)) : this.finalize(node, new ForOfStatement(left, right, body, _await));\n  }\n  // https://tc39.github.io/ecma262/#sec-continue-statement\n  parseContinueStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"continue\");\n    let label = null;\n    if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n      const id = this.parseVariableIdentifier();\n      label = id;\n      const key = \"$\" + id.name;\n      if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n        this.throwError(Messages.UnknownLabel, id.name);\n      }\n    }\n    this.consumeSemicolon();\n    if (label === null && !this.context.inIteration) {\n      this.throwError(Messages.IllegalContinue);\n    }\n    return this.finalize(node, new ContinueStatement(label));\n  }\n  // https://tc39.github.io/ecma262/#sec-break-statement\n  parseBreakStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"break\");\n    let label = null;\n    if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n      const id = this.parseVariableIdentifier();\n      const key = \"$\" + id.name;\n      if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n        this.throwError(Messages.UnknownLabel, id.name);\n      }\n      label = id;\n    }\n    this.consumeSemicolon();\n    if (label === null && !this.context.inIteration && !this.context.inSwitch) {\n      this.throwError(Messages.IllegalBreak);\n    }\n    return this.finalize(node, new BreakStatement(label));\n  }\n  // https://tc39.github.io/ecma262/#sec-return-statement\n  parseReturnStatement() {\n    if (!this.context.inFunctionBody) {\n      this.tolerateError(Messages.IllegalReturn);\n    }\n    const node = this.createNode();\n    this.expectKeyword(\"return\");\n    const hasArgument = !this.match(\";\") && !this.match(\"}\") && !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */ || this.lookahead.type === 8 /* StringLiteral */ || this.lookahead.type === 10 /* Template */;\n    const argument = hasArgument ? this.parseExpression() : null;\n    this.consumeSemicolon();\n    return this.finalize(node, new ReturnStatement(argument));\n  }\n  // https://tc39.github.io/ecma262/#sec-with-statement\n  parseWithStatement() {\n    if (this.context.strict) {\n      this.tolerateError(Messages.StrictModeWith);\n    }\n    const node = this.createNode();\n    let body;\n    this.expectKeyword(\"with\");\n    this.expect(\"(\");\n    const object = this.parseExpression();\n    if (!this.match(\")\") && this.config.tolerant) {\n      this.tolerateUnexpectedToken(this.nextToken());\n      body = this.finalize(this.createNode(), new EmptyStatement());\n    } else {\n      this.expect(\")\");\n      body = this.parseStatement();\n    }\n    return this.finalize(node, new WithStatement(object, body));\n  }\n  // https://tc39.github.io/ecma262/#sec-switch-statement\n  parseSwitchCase() {\n    const node = this.createNode();\n    let test;\n    if (this.matchKeyword(\"default\")) {\n      this.nextToken();\n      test = null;\n    } else {\n      this.expectKeyword(\"case\");\n      test = this.parseExpression();\n    }\n    this.expect(\":\");\n    const consequent = [];\n    while (true) {\n      if (this.match(\"}\") || this.matchKeyword(\"default\") || this.matchKeyword(\"case\")) {\n        break;\n      }\n      consequent.push(this.parseStatementListItem());\n    }\n    return this.finalize(node, new SwitchCase(test, consequent));\n  }\n  parseSwitchStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"switch\");\n    this.expect(\"(\");\n    const discriminant = this.parseExpression();\n    this.expect(\")\");\n    const previousInSwitch = this.context.inSwitch;\n    this.context.inSwitch = true;\n    const cases = [];\n    let defaultFound = false;\n    this.expect(\"{\");\n    while (true) {\n      if (this.match(\"}\")) {\n        break;\n      }\n      const clause = this.parseSwitchCase();\n      if (clause.test === null) {\n        if (defaultFound) {\n          this.throwError(Messages.MultipleDefaultsInSwitch);\n        }\n        defaultFound = true;\n      }\n      cases.push(clause);\n    }\n    this.expect(\"}\");\n    this.context.inSwitch = previousInSwitch;\n    return this.finalize(node, new SwitchStatement(discriminant, cases));\n  }\n  // https://tc39.github.io/ecma262/#sec-labelled-statements\n  parseLabelledStatement() {\n    const node = this.createNode();\n    const expr = this.parseExpression();\n    let statement;\n    if (expr.type === \"Identifier\" /* Identifier */ && this.match(\":\")) {\n      this.nextToken();\n      const id = expr;\n      const key = \"$\" + id.name;\n      if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n        this.throwError(Messages.Redeclaration, \"Label\", id.name);\n      }\n      this.context.labelSet[key] = true;\n      let body;\n      if (this.matchKeyword(\"class\")) {\n        this.tolerateUnexpectedToken(this.lookahead);\n        body = this.parseClassDeclaration();\n      } else if (this.matchKeyword(\"function\")) {\n        const token = this.lookahead;\n        const declaration = this.parseFunctionDeclaration();\n        if (this.context.strict) {\n          this.tolerateUnexpectedToken(token, Messages.StrictFunction);\n        } else if (declaration.generator) {\n          this.tolerateUnexpectedToken(token, Messages.GeneratorInLegacyContext);\n        }\n        body = declaration;\n      } else {\n        body = this.parseStatement();\n      }\n      delete this.context.labelSet[key];\n      statement = new LabeledStatement(id, body);\n    } else {\n      this.consumeSemicolon();\n      statement = new ExpressionStatement(expr);\n    }\n    return this.finalize(node, statement);\n  }\n  // https://tc39.github.io/ecma262/#sec-throw-statement\n  parseThrowStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"throw\");\n    if (this.hasLineTerminator) {\n      this.throwError(Messages.NewlineAfterThrow);\n    }\n    const argument = this.parseExpression();\n    this.consumeSemicolon();\n    return this.finalize(node, new ThrowStatement(argument));\n  }\n  // https://tc39.github.io/ecma262/#sec-try-statement\n  parseCatchClause() {\n    const node = this.createNode();\n    this.expectKeyword(\"catch\");\n    let param = null;\n    if (this.match(\"(\")) {\n      this.expect(\"(\");\n      if (this.match(\")\")) {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n      const params = [];\n      param = this.parsePattern(params);\n      const paramMap = {};\n      for (let i = 0; i < params.length; i++) {\n        const key = \"$\" + params[i].value;\n        if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n          this.tolerateError(Messages.DuplicateBinding, params[i].value);\n        }\n        paramMap[key] = true;\n      }\n      if (this.context.strict && param.type === \"Identifier\" /* Identifier */) {\n        if (this.scanner.isRestrictedWord(param.name)) {\n          this.tolerateError(Messages.StrictCatchVariable);\n        }\n      }\n      this.expect(\")\");\n    }\n    const body = this.parseBlock();\n    return this.finalize(node, new CatchClause(param, body));\n  }\n  parseFinallyClause() {\n    this.expectKeyword(\"finally\");\n    return this.parseBlock();\n  }\n  parseTryStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"try\");\n    const block = this.parseBlock();\n    const handler = this.matchKeyword(\"catch\") ? this.parseCatchClause() : null;\n    const finalizer = this.matchKeyword(\"finally\") ? this.parseFinallyClause() : null;\n    if (!handler && !finalizer) {\n      this.throwError(Messages.NoCatchOrFinally);\n    }\n    return this.finalize(node, new TryStatement(block, handler, finalizer));\n  }\n  // https://tc39.github.io/ecma262/#sec-debugger-statement\n  parseDebuggerStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"debugger\");\n    this.consumeSemicolon();\n    return this.finalize(node, new DebuggerStatement());\n  }\n  // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations\n  parseStatement() {\n    let statement;\n    switch (this.lookahead.type) {\n      case 1 /* BooleanLiteral */:\n      case 5 /* NullLiteral */:\n      case 6 /* NumericLiteral */:\n      case 8 /* StringLiteral */:\n      case 10 /* Template */:\n      case 9 /* RegularExpression */:\n        statement = this.parseExpressionStatement();\n        break;\n      case 7 /* Punctuator */:\n        const value = this.lookahead.value;\n        if (value === \"{\") {\n          statement = this.parseBlock();\n        } else if (value === \"(\") {\n          statement = this.parseExpressionStatement();\n        } else if (value === \";\") {\n          statement = this.parseEmptyStatement();\n        } else {\n          statement = this.parseExpressionStatement();\n        }\n        break;\n      case 3 /* Identifier */:\n        statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement();\n        break;\n      case 4 /* Keyword */:\n        switch (this.lookahead.value) {\n          case \"break\":\n            statement = this.parseBreakStatement();\n            break;\n          case \"continue\":\n            statement = this.parseContinueStatement();\n            break;\n          case \"debugger\":\n            statement = this.parseDebuggerStatement();\n            break;\n          case \"do\":\n            statement = this.parseDoWhileStatement();\n            break;\n          case \"for\":\n            statement = this.parseForStatement();\n            break;\n          case \"function\":\n            statement = this.parseFunctionDeclaration();\n            break;\n          case \"if\":\n            statement = this.parseIfStatement();\n            break;\n          case \"return\":\n            statement = this.parseReturnStatement();\n            break;\n          case \"switch\":\n            statement = this.parseSwitchStatement();\n            break;\n          case \"throw\":\n            statement = this.parseThrowStatement();\n            break;\n          case \"try\":\n            statement = this.parseTryStatement();\n            break;\n          case \"var\":\n            statement = this.parseVariableStatement();\n            break;\n          case \"while\":\n            statement = this.parseWhileStatement();\n            break;\n          case \"with\":\n            statement = this.parseWithStatement();\n            break;\n          default:\n            statement = this.parseExpressionStatement();\n            break;\n        }\n        break;\n      default:\n        statement = this.throwUnexpectedToken(this.lookahead);\n    }\n    return statement;\n  }\n  // https://tc39.github.io/ecma262/#sec-function-definitions\n  parseFunctionSourceElements() {\n    const node = this.createNode();\n    this.expect(\"{\");\n    const body = this.parseDirectivePrologues();\n    const previousLabelSet = this.context.labelSet;\n    const previousInIteration = this.context.inIteration;\n    const previousInSwitch = this.context.inSwitch;\n    const previousInFunctionBody = this.context.inFunctionBody;\n    this.context.labelSet = {};\n    this.context.inIteration = false;\n    this.context.inSwitch = false;\n    this.context.inFunctionBody = true;\n    while (this.lookahead.type !== 2 /* EOF */) {\n      if (this.match(\"}\")) {\n        break;\n      }\n      body.push(this.parseStatementListItem());\n    }\n    this.expect(\"}\");\n    this.context.labelSet = previousLabelSet;\n    this.context.inIteration = previousInIteration;\n    this.context.inSwitch = previousInSwitch;\n    this.context.inFunctionBody = previousInFunctionBody;\n    return this.finalize(node, new BlockStatement(body));\n  }\n  validateParam(options, param, name) {\n    const key = \"$\" + name;\n    if (this.context.strict) {\n      if (this.scanner.isRestrictedWord(name)) {\n        options.stricted = param;\n        options.message = Messages.StrictParamName;\n      }\n      if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n        options.stricted = param;\n        options.hasDuplicateParameterNames = true;\n      }\n    } else if (!options.firstRestricted) {\n      if (this.scanner.isRestrictedWord(name)) {\n        options.firstRestricted = param;\n        options.message = Messages.StrictParamName;\n      } else if (this.scanner.isStrictModeReservedWord(name)) {\n        options.firstRestricted = param;\n        options.message = Messages.StrictReservedWord;\n      } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n        options.stricted = param;\n        options.hasDuplicateParameterNames = true;\n      }\n    }\n    if (typeof Object.defineProperty === \"function\") {\n      Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true });\n    } else {\n      options.paramSet[key] = true;\n    }\n  }\n  parseRestElement(params) {\n    const node = this.createNode();\n    this.expect(\"...\");\n    const arg = this.parsePattern(params);\n    if (this.match(\"=\")) {\n      this.throwError(Messages.DefaultRestParameter);\n    }\n    if (!this.match(\")\")) {\n      this.throwError(Messages.ParameterAfterRestParameter);\n    }\n    return this.finalize(node, new RestElement(arg));\n  }\n  parseFormalParameter(options) {\n    const params = [];\n    const param = this.match(\"...\") ? this.parseRestElement(params) : this.parsePatternWithDefault(params);\n    for (let i = 0; i < params.length; i++) {\n      this.validateParam(options, params[i], params[i].value);\n    }\n    options.simple = options.simple && param instanceof Identifier;\n    options.params.push(param);\n  }\n  parseFormalParameters(firstRestricted) {\n    const options = {\n      simple: true,\n      hasDuplicateParameterNames: false,\n      params: [],\n      firstRestricted\n    };\n    this.expect(\"(\");\n    if (!this.match(\")\")) {\n      options.paramSet = {};\n      while (this.lookahead.type !== 2 /* EOF */) {\n        this.parseFormalParameter(options);\n        if (this.match(\")\")) {\n          break;\n        }\n        this.expect(\",\");\n        if (this.match(\")\")) {\n          break;\n        }\n      }\n    }\n    this.expect(\")\");\n    if (options.hasDuplicateParameterNames) {\n      if (this.context.strict || this.context.isAsync || !options.simple) {\n        this.throwError(Messages.DuplicateParameter);\n      }\n    }\n    return {\n      simple: options.simple,\n      params: options.params,\n      stricted: options.stricted,\n      firstRestricted: options.firstRestricted,\n      message: options.message\n    };\n  }\n  matchAsyncFunction() {\n    let match = this.matchContextualKeyword(\"async\");\n    if (match) {\n      const state = this.scanner.saveState();\n      this.scanner.scanComments();\n      const next = this.scanner.lex();\n      this.scanner.restoreState(state);\n      match = state.lineNumber === next.lineNumber && next.type === 4 /* Keyword */ && next.value === \"function\";\n    }\n    return match;\n  }\n  parseFunctionDeclaration(identifierIsOptional) {\n    const node = this.createNode();\n    const isAsync = this.matchContextualKeyword(\"async\");\n    if (isAsync) {\n      if (this.context.inIteration) {\n        this.tolerateError(Messages.AsyncFunctionInSingleStatementContext);\n      }\n      this.nextToken();\n    }\n    this.expectKeyword(\"function\");\n    const isGenerator = this.match(\"*\");\n    if (isGenerator) {\n      this.nextToken();\n    }\n    let message;\n    let id = null;\n    let firstRestricted = null;\n    if (!identifierIsOptional || !this.match(\"(\")) {\n      const token = this.lookahead;\n      id = this.parseVariableIdentifier();\n      if (this.context.strict) {\n        if (this.scanner.isRestrictedWord(token.value)) {\n          this.tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n        }\n      } else {\n        if (this.scanner.isRestrictedWord(token.value)) {\n          firstRestricted = token;\n          message = Messages.StrictFunctionName;\n        } else if (this.scanner.isStrictModeReservedWord(token.value)) {\n          firstRestricted = token;\n          message = Messages.StrictReservedWord;\n        }\n      }\n    }\n    const previousIsAsync = this.context.isAsync;\n    const previousAllowYield = this.context.allowYield;\n    this.context.isAsync = isAsync;\n    this.context.allowYield = !isGenerator;\n    const formalParameters = this.parseFormalParameters(firstRestricted);\n    const params = formalParameters.params;\n    const stricted = formalParameters.stricted;\n    firstRestricted = formalParameters.firstRestricted;\n    if (formalParameters.message) {\n      message = formalParameters.message;\n    }\n    const previousStrict = this.context.strict;\n    const previousAllowStrictDirective = this.context.allowStrictDirective;\n    this.context.allowStrictDirective = formalParameters.simple;\n    const body = this.parseFunctionSourceElements();\n    if (this.context.strict && firstRestricted) {\n      this.throwUnexpectedToken(firstRestricted, message);\n    }\n    if (this.context.strict && stricted) {\n      this.tolerateUnexpectedToken(stricted, message);\n    }\n    this.context.strict = previousStrict;\n    this.context.allowStrictDirective = previousAllowStrictDirective;\n    this.context.isAsync = previousIsAsync;\n    this.context.allowYield = previousAllowYield;\n    return isAsync ? this.finalize(node, new AsyncFunctionDeclaration(id, params, body, isGenerator)) : this.finalize(node, new FunctionDeclaration(id, params, body, isGenerator));\n  }\n  parseFunctionExpression() {\n    const node = this.createNode();\n    const isAsync = this.matchContextualKeyword(\"async\");\n    if (isAsync) {\n      this.nextToken();\n    }\n    this.expectKeyword(\"function\");\n    const isGenerator = this.match(\"*\");\n    if (isGenerator) {\n      this.nextToken();\n    }\n    let message;\n    let id = null;\n    let firstRestricted;\n    const previousIsAsync = this.context.isAsync;\n    const previousAllowYield = this.context.allowYield;\n    this.context.isAsync = isAsync;\n    this.context.allowYield = !isGenerator;\n    if (!this.match(\"(\")) {\n      const token = this.lookahead;\n      id = !this.context.strict && !isGenerator && this.matchKeyword(\"yield\") ? this.parseIdentifierName() : this.parseVariableIdentifier();\n      if (this.context.strict) {\n        if (this.scanner.isRestrictedWord(token.value)) {\n          this.tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n        }\n      } else {\n        if (this.scanner.isRestrictedWord(token.value)) {\n          firstRestricted = token;\n          message = Messages.StrictFunctionName;\n        } else if (this.scanner.isStrictModeReservedWord(token.value)) {\n          firstRestricted = token;\n          message = Messages.StrictReservedWord;\n        }\n      }\n    }\n    const formalParameters = this.parseFormalParameters(firstRestricted);\n    const params = formalParameters.params;\n    const stricted = formalParameters.stricted;\n    firstRestricted = formalParameters.firstRestricted;\n    if (formalParameters.message) {\n      message = formalParameters.message;\n    }\n    const previousStrict = this.context.strict;\n    const previousAllowStrictDirective = this.context.allowStrictDirective;\n    this.context.allowStrictDirective = formalParameters.simple;\n    const body = this.parseFunctionSourceElements();\n    if (this.context.strict && firstRestricted) {\n      this.throwUnexpectedToken(firstRestricted, message);\n    }\n    if (this.context.strict && stricted) {\n      this.tolerateUnexpectedToken(stricted, message);\n    }\n    this.context.strict = previousStrict;\n    this.context.allowStrictDirective = previousAllowStrictDirective;\n    this.context.isAsync = previousIsAsync;\n    this.context.allowYield = previousAllowYield;\n    return this.finalize(node, new FunctionExpression(id, params, body, isGenerator, isAsync));\n  }\n  // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive\n  parseDirective() {\n    const token = this.lookahead;\n    const node = this.createNode();\n    const expr = this.parseExpression();\n    const directive = expr.type === \"Literal\" /* Literal */ ? this.getTokenRaw(token).slice(1, -1) : null;\n    this.consumeSemicolon();\n    return this.finalize(node, directive ? new Directive(expr, directive) : new ExpressionStatement(expr));\n  }\n  parseDirectivePrologues() {\n    let firstRestricted = null;\n    const body = [];\n    while (true) {\n      const token = this.lookahead;\n      if (token.type !== 8 /* StringLiteral */) {\n        break;\n      }\n      const statement = this.parseDirective();\n      body.push(statement);\n      const directive = statement.directive;\n      if (typeof directive !== \"string\") {\n        break;\n      }\n      if (directive === \"use strict\") {\n        this.context.strict = true;\n        if (firstRestricted) {\n          this.tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n        }\n        if (!this.context.allowStrictDirective) {\n          this.tolerateUnexpectedToken(token, Messages.IllegalLanguageModeDirective);\n        }\n      } else {\n        if (!firstRestricted && token.octal) {\n          firstRestricted = token;\n        }\n      }\n    }\n    return body;\n  }\n  // https://tc39.github.io/ecma262/#sec-method-definitions\n  qualifiedPropertyName(token) {\n    switch (token.type) {\n      case 3 /* Identifier */:\n      case 8 /* StringLiteral */:\n      case 1 /* BooleanLiteral */:\n      case 5 /* NullLiteral */:\n      case 6 /* NumericLiteral */:\n      case 4 /* Keyword */:\n        return true;\n      case 7 /* Punctuator */:\n        return token.value === \"[\" || token.value === \"#\";\n      default:\n        break;\n    }\n    return false;\n  }\n  parseGetterMethod() {\n    const node = this.createNode();\n    const isGenerator = false;\n    const previousAllowYield = this.context.allowYield;\n    this.context.allowYield = !isGenerator;\n    const formalParameters = this.parseFormalParameters();\n    if (formalParameters.params.length > 0) {\n      this.tolerateError(Messages.BadGetterArity);\n    }\n    const method = this.parsePropertyMethod(formalParameters);\n    this.context.allowYield = previousAllowYield;\n    return this.finalize(node, new FunctionExpression(null, formalParameters.params, method, isGenerator, false));\n  }\n  parseSetterMethod() {\n    const node = this.createNode();\n    const isGenerator = false;\n    const previousAllowYield = this.context.allowYield;\n    this.context.allowYield = !isGenerator;\n    const formalParameters = this.parseFormalParameters();\n    if (formalParameters.params.length !== 1) {\n      this.tolerateError(Messages.BadSetterArity);\n    } else if (formalParameters.params[0] instanceof RestElement) {\n      this.tolerateError(Messages.BadSetterRestParameter);\n    }\n    const method = this.parsePropertyMethod(formalParameters);\n    this.context.allowYield = previousAllowYield;\n    return this.finalize(node, new FunctionExpression(null, formalParameters.params, method, isGenerator, false));\n  }\n  parseGeneratorMethod(isAsync) {\n    const node = this.createNode();\n    const isGenerator = true;\n    const previousAllowYield = this.context.allowYield;\n    this.context.allowYield = true;\n    const params = this.parseFormalParameters();\n    this.context.allowYield = false;\n    const method = this.parsePropertyMethod(params);\n    this.context.allowYield = previousAllowYield;\n    return this.finalize(node, new FunctionExpression(null, params.params, method, isGenerator, isAsync));\n  }\n  // https://tc39.github.io/ecma262/#sec-generator-function-definitions\n  isStartOfExpression() {\n    let start = true;\n    const value = this.lookahead.value;\n    switch (this.lookahead.type) {\n      case 7 /* Punctuator */:\n        start = value === \"[\" || value === \"(\" || value === \"{\" || value === \"+\" || value === \"-\" || value === \"!\" || value === \"~\" || value === \"++\" || value === \"--\" || value === \"/\" || value === \"/=\";\n        break;\n      case 4 /* Keyword */:\n        start = value === \"class\" || value === \"delete\" || value === \"function\" || value === \"let\" || value === \"new\" || value === \"super\" || value === \"this\" || value === \"typeof\" || value === \"void\" || value === \"yield\";\n        break;\n      default:\n        break;\n    }\n    return start;\n  }\n  parseYieldExpression() {\n    const node = this.createNode();\n    this.expectKeyword(\"yield\");\n    let argument = null;\n    let delegate = false;\n    if (!this.hasLineTerminator) {\n      const previousAllowYield = this.context.allowYield;\n      this.context.allowYield = false;\n      delegate = this.match(\"*\");\n      if (delegate) {\n        this.nextToken();\n        argument = this.parseAssignmentExpression();\n      } else if (this.isStartOfExpression()) {\n        argument = this.parseAssignmentExpression();\n      }\n      this.context.allowYield = previousAllowYield;\n    }\n    return this.finalize(node, new YieldExpression(argument, delegate));\n  }\n  // https://tc39.github.io/ecma262/#sec-class-definitions\n  parseStaticBlock() {\n    const node = this.createNode();\n    this.expect(\"{\");\n    const block = [];\n    while (true) {\n      if (this.match(\"}\")) {\n        break;\n      }\n      block.push(this.parseStatementListItem());\n    }\n    this.expect(\"}\");\n    return this.finalize(node, new StaticBlock(block));\n  }\n  parseDecorator() {\n    const node = this.createNode();\n    this.expect(\"@\");\n    const previousStrict = this.context.strict;\n    const previousAllowYield = this.context.allowYield;\n    const previousIsAsync = this.context.isAsync;\n    this.context.strict = false;\n    this.context.allowYield = true;\n    this.context.isAsync = false;\n    const expression = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n    this.context.strict = previousStrict;\n    this.context.allowYield = previousAllowYield;\n    this.context.isAsync = previousIsAsync;\n    if (this.match(\";\")) {\n      this.throwError(Messages.NoSemicolonAfterDecorator);\n    }\n    return this.finalize(node, new Decorator(expression));\n  }\n  parseDecorators() {\n    let decorators = null;\n    while (this.match(\"@\")) {\n      if (decorators == null)\n        decorators = [];\n      decorators.push(this.parseDecorator());\n    }\n    return decorators;\n  }\n  parseClassElement(hasConstructor) {\n    let token = this.lookahead;\n    const node = this.createNode();\n    const previousInConstructor = this.context.inConstructor;\n    let kind = \"\";\n    let key = null;\n    let value = null;\n    let computed = false;\n    let method = false;\n    let isStatic = false;\n    let isAsync = false;\n    let isGenerator = false;\n    let isPrivate = false;\n    const decorators = this.parseDecorators();\n    if (decorators) {\n      token = this.lookahead;\n    }\n    if (this.match(\"*\")) {\n      this.nextToken();\n    } else {\n      computed = this.match(\"[\");\n      if (this.match(\"#\")) {\n        isPrivate = true;\n        this.nextToken();\n        token = this.lookahead;\n      }\n      key = this.parseObjectPropertyKey(isPrivate);\n      const id = key;\n      this.context.inConstructor = token.type === 3 /* Identifier */ && token.value === \"constructor\";\n      if (id.name === \"static\" && (this.qualifiedPropertyName(this.lookahead) || this.match(\"*\"))) {\n        token = this.lookahead;\n        isStatic = true;\n        computed = this.match(\"[\");\n        if (this.match(\"*\")) {\n          this.nextToken();\n          if (this.match(\"#\")) {\n            isPrivate = true;\n            this.nextToken();\n            token = this.lookahead;\n          }\n        } else {\n          if (this.match(\"#\")) {\n            isPrivate = true;\n            this.nextToken();\n            token = this.lookahead;\n          }\n          key = this.parseObjectPropertyKey(isPrivate);\n        }\n      }\n      if (id.name === \"static\" && this.match(\"{\")) {\n        return this.parseStaticBlock();\n      }\n      if (token.type === 3 /* Identifier */ && !this.hasLineTerminator && token.value === \"async\") {\n        const punctuator = this.lookahead.value;\n        if (punctuator !== \":\" && punctuator !== \"(\") {\n          isAsync = true;\n          isGenerator = this.match(\"*\");\n          if (isGenerator) {\n            this.nextToken();\n          }\n          token = this.lookahead;\n          computed = this.match(\"[\");\n          if (this.match(\"*\")) {\n            this.nextToken();\n            if (this.match(\"#\")) {\n              isPrivate = true;\n              this.nextToken();\n            }\n          } else {\n            if (this.match(\"#\")) {\n              isPrivate = true;\n              this.nextToken();\n              token = this.lookahead;\n            }\n            key = this.parseObjectPropertyKey(isPrivate);\n          }\n          if (token.type === 3 /* Identifier */ && token.value === \"constructor\" && !isStatic) {\n            this.tolerateUnexpectedToken(token, Messages.ConstructorIsAsync);\n          }\n        }\n      }\n    }\n    if (token.type === 3 /* Identifier */ && token.value === \"constructor\" && isPrivate) {\n      this.tolerateUnexpectedToken(token, Messages.ConstructorIsPrivate);\n    }\n    const lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n    if (token.type === 3 /* Identifier */ || token.type === 8 /* StringLiteral */) {\n      if (token.value === \"get\" && lookaheadPropertyKey) {\n        kind = \"get\";\n        if (this.match(\"#\")) {\n          isPrivate = true;\n          this.nextToken();\n          token = this.lookahead;\n        }\n        computed = this.match(\"[\");\n        key = this.parseObjectPropertyKey(isPrivate);\n        this.context.allowYield = false;\n        value = this.parseGetterMethod();\n      } else if (token.value === \"set\" && lookaheadPropertyKey) {\n        kind = \"set\";\n        if (this.match(\"#\")) {\n          isPrivate = true;\n          this.nextToken();\n          token = this.lookahead;\n        }\n        computed = this.match(\"[\");\n        key = this.parseObjectPropertyKey(isPrivate);\n        value = this.parseSetterMethod();\n      } else if (!this.match(\"(\")) {\n        kind = \"property\";\n        computed = false;\n        if (this.match(\"=\")) {\n          this.nextToken();\n          value = this.isolateCoverGrammar(this.parseAssignmentExpression);\n        }\n      }\n    } else if (token.type === 7 /* Punctuator */ && token.value === \"*\" && lookaheadPropertyKey) {\n      kind = \"init\";\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey(isPrivate);\n      value = this.parseGeneratorMethod(isAsync);\n      method = true;\n    } else if (token.type === 7 /* Punctuator */ && token.value === \"[\" && !this.match(\"(\")) {\n      kind = \"property\";\n      computed = true;\n      if (this.match(\"=\")) {\n        this.nextToken();\n        value = this.isolateCoverGrammar(this.parseAssignmentExpression);\n      }\n    }\n    if (!kind && key && this.match(\"(\")) {\n      const previousInClassConstructor = this.context.inClassConstructor;\n      this.context.inClassConstructor = token.value === \"constructor\";\n      kind = \"init\";\n      value = isAsync ? this.parsePropertyMethodAsyncFunction(isGenerator) : this.parsePropertyMethodFunction(isGenerator);\n      this.context.inClassConstructor = previousInClassConstructor;\n      method = true;\n    }\n    if (!kind) {\n      this.throwUnexpectedToken(this.lookahead);\n    }\n    if (kind === \"init\") {\n      kind = \"method\";\n    }\n    if (!computed) {\n      if (isStatic && this.isPropertyKey(key, \"prototype\")) {\n        this.throwUnexpectedToken(token, Messages.StaticPrototype);\n      }\n      if (!isStatic && this.isPropertyKey(key, \"constructor\")) {\n        if (kind !== \"method\" || !method || value && value.generator) {\n          this.throwUnexpectedToken(token, Messages.ConstructorSpecialMethod);\n        }\n        if (hasConstructor.value) {\n          this.throwUnexpectedToken(token, Messages.DuplicateConstructor);\n        } else {\n          hasConstructor.value = true;\n        }\n        kind = \"constructor\";\n      }\n    }\n    this.context.inConstructor = previousInConstructor;\n    if (kind === \"property\") {\n      this.consumeSemicolon();\n      return this.finalize(node, new PropertyDefinition(key, computed, value, isStatic, decorators));\n    } else\n      return this.finalize(node, new MethodDefinition(key, computed, value, kind, isStatic, decorators));\n  }\n  parseClassElementList() {\n    const body = [];\n    const hasConstructor = { value: false };\n    this.expect(\"{\");\n    while (!this.match(\"}\")) {\n      if (this.match(\";\")) {\n        this.nextToken();\n      } else {\n        body.push(this.parseClassElement(hasConstructor));\n      }\n    }\n    this.expect(\"}\");\n    return body;\n  }\n  parseClassBody() {\n    const node = this.createNode();\n    const elementList = this.parseClassElementList();\n    return this.finalize(node, new ClassBody(elementList));\n  }\n  parseClassDeclaration(identifierIsOptional) {\n    const node = this.createNode();\n    const previousStrict = this.context.strict;\n    const previousAllowSuper = this.context.allowSuper;\n    this.context.strict = true;\n    this.expectKeyword(\"class\");\n    const id = identifierIsOptional && this.lookahead.type !== 3 /* Identifier */ ? null : this.parseVariableIdentifier();\n    let superClass = null;\n    if (this.matchKeyword(\"extends\")) {\n      this.nextToken();\n      superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n      this.context.allowSuper = true;\n    }\n    const classBody = this.parseClassBody();\n    this.context.allowSuper = previousAllowSuper;\n    this.context.strict = previousStrict;\n    return this.finalize(node, new ClassDeclaration(id, superClass, classBody, this.context.decorators));\n  }\n  parseClassExpression() {\n    const node = this.createNode();\n    const previousStrict = this.context.strict;\n    this.context.strict = true;\n    this.expectKeyword(\"class\");\n    const id = this.lookahead.type === 3 /* Identifier */ ? this.parseVariableIdentifier() : null;\n    let superClass = null;\n    if (this.matchKeyword(\"extends\")) {\n      this.nextToken();\n      superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n      this.context.allowSuper = true;\n    }\n    const classBody = this.parseClassBody();\n    this.context.strict = previousStrict;\n    return this.finalize(node, new ClassExpression(id, superClass, classBody, this.context.decorators));\n  }\n  // https://tc39.github.io/ecma262/#sec-scripts\n  // https://tc39.github.io/ecma262/#sec-modules\n  parseModule() {\n    this.context.strict = true;\n    this.context.isModule = true;\n    this.scanner.isModule = true;\n    const node = this.createNode();\n    const body = this.parseDirectivePrologues();\n    while (this.lookahead.type !== 2 /* EOF */) {\n      body.push(this.parseStatementListItem());\n    }\n    return this.finalize(node, new Module(body));\n  }\n  parseScript() {\n    const node = this.createNode();\n    const body = this.parseDirectivePrologues();\n    while (this.lookahead.type !== 2 /* EOF */) {\n      body.push(this.parseStatementListItem());\n    }\n    return this.finalize(node, new Script(body));\n  }\n  // https://tc39.github.io/ecma262/#sec-imports\n  parseImportAttributes() {\n    if (this.lookahead.value === \"assert\") {\n      this.nextToken();\n      this.expect(\"{\");\n      const attributes = [];\n      while (!this.match(\"}\")) {\n        attributes.push(this.parseImportAttribute());\n        if (!this.match(\"}\")) {\n          this.expectCommaSeparator();\n        }\n      }\n      this.expect(\"}\");\n      return attributes;\n    }\n    return null;\n  }\n  parseImportAttribute() {\n    const node = this.createNode();\n    if (this.lookahead.type !== 3 /* Identifier */) {\n      this.throwUnexpectedToken(this.nextToken());\n    }\n    const key = this.parseIdentifierName();\n    if (!this.match(\":\")) {\n      this.throwUnexpectedToken(this.nextToken());\n    }\n    this.nextToken();\n    const literalToken = this.nextToken();\n    const raw = this.getTokenRaw(literalToken);\n    const value = this.finalize(node, new Literal(literalToken.value, raw));\n    return this.finalize(node, new ImportAttribute(key, value));\n  }\n  parseModuleSpecifier() {\n    const node = this.createNode();\n    if (this.lookahead.type !== 8 /* StringLiteral */) {\n      this.throwError(Messages.InvalidModuleSpecifier);\n    }\n    const token = this.nextToken();\n    const raw = this.getTokenRaw(token);\n    if (!Character.isStringWellFormedUnicode(token.value)) {\n      this.throwError(Messages.InvalidModuleSpecifier);\n    }\n    return this.finalize(node, new Literal(token.value, raw));\n  }\n  // import {<foo as bar>} ...;\n  parseImportSpecifier() {\n    const node = this.createNode();\n    let imported;\n    let local;\n    if (this.lookahead.type === 3 /* Identifier */) {\n      imported = this.parseVariableIdentifier();\n      local = imported;\n      if (this.matchContextualKeyword(\"as\")) {\n        this.nextToken();\n        local = this.parseVariableIdentifier();\n      }\n    } else {\n      imported = this.lookahead.type == 8 /* StringLiteral */ ? this.parseModuleSpecifier() : this.parseIdentifierName();\n      local = imported;\n      if (this.matchContextualKeyword(\"as\")) {\n        this.nextToken();\n        local = this.parseVariableIdentifier();\n      } else {\n        this.throwUnexpectedToken(this.nextToken());\n      }\n    }\n    return this.finalize(node, new ImportSpecifier(local, imported));\n  }\n  // {foo, bar as bas}\n  parseNamedImports() {\n    this.expect(\"{\");\n    const specifiers = [];\n    while (!this.match(\"}\")) {\n      specifiers.push(this.parseImportSpecifier());\n      if (!this.match(\"}\")) {\n        this.expect(\",\");\n      }\n    }\n    this.expect(\"}\");\n    return specifiers;\n  }\n  // import <foo> ...;\n  parseImportDefaultSpecifier() {\n    const node = this.createNode();\n    const local = this.parseIdentifierName();\n    return this.finalize(node, new ImportDefaultSpecifier(local));\n  }\n  // import <* as foo> ...;\n  parseImportNamespaceSpecifier() {\n    const node = this.createNode();\n    this.expect(\"*\");\n    if (!this.matchContextualKeyword(\"as\")) {\n      this.throwError(Messages.NoAsAfterImportNamespace);\n    }\n    if (this.lookahead.escaped) {\n      this.throwError(Messages.NoAsAndFromEscapeSequences);\n    }\n    this.nextToken();\n    const local = this.parseIdentifierName();\n    return this.finalize(node, new ImportNamespaceSpecifier(local));\n  }\n  parseImportDeclaration() {\n    if (this.context.inFunctionBody) {\n      this.throwError(Messages.IllegalImportDeclaration);\n    }\n    const node = this.createNode();\n    this.expectKeyword(\"import\");\n    let src;\n    let specifiers = [];\n    if (this.lookahead.type === 8 /* StringLiteral */) {\n      src = this.parseModuleSpecifier();\n    } else {\n      if (this.match(\"{\")) {\n        specifiers = specifiers.concat(this.parseNamedImports());\n      } else if (this.match(\"*\")) {\n        specifiers.push(this.parseImportNamespaceSpecifier());\n      } else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword(\"default\")) {\n        specifiers.push(this.parseImportDefaultSpecifier());\n        if (this.match(\",\")) {\n          this.nextToken();\n          if (this.match(\"*\")) {\n            specifiers.push(this.parseImportNamespaceSpecifier());\n          } else if (this.match(\"{\")) {\n            specifiers = specifiers.concat(this.parseNamedImports());\n          } else {\n            this.throwUnexpectedToken(this.lookahead);\n          }\n        }\n      } else {\n        this.throwUnexpectedToken(this.nextToken());\n      }\n      if (!this.matchContextualKeyword(\"from\")) {\n        const message = this.lookahead.value ? Messages.UnexpectedToken : Messages.MissingFromClause;\n        this.throwError(message, this.lookahead.value);\n      }\n      this.nextToken();\n      src = this.parseModuleSpecifier();\n    }\n    const attributes = this.parseImportAttributes();\n    this.consumeSemicolon();\n    return this.finalize(node, new ImportDeclaration(specifiers, src, attributes));\n  }\n  // https://tc39.github.io/ecma262/#sec-exports\n  parseExportSpecifier() {\n    const node = this.createNode();\n    const local = this.lookahead.type == 8 /* StringLiteral */ ? this.parseModuleSpecifier() : this.parseIdentifierName();\n    let exported = local;\n    if (this.matchContextualKeyword(\"as\")) {\n      if (this.lookahead.escaped) {\n        this.throwError(Messages.NoAsAndFromEscapeSequences);\n      }\n      this.nextToken();\n      exported = this.lookahead.type == 8 /* StringLiteral */ ? this.parseModuleSpecifier() : this.parseIdentifierName();\n    }\n    return this.finalize(node, new ExportSpecifier(local, exported));\n  }\n  parseExportDeclaration() {\n    if (this.context.inFunctionBody) {\n      this.throwError(Messages.IllegalExportDeclaration);\n    }\n    const node = this.createNode();\n    this.expectKeyword(\"export\");\n    let exportDeclaration;\n    if (this.matchKeyword(\"default\")) {\n      this.nextToken();\n      if (this.matchKeyword(\"function\")) {\n        const declaration = this.parseFunctionDeclaration(true);\n        exportDeclaration = this.finalize(node, new ExportDefaultDeclaration(declaration));\n      } else if (this.matchKeyword(\"class\")) {\n        const declaration = this.parseClassDeclaration(true);\n        exportDeclaration = this.finalize(node, new ExportDefaultDeclaration(declaration));\n      } else if (this.matchContextualKeyword(\"async\")) {\n        const declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression();\n        exportDeclaration = this.finalize(node, new ExportDefaultDeclaration(declaration));\n      } else {\n        if (this.matchContextualKeyword(\"from\")) {\n          this.throwError(Messages.UnexpectedToken, this.lookahead.value);\n        }\n        const declaration = this.match(\"{\") ? this.parseObjectInitializer() : this.match(\"[\") ? this.parseArrayInitializer() : this.parseAssignmentExpression();\n        this.consumeSemicolon();\n        exportDeclaration = this.finalize(node, new ExportDefaultDeclaration(declaration));\n      }\n    } else if (this.match(\"*\")) {\n      this.nextToken();\n      let exported = null;\n      if (this.matchContextualKeyword(\"as\")) {\n        if (this.lookahead.escaped) {\n          this.throwError(Messages.NoAsAndFromEscapeSequences);\n        }\n        this.nextToken();\n        exported = this.lookahead.type == 8 /* StringLiteral */ ? this.parseModuleSpecifier() : this.parseIdentifierName();\n      }\n      if (!this.matchContextualKeyword(\"from\")) {\n        const message = this.lookahead.value ? Messages.UnexpectedToken : Messages.MissingFromClause;\n        this.throwError(message, this.lookahead.value);\n      }\n      if (this.lookahead.escaped) {\n        this.throwError(Messages.NoAsAndFromEscapeSequences);\n      }\n      this.nextToken();\n      const src = this.parseModuleSpecifier();\n      const attributes = this.parseImportAttributes();\n      this.consumeSemicolon();\n      exportDeclaration = this.finalize(node, new ExportAllDeclaration(src, exported, attributes));\n    } else if (this.lookahead.type === 4 /* Keyword */) {\n      let declaration;\n      switch (this.lookahead.value) {\n        case \"let\":\n        case \"const\":\n          declaration = this.parseLexicalDeclaration({ inFor: false });\n          break;\n        case \"var\":\n        case \"class\":\n        case \"function\":\n          declaration = this.parseStatementListItem();\n          break;\n        default:\n          this.throwUnexpectedToken(this.lookahead);\n      }\n      exportDeclaration = this.finalize(node, new ExportNamedDeclaration(declaration, [], null, null));\n    } else if (this.matchAsyncFunction()) {\n      const declaration = this.parseFunctionDeclaration();\n      exportDeclaration = this.finalize(node, new ExportNamedDeclaration(declaration, [], null, null));\n    } else {\n      const specifiers = [];\n      let source = null;\n      let isExportFromIdentifier = false;\n      let attributes = null;\n      this.expect(\"{\");\n      while (!this.match(\"}\")) {\n        isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword(\"default\");\n        specifiers.push(this.parseExportSpecifier());\n        if (!this.match(\"}\")) {\n          this.expect(\",\");\n        }\n      }\n      this.expect(\"}\");\n      if (this.matchContextualKeyword(\"from\")) {\n        if (this.lookahead.escaped) {\n          this.throwError(Messages.NoAsAndFromEscapeSequences);\n        }\n        this.nextToken();\n        source = this.parseModuleSpecifier();\n        attributes = this.parseImportAttributes();\n        this.consumeSemicolon();\n      } else if (isExportFromIdentifier) {\n        const message = this.lookahead.value ? Messages.UnexpectedToken : Messages.MissingFromClause;\n        this.throwError(message, this.lookahead.value);\n      } else {\n        attributes = this.parseImportAttributes();\n        this.consumeSemicolon();\n      }\n      exportDeclaration = this.finalize(node, new ExportNamedDeclaration(null, specifiers, source, attributes));\n    }\n    return exportDeclaration;\n  }\n};\n\n// src/xhtml-entities.ts\nvar XHTMLEntities = {\n  quot: '\"',\n  amp: \"&\",\n  apos: \"'\",\n  gt: \">\",\n  nbsp: \"\\xA0\",\n  iexcl: \"\\xA1\",\n  cent: \"\\xA2\",\n  pound: \"\\xA3\",\n  curren: \"\\xA4\",\n  yen: \"\\xA5\",\n  brvbar: \"\\xA6\",\n  sect: \"\\xA7\",\n  uml: \"\\xA8\",\n  copy: \"\\xA9\",\n  ordf: \"\\xAA\",\n  laquo: \"\\xAB\",\n  not: \"\\xAC\",\n  shy: \"\\xAD\",\n  reg: \"\\xAE\",\n  macr: \"\\xAF\",\n  deg: \"\\xB0\",\n  plusmn: \"\\xB1\",\n  sup2: \"\\xB2\",\n  sup3: \"\\xB3\",\n  acute: \"\\xB4\",\n  micro: \"\\xB5\",\n  para: \"\\xB6\",\n  middot: \"\\xB7\",\n  cedil: \"\\xB8\",\n  sup1: \"\\xB9\",\n  ordm: \"\\xBA\",\n  raquo: \"\\xBB\",\n  frac14: \"\\xBC\",\n  frac12: \"\\xBD\",\n  frac34: \"\\xBE\",\n  iquest: \"\\xBF\",\n  Agrave: \"\\xC0\",\n  Aacute: \"\\xC1\",\n  Acirc: \"\\xC2\",\n  Atilde: \"\\xC3\",\n  Auml: \"\\xC4\",\n  Aring: \"\\xC5\",\n  AElig: \"\\xC6\",\n  Ccedil: \"\\xC7\",\n  Egrave: \"\\xC8\",\n  Eacute: \"\\xC9\",\n  Ecirc: \"\\xCA\",\n  Euml: \"\\xCB\",\n  Igrave: \"\\xCC\",\n  Iacute: \"\\xCD\",\n  Icirc: \"\\xCE\",\n  Iuml: \"\\xCF\",\n  ETH: \"\\xD0\",\n  Ntilde: \"\\xD1\",\n  Ograve: \"\\xD2\",\n  Oacute: \"\\xD3\",\n  Ocirc: \"\\xD4\",\n  Otilde: \"\\xD5\",\n  Ouml: \"\\xD6\",\n  times: \"\\xD7\",\n  Oslash: \"\\xD8\",\n  Ugrave: \"\\xD9\",\n  Uacute: \"\\xDA\",\n  Ucirc: \"\\xDB\",\n  Uuml: \"\\xDC\",\n  Yacute: \"\\xDD\",\n  THORN: \"\\xDE\",\n  szlig: \"\\xDF\",\n  agrave: \"\\xE0\",\n  aacute: \"\\xE1\",\n  acirc: \"\\xE2\",\n  atilde: \"\\xE3\",\n  auml: \"\\xE4\",\n  aring: \"\\xE5\",\n  aelig: \"\\xE6\",\n  ccedil: \"\\xE7\",\n  egrave: \"\\xE8\",\n  eacute: \"\\xE9\",\n  ecirc: \"\\xEA\",\n  euml: \"\\xEB\",\n  igrave: \"\\xEC\",\n  iacute: \"\\xED\",\n  icirc: \"\\xEE\",\n  iuml: \"\\xEF\",\n  eth: \"\\xF0\",\n  ntilde: \"\\xF1\",\n  ograve: \"\\xF2\",\n  oacute: \"\\xF3\",\n  ocirc: \"\\xF4\",\n  otilde: \"\\xF5\",\n  ouml: \"\\xF6\",\n  divide: \"\\xF7\",\n  oslash: \"\\xF8\",\n  ugrave: \"\\xF9\",\n  uacute: \"\\xFA\",\n  ucirc: \"\\xFB\",\n  uuml: \"\\xFC\",\n  yacute: \"\\xFD\",\n  thorn: \"\\xFE\",\n  yuml: \"\\xFF\",\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  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\",\n  lang: \"\\u27E8\",\n  rang: \"\\u27E9\"\n};\n\n// src/jsx-parser.ts\nTokenName[100 /* Identifier */] = \"JSXIdentifier\";\nTokenName[101 /* Text */] = \"JSXText\";\nfunction getQualifiedElementName(elementName) {\n  let qualifiedName;\n  switch (elementName.type) {\n    case \"JSXIdentifier\" /* JSXIdentifier */:\n      const id = elementName;\n      qualifiedName = id.name;\n      break;\n    case \"JSXNamespacedName\" /* JSXNamespacedName */:\n      const ns = elementName;\n      qualifiedName = getQualifiedElementName(ns.namespace) + \":\" + getQualifiedElementName(ns.name);\n      break;\n    case \"JSXMemberExpression\" /* JSXMemberExpression */:\n      const expr = elementName;\n      qualifiedName = getQualifiedElementName(expr.object) + \".\" + getQualifiedElementName(expr.property);\n      break;\n    default:\n      break;\n  }\n  return qualifiedName;\n}\nvar JSXParser = class extends Parser {\n  constructor(code, options, delegate) {\n    super(code, options, delegate);\n  }\n  //@ts-ignore\n  parsePrimaryExpression() {\n    return this.match(\"<\") ? this.parseJSXRoot() : super.parsePrimaryExpression();\n  }\n  startJSX() {\n    this.scanner.index = this.startMarker.index;\n    this.scanner.lineNumber = this.startMarker.line;\n    this.scanner.lineStart = this.startMarker.index - this.startMarker.column;\n  }\n  finishJSX() {\n    this.nextToken();\n  }\n  reenterJSX() {\n    this.startJSX();\n    this.expectJSX(\"}\");\n    if (this.config.tokens) {\n      this.tokens.pop();\n    }\n  }\n  createJSXNode() {\n    this.collectComments();\n    return {\n      index: this.scanner.index,\n      line: this.scanner.lineNumber,\n      column: this.scanner.index - this.scanner.lineStart\n    };\n  }\n  createJSXChildNode() {\n    return {\n      index: this.scanner.index,\n      line: this.scanner.lineNumber,\n      column: this.scanner.index - this.scanner.lineStart\n    };\n  }\n  scanXHTMLEntity(quote) {\n    let result = \"&\";\n    let valid = true;\n    let terminated = false;\n    let numeric = false;\n    let hex = false;\n    while (!this.scanner.eof() && valid && !terminated) {\n      const ch = this.scanner.source[this.scanner.index];\n      if (ch === quote) {\n        break;\n      }\n      terminated = ch === \";\";\n      result += ch;\n      ++this.scanner.index;\n      if (!terminated) {\n        switch (result.length) {\n          case 2:\n            numeric = ch === \"#\";\n            break;\n          case 3:\n            if (numeric) {\n              hex = ch === \"x\";\n              valid = hex || Character.isDecimalDigit(ch.charCodeAt(0));\n              numeric = numeric && !hex;\n            }\n            break;\n          default:\n            valid = valid && !(numeric && !Character.isDecimalDigit(ch.charCodeAt(0)));\n            valid = valid && !(hex && !Character.isHexDigit(ch.charCodeAt(0)));\n            break;\n        }\n      }\n    }\n    if (valid && terminated && result.length > 2) {\n      const str = result.substr(1, result.length - 2);\n      if (numeric && str.length > 1) {\n        result = String.fromCharCode(parseInt(str.substr(1), 10));\n      } else if (hex && str.length > 2) {\n        result = String.fromCharCode(parseInt(\"0\" + str.substr(1), 16));\n      } else if (!numeric && !hex && XHTMLEntities[str]) {\n        result = XHTMLEntities[str];\n      }\n    }\n    return result;\n  }\n  // Scan the next JSX token. This replaces Scanner#lex when in JSX mode.\n  lexJSX() {\n    const cp = this.scanner.source.charCodeAt(this.scanner.index);\n    if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) {\n      const value = this.scanner.source[this.scanner.index++];\n      return {\n        type: 7 /* Punctuator */,\n        value,\n        lineNumber: this.scanner.lineNumber,\n        lineStart: this.scanner.lineStart,\n        start: this.scanner.index - 1,\n        end: this.scanner.index\n      };\n    }\n    if (cp === 34 || cp === 39) {\n      const start = this.scanner.index;\n      const quote = this.scanner.source[this.scanner.index++];\n      let str = \"\";\n      while (!this.scanner.eof()) {\n        const ch = this.scanner.source[this.scanner.index++];\n        if (ch === quote) {\n          break;\n        } else if (ch === \"&\") {\n          str += this.scanXHTMLEntity(quote);\n        } else {\n          str += ch;\n        }\n      }\n      return {\n        type: 8 /* StringLiteral */,\n        value: str,\n        lineNumber: this.scanner.lineNumber,\n        lineStart: this.scanner.lineStart,\n        start,\n        end: this.scanner.index\n      };\n    }\n    if (cp === 46) {\n      const n1 = this.scanner.source.charCodeAt(this.scanner.index + 1);\n      const n2 = this.scanner.source.charCodeAt(this.scanner.index + 2);\n      const value = n1 === 46 && n2 === 46 ? \"...\" : \".\";\n      const start = this.scanner.index;\n      this.scanner.index += value.length;\n      return {\n        type: 7 /* Punctuator */,\n        value,\n        lineNumber: this.scanner.lineNumber,\n        lineStart: this.scanner.lineStart,\n        start,\n        end: this.scanner.index\n      };\n    }\n    if (cp === 96) {\n      return {\n        type: 10 /* Template */,\n        value: \"\",\n        lineNumber: this.scanner.lineNumber,\n        lineStart: this.scanner.lineStart,\n        start: this.scanner.index,\n        end: this.scanner.index\n      };\n    }\n    if (Character.isIdentifierStart(cp) && cp !== 92) {\n      const start = this.scanner.index;\n      ++this.scanner.index;\n      while (!this.scanner.eof()) {\n        const ch = this.scanner.source.charCodeAt(this.scanner.index);\n        if (Character.isIdentifierPart(ch) && ch !== 92) {\n          ++this.scanner.index;\n        } else if (ch === 45) {\n          ++this.scanner.index;\n        } else {\n          break;\n        }\n      }\n      const id = this.scanner.source.slice(start, this.scanner.index);\n      return {\n        type: 100 /* Identifier */,\n        value: id,\n        lineNumber: this.scanner.lineNumber,\n        lineStart: this.scanner.lineStart,\n        start,\n        end: this.scanner.index\n      };\n    }\n    return this.scanner.lex();\n  }\n  nextJSXToken() {\n    this.collectComments();\n    this.startMarker.index = this.scanner.index;\n    this.startMarker.line = this.scanner.lineNumber;\n    this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n    const token = this.lexJSX();\n    this.lastMarker.index = this.scanner.index;\n    this.lastMarker.line = this.scanner.lineNumber;\n    this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n    if (this.config.tokens) {\n      this.tokens.push(this.convertToken(token));\n    }\n    return token;\n  }\n  nextJSXText() {\n    this.startMarker.index = this.scanner.index;\n    this.startMarker.line = this.scanner.lineNumber;\n    this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n    const start = this.scanner.index;\n    let text = \"\";\n    while (!this.scanner.eof()) {\n      const ch = this.scanner.source[this.scanner.index];\n      if (ch === \"{\" || ch === \"<\") {\n        break;\n      }\n      ++this.scanner.index;\n      text += ch;\n      if (Character.isLineTerminator(ch.charCodeAt(0))) {\n        ++this.scanner.lineNumber;\n        if (ch === \"\\r\" && this.scanner.source[this.scanner.index] === \"\\n\") {\n          ++this.scanner.index;\n        }\n        this.scanner.lineStart = this.scanner.index;\n      }\n    }\n    this.lastMarker.index = this.scanner.index;\n    this.lastMarker.line = this.scanner.lineNumber;\n    this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n    const token = {\n      type: 101 /* Text */,\n      value: text,\n      lineNumber: this.scanner.lineNumber,\n      lineStart: this.scanner.lineStart,\n      start,\n      end: this.scanner.index\n    };\n    if (text.length > 0 && this.config.tokens) {\n      this.tokens.push(this.convertToken(token));\n    }\n    return token;\n  }\n  peekJSXToken() {\n    const state = this.scanner.saveState();\n    this.scanner.scanComments();\n    const next = this.lexJSX();\n    this.scanner.restoreState(state);\n    return next;\n  }\n  // Expect the next JSX token to match the specified punctuator.\n  // If not, an exception will be thrown.\n  expectJSX(value) {\n    const token = this.nextJSXToken();\n    if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n      this.throwUnexpectedToken(token);\n    }\n  }\n  // Return true if the next JSX token matches the specified punctuator.\n  matchJSX(value) {\n    const next = this.peekJSXToken();\n    return next.type === 7 /* Punctuator */ && next.value === value;\n  }\n  parseJSXIdentifier() {\n    const node = this.createJSXNode();\n    const token = this.nextJSXToken();\n    if (token.type !== 100 /* Identifier */) {\n      this.throwUnexpectedToken(token);\n    }\n    return this.finalize(node, new JSXIdentifier(token.value));\n  }\n  parseJSXElementName() {\n    const node = this.createJSXNode();\n    let elementName = this.parseJSXIdentifier();\n    if (this.matchJSX(\":\")) {\n      const namespace = elementName;\n      this.expectJSX(\":\");\n      const name = this.parseJSXIdentifier();\n      elementName = this.finalize(node, new JSXNamespacedName(namespace, name));\n    } else if (this.matchJSX(\".\")) {\n      while (this.matchJSX(\".\")) {\n        const object = elementName;\n        this.expectJSX(\".\");\n        const property = this.parseJSXIdentifier();\n        elementName = this.finalize(node, new JSXMemberExpression(object, property));\n      }\n    }\n    return elementName;\n  }\n  parseJSXAttributeName() {\n    const node = this.createJSXNode();\n    let attributeName;\n    const identifier = this.parseJSXIdentifier();\n    if (this.matchJSX(\":\")) {\n      const namespace = identifier;\n      this.expectJSX(\":\");\n      const name = this.parseJSXIdentifier();\n      attributeName = this.finalize(node, new JSXNamespacedName(namespace, name));\n    } else {\n      attributeName = identifier;\n    }\n    return attributeName;\n  }\n  parseJSXStringLiteralAttribute() {\n    const node = this.createJSXNode();\n    const token = this.nextJSXToken();\n    if (token.type !== 8 /* StringLiteral */) {\n      this.throwUnexpectedToken(token);\n    }\n    const raw = this.getTokenRaw(token);\n    return this.finalize(node, new Literal(token.value, raw));\n  }\n  parseJSXExpressionAttribute() {\n    const node = this.createJSXNode();\n    this.expectJSX(\"{\");\n    this.finishJSX();\n    if (this.match(\"}\")) {\n      this.tolerateError(\"JSX attributes must only be assigned a non-empty expression\");\n    }\n    const expression = this.parseAssignmentExpression();\n    this.reenterJSX();\n    return this.finalize(node, new JSXExpressionContainer(expression));\n  }\n  parseJSXAttributeValue() {\n    return this.matchJSX(\"{\") ? this.parseJSXExpressionAttribute() : this.matchJSX(\"<\") ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute();\n  }\n  parseJSXNameValueAttribute() {\n    const node = this.createJSXNode();\n    const name = this.parseJSXAttributeName();\n    let value = null;\n    if (this.matchJSX(\"=\")) {\n      this.expectJSX(\"=\");\n      value = this.parseJSXAttributeValue();\n    }\n    return this.finalize(node, new JSXAttribute(name, value));\n  }\n  parseJSXSpreadAttribute() {\n    const node = this.createJSXNode();\n    this.expectJSX(\"{\");\n    this.expectJSX(\"...\");\n    this.finishJSX();\n    const argument = this.parseAssignmentExpression();\n    this.reenterJSX();\n    return this.finalize(node, new JSXSpreadAttribute(argument));\n  }\n  parseJSXAttributes() {\n    const attributes = [];\n    while (!this.matchJSX(\"/\") && !this.matchJSX(\">\")) {\n      const attribute = this.matchJSX(\"{\") ? this.parseJSXSpreadAttribute() : this.parseJSXNameValueAttribute();\n      attributes.push(attribute);\n    }\n    return attributes;\n  }\n  parseJSXOpeningElement() {\n    const node = this.createJSXNode();\n    this.expectJSX(\"<\");\n    if (this.matchJSX(\">\")) {\n      this.expectJSX(\">\");\n      return this.finalize(node, new JSXOpeningFragment(false));\n    }\n    const name = this.parseJSXElementName();\n    const attributes = this.parseJSXAttributes();\n    const selfClosing = this.matchJSX(\"/\");\n    if (selfClosing) {\n      this.expectJSX(\"/\");\n    }\n    this.expectJSX(\">\");\n    return this.finalize(node, new JSXOpeningElement(name, selfClosing, attributes));\n  }\n  parseJSXBoundaryElement() {\n    const node = this.createJSXNode();\n    this.expectJSX(\"<\");\n    if (this.matchJSX(\"/\")) {\n      this.expectJSX(\"/\");\n      if (this.matchJSX(\">\")) {\n        this.expectJSX(\">\");\n        return this.finalize(node, new JSXClosingFragment());\n      }\n      const elementName = this.parseJSXElementName();\n      this.expectJSX(\">\");\n      return this.finalize(node, new JSXClosingElement(elementName));\n    }\n    const name = this.parseJSXElementName();\n    const attributes = this.parseJSXAttributes();\n    const selfClosing = this.matchJSX(\"/\");\n    if (selfClosing) {\n      this.expectJSX(\"/\");\n    }\n    this.expectJSX(\">\");\n    return this.finalize(node, new JSXOpeningElement(name, selfClosing, attributes));\n  }\n  parseJSXEmptyExpression() {\n    const node = this.createJSXChildNode();\n    this.collectComments();\n    this.lastMarker.index = this.scanner.index;\n    this.lastMarker.line = this.scanner.lineNumber;\n    this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n    return this.finalize(node, new JSXEmptyExpression());\n  }\n  parseJSXExpressionContainer() {\n    const node = this.createJSXNode();\n    this.expectJSX(\"{\");\n    let expression;\n    if (this.matchJSX(\"}\")) {\n      expression = this.parseJSXEmptyExpression();\n      this.expectJSX(\"}\");\n    } else {\n      this.finishJSX();\n      expression = this.parseAssignmentExpression();\n      this.reenterJSX();\n    }\n    return this.finalize(node, new JSXExpressionContainer(expression));\n  }\n  parseJSXChildren() {\n    const children = [];\n    while (!this.scanner.eof()) {\n      const node = this.createJSXChildNode();\n      const token = this.nextJSXText();\n      if (token.start < token.end) {\n        const raw = this.getTokenRaw(token);\n        const child = this.finalize(node, new JSXText(token.value, raw));\n        children.push(child);\n      }\n      if (this.scanner.source[this.scanner.index] === \"{\") {\n        const container = this.parseJSXExpressionContainer();\n        children.push(container);\n      } else {\n        break;\n      }\n    }\n    return children;\n  }\n  parseComplexJSXElement(el) {\n    const stack = [];\n    while (!this.scanner.eof()) {\n      el.children = el.children.concat(this.parseJSXChildren());\n      const node = this.createJSXChildNode();\n      const element = this.parseJSXBoundaryElement();\n      if (element.type === \"JSXOpeningElement\" /* JSXOpeningElement */) {\n        const opening = element;\n        if (opening.selfClosing) {\n          const child = this.finalize(node, new JSXElement(opening, [], null));\n          el.children.push(child);\n        } else {\n          stack.push(el);\n          el = { node, opening, closing: null, children: [] };\n        }\n      }\n      if (element.type === \"JSXClosingElement\" /* JSXClosingElement */) {\n        el.closing = element;\n        const open = getQualifiedElementName(el.opening.name);\n        const close = getQualifiedElementName(el.closing.name);\n        if (open !== close) {\n          this.tolerateError(\"Expected corresponding JSX closing tag for %0\", open);\n        }\n        if (stack.length > 0) {\n          const child = this.finalize(el.node, new JSXElement(el.opening, el.children, el.closing));\n          el = stack[stack.length - 1];\n          el.children.push(child);\n          stack.pop();\n        } else {\n          break;\n        }\n      }\n      if (element.type === \"JSXClosingFragment\" /* JSXClosingFragment */) {\n        el.closing = element;\n        if (el.opening.type !== \"JSXOpeningFragment\" /* JSXOpeningFragment */) {\n          this.tolerateError(\"Expected corresponding JSX closing tag for jsx fragment\");\n        } else {\n          break;\n        }\n      }\n    }\n    return el;\n  }\n  parseJSXElement() {\n    const node = this.createJSXNode();\n    const opening = this.parseJSXOpeningElement();\n    let children = [];\n    let closing = null;\n    if (!opening.selfClosing) {\n      const el = this.parseComplexJSXElement({ node, opening, closing, children });\n      children = el.children;\n      closing = el.closing;\n    }\n    return this.finalize(node, new JSXElement(opening, children, closing));\n  }\n  parseJSXRoot() {\n    if (this.config.tokens) {\n      this.tokens.pop();\n    }\n    this.startJSX();\n    const element = this.parseJSXElement();\n    this.finishJSX();\n    return element;\n  }\n  isStartOfExpression() {\n    return super.isStartOfExpression() || this.match(\"<\");\n  }\n};\n\n// src/tokenizer.ts\nvar beforeFunctionExpressionTokens = [\n  \"(\",\n  \"{\",\n  \"[\",\n  \"in\",\n  \"typeof\",\n  \"instanceof\",\n  \"new\",\n  \"return\",\n  \"case\",\n  \"delete\",\n  \"throw\",\n  \"void\",\n  // assignment operators\n  \"=\",\n  \"+=\",\n  \"-=\",\n  \"*=\",\n  \"**=\",\n  \"/=\",\n  \"%=\",\n  \"<<=\",\n  \">>=\",\n  \">>>=\",\n  \"&=\",\n  \"|=\",\n  \"^=\",\n  \",\",\n  // binary/unary operators\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];\nvar Reader = class {\n  values;\n  curly;\n  paren;\n  constructor() {\n    this.values = [];\n    this.curly = this.paren = -1;\n  }\n  // A function following one of those tokens is an expression.\n  beforeFunctionExpression(t) {\n    return beforeFunctionExpressionTokens.includes(t);\n  }\n  // Determine if forward slash (/) is an operator or part of a regular expression\n  // https://github.com/mozilla/sweet.js/wiki/design\n  isRegexStart() {\n    const previous = this.values[this.values.length - 1];\n    let regex = previous !== null;\n    switch (previous) {\n      case \"this\":\n      case \"]\":\n        regex = false;\n        break;\n      case \")\":\n        const keyword = this.values[this.paren - 1];\n        regex = keyword === \"if\" || keyword === \"while\" || keyword === \"for\" || keyword === \"with\";\n        break;\n      case \"}\":\n        regex = true;\n        if (this.values[this.curly - 3] === \"function\") {\n          const check = this.values[this.curly - 4];\n          regex = check ? !this.beforeFunctionExpression(check) : false;\n        } else if (this.values[this.curly - 4] === \"function\") {\n          const check = this.values[this.curly - 5];\n          regex = check ? !this.beforeFunctionExpression(check) : true;\n        }\n        break;\n      default:\n        break;\n    }\n    return regex;\n  }\n  push(token) {\n    if (token.type === 7 /* Punctuator */ || token.type === 4 /* Keyword */) {\n      if (token.value === \"{\") {\n        this.curly = this.values.length;\n      } else if (token.value === \"(\") {\n        this.paren = this.values.length;\n      }\n      this.values.push(token.value);\n    } else {\n      this.values.push(null);\n    }\n  }\n};\nvar Tokenizer = class {\n  errorHandler;\n  scanner;\n  trackRange;\n  trackLoc;\n  buffer;\n  reader;\n  constructor(code, config) {\n    this.errorHandler = new ErrorHandler();\n    this.errorHandler.tolerant = config ? typeof config.tolerant === \"boolean\" && config.tolerant : false;\n    this.scanner = new Scanner(code, this.errorHandler);\n    this.scanner.trackComment = config ? typeof config.comment === \"boolean\" && config.comment : false;\n    this.trackRange = config ? typeof config.range === \"boolean\" && config.range : false;\n    this.trackLoc = config ? typeof config.loc === \"boolean\" && config.loc : false;\n    this.buffer = [];\n    this.reader = new Reader();\n  }\n  errors() {\n    return this.errorHandler.errors;\n  }\n  getNextToken() {\n    if (this.buffer.length === 0) {\n      const comments = this.scanner.scanComments();\n      if (this.scanner.trackComment) {\n        for (let i = 0; i < comments.length; ++i) {\n          const e = comments[i];\n          const value = this.scanner.source.slice(e.slice[0], e.slice[1]);\n          const comment = {\n            type: e.multiLine ? \"BlockComment\" : \"LineComment\",\n            value\n          };\n          if (this.trackRange) {\n            comment.range = e.range;\n          }\n          if (this.trackLoc) {\n            comment.loc = e.loc;\n          }\n          this.buffer.push(comment);\n        }\n      }\n      if (!this.scanner.eof()) {\n        let loc;\n        if (this.trackLoc) {\n          loc = {\n            start: {\n              line: this.scanner.lineNumber,\n              column: this.scanner.index - this.scanner.lineStart\n            },\n            end: {}\n          };\n        }\n        const maybeRegex = this.scanner.source[this.scanner.index] === \"/\" && this.reader.isRegexStart();\n        let token;\n        if (maybeRegex) {\n          const state = this.scanner.saveState();\n          try {\n            token = this.scanner.scanRegExp();\n          } catch (e) {\n            this.scanner.restoreState(state);\n            token = this.scanner.lex();\n          }\n        } else {\n          token = this.scanner.lex();\n        }\n        this.reader.push(token);\n        const entry = {\n          type: TokenName[token.type],\n          value: this.scanner.source.slice(token.start, token.end)\n        };\n        if (this.trackRange) {\n          entry.range = [token.start, token.end];\n        }\n        if (this.trackLoc) {\n          loc.end = {\n            line: this.scanner.lineNumber,\n            column: this.scanner.index - this.scanner.lineStart\n          };\n          entry.loc = loc;\n        }\n        if (token.type === 9 /* RegularExpression */) {\n          const pattern = token.pattern;\n          const flags = token.flags;\n          entry.regex = { pattern, flags };\n        }\n        this.buffer.push(entry);\n      }\n    }\n    return this.buffer.shift();\n  }\n};\n\n// src/visitor.ts\nvar Visitor = class {\n  visit(node) {\n    if (node == null)\n      return node;\n    switch (node.type) {\n      case \"AssignmentExpression\" /* AssignmentExpression */:\n        return this.visitAssignmentExpression(node);\n      case \"AssignmentPattern\" /* AssignmentPattern */:\n        return this.visitAssignmentPattern(node);\n      case \"ArrayExpression\" /* ArrayExpression */:\n        return this.visitArrayExpression(node);\n      case \"ArrayPattern\" /* ArrayPattern */:\n        return this.visitArrayPattern(node);\n      case \"ArrowFunctionExpression\" /* ArrowFunctionExpression */:\n        return this.visitArrowFunctionExpression(node);\n      case \"AwaitExpression\" /* AwaitExpression */:\n        return this.visitAwaitExpression(node);\n      case \"BlockStatement\" /* BlockStatement */:\n        return this.visitBlockStatement(node);\n      case \"BinaryExpression\" /* BinaryExpression */:\n        return this.visitBinaryExpression(node);\n      case \"BreakStatement\" /* BreakStatement */:\n        return this.visitBreakStatement(node);\n      case \"CallExpression\" /* CallExpression */:\n        return this.visitCallExpression(node);\n      case \"CatchClause\" /* CatchClause */:\n        return this.visitCatchClause(node);\n      case \"ChainExpression\" /* ChainExpression */:\n        return this.visitChainExpression(node);\n      case \"ClassBody\" /* ClassBody */:\n        return this.visitClassBody(node);\n      case \"ClassDeclaration\" /* ClassDeclaration */:\n        return this.visitClassDeclaration(node);\n      case \"ClassExpression\" /* ClassExpression */:\n        return this.visitClassExpression(node);\n      case \"ConditionalExpression\" /* ConditionalExpression */:\n        return this.visitConditionalExpression(node);\n      case \"ContinueStatement\" /* ContinueStatement */:\n        return this.visitContinueStatement(node);\n      case \"Decorator\" /* Decorator */:\n        return this.visitDecorator(node);\n      case \"DoWhileStatement\" /* DoWhileStatement */:\n        return this.visitDoWhileStatement(node);\n      case \"DebuggerStatement\" /* DebuggerStatement */:\n        return this.visitDebuggerStatement(node);\n      case \"EmptyStatement\" /* EmptyStatement */:\n        return this.visitEmptyStatement(node);\n      case \"ExportAllDeclaration\" /* ExportAllDeclaration */:\n        return this.visitExportAllDeclaration(node);\n      case \"ExportDefaultDeclaration\" /* ExportDefaultDeclaration */:\n        return this.visitExportDefaultDeclaration(node);\n      case \"ExportNamedDeclaration\" /* ExportNamedDeclaration */:\n        return this.visitExportNamedDeclaration(node);\n      case \"ExportSpecifier\" /* ExportSpecifier */:\n        return this.visitExportSpecifier(node);\n      case \"ExpressionStatement\" /* ExpressionStatement */:\n        return this.visitExpressionStatement(node);\n      case \"ForStatement\" /* ForStatement */:\n        return this.visitForStatement(node);\n      case \"ForOfStatement\" /* ForOfStatement */:\n        return this.visitForOfStatement(node);\n      case \"ForInStatement\" /* ForInStatement */:\n        return this.visitForInStatement(node);\n      case \"FunctionDeclaration\" /* FunctionDeclaration */:\n        return this.visitFunctionDeclaration(node);\n      case \"FunctionExpression\" /* FunctionExpression */:\n        return this.visitFunctionExpression(node);\n      case \"Identifier\" /* Identifier */:\n        return this.visitIdentifier(node);\n      case \"IfStatement\" /* IfStatement */:\n        return this.visitIfStatement(node);\n      case \"ImportAttribute\" /* ImportAttribute */:\n        return this.visitImportAttribute(node);\n      case \"ImportExpression\" /* ImportExpression */:\n        return this.visitImportExpression(node);\n      case \"ImportDeclaration\" /* ImportDeclaration */:\n        return this.visitImportDeclaration(node);\n      case \"ImportDefaultSpecifier\" /* ImportDefaultSpecifier */:\n        return this.visitImportDefaultSpecifier(node);\n      case \"ImportNamespaceSpecifier\" /* ImportNamespaceSpecifier */:\n        return this.visitImportNamespaceSpecifier(node);\n      case \"ImportSpecifier\" /* ImportSpecifier */:\n        return this.visitImportSpecifier(node);\n      case \"Literal\" /* Literal */:\n        return this.visitLiteral(node);\n      case \"LabeledStatement\" /* LabeledStatement */:\n        return this.visitLabeledStatement(node);\n      case \"LogicalExpression\" /* LogicalExpression */:\n        return this.visitLogicalExpression(node);\n      case \"MemberExpression\" /* MemberExpression */:\n        return this.visitMemberExpression(node);\n      case \"MetaProperty\" /* MetaProperty */:\n        return this.visitMetaProperty(node);\n      case \"MethodDefinition\" /* MethodDefinition */:\n        return this.visitMethodDefinition(node);\n      case \"NewExpression\" /* NewExpression */:\n        return this.visitNewExpression(node);\n      case \"ObjectExpression\" /* ObjectExpression */:\n        return this.visitObjectExpression(node);\n      case \"ObjectPattern\" /* ObjectPattern */:\n        return this.visitObjectPattern(node);\n      case \"Program\" /* Program */:\n        return this.visitProgram(node);\n      case \"Property\" /* Property */:\n        return this.visitProperty(node);\n      case \"PrivateIdentifier\" /* PrivateIdentifier */:\n        return this.visitPrivateIdentifier(node);\n      case \"RestElement\" /* RestElement */:\n        return this.visitRestElement(node);\n      case \"ReturnStatement\" /* ReturnStatement */:\n        return this.visitReturnStatement(node);\n      case \"SequenceExpression\" /* SequenceExpression */:\n        return this.visitSequenceExpression(node);\n      case \"SpreadElement\" /* SpreadElement */:\n        return this.visitSpreadElement(node);\n      case \"StaticBlock\" /* StaticBlock */:\n        return this.visitStaticBlock(node);\n      case \"Super\" /* Super */:\n        return this.visitSuper(node);\n      case \"SwitchCase\" /* SwitchCase */:\n        return this.visitSwitchCase(node);\n      case \"SwitchStatement\" /* SwitchStatement */:\n        return this.visitSwitchStatement(node);\n      case \"TaggedTemplateExpression\" /* TaggedTemplateExpression */:\n        return this.visitTaggedTemplateExpression(node);\n      case \"TemplateElement\" /* TemplateElement */:\n        return this.visitTemplateElement(node);\n      case \"TemplateLiteral\" /* TemplateLiteral */:\n        return this.visitTemplateLiteral(node);\n      case \"ThisExpression\" /* ThisExpression */:\n        return this.visitThisExpression(node);\n      case \"ThrowStatement\" /* ThrowStatement */:\n        return this.visitThrowStatement(node);\n      case \"TryStatement\" /* TryStatement */:\n        return this.visitTryStatement(node);\n      case \"UnaryExpression\" /* UnaryExpression */:\n        return this.visitUnaryExpression(node);\n      case \"UpdateExpression\" /* UpdateExpression */:\n        return this.visitUpdateExpression(node);\n      case \"VariableDeclaration\" /* VariableDeclaration */:\n        return this.visitVariableDeclaration(node);\n      case \"VariableDeclarator\" /* VariableDeclarator */:\n        return this.visitVariableDeclarator(node);\n      case \"WhileStatement\" /* WhileStatement */:\n        return this.visitWhileStatement(node);\n      case \"WithStatement\" /* WithStatement */:\n        return this.visitWithStatement(node);\n      case \"YieldExpression\" /* YieldExpression */:\n        return this.visitYieldExpression(node);\n    }\n  }\n  visitNodeList(original) {\n    if (original == null)\n      return original;\n    let list = null;\n    for (let i = 0, n = original.length; i < n; i++) {\n      let p = this.visit(original[i]);\n      if (list != null) {\n        list.push(p);\n      } else if (p != original[i]) {\n        list = [];\n        for (let j = 0; j < i; j++) {\n          list.push(original[j]);\n        }\n        list.push(p);\n      }\n    }\n    if (list != null)\n      return list;\n    return original;\n  }\n  visitAssignmentExpression(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    if (left !== node.left || right !== node.right)\n      return new AssignmentExpression(node.operator, left, right);\n    return node;\n  }\n  visitAssignmentPattern(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    if (left !== node.left || right !== node.right)\n      return new AssignmentPattern(left, right);\n    return node;\n  }\n  visitArrayExpression(node) {\n    const elements = this.visitNodeList(node.elements);\n    if (elements !== node.elements)\n      return new ArrayExpression(elements);\n    return node;\n  }\n  visitArrayPattern(node) {\n    const elements = this.visitNodeList(node.elements);\n    if (elements !== node.elements)\n      return new ArrayPattern(elements);\n    return node;\n  }\n  visitArrowFunctionExpression(node) {\n    const id = this.visit(node.id);\n    const params = this.visitNodeList(node.params);\n    const body = this.visit(node.body);\n    if (id !== node.id || params !== node.params || body !== node.body) {\n      const ret = new ArrowFunctionExpression(params, body, node.expression, node.async);\n      ret.id = id;\n      return ret;\n    }\n    return node;\n  }\n  visitAwaitExpression(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new AwaitExpression(argument);\n    return node;\n  }\n  visitBlockStatement(node) {\n    const body = this.visitNodeList(node.body);\n    if (body !== node.body)\n      return new BlockStatement(body);\n    return node;\n  }\n  visitBinaryExpression(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    if (left !== node.left || right !== node.right)\n      return new BinaryExpression(node.operator, left, right);\n    return node;\n  }\n  visitBreakStatement(node) {\n    const label = this.visit(node.label);\n    if (label !== node.label)\n      return new BreakStatement(label);\n    return node;\n  }\n  visitCallExpression(node) {\n    const callee = this.visit(node.callee);\n    const args = this.visitNodeList(node.arguments);\n    if (callee !== node.callee || args !== node.arguments)\n      return new CallExpression(callee, args, node.optional);\n    return node;\n  }\n  visitCatchClause(node) {\n    const param = this.visit(node.param);\n    const body = this.visit(node.body);\n    if (param !== node.param || body !== node.body)\n      return new CatchClause(param, body);\n    return node;\n  }\n  visitChainExpression(node) {\n    const expression = this.visit(node.expression);\n    if (expression !== node.expression)\n      return new ChainExpression(expression);\n    return node;\n  }\n  visitClassBody(node) {\n    const body = this.visitNodeList(node.body);\n    if (body !== node.body)\n      return new ClassBody(body);\n    return node;\n  }\n  visitClassDeclaration(node) {\n    const id = this.visit(node.id);\n    const superClass = this.visit(node.superClass);\n    const body = this.visit(node.body);\n    const decorators = this.visitNodeList(node.decorators);\n    if (id !== node.id || superClass !== node.superClass || body !== node.body || decorators !== node.decorators)\n      return new ClassDeclaration(id, superClass, body, decorators);\n    return node;\n  }\n  visitClassExpression(node) {\n    const id = this.visit(node.id);\n    const superClass = this.visit(node.superClass);\n    const body = this.visit(node.body);\n    const decorators = this.visitNodeList(node.decorators);\n    if (id !== node.id || superClass !== node.superClass || body !== node.body || decorators !== node.decorators)\n      return new ClassExpression(id, superClass, body, decorators);\n    return node;\n  }\n  visitConditionalExpression(node) {\n    const test = this.visit(node.test);\n    const consequent = this.visit(node.consequent);\n    const alternate = this.visit(node.alternate);\n    if (test !== node.test || consequent !== node.consequent || alternate !== node.alternate)\n      return new ConditionalExpression(test, consequent, alternate);\n    return node;\n  }\n  visitContinueStatement(node) {\n    const label = this.visit(node.label);\n    if (label !== node.label)\n      return new ContinueStatement(label);\n    return node;\n  }\n  visitDecorator(node) {\n    const expression = this.visit(node.expression);\n    if (expression !== node.expression)\n      return new Decorator(expression);\n    return node;\n  }\n  visitDoWhileStatement(node) {\n    const body = this.visit(node.body);\n    const test = this.visit(node.test);\n    if (body !== node.body || test !== node.test)\n      return new DoWhileStatement(body, test);\n    return node;\n  }\n  visitDebuggerStatement(node) {\n    return node;\n  }\n  visitEmptyStatement(node) {\n    return node;\n  }\n  visitExportAllDeclaration(node) {\n    const source = this.visit(node.source);\n    const exported = this.visit(node.exported);\n    const assertions = this.visitNodeList(node.assertions);\n    if (source !== node.source || exported !== node.exported || assertions !== node.assertions)\n      return new ExportAllDeclaration(source, exported, assertions);\n    return node;\n  }\n  visitExportDefaultDeclaration(node) {\n    const declaration = this.visit(node.declaration);\n    if (declaration !== node.declaration)\n      return new ExportDefaultDeclaration(declaration);\n    return node;\n  }\n  visitExportNamedDeclaration(node) {\n    const declaration = this.visit(node.declaration);\n    const specifiers = this.visitNodeList(node.specifiers);\n    const source = this.visit(node.source);\n    const assertions = this.visitNodeList(node.assertions);\n    if (declaration !== node.declaration || specifiers !== node.specifiers || source !== node.source || assertions !== node.assertions)\n      return new ExportNamedDeclaration(declaration, specifiers, source, assertions);\n    return node;\n  }\n  visitExportSpecifier(node) {\n    const exported = this.visit(node.exported);\n    const local = this.visit(node.local);\n    if (exported !== node.exported || local !== node.local)\n      return new ExportSpecifier(exported, local);\n    return node;\n  }\n  visitExpressionStatement(node) {\n    const expression = this.visit(node.expression);\n    if (expression !== node.expression)\n      return new ExpressionStatement(expression);\n    return node;\n  }\n  visitForStatement(node) {\n    const init = this.visit(node.init);\n    const test = this.visit(node.test);\n    const update = this.visit(node.update);\n    const body = this.visit(node.body);\n    if (init !== node.init || test !== node.test || update !== node.update || body !== node.body)\n      return new ForStatement(init, test, update, body);\n    return node;\n  }\n  visitForOfStatement(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    const body = this.visit(node.body);\n    if (left !== node.left || right !== node.right || body !== node.body)\n      return new ForOfStatement(left, right, body, node.await);\n    return node;\n  }\n  visitForInStatement(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    const body = this.visit(node.body);\n    if (left !== node.left || right !== node.right || body !== node.body)\n      return new ForInStatement(left, right, body);\n    return node;\n  }\n  visitFunctionDeclaration(node) {\n    const id = this.visit(node.id);\n    const params = this.visitNodeList(node.params);\n    const body = this.visit(node.body);\n    if (id !== node.id || params !== node.params || body !== node.body)\n      return new FunctionDeclaration(id, params, body, node.generator);\n    return node;\n  }\n  visitFunctionExpression(node) {\n    const id = this.visit(node.id);\n    const params = this.visitNodeList(node.params);\n    const body = this.visit(node.body);\n    if (id !== node.id || params !== node.params || body !== node.body)\n      return new FunctionExpression(id, params, body, node.generator, node.async);\n    return node;\n  }\n  visitIdentifier(node) {\n    return node;\n  }\n  visitIfStatement(node) {\n    const test = this.visit(node.test);\n    const consequent = this.visit(node.consequent);\n    const alternate = this.visit(node.alternate);\n    if (test !== node.test || consequent !== node.consequent || alternate !== node.alternate)\n      return new IfStatement(test, consequent, alternate);\n    return node;\n  }\n  visitImportAttribute(node) {\n    const key = this.visit(node.key);\n    const value = this.visit(node.value);\n    if (key !== node.key || value !== node.value)\n      return new ImportAttribute(key, value);\n    return node;\n  }\n  visitImportExpression(node) {\n    const source = this.visit(node.source);\n    const attributes = this.visit(node.attributes);\n    if (source !== node.source || attributes !== node.attributes)\n      return new ImportExpression(source, attributes);\n    return node;\n  }\n  visitImportDeclaration(node) {\n    const specifiers = this.visitNodeList(node.specifiers);\n    const source = this.visit(node.source);\n    const assertions = this.visitNodeList(node.assertions);\n    if (specifiers !== node.specifiers || source !== node.source || assertions !== node.assertions)\n      return new ImportDeclaration(specifiers, source, assertions);\n    return node;\n  }\n  visitImportDefaultSpecifier(node) {\n    const local = this.visit(node.local);\n    if (local !== node.local)\n      return new ImportDefaultSpecifier(local);\n    return node;\n  }\n  visitImportNamespaceSpecifier(node) {\n    const local = this.visit(node.local);\n    if (local !== node.local)\n      return new ImportNamespaceSpecifier(local);\n    return node;\n  }\n  visitImportSpecifier(node) {\n    const local = this.visit(node.local);\n    const imported = this.visit(node.imported);\n    if (local !== node.local || imported !== node.imported)\n      return new ImportSpecifier(local, imported);\n    return node;\n  }\n  visitLiteral(node) {\n    return node;\n  }\n  visitLabeledStatement(node) {\n    const label = this.visit(node.label);\n    const body = this.visit(node.body);\n    if (label !== node.label || body !== node.body)\n      return new LabeledStatement(label, body);\n    return node;\n  }\n  visitLogicalExpression(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    if (left !== node.left || right !== node.right)\n      return new LogicalExpression(node.operator, left, right);\n    return node;\n  }\n  visitMemberExpression(node) {\n    const _object = this.visit(node.object);\n    const property = this.visit(node.property);\n    if (_object !== node.object || property !== node.property)\n      return new MemberExpression(node.computed, _object, property, node.optional);\n    return node;\n  }\n  visitMetaProperty(node) {\n    const meta = this.visit(node.meta);\n    const property = this.visit(node.property);\n    if (meta !== node.meta || property !== node.property)\n      return new MetaProperty(meta, property);\n    return node;\n  }\n  visitMethodDefinition(node) {\n    const key = this.visit(node.key);\n    const value = this.visit(node.value);\n    const decorators = this.visitNodeList(node.decorators);\n    if (key !== node.key || value !== node.value || decorators !== node.decorators)\n      return new MethodDefinition(key, node.computed, value, node.kind, node.static, decorators);\n    return node;\n  }\n  visitNewExpression(node) {\n    const callee = this.visit(node.callee);\n    const args = this.visitNodeList(node.arguments);\n    if (callee !== node.callee || args !== node.arguments)\n      return new NewExpression(callee, args);\n    return node;\n  }\n  visitObjectExpression(node) {\n    const properties = this.visitNodeList(node.properties);\n    if (properties !== node.properties)\n      return new ObjectExpression(properties);\n    return node;\n  }\n  visitObjectPattern(node) {\n    const properties = this.visitNodeList(node.properties);\n    if (properties !== node.properties)\n      return new ObjectPattern(properties);\n    return node;\n  }\n  visitProgram(node) {\n    const body = this.visitNodeList(node.body);\n    if (body !== node.body)\n      return new Program(node.sourceType, body);\n    return node;\n  }\n  visitProperty(node) {\n    const key = this.visit(node.key);\n    const value = this.visit(node.value);\n    const decorators = this.visitNodeList(node.decorators);\n    if (key !== node.key || value !== node.value || decorators !== decorators) {\n      if (\"kind\" in node)\n        return new Property(node.kind, key, node.computed, value, node.method, node.shorthand);\n      else\n        return new PropertyDefinition(key, node.computed, value, node.static, decorators);\n    }\n    return node;\n  }\n  visitPrivateIdentifier(node) {\n    return node;\n  }\n  visitRestElement(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new RestElement(argument);\n    return node;\n  }\n  visitReturnStatement(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new ReturnStatement(argument);\n    return node;\n  }\n  visitSequenceExpression(node) {\n    const expressions = this.visitNodeList(node.expressions);\n    if (expressions !== node.expressions)\n      return new SequenceExpression(expressions);\n    return node;\n  }\n  visitSpreadElement(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new SpreadElement(argument);\n    return node;\n  }\n  visitStaticBlock(node) {\n    const body = this.visitNodeList(node.body);\n    if (body !== node.body)\n      return new StaticBlock(body);\n    return node;\n  }\n  visitSuper(node) {\n    return node;\n  }\n  visitSwitchCase(node) {\n    const test = this.visit(node.test);\n    const consequent = this.visitNodeList(node.consequent);\n    if (test !== node.test || consequent !== node.consequent)\n      return new SwitchCase(test, consequent);\n    return node;\n  }\n  visitSwitchStatement(node) {\n    const discriminant = this.visit(node.discriminant);\n    const cases = this.visitNodeList(node.cases);\n    if (discriminant !== node.discriminant || cases !== node.cases)\n      return new SwitchStatement(discriminant, cases);\n    return node;\n  }\n  visitTaggedTemplateExpression(node) {\n    const tag = this.visit(node.tag);\n    const quasi = this.visit(node.quasi);\n    if (tag !== node.tag || quasi !== node.quasi)\n      return new TaggedTemplateExpression(tag, quasi);\n    return node;\n  }\n  visitTemplateElement(node) {\n    return node;\n  }\n  visitTemplateLiteral(node) {\n    const quasis = this.visitNodeList(node.quasis);\n    const expressions = this.visitNodeList(node.expressions);\n    if (quasis !== node.quasis || expressions !== node.expressions)\n      return new TemplateLiteral(quasis, expressions);\n    return node;\n  }\n  visitThisExpression(node) {\n    return node;\n  }\n  visitThrowStatement(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new ThrowStatement(argument);\n    return node;\n  }\n  visitTryStatement(node) {\n    const block = this.visit(node.block);\n    const handler = this.visit(node.handler);\n    const finalizer = this.visit(node.finalizer);\n    if (block !== node.block || handler !== node.handler || finalizer !== node.finalizer)\n      return new TryStatement(block, handler, finalizer);\n    return node;\n  }\n  visitUnaryExpression(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new UnaryExpression(node.operator, argument);\n    return node;\n  }\n  visitUpdateExpression(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new UpdateExpression(node.operator, argument, node.prefix);\n    return node;\n  }\n  visitVariableDeclaration(node) {\n    const declarations = this.visitNodeList(node.declarations);\n    if (declarations !== node.declarations)\n      return new VariableDeclaration(declarations, node.kind);\n    return node;\n  }\n  visitVariableDeclarator(node) {\n    const id = this.visit(node.id);\n    const init = this.visit(node.init);\n    if (id !== node.id || init !== node.init)\n      return new VariableDeclarator(id, init);\n    return node;\n  }\n  visitWhileStatement(node) {\n    const test = this.visit(node.test);\n    const body = this.visit(node.body);\n    if (test !== node.test || body !== node.body)\n      return new WhileStatement(test, body);\n    return node;\n  }\n  visitWithStatement(node) {\n    const _object = this.visit(node.object);\n    const body = this.visit(node.body);\n    if (_object !== node.object || body !== node.body)\n      return new WithStatement(_object, body);\n    return node;\n  }\n  visitYieldExpression(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new YieldExpression(argument, node.delegate);\n    return node;\n  }\n};\n\n// src/esprima.ts\nfunction parse(code, options, delegate) {\n  let commentHandler = null;\n  const proxyDelegate = (node, metadata) => {\n    if (delegate) {\n      delegate(node, metadata);\n    }\n    if (commentHandler) {\n      commentHandler.visit(node, metadata);\n    }\n  };\n  let parserDelegate = typeof delegate === \"function\" ? proxyDelegate : null;\n  let collectComment = false;\n  if (options) {\n    collectComment = typeof options.comment === \"boolean\" && options.comment;\n    const attachComment = typeof options.attachComment === \"boolean\" && options.attachComment;\n    if (collectComment || attachComment) {\n      commentHandler = new CommentHandler();\n      commentHandler.attach = attachComment;\n      options.comment = true;\n      parserDelegate = proxyDelegate;\n    }\n  }\n  let isModule = false;\n  if (options && typeof options.sourceType === \"string\") {\n    isModule = options.sourceType === \"module\";\n  }\n  let parser;\n  if (options && typeof options.jsx === \"boolean\" && options.jsx) {\n    parser = new JSXParser(code, options, parserDelegate);\n  } else {\n    parser = new Parser(code, options, parserDelegate);\n  }\n  const program = isModule ? parser.parseModule() : parser.parseScript();\n  const ast = program;\n  if (collectComment && commentHandler) {\n    ast.comments = commentHandler.comments;\n  }\n  if (parser.config.tokens) {\n    ast.tokens = parser.tokens;\n  }\n  if (parser.config.tolerant) {\n    ast.errors = parser.errorHandler.errors;\n  }\n  return ast;\n}\nfunction parseModule(code, options, delegate) {\n  const parsingOptions = options || {};\n  parsingOptions.sourceType = \"module\";\n  return parse(code, parsingOptions, delegate);\n}\nfunction parseScript(code, options, delegate) {\n  const parsingOptions = options || {};\n  parsingOptions.sourceType = \"script\";\n  return parse(code, parsingOptions, delegate);\n}\nfunction tokenize(code, options, delegate) {\n  const tokenizer = new Tokenizer(code, options);\n  const tokens = [];\n  try {\n    while (true) {\n      let token = tokenizer.getNextToken();\n      if (!token) {\n        break;\n      }\n      if (delegate) {\n        token = delegate(token);\n      }\n      tokens.push(token);\n    }\n  } catch (e) {\n    tokenizer.errorHandler.tolerate(e);\n  }\n  if (tokenizer.errorHandler.tolerant) {\n    tokens.errors = tokenizer.errors();\n  }\n  return tokens;\n}\nvar version = \"6.0.2\";\nvar esprima_default = {\n  parse,\n  parseModule,\n  parseScript,\n  tokenize,\n  Syntax,\n  version\n};\nexport {\n  ArrayExpression,\n  ArrayPattern,\n  ArrowFunctionExpression,\n  AssignmentExpression,\n  AssignmentPattern,\n  AsyncFunctionDeclaration,\n  AwaitExpression,\n  BigIntLiteral,\n  BinaryExpression,\n  BlockStatement,\n  BreakStatement,\n  CallExpression,\n  CatchClause,\n  ChainExpression,\n  ClassBody,\n  ClassDeclaration,\n  ClassExpression,\n  ConditionalExpression,\n  ContinueStatement,\n  DebuggerStatement,\n  Decorator,\n  Directive,\n  DoWhileStatement,\n  EmptyStatement,\n  ExportAllDeclaration,\n  ExportDefaultDeclaration,\n  ExportNamedDeclaration,\n  ExportSpecifier,\n  ExpressionStatement,\n  ForInStatement,\n  ForOfStatement,\n  ForStatement,\n  FunctionDeclaration,\n  FunctionExpression,\n  Identifier,\n  IfStatement,\n  ImportAttribute,\n  ImportDeclaration,\n  ImportDefaultSpecifier,\n  ImportExpression,\n  ImportNamespaceSpecifier,\n  ImportSpecifier,\n  LabeledStatement,\n  Literal,\n  LogicalExpression,\n  MemberExpression,\n  MetaProperty,\n  MethodDefinition,\n  Module,\n  NewExpression,\n  nodes_exports as Nodes,\n  ObjectExpression,\n  ObjectPattern,\n  PrivateIdentifier,\n  Program,\n  Property,\n  PropertyDefinition,\n  RegexLiteral,\n  RestElement,\n  ReturnStatement,\n  Script,\n  SequenceExpression,\n  SpreadElement,\n  StaticBlock,\n  Super,\n  SwitchCase,\n  SwitchStatement,\n  Syntax,\n  TaggedTemplateExpression,\n  TemplateElement,\n  TemplateLiteral,\n  ThisExpression,\n  ThrowStatement,\n  TryStatement,\n  UnaryExpression,\n  UpdateExpression,\n  VariableDeclaration,\n  VariableDeclarator,\n  Visitor,\n  WhileStatement,\n  WithStatement,\n  YieldExpression,\n  esprima_default as default,\n  parse,\n  parseModule,\n  parseScript,\n  tokenize,\n  version\n};\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE: ContentIndex \u2014 Trie-Based Search Index\r\n *\r\n * ContentIndex provides a compressed trie data structure for fast term lookup\r\n * across project content. It is the shared search engine used by:\r\n *\r\n * 1. **Omni Search (Ctrl+E)** \u2014 Bottom status bar in the editor. Uses\r\n *    `getDescendentStrings()` for autocomplete term suggestions and\r\n *    `getMatches()` for finding matched project item paths.\r\n *\r\n * 2. **Search in Files (Ctrl+Shift+F)** \u2014 ProjectSearchDialog uses the\r\n *    index to prioritize candidate files before doing brute-force text scan.\r\n *\r\n * 3. **Quick Open (Ctrl+P)** \u2014 QuickOpenDialog uses simple path includes()\r\n *    but could be enhanced to use this index in the future.\r\n *\r\n * **Data Structure:**\r\n * - `items[]` \u2014 Array of indexed values (file paths like `/bp/entities/pig.json`)\r\n * - `trie{}` \u2014 Compressed trie mapping search terms \u2192 arrays of item indices\r\n *   - Terminal nodes use `\u00B1` or `$` markers\r\n *   - Annotated entries use `IAnnotatedIndexData { n: number, a: string }`\r\n *\r\n * **Index Population (ProjectInfoSet.ts):**\r\n * - File base names (e.g., \"pig\" from \"pig.json\")\r\n * - Storage relative paths (e.g., \"entities/pig.json\")\r\n * - Parsed JSON content tokens (words > 2 chars)\r\n * - Parsed JS/TS tokens via esprima\r\n * - Entity/block/item type IDs from info generators (with annotation categories)\r\n *\r\n * **Key Methods:**\r\n * - `getMatches(searchString)` \u2014 Multi-term AND search. Splits on spaces,\r\n *   intersects results across terms. Each term is matched via both trie\r\n *   traversal and linear substring scan of items[].\r\n * - `getDescendentStrings(term)` \u2014 Returns all trie entries starting with\r\n *   the given prefix (for autocomplete dropdown).\r\n * - `getTermMatch(term)` \u2014 Single-term lookup: trie traversal + linear\r\n *   substring scan of items[] for path matching.\r\n * - `insert(key, item, annotation?)` \u2014 Inserts a term into the trie.\r\n *\r\n * **Configuration:**\r\n * - `startLength` \u2014 Minimum input length before autocomplete triggers (currently 3).\r\n * - JSON token threshold \u2014 Tokens > 2 chars are indexed from parsed content.\r\n *\r\n * Last updated: February 2026\r\n */\r\n\r\nimport ProjectUtilities from \"../app/ProjectUtilities\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IAnnotatedValue } from \"./AnnotatedValue\";\r\nimport { HashCatalog } from \"./HashUtilities\";\r\nimport IContextIndexData from \"./IContentIndexData\";\r\nimport Log from \"./Log\";\r\nimport Utilities from \"./Utilities\";\r\nimport esprima from \"esprima-next\";\r\n\r\nexport enum AnnotationCategory {\r\n  blockTextureReferenceSource = \"a\",\r\n  blockTypeDependent = \"b\",\r\n  entityComponentDependent = \"c\",\r\n  blockComponentDependent = \"d\",\r\n  entityTypeDependent = \"e\",\r\n  entityFilter = \"f\",\r\n  entityComponentDependentInGroup = \"g\",\r\n  blockTextureReferenceDependent = \"h\",\r\n  itemTypeDependent = \"i\",\r\n  itemComponentDependent = \"j\",\r\n  itemTextureReferenceSource = \"k\",\r\n  featureSource = \"l\",\r\n  featureDependent = \"m\",\r\n  featureRuleSource = \"n\",\r\n  blockComponentDependentInPermutation = \"p\",\r\n  storagePathDependent = \"s\",\r\n  textureFile = \"t\",\r\n  entityEvent = \"v\",\r\n  blockTypeSource = \"B\",\r\n  entityTypeSource = \"E\",\r\n  itemTypeSource = \"I\",\r\n  itemTextureSource = \"J\",\r\n  blockSounds = \"L\",\r\n  musicDefinitionSource = \"M\",\r\n  entitySounds = \"N\",\r\n  interactiveSounds = \"R\",\r\n  jsSource = \"S\",\r\n  terrainTextureSource = \"T\",\r\n  soundDefinitionSource = \"U\",\r\n  individualEventSoundsSource = \"V\",\r\n  worldProperty = \"W\",\r\n  experiment = \"X\",\r\n\r\n  // Cross-reference completion annotation categories\r\n  geometrySource = \"G\",\r\n  animationSource = \"A\",\r\n  animationControllerSource = \"C\",\r\n  renderControllerSource = \"D\",\r\n  particleSource = \"P\",\r\n  fogSource = \"F\",\r\n  lootTableSource = \"O\",\r\n  recipeSource = \"Q\",\r\n  biomeSource = \"Y\",\r\n  spawnRuleSource = \"Z\",\r\n  structureSource = \"r\",\r\n  dialogueSource = \"q\",\r\n  functionSource = \"u\",\r\n  soundEventSource = \"w\",\r\n\r\n  // Component-level annotation categories for biomes and particles\r\n  biomeBehaviorComponentDependent = \"x\",\r\n  biomeClientComponentDependent = \"y\",\r\n  particleEmitterComponentDependent = \"z\",\r\n  particleComponentDependent = \"pc\",\r\n}\r\n\r\nexport interface IAnnotatedIndexData {\r\n  n: number;\r\n  a: string;\r\n}\r\n\r\nexport interface IContentIndex {\r\n  getDescendentStrings(term: string): Promise<{ [fullKey: string]: IAnnotatedValue[] | undefined } | undefined>;\r\n  getMatches(\r\n    searchString: string,\r\n    wholeTermSearch?: boolean,\r\n    withAnnotation?: AnnotationCategory[]\r\n  ): Promise<IAnnotatedValue[] | undefined>;\r\n  startLength: number;\r\n}\r\n\r\nexport default class ContentIndex implements IContentIndex {\r\n  private _processedPathsCache?: string[];\r\n  private _hashCatalog: HashCatalog = {};\r\n\r\n  // O(1) lookup map: item string \u2192 index in items[]. Replaces O(n) linear scans\r\n  // in insert() and getTermMatch(). Rebuilt on setItems().\r\n  private _itemIndexMap: Map<string, number> = new Map();\r\n\r\n  #data: IContextIndexData = {\r\n    items: [],\r\n    trie: {},\r\n  };\r\n\r\n  public get hashCatalog(): HashCatalog {\r\n    return this._hashCatalog;\r\n  }\r\n\r\n  #iteration: number = Math.floor(Math.random() * 1000000);\r\n\r\n  get iteration() {\r\n    return this.#iteration;\r\n  }\r\n\r\n  set iteration(newIteration: number) {\r\n    this.#iteration = newIteration;\r\n  }\r\n\r\n  static getAnnotationCategoryKeys() {\r\n    const keys: string[] = [];\r\n\r\n    for (const key in AnnotationCategory) {\r\n      keys.push(key.toLowerCase());\r\n    }\r\n\r\n    return keys;\r\n  }\r\n\r\n  static getAnnotationCategoryFromLongString(longStr: string) {\r\n    longStr = longStr.toLowerCase();\r\n\r\n    for (const key in AnnotationCategory) {\r\n      if (key.toLowerCase() === longStr) {\r\n        return (AnnotationCategory as { [keyName: string]: string })[key];\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get data() {\r\n    return this.#data;\r\n  }\r\n\r\n  get startLength() {\r\n    return 3;\r\n  }\r\n\r\n  get items() {\r\n    return this.#data.items;\r\n  }\r\n\r\n  setItems(items: string[]) {\r\n    this.#data.items = items;\r\n    this._processedPathsCache = undefined; // reset processed paths cache\r\n\r\n    // Rebuild the O(1) lookup map from the new items array\r\n    this._itemIndexMap.clear();\r\n    for (let i = 0; i < items.length; i++) {\r\n      this._itemIndexMap.set(items[i], i);\r\n    }\r\n  }\r\n\r\n  setTrie(trie: {}) {\r\n    this.#data.trie = trie;\r\n  }\r\n\r\n  getAll(withAnnotation?: AnnotationCategory[]): { [fullKey: string]: IAnnotatedValue[] } {\r\n    const results: { [fullKey: string]: IAnnotatedValue[] } = {};\r\n\r\n    this._appendToResults(\"\", this.#data.trie, results, withAnnotation);\r\n\r\n    return results;\r\n  }\r\n\r\n  _appendToResults(\r\n    prefix: string,\r\n    node: any,\r\n    results: { [fullKey: string]: IAnnotatedValue[] | undefined },\r\n    withAnnotation?: AnnotationCategory[]\r\n  ) {\r\n    for (const token in node) {\r\n      const subNode = node[token];\r\n\r\n      if (subNode) {\r\n        if (token === \"\u00B1\" || token === \"$\") {\r\n          const arr = subNode;\r\n\r\n          if (Array.isArray(arr)) {\r\n            if (Utilities.isUsableAsObjectKey(prefix)) {\r\n              let res = this.getValuesFromIndexArray(arr, withAnnotation);\r\n\r\n              if (res) {\r\n                results[prefix] = res;\r\n              }\r\n            }\r\n          }\r\n        } else if (Array.isArray(subNode)) {\r\n          if (Utilities.isUsableAsObjectKey(prefix + token)) {\r\n            let res = this.getValuesFromIndexArray(subNode, withAnnotation);\r\n\r\n            if (res) {\r\n              results[prefix + token] = res;\r\n            }\r\n          }\r\n        } else {\r\n          this._appendToResults(prefix + token, subNode, results, withAnnotation);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  mergeFrom(index: ContentIndex, newItem: string) {\r\n    const all = index.getAll();\r\n\r\n    for (const fullKey in all) {\r\n      const annVals = all[fullKey];\r\n\r\n      let annVal: string | undefined;\r\n\r\n      for (const subVal of annVals) {\r\n        if (subVal.annotation) {\r\n          if (!annVal) {\r\n            annVal = subVal.annotation;\r\n          } else if (annVal.indexOf(subVal.annotation) < 0) {\r\n            annVal += subVal.annotation;\r\n          }\r\n        }\r\n      }\r\n\r\n      this.insert(fullKey, newItem, annVal);\r\n    }\r\n  }\r\n\r\n  static processResultValues(annotatedValues: IAnnotatedValue[] | undefined, withAnyAnnotation?: AnnotationCategory[]) {\r\n    if (!annotatedValues) {\r\n      return undefined;\r\n    }\r\n\r\n    if (withAnyAnnotation) {\r\n      let newAnnotatedValues: IAnnotatedValue[] = [];\r\n\r\n      for (const annV of annotatedValues) {\r\n        if (annV.annotation && withAnyAnnotation.includes(annV.annotation as AnnotationCategory)) {\r\n          newAnnotatedValues.push(annV);\r\n        }\r\n      }\r\n\r\n      annotatedValues = newAnnotatedValues;\r\n    }\r\n\r\n    return annotatedValues;\r\n  }\r\n\r\n  getValuesFromIndexArray(\r\n    indices: (IAnnotatedIndexData | number)[],\r\n    withAnnotation?: AnnotationCategory[]\r\n  ): IAnnotatedValue[] | undefined {\r\n    let results: IAnnotatedValue[] = [];\r\n\r\n    if (!indices) {\r\n      return undefined;\r\n    }\r\n\r\n    if (Utilities.arrayHasNegativeAndIsNumeric(indices)) {\r\n      indices = Utilities.decodeSequentialRunLengthUsingNegative(indices as number[]);\r\n    }\r\n\r\n    for (const index of indices) {\r\n      if (typeof index === \"object\") {\r\n        const indexN = (index as IAnnotatedIndexData).n;\r\n        if (indexN >= 0 && indexN < this.#data.items.length) {\r\n          const annotate = index.a;\r\n\r\n          if (!withAnnotation || withAnnotation.includes(annotate as AnnotationCategory)) {\r\n            results.push({ value: this.#data.items[indexN], annotation: (index as IAnnotatedIndexData).a });\r\n          }\r\n        }\r\n      } else if (index >= 0 && index < this.#data.items.length && !withAnnotation) {\r\n        results.push({ value: this.#data.items[index], annotation: undefined });\r\n      }\r\n    }\r\n\r\n    if (results.length === 0) {\r\n      return undefined;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  loadFromData(data: IContextIndexData) {\r\n    this.#data = data;\r\n    this._processedPathsCache = undefined; // reset processed paths cache\r\n  }\r\n\r\n  private _getProcessedPaths() {\r\n    if (this._processedPathsCache) return this._processedPathsCache;\r\n\r\n    this._processedPathsCache = this.data.items\r\n      .filter((item) => item.startsWith(\"/\"))\r\n      .map((item) => {\r\n        const lastPeriod = item.lastIndexOf(\".\");\r\n        return lastPeriod >= 0 ? item.substring(0, lastPeriod) : item;\r\n      });\r\n\r\n    return this._processedPathsCache;\r\n  }\r\n\r\n  hasPathMatches(pathEnd: string) {\r\n    pathEnd = pathEnd.toLowerCase();\r\n\r\n    pathEnd = StorageUtilities.stripExtension(pathEnd);\r\n\r\n    return this._getProcessedPaths().some((path) => path.endsWith(pathEnd));\r\n  }\r\n\r\n  getPathMatches(pathEnd: string) {\r\n    pathEnd = pathEnd.toLowerCase();\r\n\r\n    let pathType = ProjectUtilities.inferJsonProjectItemTypeFromExtension(pathEnd);\r\n    pathEnd = StorageUtilities.stripExtension(pathEnd);\r\n\r\n    const results: string[] = [];\r\n\r\n    for (const candPath of this.data.items) {\r\n      const candType = ProjectUtilities.inferJsonProjectItemTypeFromExtension(candPath);\r\n      const candPathStripped = StorageUtilities.stripExtension(candPath.toLowerCase());\r\n\r\n      if (candPathStripped.endsWith(pathEnd) && pathType === candType) {\r\n        results.push(StorageUtilities.stripExtension(candPath));\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async getMatches(searchString: string, wholeTermSearch?: boolean, withAnyAnnotation?: AnnotationCategory[]) {\r\n    if (typeof searchString !== \"string\") {\r\n      Log.unexpectedContentState(\"CIMGMS\");\r\n      return undefined;\r\n    }\r\n\r\n    searchString = searchString.trim().toLowerCase();\r\n\r\n    let terms = [searchString];\r\n\r\n    if (!wholeTermSearch) {\r\n      terms = searchString.split(\" \");\r\n    }\r\n\r\n    let termWasSearched = false;\r\n\r\n    let andResults: number[] | undefined;\r\n\r\n    for (const term of terms) {\r\n      if (term.length > 1) {\r\n        const results = this.getTermMatch(term);\r\n        termWasSearched = true;\r\n\r\n        if (results && results.length) {\r\n          if (andResults === undefined) {\r\n            andResults = results;\r\n          } else {\r\n            const newArr = [];\r\n\r\n            for (let num of results) {\r\n              if (andResults.includes(num)) {\r\n                newArr.push(num);\r\n              }\r\n            }\r\n\r\n            andResults = newArr;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (andResults === undefined || andResults.length === 0) {\r\n      if (termWasSearched) {\r\n        return [];\r\n      }\r\n\r\n      return undefined;\r\n    }\r\n\r\n    let annotatedValues = ContentIndex.processResultValues(this.getValuesFromIndexArray(andResults), withAnyAnnotation);\r\n\r\n    if (!annotatedValues) {\r\n      return undefined;\r\n    }\r\n\r\n    return annotatedValues.sort((a: IAnnotatedValue, b: IAnnotatedValue) => {\r\n      let aTermMatches = 0;\r\n      let bTermMatches = 0;\r\n      const aVal = a.value.toLowerCase();\r\n      const bVal = b.value.toLowerCase();\r\n\r\n      for (const term of terms) {\r\n        if (aVal.startsWith(term)) {\r\n          aTermMatches += 5;\r\n        } else if (aVal.includes(term)) {\r\n          aTermMatches++;\r\n        }\r\n\r\n        if (bVal.startsWith(term)) {\r\n          bTermMatches += 5;\r\n        } else if (bVal.includes(term)) {\r\n          bTermMatches++;\r\n        }\r\n      }\r\n\r\n      if (aTermMatches === bTermMatches) {\r\n        return Utilities.staticCompare(a.value, b.value);\r\n      }\r\n\r\n      return bTermMatches - aTermMatches;\r\n    });\r\n  }\r\n\r\n  getTermMatchStrings(term: string) {\r\n    const results = this.getTermMatch(term);\r\n\r\n    if (results === undefined) {\r\n      return results;\r\n    }\r\n\r\n    return this.getValuesFromIndexArray(results);\r\n  }\r\n\r\n  async getDescendentStrings(term: string) {\r\n    let termIndex = 0;\r\n    let curNode: any = this.#data.trie;\r\n\r\n    const results: { [fullKey: string]: IAnnotatedValue[] | undefined } = {};\r\n\r\n    let hasAdvanced = true;\r\n    let termSubstr = \"\";\r\n\r\n    while (termIndex < term.length && hasAdvanced) {\r\n      hasAdvanced = false;\r\n      if (Array.isArray(curNode)) {\r\n        return undefined;\r\n      }\r\n\r\n      let nextNode = curNode[term[termIndex]];\r\n      if (nextNode) {\r\n        curNode = nextNode;\r\n        termIndex++;\r\n\r\n        termSubstr = term.substring(0, termIndex);\r\n        hasAdvanced = true;\r\n      } else {\r\n        let nextStart = term[termIndex];\r\n\r\n        for (const item in curNode) {\r\n          // we've found part of our string in this node\r\n\r\n          if (item.startsWith(nextStart) && curNode[item] !== undefined) {\r\n            let itemIndex = 0;\r\n            hasAdvanced = true;\r\n            curNode = curNode[item];\r\n            termSubstr = term.substring(0, termIndex) + item;\r\n\r\n            while (termIndex < term.length && itemIndex < item.length && item[itemIndex] === term[termIndex]) {\r\n              itemIndex++;\r\n              termIndex++;\r\n            }\r\n\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (termIndex < term.length) {\r\n      const termStub = term.substring(termIndex);\r\n\r\n      for (const childNodeName in curNode) {\r\n        if (childNodeName.startsWith(termStub) && curNode[childNodeName]) {\r\n          this._appendToResults(term.substring(0, termIndex) + childNodeName, curNode[childNodeName], results);\r\n        }\r\n      }\r\n    } else {\r\n      if (Array.isArray(curNode)) {\r\n        results[termSubstr] = this.getValuesFromIndexArray(curNode);\r\n      } else if (curNode[\"\u00B1\"] !== undefined) {\r\n        this._appendToResults(termSubstr, curNode, results);\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getTermMatch(term: string) {\r\n    let termIndex = 0;\r\n    let curNode: any = this.#data.trie;\r\n\r\n    let hasAdvanced = true;\r\n\r\n    let pathMatches: number[] | undefined = undefined;\r\n\r\n    let i = 0;\r\n    for (const item of this.#data.items) {\r\n      if (item.indexOf(term) >= 0) {\r\n        if (!pathMatches) {\r\n          pathMatches = [];\r\n        }\r\n        pathMatches.push(i);\r\n      }\r\n\r\n      i++;\r\n    }\r\n\r\n    while (termIndex < term.length && hasAdvanced) {\r\n      hasAdvanced = false;\r\n      if (Array.isArray(curNode)) {\r\n        return undefined;\r\n      }\r\n\r\n      let nextNode = curNode[term[termIndex]];\r\n      if (nextNode) {\r\n        curNode = nextNode;\r\n        termIndex++;\r\n        hasAdvanced = true;\r\n      } else {\r\n        let nextStart = term[termIndex];\r\n\r\n        if (termIndex < term.length - 1) {\r\n          nextStart += term[termIndex + 1];\r\n        }\r\n\r\n        for (const item in curNode) {\r\n          // we've found part of our string in this node\r\n\r\n          if (item.startsWith(nextStart) && curNode[item] !== undefined && !hasAdvanced) {\r\n            let itemIndex = 0;\r\n            hasAdvanced = true;\r\n            curNode = curNode[item];\r\n\r\n            while (termIndex < term.length && itemIndex < item.length && item[itemIndex] === term[termIndex]) {\r\n              itemIndex++;\r\n              termIndex++;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (termIndex < term.length) {\r\n      return undefined;\r\n    }\r\n\r\n    if (Array.isArray(curNode)) {\r\n      if (pathMatches) {\r\n        return ContentIndex.mergeResults(curNode, pathMatches);\r\n      }\r\n      return curNode;\r\n    } else if (curNode[\"\u00B1\"] !== undefined) {\r\n      if (pathMatches) {\r\n        return ContentIndex.mergeResults(curNode[\"\u00B1\"], pathMatches);\r\n      }\r\n      return curNode[\"\u00B1\"];\r\n    } else {\r\n      const arr: number[] = [];\r\n\r\n      this.aggregateIndices(curNode, arr);\r\n\r\n      if (pathMatches) {\r\n        return ContentIndex.mergeResults(arr, pathMatches);\r\n      }\r\n\r\n      return arr;\r\n    }\r\n  }\r\n\r\n  static mergeResults(resultsArrA: (IAnnotatedValue | number)[], resultsArrB: (IAnnotatedValue | number)[]) {\r\n    const results: (IAnnotatedValue | number)[] = [];\r\n    const seenNumbers = new Set<number>();\r\n    const seenObjects = new Set<string>(); // \"value|annotation\" composite key\r\n\r\n    for (const item of resultsArrA) {\r\n      if (typeof item === \"object\") {\r\n        const key = `${item.value}|${item.annotation}`;\r\n        if (!seenObjects.has(key)) {\r\n          seenObjects.add(key);\r\n          results.push(item);\r\n        }\r\n      } else {\r\n        if (!seenNumbers.has(item)) {\r\n          seenNumbers.add(item);\r\n          results.push(item);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const item of resultsArrB) {\r\n      if (typeof item === \"object\") {\r\n        const key = `${item.value}|${item.annotation}`;\r\n        if (!seenObjects.has(key)) {\r\n          seenObjects.add(key);\r\n          results.push(item);\r\n        }\r\n      } else {\r\n        if (!seenNumbers.has(item)) {\r\n          seenNumbers.add(item);\r\n          results.push(item);\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  aggregateIndices(curNode: any, arr: number[], seen?: Set<number>) {\r\n    if (!seen) {\r\n      seen = new Set<number>(arr);\r\n    }\r\n\r\n    for (const childNodeName in curNode) {\r\n      const childNode = curNode[childNodeName];\r\n\r\n      if (childNode) {\r\n        if (Array.isArray(childNode)) {\r\n          for (const num of childNode) {\r\n            const n = typeof num === \"object\" ? num.n : num;\r\n            if (!seen.has(n)) {\r\n              seen.add(n);\r\n              arr.push(num);\r\n            }\r\n          }\r\n        } else if (childNode[\"\u00B1\"] !== undefined) {\r\n          for (const num of childNode[\"\u00B1\"]) {\r\n            const n = typeof num === \"object\" ? num.n : num;\r\n            if (!seen.has(n)) {\r\n              seen.add(n);\r\n              arr.push(num);\r\n            }\r\n          }\r\n        } else {\r\n          this.aggregateIndices(childNode, arr, seen);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  insertArray(key: string, items: IAnnotatedValue[]) {\r\n    for (const item of items) {\r\n      this.insert(key, item.value, item.annotation);\r\n    }\r\n  }\r\n\r\n  insert(key: string, item: string, annotationChar?: string) {\r\n    if (Utilities.isNumericIsh(key) || key.length > 70) {\r\n      return;\r\n    }\r\n\r\n    // since we treat \u00B1 as special, ban usage of \u00B1 in strings.\r\n    key = key.replace(/\u00B1/gi, \"\").toLowerCase().trim();\r\n\r\n    let keyIndex = 0;\r\n    let curNode: any = this.#data.trie;\r\n    let parentNode: any = curNode;\r\n    let curNodeIndex: string | undefined;\r\n    let dataIndex = -1;\r\n\r\n    // O(1) item lookup via Map (replaces O(n) linear scan)\r\n    const existingIndex = this._itemIndexMap.get(item);\r\n    if (existingIndex !== undefined) {\r\n      dataIndex = existingIndex;\r\n    }\r\n\r\n    if (dataIndex < 0) {\r\n      dataIndex = this.#data.items.length;\r\n      this.#data.items.push(item);\r\n      this._itemIndexMap.set(item, dataIndex);\r\n      this._processedPathsCache = undefined;\r\n    }\r\n\r\n    let hasAdvanced = true;\r\n    while (keyIndex < key.length && hasAdvanced) {\r\n      hasAdvanced = false;\r\n      if (!Array.isArray(curNode)) {\r\n        for (const item in curNode) {\r\n          // we've found part of our string in this node\r\n          if (item.startsWith(key[keyIndex]) && curNode[item] !== undefined) {\r\n            // && curNode[item].constructor !== Array) {\r\n            let itemIndex = 0;\r\n            hasAdvanced = true;\r\n            curNodeIndex = item;\r\n            parentNode = curNode;\r\n            curNode = curNode[item];\r\n\r\n            while (keyIndex < key.length && itemIndex < item.length && item[itemIndex] === key[keyIndex]) {\r\n              itemIndex++;\r\n              keyIndex++;\r\n            }\r\n\r\n            // if we're in the middle of a string like \"subset\", and we're trying add the word \"subpar\",\r\n            // create a new node called \"sub\" and place \"set\" underneath it.\r\n            // also support the case where we're adding \"sub\" but \"subset\" already exists (keyIndex === key.length)\r\n            if (item[itemIndex] !== key[keyIndex] && itemIndex < item.length && keyIndex <= key.length) {\r\n              parentNode[curNodeIndex] = undefined;\r\n              curNodeIndex = item.substring(0, itemIndex);\r\n\r\n              let newNode: any = {};\r\n\r\n              parentNode[curNodeIndex] = newNode;\r\n\r\n              const term = item.substring(itemIndex);\r\n\r\n              if (Utilities.isUsableAsObjectKey(term)) {\r\n                newNode[term] = curNode;\r\n              }\r\n\r\n              curNode = newNode;\r\n            }\r\n\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // we've reached the end of the trie; we need to add a new node\r\n    if (keyIndex < key.length) {\r\n      // if parent node was a leaf array, switch to an object\r\n      if (Array.isArray(curNode) && curNodeIndex) {\r\n        parentNode[curNodeIndex] = {};\r\n        parentNode[curNodeIndex][\"\u00B1\"] = curNode;\r\n\r\n        curNode = parentNode[curNodeIndex];\r\n      }\r\n\r\n      const substr = key.substring(keyIndex);\r\n\r\n      if (substr !== \"\u00B1\") {\r\n        if (Utilities.isUsableAsObjectKey(substr)) {\r\n          // create a new leaf array\r\n          curNode[substr] = this.ensureAnnotatedContentInArray([], dataIndex, annotationChar);\r\n        }\r\n      }\r\n    } else {\r\n      if (Array.isArray(curNode) && curNodeIndex) {\r\n        if (Utilities.isUsableAsObjectKey(curNodeIndex)) {\r\n          parentNode[curNodeIndex] = this.ensureAnnotatedContentInArray(curNode, dataIndex, annotationChar);\r\n        }\r\n      } else {\r\n        if (curNode[\"\u00B1\"] === undefined) {\r\n          curNode[\"\u00B1\"] = [];\r\n        }\r\n\r\n        curNode[\"\u00B1\"] = this.ensureAnnotatedContentInArray(curNode[\"\u00B1\"], dataIndex, annotationChar);\r\n      }\r\n    }\r\n  }\r\n\r\n  ensureAnnotatedContentInArray(arr: (IAnnotatedIndexData | number)[], dataIndex: number, annotationChar?: string) {\r\n    try {\r\n      for (const item of arr) {\r\n        if (typeof item === \"object\") {\r\n          if ((item as IAnnotatedIndexData).n === dataIndex) {\r\n            if (annotationChar) {\r\n              if (!(item as IAnnotatedIndexData).a) {\r\n                (item as IAnnotatedIndexData).a = annotationChar;\r\n              } else {\r\n                if ((item as IAnnotatedIndexData).a.indexOf(annotationChar) < 0) {\r\n                  (item as IAnnotatedIndexData).a += annotationChar;\r\n                }\r\n              }\r\n            }\r\n\r\n            return arr;\r\n          }\r\n        } else if (item === dataIndex) {\r\n          if (!annotationChar) {\r\n            return arr;\r\n          }\r\n\r\n          // convert simple number to annotated object\r\n          const newArr = [];\r\n\r\n          for (const existItem of arr) {\r\n            if (existItem !== dataIndex) {\r\n              newArr.push(existItem);\r\n            }\r\n          }\r\n\r\n          newArr.push({ n: dataIndex, a: annotationChar });\r\n\r\n          return newArr;\r\n        }\r\n      }\r\n\r\n      if (annotationChar) {\r\n        arr.push({ n: dataIndex, a: annotationChar });\r\n      } else {\r\n        arr.push(dataIndex);\r\n      }\r\n    } catch (e) {\r\n      Log.verbose(\"Error ensuring annotated content: \" + e + \"|\" + arr + \"|\" + JSON.stringify(arr));\r\n    }\r\n\r\n    return arr;\r\n  }\r\n\r\n  parseJsContent(sourcePath: string, content: string) {\r\n    try {\r\n      const results = esprima.tokenize(content);\r\n\r\n      if (results) {\r\n        for (const token of results) {\r\n          if (token.type === \"Identifier\" && token.value && token.value.length > 3) {\r\n            if (token.value !== \"from\") {\r\n              this.insert(token.value.toLowerCase(), sourcePath, \"S\");\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.debugAlert(\"JS parsing error:\" + e);\r\n    }\r\n  }\r\n\r\n  parseTextContent(sourcePath: string, content: string) {\r\n    const dictionaryOfTerms: { [term: string]: boolean | undefined } = {};\r\n\r\n    let curWord = \"\";\r\n\r\n    content = content.toLowerCase();\r\n\r\n    for (let i = 0; i < content.length; i++) {\r\n      const curChar = content[i];\r\n\r\n      if (\r\n        curChar === \"{\" ||\r\n        curChar === \"}\" ||\r\n        curChar === \" \" ||\r\n        curChar === \"\\r\" ||\r\n        curChar === \"\\n\" ||\r\n        curChar === \"\\t\" ||\r\n        curChar === \"(\" ||\r\n        curChar === \")\" ||\r\n        curChar === \"[\" ||\r\n        curChar === \"]\" ||\r\n        curChar === \":\" ||\r\n        curChar === '\"' ||\r\n        curChar === \"'\"\r\n      ) {\r\n        if (curWord.length > 0) {\r\n          if (curWord.length > 3 && !Utilities.isNumericIsh(curWord) && Utilities.isUsableAsObjectKey(curWord)) {\r\n            dictionaryOfTerms[curWord] = true;\r\n          }\r\n          curWord = \"\";\r\n        }\r\n      } else {\r\n        curWord += content[i];\r\n      }\r\n    }\r\n\r\n    for (const term in dictionaryOfTerms) {\r\n      this.insert(term, sourcePath);\r\n    }\r\n  }\r\n\r\n  parseJsonContent(sourcePath: string, content: string) {\r\n    const dictionaryOfTerms: { [term: string]: boolean | undefined } = {};\r\n\r\n    let curWord = \"\";\r\n\r\n    content = content.toLowerCase();\r\n\r\n    for (let i = 0; i < content.length; i++) {\r\n      const curChar = content[i];\r\n\r\n      if (\r\n        curChar === \"{\" ||\r\n        curChar === \"}\" ||\r\n        curChar === \" \" ||\r\n        curChar === \"\\r\" ||\r\n        curChar === \"\\n\" ||\r\n        curChar === \"\\t\" ||\r\n        curChar === \"(\" ||\r\n        curChar === \")\" ||\r\n        curChar === \"[\" ||\r\n        curChar === \"]\" ||\r\n        curChar === \":\" ||\r\n        curChar === '\"' ||\r\n        curChar === \"'\"\r\n      ) {\r\n        if (curWord.length > 0) {\r\n          if (curWord.length > 3 && !Utilities.isNumericIsh(curWord) && Utilities.isUsableAsObjectKey(curWord)) {\r\n            dictionaryOfTerms[curWord] = true;\r\n          }\r\n          curWord = \"\";\r\n        }\r\n      } else {\r\n        curWord += content[i];\r\n      }\r\n    }\r\n\r\n    for (const term in dictionaryOfTerms) {\r\n      this.insert(term, sourcePath);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Extracts indexable tokens from a parsed JSON object by recursively walking keys and string values.\r\n   * Much faster than parseJsonContent which does character-by-character text tokenization.\r\n   * Only processes keys and string values (the same tokens that parseJsonContent would find).\r\n   */\r\n  indexJsonObject(sourcePath: string, data: object) {\r\n    const terms = new Set<string>();\r\n\r\n    const depthExceeded = ContentIndex._collectJsonTerms(data, terms, 0);\r\n\r\n    if (depthExceeded) {\r\n      Log.debug(\r\n        \"ContentIndex: JSON nesting depth exceeded \" +\r\n          ContentIndex.MAX_JSON_DEPTH +\r\n          \" in '\" +\r\n          sourcePath +\r\n          \"'; skipping deeper levels.\"\r\n      );\r\n    }\r\n\r\n    for (const term of terms) {\r\n      this.insert(term, sourcePath);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Recursively collects indexable terms (keys and string values) from a parsed JSON object.\r\n   */\r\n  /** Max nesting depth for JSON term collection. Most Minecraft JSON stays under 10 levels, but features can reach ~25. */\r\n  private static readonly MAX_JSON_DEPTH = 30;\r\n\r\n  private static _collectJsonTerms(obj: any, terms: Set<string>, depth: number): boolean {\r\n    if (obj === null || obj === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (depth > ContentIndex.MAX_JSON_DEPTH) {\r\n      return true;\r\n    }\r\n\r\n    if (typeof obj === \"string\") {\r\n      ContentIndex._addStringTerms(obj, terms);\r\n      return false;\r\n    }\r\n\r\n    // Numbers, booleans, and other primitives are not indexable terms \u2014 skip them.\r\n    if (typeof obj !== \"object\") {\r\n      return false;\r\n    }\r\n\r\n    let exceeded = false;\r\n\r\n    if (Array.isArray(obj)) {\r\n      for (const item of obj) {\r\n        if (ContentIndex._collectJsonTerms(item, terms, depth + 1)) {\r\n          exceeded = true;\r\n        }\r\n      }\r\n      return exceeded;\r\n    }\r\n\r\n    for (const key in obj) {\r\n      // Index the key itself\r\n      const lowerKey = key.toLowerCase();\r\n      if (lowerKey.length > 3 && !Utilities.isNumericIsh(lowerKey) && Utilities.isUsableAsObjectKey(lowerKey)) {\r\n        terms.add(lowerKey);\r\n      }\r\n\r\n      // Recurse into values\r\n      const val = obj[key];\r\n      if (val !== null && val !== undefined) {\r\n        if (ContentIndex._collectJsonTerms(val, terms, depth + 1)) {\r\n          exceeded = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return exceeded;\r\n  }\r\n\r\n  /**\r\n   * Splits a string on common delimiters and adds qualifying terms.\r\n   * Matches the same tokenization logic as parseJsonContent's character loop.\r\n   */\r\n  /** Characters that act as word boundaries when tokenizing strings for indexing. */\r\n  private static readonly TERM_DELIMITERS = new Set([\r\n    \"{\",\r\n    \"}\",\r\n    \" \",\r\n    \"\\r\",\r\n    \"\\n\",\r\n    \"\\t\",\r\n    \"(\",\r\n    \")\",\r\n    \"[\",\r\n    \"]\",\r\n    \":\",\r\n    '\"',\r\n    \"'\",\r\n  ]);\r\n\r\n  private static _addStringTerms(str: string, terms: Set<string>) {\r\n    const lower = str.toLowerCase();\r\n    let curWord = \"\";\r\n\r\n    for (let i = 0; i < lower.length; i++) {\r\n      const c = lower[i];\r\n      if (ContentIndex.TERM_DELIMITERS.has(c)) {\r\n        if (curWord.length > 3 && !Utilities.isNumericIsh(curWord) && Utilities.isUsableAsObjectKey(curWord)) {\r\n          terms.add(curWord);\r\n        }\r\n        curWord = \"\";\r\n      } else {\r\n        curWord += c;\r\n      }\r\n    }\r\n    if (curWord.length > 3 && !Utilities.isNumericIsh(curWord) && Utilities.isUsableAsObjectKey(curWord)) {\r\n      terms.add(curWord);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IBlockResource, IBlocksCatalogResource } from \"./IBlocksCatalog\";\r\nimport Project, { FolderContext } from \"../app/Project\";\r\nimport { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport Database from \"./Database\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport BlockTypeDefinition from \"./BlockTypeDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport interface BlocksCatalogDependendencies {\r\n  unused: string[];\r\n  vanillaOverride: string[];\r\n}\r\n\r\nexport default class BlocksCatalogDefinition {\r\n  public blocksCatalog?: IBlocksCatalogResource;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<BlocksCatalogDefinition, BlocksCatalogDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<BlocksCatalogDefinition, BlocksCatalogDefinition>\r\n  ) {\r\n    let et: BlocksCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new BlocksCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof BlocksCatalogDefinition) {\r\n      et = file.manager as BlocksCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  getCatalogResource(id: string) {\r\n    if (!this.blocksCatalog) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.blocksCatalog[id]) {\r\n      return this.blocksCatalog[id];\r\n    }\r\n\r\n    const colon = id.indexOf(\":\");\r\n\r\n    if (colon >= 0) {\r\n      id = id.substring(colon + 1);\r\n    }\r\n\r\n    return this.blocksCatalog[id];\r\n  }\r\n\r\n  ensureCatalogResource(id: string) {\r\n    if (!this.blocksCatalog) {\r\n      this.blocksCatalog = {};\r\n    }\r\n\r\n    if (this.blocksCatalog[id]) {\r\n      return this.blocksCatalog[id];\r\n    }\r\n\r\n    const colon = id.indexOf(\":\");\r\n\r\n    if (colon >= 0) {\r\n      let noColonId = id.substring(colon + 1);\r\n      if (this.blocksCatalog[noColonId]) {\r\n        return this.blocksCatalog[noColonId];\r\n      }\r\n    }\r\n\r\n    this.blocksCatalog[id] = {};\r\n\r\n    return this.blocksCatalog[id];\r\n  }\r\n\r\n  setBlockDefinition(id: string, catalogResource: IBlockResource) {\r\n    if (!this.blocksCatalog) {\r\n      this.blocksCatalog = {};\r\n    }\r\n\r\n    if (this.blocksCatalog[id]) {\r\n      return this.blocksCatalog[id];\r\n    }\r\n\r\n    const colon = id.indexOf(\":\");\r\n\r\n    if (colon >= 0) {\r\n      let noColonId = id.substring(colon + 1);\r\n      if (this.blocksCatalog[noColonId]) {\r\n        return this.blocksCatalog[noColonId];\r\n      }\r\n    }\r\n\r\n    this.blocksCatalog[id] = catalogResource;\r\n\r\n    this.persist();\r\n    return this.blocksCatalog[id];\r\n  }\r\n\r\n  static async getBlockCatalog(project: Project) {\r\n    const blockCatalogItems = project.getItemsByType(ProjectItemType.blocksCatalogResourceJson);\r\n\r\n    if (blockCatalogItems && blockCatalogItems.length > 0) {\r\n      const blockCatalogItem = blockCatalogItems[0];\r\n\r\n      if (!blockCatalogItem.isContentLoaded) {\r\n        await blockCatalogItem.loadContent();\r\n      }\r\n\r\n      if (blockCatalogItem.primaryFile) {\r\n        return await BlocksCatalogDefinition.ensureOnFile(blockCatalogItem.primaryFile);\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureBlockCatalog(project: Project) {\r\n    let blockCatalog = await this.getBlockCatalog(project);\r\n\r\n    if (blockCatalog) {\r\n      return blockCatalog;\r\n    }\r\n\r\n    const defaultRp = await project.getDefaultResourcePackFolder();\r\n\r\n    if (defaultRp) {\r\n      const blockCatalogFile = defaultRp.ensureFile(\"blocks.json\");\r\n      blockCatalogFile.setContent('{\"format_version\": \"1.21.40\"}');\r\n\r\n      project.ensureItemFromFile(\r\n        blockCatalogFile,\r\n        ProjectItemType.blocksCatalogResourceJson,\r\n        FolderContext.resourcePack\r\n      );\r\n\r\n      return await BlocksCatalogDefinition.ensureOnFile(blockCatalogFile);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getDefaultTextureId(id: string) {\r\n    const ref = this.getCatalogResource(id);\r\n\r\n    if (ref && ref.textures) {\r\n      if (typeof ref.textures === \"string\") {\r\n        return ref.textures;\r\n      }\r\n\r\n      if (ref.textures[\"side\"]) {\r\n        return ref.textures[\"side\"];\r\n      } else if (ref.textures[\"up\"]) {\r\n        return ref.textures[\"up\"];\r\n      } else {\r\n        for (const key in ref.textures) {\r\n          return (ref.textures as any)[key];\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getTextureReferences() {\r\n    const textureRefs: string[] = [];\r\n    if (this.blocksCatalog) {\r\n      for (const resourceId in this.blocksCatalog) {\r\n        const resource = this.blocksCatalog[resourceId];\r\n\r\n        if (resource && resource.textures) {\r\n          if (!textureRefs.includes(resourceId)) {\r\n            textureRefs.push(resourceId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureRefs;\r\n  }\r\n\r\n  async getDependenciesList(project: Project) {\r\n    const dependencies: BlocksCatalogDependendencies = {\r\n      unused: [],\r\n      vanillaOverride: [],\r\n    };\r\n\r\n    if (this.blocksCatalog) {\r\n      const myBlockIds: { [name: string]: boolean } = {};\r\n\r\n      let projectItemsCopy = project.getItemsCopy();\r\n\r\n      for (const item of projectItemsCopy) {\r\n        if (item.itemType === ProjectItemType.blockTypeBehavior) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (item.primaryFile) {\r\n            const blockTypeDef = await BlockTypeDefinition.ensureOnFile(item.primaryFile);\r\n\r\n            if (blockTypeDef && blockTypeDef.id && Utilities.isUsableAsObjectKey(blockTypeDef.id)) {\r\n              myBlockIds[blockTypeDef.id] = true;\r\n\r\n              const colon = blockTypeDef.id.indexOf(\":\");\r\n              if (colon >= 0) {\r\n                const noColonId = blockTypeDef.id.substring(colon + 1);\r\n\r\n                myBlockIds[noColonId] = true;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      for (const resourceId in this.blocksCatalog) {\r\n        if (resourceId !== \"format_version\") {\r\n          const resource = this.blocksCatalog[resourceId];\r\n\r\n          if (resource && (resource.textures || resource.sound || resource.carried_textures)) {\r\n            if (!dependencies.unused.includes(resourceId) && !dependencies.vanillaOverride.includes(resourceId)) {\r\n              let foundMatch = myBlockIds[resourceId] === true;\r\n\r\n              if (!foundMatch) {\r\n                let resourceColon = resourceId.indexOf(\":\");\r\n\r\n                if (resourceColon < 0) {\r\n                  const vanillaTermMatches = await Database.getVanillaMatches(\"minecraft:\" + resourceId, true, [\r\n                    AnnotationCategory.blockTypeSource,\r\n                  ]);\r\n\r\n                  if (vanillaTermMatches && vanillaTermMatches.length > 0) {\r\n                    dependencies.vanillaOverride.push(resourceId);\r\n                    foundMatch = true;\r\n                  }\r\n                } else if (resourceId.startsWith(\"minecraft:\")) {\r\n                  const vanillaTermMatches = await Database.getVanillaMatches(resourceId, true, [\r\n                    AnnotationCategory.blockTypeSource,\r\n                  ]);\r\n\r\n                  if (vanillaTermMatches && vanillaTermMatches.length > 0) {\r\n                    dependencies.vanillaOverride.push(resourceId);\r\n                    foundMatch = true;\r\n                  }\r\n                }\r\n              }\r\n\r\n              if (!foundMatch) {\r\n                dependencies.unused.push(resourceId);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return dependencies;\r\n  }\r\n\r\n  removeId(id: string) {\r\n    if (this.blocksCatalog) {\r\n      (this.blocksCatalog[id] as any) = undefined;\r\n    }\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.blocksCatalog !== null, \"ITDP\");\r\n\r\n    if (!this.blocksCatalog) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.blocksCatalog);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"BCRDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this.blocksCatalog = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ITerrainTextureCatalog, ITerrainTextureDataItem } from \"./ITerrainTextureCatalog\";\r\nimport Project, { FolderContext } from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport IDefinition from \"./IDefinition\";\r\n\r\nexport default class TerrainTextureCatalogDefinition implements IDefinition {\r\n  private _data?: ITerrainTextureCatalog;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public id: string | undefined;\r\n\r\n  private _onLoaded = new EventDispatcher<TerrainTextureCatalogDefinition, TerrainTextureCatalogDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get textureData() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._data.texture_data === undefined) {\r\n      this._data.texture_data = {};\r\n    }\r\n\r\n    return this._data.texture_data;\r\n  }\r\n\r\n  public getTexturePathList() {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const key in this._data.texture_data) {\r\n      const texturePathArr = this._data.texture_data[key];\r\n\r\n      if (texturePathArr && texturePathArr.textures) {\r\n        if (typeof texturePathArr.textures === \"string\") {\r\n          textureList.push(texturePathArr.textures.toLowerCase());\r\n        } else if (Array.isArray(texturePathArr.textures)) {\r\n          for (const texturePath of texturePathArr.textures) {\r\n            if (typeof texturePath === \"string\") {\r\n              textureList.push(texturePath.toLowerCase());\r\n            } else if (texturePath.path) {\r\n              textureList.push(texturePath.path.toLowerCase());\r\n            } else if (typeof texturePath === \"object\" && (texturePath as any).variations) {\r\n              for (const variation of (texturePath as any).variations) {\r\n                if (typeof variation === \"string\") {\r\n                  textureList.push(variation.toLowerCase());\r\n                } else if (variation.path && typeof variation.path === \"string\") {\r\n                  textureList.push(variation.path.toLowerCase());\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get texturesIdList() {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureIdList = [];\r\n\r\n    for (const key in this._data.texture_data) {\r\n      textureIdList.push(key);\r\n    }\r\n\r\n    return textureIdList;\r\n  }\r\n\r\n  getTerrainTextureDefinition(id: string) {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.texture_data[id];\r\n  }\r\n\r\n  static async getTerrainTextureCatalog(project: Project) {\r\n    const terrainTextureItems = project.getItemsByType(ProjectItemType.terrainTextureCatalogResourceJson);\r\n\r\n    if (terrainTextureItems && terrainTextureItems.length > 0) {\r\n      if (!terrainTextureItems[0].isContentLoaded) {\r\n        await terrainTextureItems[0].loadContent();\r\n      }\r\n\r\n      if (terrainTextureItems[0].primaryFile) {\r\n        return await TerrainTextureCatalogDefinition.ensureOnFile(terrainTextureItems[0].primaryFile);\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureTerrainTextureCatalog(project: Project) {\r\n    let terrainTextureCatalog = await this.getTerrainTextureCatalog(project);\r\n\r\n    if (terrainTextureCatalog) {\r\n      return terrainTextureCatalog;\r\n    }\r\n\r\n    const defaultRp = await project.getDefaultResourcePackFolder();\r\n\r\n    if (defaultRp) {\r\n      const terrainTextureCatalogFile = await defaultRp.ensureFileFromRelativePath(\"/textures/terrain_texture.json\");\r\n\r\n      terrainTextureCatalogFile.setContent(\r\n        JSON.stringify({\r\n          texture_name: \"atlas.terrain\",\r\n          padding: 8,\r\n          num_mip_levels: 4,\r\n          texture_data: {},\r\n        })\r\n      );\r\n\r\n      project.ensureItemFromFile(\r\n        terrainTextureCatalogFile,\r\n        ProjectItemType.terrainTextureCatalogResourceJson,\r\n        FolderContext.resourcePack\r\n      );\r\n\r\n      return await TerrainTextureCatalogDefinition.ensureOnFile(terrainTextureCatalogFile);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<TerrainTextureCatalogDefinition, TerrainTextureCatalogDefinition>\r\n  ) {\r\n    let et: TerrainTextureCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new TerrainTextureCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof TerrainTextureCatalogDefinition) {\r\n      et = file.manager as TerrainTextureCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  getAllTexturePaths(textureId: string) {\r\n    if (!this.data || !this.data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const elt = this.data.texture_data[textureId];\r\n\r\n    if (!elt) {\r\n      return undefined;\r\n    }\r\n\r\n    if (typeof elt.textures === \"string\") {\r\n      return [elt.textures];\r\n    } else if (Array.isArray(elt.textures) && elt.textures.length > 0) {\r\n      const texturePaths: string[] = [];\r\n\r\n      for (const tex of elt.textures) {\r\n        if (typeof tex === \"string\") {\r\n          texturePaths.push(tex);\r\n        } else if (tex.path) {\r\n          texturePaths.push(tex.path);\r\n        }\r\n      }\r\n\r\n      return texturePaths;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getTexture(textureId: string) {\r\n    if (!this.data || !this.data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.data.texture_data[textureId];\r\n  }\r\n\r\n  setTexture(textureId: string, textureData: ITerrainTextureDataItem) {\r\n    if (!this.data || !this.data.texture_data) {\r\n      return;\r\n    }\r\n\r\n    this.data.texture_data[textureId] = textureData;\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getDefaultTexturePath(textureId: string) {\r\n    if (!this.data || !this.data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const elt = this.data.texture_data[textureId];\r\n\r\n    if (!elt) {\r\n      return undefined;\r\n    }\r\n\r\n    if (typeof elt.textures === \"string\") {\r\n      return elt.textures;\r\n    } else if (Array.isArray(elt.textures) && elt.textures.length > 0) {\r\n      if (typeof elt.textures[0] === \"string\") {\r\n        return elt.textures[0];\r\n      } else if (elt.textures[0].path) {\r\n        return elt.textures[0].path;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"TTCDF\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  getTextureReferences() {\r\n    const textureRefs: string[] = [];\r\n    if (this.data?.texture_data) {\r\n      for (const resourceId in this.data.texture_data) {\r\n        const resource = this.data.texture_data[resourceId];\r\n\r\n        if (resource && resource.textures) {\r\n          if (!textureRefs.includes(resourceId)) {\r\n            textureRefs.push(resourceId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureRefs;\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"textures\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let texturePathList = this.getTexturePathList();\r\n\r\n    for (const candItem of textureItems) {\r\n      if (packRootFolder && texturePathList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder);\r\n\r\n          if (relativePath) {\r\n            // texturePathList is lowercased, so we need to compare case-insensitively\r\n            const relativePathLower = relativePath.toLowerCase();\r\n            if (texturePathList && texturePathList.includes(relativePathLower)) {\r\n              item.addChildItem(candItem);\r\n\r\n              texturePathList = Utilities.removeItemInArray(relativePathLower, texturePathList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (texturePathList) {\r\n      for (const texturePath of texturePathList) {\r\n        item.addUnfulfilledRelationship(\r\n          texturePath,\r\n          ProjectItemType.texture,\r\n          await Database.isVanillaToken(texturePath)\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IDefinition from \"./IDefinition\";\r\n\r\nexport default class TypeScriptDefinition implements IDefinition {\r\n  private _data?: string;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<TypeScriptDefinition, TypeScriptDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get data() {\r\n    if (!this._file || !this._file.content || typeof this._file.content != \"string\") {\r\n      return undefined;\r\n    }\r\n\r\n    return this._file.content;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<TypeScriptDefinition, TypeScriptDefinition>) {\r\n    let tsd: TypeScriptDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      tsd = new TypeScriptDefinition();\r\n\r\n      tsd.file = file;\r\n\r\n      file.manager = tsd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof TypeScriptDefinition) {\r\n      tsd = file.manager as TypeScriptDefinition;\r\n\r\n      if (!tsd.isLoaded) {\r\n        if (loadHandler) {\r\n          tsd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await tsd.load();\r\n      }\r\n    }\r\n\r\n    return tsd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    return false;\r\n  }\r\n\r\n  async load() {\r\n    if (this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TSCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockBaseType from \"./BlockBaseType\";\r\nimport { BlockRenderType } from \"./BlockRenderType\";\r\nimport IBlockTypeData from \"./IBlockTypeData\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Database from \"./Database\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IComponent from \"./IComponent\";\r\nimport IBlockTypeBehaviorPack from \"./IBlockTypeBehaviorPack\";\r\nimport IBlockTypeWrapper from \"./IBlockTypeWrapper\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport ManagedPermutation from \"./ManagedPermutation\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport ModelGeometryDefinition from \"./ModelGeometryDefinition\";\r\nimport BlocksCatalogDefinition from \"./BlocksCatalogDefinition\";\r\nimport { IBlockResource } from \"./IBlocksCatalog\";\r\nimport TerrainTextureCatalogDefinition from \"./TerrainTextureCatalogDefinition\";\r\nimport TypeScriptDefinition from \"./TypeScriptDefinition\";\r\nimport { IBlockTypeCreationData } from \"./IBlockTypeCreationData\";\r\nimport { ITerrainTextureDataItem } from \"./ITerrainTextureCatalog\";\r\nimport ProjectUtilities from \"../app/ProjectUtilities\";\r\n\r\nexport enum BlockStateType {\r\n  string = 0,\r\n  boolean = 1,\r\n  number = 2,\r\n}\r\n\r\nexport default class BlockTypeDefinition implements IManagedComponentSetItem, IDefinition {\r\n  private _typeId = \"\";\r\n\r\n  private _typeData: IBlockTypeData;\r\n\r\n  private _baseType?: BlockBaseType;\r\n  private _baseTypeId = \"\";\r\n\r\n  private _material = \"\";\r\n  private _isCustom = false;\r\n  private _wrapper: IBlockTypeWrapper | null = null;\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public _data?: IBlockTypeBehaviorPack;\r\n  private _managed: { [id: string]: IManagedComponent | undefined } = {};\r\n  private _onLoaded = new EventDispatcher<BlockTypeDefinition, BlockTypeDefinition>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<BlockTypeDefinition, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<BlockTypeDefinition, string>();\r\n  private _onComponentChanged = new EventDispatcher<BlockTypeDefinition, IManagedComponent>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get numericId() {\r\n    return this._typeData.lid;\r\n  }\r\n\r\n  public get baseTypeId() {\r\n    return this._baseTypeId;\r\n  }\r\n\r\n  public get mapColor() {\r\n    return this._typeData.mc;\r\n  }\r\n\r\n  public get isCustom() {\r\n    return this._isCustom;\r\n  }\r\n\r\n  public get baseType() {\r\n    if (this._baseType !== undefined) {\r\n      return this._baseType;\r\n    }\r\n\r\n    return Database.defaultBlockBaseType;\r\n  }\r\n\r\n  /**\r\n   * Returns true if this block uses a unit cube geometry.\r\n   * Unit cube blocks can be rendered with textures from blocks.json or material_instances.\r\n   *\r\n   * A block is considered a unit cube if:\r\n   * 1. It has minecraft:unit_cube component (legacy)\r\n   * 2. It has geometry = \"minecraft:geometry.full_block\" or \"geometry.full_block\"\r\n   * 3. It has no geometry component at all (defaults to unit cube)\r\n   */\r\n  public get isUnitCube(): boolean {\r\n    // Check for explicit minecraft:unit_cube component (legacy)\r\n    const unitCubeComponent = this.getComponent(\"minecraft:unit_cube\");\r\n    if (unitCubeComponent) {\r\n      return true;\r\n    }\r\n\r\n    const geoId = this.geometryIdentifier;\r\n\r\n    // No geometry = unit cube\r\n    if (!geoId) {\r\n      return true;\r\n    }\r\n\r\n    // Explicit full_block geometry\r\n    if (geoId === \"minecraft:geometry.full_block\" || geoId === \"geometry.full_block\") {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public get geometryIdentifier() {\r\n    // First check base components\r\n    const geoComponent = this.getComponent(\"minecraft:geometry\");\r\n\r\n    if (geoComponent) {\r\n      // Handle both legacy and modern formats:\r\n      // Legacy (1.16.x): \"minecraft:geometry\": \"geometry.barrier_slab\" (string directly)\r\n      // Modern (1.19.40+): \"minecraft:geometry\": { \"identifier\": \"geometry.my_block\", ... }\r\n      const data = geoComponent.getData();\r\n      if (typeof data === \"string\") {\r\n        return data;\r\n      }\r\n      const id = geoComponent.getProperty(\"identifier\");\r\n      if (id) {\r\n        return id;\r\n      }\r\n    }\r\n\r\n    // If no geometry in base components, check permutations\r\n    // This handles blocks where geometry is only defined in permutations (e.g., arc:flask)\r\n    const geometryList = this.getGeometryList();\r\n    if (geometryList && geometryList.length > 0) {\r\n      return geometryList[0];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets the blocks.json catalog resource for this block, if it exists.\r\n   * Returns the IBlockResource which contains texture references for unit cube blocks.\r\n   */\r\n  public async getBlockCatalogResource(project: Project): Promise<IBlockResource | undefined> {\r\n    const blockCatalog = await BlocksCatalogDefinition.getBlockCatalog(project);\r\n    if (blockCatalog && this.id) {\r\n      return blockCatalog.getCatalogResource(this.id);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  public async setBlockCatalogTexture(\r\n    project: Project,\r\n    sideId: \"north\" | \"east\" | \"west\" | \"south\" | \"up\" | \"down\",\r\n    textureId: string\r\n  ) {\r\n    if (this.geometryIdentifier === \"minecraft:geometry.full_block\") {\r\n      const blockCatalog = await BlocksCatalogDefinition.ensureBlockCatalog(project);\r\n\r\n      if (blockCatalog) {\r\n        const blockResource = blockCatalog?.ensureCatalogResource(this.id);\r\n\r\n        if (blockResource.textures && typeof blockResource.textures !== \"string\") {\r\n          blockResource.textures[sideId] = textureId;\r\n        }\r\n\r\n        blockCatalog.persist();\r\n      }\r\n    }\r\n  }\r\n\r\n  public async setTerrainTexture(project: Project, terrainTextureId: string, textureData: ITerrainTextureDataItem) {\r\n    if (this.geometryIdentifier === \"minecraft:geometry.full_block\") {\r\n      const terrainTextureCatalog = await TerrainTextureCatalogDefinition.ensureTerrainTextureCatalog(project);\r\n\r\n      if (terrainTextureCatalog) {\r\n        terrainTextureCatalog.setTexture(terrainTextureId, textureData);\r\n        terrainTextureCatalog.persist();\r\n      }\r\n    }\r\n  }\r\n\r\n  public async ensureBlockAndTerrainLinks(project: Project, creationData: IBlockTypeCreationData) {\r\n    if (this.geometryIdentifier === \"minecraft:geometry.full_block\") {\r\n      const blockCatalog = await BlocksCatalogDefinition.ensureBlockCatalog(project);\r\n      const terrainTextureCatalog = await TerrainTextureCatalogDefinition.ensureTerrainTextureCatalog(project);\r\n\r\n      if (creationData && creationData.resource && blockCatalog) {\r\n        blockCatalog?.setBlockDefinition(this.id, creationData.resource);\r\n      }\r\n      if (creationData && creationData.texture_data && terrainTextureCatalog) {\r\n        for (const textureId in creationData.texture_data) {\r\n          const textureData = creationData.texture_data[textureId];\r\n          terrainTextureCatalog.setTexture(textureId, textureData);\r\n        }\r\n\r\n        const carriedTexturesId = creationData.resource.carried_textures;\r\n\r\n        if (carriedTexturesId) {\r\n          const textureData = creationData.texture_data[carriedTexturesId];\r\n          terrainTextureCatalog.setTexture(carriedTexturesId, textureData);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getMissingPermutations() {\r\n    this.ensurePermutations();\r\n\r\n    const unspecifiedConditions: string[] = [];\r\n\r\n    for (const state of this.getExpandedStateList()) {\r\n      let isUsedInConditionalExpression = false;\r\n      for (const perm of this.getPermutations()) {\r\n        if (\r\n          perm.condition.indexOf(state) >= 0 &&\r\n          (perm.condition.indexOf(\"!=\") >= 0 || perm.condition.indexOf(\">=\") >= 0 || perm.condition.indexOf(\"<=\") >= 0)\r\n        ) {\r\n          isUsedInConditionalExpression = true;\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (!isUsedInConditionalExpression) {\r\n        unspecifiedConditions.push(state);\r\n      }\r\n    }\r\n\r\n    const stateIds: string[] = [];\r\n\r\n    const vals: (string | number | boolean)[][] = [];\r\n\r\n    for (const state of unspecifiedConditions) {\r\n      const stateValues = this.getStateValues(state);\r\n\r\n      if (stateValues) {\r\n        vals.push(stateValues);\r\n        stateIds.push(state);\r\n      }\r\n    }\r\n\r\n    let stateList: string[] = [];\r\n\r\n    let idx = 0;\r\n\r\n    for (const valArrs of vals) {\r\n      let newStateList: string[] = [];\r\n\r\n      for (let i = 0; i < valArrs.length; i++) {\r\n        let strVal = valArrs[i];\r\n\r\n        if (typeof strVal === \"string\") {\r\n          strVal = \"'\" + strVal + \"'\";\r\n        }\r\n\r\n        if (stateList.length === 0) {\r\n          let condition = \"q.block_state('\" + stateIds[idx] + \"') == \" + strVal;\r\n\r\n          if (!this.getPermutationByCondition(condition)) {\r\n            newStateList.push(condition);\r\n          }\r\n        } else {\r\n          for (let j = 0; j < stateList.length; j++) {\r\n            let condition = stateList[j] && \" && q.block_state('\" + stateIds[idx] + \"') == \" + strVal;\r\n\r\n            if (!this.getPermutationByCondition(condition)) {\r\n              newStateList.push(stateList[j] && \" && q.block_state('\" + stateIds[idx] + \"') == \" + strVal);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      idx++;\r\n      stateList = newStateList;\r\n    }\r\n\r\n    return stateList;\r\n  }\r\n\r\n  public addNextPermutation() {\r\n    this.ensurePermutations();\r\n\r\n    let missingConditions = this.getMissingPermutations();\r\n\r\n    const cond = missingConditions.length > 0 ? missingConditions[0] : \"q.block_state() == ''\";\r\n\r\n    this.addPermutation(cond);\r\n  }\r\n\r\n  public addPermutation(condition: string) {\r\n    this.ensurePermutations();\r\n\r\n    if (!this._data || !this._data.permutations) {\r\n      return;\r\n    }\r\n\r\n    this._data.permutations.push({\r\n      condition: condition,\r\n      components: {},\r\n    });\r\n  }\r\n\r\n  public ensurePermutations() {\r\n    if (!this._data) {\r\n      this._data = {\r\n        description: {\r\n          identifier: this._typeId,\r\n        },\r\n        components: {},\r\n        permutations: [],\r\n        events: {},\r\n      };\r\n    }\r\n\r\n    if (!this._data.description) {\r\n      this._data.description = {\r\n        identifier: this._typeId,\r\n      };\r\n    }\r\n\r\n    if (!this._data.permutations) {\r\n      this._data.permutations = [];\r\n    }\r\n  }\r\n\r\n  public hasCustomPermutationConditions() {\r\n    if (!this._data || !this._data.permutations || !Array.isArray(this._data.permutations)) {\r\n      return false;\r\n    }\r\n\r\n    for (const perm of this._data.permutations) {\r\n      if (\r\n        perm.condition &&\r\n        (perm.condition.indexOf(\">=\") >= 0 || perm.condition.indexOf(\"<=\") >= 0 || perm.condition.indexOf(\"!=\") >= 0)\r\n      ) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public ensureDescription() {\r\n    if (!this._data) {\r\n      this._data = {\r\n        description: {\r\n          identifier: this._typeId,\r\n        },\r\n        components: {},\r\n        events: {},\r\n      };\r\n    }\r\n\r\n    if (!this._data.description) {\r\n      this._data.description = {\r\n        identifier: this._typeId,\r\n      };\r\n    }\r\n  }\r\n\r\n  getManagedPermutations() {\r\n    const permData = this.getPermutations();\r\n\r\n    if (!permData || !Array.isArray(permData)) {\r\n      return undefined;\r\n    }\r\n\r\n    const managedPerms: ManagedPermutation[] = [];\r\n\r\n    for (const permDataItem of permData) {\r\n      managedPerms.push(new ManagedPermutation(permDataItem));\r\n    }\r\n\r\n    return managedPerms;\r\n  }\r\n\r\n  getPermutations() {\r\n    if (!this._data || !this.data?.permutations) {\r\n      return [];\r\n    }\r\n\r\n    return this.data.permutations;\r\n  }\r\n\r\n  getPlacementDirectionTrait() {\r\n    if (!this._data || !this._data.description || !this._data.description.traits) {\r\n      return undefined;\r\n    }\r\n\r\n    const traits = this._data?.description.traits;\r\n\r\n    return traits[\"minecraft:placement_direction\"];\r\n  }\r\n\r\n  getPlacementPositionTrait() {\r\n    if (!this._data || !this._data.description || !this._data.description.traits) {\r\n      return undefined;\r\n    }\r\n\r\n    const traits = this._data?.description.traits;\r\n\r\n    return traits[\"minecraft:placement_position\"];\r\n  }\r\n\r\n  ensurePlacementDirectionTrait() {\r\n    this.ensureBlockTraits();\r\n\r\n    const traits = this._data?.description.traits;\r\n\r\n    if (traits) {\r\n      if (!traits[\"minecraft:placement_direction\"]) {\r\n        traits[\"minecraft:placement_direction\"] = {\r\n          enabled_states: [\"minecraft:cardinal_direction\", \"minecraft:facing_direction\"],\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  removePlacementDirectionTrait() {\r\n    const traits = this._data?.description.traits;\r\n\r\n    if (traits) {\r\n      if (traits[\"minecraft:placement_direction\"]) {\r\n        traits[\"minecraft:placement_direction\"] = undefined;\r\n      }\r\n    }\r\n  }\r\n\r\n  ensurePlacementPositionTrait() {\r\n    this.ensureBlockTraits();\r\n\r\n    const traits = this._data?.description.traits;\r\n\r\n    if (traits) {\r\n      if (!traits[\"minecraft:placement_position\"]) {\r\n        traits[\"minecraft:placement_position\"] = {\r\n          enabled_states: [\"minecraft:block_face\", \"minecraft:vertical_half\"],\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  removePlacementPositionTrait() {\r\n    const traits = this._data?.description.traits;\r\n\r\n    if (traits) {\r\n      if (traits[\"minecraft:placement_position\"]) {\r\n        traits[\"minecraft:placement_position\"] = undefined;\r\n      }\r\n    }\r\n  }\r\n\r\n  public ensureBlockTraits() {\r\n    this.ensureDescription();\r\n\r\n    if (this._data?.description && !this._data?.description.traits) {\r\n      this._data.description.traits = {};\r\n    }\r\n  }\r\n\r\n  public removeState(stateName: string) {\r\n    if (this._data?.description?.states) {\r\n      this._data.description.states[stateName] = undefined;\r\n    }\r\n    if (this._data?.description?.properties) {\r\n      this._data.description.properties[stateName] = undefined;\r\n    }\r\n  }\r\n\r\n  public get formatVersion(): string | undefined {\r\n    return this._wrapper?.format_version;\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._wrapper) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._wrapper.format_version);\r\n  }\r\n\r\n  public getStateValues(stateId: string) {\r\n    if (stateId === \"minecraft:block_face\" || stateId === \"minecraft:facing_direction\") {\r\n      return [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"];\r\n    } else if (stateId === \"minecraft:vertical_half\") {\r\n      return [\"bottom\", \"top\"];\r\n    } else if (stateId === \"minecraft:cardinal_direction\") {\r\n      return [\"north\", \"south\", \"east\", \"west\"];\r\n    }\r\n\r\n    const states = this.getStates();\r\n\r\n    if (!states || !states[stateId]) {\r\n      return undefined;\r\n    }\r\n\r\n    return states[stateId];\r\n  }\r\n\r\n  public getStates() {\r\n    if (!this._wrapper || !this._data || !this._data?.description) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._data.description.states && this._data.description.properties) {\r\n      return this._data.description.properties;\r\n    }\r\n\r\n    return this._data.description.states;\r\n  }\r\n\r\n  public addState(stateName: string, stateType: BlockStateType) {\r\n    if (!this._data || !this._data.description) {\r\n      return;\r\n    }\r\n    if (!Utilities.isUsableAsObjectKey(stateName)) {\r\n      Log.unsupportedToken(stateName);\r\n      throw new Error();\r\n    }\r\n    let dataArr: string[] | number[] | boolean[] = [];\r\n\r\n    if (stateType === BlockStateType.boolean) {\r\n      dataArr = [false, true];\r\n    } else if (stateType === BlockStateType.number) {\r\n      dataArr = [0, 1, 2];\r\n    } else if (stateType === BlockStateType.string) {\r\n      dataArr = [\"value1\", \"value2\"];\r\n    }\r\n\r\n    if (!this._data.description.states) {\r\n      this._data.description.states = {};\r\n    }\r\n\r\n    this._data.description.states[stateName] = dataArr;\r\n  }\r\n\r\n  public getExpandedStateList() {\r\n    const stateList = this.getStateList();\r\n\r\n    let placementDir = this.getPlacementDirectionTrait();\r\n\r\n    if (placementDir) {\r\n      if (placementDir.enabled_states) {\r\n        stateList.push(...placementDir.enabled_states);\r\n      }\r\n    }\r\n\r\n    let placementPos = this.getPlacementPositionTrait();\r\n\r\n    if (placementPos) {\r\n      if (placementPos.enabled_states) {\r\n        stateList.push(...placementPos.enabled_states);\r\n      }\r\n    }\r\n\r\n    return stateList;\r\n  }\r\n\r\n  public getStateList() {\r\n    const states = this.getStates();\r\n\r\n    if (!states) {\r\n      return [];\r\n    }\r\n\r\n    const stateList = [];\r\n\r\n    for (const state in states) {\r\n      if (states[state] !== undefined) {\r\n        stateList.push(state);\r\n      }\r\n    }\r\n\r\n    return stateList;\r\n  }\r\n\r\n  public set baseType(baseType: BlockBaseType) {\r\n    this._baseType = baseType;\r\n    this._baseTypeId = baseType.name;\r\n  }\r\n\r\n  public get material() {\r\n    return this._material;\r\n  }\r\n\r\n  public renderType: BlockRenderType = BlockRenderType.Custom;\r\n\r\n  get icon() {\r\n    let val = this._typeData.ic;\r\n\r\n    if (val === undefined && this.baseType !== undefined) {\r\n      val = this.baseType.icon;\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  get typeId() {\r\n    return this._typeId;\r\n  }\r\n\r\n  get shortTypeName() {\r\n    let name = this._typeId;\r\n\r\n    const colonIndex = name.indexOf(\":\");\r\n\r\n    if (colonIndex >= 0) {\r\n      name = name.substring(colonIndex + 1, name.length);\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  get title() {\r\n    const id = this.shortTypeName;\r\n\r\n    return Utilities.humanifyMinecraftName(id);\r\n  }\r\n\r\n  constructor(name: string) {\r\n    this._typeId = name;\r\n    this._handleFileUpdated = this._handleFileUpdated.bind(this);\r\n    this._typeData = {\r\n      n: name,\r\n    };\r\n\r\n    if (name.indexOf(\":\") >= 0 && !name.startsWith(\"minecraft:\")) {\r\n      this._isCustom = true;\r\n    }\r\n  }\r\n\r\n  public get id() {\r\n    if (this._data && this._data.description) {\r\n      return this._data.description.identifier;\r\n    }\r\n\r\n    if (!this._id) {\r\n      return \"\";\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this._id = newId;\r\n\r\n    if (this._data && this._data.description && newId) {\r\n      this._data.description.identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get behaviorPackFile() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set behaviorPackFile(newFile: IFile | undefined) {\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.unsubscribe(this._handleFileUpdated);\r\n    }\r\n\r\n    this._file = newFile;\r\n\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.subscribe(this._handleFileUpdated);\r\n    }\r\n  }\r\n\r\n  _handleFileUpdated(file: IFile, fileB: IFile) {\r\n    this._data = undefined;\r\n    this._wrapper = null;\r\n    this._isLoaded = false;\r\n    this._managed = {};\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getPermutationByCondition(permutationCondition: string) {\r\n    if (!this._data || !this.data?.permutations || !Array.isArray(this.data.permutations)) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const perm of this.data.permutations) {\r\n      if (permutationCondition === perm.condition) {\r\n        return perm;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getComponentFromBaseFileName(name: string) {\r\n    let canonName = name;\r\n\r\n    if (canonName.startsWith(\"minecraft_\")) {\r\n      canonName = canonName.substring(10);\r\n    }\r\n\r\n    return canonName;\r\n  }\r\n\r\n  ensureComponent(id: string, defaultData?: IComponent | string | string[] | boolean | number[] | number | undefined) {\r\n    const comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      return comp;\r\n    }\r\n\r\n    return this.addComponent(id, defaultData);\r\n  }\r\n\r\n  getComponent(id: string) {\r\n    if (this._data === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      if (this._data.components) {\r\n        const comp = this._data.components[id];\r\n        if (comp) {\r\n          this._managed[id] = new ManagedComponent(this._data.components, id, comp);\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  getComponentsInBaseAndPermutations(id: string): IManagedComponent[] {\r\n    if (this._data === undefined) {\r\n      return [];\r\n    }\r\n\r\n    let results: IManagedComponent[] = [];\r\n\r\n    let comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      results.push(comp);\r\n    }\r\n\r\n    const perms = this.getManagedPermutations();\r\n\r\n    if (perms && Array.isArray(perms)) {\r\n      for (const perm of perms) {\r\n        if (perm) {\r\n          comp = perm.getComponent(id);\r\n\r\n          if (comp) {\r\n            results.push(comp);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"BTNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents(): IManagedComponent[] {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._data !== undefined) {\r\n      for (const componentName in this._data.components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    const bpData = this._data as IBlockTypeBehaviorPack;\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(bpData.components, id, componentOrData);\r\n\r\n    bpData.components[id] = mc.getData();\r\n    this._managed[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._data === undefined) {\r\n      return;\r\n    }\r\n\r\n    const newBehaviorPacks: {\r\n      [name: string]: IComponent | string | string[] | boolean | number[] | number | undefined;\r\n    } = {};\r\n    const newComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this._data.components) {\r\n      if (name !== id) {\r\n        if (Utilities.isUsableAsObjectKey(name)) {\r\n          const component = this._data.components[name];\r\n\r\n          newBehaviorPacks[name] = component;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const name in this._managed) {\r\n      if (name !== id) {\r\n        newComponents[name] = this._managed[name];\r\n      }\r\n    }\r\n\r\n    this._data.components = newBehaviorPacks;\r\n    this._managed = newComponents;\r\n  }\r\n\r\n  public async getTextureItems(\r\n    blockTypeProjectItem: ProjectItem,\r\n    project?: Project\r\n  ): Promise<{ [name: string]: ProjectItem } | undefined> {\r\n    if (!this._data || !blockTypeProjectItem.childItems) {\r\n      return undefined;\r\n    }\r\n\r\n    let textureList = this.getTextureList();\r\n\r\n    // For unit cube blocks, also include textures from blocks.json\r\n    if (this.isUnitCube && project) {\r\n      const catalogTextures = await this.getTextureListFromBlocksCatalog(project);\r\n      if (catalogTextures && catalogTextures.length > 0) {\r\n        textureList = textureList ? [...textureList, ...catalogTextures] : catalogTextures;\r\n      }\r\n    }\r\n\r\n    const results: { [name: string]: ProjectItem } = {};\r\n\r\n    for (const childItem of blockTypeProjectItem.childItems) {\r\n      let candItem = childItem.childItem;\r\n\r\n      if (candItem.itemType === ProjectItemType.terrainTextureCatalogResourceJson) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        // Ensure the terrain texture catalog's dependencies are loaded (links to texture files)\r\n        await candItem.ensureDependencies();\r\n\r\n        if (candItem.primaryFile && candItem.childItems) {\r\n          const blockTextureCatalog = await TerrainTextureCatalogDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (blockTextureCatalog && textureList) {\r\n            for (const textureId of textureList) {\r\n              const texPaths = blockTextureCatalog.getAllTexturePaths(textureId);\r\n\r\n              if (texPaths) {\r\n                for (const texPath of texPaths) {\r\n                  const texPathLower = texPath.toLowerCase();\r\n\r\n                  for (const catalogChildItem of candItem.childItems) {\r\n                    let path = catalogChildItem.childItem.projectPath;\r\n\r\n                    if (path) {\r\n                      const lastPeriod = path.lastIndexOf(\".\");\r\n\r\n                      if (lastPeriod >= 0) {\r\n                        path = path.substring(0, lastPeriod);\r\n                      }\r\n\r\n                      // Case-insensitive matching since terrain_texture paths may have different casing\r\n                      const pathLower = path.toLowerCase();\r\n                      if (pathLower.endsWith(texPathLower)) {\r\n                        results[texPath] = catalogChildItem.childItem;\r\n                      }\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  public getGeometryList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const comps = this.getComponentsInBaseAndPermutations(\"minecraft:geometry\");\r\n\r\n    if (!comps) {\r\n      return undefined;\r\n    }\r\n\r\n    const geometryList = [];\r\n\r\n    for (const comp of comps) {\r\n      const compData = comp.getData();\r\n\r\n      if (typeof compData === \"string\") {\r\n        geometryList.push(compData);\r\n      } else {\r\n        const id = comp.getProperty(\"identifier\");\r\n\r\n        if (id) {\r\n          geometryList.push(id);\r\n        }\r\n      }\r\n    }\r\n\r\n    return geometryList;\r\n  }\r\n\r\n  /**\r\n   * Gets the list of texture IDs used by this block.\r\n   * Checks both material_instances component and blocks.json catalog.\r\n   */\r\n  public getTextureList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList: string[] = [];\r\n\r\n    // Check material_instances component\r\n    const comps = this.getComponentsInBaseAndPermutations(\"minecraft:material_instances\");\r\n\r\n    if (comps) {\r\n      for (const comp of comps) {\r\n        const compData = comp.getData();\r\n\r\n        if (typeof compData === \"object\") {\r\n          for (const materialName in compData) {\r\n            const material = (compData as any)[materialName];\r\n\r\n            if (material && material.texture) {\r\n              textureList.push(material.texture);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  /**\r\n   * Gets texture IDs from blocks.json catalog for this block.\r\n   * Used for unit cube blocks that define textures via blocks.json.\r\n   */\r\n  public async getTextureListFromBlocksCatalog(project: Project): Promise<string[]> {\r\n    const textureList: string[] = [];\r\n\r\n    const blockResource = await this.getBlockCatalogResource(project);\r\n    if (blockResource && blockResource.textures) {\r\n      if (typeof blockResource.textures === \"string\") {\r\n        textureList.push(blockResource.textures);\r\n      } else {\r\n        // IBlockTextures object with per-face textures\r\n        const textures = blockResource.textures;\r\n        if (textures.north) textureList.push(textures.north);\r\n        if (textures.south) textureList.push(textures.south);\r\n        if (textures.east) textureList.push(textures.east);\r\n        if (textures.west) textureList.push(textures.west);\r\n        if (textures.up) textureList.push(textures.up);\r\n        if (textures.down) textureList.push(textures.down);\r\n        if (textures.side) textureList.push(textures.side);\r\n      }\r\n\r\n      // Also check carried_textures\r\n      if (blockResource.carried_textures) {\r\n        textureList.push(blockResource.carried_textures);\r\n      }\r\n    }\r\n\r\n    // Deduplicate\r\n    return [...new Set(textureList)];\r\n  }\r\n\r\n  _ensureBehaviorPackDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        description: {\r\n          identifier: \"unknown\",\r\n        },\r\n        components: {},\r\n        events: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this._file && this._file.parentFolder) {\r\n      let parentFolder = this._file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"blocks\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  getCustomComponentIds() {\r\n    let customComponentIds: string[] = [];\r\n    const customComponents = this.getComponentsInBaseAndPermutations(\"minecraft:custom_components\");\r\n\r\n    for (const comp of customComponents) {\r\n      let compData = comp.getData();\r\n\r\n      if (compData && Array.isArray(compData)) {\r\n        for (const str of compData) {\r\n          if (typeof str === \"string\") {\r\n            customComponentIds.push(str);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const allComponentsInUse = this.getAllComponents();\r\n\r\n    for (const component of allComponentsInUse) {\r\n      if (component && component.id && !component.id.startsWith(\"minecraft:\") && !component.id.startsWith(\"tag:\")) {\r\n        customComponentIds.push(component.id);\r\n      }\r\n    }\r\n\r\n    return customComponentIds;\r\n  }\r\n\r\n  getLootTablePaths() {\r\n    let lootTablePaths: string[] = [];\r\n\r\n    const lootComps = this.getComponentsInBaseAndPermutations(\"minecraft:loot\");\r\n\r\n    for (const comp of lootComps) {\r\n      let compData = comp.getData();\r\n\r\n      if (typeof compData === \"string\") {\r\n        lootTablePaths.push(compData);\r\n      } else {\r\n        let lootTablePath = comp.getProperty(\"table\");\r\n\r\n        if (lootTablePath) {\r\n          lootTablePaths.push(lootTablePath);\r\n        }\r\n      }\r\n    }\r\n\r\n    return lootTablePaths;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let lootTablePaths = this.getLootTablePaths();\r\n\r\n    let customComponentIds: string[] = this.getCustomComponentIds();\r\n\r\n    let textureList = this.getTextureList();\r\n\r\n    // For unit cube blocks, also get textures from blocks.json\r\n    if (this.isUnitCube) {\r\n      const catalogTextures = await this.getTextureListFromBlocksCatalog(project);\r\n      if (catalogTextures && catalogTextures.length > 0) {\r\n        textureList = textureList ? [...textureList, ...catalogTextures] : catalogTextures;\r\n      }\r\n    }\r\n\r\n    let geometryList = this.getGeometryList();\r\n\r\n    // Check TypeScript files for custom components (only if we have custom component IDs)\r\n    if (customComponentIds && customComponentIds.length > 0) {\r\n      const tsItems = project.getItemsByType(ProjectItemType.ts);\r\n      for (const candItem of tsItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          if (!candItem.primaryFile.isContentLoaded) {\r\n            await candItem.primaryFile.loadContent();\r\n          }\r\n\r\n          const tsd = await TypeScriptDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (tsd && tsd.data) {\r\n            let doAddTs = false;\r\n\r\n            for (const customCompId of customComponentIds) {\r\n              if (tsd.data.indexOf(customCompId) >= 0) {\r\n                doAddTs = true;\r\n                break;\r\n              }\r\n            }\r\n\r\n            if (doAddTs) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check terrain texture catalog (only if we have textures to match)\r\n    if (textureList && textureList.length > 0) {\r\n      const terrainTexItems = project.getItemsByType(ProjectItemType.terrainTextureCatalogResourceJson);\r\n      for (const candItem of terrainTexItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const blockTextureCatalog = await TerrainTextureCatalogDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (blockTextureCatalog) {\r\n            let doAddTextureCatalog = false;\r\n\r\n            for (const textureId of textureList) {\r\n              const blockResource = blockTextureCatalog.getTexture(textureId);\r\n\r\n              if (blockResource) {\r\n                doAddTextureCatalog = true;\r\n                break;\r\n              }\r\n            }\r\n\r\n            if (doAddTextureCatalog) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check blocks catalog\r\n    const blocksCatalogItems = project.getItemsByType(ProjectItemType.blocksCatalogResourceJson);\r\n    for (const candItem of blocksCatalogItems) {\r\n      if (!candItem.isContentLoaded) {\r\n        await candItem.loadContent();\r\n      }\r\n\r\n      if (candItem.primaryFile) {\r\n        const blockCatalog = await BlocksCatalogDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n        if (blockCatalog && this.id) {\r\n          const blockResource = blockCatalog.getCatalogResource(this.id);\r\n\r\n          if (blockResource) {\r\n            item.addChildItem(candItem);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check model geometry (only if we have geometries to match)\r\n    if (geometryList && geometryList.length > 0) {\r\n      if (index) {\r\n        // Use pre-built index for O(1) model lookups\r\n        const addedItems = new Set<ProjectItem>();\r\n        for (const geoId of geometryList) {\r\n          const matchingItems = index.getItemsById(index.modelsById, geoId);\r\n          for (const candItem of matchingItems) {\r\n            if (!addedItems.has(candItem)) {\r\n              addedItems.add(candItem);\r\n              item.addChildItem(candItem);\r\n              geometryList = Utilities.removeItemInArray(geoId, geometryList);\r\n            }\r\n          }\r\n        }\r\n      } else {\r\n        const modelItems = project.getItemsByType(ProjectItemType.modelGeometryJson);\r\n        for (const candItem of modelItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const model = await ModelGeometryDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (model) {\r\n              let doAddModel = false;\r\n              for (const modelId of model.identifiers) {\r\n                if (geometryList && geometryList.includes(modelId)) {\r\n                  doAddModel = true;\r\n\r\n                  geometryList = Utilities.removeItemInArray(modelId, geometryList);\r\n                }\r\n              }\r\n\r\n              if (doAddModel) {\r\n                item.addChildItem(candItem);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check loot tables (only if we have loot references)\r\n    if (lootTablePaths.length > 0) {\r\n      const lootTableItems = project.getItemsByType(ProjectItemType.lootTableBehavior);\r\n      for (const candItem of lootTableItems) {\r\n        for (const lootTablePath of lootTablePaths) {\r\n          if (candItem.projectPath?.endsWith(lootTablePath)) {\r\n            item.addChildItem(candItem);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<BlockTypeDefinition, BlockTypeDefinition>,\r\n    preserveComments?: boolean\r\n  ) {\r\n    let bt: BlockTypeDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      bt = new BlockTypeDefinition(\"custom:\" + file.name);\r\n\r\n      bt.behaviorPackFile = file;\r\n\r\n      file.manager = bt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof BlockTypeDefinition) {\r\n      bt = file.manager as BlockTypeDefinition;\r\n\r\n      if (!bt.isLoaded || (preserveComments && !bt._loadedWithComments)) {\r\n        if (loadHandler) {\r\n          bt.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await bt.load(preserveComments);\r\n      }\r\n    }\r\n\r\n    return bt;\r\n  }\r\n\r\n  async addCustomComponent(blockTypeItem: ProjectItem, componentName: string) {\r\n    let componentNameShort = componentName;\r\n\r\n    const idx = componentName.indexOf(\":\");\r\n    if (idx >= 0) {\r\n      componentNameShort = componentName.substring(idx + 1);\r\n    }\r\n\r\n    this.ensureComponent(componentName, {});\r\n\r\n    const fileNameSugg = Utilities.getHumanifiedObjectNameNoSpaces(componentNameShort);\r\n\r\n    await ProjectUtilities.ensureTypeScriptFileWith(\r\n      blockTypeItem.project,\r\n      componentName,\r\n      \"new-templates\",\r\n      \"blockCustomComponent\",\r\n      fileNameSugg,\r\n      {\r\n        \"example:newComponentId\": componentName,\r\n        ExampleNewComponent: fileNameSugg,\r\n        initExampleNew: \"init\" + fileNameSugg,\r\n      }\r\n    );\r\n\r\n    await ProjectUtilities.ensureContentInDefaultScriptFile(\r\n      blockTypeItem.project,\r\n      \"import { init\" + fileNameSugg,\r\n      \"import { init\" + fileNameSugg + ' } from \"./' + fileNameSugg + '\"\\n',\r\n      false\r\n    );\r\n\r\n    await ProjectUtilities.ensureContentInDefaultScriptFile(\r\n      blockTypeItem.project,\r\n      \"init\" + fileNameSugg + \"()\",\r\n      \"init\" + fileNameSugg + \"();\\n\",\r\n      true\r\n    );\r\n\r\n    this.persist();\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(!this._isLoaded || this._wrapper !== null, \"BTP\");\r\n\r\n    if (!this._wrapper) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._wrapper);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._wrapper = data;\r\n\r\n    const block = data[\"minecraft:block\"];\r\n\r\n    if (block && block.description) {\r\n      this.id = block.description.identifier;\r\n    }\r\n\r\n    this._data = block;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport const NumberInfoItemTypes = 9;\r\n\r\nexport enum InfoItemType {\r\n  testCompleteFail = 0,\r\n  testCompleteSuccess = 1,\r\n  info = 2,\r\n  error = 3,\r\n  warning = 4,\r\n  internalProcessingError = 5,\r\n  recommendation = 6,\r\n  featureAggregate = 7,\r\n  testCompleteNoApplicableItemsFound = 8,\r\n}\r\n\r\n// sorry that the fields here are truncated to save a few characters.\r\nexport default interface IInfoItemData {\r\n  iTp: InfoItemType; // type\r\n  gId: string; // generatorId\r\n  gIx: number; // generatorIndex\r\n  m: string | undefined; // message\r\n  p: string | null | undefined; // item project path\r\n  d: string | boolean | number | number[] | undefined; // data\r\n  iId: string | undefined; // item id\r\n  c: string | undefined; // content -- should be the broader context of content that is causing the info item. Sometimes, the content in question that might be problematic might be in .d?\r\n  fs: { [setName: string]: { [measureName: string]: number | undefined } | undefined } | undefined; // feature state\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport IInfoItemData from \"./IInfoItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\n\r\nexport default class ProjectInfoItem {\r\n  #data: IInfoItemData;\r\n  #projectItem?: ProjectItem;\r\n\r\n  get dataObject() {\r\n    return this.#data;\r\n  }\r\n\r\n  get itemType() {\r\n    return this.#data.iTp;\r\n  }\r\n\r\n  get message() {\r\n    return this.#data.m;\r\n  }\r\n\r\n  set message(newMessage: string | undefined) {\r\n    this.#data.m = newMessage;\r\n  }\r\n\r\n  get generatorId() {\r\n    return this.#data.gId;\r\n  }\r\n\r\n  get generatorIndex() {\r\n    return this.#data.gIx;\r\n  }\r\n\r\n  get projectItem() {\r\n    return this.#projectItem;\r\n  }\r\n\r\n  get data() {\r\n    return this.#data.d;\r\n  }\r\n\r\n  set data(data: string | boolean | number | number[] | undefined) {\r\n    this.#data.d = data;\r\n  }\r\n\r\n  get content() {\r\n    return this.#data.c;\r\n  }\r\n\r\n  get featureSets() {\r\n    return this.#data.fs;\r\n  }\r\n\r\n  set featureSets(value: { [setName: string]: { [measureName: string]: number | undefined } | undefined } | undefined) {\r\n    this.#data.fs = value;\r\n  }\r\n\r\n  get contentSummary() {\r\n    let errorContent = this.#data.c;\r\n    if (errorContent) {\r\n      errorContent = errorContent.replace(/\\n/gi, \" \");\r\n      errorContent = errorContent.replace(/\\r/gi, \" \");\r\n\r\n      // Strip JSON object/array values, keep only the path portion (e.g., 'In \"dependencies[0]\"')\r\n      errorContent = errorContent.replace(/:\\s*[\\{\\[].*$/g, \"\");\r\n\r\n      if (errorContent.length > 80) {\r\n        errorContent = errorContent.substring(0, 77) + \"...\";\r\n      }\r\n    }\r\n\r\n    return errorContent;\r\n  }\r\n\r\n  disconnect() {\r\n    this.#projectItem = undefined;\r\n  }\r\n\r\n  get typeSummary() {\r\n    switch (this.#data.iTp) {\r\n      case InfoItemType.info:\r\n        return \"Info\";\r\n\r\n      case InfoItemType.warning:\r\n        return \"Warning\";\r\n\r\n      case InfoItemType.recommendation:\r\n        return \"Recommendation\";\r\n\r\n      case InfoItemType.featureAggregate:\r\n        return \"Feature aggregation\";\r\n\r\n      case InfoItemType.testCompleteFail:\r\n        return \"Test fail\";\r\n\r\n      case InfoItemType.testCompleteSuccess:\r\n        return \"Test success\";\r\n\r\n      case InfoItemType.error:\r\n        return \"Error\";\r\n\r\n      default:\r\n        return \"Unknown\";\r\n    }\r\n  }\r\n\r\n  get projectItemPath() {\r\n    if (this.projectItem) {\r\n      return this.projectItem.projectPath;\r\n    } else if (this.#data.p) {\r\n      return this.#data.p;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get shortProjectItemPath() {\r\n    if (this.projectItem && this.projectItem.projectPath) {\r\n      return MinecraftUtilities.getAfterPackPath(this.projectItem.projectPath);\r\n    } else if (this.#data.p) {\r\n      return MinecraftUtilities.getAfterPackPath(this.#data.p);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get typeSummaryShort() {\r\n    let short = this.typeSummary.toUpperCase();\r\n\r\n    short = short.replace(/\\s/g, \"\");\r\n\r\n    return short;\r\n  }\r\n\r\n  toString() {\r\n    let summaryString = this.typeSummaryShort + \": \";\r\n\r\n    summaryString += \"[\" + this.generatorId + Utilities.frontPadToLength(this.generatorIndex, 3, \"0\") + \"] \";\r\n\r\n    if (this.projectItem) {\r\n      summaryString += \"(\" + this.projectItem.projectPath + \") \";\r\n    } else if (this.#data.p) {\r\n      summaryString += \"(\" + this.#data.p + \") \";\r\n    }\r\n\r\n    if (this.message) {\r\n      summaryString += this.message;\r\n    }\r\n\r\n    if (this.data) {\r\n      summaryString += \": \" + this.data;\r\n    }\r\n\r\n    const errorContent = this.contentSummary;\r\n\r\n    if (errorContent) {\r\n      summaryString += \" [in \" + errorContent + \"]\";\r\n    }\r\n\r\n    return summaryString;\r\n  }\r\n\r\n  minFeature(setName: string, measureName: string, newValue: number) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n    measureName = Utilities.convertToJsonKey(measureName);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(setName)) {\r\n      Log.unsupportedToken(setName);\r\n      throw new Error();\r\n    }\r\n\r\n    let setVal = this.#data.fs[setName];\r\n\r\n    if (setVal === undefined) {\r\n      setVal = {};\r\n\r\n      this.#data.fs[setName] = setVal;\r\n    }\r\n\r\n    let curVal = setVal[measureName];\r\n\r\n    if (curVal === undefined) {\r\n      curVal = newValue;\r\n    } else {\r\n      curVal = Math.min(curVal, newValue);\r\n    }\r\n\r\n    setVal[measureName] = curVal;\r\n  }\r\n\r\n  maxFeature(setName: string, measureName: string, newValue: number) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n    measureName = Utilities.convertToJsonKey(measureName);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(setName)) {\r\n      Log.unsupportedToken(setName);\r\n      throw new Error();\r\n    }\r\n\r\n    let setVal = this.#data.fs[setName];\r\n\r\n    if (setVal === undefined) {\r\n      setVal = {};\r\n\r\n      this.#data.fs[setName] = setVal;\r\n    }\r\n\r\n    let curVal = setVal[measureName];\r\n\r\n    if (curVal === undefined) {\r\n      curVal = newValue;\r\n    } else {\r\n      curVal = Math.max(curVal, newValue);\r\n    }\r\n\r\n    setVal[measureName] = curVal;\r\n  }\r\n\r\n  getFeatureContaining(token: string) {\r\n    token = token.toLowerCase();\r\n\r\n    for (const setName in this.#data.fs) {\r\n      const featureSet = this.#data.fs[setName];\r\n\r\n      if (featureSet) {\r\n        for (const measureName in featureSet) {\r\n          if (measureName.toLowerCase().indexOf(token) >= 0) {\r\n            return featureSet[measureName];\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getFeatureMeasureNumber(setName: string, measure: string) {\r\n    measure = measure.toLowerCase();\r\n\r\n    if (!this.#data.fs) {\r\n      return 0;\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n\r\n    const featureSet = this.#data.fs[setName];\r\n\r\n    if (featureSet) {\r\n      for (const measureName in featureSet) {\r\n        if (measureName.toLowerCase() === measure) {\r\n          return featureSet[measureName];\r\n        }\r\n      }\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  getNonZeroFeatureMeasures(): string[] {\r\n    const results: string[] = [];\r\n\r\n    if (!this.#data.fs) {\r\n      return results;\r\n    }\r\n\r\n    for (const setName in this.#data.fs) {\r\n      const featureSet = this.#data.fs[setName];\r\n\r\n      if (featureSet) {\r\n        for (const measureName in featureSet) {\r\n          const val = featureSet[measureName];\r\n          if (\r\n            val !== undefined &&\r\n            typeof val === \"number\" &&\r\n            val > 0 &&\r\n            (measureName === \"count\" || measureName === \"instanceCount\")\r\n          ) {\r\n            results.push(setName);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  spectrumFeature(setName: string, newValue: number) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(setName)) {\r\n      Log.unsupportedToken(setName);\r\n      throw new Error();\r\n    }\r\n\r\n    this.incrementFeature(setName, \"instanceCount\", 1);\r\n    this.incrementFeature(setName, \"total\", newValue);\r\n    this.maxFeature(setName, \"max\", newValue);\r\n    this.minFeature(setName, \"min\", newValue);\r\n\r\n    let setVal = this.#data.fs[setName];\r\n\r\n    if (setVal === undefined) {\r\n      setVal = {};\r\n\r\n      this.#data.fs[setName] = setVal;\r\n    }\r\n\r\n    const curTotal = setVal[\"total\"];\r\n    const curCount = setVal[\"instanceCount\"];\r\n\r\n    if (curCount && curTotal !== undefined) {\r\n      setVal[\"average\"] = curTotal / curCount;\r\n    }\r\n  }\r\n\r\n  spectrumIntFeature(setName: string, newValue: number) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n\r\n    let setVal = this.#data.fs[setName];\r\n\r\n    if (setVal === undefined) {\r\n      setVal = {};\r\n\r\n      this.#data.fs[setName] = setVal;\r\n    }\r\n\r\n    this.incrementFeature(setName, \"instanceCount\", 1);\r\n    this.incrementFeature(setName, \"total\", newValue);\r\n\r\n    this.maxFeature(setName, \"max\", newValue);\r\n    this.minFeature(setName, \"min\", newValue);\r\n\r\n    const curTotal = setVal[\"total\"];\r\n    const curCount = setVal[\"instanceCount\"];\r\n\r\n    if (curCount && curTotal !== undefined) {\r\n      setVal[\"average\"] = Math.round(curTotal / curCount);\r\n    }\r\n  }\r\n\r\n  incrementFeature(setName: string, measureName: string = \"count\", incrementalValue: number = 1) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n    measureName = Utilities.convertToJsonKey(measureName);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(setName)) {\r\n      return;\r\n    }\r\n\r\n    let setVal = this.#data.fs[setName];\r\n\r\n    if (setVal === undefined) {\r\n      setVal = this.#data.fs[setName] = {};\r\n    }\r\n\r\n    setVal[measureName] = (setVal[measureName] ?? 0) + incrementalValue;\r\n  }\r\n\r\n  setFeature(setName: string, measureName: string, value: number) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n    measureName = Utilities.convertToJsonKey(measureName);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(setName)) {\r\n      return;\r\n    }\r\n\r\n    let setVal = this.#data.fs[setName];\r\n    if (setVal === undefined) {\r\n      setVal = this.#data.fs[setName] = {};\r\n    }\r\n\r\n    setVal[measureName] = value;\r\n  }\r\n\r\n  constructor(\r\n    itemType: InfoItemType,\r\n    generatorId: string,\r\n    generatorIndex: number,\r\n    message?: string,\r\n    projectItem?: ProjectItem,\r\n    data?: string | boolean | number | number[],\r\n    itemId?: string,\r\n    content?: string,\r\n    projectItemPath?: string\r\n  ) {\r\n    this.#data = {\r\n      iTp: itemType,\r\n      gId: generatorId,\r\n      gIx: generatorIndex,\r\n      m: message,\r\n      p: projectItem ? projectItem.projectPath : projectItemPath,\r\n      d: data,\r\n      iId: itemId,\r\n      c: content,\r\n      fs: undefined,\r\n    };\r\n\r\n    this.#projectItem = projectItem;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport enum UpdateResultType {\r\n  updatedFile = 1,\r\n  noChange = 0,\r\n  internalProcessingError = 99,\r\n}\r\n\r\nexport default interface IUpdateResult {\r\n  resultType: UpdateResultType;\r\n  updaterId: string;\r\n  updaterIndex: number;\r\n  message: string;\r\n  itemStoragePath: string | null | undefined;\r\n  data: string | boolean | number | object | number[] | undefined;\r\n  itemId: string | undefined;\r\n  content: string | undefined;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IUpdateResult, { UpdateResultType } from \"./IUpdateResult\";\r\n\r\nexport default class ProjectUpdateResult {\r\n  #data: IUpdateResult;\r\n\r\n  get dataObject() {\r\n    return this.#data;\r\n  }\r\n\r\n  get resultType() {\r\n    return this.#data.resultType;\r\n  }\r\n\r\n  get message() {\r\n    return this.#data.message;\r\n  }\r\n\r\n  get updaterId() {\r\n    return this.#data.updaterId;\r\n  }\r\n\r\n  get updaterIndex() {\r\n    return this.#data.updaterIndex;\r\n  }\r\n\r\n  get data() {\r\n    return this.#data.data;\r\n  }\r\n\r\n  get content() {\r\n    return this.#data.content;\r\n  }\r\n\r\n  get contentSummary() {\r\n    let errorContent = this.#data.content;\r\n    if (errorContent) {\r\n      errorContent = errorContent.replace(/\\n/gi, \" \");\r\n      errorContent = errorContent.replace(/\\r/gi, \" \");\r\n\r\n      if (errorContent.length > 80) {\r\n        errorContent = errorContent.substring(0, 77) + \"...\";\r\n      }\r\n    }\r\n\r\n    return errorContent;\r\n  }\r\n\r\n  get typeSummary() {\r\n    switch (this.#data.resultType) {\r\n      case UpdateResultType.noChange:\r\n        return \"No changes\";\r\n\r\n      case UpdateResultType.updatedFile:\r\n        return \"Updated file\";\r\n\r\n      default:\r\n        return \"Unknown\";\r\n    }\r\n  }\r\n\r\n  get typeSummaryShort() {\r\n    let short = this.typeSummary.toUpperCase();\r\n\r\n    short = short.replace(/\\s/g, \"\");\r\n\r\n    return short;\r\n  }\r\n\r\n  toString() {\r\n    let summaryString = this.typeSummaryShort + \": \";\r\n\r\n    summaryString += \"[\" + this.updaterId + Utilities.frontPadToLength(this.updaterIndex, 3, \"0\") + \"] \";\r\n\r\n    summaryString += this.message;\r\n\r\n    if (this.data) {\r\n      summaryString += \": \" + this.data;\r\n    }\r\n\r\n    const errorContent = this.contentSummary;\r\n\r\n    if (errorContent) {\r\n      summaryString += \" [in \" + errorContent + \"]\";\r\n    }\r\n\r\n    return summaryString;\r\n  }\r\n\r\n  constructor(\r\n    resultType: UpdateResultType,\r\n    updaterId: string,\r\n    updaterIndex: number,\r\n    message: string,\r\n    projectItem?: ProjectItem,\r\n    data?: string | boolean | number | object | number[],\r\n    itemId?: string,\r\n    content?: string\r\n  ) {\r\n    this.#data = {\r\n      resultType: resultType,\r\n      updaterId: updaterId,\r\n      updaterIndex: updaterIndex,\r\n      message: message,\r\n      itemStoragePath: projectItem ? projectItem.projectPath : undefined,\r\n      data: data,\r\n      itemId: itemId,\r\n      content: content,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport Project from \"../app/Project\";\r\nimport { MinecraftTrack } from \"../app/ICreatorToolsData\";\r\n\r\nexport default class EnvSettings {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<EnvSettings, EnvSettings>();\r\n\r\n  public project: Project | undefined = undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<EnvSettings, EnvSettings>) {\r\n    let envf: EnvSettings | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      envf = new EnvSettings();\r\n\r\n      envf.file = file;\r\n\r\n      file.manager = envf;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof EnvSettings) {\r\n      envf = file.manager as EnvSettings;\r\n\r\n      if (!envf.isLoaded && loadHandler) {\r\n        envf.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await envf.load();\r\n\r\n      return envf;\r\n    }\r\n\r\n    return envf;\r\n  }\r\n\r\n  async ensureEnvFile(project: Project) {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.load();\r\n\r\n    let content = this._file?.content;\r\n\r\n    if (content === null) {\r\n      content = \"\";\r\n    }\r\n\r\n    if (content && typeof content === \"string\") {\r\n    }\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this._file.isContentLoaded && this.project && this._file.content && typeof this._file.content === \"string\") {\r\n      this._file.setContent(\r\n        await EnvSettings.getContent(this.project, this._file.content),\r\n        FileUpdateType.versionlessEdit\r\n      );\r\n    }\r\n\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent(true);\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n\r\n  static async getContent(project: Project, content?: string) {\r\n    if (content === undefined) {\r\n      content = 'PROJECT_NAME=\"\"\\nMINECRAFT_PRODUCT=\"BedrockGDK\"\\nCUSTOM_DEPLOYMENT_PATH=\"\"\\n';\r\n    }\r\n\r\n    const folder = await project.getDefaultBehaviorPackFolder();\r\n\r\n    if (folder) {\r\n      let projectNameIndex = content.indexOf('PROJECT_NAME=\"');\r\n\r\n      if (projectNameIndex >= 0) {\r\n        let projectNameNewQuote = content.indexOf('\"', projectNameIndex + 14);\r\n\r\n        if (projectNameNewQuote > projectNameIndex) {\r\n          content =\r\n            content.substring(0, projectNameIndex) +\r\n            'PROJECT_NAME=\"' +\r\n            folder.name +\r\n            \"\" +\r\n            content.substring(projectNameNewQuote);\r\n        }\r\n      } else {\r\n        if (!content.endsWith(\"\\n\")) {\r\n          content += \"\\n\";\r\n        }\r\n\r\n        content = content + 'PROJECT_NAME=\"' + folder.name + '\"\\n';\r\n      }\r\n    }\r\n\r\n    let minecraftProductIndex = content.indexOf('MINECRAFT_PRODUCT=\"');\r\n    const trackStr = project.track === MinecraftTrack.preview ? \"PreviewGDK\" : \"BedrockGDK\";\r\n\r\n    if (minecraftProductIndex >= 0) {\r\n      let minecraftProductIndexNextQuote = content.indexOf('\"', minecraftProductIndex + 19);\r\n\r\n      if (minecraftProductIndexNextQuote > minecraftProductIndex) {\r\n        content =\r\n          content.substring(0, minecraftProductIndex) +\r\n          'MINECRAFT_PRODUCT=\"' +\r\n          trackStr +\r\n          content.substring(minecraftProductIndexNextQuote);\r\n      }\r\n    } else {\r\n      if (!content.endsWith(\"\\n\")) {\r\n        content += \"\\n\";\r\n      }\r\n\r\n      content = content + 'MINECRAFT_PRODUCT=\"' + trackStr + '\"\\n';\r\n    }\r\n\r\n    return content;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport NpmPackageDefinition from \"../devproject/NpmPackageDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport EnvSettings from \"../devproject/EnvSettings\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\n/**\r\n * Validates and updates script module dependencies in behavior pack manifests and npm packages.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/scriptmodule.form.json} for topic definitions\r\n */\r\nexport default class ScriptModuleManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"SCRIPTMODULE\";\r\n  title = \"Script Modules\";\r\n\r\n  modulesInUse: { [name: string]: { version: string; manifest: BehaviorManifestDefinition; item: ProjectItem }[] } = {};\r\n  packRegsInUse: { [name: string]: { package: NpmPackageDefinition; isDevDependency: boolean; version: string }[] } =\r\n    {};\r\n\r\n  getUpdaterData(topicId: number) {\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  private async generateProjectState(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    this.modulesInUse = {};\r\n    this.packRegsInUse = {};\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpManifest = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifest && bpManifest.definition && bpManifest.definition.dependencies) {\r\n            const deps = bpManifest.definition.dependencies;\r\n\r\n            for (let j = 0; j < deps.length; j++) {\r\n              const dep = deps[j];\r\n\r\n              if (dep.module_name && dep.version) {\r\n                let verStr = \"\";\r\n                if (typeof dep.version === \"string\") {\r\n                  verStr = dep.version;\r\n                } else {\r\n                  verStr = dep.version.join(\".\");\r\n                }\r\n\r\n                if (Utilities.isUsableAsObjectKey(dep.module_name)) {\r\n                  if (!this.modulesInUse[dep.module_name]) {\r\n                    this.modulesInUse[dep.module_name] = [];\r\n                  }\r\n\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.info,\r\n                      this.id,\r\n                      100,\r\n                      \"Behavior pack dependency on \" + verStr + \" at \" + dep.module_name,\r\n                      pi,\r\n                      verStr,\r\n                      dep.module_name\r\n                    )\r\n                  );\r\n\r\n                  this.modulesInUse[dep.module_name].push({ version: verStr, manifest: bpManifest, item: pi });\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.packageJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const npmPackageJson = await NpmPackageDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (npmPackageJson && npmPackageJson.definition) {\r\n            const deps = npmPackageJson.definition.dependencies;\r\n            const devDeps = npmPackageJson.definition.devDependencies;\r\n\r\n            if (deps) {\r\n              for (const depKey in deps) {\r\n                if (depKey.startsWith(\"@minecraft/\")) {\r\n                  if (!this.packRegsInUse[depKey]) {\r\n                    this.packRegsInUse[depKey] = [];\r\n                  }\r\n\r\n                  this.packRegsInUse[depKey].push({\r\n                    package: npmPackageJson,\r\n                    isDevDependency: false,\r\n                    version: deps[depKey],\r\n                  });\r\n\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.info,\r\n                      this.id,\r\n                      101,\r\n                      \"Package.json registers usage of \" + depKey + \" at \" + deps[depKey],\r\n                      pi,\r\n                      deps[depKey],\r\n                      depKey\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n\r\n            if (devDeps) {\r\n              for (const depKey in devDeps) {\r\n                if (depKey.startsWith(\"@minecraft/\")) {\r\n                  if (!this.packRegsInUse[depKey]) {\r\n                    this.packRegsInUse[depKey] = [];\r\n                  }\r\n\r\n                  this.packRegsInUse[depKey].push({\r\n                    package: npmPackageJson,\r\n                    isDevDependency: true,\r\n                    version: devDeps[depKey],\r\n                  });\r\n\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.info,\r\n                      this.id,\r\n                      102,\r\n                      \"Package.json registers developer usage of \" + depKey + \" at \" + devDeps[depKey],\r\n                      pi,\r\n                      devDeps[depKey],\r\n                      depKey\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.env) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const envFile = await EnvSettings.ensureOnFile(pi.primaryFile);\r\n\r\n          await envFile?.ensureEnvFile(project);\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = await this.generateProjectState(project);\r\n\r\n    let hasPackageJson = false;\r\n\r\n    for (const item of project.items) {\r\n      if (item.itemType === ProjectItemType.packageJson) {\r\n        hasPackageJson = true;\r\n      }\r\n    }\r\n\r\n    for (const moduleName in this.modulesInUse) {\r\n      const moduleInfo = this.modulesInUse[moduleName];\r\n\r\n      if (moduleInfo) {\r\n        const npmModule = await Database.getModuleDescriptor(moduleName);\r\n\r\n        if (npmModule) {\r\n          if (npmModule.betaVersion) {\r\n            for (let k = 0; k < moduleInfo.length; k++) {\r\n              const mod = moduleInfo[k];\r\n\r\n              if (mod.version.indexOf(\"-beta\") >= 0) {\r\n                if (!mod.version.startsWith(npmModule.betaVersion)) {\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      114,\r\n                      \"For \" +\r\n                        moduleName +\r\n                        \", using an out of date beta version \" +\r\n                        mod.version +\r\n                        \" compared to the current version\",\r\n                      mod.item,\r\n                      mod.version\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n\r\n          const packReg = this.packRegsInUse[moduleName];\r\n\r\n          if (!packReg && hasPackageJson) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                110,\r\n                \"Could not find an package.json registration for \" + moduleName,\r\n                undefined,\r\n                moduleName\r\n              )\r\n            );\r\n          }\r\n        } else if (hasPackageJson) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              111,\r\n              \"Could not find an NPMJS.org NPM module registration for \" + moduleName,\r\n              undefined,\r\n              moduleName\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case 1:\r\n        const localResults = await this.updateModulesToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [1];\r\n  }\r\n\r\n  async updateModulesToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    await this.generateProjectState(project);\r\n\r\n    for (const moduleName in this.modulesInUse) {\r\n      const moduleInfo = this.modulesInUse[moduleName];\r\n\r\n      if (moduleInfo) {\r\n        const npmModule = await Database.getModuleDescriptor(moduleName);\r\n\r\n        if (npmModule) {\r\n          for (let k = 0; k < moduleInfo.length; k++) {\r\n            const mod = moduleInfo[k];\r\n\r\n            if (mod.version.indexOf(\"-beta\") >= 0) {\r\n              if (npmModule.betaVersion) {\r\n                const isChanged = mod.manifest.setModuleVersion(moduleName, npmModule.betaVersion + \"-beta\");\r\n\r\n                if (isChanged) {\r\n                  await mod.manifest.save();\r\n                  results.push(\r\n                    new ProjectUpdateResult(\r\n                      UpdateResultType.updatedFile,\r\n                      this.id,\r\n                      1,\r\n                      \"Set module to latest beta version\",\r\n                      undefined,\r\n                      npmModule.betaVersion + \"-beta\"\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            } else if (mod.version.indexOf(\"-\") < 1) {\r\n              if (npmModule.latest) {\r\n                mod.manifest.setModuleVersion(moduleName, npmModule.latest);\r\n                await mod.manifest.save();\r\n\r\n                results.push(\r\n                  new ProjectUpdateResult(\r\n                    UpdateResultType.updatedFile,\r\n                    this.id,\r\n                    1,\r\n                    \"Set module to latest stable version\",\r\n                    undefined,\r\n                    npmModule.latest\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IVsCodeTasks from \"./IVsCodeTasks\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class VsCodeTasksDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _version?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: IVsCodeTasks;\r\n\r\n  private _onLoaded = new EventDispatcher<VsCodeTasksDefinition, VsCodeTasksDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<VsCodeTasksDefinition, VsCodeTasksDefinition>) {\r\n    let dt: VsCodeTasksDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new VsCodeTasksDefinition();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof VsCodeTasksDefinition) {\r\n      dt = file.manager as VsCodeTasksDefinition;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"VCTP\");\r\n\r\n    if (this.definition) {\r\n      return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async hasMinContent() {\r\n    await this.load();\r\n\r\n    if (!this.definition || !this.definition.tasks) {\r\n      return false;\r\n    }\r\n\r\n    for (const task of this.definition.tasks) {\r\n      if (task.dependsOn && task.label === \"build\") {\r\n        for (const dependsOn of task.dependsOn) {\r\n          const strTask = Utilities.replaceAll(dependsOn.toLowerCase(), \" \", \"\");\r\n\r\n          if (strTask === \"minecraft:deploy\") {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async ensureMinContent() {\r\n    const hasTasks = await this.hasMinContent();\r\n\r\n    if (hasTasks) {\r\n      return true;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      this.definition = {};\r\n    }\r\n\r\n    if (!this.definition.version) {\r\n      this.definition.version = \"2.0.0\";\r\n    }\r\n\r\n    if (!this.definition.tasks) {\r\n      this.definition.tasks = [];\r\n    }\r\n\r\n    let hasBuildDependsOn = false;\r\n    for (const task of this.definition.tasks) {\r\n      if (task.label === \"build\") {\r\n        if (!task.dependsOn) {\r\n          task.dependsOn = [];\r\n        }\r\n\r\n        for (const dependsOn of task.dependsOn) {\r\n          const strTask = Utilities.replaceAll(dependsOn.toLowerCase(), \" \", \"\");\r\n\r\n          if (strTask === \"minecraft:deploy\") {\r\n            hasBuildDependsOn = true;\r\n          }\r\n        }\r\n\r\n        if (!hasBuildDependsOn) {\r\n          task.dependsOn.push(\"minecraft: deploy\");\r\n          hasBuildDependsOn = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!hasBuildDependsOn) {\r\n      this.definition.tasks.push({\r\n        label: \"build\",\r\n        dependsOrder: \"sequence\",\r\n        dependsOn: [\"minecraft: deploy\"],\r\n      });\r\n\r\n      return true;\r\n    }\r\n\r\n    return hasBuildDependsOn;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent();\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    try {\r\n      const data: any = JSON.parse(this._file.content);\r\n\r\n      this.definition = data;\r\n    } catch (e) {\r\n      Log.fail(\"Could not parse vscode launch JSON \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IDebugSettings from \"./IDebugSettings\";\r\nimport IVsCodeLaunch, { IVsCodeConfiguration } from \"./IVsCodeLaunch\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class VsCodeLaunchDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: IVsCodeLaunch;\r\n\r\n  private _onLoaded = new EventDispatcher<VsCodeLaunchDefinition, VsCodeLaunchDefinition>();\r\n\r\n  public project: Project | undefined = undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<VsCodeLaunchDefinition, VsCodeLaunchDefinition>) {\r\n    let dt: VsCodeLaunchDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new VsCodeLaunchDefinition();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof VsCodeLaunchDefinition) {\r\n      dt = file.manager as VsCodeLaunchDefinition;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async hasMinContent(debugSettings?: IDebugSettings) {\r\n    if (!debugSettings) {\r\n      debugSettings = { isServer: false };\r\n    }\r\n\r\n    await this.load();\r\n\r\n    if (!this.definition || !this.definition.configurations) {\r\n      return false;\r\n    }\r\n\r\n    for (const config of this.definition.configurations) {\r\n      if (config.type && config.type === \"minecraft-js\") {\r\n        if (debugSettings.isServer && config.mode === \"listen\") {\r\n          return false;\r\n        }\r\n\r\n        if (!debugSettings.isServer && config.mode !== \"listen\") {\r\n          return false;\r\n        }\r\n\r\n        if (debugSettings.port && config.port !== debugSettings.port) {\r\n          return false;\r\n        }\r\n\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async ensureMinContent(debugSettings?: IDebugSettings) {\r\n    if (!debugSettings) {\r\n      debugSettings = { isServer: false };\r\n    }\r\n\r\n    const hasDebug = await this.hasMinContent(debugSettings);\r\n\r\n    if (hasDebug) {\r\n      return true;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      this.definition = {};\r\n    }\r\n\r\n    if (!this.definition.version || this.definition.version === \"0.2.0\") {\r\n      this.definition.version = \"0.3.0\";\r\n    }\r\n\r\n    if (!this.definition.configurations) {\r\n      this.definition.configurations = [];\r\n    }\r\n\r\n    let hasMinecraftConfig = false;\r\n    for (const config of this.definition.configurations) {\r\n      if (config.type === \"minecraft-js\") {\r\n        await this.applyDebugSettingsToConfig(config, debugSettings);\r\n        hasMinecraftConfig = true;\r\n      }\r\n    }\r\n\r\n    if (!hasMinecraftConfig) {\r\n      const minecraftConfig = {\r\n        type: \"minecraft-js\",\r\n        port: debugSettings.port ? debugSettings.port : 19144,\r\n      };\r\n\r\n      await this.applyDebugSettingsToConfig(minecraftConfig, debugSettings);\r\n\r\n      this.definition.configurations.push(minecraftConfig);\r\n\r\n      return true;\r\n    }\r\n\r\n    return hasMinecraftConfig;\r\n  }\r\n\r\n  private async applyDebugSettingsToConfig(config: IVsCodeConfiguration, debugSettings: IDebugSettings) {\r\n    if (debugSettings.isServer) {\r\n      config.mode = undefined;\r\n    } else {\r\n      config.mode = \"listen\";\r\n    }\r\n\r\n    if (config.name === undefined) {\r\n      config.name = \"Debug with Minecraft\";\r\n    }\r\n\r\n    if (config.preLaunchTask === undefined) {\r\n      config.preLaunchTask = \"build\";\r\n    }\r\n\r\n    let bpName = debugSettings.behaviorPackFolderName;\r\n\r\n    if (bpName === undefined) {\r\n      bpName = \"starterbp\";\r\n    }\r\n\r\n    if (!config.targetedModuleUuid && this.project) {\r\n      const pack = await this.project.getDefaultBehaviorPack();\r\n      if (pack) {\r\n        if (pack.manifest instanceof BehaviorManifestDefinition) {\r\n          const module = pack.manifest.getScriptModule();\r\n\r\n          if (module) {\r\n            config.targetedModuleUuid = module.uuid;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!config.sourceMapRoot) {\r\n      // eslint-disable-next-line no-template-curly-in-string\r\n      config.sourceMapRoot = \"${workspaceFolder}/dist/debug/\";\r\n    }\r\n\r\n    if (!config.generatedSourceRoot) {\r\n      // eslint-disable-next-line no-template-curly-in-string\r\n      config.generatedSourceRoot = \"${workspaceFolder}/dist/scripts/\";\r\n    }\r\n\r\n    if (debugSettings.port) {\r\n      config.port = debugSettings.port;\r\n    }\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"VSLP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    this.persist();\r\n\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent();\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    this.definition = StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemStorageType, ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport VsCodeTasksDefinition from \"../devproject/VsCodeTasksDefinition\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport VsCodeLaunchDefinition from \"../devproject/VsCodeLaunchDefinition\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport IDebugSettings from \"../devproject/IDebugSettings\";\r\n\r\n/**\r\n * Validates and updates VS Code configuration files (tasks.json, launch.json).\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/vscodefile.form.json} for topic definitions\r\n */\r\nexport default class VsCodeFileManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"VSCODEFILE\";\r\n  title = \"VSCode Files\";\r\n\r\n  getUpdaterData(updateId: number) {\r\n    return {\r\n      title: updateId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const pi of itemsCopy) {\r\n      if (pi.itemType === ProjectItemType.vsCodeTasksJson && pi.storageType === ProjectItemStorageType.singleFile) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const vscodeTasksJson = await VsCodeTasksDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (vscodeTasksJson) {\r\n            const hasMinecraftTasks = await vscodeTasksJson.hasMinContent();\r\n\r\n            if (!hasMinecraftTasks) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  100,\r\n                  \"Project has a VSCode tasks file, but no minecraft deploy tasks.\",\r\n                  pi,\r\n                  undefined,\r\n                  pi.primaryFile.storageRelativePath\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if (\r\n        pi.itemType === ProjectItemType.vsCodeLaunchJson &&\r\n        pi.storageType === ProjectItemStorageType.singleFile\r\n      ) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const vscodeLaunchJson = await VsCodeLaunchDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (vscodeLaunchJson) {\r\n            vscodeLaunchJson.project = project;\r\n            const hasMinecraftDebugConfig = await vscodeLaunchJson.hasMinContent({ isServer: true });\r\n\r\n            if (!hasMinecraftDebugConfig) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  101,\r\n                  \"Project has a VSCode launch file, but is not configured for Minecraft server launch.\",\r\n                  pi,\r\n                  undefined,\r\n                  pi.primaryFile.storageRelativePath\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case 1:\r\n        results.push(...(await this.ensureMinecraftLaunchTasks(project)));\r\n        break;\r\n      case 2:\r\n        results.push(...(await this.ensureMinecraftDebugConfig(project)));\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [1, 2];\r\n  }\r\n\r\n  async ensureMinecraftLaunchTasks(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const pi of itemsCopy) {\r\n      if (pi.itemType === ProjectItemType.vsCodeTasksJson && pi.storageType === ProjectItemStorageType.singleFile) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const vscodeTasksJson = await VsCodeTasksDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (vscodeTasksJson) {\r\n            const hasTasks = await vscodeTasksJson.hasMinContent();\r\n\r\n            if (!hasTasks) {\r\n              const result = await vscodeTasksJson.ensureMinContent();\r\n\r\n              if (result) {\r\n                await vscodeTasksJson.save();\r\n                results.push(\r\n                  new ProjectUpdateResult(UpdateResultType.updatedFile, this.id, 1, \"Updated Minecraft Tasks\", pi)\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async ensureMinecraftDebugConfig(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const pi of itemsCopy) {\r\n      if (pi.itemType === ProjectItemType.vsCodeLaunchJson && pi.storageType === ProjectItemStorageType.singleFile) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const vscodeLaunchJson = await VsCodeLaunchDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          const pack = await project.getDefaultBehaviorPack();\r\n\r\n          const debugSettings: IDebugSettings = { isServer: true };\r\n\r\n          if (pack && pack.folder) {\r\n            debugSettings.behaviorPackFolderName = pack.folder.name;\r\n          }\r\n\r\n          if (vscodeLaunchJson) {\r\n            const hasConfig = await vscodeLaunchJson.hasMinContent(debugSettings);\r\n\r\n            if (!hasConfig) {\r\n              const result = await vscodeLaunchJson.ensureMinContent(debugSettings);\r\n\r\n              if (result) {\r\n                await vscodeLaunchJson.save();\r\n                results.push(\r\n                  new ProjectUpdateResult(UpdateResultType.updatedFile, this.id, 2, \"Updated Minecraft Launch JSON\", pi)\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IWorldManifest, { IWorldManifestHeader } from \"./IWorldManifest\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class WorldTemplateManifestDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IWorldManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<WorldTemplateManifestDefinition, WorldTemplateManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  public get uuid() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set uuid(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<WorldTemplateManifestDefinition, WorldTemplateManifestDefinition>\r\n  ) {\r\n    let bmj: WorldTemplateManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      bmj = new WorldTemplateManifestDefinition();\r\n\r\n      bmj.file = file;\r\n\r\n      file.manager = bmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof WorldTemplateManifestDefinition) {\r\n      bmj = file.manager as WorldTemplateManifestDefinition;\r\n\r\n      if (!bmj.isLoaded) {\r\n        if (loadHandler) {\r\n          bmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await bmj.load();\r\n      }\r\n    }\r\n\r\n    return bmj;\r\n  }\r\n\r\n  get baseGameVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.base_game_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.base_game_version;\r\n  }\r\n\r\n  setBaseGameVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.base_game_version = versionArray;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      Log.unexpectedUndefined(\"WTMDF\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          base_game_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IWorldManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IWorldManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n      base_game_version: [1, 20, 10],\r\n    };\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this.uuid = this._file.name;\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nconst VersionParts = 3;\r\n/*\r\n  immutable structure defining semantic versioning with 3 parts: major, minor, and patch\r\n*/\r\nexport default class SemanticVersion {\r\n  static parse(version?: string | number | number[] | null): SemanticVersion | undefined {\r\n    if (!version) {\r\n      return undefined;\r\n    }\r\n\r\n    if (Array.isArray(version)) {\r\n      return SemanticVersion.fromArray(version);\r\n    }\r\n    if (typeof version === \"number\") {\r\n      return SemanticVersion.fromNumber(version);\r\n    }\r\n\r\n    return SemanticVersion.fromString(version);\r\n  }\r\n\r\n  static from(version: number[] | number | string) {\r\n    if (typeof version === \"string\") {\r\n      return SemanticVersion.fromString(version);\r\n    } else if (typeof version === \"number\") {\r\n      return SemanticVersion.fromNumber(version);\r\n    } else if (Array.isArray(version)) {\r\n      return SemanticVersion.fromArray(version);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static fromNumber(version: number): SemanticVersion | undefined {\r\n    if (version < 0) {\r\n      return undefined;\r\n    }\r\n\r\n    const major = Math.floor(version);\r\n\r\n    return new SemanticVersion(major, version - major, 0);\r\n  }\r\n\r\n  static fromString(version: string): SemanticVersion | undefined {\r\n    const tokens = version.split(\".\");\r\n\r\n    if (tokens.length === 0) {\r\n      return undefined;\r\n    }\r\n\r\n    const versionNums = tokens.map((num) => parseInt(num));\r\n    if (versionNums.some(Number.isNaN)) {\r\n      return undefined;\r\n    }\r\n\r\n    return new SemanticVersion(versionNums[0], versionNums[1] || 0, versionNums[2] || 0);\r\n  }\r\n\r\n  static fromArray(versionNums?: number[] | null): SemanticVersion | undefined {\r\n    if (!versionNums || versionNums.length !== VersionParts) {\r\n      return undefined;\r\n    }\r\n\r\n    return new SemanticVersion(versionNums[0], versionNums[1], versionNums[2]);\r\n  }\r\n\r\n  get majorVersion(): number {\r\n    return this.major;\r\n  }\r\n  get minorVersion(): number {\r\n    return this.minor;\r\n  }\r\n  get patchVersion(): number {\r\n    return this.patch;\r\n  }\r\n\r\n  constructor(private major: number, private minor: number, private patch: number) {}\r\n\r\n  asString() {\r\n    return `${this.major}.${this.minor}.${this.patch}`;\r\n  }\r\n\r\n  asArray() {\r\n    return [this.major, this.minor, this.patch];\r\n  }\r\n\r\n  equals(other: SemanticVersion): boolean {\r\n    return this.major === other.major && this.minor === other.minor && this.patch === other.patch;\r\n  }\r\n\r\n  increment(major: number = 0, minor: number = 0, patch: number = 0): SemanticVersion {\r\n    return new SemanticVersion(this.major + major, this.minor + minor, this.patch + patch);\r\n  }\r\n\r\n  /*\r\n    returns a numeric comparison value\r\n    0 is equal, <0 (i.e. negative values) mean this is less than the other value, >0 mean this is greater than the other value\r\n  */\r\n  compareTo(other: SemanticVersion): number {\r\n    return this.major - other.major || this.minor - other.minor || this.patch - other.patch;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Minecraft version rules and special-case logic for version comparisons.\r\n *\r\n * Minecraft skipped minor versions 1.22 through 1.25, jumping directly from\r\n * 1.21 to 1.26. When validating that a creator's content is at version N or\r\n * N-1, we need to treat 1.21 as the predecessor of 1.26 rather than applying\r\n * simple arithmetic (1.26 - 1 = 1.25).\r\n *\r\n * This module provides a helper that returns the effective \"previous\" minor\r\n * version for a given current version, accounting for any skipped ranges.\r\n */\r\n\r\n/**\r\n * Table of skipped minor-version ranges within a given major version.\r\n * Each entry means: for major version `major`, minor versions from\r\n * `skippedMinStart` through `skippedMinEnd` (inclusive) were never released,\r\n * so the effective predecessor of `skippedMinEnd + 1` is `skippedMinStart - 1`.\r\n */\r\nconst SKIPPED_MINOR_RANGES: { major: number; skippedMinStart: number; skippedMinEnd: number }[] = [\r\n  // Minecraft jumped from 1.21 directly to 1.26\r\n  { major: 1, skippedMinStart: 22, skippedMinEnd: 25 },\r\n];\r\n\r\n/**\r\n * Returns the effective previous minor version for a given major.minor,\r\n * taking into account any skipped Minecraft version ranges.\r\n *\r\n * For example, if current is 1.26, the effective previous minor is 21\r\n * (not 25, because 1.22\u20131.25 were skipped).\r\n *\r\n * If there is no skip affecting the given version, it simply returns\r\n * `minor - 1`.\r\n */\r\nexport function getEffectivePreviousMinor(major: number, minor: number): number {\r\n  for (const range of SKIPPED_MINOR_RANGES) {\r\n    if (major === range.major && minor === range.skippedMinEnd + 1) {\r\n      // The current version sits right after a skipped range, so the\r\n      // real predecessor is the version just before the skip started.\r\n      return range.skippedMinStart - 1;\r\n    }\r\n  }\r\n\r\n  return minor - 1;\r\n}\r\n\r\n/**\r\n * Returns true if `candidateMinor` should be considered \"too old\" relative\r\n * to `currentMinor` for the given `major` version \u2014 i.e., it is older than\r\n * the N-1 window once skipped versions are taken into account.\r\n *\r\n * This replaces the na\u00EFve check `candidateMinor < currentMinor - 1`.\r\n */\r\nexport function isMinorVersionTooOld(major: number, currentMinor: number, candidateMinor: number): boolean {\r\n  const effectivePrev = getEffectivePreviousMinor(major, currentMinor);\r\n  return candidateMinor < effectivePrev;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport { IProjectInfoTopicData } from \"../info/IProjectInfoGeneratorBase\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport SkinManifestDefinition from \"../minecraft/SkinManifestDefinition\";\r\nimport WorldTemplateManifestDefinition from \"../minecraft/WorldTemplateManifestDefinition\";\r\nimport PersonaManifestDefinition from \"../minecraft/PersonaManifestDefinition\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport SemanticVersion from \"../core/versioning/SemanticVersion\";\r\nimport { isMinorVersionTooOld } from \"../core/versioning/MinecraftVersionRules\";\r\n\r\n/**\r\n * Validates and updates min_engine_version settings in pack manifests.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/minenginever.form.json} for topic definitions\r\n */\r\nexport enum MinEngineVersionManagerTest {\r\n  behaviorPackMinEngineVersion = 100,\r\n  behaviorPackMinEngineVersionMajorLowerThanCurrent = 110,\r\n  behaviorPackMinEngineVersionMajorHigherThanCurrent = 111,\r\n  behaviorPackMinEngineVersionMinorLowerThanCurrent = 120,\r\n  behaviorPackMinEngineVersionMinorHigherThanCurrent = 121,\r\n  behaviorPackMinEngineVersionPatchLowerThanCurrent = 130,\r\n  behaviorPackMinEngineVersionPatchHigherThanCurrent = 131,\r\n  noPackManifestFound = 180,\r\n  versionProcessingErrorsFound = 181,\r\n  resourcePackMinEngineVersion = 200,\r\n  resourcePackMinEngineVersionMajorLowerThanCurrent = 210,\r\n  resourcePackMinEngineVersionMajorHigherThanCurrent = 211,\r\n  resourcePackMinEngineVersionMinorLowerThanCurrent = 220,\r\n  resourcePackMinEngineVersionMinorHigherThanCurrent = 221,\r\n  resourcePackMinEngineVersionPatchLowerThanCurrent = 230,\r\n  resourcePackMinEngineVersionPatchHigherThanCurrent = 231,\r\n  retrieveLatestMinecraftVersion = 500,\r\n  parseLatestMinecraftVersion = 501,\r\n}\r\n\r\nexport default class MinEngineVersionManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"MINENGINEVER\";\r\n  title = \"Min Engine Version\";\r\n\r\n  performPlatformVersionValidations: boolean = false;\r\n\r\n  getTopicData(topicId: number): IProjectInfoTopicData | undefined {\r\n    const updateMinEngineVersion = {\r\n      updaterId: this.id,\r\n      updaterIndex: 1,\r\n      action: \"Set min_engine_version to latest version.\",\r\n    };\r\n\r\n    switch (topicId) {\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersion:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Defined\",\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionMajorLowerThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Major Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionMajorHigherThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Major Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionMinorLowerThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Minor Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionMinorHigherThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Minor Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionPatchLowerThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Patch Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionPatchHigherThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Patch Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersion:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Defined\",\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionMajorLowerThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Major Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionMajorHigherThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Major Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionMinorLowerThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Minor Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionMinorHigherThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Minor Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionPatchLowerThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Patch Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionPatchHigherThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Patch Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.retrieveLatestMinecraftVersion:\r\n        return {\r\n          title: \"Retrieve Latest Minecraft Version\",\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.parseLatestMinecraftVersion:\r\n        return {\r\n          title: \"Parse Latest Minecraft Version\",\r\n        };\r\n    }\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n    let foundBpManifest = false;\r\n    let foundRpManifest = false;\r\n    let foundSpManifest = false;\r\n    let foundWorldTemplateManifest = false;\r\n    let foundPersonaManifest = false;\r\n\r\n    if (!ver) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          MinEngineVersionManagerTest.retrieveLatestMinecraftVersion,\r\n          \"Could not retrieve version.\"\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          MinEngineVersionManagerTest.parseLatestMinecraftVersion,\r\n          \"Could not process latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verShort = verSplit[0] + \".\" + verSplit[1] + \".\" + verSplit[2];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          foundBpManifest = true;\r\n          const bpManifest = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifest) {\r\n            if (\r\n              !bpManifest.definition ||\r\n              !bpManifest.definition.header ||\r\n              !bpManifest.definition.header.min_engine_version\r\n            ) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  MinEngineVersionManagerTest.behaviorPackMinEngineVersion,\r\n                  \"Behavior pack manifest does not define a header/min_engine_version.\",\r\n                  pi\r\n                )\r\n              );\r\n            } else {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  600 + (pi.itemType as number),\r\n                  ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" min_engine_version\",\r\n                  pi,\r\n                  bpManifest.minEngineVersion\r\n                )\r\n              );\r\n\r\n              const sv = SemanticVersion.from(bpManifest.definition.header.min_engine_version);\r\n\r\n              if (sv) {\r\n                const bpVer = sv.asArray();\r\n\r\n                if (bpVer[0] < parseInt(verSplit[0])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.behaviorPackMinEngineVersionMajorLowerThanCurrent,\r\n                      \"Behavior pack manifest (\" +\r\n                        bpVer.join(\".\") +\r\n                        \") has a lower major version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (bpVer[0] > parseInt(verSplit[0])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.behaviorPackMinEngineVersionMajorHigherThanCurrent,\r\n                      \"Behavior pack manifest (\" +\r\n                        bpVer.join(\".\") +\r\n                        \") has a higher major version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (isMinorVersionTooOld(parseInt(verSplit[0]), parseInt(verSplit[1]), bpVer[1])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.behaviorPackMinEngineVersionMinorLowerThanCurrent,\r\n                      \"Behavior pack manifest (\" +\r\n                        bpVer.join(\".\") +\r\n                        \") has a lower minor version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \") or its previous minor version\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (bpVer[1] > parseInt(verSplit[1])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.behaviorPackMinEngineVersionMinorHigherThanCurrent,\r\n                      \"Behavior pack manifest (\" +\r\n                        bpVer.join(\".\") +\r\n                        \") has a higher minor version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const rpManifest = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n          if (rpManifest) {\r\n            foundRpManifest = true;\r\n            if (\r\n              !rpManifest.definition ||\r\n              !rpManifest.definition.header ||\r\n              !rpManifest.definition.header.min_engine_version\r\n            ) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  MinEngineVersionManagerTest.resourcePackMinEngineVersion,\r\n                  \"Resource pack manifest does not define a header/min_engine_version.\",\r\n                  pi\r\n                )\r\n              );\r\n            } else {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  600 + (pi.itemType as number),\r\n                  ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                  pi,\r\n                  rpManifest.minEngineVersion\r\n                )\r\n              );\r\n\r\n              const sv = SemanticVersion.from(rpManifest.definition.header.min_engine_version);\r\n\r\n              if (sv) {\r\n                const rpVer = sv.asArray();\r\n\r\n                if (rpVer[0] < parseInt(verSplit[0])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.resourcePackMinEngineVersionMajorLowerThanCurrent,\r\n                      \"Resource pack manifest (\" +\r\n                        rpVer.join(\".\") +\r\n                        \") has a lower major version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (rpVer[0] > parseInt(verSplit[0])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.resourcePackMinEngineVersionMajorHigherThanCurrent,\r\n                      \"Resource pack manifest (\" +\r\n                        rpVer.join(\".\") +\r\n                        \") has a higher major version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (isMinorVersionTooOld(parseInt(verSplit[0]), parseInt(verSplit[1]), rpVer[1])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.resourcePackMinEngineVersionMinorLowerThanCurrent,\r\n                      \"Resource pack manifest (\" +\r\n                        rpVer.join(\".\") +\r\n                        \") has a lower minor version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \") or its previous minor version\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (rpVer[1] > parseInt(verSplit[1])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.resourcePackMinEngineVersionMinorHigherThanCurrent,\r\n                      \"Resource pack manifest (\" +\r\n                        rpVer.join(\".\") +\r\n                        \") has a higher minor version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.skinPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const spManifest = await SkinManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (spManifest) {\r\n            foundSpManifest = true;\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const wtManifest = await WorldTemplateManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (wtManifest) {\r\n            foundWorldTemplateManifest = true;\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.personaManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const paManifest = await PersonaManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (paManifest) {\r\n            foundPersonaManifest = true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (\r\n      !foundBpManifest &&\r\n      !foundRpManifest &&\r\n      !foundSpManifest &&\r\n      !foundWorldTemplateManifest &&\r\n      !foundPersonaManifest\r\n    ) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          MinEngineVersionManagerTest.noPackManifestFound,\r\n          \"No resource/behavior/skin pack manifest or world template manifest was found.\"\r\n        )\r\n      );\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case 1:\r\n        const localResults = await this.updateMinEngineVersionToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [1];\r\n  }\r\n\r\n  async updateMinEngineVersionToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      results.push(\r\n        new ProjectUpdateResult(UpdateResultType.internalProcessingError, this.id, 199, \"Could not retrieve version.\")\r\n      );\r\n\r\n      return results;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          200,\r\n          \"Could not retrieve latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return results;\r\n    }\r\n\r\n    const major = parseInt(verSplit[0]);\r\n    const minor = parseInt(verSplit[1]);\r\n    const patch = parseInt(verSplit[2]);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpManifest = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifest) {\r\n            const mev = bpManifest.minEngineVersion;\r\n\r\n            if (!mev || mev.length < 3 || mev.length > 4 || mev[0] !== major || mev[1] !== minor || mev[2] !== patch) {\r\n              bpManifest.setMinEngineVersion([major, minor, patch], project);\r\n              bpManifest.persist();\r\n\r\n              results.push(\r\n                new ProjectUpdateResult(\r\n                  UpdateResultType.updatedFile,\r\n                  this.id,\r\n                  200,\r\n                  \"Updated behavior pack min_engine_version to '\" + major + \".\" + minor + \".\" + patch + \"'.\",\r\n                  pi,\r\n                  ver\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const rpManifest = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifest) {\r\n            const mev = rpManifest.minEngineVersion;\r\n\r\n            if (!mev || mev.length < 3 || mev.length > 4 || mev[0] !== major || mev[1] !== minor || mev[2] !== patch) {\r\n              rpManifest.setMinEngineVersion([major, minor, patch], project);\r\n              rpManifest.persist();\r\n\r\n              results.push(\r\n                new ProjectUpdateResult(\r\n                  UpdateResultType.updatedFile,\r\n                  this.id,\r\n                  201,\r\n                  \"Updated resource pack min_engine_version to '\" + major + \".\" + minor + \".\" + patch + \"'.\",\r\n                  pi,\r\n                  ver\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport WorldTemplateManifestDefinition from \"../minecraft/WorldTemplateManifestDefinition\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport { isMinorVersionTooOld } from \"../core/versioning/MinecraftVersionRules\";\r\n\r\n/**\r\n * Validates and updates base game version settings in world template manifests.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/basegamever.form.json} for topic definitions\r\n */\r\nexport default class BaseGameVersionManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"BASEGAMEVER\";\r\n  title = \"Base Game Version\";\r\n\r\n  performPlatformVersionValidations: boolean = false;\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, content: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(InfoItemType.internalProcessingError, this.id, 500, \"Could not retrieve version.\")\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          501,\r\n          \"Could not latest product retrieve version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verShort = verSplit[0] + \".\" + verSplit[1] + \".\" + verSplit[2];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpManifest = await WorldTemplateManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifest) {\r\n            if (\r\n              !bpManifest.definition ||\r\n              !bpManifest.definition.header ||\r\n              !bpManifest.definition.header.base_game_version\r\n            ) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  100,\r\n                  \"World template manifest does not define a header/base_game_version.\",\r\n                  pi\r\n                )\r\n              );\r\n            } else {\r\n              const bpVer = bpManifest?.definition?.header.base_game_version;\r\n\r\n              if (bpVer[0] < parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n                    this.id,\r\n                    110,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a lower major version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \")\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (bpVer[0] > parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    111,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a higher major version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \")\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (isMinorVersionTooOld(parseInt(verSplit[0]), parseInt(verSplit[1]), bpVer[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n                    this.id,\r\n                    120,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a lower minor version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \") or its previous minor version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (bpVer[1] > parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    121,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a higher minor version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \")\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (bpVer[2] < parseInt(verSplit[2])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    130,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a lower patch version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \")\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (bpVer[2] > parseInt(verSplit[2]) && bpVer[1] === parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    131,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a higher patch version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \")\",\r\n                    pi\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case 1:\r\n        const localResults = await this.updateBaseGameVersionToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [1];\r\n  }\r\n\r\n  async updateBaseGameVersionToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      results.push(\r\n        new ProjectUpdateResult(UpdateResultType.internalProcessingError, this.id, 199, \"Could not retrieve version.\")\r\n      );\r\n\r\n      return results;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          200,\r\n          \"Could not retrieve latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return results;\r\n    }\r\n\r\n    const major = parseInt(verSplit[0]);\r\n    const minor = parseInt(verSplit[1]);\r\n    const patch = parseInt(verSplit[2]);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const wtManifest = await WorldTemplateManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (wtManifest) {\r\n            const mev = wtManifest.baseGameVersion;\r\n\r\n            if (!mev || mev.length < 3 || mev.length > 4 || mev[0] !== major || mev[1] !== minor || mev[2] !== patch) {\r\n              wtManifest.setBaseGameVersion([major, minor, patch], project);\r\n              wtManifest.persist();\r\n\r\n              results.push(\r\n                new ProjectUpdateResult(\r\n                  UpdateResultType.updatedFile,\r\n                  this.id,\r\n                  200,\r\n                  \"Updated world template base_game_version to '\" + major + \".\" + minor + \".\" + patch + \"'.\",\r\n                  pi,\r\n                  ver\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "import ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ITagData from \"../app/ITagData\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport interface IPackSummaryMetadata {\r\n  pack?: IPackSummaryMetadataPack;\r\n  offerStructure?: IPackSummaryMetadataOfferStructure;\r\n  offer: IPackSummaryMetadataOffer;\r\n}\r\n\r\nexport interface IPackSummaryMetadataOfferStructure {\r\n  PackCount: number;\r\n  Type: string;\r\n  Version: string;\r\n  DisplayName: string;\r\n  Id: string;\r\n}\r\n\r\nexport interface IPackSummaryMetadataPack {\r\n  Offer: IPackSummaryMetadataPackOffer;\r\n  Id: string;\r\n  OfferId: string;\r\n  Type: string;\r\n}\r\n\r\nexport interface IPackSummaryMetadataPackOffer {\r\n  Id: string;\r\n}\r\nexport interface IPackSummaryMetadataOffer {\r\n  result: IPackSummaryMetadataOfferResult;\r\n}\r\n\r\nexport interface IPackSummaryMetadataOfferResult {\r\n  offerModel: IPackSummaryMetadataOfferResultOfferModel;\r\n}\r\n\r\nexport interface IPackSummaryMetadataOfferResultOfferModel {\r\n  Id: string;\r\n  contentApproved: string;\r\n  catalogDescription: string;\r\n  offerPrice: string;\r\n  offerGenre: string;\r\n  offerSubgenre: string;\r\n  playerCount: string;\r\n  purchasable: string;\r\n  readableOfferId: string;\r\n  releaseDate: string;\r\n  retailProductId: string;\r\n  submissionDate: string;\r\n  worldType: string;\r\n  cardTitle: string;\r\n  originalReleaseDate: string;\r\n  creatorName: string;\r\n  isAnUpdate: boolean;\r\n  lastUpdated: string;\r\n  offerTitle: string;\r\n  packType: string;\r\n  offerType: string;\r\n  submissionVersion: string;\r\n}\r\n\r\n/**\r\n * Aggregates pack metadata from various sources including marketplace submissions.\r\n */\r\nexport default class PackMetaDataInformationGenerator implements IProjectInfoGenerator {\r\n  id = \"PACKMETADATA\";\r\n  title = \"General info\";\r\n  tags: string[] = [];\r\n  tagMetadata: ITagData = {};\r\n  canAlwaysProcess = true;\r\n\r\n  getTopicData(topicId: number) {\r\n    if (topicId >= 101 && topicId - 201 <= this.tags.length) {\r\n      return {\r\n        title: \"Tags: \" + this.tags[topicId - 201],\r\n      };\r\n    }\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.metadataId = infoSet.getFirstStringValue(\"PACKMETADATA\", 101);\r\n    info.metadataOfferId = infoSet.getFirstStringValue(\"PACKMETADATA\", 102);\r\n    info.cardTitle = infoSet.getFirstStringValue(\"PACKMETADATA\", 141);\r\n    info.catalogDescription = infoSet.getFirstStringValue(\"PACKMETADATA\", 142);\r\n    info.contentApproved = infoSet.getFirstStringValue(\"PACKMETADATA\", 143);\r\n    info.creatorName = infoSet.getFirstStringValue(\"PACKMETADATA\", 144);\r\n    info.isUpdate = infoSet.getFirstStringValue(\"PACKMETADATA\", 146);\r\n    info.lastUpdated = infoSet.getFirstStringValue(\"PACKMETADATA\", 147);\r\n    info.offerGenre = infoSet.getFirstStringValue(\"PACKMETADATA\", 148);\r\n    info.offerPrice = infoSet.getFirstStringValue(\"PACKMETADATA\", 149);\r\n    info.offerSubgenre = infoSet.getFirstStringValue(\"PACKMETADATA\", 150);\r\n    info.offerTitle = infoSet.getFirstStringValue(\"PACKMETADATA\", 151);\r\n    info.originalReleaseDate = infoSet.getFirstStringValue(\"PACKMETADATA\", 152);\r\n    info.packType = infoSet.getFirstStringValue(\"PACKMETADATA\", 153);\r\n    info.playerCount = infoSet.getFirstStringValue(\"PACKMETADATA\", 154);\r\n    info.purchasable = infoSet.getFirstStringValue(\"PACKMETADATA\", 155);\r\n    info.readableOfferId = infoSet.getFirstStringValue(\"PACKMETADATA\", 156);\r\n    info.releaseDate = infoSet.getFirstStringValue(\"PACKMETADATA\", 157);\r\n    info.retailProductId = infoSet.getFirstStringValue(\"PACKMETADATA\", 158);\r\n    info.submissionDate = infoSet.getFirstStringValue(\"PACKMETADATA\", 159);\r\n    info.submissionVersion = infoSet.getFirstStringValue(\"PACKMETADATA\", 160);\r\n    info.worldType = infoSet.getFirstStringValue(\"PACKMETADATA\", 161);\r\n    info.offerType = infoSet.getFirstStringValue(\"PACKMETADATA\", 162);\r\n\r\n    for (let i = 0; i < this.tags.length; i++) {\r\n      info[this.tags[i]] = infoSet.getFirstStringValue(\"PACKMETADATA\", 201 + i);\r\n    }\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    let itemsCopy = project.getItemsByType(ProjectItemType.tagsMetadata);\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const projectItem = itemsCopy[i];\r\n\r\n      if (projectItem.itemType === ProjectItemType.tagsMetadata) {\r\n        this.tagMetadata = (await projectItem.getJsonObject()) as ITagData;\r\n      }\r\n    }\r\n\r\n    itemsCopy = project.getItemsByType(ProjectItemType.projectSummaryMetadata);\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const projectItem = itemsCopy[i];\r\n\r\n      let content = (await projectItem.getJsonObject()) as IPackSummaryMetadata;\r\n\r\n      if (content && content.offer) {\r\n        if (content.pack && content.pack.Id) {\r\n          items.push(\r\n            new ProjectInfoItem(InfoItemType.info, this.id, 101, \"Metadata Pack Id\", projectItem, content.pack.Id)\r\n          );\r\n        }\r\n\r\n        if (content.pack && content.pack.OfferId) {\r\n          items.push(\r\n            new ProjectInfoItem(InfoItemType.info, this.id, 102, \"Metadata Offer Id\", projectItem, content.pack.OfferId)\r\n          );\r\n\r\n          if (this.tagMetadata) {\r\n            for (const cat in this.tagMetadata) {\r\n              const catVal = this.tagMetadata[cat];\r\n\r\n              if (catVal) {\r\n                for (const tag in catVal) {\r\n                  const idList = catVal[tag];\r\n\r\n                  for (const id of idList) {\r\n                    if (Utilities.uuidEqual(id, content.pack.OfferId)) {\r\n                      let index = -1;\r\n                      for (let i = 0; i < this.tags.length; i++) {\r\n                        if (this.tags[i] === cat) {\r\n                          index = i;\r\n                        }\r\n                      }\r\n                      if (index < 0) {\r\n                        index = this.tags.length;\r\n                        this.tags.push(cat);\r\n                      }\r\n\r\n                      items.push(\r\n                        new ProjectInfoItem(InfoItemType.info, this.id, 201 + index, \"Tag: \" + cat, projectItem, tag)\r\n                      );\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        if (content.offerStructure && content.offerStructure.Id) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              102,\r\n              \"Metadata Product Id\",\r\n              projectItem,\r\n              content.offerStructure.Id\r\n            )\r\n          );\r\n        }\r\n\r\n        const om = content.offer?.result?.offerModel;\r\n\r\n        if (om) {\r\n          if (om.cardTitle) {\r\n            items.push(new ProjectInfoItem(InfoItemType.info, this.id, 141, \"Card Title\", projectItem, om.cardTitle));\r\n          }\r\n\r\n          if (om.catalogDescription) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                142,\r\n                \"Catalog Description\",\r\n                projectItem,\r\n                om.catalogDescription\r\n              )\r\n            );\r\n          }\r\n\r\n          if (om.contentApproved) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 143, \"Content Approved\", projectItem, om.contentApproved)\r\n            );\r\n          }\r\n          if (om.creatorName) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 144, \"Creator Name\", projectItem, om.creatorName)\r\n            );\r\n          }\r\n\r\n          if (om.isAnUpdate) {\r\n            items.push(new ProjectInfoItem(InfoItemType.info, this.id, 146, \"Is Update\", projectItem, om.isAnUpdate));\r\n          }\r\n\r\n          if (om.lastUpdated) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 147, \"Last Updated\", projectItem, om.lastUpdated)\r\n            );\r\n          }\r\n\r\n          if (om.offerGenre) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 148, \"Product Genre\", projectItem, om.offerGenre)\r\n            );\r\n          }\r\n\r\n          if (om.offerPrice) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 149, \"Product Price\", projectItem, om.offerPrice)\r\n            );\r\n          }\r\n\r\n          if (om.offerSubgenre) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 150, \"Product Subgenre\", projectItem, om.offerSubgenre)\r\n            );\r\n          }\r\n\r\n          if (om.offerTitle) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 151, \"Product Title\", projectItem, om.offerTitle)\r\n            );\r\n          }\r\n\r\n          if (om.originalReleaseDate) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                152,\r\n                \"Original Release Date\",\r\n                projectItem,\r\n                om.originalReleaseDate\r\n              )\r\n            );\r\n          }\r\n\r\n          if (om.packType) {\r\n            items.push(new ProjectInfoItem(InfoItemType.info, this.id, 153, \"Pack Type\", projectItem, om.packType));\r\n          }\r\n\r\n          if (om.playerCount) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 154, \"Player Count\", projectItem, \"PC: \" + om.playerCount)\r\n            );\r\n          }\r\n\r\n          if (om.purchasable) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 155, \"Purchasable\", projectItem, om.purchasable)\r\n            );\r\n          }\r\n\r\n          if (om.readableOfferId) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 156, \"Readable Offer Id\", projectItem, om.readableOfferId)\r\n            );\r\n          }\r\n\r\n          if (om.releaseDate) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 157, \"Release Date\", projectItem, om.releaseDate)\r\n            );\r\n          }\r\n\r\n          if (om.retailProductId) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 158, \"Retail Product Id\", projectItem, om.retailProductId)\r\n            );\r\n          }\r\n\r\n          if (om.submissionDate) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 159, \"Submission Date\", projectItem, om.submissionDate)\r\n            );\r\n          }\r\n\r\n          if (om.submissionVersion) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                160,\r\n                \"Submission Version\",\r\n                projectItem,\r\n                om.submissionVersion\r\n              )\r\n            );\r\n          }\r\n\r\n          if (om.worldType) {\r\n            items.push(new ProjectInfoItem(InfoItemType.info, this.id, 161, \"World Type\", projectItem, om.worldType));\r\n          }\r\n\r\n          if (om.offerType) {\r\n            items.push(new ProjectInfoItem(InfoItemType.info, this.id, 162, \"Offer Type\", projectItem, om.offerType));\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nconst UniqueRegEx = new RegExp(/[a-zA-Z0-9]{2,}_[a-zA-Z0-9]{2,}:[\\w]+/);\r\n\r\nconst GenericTermList = [\r\n  \"abilities\",\r\n  \"actions\",\r\n  \"adventure\",\r\n  \"animals\",\r\n  \"anims\",\r\n  \"armor\",\r\n  \"assets\",\r\n  \"attachables\",\r\n  \"banners\",\r\n  \"base\",\r\n  \"blocks\",\r\n  \"book\",\r\n  \"boss\",\r\n  \"bosses\",\r\n  \"bridge\",\r\n  \"camping\",\r\n  \"cars\",\r\n  \"characters\",\r\n  \"chests\",\r\n  \"cinema\",\r\n  \"cinematics\",\r\n  \"cloud\",\r\n  \"collectables\",\r\n  \"collectibles\",\r\n  \"custom_ui\",\r\n  \"cut_scene\",\r\n  \"cutscene\",\r\n  \"deco\",\r\n  \"decor\",\r\n  \"dev\",\r\n  \"dialogue\",\r\n  \"dinos\",\r\n  \"dinosaurs\",\r\n  \"doors\",\r\n  \"dragon\",\r\n  \"dragons\",\r\n  \"dummy\",\r\n  \"effects\",\r\n  \"enemies\",\r\n  \"enemy\",\r\n  \"entities\",\r\n  \"entity\",\r\n  \"env\",\r\n  \"equipment\",\r\n  \"events\",\r\n  \"food\",\r\n  \"furniture\",\r\n  \"furnitures\",\r\n  \"fx\",\r\n  \"game_menu\",\r\n  \"gameplay\",\r\n  \"general\",\r\n  \"glow\",\r\n  \"guide\",\r\n  \"guidebook\",\r\n  \"inanimate\",\r\n  \"interface\",\r\n  \"internal\",\r\n  \"intro\",\r\n  \"item\",\r\n  \"items\",\r\n  \"launchers\",\r\n  \"machines\",\r\n  \"magic\",\r\n  \"markers\",\r\n  \"market\",\r\n  \"marketing_banners\",\r\n  \"mastermind\",\r\n  \"mechanics\",\r\n  \"menu\",\r\n  \"menus\",\r\n  \"minigames\",\r\n  \"misc\",\r\n  \"miscellaneous\",\r\n  \"mob\",\r\n  \"mobs\",\r\n  \"monsters\",\r\n  \"morphs\",\r\n  \"mutant\",\r\n  \"neutral\",\r\n  \"npc\",\r\n  \"npcs\",\r\n  \"objectives\",\r\n  \"particles\",\r\n  \"passive\",\r\n  \"passive_mobs\",\r\n  \"pets\",\r\n  \"platform\",\r\n  \"player\",\r\n  \"players\",\r\n  \"portal\",\r\n  \"portals\",\r\n  \"preset\",\r\n  \"projectile\",\r\n  \"projectiles\",\r\n  \"properties\",\r\n  \"props\",\r\n  \"recipe_models\",\r\n  \"scanner\",\r\n  \"script\",\r\n  \"security\",\r\n  \"sequences\",\r\n  \"sfx\",\r\n  \"shop\",\r\n  \"skills\",\r\n  \"sounds\",\r\n  \"static_entity\",\r\n  \"store\",\r\n  \"structure\",\r\n  \"structures\",\r\n  \"systems\",\r\n  \"tasks\",\r\n  \"teams\",\r\n  \"teleporter\",\r\n  \"tnt\",\r\n  \"tools\",\r\n  \"towers\",\r\n  \"trinkets\",\r\n  \"tutorial\",\r\n  \"ui\",\r\n  \"user_interface\",\r\n  \"util\",\r\n  \"utilities\",\r\n  \"vanilla\",\r\n  \"vanilla_mob\",\r\n  \"vehicle\",\r\n  \"vehicles\",\r\n  \"vr\",\r\n  \"weapon\",\r\n  \"weapons\",\r\n  \"wrench\",\r\n  \"opaque\",\r\n  \"map\",\r\n  \"on\",\r\n  \"item\",\r\n  \"player\",\r\n  \"map\",\r\n  \"charged\",\r\n  \"beacon\",\r\n  \"conduit\",\r\n  \"moving\",\r\n  \"banner\",\r\n  \"bed\",\r\n  \"cow\",\r\n  \"chicken\",\r\n  \"dragon\",\r\n  \"ender\",\r\n  \"enderman\",\r\n  \"fang\",\r\n  \"fireball\",\r\n  \"mob\",\r\n  \"warden\",\r\n  \"village\",\r\n  \"pattern\",\r\n  \"wandering\",\r\n  \"trial\",\r\n  \"stray\",\r\n  \"spider\",\r\n  \"slime\",\r\n  \"chest\",\r\n  \"silverfish\",\r\n  \"polar\",\r\n  \"shield\",\r\n  \"husk\",\r\n  \"blaze\",\r\n  \"axolotl\",\r\n];\r\n\r\n// rule name/check. For validation errors, name should be a terse description of \"your problem\"\r\nexport enum CooperativeAddOnRequirementsGeneratorTest {\r\n  noLooseFileInTypeFolder = 101,\r\n  noCommonNamesInCreatorFolderName = 102,\r\n  noLooseFileInCreatorFolder = 104,\r\n  moreThanOneFolderInCreatorFolderBesidesMaybeCommon = 108,\r\n  noUnsupportedFolderNameInTypeFolder = 109,\r\n  moreThanOneFolderInTypeFolder = 110,\r\n  noLooseFilesInTypeFolder = 111,\r\n  noDimensionElements = 131,\r\n  noUiElements = 133,\r\n  notOneBehaviorPackManifest = 160,\r\n  notOneResourcePackManifest = 161,\r\n  behaviorPackManifestNotValid = 163,\r\n  resourcePackManifestNotValid = 164,\r\n  notOneDependencyFromBehaviorPackToResourcePack = 165,\r\n  dependencyFromBehaviorPackToResourcePackNotValid = 166,\r\n  notOneDependencyFromResourcePackToBehaviorPack = 168,\r\n  dependencyFromResourcePackToBehaviorPackNotValid = 169,\r\n  foundBehaviorPack = 200,\r\n  noVibrantVisualsForNow = 210,\r\n}\r\n\r\n/**\r\n * Validates cooperative add-on requirements for marketplace submissions.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/caddonreq.form.json} for topic definitions\r\n */\r\nexport default class CooperativeAddOnRequirementsGenerator implements IProjectInfoGenerator {\r\n  id = \"CADDONREQ\";\r\n  title = \"Cooperative Add-On Requirements\";\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    let behaviorPackManifest: undefined | BehaviorManifestDefinition = undefined;\r\n    let behaviorPackItem: undefined | ProjectItem = undefined;\r\n    let resourcePackManifest: undefined | ResourceManifestDefinition = undefined;\r\n    let resourcePackItem: undefined | ProjectItem = undefined;\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.primaryFile) {\r\n        if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          if (behaviorPackManifest) {\r\n            // CADDONREQ160\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CooperativeAddOnRequirementsGeneratorTest.notOneBehaviorPackManifest,\r\n                `Found more than one behavior pack manifest in a cooperative add-on, which is not a best practice`,\r\n                projectItem\r\n              )\r\n            );\r\n          } else {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                CooperativeAddOnRequirementsGeneratorTest.foundBehaviorPack,\r\n                `Behavior pack manifest found.`,\r\n                projectItem\r\n              )\r\n            );\r\n          }\r\n\r\n          behaviorPackManifest = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n          behaviorPackItem = projectItem;\r\n\r\n          await behaviorPackManifest?.load();\r\n        } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          if (resourcePackManifest) {\r\n            // CADDONREQ161\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CooperativeAddOnRequirementsGeneratorTest.notOneResourcePackManifest,\r\n                `Found more than one resource pack manifest in a cooperative add-on, which is not a best practice`,\r\n                projectItem\r\n              )\r\n            );\r\n          }\r\n\r\n          resourcePackManifest = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n          resourcePackItem = projectItem;\r\n\r\n          await resourcePackManifest?.load();\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!behaviorPackManifest || !behaviorPackManifest.definition) {\r\n      // CADDONREQ163\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnRequirementsGeneratorTest.behaviorPackManifestNotValid,\r\n          `Did not find a valid behavior pack manifest.`,\r\n          undefined\r\n        )\r\n      );\r\n    }\r\n\r\n    if (!resourcePackManifest || !resourcePackManifest.definition) {\r\n      //CADDONREQ164\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnRequirementsGeneratorTest.resourcePackManifestNotValid,\r\n          `Did not find a valid resource pack manifest.`,\r\n          undefined\r\n        )\r\n      );\r\n    }\r\n\r\n    if (\r\n      behaviorPackManifest &&\r\n      resourcePackManifest &&\r\n      behaviorPackManifest.definition &&\r\n      resourcePackManifest.definition\r\n    ) {\r\n      const bpNonInternalDependency = behaviorPackManifest.getFirstNonScriptModuleDependency();\r\n\r\n      if (\r\n        !behaviorPackManifest.definition.dependencies ||\r\n        behaviorPackManifest.getNonScriptModuleDependencyCount() !== 1\r\n      ) {\r\n        // CADDONREQ165\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.notOneDependencyFromBehaviorPackToResourcePack,\r\n            `Did not find exactly one dependency on the corresponding resource pack in the behavior pack manifest.`,\r\n            behaviorPackItem,\r\n            behaviorPackManifest.getNonScriptModuleDependencyCount()\r\n          )\r\n        );\r\n      } else if (\r\n        !bpNonInternalDependency ||\r\n        !bpNonInternalDependency.uuid ||\r\n        !Utilities.uuidEqual(bpNonInternalDependency.uuid, resourcePackManifest.definition.header.uuid)\r\n      ) {\r\n        // CADDONREQ166\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.dependencyFromBehaviorPackToResourcePackNotValid,\r\n            `Behavior pack manifest does not have a proper dependency on the resource pack identifier.`,\r\n            behaviorPackItem\r\n          )\r\n        );\r\n      }\r\n\r\n      if (!resourcePackManifest.definition.dependencies || resourcePackManifest.definition.dependencies.length !== 1) {\r\n        // CADDONREQ168\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.notOneDependencyFromResourcePackToBehaviorPack,\r\n            `Did not find exactly one dependency on the corresponding behavior pack in the resource pack manifest.`,\r\n            resourcePackItem\r\n          )\r\n        );\r\n      } else if (\r\n        !resourcePackManifest.definition.dependencies[0].uuid ||\r\n        !Utilities.uuidEqual(\r\n          resourcePackManifest.definition.dependencies[0].uuid,\r\n          behaviorPackManifest.definition.header.uuid\r\n        )\r\n      ) {\r\n        // CADDONREQ169\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.dependencyFromResourcePackToBehaviorPackNotValid,\r\n            `Resource pack manifest does not have a proper dependency on the behavior pack identifier.`,\r\n            behaviorPackItem\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    const bpFolder = await project.getDefaultBehaviorPackFolder();\r\n\r\n    if (bpFolder) {\r\n      await this.generateFromBehaviorPackFolder(project, bpFolder, items);\r\n    }\r\n\r\n    const rpFolder = await project.getDefaultResourcePackFolder();\r\n\r\n    if (rpFolder) {\r\n      await this.generateFromResourcePackFolder(project, rpFolder, items);\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generateFromBehaviorPackFolder(project: Project, folder: IFolder, items: ProjectInfoItem[]) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const childFolder = folder.folders[folderName];\r\n\r\n      const folderNameCanon = StorageUtilities.canonicalizeName(folderName);\r\n\r\n      if (folderNameCanon === \"dimensions\") {\r\n        // CADDONREQ131\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noDimensionElements,\r\n            `Found dimensions in a cooperative add-on, which is not a best practice.`,\r\n            undefined\r\n          )\r\n        );\r\n      }\r\n\r\n      if (childFolder && !folder.errorStatus) {\r\n        if (folderNameCanon === \"structures\") {\r\n          await this.generateFromFirstLevelFolderCreator_Game(project, childFolder, items);\r\n        } else if (\r\n          folderNameCanon !== \"texts\" &&\r\n          folderNameCanon !== \"entities\" &&\r\n          folderNameCanon !== \"features\" &&\r\n          folderNameCanon !== \"feature_rules\" &&\r\n          folderNameCanon !== \"particles\" &&\r\n          folderNameCanon !== \"items\" &&\r\n          folderNameCanon !== \"scripts\" &&\r\n          folderNameCanon !== \"recipes\" &&\r\n          folderNameCanon !== \"spawn_rules\" &&\r\n          folderNameCanon !== \"animations\" &&\r\n          folderNameCanon !== \"animation_controllers\" &&\r\n          folderNameCanon !== \"render_controllers\" &&\r\n          folderNameCanon !== \"blocks\"\r\n        ) {\r\n          await this.generateFromFirstLevelFolderCreatorNameGameName(project, childFolder, items);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async generateFromResourcePackFolder(project: Project, folder: IFolder, items: ProjectInfoItem[]) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const childFolder = folder.folders[folderName];\r\n\r\n      const folderNameCanon = StorageUtilities.canonicalizeName(folderName);\r\n\r\n      if (folderNameCanon === \"ui\") {\r\n        // CADDONREQ133\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noUiElements,\r\n            `Found ui elements in a cooperative add-on, which is not supported`,\r\n            undefined\r\n          )\r\n        );\r\n      }\r\n\r\n      if (childFolder && !folder.errorStatus) {\r\n        if (\r\n          folderNameCanon !== \"texts\" &&\r\n          folderNameCanon !== \"entity\" &&\r\n          folderNameCanon !== \"items\" &&\r\n          folderNameCanon !== \"particles\" &&\r\n          folderNameCanon !== \"materials\" &&\r\n          folderNameCanon !== \"blocks\" &&\r\n          folderNameCanon !== \"models\" &&\r\n          folderNameCanon !== \"attachables\" &&\r\n          folderNameCanon !== \"render_controllers\" &&\r\n          folderNameCanon !== \"animation_controllers\" &&\r\n          folderNameCanon !== \"animations\"\r\n        ) {\r\n          await this.generateFromFirstLevelFolderCreatorNameGameName(project, childFolder, items);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static isNameGenericTerm(name: string) {\r\n    name = StorageUtilities.canonicalizeName(name);\r\n\r\n    return GenericTermList.includes(name);\r\n  }\r\n\r\n  static isNamespacedIdentifier(id: string) {\r\n    let identifierSplit = id.split(\":\");\r\n\r\n    if (identifierSplit.length !== 2) {\r\n      return false;\r\n    }\r\n\r\n    if (identifierSplit[0].length < 2 || identifierSplit[1].length < 2) {\r\n      return false;\r\n    }\r\n\r\n    return this.isNamespacedString(identifierSplit[0]);\r\n  }\r\n\r\n  static isNamespacedString(name: string) {\r\n    let tokens = name.split(\"_\");\r\n\r\n    if (tokens.length < 2) {\r\n      return false;\r\n    }\r\n\r\n    return tokens[0].length >= 2 && tokens[1].length >= 2;\r\n  }\r\n\r\n  static isCommonMaterialName(name: string) {\r\n    let tokens = name.split(\"_\");\r\n\r\n    if (tokens.length < 3) {\r\n      return true;\r\n    }\r\n\r\n    return GenericTermList.includes(tokens[0]);\r\n  }\r\n\r\n  static isUniqueNamespaceOrShortName(name: string) {\r\n    name = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (name.length < 3) {\r\n      return false;\r\n    }\r\n\r\n    return UniqueRegEx.test(name);\r\n  }\r\n\r\n  async generateFromFirstLevelFolderCreator_Game(project: Project, folder: IFolder, items: ProjectInfoItem[]) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      if (!this.isPerPackCatalogFile(folder.name, fileName)) {\r\n        const file = folder.files[fileName];\r\n\r\n        const projectItem = file?.extendedPath ? project.getItemByExtendedOrProjectPath(file?.extendedPath) : undefined;\r\n\r\n        // CADDONREQ111\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noLooseFilesInTypeFolder,\r\n            `Found a loose file in the ${folder.name} folder. Should only see files in the folder ${folder.name}\\\\creatorshortname_gamename\\\\`,\r\n            projectItem,\r\n            fileName\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    let folderCount = 0;\r\n    for (const folderName in folder.folders) {\r\n      const folderNameCanon = StorageUtilities.canonicalizeName(folderName);\r\n      folderCount++;\r\n\r\n      if (CooperativeAddOnRequirementsGenerator.isUniqueNamespaceOrShortName(folderNameCanon)) {\r\n        // CADDONREQ109\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noUnsupportedFolderNameInTypeFolder,\r\n            `Found an add-on-blocked folder '${folderName}' in a parent folder pack\\\\${folder.name}. Should be named 'creatorshortname' and not a common term`,\r\n            undefined,\r\n            folderName\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    if (folderCount > 1) {\r\n      // CADDONREQ110\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnRequirementsGeneratorTest.moreThanOneFolderInTypeFolder,\r\n          `Folder '${folder.name}' has more than one subfolder, which is not supported. There should only be one folder in pack\\\\${folder.name}\\\\<studioname>_<mygamename>`,\r\n          undefined,\r\n          folder.name\r\n        )\r\n      );\r\n    }\r\n  }\r\n\r\n  isPerPackCatalogFile(folderName: string, fileName: string) {\r\n    const fileNameCanon = StorageUtilities.canonicalizeName(fileName);\r\n\r\n    if (\r\n      (folderName !== \"functions\" || fileNameCanon !== \"tick.json\") &&\r\n      (folderName !== \"textures\" ||\r\n        (fileNameCanon !== \"flipbook_textures.json\" &&\r\n          fileNameCanon !== \"item_textures.json\" &&\r\n          fileNameCanon !== \"blocks.json\" &&\r\n          fileNameCanon !== \"block.json\" &&\r\n          fileNameCanon !== \"textures_list.json\" &&\r\n          fileNameCanon !== \"texture_list.json\" &&\r\n          fileNameCanon !== \"terrain_textures.json\" &&\r\n          fileNameCanon !== \"item_texture.json\" &&\r\n          fileNameCanon !== \"terrain_texture.json\")) &&\r\n      (folderName !== \"item_catalog\" || fileNameCanon !== \"crafting_item_catalog.json\") &&\r\n      (folderName !== \"sounds\" ||\r\n        (fileNameCanon !== \"sound_definitions.json\" &&\r\n          fileNameCanon !== \"sounds.json\" &&\r\n          fileNameCanon !== \"music_definitions.json\"))\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async generateFromFirstLevelFolderCreatorNameGameName(project: Project, folder: IFolder, items: ProjectInfoItem[]) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      if (!this.isPerPackCatalogFile(folder.name, fileName)) {\r\n        const file = folder.files[fileName];\r\n\r\n        const projectItem = file?.extendedPath ? project.getItemByExtendedOrProjectPath(file?.extendedPath) : undefined;\r\n\r\n        // CADDONREQ101\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noLooseFileInTypeFolder,\r\n            `Found a loose file in the ${folder.name} folder. Should only see files in the folder ${folder.name}\\\\creatorshortname\\\\gamename\\\\`,\r\n            projectItem,\r\n            fileName\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const folderNameCanon = StorageUtilities.canonicalizeName(folderName);\r\n      if (CooperativeAddOnRequirementsGenerator.isNameGenericTerm(folderNameCanon)) {\r\n        // CADDONREQ102\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noCommonNamesInCreatorFolderName,\r\n            `Found an cooperative add-on common name folder '${folderName}' in a parent folder pack\\\\${folder.name}. Should be named 'creatorshortname' and not a common term`,\r\n            undefined,\r\n            folderName\r\n          )\r\n        );\r\n      }\r\n\r\n      const childFolder = folder.folders[folderName];\r\n\r\n      if (childFolder) {\r\n        await this.generateFromSecondLevelFolderGameName(project, folder.name, childFolder, items);\r\n      }\r\n    }\r\n  }\r\n\r\n  async generateFromSecondLevelFolderGameName(\r\n    project: Project,\r\n    parentFolderName: string,\r\n    folder: IFolder,\r\n    items: ProjectInfoItem[]\r\n  ) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      const projectItem = file?.extendedPath ? project.getItemByExtendedOrProjectPath(file.extendedPath) : undefined;\r\n\r\n      // CADDONREQ104\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnRequirementsGeneratorTest.noLooseFileInCreatorFolder,\r\n          `Found a loose file '${fileName}' in ${parentFolderName}\\\\${folder.name}. Files should only be in the folder ${parentFolderName}\\\\${folder.name}\\\\<mygamename>`,\r\n          projectItem,\r\n          fileName\r\n        )\r\n      );\r\n    }\r\n\r\n    let folderCount = 0;\r\n\r\n    for (const childFolderName in folder.folders) {\r\n      const folderNameCanon = StorageUtilities.canonicalizeName(childFolderName);\r\n\r\n      if (folderNameCanon !== \"common\") {\r\n        folderCount++;\r\n      }\r\n    }\r\n\r\n    if (folderCount > 1) {\r\n      // CADDONREQ108\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnRequirementsGeneratorTest.moreThanOneFolderInCreatorFolderBesidesMaybeCommon,\r\n          `Secondary folder '${folder.name}' in ${parentFolderName} has more than one subfolder (besides 'common'), which is not supported. There should only be one folder (plus optionally 'common') in pack\\\\${parentFolderName}\\\\${folder.name}\\\\<mygamename>`,\r\n          undefined,\r\n          folder.name\r\n        )\r\n      );\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IResourceAnimationWrapper, { IAnimationResource } from \"./IAnimationResource\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class AnimationResourceDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: IResourceAnimationWrapper;\r\n\r\n  private _onLoaded = new EventDispatcher<AnimationResourceDefinition, AnimationResourceDefinition>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get idList() {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    const idList = new Set<string>();\r\n\r\n    for (const key in this._data.animations) {\r\n      const animation = this._data.animations[key];\r\n\r\n      if (key && animation) {\r\n        idList.add(key);\r\n      }\r\n    }\r\n\r\n    return idList;\r\n  }\r\n\r\n  public get animations() {\r\n    if (this._data && this._data.animations) {\r\n      return this._data.animations;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data || !this._data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._data.format_version);\r\n  }\r\n\r\n  setResourcePackFormatVersion(versionStr: string) {\r\n    this.ensureDefault();\r\n\r\n    if (this._data) {\r\n      this._data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  ensureDefault() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        format_version: \"1.12.0\",\r\n        animations: {},\r\n      };\r\n    }\r\n\r\n    return this._data;\r\n  }\r\n\r\n  ensureAnimation(animationName: string): IAnimationResource {\r\n    this.ensureDefault();\r\n\r\n    if (!this._data || !this._data.animations || !Utilities.isUsableAsObjectKey(animationName)) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._data.animations[animationName]) {\r\n      this._data.animations[animationName] = { bones: {} };\r\n    }\r\n\r\n    return this._data.animations[animationName];\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<AnimationResourceDefinition, AnimationResourceDefinition>\r\n  ) {\r\n    let rbd: AnimationResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rbd = new AnimationResourceDefinition();\r\n\r\n      rbd.file = file;\r\n\r\n      file.manager = rbd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AnimationResourceDefinition) {\r\n      rbd = file.manager as AnimationResourceDefinition;\r\n\r\n      if (!rbd.isLoaded) {\r\n        if (loadHandler) {\r\n          rbd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rbd.load();\r\n      }\r\n    }\r\n\r\n    return rbd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "import Utilities from \"../core/Utilities\";\r\nimport { FieldDataType } from \"./IField\";\r\nimport IFormDefinition from \"./IFormDefinition\";\r\n\r\nexport interface IProcessorIssue {\r\n  subject: string;\r\n  message: string;\r\n  path?: string;\r\n}\r\n\r\nexport enum ProcessorFixupLevel {\r\n  none = 0,\r\n  perField = 1,\r\n  full = 9,\r\n}\r\n\r\nexport default class DataFormProcessor {\r\n  static async process(\r\n    obj: { [key: string]: any },\r\n    form: IFormDefinition,\r\n    fixupLevel?: ProcessorFixupLevel,\r\n    path?: string,\r\n    issues?: IProcessorIssue[]\r\n  ) {\r\n    if (path === undefined) {\r\n      path = \"\";\r\n    } else {\r\n      path += \".\";\r\n    }\r\n\r\n    if (issues === undefined) {\r\n      issues = [];\r\n    }\r\n\r\n    for (const key in obj) {\r\n      const val = obj[key as string] as any;\r\n\r\n      let foundField = false;\r\n\r\n      for (const field of form.fields) {\r\n        if (field.id === key) {\r\n          foundField = true;\r\n\r\n          if (field.dataType === FieldDataType.objectArray && field.subForm) {\r\n            if (val && Array.isArray(val)) {\r\n              for (const obj of val) {\r\n                await DataFormProcessor.process(obj, field.subForm, fixupLevel, path + key, issues);\r\n              }\r\n            }\r\n          }\r\n          if (field.dataType === FieldDataType.keyedObjectCollection && field.subForm) {\r\n            if (val && typeof val === \"object\") {\r\n              for (const subKey in val) {\r\n                const subObj = val[subKey];\r\n\r\n                await DataFormProcessor.process(subObj, field.subForm, fixupLevel, path + key + \".\" + subKey, issues);\r\n              }\r\n            }\r\n          } else if (\r\n            (field.dataType === FieldDataType.object && field.subForm) ||\r\n            field.dataType === FieldDataType.minecraftEventTrigger ||\r\n            field.dataType === FieldDataType.minecraftFilter\r\n          ) {\r\n            if (val && typeof val === \"object\") {\r\n              let keyCount = 0;\r\n\r\n              for (const key in obj) {\r\n                if (key) {\r\n                  keyCount++;\r\n                }\r\n              }\r\n\r\n              if (\r\n                keyCount === 0 &&\r\n                (!field.retainIfEmptyOrDefault ||\r\n                  field.dataType === FieldDataType.minecraftEventTrigger ||\r\n                  field.dataType === FieldDataType.minecraftFilter)\r\n              ) {\r\n                issues.push({\r\n                  subject: key,\r\n                  message: \"Object is defined but empty; should be undefined.\",\r\n                  path: path,\r\n                });\r\n\r\n                if (\r\n                  fixupLevel === ProcessorFixupLevel.perField ||\r\n                  fixupLevel === ProcessorFixupLevel.full ||\r\n                  field.dataType === FieldDataType.minecraftEventTrigger ||\r\n                  field.dataType === FieldDataType.minecraftFilter\r\n                ) {\r\n                  if (Utilities.isUsableAsObjectKey(key)) {\r\n                    obj[key] = undefined;\r\n                  }\r\n                }\r\n              } else if (field.dataType === FieldDataType.object && field.subForm) {\r\n                await DataFormProcessor.process(val, field.subForm, fixupLevel, path + key, issues);\r\n              }\r\n            }\r\n          } else if (\r\n            field.dataType === FieldDataType.keyedStringArrayCollection ||\r\n            field.dataType === FieldDataType.keyedKeyedStringArrayCollection\r\n          ) {\r\n            if (val && typeof val === \"object\") {\r\n              let keyCount = 0;\r\n\r\n              for (const key in val) {\r\n                if (key) {\r\n                  keyCount++;\r\n                }\r\n              }\r\n\r\n              if (keyCount === 0 && !field.retainIfEmptyOrDefault) {\r\n                issues.push({\r\n                  subject: key,\r\n                  message: \"Object is defined but empty; should be undefined.\",\r\n                  path: path,\r\n                });\r\n\r\n                if (fixupLevel === ProcessorFixupLevel.perField || fixupLevel === ProcessorFixupLevel.full) {\r\n                  obj[key] = undefined;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!foundField) {\r\n        issues.push({\r\n          subject: key,\r\n          message: \"Could not find field in data definition.\",\r\n          path: path,\r\n        });\r\n\r\n        if (fixupLevel === ProcessorFixupLevel.full) {\r\n          obj[key] = undefined;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IRenderControllerSetDefinition from \"./IRenderControllerSet\";\r\nimport DataFormProcessor, { ProcessorFixupLevel } from \"../dataform/DataFormProcessor\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Database from \"./Database\";\r\n\r\nexport default class RenderControllerSetDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: IRenderControllerSetDefinition;\r\n\r\n  private _onLoaded = new EventDispatcher<RenderControllerSetDefinition, RenderControllerSetDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get idList() {\r\n    if (!this._data || !this._data.render_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    const idList = new Set<string>();\r\n\r\n    for (const key in this._data.render_controllers) {\r\n      const rc = this._data.render_controllers[key];\r\n\r\n      if (key && rc) {\r\n        idList.add(key);\r\n      }\r\n    }\r\n\r\n    return idList;\r\n  }\r\n\r\n  public get renderControllers() {\r\n    if (!this._data || !this._data.render_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    const rcList = [];\r\n\r\n    for (const key in this._data.render_controllers) {\r\n      const rc = this._data.render_controllers[key];\r\n\r\n      if (key && rc) {\r\n        rcList.push(rc);\r\n      }\r\n    }\r\n\r\n    return rcList;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public async removeTexture(textureId: string) {\r\n    await this.load();\r\n\r\n    const rcs = this._data?.render_controllers;\r\n\r\n    if (!rcs) {\r\n      return;\r\n    }\r\n\r\n    for (const rcKey in rcs) {\r\n      const rc = rcs[rcKey];\r\n\r\n      if (rc) {\r\n        if (rc.arrays.textures) {\r\n          for (const textureListName in rc.arrays.textures) {\r\n            const textureList = rc.arrays.textures[textureListName];\r\n\r\n            let newTextureList: string[] | undefined = [];\r\n\r\n            if (textureList) {\r\n              for (const textureStr of textureList) {\r\n                if (textureStr !== textureId && textureStr !== \"Texture.\" + textureId) {\r\n                  newTextureList.push(textureStr);\r\n                }\r\n              }\r\n            }\r\n\r\n            if (newTextureList.length === 0) {\r\n              newTextureList = undefined;\r\n            }\r\n\r\n            rc.arrays.textures[textureListName] = newTextureList;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<RenderControllerSetDefinition, RenderControllerSetDefinition>\r\n  ) {\r\n    let rc: RenderControllerSetDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rc = new RenderControllerSetDefinition();\r\n\r\n      rc.file = file;\r\n\r\n      file.manager = rc;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof RenderControllerSetDefinition) {\r\n      rc = file.manager as RenderControllerSetDefinition;\r\n\r\n      if (!rc.isLoaded) {\r\n        if (loadHandler) {\r\n          rc.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rc.load();\r\n      }\r\n    }\r\n\r\n    return rc;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (this._data) {\r\n      const renderControllerSet = await Database.ensureFormLoaded(\"resource\", \"render_controller_set\");\r\n\r\n      if (renderControllerSet) {\r\n        await DataFormProcessor.process(this._data, renderControllerSet, ProcessorFixupLevel.perField);\r\n      }\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this._data) {\r\n      this._data = {\r\n        format_version: \"1.12.0\",\r\n        render_controllers: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IAnimationBehaviorWrapper, { IAnimationBehaviorTimelineWrapper } from \"./IAnimationBehavior\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class AnimationBehaviorDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public data?: IAnimationBehaviorWrapper;\r\n\r\n  private _onLoaded = new EventDispatcher<AnimationBehaviorDefinition, AnimationBehaviorDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getAllTimeline() {\r\n    const timelines: IAnimationBehaviorTimelineWrapper[] = [];\r\n\r\n    if (this.data && this.data.animations) {\r\n      for (const aName in this.data.animations) {\r\n        const anim = this.data.animations[aName];\r\n\r\n        if (anim && anim.timeline) {\r\n          for (const timestamp in anim.timeline) {\r\n            const timeline = anim.timeline[timestamp];\r\n            if (timeline) {\r\n              timelines.push({\r\n                animationId: aName,\r\n                timestamp: timestamp,\r\n                timeline: timeline,\r\n              });\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return timelines;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this.data || !this.data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this.data.format_version);\r\n  }\r\n\r\n  setBehaviorPackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this.data) {\r\n      this.data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this.data === undefined) {\r\n      this.data = {\r\n        format_version: \"1.12.0\",\r\n        animations: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<AnimationBehaviorDefinition, AnimationBehaviorDefinition>\r\n  ) {\r\n    let abd: AnimationBehaviorDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      abd = new AnimationBehaviorDefinition();\r\n\r\n      abd.file = file;\r\n\r\n      file.manager = abd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AnimationBehaviorDefinition) {\r\n      abd = file.manager as AnimationBehaviorDefinition;\r\n\r\n      if (!abd.isLoaded) {\r\n        if (loadHandler) {\r\n          abd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await abd.load();\r\n      }\r\n    }\r\n\r\n    return abd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.data !== null, \"ITDP\");\r\n\r\n    if (!this.data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IAnimationControllerBehaviorWrapper, {\r\n  IAnimationControllerBehaviorStateWrapper,\r\n} from \"./IAnimationControllerBehavior\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class AnimationControllerBehaviorDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public data?: IAnimationControllerBehaviorWrapper;\r\n\r\n  private _onLoaded = new EventDispatcher<\r\n    AnimationControllerBehaviorDefinition,\r\n    AnimationControllerBehaviorDefinition\r\n  >();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  getAllStates() {\r\n    const states: IAnimationControllerBehaviorStateWrapper[] = [];\r\n\r\n    if (this.data && this.data.animation_controllers) {\r\n      for (const acName in this.data.animation_controllers) {\r\n        const ac = this.data.animation_controllers[acName];\r\n\r\n        if (ac && ac.states) {\r\n          for (const stateName in ac.states) {\r\n            const state = ac.states[stateName];\r\n\r\n            if (state) {\r\n              states.push({\r\n                id: stateName,\r\n                animationControllerId: acName,\r\n                state: state,\r\n              });\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return states;\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this.data || !this.data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this.data.format_version);\r\n  }\r\n\r\n  setBehaviorPackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this.data) {\r\n      this.data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this.data === undefined) {\r\n      this.data = {\r\n        format_version: \"1.12.0\",\r\n        animation_controllers: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<AnimationControllerBehaviorDefinition, AnimationControllerBehaviorDefinition>\r\n  ) {\r\n    let abcd: AnimationControllerBehaviorDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      abcd = new AnimationControllerBehaviorDefinition();\r\n\r\n      abcd.file = file;\r\n\r\n      file.manager = abcd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AnimationControllerBehaviorDefinition) {\r\n      abcd = file.manager as AnimationControllerBehaviorDefinition;\r\n\r\n      if (!abcd.isLoaded) {\r\n        if (loadHandler) {\r\n          abcd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await abcd.load();\r\n      }\r\n    }\r\n\r\n    return abcd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.data !== null, \"ITDP\");\r\n\r\n    if (!this.data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IResourceAnimationControllerDefinition from \"./IAnimationControllerResource\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class AnimationControllerResourceDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: IResourceAnimationControllerDefinition;\r\n\r\n  private _onLoaded = new EventDispatcher<\r\n    AnimationControllerResourceDefinition,\r\n    AnimationControllerResourceDefinition\r\n  >();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get idList() {\r\n    if (!this._data || !this._data.animation_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    const idList = new Set<string>();\r\n\r\n    for (const key in this._data.animation_controllers) {\r\n      const ac = this._data.animation_controllers[key];\r\n\r\n      if (key && ac) {\r\n        idList.add(key);\r\n      }\r\n    }\r\n\r\n    return idList;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data || !this._data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._data.format_version);\r\n  }\r\n\r\n  setResourcePackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this._data) {\r\n      this._data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        format_version: \"1.12.0\",\r\n        animation_controllers: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<AnimationControllerResourceDefinition, AnimationControllerResourceDefinition>\r\n  ) {\r\n    let rbd: AnimationControllerResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rbd = new AnimationControllerResourceDefinition();\r\n\r\n      rbd.file = file;\r\n\r\n      file.manager = rbd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AnimationControllerResourceDefinition) {\r\n      rbd = file.manager as AnimationControllerResourceDefinition;\r\n\r\n      if (!rbd.isLoaded) {\r\n        if (loadHandler) {\r\n          rbd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rbd.load();\r\n      }\r\n    }\r\n\r\n    return rbd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._data !== null, \"ITDP\");\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IComponent from \"./IComponent\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport MinecraftDefinitions from \"./MinecraftDefinitions\";\r\nimport BiomeResourceDefinition from \"./BiomeResourceDefinition\";\r\n\r\nexport interface IBiomeBehaviorData {\r\n  format_version: string;\r\n  \"minecraft:biome\": {\r\n    description: {\r\n      identifier: string;\r\n    };\r\n    components: { [componentName: string]: any };\r\n  };\r\n}\r\n\r\nexport default class BiomeBehaviorDefinition implements IManagedComponentSetItem, IDefinition {\r\n  private _typeId = \"\";\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public _data?: IBiomeBehaviorData;\r\n  private _managed: { [id: string]: IManagedComponent | undefined } = {};\r\n  private _onLoaded = new EventDispatcher<BiomeBehaviorDefinition, BiomeBehaviorDefinition>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<BiomeBehaviorDefinition, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<BiomeBehaviorDefinition, string>();\r\n  private _onComponentChanged = new EventDispatcher<BiomeBehaviorDefinition, IManagedComponent>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  constructor(typeId?: string) {\r\n    if (typeId) {\r\n      this._typeId = typeId;\r\n      this._id = typeId;\r\n    }\r\n  }\r\n\r\n  public get typeId() {\r\n    return this._typeId;\r\n  }\r\n\r\n  public set typeId(newId: string) {\r\n    this._typeId = newId;\r\n    this._id = newId;\r\n  }\r\n\r\n  public get id(): string {\r\n    return this._id || this._typeId || \"\";\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this._id = newId;\r\n    this._typeId = newId;\r\n  }\r\n\r\n  private _ensureBiomeDataInitialized() {\r\n    if (!this._data) {\r\n      this._data = {\r\n        format_version: \"1.16.0\",\r\n        \"minecraft:biome\": {\r\n          description: {\r\n            identifier: this._typeId,\r\n          },\r\n          components: {},\r\n        },\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:biome\"]) {\r\n      this._data[\"minecraft:biome\"] = {\r\n        description: {\r\n          identifier: this._typeId,\r\n        },\r\n        components: {},\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:biome\"].description) {\r\n      this._data[\"minecraft:biome\"].description = {\r\n        identifier: this._typeId,\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:biome\"].components) {\r\n      this._data[\"minecraft:biome\"].components = {};\r\n    }\r\n  }\r\n\r\n  ensureComponent(id: string, defaultData?: IComponent | string | string[] | boolean | number[] | number | undefined) {\r\n    const comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      return comp;\r\n    }\r\n\r\n    return this.addComponent(id, defaultData);\r\n  }\r\n\r\n  getComponent(id: string): IManagedComponent | undefined {\r\n    if (this._data === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      if (this._data[\"minecraft:biome\"]?.components) {\r\n        const comp = this._data[\"minecraft:biome\"].components[id];\r\n        if (comp) {\r\n          this._managed[id] = new ManagedComponent(this._data[\"minecraft:biome\"].components, id, comp);\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"BDNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents(): IManagedComponent[] {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._data !== undefined && this._data[\"minecraft:biome\"]?.components) {\r\n      for (const componentName in this._data[\"minecraft:biome\"].components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ): IManagedComponent {\r\n    this._ensureBiomeDataInitialized();\r\n\r\n    const biomeData = this._data as IBiomeBehaviorData;\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(biomeData[\"minecraft:biome\"].components, id, componentOrData);\r\n\r\n    biomeData[\"minecraft:biome\"].components[id] = mc.getData();\r\n    this._managed[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._data === undefined || !this._data[\"minecraft:biome\"]?.components) {\r\n      return;\r\n    }\r\n\r\n    const newComponents: {\r\n      [name: string]: IComponent | string | string[] | boolean | number[] | number | undefined;\r\n    } = {};\r\n    const newManagedComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this._data[\"minecraft:biome\"].components) {\r\n      if (name !== id) {\r\n        if (Utilities.isUsableAsObjectKey(name)) {\r\n          const component = this._data[\"minecraft:biome\"].components[name];\r\n          newComponents[name] = component;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const name in this._managed) {\r\n      if (name !== id) {\r\n        newManagedComponents[name] = this._managed[name];\r\n      }\r\n    }\r\n\r\n    this._data[\"minecraft:biome\"].components = newComponents;\r\n    this._managed = newManagedComponents;\r\n\r\n    this._onComponentRemoved.dispatch(this, id);\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<BiomeBehaviorDefinition | undefined> {\r\n    if (file.manager === undefined) {\r\n      const bd = new BiomeBehaviorDefinition();\r\n\r\n      bd._file = file;\r\n\r\n      if (!bd.isLoaded) {\r\n        await bd.load();\r\n      }\r\n\r\n      file.manager = bd;\r\n    }\r\n\r\n    if (file.manager instanceof BiomeBehaviorDefinition) {\r\n      return file.manager as BiomeBehaviorDefinition;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._data !== null, \"BBDP\");\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    const fileContent = this._file.content;\r\n\r\n    if (fileContent === null || fileContent instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    try {\r\n      this._data = JSON.parse(fileContent);\r\n\r\n      if (this._data && this._data[\"minecraft:biome\"]?.description?.identifier) {\r\n        this._typeId = this._data[\"minecraft:biome\"].description.identifier;\r\n        this._id = this._typeId;\r\n      }\r\n    } catch (e) {\r\n      Log.error(\"Could not load biome definition: \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const biomeResourceItems = project.getItemsByType(ProjectItemType.biomeResource);\r\n\r\n    for (const candItem of biomeResourceItems) {\r\n      const biomeResourceDef = (await MinecraftDefinitions.get(candItem)) as undefined | BiomeResourceDefinition;\r\n\r\n      if (biomeResourceDef && biomeResourceDef.id === this.id) {\r\n        item.addChildItem(candItem);\r\n      }\r\n    }\r\n  }\r\n\r\n  static getComponentFromBaseFileName(name: string) {\r\n    let canonName = name;\r\n\r\n    if (canonName.startsWith(\"minecraft_\")) {\r\n      canonName = canonName.substring(10);\r\n    }\r\n\r\n    return canonName;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._typeId && this._typeId.indexOf(\":\") >= 0) {\r\n      return this._typeId.substring(this._typeId.indexOf(\":\") + 1);\r\n    }\r\n\r\n    return this._typeId;\r\n  }\r\n\r\n  public get namespace() {\r\n    if (this._typeId && this._typeId.indexOf(\":\") >= 0) {\r\n      return this._typeId.substring(0, this._typeId.indexOf(\":\"));\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  ensureDefinition() {\r\n    this._ensureBiomeDataInitialized();\r\n\r\n    if (this._data && this._data[\"minecraft:biome\"]?.description) {\r\n      this._data[\"minecraft:biome\"].description.identifier = this._typeId;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IComponent from \"./IComponent\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport ClientBiomeJSONFile, {\r\n  ClientBiomeJSONFileMinecraftClientBiome,\r\n} from \"@minecraft/bedrock-schemas/types/rp/client_biomes/ClientBiomeJSONFile\";\r\nimport { IComponentContainer } from \"./IComponentDataItem\";\r\n\r\nexport default class BiomeResourceDefinition implements IManagedComponentSetItem, IDefinition {\r\n  private _typeId = \"\";\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public _data?: ClientBiomeJSONFile;\r\n  private _managed: { [id: string]: IManagedComponent | undefined } = {};\r\n  private _onLoaded = new EventDispatcher<BiomeResourceDefinition, BiomeResourceDefinition>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<BiomeResourceDefinition, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<BiomeResourceDefinition, string>();\r\n  private _onComponentChanged = new EventDispatcher<BiomeResourceDefinition, IManagedComponent>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get clientBiomeData() {\r\n    this._ensureBiomeDataInitialized();\r\n\r\n    return (this._data as ClientBiomeJSONFile)[\"minecraft:client_biome\"] as ClientBiomeJSONFileMinecraftClientBiome;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  constructor(typeId?: string) {\r\n    if (typeId) {\r\n      this._typeId = typeId;\r\n      this._id = typeId;\r\n    }\r\n  }\r\n\r\n  public get typeId() {\r\n    return this._typeId;\r\n  }\r\n\r\n  public set typeId(newId: string) {\r\n    this._typeId = newId;\r\n    this._id = newId;\r\n  }\r\n\r\n  public get id(): string {\r\n    return this._id || this._typeId || \"\";\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this._id = newId;\r\n    this._typeId = newId;\r\n  }\r\n\r\n  private _ensureBiomeDataInitialized() {\r\n    if (!this._data || !this._data[\"minecraft:client_biome\"]) {\r\n      this._data = {\r\n        format_version: \"1.16.0\",\r\n        \"minecraft:client_biome\": {\r\n          description: {\r\n            identifier: this._typeId,\r\n          },\r\n          components: {},\r\n        },\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:client_biome\"]) {\r\n      this._data[\"minecraft:client_biome\"] = {\r\n        description: {\r\n          identifier: this._typeId,\r\n        },\r\n        components: {},\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:client_biome\"].description) {\r\n      this._data[\"minecraft:client_biome\"].description = {\r\n        identifier: this._typeId,\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:client_biome\"].components) {\r\n      this._data[\"minecraft:client_biome\"].components = {};\r\n    }\r\n  }\r\n\r\n  ensureComponent(id: string, defaultData?: IComponent | string | string[] | boolean | number[] | number | undefined) {\r\n    const comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      return comp;\r\n    }\r\n\r\n    return this.addComponent(id, defaultData);\r\n  }\r\n\r\n  getComponent(id: string): IManagedComponent | undefined {\r\n    if (this._data === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      if (this._data[\"minecraft:client_biome\"]?.components) {\r\n        const comp = (this._data[\"minecraft:client_biome\"].components as IComponentContainer)[id];\r\n        if (comp) {\r\n          this._managed[id] = new ManagedComponent(\r\n            this._data[\"minecraft:client_biome\"].components as IComponentContainer,\r\n            id,\r\n            comp\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"BDNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents(): IManagedComponent[] {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._data !== undefined && this._data[\"minecraft:client_biome\"]?.components) {\r\n      for (const componentName in this._data[\"minecraft:client_biome\"].components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ): IManagedComponent {\r\n    this._ensureBiomeDataInitialized();\r\n\r\n    const biomeData = this._data as ClientBiomeJSONFile;\r\n\r\n    this.ensureDefinition();\r\n\r\n    if (!biomeData || !biomeData[\"minecraft:client_biome\"] || !biomeData[\"minecraft:client_biome\"].components) {\r\n      throw new Error();\r\n    }\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(\r\n            biomeData[\"minecraft:client_biome\"].components as IComponentContainer,\r\n            id,\r\n            componentOrData\r\n          );\r\n\r\n    (biomeData[\"minecraft:client_biome\"].components as any)[id] = mc.getData();\r\n    this._managed[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._data === undefined || !this._data[\"minecraft:client_biome\"]?.components) {\r\n      return;\r\n    }\r\n\r\n    const newComponents: IComponentContainer = {};\r\n    const newManagedComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this._data[\"minecraft:client_biome\"].components) {\r\n      if (name !== id) {\r\n        if (Utilities.isUsableAsObjectKey(name)) {\r\n          const component = (this._data[\"minecraft:client_biome\"].components as IComponentContainer)[name] as any;\r\n          newComponents[name] = component;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const name in this._managed) {\r\n      if (name !== id) {\r\n        newManagedComponents[name] = this._managed[name];\r\n      }\r\n    }\r\n\r\n    this._data[\"minecraft:client_biome\"].components = newComponents;\r\n    this._managed = newManagedComponents;\r\n\r\n    this._onComponentRemoved.dispatch(this, id);\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<BiomeResourceDefinition | undefined> {\r\n    if (file.manager === undefined) {\r\n      const bd = new BiomeResourceDefinition();\r\n\r\n      bd._file = file;\r\n\r\n      if (!bd.isLoaded) {\r\n        await bd.load();\r\n      }\r\n\r\n      file.manager = bd;\r\n    }\r\n\r\n    if (file.manager instanceof BiomeResourceDefinition) {\r\n      return file.manager as BiomeResourceDefinition;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._data !== null, \"ITDP\");\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    const fileContent = this._file.content;\r\n\r\n    if (fileContent === null || fileContent instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    try {\r\n      this._data = JSON.parse(fileContent);\r\n\r\n      if (this._data && this._data[\"minecraft:client_biome\"]?.description?.identifier) {\r\n        this._typeId = this._data[\"minecraft:client_biome\"].description.identifier;\r\n        this._id = this._typeId;\r\n      }\r\n\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n    } catch (e) {\r\n      Log.error(\"Could not load biome definition: \" + e);\r\n    }\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._typeId && this._typeId.indexOf(\":\") >= 0) {\r\n      return this._typeId.substring(this._typeId.indexOf(\":\") + 1);\r\n    }\r\n\r\n    return this._typeId;\r\n  }\r\n\r\n  public get namespace() {\r\n    if (this._typeId && this._typeId.indexOf(\":\") >= 0) {\r\n      return this._typeId.substring(0, this._typeId.indexOf(\":\"));\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  ensureDefinition() {\r\n    this._ensureBiomeDataInitialized();\r\n\r\n    if (this._data && this._data[\"minecraft:client_biome\"]?.description) {\r\n      this._data[\"minecraft:client_biome\"].description.identifier = this._typeId;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IEntityTypeResource, IEntityTypeResourceDescription, IEntityTypeResourceWrapper } from \"./IEntityTypeResource\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport ModelGeometryDefinition from \"./ModelGeometryDefinition\";\r\nimport Database from \"./Database\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport RenderControllerSetDefinition from \"./RenderControllerSetDefinition\";\r\nimport AnimationControllerResourceDefinition from \"./AnimationControllerResourceDefinition\";\r\nimport AnimationResourceDefinition from \"./AnimationResourceDefinition\";\r\nimport IProjectItemRelationship from \"../app/IProjectItemRelationship\";\r\nimport MinecraftDefinitions from \"./MinecraftDefinitions\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\n\r\nexport default class EntityTypeResourceDefinition {\r\n  private _dataWrapper?: IEntityTypeResourceWrapper;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n  private _data?: IEntityTypeResourceDescription;\r\n\r\n  private _onLoaded = new EventDispatcher<EntityTypeResourceDefinition, EntityTypeResourceDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get dataWrapper() {\r\n    return this._data;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.identifier;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    if (this._data && newId !== undefined) {\r\n      this._data.identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get textures() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._data.textures === undefined) {\r\n      this._data.textures = {};\r\n    }\r\n\r\n    return this._data.textures;\r\n  }\r\n\r\n  public getCanonicalizedTexturesList() {\r\n    if (!this._data || !this._data.textures) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const key in this._data.textures) {\r\n      const texturePath = TextureDefinition.canonicalizeTexturePath(this._data.textures[key]);\r\n\r\n      if (texturePath) {\r\n        textureList.push(texturePath);\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get texturesIdList() {\r\n    if (!this._data || !this._data.textures) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureIdList = [];\r\n\r\n    for (const key in this._data.textures) {\r\n      textureIdList.push(key);\r\n    }\r\n\r\n    return textureIdList;\r\n  }\r\n\r\n  public get renderControllerIdList(): string[] | undefined {\r\n    if (!this._data || !this._data.render_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.render_controllers;\r\n  }\r\n\r\n  public get animationControllerIdList(): string[] | undefined {\r\n    if (!this._data || !this._data.animation_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationControllerIdList = [];\r\n\r\n    for (const key in this._data.animation_controllers) {\r\n      animationControllerIdList.push(key);\r\n    }\r\n\r\n    return animationControllerIdList;\r\n  }\r\n\r\n  public get animationControllerList(): string[] | undefined {\r\n    if (!this._data || !this._data.animation_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationControllerList = [];\r\n\r\n    for (const key in this._data.animation_controllers) {\r\n      const val = this._data.animation_controllers[key];\r\n\r\n      if (val) {\r\n        animationControllerList.push(val);\r\n      }\r\n    }\r\n\r\n    return animationControllerList;\r\n  }\r\n\r\n  public get animationIdList(): string[] | undefined {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationIdList = [];\r\n\r\n    for (const key in this._data.animations) {\r\n      animationIdList.push(key);\r\n    }\r\n\r\n    return animationIdList;\r\n  }\r\n\r\n  public get animationList(): string[] | undefined {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationList = [];\r\n\r\n    for (const key in this._data.animations) {\r\n      const val = this._data.animations[key];\r\n\r\n      if (val) {\r\n        animationList.push(val);\r\n      }\r\n    }\r\n\r\n    return animationList;\r\n  }\r\n\r\n  public get geometry() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.geometry;\r\n  }\r\n\r\n  public get geometryList() {\r\n    if (!this._data || !this._data.geometry) {\r\n      return undefined;\r\n    }\r\n\r\n    const geometryList = [];\r\n\r\n    for (const key in this._data.geometry) {\r\n      const geometryPath = this._data.geometry[key];\r\n\r\n      if (geometryPath) {\r\n        geometryList.push(geometryPath);\r\n      }\r\n    }\r\n\r\n    return geometryList;\r\n  }\r\n\r\n  /**\r\n   * Get a list of all geometry/texture variant keys (e.g., \"default\", \"warm\", \"cold\")\r\n   */\r\n  public get variantKeys(): string[] {\r\n    const keys = new Set<string>();\r\n\r\n    if (this._data?.geometry) {\r\n      for (const key in this._data.geometry) {\r\n        keys.add(key);\r\n      }\r\n    }\r\n\r\n    if (this._data?.textures) {\r\n      for (const key in this._data.textures) {\r\n        keys.add(key);\r\n      }\r\n    }\r\n\r\n    return Array.from(keys);\r\n  }\r\n\r\n  /**\r\n   * Get the geometry ID for a specific variant key (e.g., \"default\")\r\n   * Falls back to first available geometry if key not found\r\n   */\r\n  public getGeometryByKey(key: string): string | undefined {\r\n    if (!this._data?.geometry) {\r\n      return undefined;\r\n    }\r\n\r\n    // Try exact key first\r\n    if (this._data.geometry[key]) {\r\n      return this._data.geometry[key];\r\n    }\r\n\r\n    // Fall back to \"default\" if available\r\n    if (key !== \"default\" && this._data.geometry[\"default\"]) {\r\n      return this._data.geometry[\"default\"];\r\n    }\r\n\r\n    // Fall back to first available\r\n    const keys = Object.keys(this._data.geometry);\r\n    if (keys.length > 0) {\r\n      return this._data.geometry[keys[0]];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get the texture path for a specific variant key (e.g., \"default\")\r\n   * Falls back to first available texture if key not found\r\n   */\r\n  public getTextureByKey(key: string): string | undefined {\r\n    if (!this._data?.textures) {\r\n      return undefined;\r\n    }\r\n\r\n    // Try exact key first\r\n    if (this._data.textures[key]) {\r\n      return this._data.textures[key];\r\n    }\r\n\r\n    // Fall back to \"default\" if available\r\n    if (key !== \"default\" && this._data.textures[\"default\"]) {\r\n      return this._data.textures[\"default\"];\r\n    }\r\n\r\n    // Fall back to first available\r\n    const keys = Object.keys(this._data.textures);\r\n    if (keys.length > 0) {\r\n      return this._data.textures[keys[0]];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get matched geometry and texture for a specific variant key\r\n   * This ensures the geometry and texture are paired correctly\r\n   */\r\n  public getMatchedGeometryAndTexture(key: string = \"default\"): { geometryId?: string; texturePath?: string } {\r\n    return {\r\n      geometryId: this.getGeometryByKey(key),\r\n      texturePath: this.getTextureByKey(key),\r\n    };\r\n  }\r\n\r\n  public ensureAnimationAndGetShortName(animationFullName: string): string | undefined {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    let hasAnimation = false;\r\n    let animationShortName = animationFullName;\r\n\r\n    for (const key in this._data.animations) {\r\n      const val = this._data.animations[key];\r\n\r\n      if (val === animationFullName) {\r\n        animationShortName = key;\r\n        hasAnimation = true;\r\n      }\r\n    }\r\n\r\n    if (!hasAnimation) {\r\n      const lastPeriod = animationFullName.lastIndexOf(\".\");\r\n\r\n      if (lastPeriod > 0) {\r\n        animationShortName = animationFullName.substring(lastPeriod + 1).toLowerCase();\r\n      }\r\n\r\n      if (Utilities.isUsableAsObjectKey(animationShortName)) {\r\n        this._data.animations[animationShortName] = animationFullName;\r\n      }\r\n    }\r\n\r\n    return animationShortName;\r\n  }\r\n\r\n  public ensureAnimationAndScript(animationFullName: string) {\r\n    if (!this._data) {\r\n      return;\r\n    }\r\n\r\n    const animationShortName = this.ensureAnimationAndGetShortName(animationFullName);\r\n\r\n    if (!animationShortName) {\r\n      return;\r\n    }\r\n\r\n    if (this.getIsVersion1_10_0OrHigher()) {\r\n      if (!this._data.scripts) {\r\n        this._data.scripts = {};\r\n      }\r\n\r\n      if (!this._data.scripts[\"animate\"]) {\r\n        this._data.scripts[\"animate\"] = [];\r\n      }\r\n\r\n      const animationList = this._data.scripts[\"animate\"];\r\n\r\n      let hasScript = false;\r\n\r\n      if (animationList && Array.isArray(animationList)) {\r\n        for (const val of animationList) {\r\n          if (typeof val === \"string\" && val === animationShortName) {\r\n            hasScript = true;\r\n          } else if (typeof val === \"object\" && val[animationShortName]) {\r\n            hasScript = true;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!hasScript) {\r\n        animationList.push(animationShortName);\r\n      }\r\n    }\r\n  }\r\n\r\n  public getTextureItems(entityTypeResourceProjectItem: ProjectItem): { [name: string]: ProjectItem } | undefined {\r\n    if (!this._data || !this._data.geometry || !entityTypeResourceProjectItem.childItems) {\r\n      return undefined;\r\n    }\r\n\r\n    const results: { [name: string]: ProjectItem } = {};\r\n\r\n    for (const key in this._data.textures) {\r\n      let texturePath = this._data.textures[key];\r\n\r\n      if (texturePath) {\r\n        texturePath = StorageUtilities.canonicalizePath(texturePath);\r\n\r\n        for (const projectItemRel of entityTypeResourceProjectItem.childItems) {\r\n          if (projectItemRel.childItem.itemType === ProjectItemType.texture && projectItemRel.childItem.projectPath) {\r\n            let texturePathCand = StorageUtilities.canonicalizePath(projectItemRel.childItem.projectPath);\r\n            const lastPeriod = texturePathCand.lastIndexOf(\".\");\r\n\r\n            if (lastPeriod >= 0) {\r\n              texturePathCand = texturePathCand.substring(0, lastPeriod).toLowerCase();\r\n            }\r\n\r\n            if (texturePathCand.endsWith(texturePath) && Utilities.isUsableAsObjectKey(key)) {\r\n              results[key] = projectItemRel.childItem;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  public getIsVersion1_8_0OrLower() {\r\n    let fv = this.getFormatVersion();\r\n\r\n    return fv[0] <= 1 && fv[1] <= 8;\r\n  }\r\n\r\n  public getIsVersion1_10_0OrHigher() {\r\n    let fv = this.getFormatVersion();\r\n\r\n    return fv[0] >= 1 && fv[1] >= 10;\r\n  }\r\n\r\n  public getFormatVersion(): number[] {\r\n    if (!this._dataWrapper || !this._dataWrapper.format_version) {\r\n      return [0, 0, 0];\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._dataWrapper.format_version);\r\n  }\r\n\r\n  get formatVersion() {\r\n    if (!this._dataWrapper || !this._dataWrapper.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._dataWrapper.format_version;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<EntityTypeResourceDefinition, EntityTypeResourceDefinition>\r\n  ) {\r\n    let et: EntityTypeResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new EntityTypeResourceDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof EntityTypeResourceDefinition) {\r\n      et = file.manager as EntityTypeResourceDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  ensureData() {\r\n    if (this._data) {\r\n      return this._data;\r\n    }\r\n\r\n    const newDef: IEntityTypeResource = {\r\n      description: {\r\n        identifier: \"\",\r\n        materials: {},\r\n        textures: {},\r\n        geometry: {},\r\n        animation_controllers: {},\r\n        particle_effects: {},\r\n        animations: {},\r\n        render_controllers: [],\r\n        scripts: {},\r\n      },\r\n    };\r\n\r\n    if (!this._dataWrapper) {\r\n      this._dataWrapper = { format_version: \"1.10.0\", \"minecraft:client_entity\": newDef };\r\n      this._data = this._dataWrapper[\"minecraft:client_entity\"].description;\r\n      return this._data;\r\n    }\r\n\r\n    if (\r\n      this._dataWrapper[\"minecraft:client_entity\"] === undefined ||\r\n      this._dataWrapper[\"minecraft:client_entity\"].description === undefined\r\n    ) {\r\n      this._dataWrapper[\"minecraft:client_entity\"] = newDef;\r\n    }\r\n\r\n    this._data = this._dataWrapper[\"minecraft:client_entity\"].description;\r\n    return this._data;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._dataWrapper !== null, \"ETRDP\");\r\n\r\n    if (!this._dataWrapper) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._dataWrapper);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"ETRPF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._dataWrapper = data;\r\n\r\n    if (this._dataWrapper && this._dataWrapper[\"minecraft:client_entity\"]) {\r\n      this._data = this._dataWrapper[\"minecraft:client_entity\"].description;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async deleteLinkToChild(rel: IProjectItemRelationship) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (this._data === undefined) {\r\n      await this.load();\r\n    }\r\n\r\n    const etrChildItems = rel.parentItem.childItems;\r\n\r\n    if (rel.childItem.itemType === ProjectItemType.texture && this._data && this._data.textures) {\r\n      if (!rel.childItem.isContentLoaded) {\r\n        await rel.childItem.loadContent();\r\n      }\r\n\r\n      if (rel.childItem.primaryFile && packRootFolder) {\r\n        let relativePath = StorageUtilities.getBaseRelativePath(rel.childItem.primaryFile, packRootFolder);\r\n\r\n        if (relativePath) {\r\n          for (const key in this._data.textures) {\r\n            const texturePath = this._data.textures[key];\r\n\r\n            if (texturePath === relativePath) {\r\n              this._data.textures[key] = undefined;\r\n\r\n              if (etrChildItems) {\r\n                for (const otherChild of etrChildItems) {\r\n                  if (otherChild.childItem.itemType === ProjectItemType.renderControllerJson) {\r\n                    const renderController = (await MinecraftDefinitions.get(\r\n                      otherChild.childItem\r\n                    )) as RenderControllerSetDefinition;\r\n\r\n                    renderController.removeTexture(key);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"entity\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let textureList = this.getCanonicalizedTexturesList();\r\n    let geometryList = this.geometryList;\r\n    let renderControllerIdList = this.renderControllerIdList;\r\n    let animationControllerIdList = this.animationControllerIdList;\r\n    let animationValList = this.animationList;\r\n\r\n    if (index) {\r\n      // Use pre-built index for O(1) lookups\r\n\r\n      // Animations: look up each animation ID in the index\r\n      if (animationValList && animationValList.length > 0) {\r\n        index.addUniqueChildItems(item, index.animationsById, animationValList);\r\n      }\r\n\r\n      // Animation controllers\r\n      if (animationControllerIdList && animationControllerIdList.length > 0) {\r\n        index.addUniqueChildItems(item, index.animationControllersById, animationControllerIdList);\r\n      }\r\n\r\n      // Render controllers\r\n      if (renderControllerIdList && renderControllerIdList.length > 0) {\r\n        index.addUniqueChildItems(item, index.renderControllersById, renderControllerIdList);\r\n      }\r\n\r\n      // Models / geometry\r\n      if (geometryList && geometryList.length > 0) {\r\n        const matchedGeoIds = index.addUniqueChildItems(item, index.modelsById, geometryList);\r\n        geometryList = geometryList.filter((id) => !matchedGeoIds.has(id));\r\n      }\r\n\r\n      // Textures \u2014 still need path-based matching since paths depend on pack root\r\n      if (packRootFolder && textureList && textureList.length > 0) {\r\n        const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n        for (const candItem of textureItems) {\r\n          if (candItem.primaryFile) {\r\n            let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n              StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n            );\r\n\r\n            if (relativePath) {\r\n              if (textureList && textureList.includes(relativePath)) {\r\n                item.addChildItem(candItem);\r\n                textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      // Fallback: original scanning behavior when index is not available\r\n\r\n      // Check animation resources\r\n      if (animationValList && animationValList.length > 0) {\r\n        const animItems = project.getItemsByType(ProjectItemType.animationResourceJson);\r\n        for (const candItem of animItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const animationDef = await AnimationResourceDefinition.ensureOnFile(candItem.primaryFile);\r\n            const animIds = animationDef?.idList;\r\n\r\n            if (animIds) {\r\n              for (const animId of animationValList) {\r\n                if (animIds.has(animId)) {\r\n                  item.addChildItem(candItem);\r\n                  continue;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // Check animation controller resources\r\n      if (animationControllerIdList && animationControllerIdList.length > 0) {\r\n        const acItems = project.getItemsByType(ProjectItemType.animationControllerResourceJson);\r\n        for (const candItem of acItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const animationControllerDef = await AnimationControllerResourceDefinition.ensureOnFile(\r\n              candItem.primaryFile\r\n            );\r\n            const acIds = animationControllerDef?.idList;\r\n\r\n            if (acIds) {\r\n              for (const acId of animationControllerIdList) {\r\n                if (acIds.has(acId)) {\r\n                  item.addChildItem(candItem);\r\n                  continue;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // Check render controllers\r\n      if (renderControllerIdList && renderControllerIdList.length > 0) {\r\n        const rcItems = project.getItemsByType(ProjectItemType.renderControllerJson);\r\n        for (const candItem of rcItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const renderControllerDef = await RenderControllerSetDefinition.ensureOnFile(candItem.primaryFile);\r\n            const renderIds = renderControllerDef?.idList;\r\n\r\n            if (renderIds) {\r\n              for (const rcId of renderControllerIdList) {\r\n                if (renderIds.has(rcId)) {\r\n                  item.addChildItem(candItem);\r\n                  continue;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // Check textures\r\n      if (packRootFolder && textureList && textureList.length > 0) {\r\n        const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n        for (const candItem of textureItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n              StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n            );\r\n\r\n            if (relativePath) {\r\n              if (textureList && textureList.includes(relativePath)) {\r\n                item.addChildItem(candItem);\r\n                textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // Check model geometries\r\n      if (geometryList && geometryList.length > 0) {\r\n        const modelItems = project.getItemsByType(ProjectItemType.modelGeometryJson);\r\n        for (const candItem of modelItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const model = await ModelGeometryDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (model) {\r\n              let doAddModel = false;\r\n              for (const modelId of model.identifiers) {\r\n                if (geometryList && geometryList.includes(modelId)) {\r\n                  doAddModel = true;\r\n                  geometryList = Utilities.removeItemInArray(modelId, geometryList);\r\n                }\r\n              }\r\n\r\n              if (doAddModel) {\r\n                item.addChildItem(candItem);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        const isVanilla = await Database.isVanillaToken(texturePath);\r\n        item.addUnfulfilledRelationship(texturePath, ProjectItemType.texture, isVanilla);\r\n      }\r\n    }\r\n\r\n    if (geometryList) {\r\n      for (const geoId of geometryList) {\r\n        item.addUnfulfilledRelationship(geoId, ProjectItemType.modelGeometryJson, await Database.isVanillaToken(geoId));\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IFlipbookTexture } from \"./IFlipbookTexture\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport IProjectItemRelationship from \"../app/IProjectItemRelationship\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IDefinition from \"./IDefinition\";\r\n\r\nexport default class FlipbookTextureCatalogDefinition implements IDefinition {\r\n  private _data?: IFlipbookTexture[];\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<FlipbookTextureCatalogDefinition, FlipbookTextureCatalogDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get texturesList() {\r\n    if (!this._data || !Array.isArray(this._data)) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const flipbookTexture of this._data) {\r\n      const texturePath = flipbookTexture.flipbook_texture;\r\n\r\n      if (texturePath) {\r\n        textureList.push(texturePath.toLowerCase());\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<FlipbookTextureCatalogDefinition, FlipbookTextureCatalogDefinition>\r\n  ) {\r\n    let et: FlipbookTextureCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new FlipbookTextureCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof FlipbookTextureCatalogDefinition) {\r\n      et = file.manager as FlipbookTextureCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"FBTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = [];\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async deleteLinkToChild(rel: IProjectItemRelationship) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (this._data === undefined) {\r\n      if (!this.isLoaded) {\r\n        await this.load();\r\n      }\r\n    }\r\n\r\n    if (!this._data || !Array.isArray(this._data)) {\r\n      return;\r\n    }\r\n    if (rel.childItem.itemType === ProjectItemType.texture) {\r\n      if (!rel.childItem.isContentLoaded) {\r\n        await rel.childItem.loadContent();\r\n      }\r\n\r\n      if (rel.childItem.primaryFile && packRootFolder) {\r\n        let relativePath = StorageUtilities.getBaseRelativePath(rel.childItem.primaryFile, packRootFolder);\r\n\r\n        if (relativePath) {\r\n          let newFlipbookTextures: IFlipbookTexture[] = [];\r\n\r\n          for (const flipbookTexture of this._data) {\r\n            if (flipbookTexture.flipbook_texture !== relativePath) {\r\n              newFlipbookTextures.push(flipbookTexture);\r\n            }\r\n          }\r\n\r\n          this._data = newFlipbookTextures;\r\n        }\r\n      }\r\n    }\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getTexturePaths() {\r\n    const texturePaths: string[] = [];\r\n    if (this.data && Array.isArray(this.data)) {\r\n      for (const flipbookResource of this.data) {\r\n        const resource = flipbookResource.flipbook_texture;\r\n\r\n        if (!texturePaths.includes(resource)) {\r\n          texturePaths.push(resource);\r\n        }\r\n      }\r\n    }\r\n\r\n    return texturePaths;\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"textures\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let textureList = this.texturesList;\r\n\r\n    for (const candItem of textureItems) {\r\n      if (packRootFolder && textureList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder);\r\n\r\n          if (relativePath) {\r\n            if (textureList && textureList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        item.addUnfulfilledRelationship(\r\n          texturePath,\r\n          ProjectItemType.texture,\r\n          await Database.matchesVanillaPath(texturePath)\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport interface IJigsawProcessorRule {\r\n  input_predicate: {\r\n    predicate_type: string;\r\n    block?: string;\r\n    probability?: number;\r\n  };\r\n  output_state: {\r\n    name: string;\r\n  };\r\n}\r\n\r\nexport interface IJigsawProcessor {\r\n  processor_type: string;\r\n  rules: IJigsawProcessorRule[];\r\n}\r\n\r\nexport interface IJigsawProcessorListDefinition {\r\n  format_version: string;\r\n  \"minecraft:processor_list\": {\r\n    description: {\r\n      identifier: string;\r\n    };\r\n    processors: IJigsawProcessor[];\r\n  };\r\n}\r\n\r\nexport default class JigsawProcessorListDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _data?: IJigsawProcessorListDefinition;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._data?.[\"minecraft:processor_list\"]?.description?.identifier) {\r\n      return this._data[\"minecraft:processor_list\"].description.identifier;\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  public get processors() {\r\n    if (this._data?.[\"minecraft:processor_list\"]?.processors) {\r\n      return this._data[\"minecraft:processor_list\"].processors;\r\n    }\r\n    return [];\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    // For now, assume format version is current\r\n    return true;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    // Processor lists don't typically reference other jigsaw files directly\r\n    // but they could reference block types, items, etc. in the future\r\n    // For now, we'll leave this empty as processors mainly reference\r\n    // built-in Minecraft blocks\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<JigsawProcessorListDefinition | undefined> {\r\n    let jigsawProcessorList: JigsawProcessorListDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      jigsawProcessorList = new JigsawProcessorListDefinition();\r\n      jigsawProcessorList.file = file;\r\n      file.manager = jigsawProcessorList;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JigsawProcessorListDefinition) {\r\n      jigsawProcessorList = file.manager as JigsawProcessorListDefinition;\r\n      if (!jigsawProcessorList.isLoaded) {\r\n        await jigsawProcessorList.load();\r\n      }\r\n    }\r\n\r\n    return jigsawProcessorList;\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    const result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      this._data = result;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"JPLDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport JigsawProcessorListDefinition from \"./JigsawProcessorListDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport interface IJigsawTemplatePoolElement {\r\n  element: {\r\n    element_type: string;\r\n    location: string;\r\n    processors?: string;\r\n  };\r\n  weight: number;\r\n}\r\n\r\nexport interface IJigsawTemplatePoolDefinition {\r\n  format_version: string;\r\n  \"minecraft:template_pool\": {\r\n    description: {\r\n      identifier: string;\r\n    };\r\n    elements: IJigsawTemplatePoolElement[];\r\n  };\r\n}\r\n\r\nexport default class JigsawTemplatePoolDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _data?: IJigsawTemplatePoolDefinition;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._data?.[\"minecraft:template_pool\"]?.description?.identifier) {\r\n      return this._data[\"minecraft:template_pool\"].description.identifier;\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  public get elements() {\r\n    if (this._data?.[\"minecraft:template_pool\"]?.elements) {\r\n      return this._data[\"minecraft:template_pool\"].elements;\r\n    }\r\n    return [];\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    // For now, assume format version is current\r\n    return true;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const elements = this.elements;\r\n    if (!elements || elements.length === 0) {\r\n      return;\r\n    }\r\n\r\n    const jigsawProcessorListItems = project.getItemsByType(ProjectItemType.jigsawProcessorList);\r\n\r\n    // Find structure files and processors referenced by this template pool\r\n    for (const element of elements) {\r\n      // Find structure files referenced by location\r\n      if (element.element.location) {\r\n        const structurePath = element.element.location + \".mcstructure\";\r\n\r\n        for (const candItem of jigsawProcessorListItems) {\r\n          if (candItem.itemType === ProjectItemType.structure) {\r\n            if (\r\n              candItem.projectPath?.endsWith(structurePath) ||\r\n              candItem.projectPath?.includes(element.element.location)\r\n            ) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // Find processors referenced by processors field\r\n      if (element.element.processors) {\r\n        for (const candItem of jigsawProcessorListItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const processorList = await JigsawProcessorListDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (processorList && processorList.id === element.element.processors) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<JigsawTemplatePoolDefinition | undefined> {\r\n    let jigsawTemplatePool: JigsawTemplatePoolDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      jigsawTemplatePool = new JigsawTemplatePoolDefinition();\r\n      jigsawTemplatePool.file = file;\r\n      file.manager = jigsawTemplatePool;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JigsawTemplatePoolDefinition) {\r\n      jigsawTemplatePool = file.manager as JigsawTemplatePoolDefinition;\r\n      if (!jigsawTemplatePool.isLoaded) {\r\n        await jigsawTemplatePool.load();\r\n      }\r\n    }\r\n\r\n    return jigsawTemplatePool;\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    const result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      this._data = result;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"ITRDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport JigsawTemplatePoolDefinition from \"./JigsawTemplatePoolDefinition\";\r\n\r\nexport interface IJigsawStructureDefinition {\r\n  format_version: string;\r\n  \"minecraft:jigsaw\": {\r\n    description: {\r\n      identifier: string;\r\n    };\r\n    step: string;\r\n    terrain_adaptation: string;\r\n    start_pool: string;\r\n    max_depth: number;\r\n    start_height: number;\r\n    heightmap_projection: string;\r\n  };\r\n}\r\n\r\nexport default class JigsawStructureDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _data?: IJigsawStructureDefinition;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._data?.[\"minecraft:jigsaw\"]?.description?.identifier) {\r\n      return this._data[\"minecraft:jigsaw\"].description.identifier;\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  public get startPool() {\r\n    if (this._data?.[\"minecraft:jigsaw\"]?.start_pool) {\r\n      return this._data[\"minecraft:jigsaw\"].start_pool;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    // For now, assume format version is current\r\n    return true;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    if (!this.startPool) {\r\n      return;\r\n    }\r\n\r\n    const templatePoolItems = project.getItemsByType(ProjectItemType.jigsawTemplatePool);\r\n\r\n    // Find template pool referenced by start_pool\r\n    for (const candItem of templatePoolItems) {\r\n      if (!candItem.isContentLoaded) {\r\n        await candItem.loadContent();\r\n      }\r\n\r\n      if (candItem.primaryFile) {\r\n        const templatePool = await JigsawTemplatePoolDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n        if (templatePool && templatePool.id === this.startPool) {\r\n          item.addChildItem(candItem);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<JigsawStructureDefinition | undefined> {\r\n    let jigsawStructure: JigsawStructureDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      jigsawStructure = new JigsawStructureDefinition();\r\n      jigsawStructure.file = file;\r\n      file.manager = jigsawStructure;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JigsawStructureDefinition) {\r\n      jigsawStructure = file.manager as JigsawStructureDefinition;\r\n      if (!jigsawStructure.isLoaded) {\r\n        await jigsawStructure.load();\r\n      }\r\n    }\r\n\r\n    return jigsawStructure;\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    const result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      this._data = result;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport JigsawStructureDefinition from \"./JigsawStructureDefinition\";\r\n\r\nexport interface IJigsawStructureSetDefinition {\r\n  format_version: string;\r\n  \"minecraft:structure_set\": {\r\n    description: {\r\n      identifier: string;\r\n    };\r\n    placement: {\r\n      type: string;\r\n      salt: number;\r\n      separation: number;\r\n      spacing: number;\r\n      spread_type: string;\r\n    };\r\n    structures: Array<{\r\n      structure: string;\r\n      weight: number;\r\n    }>;\r\n  };\r\n}\r\n\r\nexport default class JigsawStructureSetDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _data?: IJigsawStructureSetDefinition;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._data?.[\"minecraft:structure_set\"]?.description?.identifier) {\r\n      return this._data[\"minecraft:structure_set\"].description.identifier;\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  public get structures() {\r\n    if (this._data?.[\"minecraft:structure_set\"]?.structures) {\r\n      return this._data[\"minecraft:structure_set\"].structures;\r\n    }\r\n    return [];\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    // For now, assume format version is current\r\n    return true;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const structures = this.structures;\r\n    if (!structures || structures.length === 0) {\r\n      return;\r\n    }\r\n\r\n    const jigsawItems = project.getItemsByType(ProjectItemType.jigsawStructure);\r\n\r\n    // Find jigsaw structures referenced by this structure set\r\n    for (const structureRef of structures) {\r\n      for (const candItem of jigsawItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const jigsawStructure = await JigsawStructureDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (jigsawStructure && jigsawStructure.id === structureRef.structure) {\r\n            item.addChildItem(candItem);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<JigsawStructureSetDefinition | undefined> {\r\n    let jigsawStructureSet: JigsawStructureSetDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      jigsawStructureSet = new JigsawStructureSetDefinition();\r\n      jigsawStructureSet.file = file;\r\n      file.manager = jigsawStructureSet;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JigsawStructureSetDefinition) {\r\n      jigsawStructureSet = file.manager as JigsawStructureSetDefinition;\r\n      if (!jigsawStructureSet.isLoaded) {\r\n        await jigsawStructureSet.load();\r\n      }\r\n    }\r\n\r\n    return jigsawStructureSet;\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    const result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      this._data = result;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IMusicDefinitionCatalog } from \"./IMusicDefinitionCatalog\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport SoundDefinitionCatalogDefinition from \"./SoundDefinitionCatalogDefinition\";\r\nimport Database from \"./Database\";\r\nimport IDefinition from \"./IDefinition\";\r\n\r\nexport default class MusicDefinitionCatalogDefinition implements IDefinition {\r\n  private _data?: IMusicDefinitionCatalog;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<MusicDefinitionCatalogDefinition, MusicDefinitionCatalogDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get musicDefinitionNameList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const musicDefNameList = [];\r\n\r\n    for (const key in this._data) {\r\n      musicDefNameList.push(key);\r\n    }\r\n\r\n    return musicDefNameList;\r\n  }\r\n\r\n  public get musicDefinitionEventNameList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const musicDefNameList: string[] = [];\r\n\r\n    for (const key in this._data) {\r\n      const def = this._data[key];\r\n\r\n      if (def && def.event_name) {\r\n        if (!musicDefNameList.includes(def.event_name)) {\r\n          musicDefNameList.push(def.event_name);\r\n        }\r\n      }\r\n    }\r\n\r\n    return musicDefNameList;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<MusicDefinitionCatalogDefinition, MusicDefinitionCatalogDefinition>\r\n  ) {\r\n    let et: MusicDefinitionCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new MusicDefinitionCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof MusicDefinitionCatalogDefinition) {\r\n      et = file.manager as MusicDefinitionCatalogDefinition;\r\n\r\n      if (!et.isLoaded && loadHandler) {\r\n        et.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await et.load();\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"MUSP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const soundDefItems = project.getItemsByType(ProjectItemType.soundDefinitionCatalog);\r\n\r\n    let musicDefList = this.musicDefinitionEventNameList;\r\n\r\n    for (const candItem of soundDefItems) {\r\n      if (musicDefList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const soundDef = await SoundDefinitionCatalogDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          const soundSetNames = soundDef?.getSoundDefinitionSetNameList();\r\n          if (soundSetNames) {\r\n            for (const musicDefName of musicDefList) {\r\n              if (soundSetNames.includes(musicDefName)) {\r\n                item.addChildItem(candItem);\r\n\r\n                const nextMusicDefNames: string[] = [];\r\n\r\n                for (const texturePath of musicDefList) {\r\n                  if (texturePath !== musicDefName) {\r\n                    nextMusicDefNames.push(texturePath);\r\n                  }\r\n                }\r\n\r\n                musicDefList = nextMusicDefNames;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (musicDefList) {\r\n      for (const musicDef of musicDefList) {\r\n        item.addUnfulfilledRelationship(\r\n          musicDef,\r\n          ProjectItemType.soundDefinitionCatalog,\r\n          await Database.isVanillaToken(musicDef)\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IEntitySounds, ISoundCatalog, ISoundEventCatalog, ISoundEventSet } from \"./ISoundCatalog\";\r\nimport Project, { FolderContext } from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport SoundDefinitionCatalogDefinition from \"./SoundDefinitionCatalogDefinition\";\r\nimport Database from \"./Database\";\r\nimport EntityTypeResourceDefinition from \"./EntityTypeResourceDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport MinecraftDefinitions from \"./MinecraftDefinitions\";\r\nimport EntityTypeDefinition from \"./EntityTypeDefinition\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\n\r\nexport default class SoundCatalogDefinition implements IDefinition {\r\n  private _data?: ISoundCatalog;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<SoundCatalogDefinition, SoundCatalogDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get entityIdList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const entityIdList: string[] = [];\r\n\r\n    if (this._data.entity_sounds && this._data.entity_sounds.entities) {\r\n      for (const key in this._data.entity_sounds.entities) {\r\n        if (!entityIdList.includes(key)) {\r\n          entityIdList.push(key);\r\n        }\r\n      }\r\n    }\r\n\r\n    return entityIdList;\r\n  }\r\n\r\n  public getSoundEventNameList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const soundEventNameList: string[] = [];\r\n\r\n    if (this._data.entity_sounds && this._data.entity_sounds.entities) {\r\n      for (const key in this._data.entity_sounds.entities) {\r\n        const def = this._data.entity_sounds.entities[key];\r\n\r\n        if (def && def.events) {\r\n          for (const eventKey in def.events) {\r\n            const event = def.events[eventKey];\r\n\r\n            if (event) {\r\n              for (const eventInstanceKey in def.events) {\r\n                const eventInstance = def.events[eventInstanceKey];\r\n\r\n                if (typeof eventInstance === \"string\") {\r\n                  if (!soundEventNameList.includes(eventInstance)) {\r\n                    soundEventNameList.push(eventInstance);\r\n                  }\r\n                } else if (eventInstance.sound) {\r\n                  if (!soundEventNameList.includes(eventInstance.sound)) {\r\n                    soundEventNameList.push(eventInstance.sound);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._data.entity_sounds && this._data.entity_sounds.defaults && this._data.entity_sounds.defaults.events) {\r\n      for (const eventKey in this._data.entity_sounds.defaults.events) {\r\n        const eventInstance = this._data.entity_sounds.defaults.events[eventKey];\r\n\r\n        if (typeof eventInstance === \"string\") {\r\n          if (!soundEventNameList.includes(eventInstance)) {\r\n            soundEventNameList.push(eventInstance);\r\n          }\r\n        } else if (eventInstance.sound) {\r\n          if (!soundEventNameList.includes(eventInstance.sound)) {\r\n            soundEventNameList.push(eventInstance.sound);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._data.block_sounds) {\r\n      for (const key in this._data.block_sounds) {\r\n        const def = this._data.block_sounds[key];\r\n\r\n        if (def && def.events) {\r\n          for (const eventKey in def.events) {\r\n            const event = def.events[eventKey];\r\n\r\n            if (event) {\r\n              for (const eventInstanceKey in def.events) {\r\n                const eventInstance = def.events[eventInstanceKey];\r\n\r\n                if (typeof eventInstance === \"string\") {\r\n                  if (!soundEventNameList.includes(eventInstance)) {\r\n                    soundEventNameList.push(eventInstance);\r\n                  }\r\n                } else if (eventInstance.sound) {\r\n                  if (!soundEventNameList.includes(eventInstance.sound)) {\r\n                    soundEventNameList.push(eventInstance.sound);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._data.individual_event_sounds && this._data.individual_event_sounds.events) {\r\n      for (const key in this._data.individual_event_sounds.events) {\r\n        const eventInstance = this._data.individual_event_sounds.events[key];\r\n\r\n        if (typeof eventInstance === \"string\") {\r\n          if (!soundEventNameList.includes(eventInstance)) {\r\n            soundEventNameList.push(eventInstance);\r\n          }\r\n        } else if (eventInstance.sound) {\r\n          if (!soundEventNameList.includes(eventInstance.sound)) {\r\n            soundEventNameList.push(eventInstance.sound);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return soundEventNameList;\r\n  }\r\n\r\n  public ensureEntityEvent(idSound: string) {\r\n    this.ensureDefault();\r\n\r\n    if (!this._data) {\r\n      return;\r\n    }\r\n\r\n    let es: IEntitySounds | undefined = this._data.entity_sounds;\r\n\r\n    if (es === undefined) {\r\n      es = {\r\n        entities: {},\r\n      };\r\n\r\n      this._data.entity_sounds = es;\r\n    }\r\n\r\n    let entities: ISoundEventCatalog | undefined = es.entities;\r\n\r\n    if (entities === undefined) {\r\n      entities = {};\r\n\r\n      es.entities = entities;\r\n    }\r\n\r\n    let elt: ISoundEventSet | undefined = entities[idSound];\r\n\r\n    if (!elt) {\r\n      if (idSound.startsWith(\"minecraft:\") && Utilities.isUsableAsObjectKey(idSound.substring(10))) {\r\n        elt = entities[idSound.substring(10)];\r\n      }\r\n\r\n      if (!elt) {\r\n        elt = {\r\n          events: {},\r\n        };\r\n      }\r\n\r\n      if (Utilities.isUsableAsObjectKey(idSound)) {\r\n        entities[idSound] = elt;\r\n      }\r\n\r\n      return elt;\r\n    }\r\n\r\n    return elt;\r\n  }\r\n\r\n  public ensureDefault() {\r\n    if (this._data === undefined) {\r\n      this._data = {};\r\n    }\r\n  }\r\n\r\n  static async ensureForProject(project: Project) {\r\n    const items = project.getItemsCopy();\r\n\r\n    for (const item of items) {\r\n      if (item.itemType === ProjectItemType.soundCatalog) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        if (item.primaryFile) {\r\n          const soundCatalog = await SoundCatalogDefinition.ensureOnFile(item.primaryFile);\r\n\r\n          if (soundCatalog) {\r\n            return soundCatalog;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const defaultRpFolder = await project.getDefaultResourcePackFolder();\r\n\r\n    if (defaultRpFolder) {\r\n      const newFile = defaultRpFolder.ensureFile(\"sounds.json\");\r\n\r\n      const soundGen = await SoundCatalogDefinition.ensureOnFile(newFile);\r\n\r\n      if (soundGen) {\r\n        soundGen.ensureDefault();\r\n\r\n        project.ensureItemFromFile(newFile, ProjectItemType.soundCatalog, FolderContext.resourcePack);\r\n\r\n        return soundGen;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<SoundCatalogDefinition, SoundCatalogDefinition>) {\r\n    let et: SoundCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new SoundCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof SoundCatalogDefinition) {\r\n      et = file.manager as SoundCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  /**\r\n   * Converts ISoundEvent objects that only have {sound: \"...\"} back\r\n   * to plain strings, keeping the file compact and canonical.\r\n   */\r\n  private _downscaleEvents() {\r\n    if (!this._data) {\r\n      return;\r\n    }\r\n\r\n    const catalogs: (ISoundEventCatalog | undefined)[] = [\r\n      this._data.entity_sounds?.entities,\r\n      this._data.block_sounds,\r\n      this._data.interactive_sounds?.block_sounds,\r\n      this._data.interactive_sounds?.entity_sounds?.entities,\r\n    ];\r\n\r\n    const eventSets: (ISoundEventSet | undefined)[] = [\r\n      this._data.entity_sounds?.defaults,\r\n      this._data.interactive_sounds?.entity_sounds?.defaults,\r\n    ];\r\n\r\n    for (const catalog of catalogs) {\r\n      if (catalog) {\r\n        for (const entityKey in catalog) {\r\n          eventSets.push(catalog[entityKey]);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const eventSet of eventSets) {\r\n      if (eventSet && eventSet.events) {\r\n        for (const key in eventSet.events) {\r\n          const val = eventSet.events[key];\r\n          if (typeof val === \"object\" && val.sound) {\r\n            const objKeys = Object.keys(val);\r\n            if (objKeys.length === 1 && objKeys[0] === \"sound\") {\r\n              eventSet.events[key] = val.sound;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"SCDP\");\r\n      return false;\r\n    }\r\n\r\n    this._downscaleEvents();\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let soundEventList = this.getSoundEventNameList();\r\n    let entityIdList = this.entityIdList;\r\n\r\n    // Process entity type items using index for O(1) lookups\r\n    if (entityIdList) {\r\n      if (index) {\r\n        for (const entityId of entityIdList) {\r\n          const resourceItems = index.getItemsById(index.entityResourcesById, entityId);\r\n          const behaviorItems = index.getItemsById(index.entityBehaviorsById, entityId);\r\n          const allMatches = [...resourceItems, ...behaviorItems];\r\n\r\n          for (const matchItem of allMatches) {\r\n            item.addParentItem(matchItem);\r\n          }\r\n\r\n          if (allMatches.length > 0) {\r\n            entityIdList = Utilities.removeItemInArray(entityId, entityIdList);\r\n          }\r\n        }\r\n      } else {\r\n        const entityResourceItems = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n        const entityBehaviorItems = project.getItemsByType(ProjectItemType.entityTypeBehavior);\r\n        const entityItems = [...entityResourceItems, ...entityBehaviorItems];\r\n\r\n        for (const candItem of entityItems) {\r\n          const entityDef = (await MinecraftDefinitions.get(candItem)) as\r\n            | undefined\r\n            | EntityTypeResourceDefinition\r\n            | EntityTypeDefinition;\r\n\r\n          if (entityDef && entityDef.id && entityIdList?.includes(entityDef?.id)) {\r\n            item.addParentItem(candItem);\r\n\r\n            entityIdList = Utilities.removeItemInArray(entityDef.id, entityIdList);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Process sound definition catalog items\r\n    if (soundEventList) {\r\n      const soundDefItems = project.getItemsByType(ProjectItemType.soundDefinitionCatalog);\r\n\r\n      for (const candItem of soundDefItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const soundDef = await SoundDefinitionCatalogDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          const soundSetNames = soundDef?.getSoundDefinitionSetNameList();\r\n          if (soundSetNames) {\r\n            for (const soundEventName of soundEventList) {\r\n              if (typeof soundEventName === \"string\" && soundEventName.trim().length > 0) {\r\n                if (soundSetNames.includes(soundEventName)) {\r\n                  item.addChildItem(candItem);\r\n\r\n                  soundEventList = Utilities.removeItemInArray(soundEventName, soundEventList);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (soundEventList && Array.isArray(soundEventList)) {\r\n      for (const soundEvent of soundEventList) {\r\n        if (typeof soundEvent === \"string\" && soundEvent.trim().length > 0) {\r\n          const isVanilla = await Database.isVanillaToken(soundEvent);\r\n          item.addUnfulfilledRelationship(soundEvent, ProjectItemType.soundDefinitionCatalog, isVanilla);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (entityIdList && Array.isArray(entityIdList)) {\r\n      for (const entityId of entityIdList) {\r\n        if (entityId.length > 0) {\r\n          const isVanilla = await Database.isVanillaToken(entityId);\r\n          item.addUnfulfilledRelationship(entityId, ProjectItemType.entityTypeBehavior, isVanilla);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport TextureSet from \"@minecraft/bedrock-schemas/types/rp/visuals/TextureSet\";\r\n\r\nexport default class TextureSetDefinition implements IDefinition {\r\n  private _data?: TextureSet;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<TextureSetDefinition, TextureSetDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get texturesList() {\r\n    if (!this._data || !this._data[\"minecraft:texture_set\"]) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    const textureSet = this._data[\"minecraft:texture_set\"];\r\n\r\n    if (textureSet.metalness_emissive_roughness && typeof textureSet.metalness_emissive_roughness === \"string\") {\r\n      textureList.push(this.adaptTexturePath(textureSet.metalness_emissive_roughness));\r\n    }\r\n\r\n    if (\r\n      textureSet.metalness_emissive_roughness_subsurface &&\r\n      typeof textureSet.metalness_emissive_roughness_subsurface === \"string\"\r\n    ) {\r\n      textureList.push(this.adaptTexturePath(textureSet.metalness_emissive_roughness_subsurface));\r\n    }\r\n\r\n    if (textureSet.heightmap && typeof textureSet.heightmap === \"string\") {\r\n      textureList.push(this.adaptTexturePath(textureSet.heightmap));\r\n    }\r\n\r\n    if (textureSet.normal && typeof textureSet.normal === \"string\") {\r\n      textureList.push(this.adaptTexturePath(textureSet.normal));\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  private adaptTexturePath(path: string) {\r\n    path = path.toLowerCase();\r\n\r\n    if (path.indexOf(\"/\") >= 0) {\r\n      return path;\r\n    }\r\n\r\n    if (this._file) {\r\n      return this._file.parentFolder.fullPath + \"/\" + path;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<TextureSetDefinition, TextureSetDefinition>) {\r\n    let tsd: TextureSetDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      tsd = new TextureSetDefinition();\r\n\r\n      tsd.file = file;\r\n\r\n      file.manager = tsd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof TextureSetDefinition) {\r\n      tsd = file.manager as TextureSetDefinition;\r\n\r\n      if (!tsd.isLoaded) {\r\n        if (loadHandler) {\r\n          tsd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await tsd.load();\r\n      }\r\n    }\r\n\r\n    return tsd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"TSTDF\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TSTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = [];\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"textures\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let textureListInitial = this.texturesList;\r\n    let textureList: string[] = [];\r\n\r\n    if (!packRootFolder || !textureListInitial) {\r\n      return;\r\n    }\r\n\r\n    for (let texturePath of textureListInitial) {\r\n      texturePath = StorageUtilities.canonicalizePath(texturePath).toLowerCase();\r\n      const basePath = StorageUtilities.canonicalizePath(packRootFolder.fullPath).toLowerCase();\r\n\r\n      if (texturePath.startsWith(basePath)) {\r\n        textureList.push(texturePath.substring(basePath.length + 1).toLowerCase());\r\n      } else {\r\n        textureList.push(texturePath.toLowerCase());\r\n      }\r\n    }\r\n\r\n    for (const candItem of textureItems) {\r\n      if (packRootFolder && textureList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder);\r\n\r\n          if (relativePath) {\r\n            if (textureList && textureList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        item.addUnfulfilledRelationship(\r\n          texturePath,\r\n          ProjectItemType.texture,\r\n          await Database.matchesVanillaPath(texturePath)\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n", "import { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport AnimationBehaviorDefinition from \"./AnimationBehaviorDefinition\";\r\nimport AnimationControllerBehaviorDefinition from \"./AnimationControllerBehaviorDefinition\";\r\nimport AnimationControllerResourceDefinition from \"./AnimationControllerResourceDefinition\";\r\nimport AnimationResourceDefinition from \"./AnimationResourceDefinition\";\r\nimport AudioDefinition from \"./AudioDefinition\";\r\nimport BehaviorManifestDefinition from \"./BehaviorManifestDefinition\";\r\nimport BiomeBehaviorDefinition from \"./BiomeBehaviorDefinition\";\r\nimport BiomeResourceDefinition from \"./BiomeResourceDefinition\";\r\nimport BlockTypeDefinition from \"./BlockTypeDefinition\";\r\nimport EntityTypeDefinition from \"./EntityTypeDefinition\";\r\nimport EntityTypeResourceDefinition from \"./EntityTypeResourceDefinition\";\r\nimport FlipbookTextureCatalogDefinition from \"./FlipbookTextureCatalogDefinition\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport ItemTypeDefinition from \"./ItemTypeDefinition\";\r\nimport JigsawProcessorListDefinition from \"./JigsawProcessorListDefinition\";\r\nimport JigsawStructureDefinition from \"./JigsawStructureDefinition\";\r\nimport JigsawStructureSetDefinition from \"./JigsawStructureSetDefinition\";\r\nimport JigsawTemplatePoolDefinition from \"./JigsawTemplatePoolDefinition\";\r\nimport MusicDefinitionCatalogDefinition from \"./MusicDefinitionCatalogDefinition\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport RenderControllerSetDefinition from \"./RenderControllerSetDefinition\";\r\nimport ResourceManifestDefinition from \"./ResourceManifestDefinition\";\r\nimport SoundCatalogDefinition from \"./SoundCatalogDefinition\";\r\nimport SoundDefinitionCatalogDefinition from \"./SoundDefinitionCatalogDefinition\";\r\nimport TextureSetDefinition from \"./TextureSetDefinition\";\r\n\r\nexport default class MinecraftDefinitions {\r\n  static async get(projectItem: ProjectItem): Promise<IDefinition | undefined> {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (\r\n      !projectItem.primaryFile ||\r\n      !projectItem.primaryFile.content ||\r\n      typeof projectItem.primaryFile.content !== \"string\"\r\n    ) {\r\n      if (!projectItem.primaryFile) {\r\n        return undefined;\r\n      }\r\n\r\n      if (!projectItem.primaryFile.isContentLoaded) {\r\n        await projectItem.primaryFile.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile.content || typeof projectItem.primaryFile.content !== \"string\") {\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    switch (projectItem.itemType) {\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return await EntityTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.entityTypeResource:\r\n        return await EntityTypeResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.itemTypeBehavior:\r\n        return await ItemTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.blockTypeBehavior:\r\n        return await BlockTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.textureSetJson:\r\n        return await TextureSetDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.flipbookTexturesJson:\r\n        return await FlipbookTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.behaviorPackManifestJson:\r\n        return await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.resourcePackManifestJson:\r\n        return await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n        return await AnimationControllerBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.animationControllerResourceJson:\r\n        return await AnimationControllerResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.animationBehaviorJson:\r\n        return await AnimationBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.animationResourceJson:\r\n        return await AnimationResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n        return await SoundDefinitionCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.soundCatalog:\r\n        return await SoundCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.musicDefinitionJson:\r\n        return await MusicDefinitionCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.renderControllerJson:\r\n        return await RenderControllerSetDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.biomeBehavior:\r\n        return await BiomeBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.biomeResource:\r\n        return await BiomeResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.jigsawProcessorList:\r\n        return await JigsawProcessorListDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.jigsawStructureSet:\r\n        return await JigsawStructureSetDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.jigsawTemplatePool:\r\n        return await JigsawTemplatePoolDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.jigsawStructure:\r\n        return await JigsawStructureDefinition.ensureOnFile(projectItem.primaryFile);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureFoundationalDependencies(item: ProjectItem) {\r\n    if (item.itemType === ProjectItemType.audio) {\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n\r\n      if (item.primaryFile) {\r\n        const audioFile = await AudioDefinition.ensureOnFile(item.primaryFile);\r\n\r\n        if (audioFile) {\r\n          await audioFile.ensureSoundDefinitionsForFile(item.project);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async formatVersionIsCurrent(projectItem: ProjectItem) {\r\n    const def = await MinecraftDefinitions.get(projectItem);\r\n\r\n    if (def && (def as any).getFormatVersionIsCurrent) {\r\n      return await (def as any).getFormatVersionIsCurrent();\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static async getFormatVersion(projectItem: ProjectItem) {\r\n    const def = await MinecraftDefinitions.get(projectItem);\r\n\r\n    if (def && (def as any).getFormatVersion) {\r\n      const fv = await (def as any).getFormatVersion();\r\n\r\n      // format_version may be expressed as either a 3-number array ([1,0,2]) or a\r\n      // string (\"1.0.2\"). Normalize to a number[] so consumers can display it\r\n      // uniformly (e.g., fv.join(\".\")).\r\n      if (fv === undefined || fv === null) {\r\n        return undefined;\r\n      }\r\n\r\n      if (fv instanceof Array) {\r\n        return fv;\r\n      }\r\n\r\n      if (typeof fv === \"string\" || typeof fv === \"number\") {\r\n        return MinecraftUtilities.getVersionArrayFrom(fv);\r\n      }\r\n\r\n      return undefined;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IClientAttachableDescription, IClientAttachableWrapper } from \"./IClientAttachable\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport AnimationResourceDefinition from \"./AnimationResourceDefinition\";\r\nimport RenderControllerSetDefinition from \"./RenderControllerSetDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ModelGeometryDefinition from \"./ModelGeometryDefinition\";\r\nimport Database from \"./Database\";\r\nimport IProjectItemRelationship from \"../app/IProjectItemRelationship\";\r\nimport MinecraftDefinitions from \"./MinecraftDefinitions\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\n\r\nexport default class AttachableResourceDefinition {\r\n  private _dataWrapper?: IClientAttachableWrapper;\r\n  private _data?: IClientAttachableDescription;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<AttachableResourceDefinition, AttachableResourceDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.identifier;\r\n  }\r\n\r\n  public get textures() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._data.textures === undefined) {\r\n      this._data.textures = {};\r\n    }\r\n\r\n    return this._data.textures;\r\n  }\r\n\r\n  public getCanonicalizedTexturesList() {\r\n    if (!this._data || !this._data.textures) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const key in this._data.textures) {\r\n      const texturePath = TextureDefinition.canonicalizeTexturePath(this._data.textures[key]);\r\n\r\n      if (texturePath) {\r\n        textureList.push(texturePath);\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get texturesIdList() {\r\n    if (!this._data || !this._data.textures) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureIdList = [];\r\n\r\n    for (const key in this._data.textures) {\r\n      textureIdList.push(key);\r\n    }\r\n\r\n    return textureIdList;\r\n  }\r\n\r\n  public get renderControllerIdList(): string[] | undefined {\r\n    if (!this._data || !this._data.render_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.render_controllers;\r\n  }\r\n\r\n  public get animationIdList(): string[] | undefined {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationIdList = [];\r\n\r\n    for (const key in this._data.animations) {\r\n      animationIdList.push(key);\r\n    }\r\n\r\n    return animationIdList;\r\n  }\r\n\r\n  public get animationList(): string[] | undefined {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationList = [];\r\n\r\n    for (const key in this._data.animations) {\r\n      const val = this._data.animations[key];\r\n\r\n      if (val) {\r\n        animationList.push(val);\r\n      }\r\n    }\r\n\r\n    return animationList;\r\n  }\r\n\r\n  public get geometry() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.geometry;\r\n  }\r\n\r\n  public get geometryList() {\r\n    if (!this._data || !this._data.geometry) {\r\n      return undefined;\r\n    }\r\n\r\n    const geometryList = [];\r\n\r\n    for (const key in this._data.geometry) {\r\n      const geometryPath = this._data.geometry[key];\r\n\r\n      if (geometryPath) {\r\n        geometryList.push(geometryPath);\r\n      }\r\n    }\r\n\r\n    return geometryList;\r\n  }\r\n\r\n  public getTextureItems(entityTypeResourceProjectItem: ProjectItem): { [name: string]: ProjectItem } | undefined {\r\n    if (!this._data || !this._data.geometry || !entityTypeResourceProjectItem.childItems) {\r\n      return undefined;\r\n    }\r\n\r\n    const results: { [name: string]: ProjectItem } = {};\r\n\r\n    for (const key in this._data.textures) {\r\n      let texturePath = this._data.textures[key];\r\n\r\n      if (texturePath) {\r\n        texturePath = StorageUtilities.canonicalizePath(texturePath);\r\n\r\n        for (const projectItemRel of entityTypeResourceProjectItem.childItems) {\r\n          if (projectItemRel.childItem.itemType === ProjectItemType.texture && projectItemRel.childItem.projectPath) {\r\n            let texturePathCand = StorageUtilities.canonicalizePath(projectItemRel.childItem.projectPath);\r\n            const lastPeriod = texturePathCand.lastIndexOf(\".\");\r\n\r\n            if (lastPeriod >= 0) {\r\n              texturePathCand = texturePathCand.substring(0, lastPeriod).toLowerCase();\r\n            }\r\n\r\n            if (texturePathCand.endsWith(texturePath)) {\r\n              results[key] = projectItemRel.childItem;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._dataWrapper) {\r\n      return undefined;\r\n    }\r\n\r\n    const fv = this._dataWrapper.format_version;\r\n\r\n    if (typeof fv === \"number\") {\r\n      return [fv];\r\n    }\r\n\r\n    if (typeof fv === \"string\") {\r\n      let fvarr = this._dataWrapper.format_version.split(\".\");\r\n\r\n      let fvarrInt: number[] = [];\r\n      for (let i = 0; i < fvarr.length; i++) {\r\n        try {\r\n          fvarrInt.push(parseInt(fvarr[i]));\r\n        } catch (e) {}\r\n      }\r\n\r\n      return fvarrInt;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get formatVersion() {\r\n    if (!this._dataWrapper || !this._dataWrapper.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._dataWrapper.format_version;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<AttachableResourceDefinition, AttachableResourceDefinition>\r\n  ) {\r\n    let attachable: AttachableResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      attachable = new AttachableResourceDefinition();\r\n\r\n      attachable.file = file;\r\n\r\n      file.manager = attachable;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AttachableResourceDefinition) {\r\n      attachable = file.manager as AttachableResourceDefinition;\r\n\r\n      if (!attachable.isLoaded) {\r\n        if (loadHandler) {\r\n          attachable.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await attachable.load();\r\n      }\r\n    }\r\n\r\n    return attachable;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._dataWrapper);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"ATTRPF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._dataWrapper = data;\r\n\r\n    if (this._dataWrapper && this._dataWrapper[\"minecraft:attachable\"]) {\r\n      this._data = this._dataWrapper[\"minecraft:attachable\"].description;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n  ensureData() {\r\n    if (this._data) {\r\n      return this._data;\r\n    }\r\n\r\n    const newDef: IClientAttachableDescription = {\r\n      identifier: \"\",\r\n      materials: {},\r\n      textures: {},\r\n      geometry: {},\r\n      particle_effects: {},\r\n      animations: {},\r\n      render_controllers: [],\r\n      scripts: {},\r\n    };\r\n\r\n    if (!this._dataWrapper) {\r\n      this._dataWrapper = { format_version: \"1.10.0\", \"minecraft:attachable\": { description: newDef } };\r\n      this._data = this._dataWrapper[\"minecraft:attachable\"].description;\r\n      return this._data;\r\n    }\r\n\r\n    if (\r\n      this._dataWrapper[\"minecraft:attachable\"] === undefined ||\r\n      this._dataWrapper[\"minecraft:attachable\"].description === undefined\r\n    ) {\r\n      this._dataWrapper[\"minecraft:attachable\"] = { description: newDef };\r\n    }\r\n\r\n    this._data = this._dataWrapper[\"minecraft:attachable\"].description;\r\n\r\n    return this._data;\r\n  }\r\n\r\n  async deleteLinkToChild(rel: IProjectItemRelationship) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (this._data === undefined) {\r\n      await this.load();\r\n    }\r\n\r\n    const etrChildItems = rel.parentItem.childItems;\r\n\r\n    if (rel.childItem.itemType === ProjectItemType.texture && this._data && this._data.textures) {\r\n      if (!rel.childItem.isContentLoaded) {\r\n        await rel.childItem.loadContent();\r\n      }\r\n\r\n      if (rel.childItem.primaryFile && packRootFolder) {\r\n        let relativePath = StorageUtilities.getBaseRelativePath(rel.childItem.primaryFile, packRootFolder);\r\n\r\n        if (relativePath) {\r\n          for (const key in this._data.textures) {\r\n            if (Utilities.isUsableAsObjectKey(key)) {\r\n              const texturePath = this._data.textures[key];\r\n\r\n              if (texturePath === relativePath) {\r\n                this._data.textures[key] = undefined;\r\n\r\n                if (etrChildItems) {\r\n                  for (const otherChild of etrChildItems) {\r\n                    if (otherChild.childItem.itemType === ProjectItemType.renderControllerJson) {\r\n                      const renderController = (await MinecraftDefinitions.get(\r\n                        otherChild.childItem\r\n                      )) as RenderControllerSetDefinition;\r\n\r\n                      renderController.removeTexture(key);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"attachables\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let textureList = this.getCanonicalizedTexturesList();\r\n    let geometryList = this.geometryList;\r\n    let renderControllerIdList = this.renderControllerIdList;\r\n    let animationIdList = this.animationIdList;\r\n\r\n    // Process animations\r\n    if (animationIdList) {\r\n      const animItems = project.getItemsByType(ProjectItemType.animationResourceJson);\r\n      for (const candItem of animItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const animationDef = await AnimationResourceDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          const animIds = animationDef?.idList;\r\n\r\n          if (animIds) {\r\n            for (const animId of animationIdList) {\r\n              if (animIds.has(animId)) {\r\n                item.addChildItem(candItem);\r\n                continue;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Process render controllers\r\n    if (renderControllerIdList) {\r\n      const rcItems = project.getItemsByType(ProjectItemType.renderControllerJson);\r\n      for (const candItem of rcItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const renderControllerDef = await RenderControllerSetDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          const renderIds = renderControllerDef?.idList;\r\n\r\n          if (renderIds) {\r\n            for (const rcId of renderControllerIdList) {\r\n              if (renderIds.has(rcId)) {\r\n                item.addChildItem(candItem);\r\n                continue;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Process textures\r\n    if (packRootFolder && textureList) {\r\n      const texItems = project.getItemsByType(ProjectItemType.texture);\r\n      for (const candItem of texItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n            StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n          );\r\n\r\n          if (relativePath) {\r\n            if (textureList && textureList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Process models\r\n    if (geometryList) {\r\n      const modelItems = project.getItemsByType(ProjectItemType.modelGeometryJson);\r\n      for (const candItem of modelItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const model = await ModelGeometryDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (model) {\r\n            let doAddModel = false;\r\n            for (const modelId of model.identifiers) {\r\n              if (geometryList && geometryList.includes(modelId)) {\r\n                doAddModel = true;\r\n\r\n                geometryList = Utilities.removeItemInArray(modelId, geometryList);\r\n              }\r\n            }\r\n\r\n            if (doAddModel) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        const isVanilla = await Database.isVanillaToken(texturePath);\r\n\r\n        item.addUnfulfilledRelationship(texturePath, ProjectItemType.texture, isVanilla);\r\n      }\r\n    }\r\n\r\n    if (geometryList) {\r\n      for (const geoId of geometryList) {\r\n        item.addUnfulfilledRelationship(geoId, ProjectItemType.modelGeometryJson, await Database.isVanillaToken(geoId));\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IComponent from \"./IComponent\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IItemTypeBehaviorPack from \"./IItemTypeBehaviorPack\";\r\nimport IItemTypeWrapper from \"./IItemTypeWrapper\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport AttachableResourceDefinition from \"./AttachableResourceDefinition\";\r\nimport TypeScriptDefinition from \"./TypeScriptDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ProjectUtilities from \"../app/ProjectUtilities\";\r\n\r\nexport default class ItemTypeDefinition implements IManagedComponentSetItem, IDefinition {\r\n  private _wrapper: IItemTypeWrapper | null = null;\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n  private _managed: { [id: string]: IManagedComponent | undefined } = {};\r\n\r\n  private _data?: IItemTypeBehaviorPack;\r\n\r\n  private _onLoaded = new EventDispatcher<ItemTypeDefinition, ItemTypeDefinition>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<ItemTypeDefinition, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<ItemTypeDefinition, string>();\r\n  private _onComponentChanged = new EventDispatcher<ItemTypeDefinition, IManagedComponent>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get behaviorPackFile() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set behaviorPackFile(newFile: IFile | undefined) {\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.unsubscribe(this._handleFileUpdated);\r\n    }\r\n\r\n    this._file = newFile;\r\n\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.subscribe(this._handleFileUpdated);\r\n    }\r\n  }\r\n\r\n  _handleFileUpdated(file: IFile, fileB: IFile) {\r\n    this._data = undefined;\r\n    this._isLoaded = false;\r\n    this._wrapper = null;\r\n    this._managed = {};\r\n  }\r\n\r\n  public get id() {\r\n    if (this._id === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get formatVersion() {\r\n    if (this._wrapper) {\r\n      return this._wrapper.format_version;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._wrapper) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._wrapper.format_version);\r\n  }\r\n\r\n  public setFormatVersion(version: string): void {\r\n    if (!this._wrapper) {\r\n      return;\r\n    }\r\n\r\n    this._wrapper.format_version = version;\r\n  }\r\n\r\n  constructor() {\r\n    this._handleFileUpdated = this._handleFileUpdated.bind(this);\r\n  }\r\n\r\n  ensureComponent(id: string, defaultData?: IComponent | string | string[] | boolean | number[] | number | undefined) {\r\n    const comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      return comp;\r\n    }\r\n\r\n    return this.addComponent(id, defaultData);\r\n  }\r\n\r\n  getComponent(id: string) {\r\n    if (!this._data || !this._data.components) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      const comp = this._data.components[id];\r\n      if (comp) {\r\n        this._managed[id] = new ManagedComponent(this._data.components, id, comp);\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"ITNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents(): IManagedComponent[] {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getCustomComponentIds() {\r\n    let customComponentIds: string[] = [];\r\n    const customComponent = this.getComponent(\"minecraft:custom_components\");\r\n\r\n    if (customComponent) {\r\n      let compData = customComponent.getData();\r\n\r\n      if (compData && Array.isArray(compData)) {\r\n        for (const str of compData) {\r\n          if (typeof str === \"string\") {\r\n            customComponentIds.push(str);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const comp of this.getComponents()) {\r\n      if (!comp.id.startsWith(\"minecraft:\") && !comp.id.startsWith(\"tag:\")) {\r\n        customComponentIds.push(comp.id);\r\n      }\r\n    }\r\n\r\n    return customComponentIds;\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._data !== undefined) {\r\n      for (const componentName in this._data.components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let customComponentIds: string[] = this.getCustomComponentIds();\r\n\r\n    // Check TypeScript files for custom components (only if we have custom component IDs)\r\n    if (customComponentIds && customComponentIds.length > 0) {\r\n      const tsItems = project.getItemsByType(ProjectItemType.ts);\r\n      for (const candItem of tsItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          if (!candItem.primaryFile.isContentLoaded) {\r\n            await candItem.primaryFile.loadContent();\r\n          }\r\n\r\n          const tsd = await TypeScriptDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (tsd && tsd.data) {\r\n            let doAddTs = false;\r\n\r\n            for (const customCompId of customComponentIds) {\r\n              if (tsd.data.indexOf(customCompId) >= 0) {\r\n                doAddTs = true;\r\n                break;\r\n              }\r\n            }\r\n\r\n            if (doAddTs) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check attachable resources\r\n    if (index && this.id) {\r\n      // Use pre-built index for O(1) lookup\r\n      const matchingAttachables = index.getItemsById(index.attachablesById, this.id);\r\n      for (const candItem of matchingAttachables) {\r\n        item.addChildItem(candItem);\r\n      }\r\n    } else {\r\n      const attachableItems = project.getItemsByType(ProjectItemType.attachableResourceJson);\r\n      for (const candItem of attachableItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const ard = await AttachableResourceDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (ard) {\r\n            const id = ard.id;\r\n\r\n            if (id === this.id) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  setBehaviorPackFormatVersion(versionStr: string) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    if (this._wrapper) {\r\n      this._wrapper.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    const bpData = this._data as IItemTypeBehaviorPack;\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(bpData.components, id, componentOrData);\r\n\r\n    bpData.components[id] = mc.getData();\r\n    this._managed[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._data === undefined) {\r\n      return;\r\n    }\r\n\r\n    const newBehaviorPacks: {\r\n      [name: string]: IComponent | string | string[] | boolean | number[] | number | undefined;\r\n    } = {};\r\n    const newManagedComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this._data.components) {\r\n      if (name !== id) {\r\n        const component = this._data.components[name];\r\n\r\n        newBehaviorPacks[name] = component;\r\n      }\r\n    }\r\n\r\n    for (const name in this._managed) {\r\n      if (name !== id) {\r\n        newManagedComponents[name] = this._managed[name];\r\n      }\r\n    }\r\n\r\n    this._data.components = newBehaviorPacks;\r\n    this._managed = newManagedComponents;\r\n  }\r\n\r\n  _ensureBehaviorPackDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        description: {\r\n          identifier: \"unknown\",\r\n        },\r\n        components: {},\r\n        events: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  async addCustomComponent(itemTypeItem: ProjectItem, componentName: string) {\r\n    let componentNameShort = componentName;\r\n\r\n    const idx = componentName.indexOf(\":\");\r\n    if (idx >= 0) {\r\n      componentNameShort = componentName.substring(idx + 1);\r\n    }\r\n\r\n    this.ensureComponent(componentName, {});\r\n\r\n    const fileNameSugg = Utilities.getHumanifiedObjectNameNoSpaces(componentNameShort);\r\n\r\n    this.setFormatVersion(\"1.21.100\");\r\n\r\n    await ProjectUtilities.ensureTypeScriptFileWith(\r\n      itemTypeItem.project,\r\n      componentName,\r\n      \"new-templates\",\r\n      \"itemCustomComponent\",\r\n      fileNameSugg,\r\n      {\r\n        \"example:newComponentId\": componentName,\r\n        ExampleNewComponent: fileNameSugg,\r\n        initExampleNew: \"init\" + fileNameSugg,\r\n      }\r\n    );\r\n\r\n    await ProjectUtilities.ensureContentInDefaultScriptFile(\r\n      itemTypeItem.project,\r\n      \"import { init\" + fileNameSugg,\r\n      \"import { init\" + fileNameSugg + ' } from \"./' + fileNameSugg + '\"\\n',\r\n      false\r\n    );\r\n\r\n    await ProjectUtilities.ensureContentInDefaultScriptFile(\r\n      itemTypeItem.project,\r\n      \"init\" + fileNameSugg + \"()\",\r\n      \"init\" + fileNameSugg + \"();\\n\",\r\n      true\r\n    );\r\n\r\n    this.persist();\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<ItemTypeDefinition, ItemTypeDefinition>,\r\n    preserveComments?: boolean\r\n  ) {\r\n    let itt: ItemTypeDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      itt = new ItemTypeDefinition();\r\n\r\n      itt.behaviorPackFile = file;\r\n\r\n      file.manager = itt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ItemTypeDefinition) {\r\n      itt = file.manager as ItemTypeDefinition;\r\n\r\n      if (!itt.isLoaded || (preserveComments && !itt._loadedWithComments)) {\r\n        if (loadHandler) {\r\n          itt.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await itt.load(preserveComments);\r\n      }\r\n    }\r\n\r\n    return itt;\r\n  }\r\n\r\n  static isVisualComponent(value: string) {\r\n    if (\r\n      value === \"minecraft:icon\" ||\r\n      value === \"minecraft:display_name\" ||\r\n      value === \"minecraft:glint\" ||\r\n      value === \"minecraft:hover_text_color\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(!this._isLoaded || this._wrapper !== null, \"ITDP\");\r\n\r\n    if (!this._wrapper) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._wrapper);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._wrapper = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (this._wrapper) {\r\n      const item = (this._wrapper as any)[\"minecraft:item\"];\r\n\r\n      if (item && item.description) {\r\n        this.id = item.description.identifier;\r\n      }\r\n\r\n      this._data = item;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\n\r\nexport enum StrictPlatformInfoGeneratorTest {\r\n  entityTypeUsesAMinecraftIdentifier = 100,\r\n  entityTypeUsesAMinecraftRuntimeIdentifier = 101,\r\n  itemTypeUsesAMinecraftIdentifier = 104,\r\n}\r\n\r\n/**\r\n * Validates strict platform requirements for identifiers and runtime identifiers.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/strict.form.json} for topic definitions\r\n */\r\nexport default class StrictPlatformInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"STRICT\";\r\n  title = \"Strict Platform\";\r\n  canAlwaysProcess = true;\r\n\r\n  identifierOverridesAreErrors = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    if (project.isVanillaEditSession) {\r\n      return infoItems;\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.entityTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpEntityType = await EntityTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpEntityType) {\r\n            await bpEntityType.load();\r\n\r\n            if (bpEntityType && bpEntityType._data && bpEntityType._data.description) {\r\n              const desc = bpEntityType._data.description;\r\n\r\n              if (desc.identifier !== undefined && desc.identifier.toLowerCase().startsWith(\"minecraft:\")) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    this.identifierOverridesAreErrors ? InfoItemType.error : InfoItemType.warning,\r\n                    this.id,\r\n                    StrictPlatformInfoGeneratorTest.entityTypeUsesAMinecraftIdentifier,\r\n                    `Uses a minecraft: identifier override`,\r\n                    pi,\r\n                    desc.identifier\r\n                  )\r\n                );\r\n              }\r\n\r\n              if (\r\n                desc.runtime_identifier !== undefined &&\r\n                desc.runtime_identifier.toLowerCase !== undefined &&\r\n                desc.runtime_identifier.toLowerCase().startsWith(\"minecraft:\")\r\n              ) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    this.identifierOverridesAreErrors ? InfoItemType.error : InfoItemType.warning,\r\n                    this.id,\r\n                    StrictPlatformInfoGeneratorTest.entityTypeUsesAMinecraftRuntimeIdentifier,\r\n                    `Uses a runtime_identifier override`,\r\n                    pi,\r\n                    desc.runtime_identifier\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.itemTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpItemType = await ItemTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpItemType) {\r\n            await bpItemType.load();\r\n\r\n            if (bpItemType && bpItemType.data && bpItemType.data.description) {\r\n              const desc = bpItemType.data.description;\r\n\r\n              if (desc.identifier !== undefined && desc.identifier.toLowerCase().startsWith(\"minecraft:\")) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    this.identifierOverridesAreErrors ? InfoItemType.error : InfoItemType.warning,\r\n                    this.id,\r\n                    StrictPlatformInfoGeneratorTest.itemTypeUsesAMinecraftIdentifier,\r\n                    `Uses a minecraft: identifier override`,\r\n                    pi,\r\n                    desc.identifier\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IMaterialWrapper } from \"./IMaterial\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class Material {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IMaterialWrapper;\r\n\r\n  private _onLoaded = new EventDispatcher<Material, Material>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get version(): string | undefined {\r\n    if (!this.definition || !this.definition.materials) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.materials[\"version\"] as string;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<Material, Material>) {\r\n    let rc: Material | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rc = new Material();\r\n\r\n      rc.file = file;\r\n\r\n      file.manager = rc;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof Material) {\r\n      rc = file.manager as Material;\r\n\r\n      if (!rc.isLoaded) {\r\n        if (loadHandler) {\r\n          rc.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rc.load();\r\n      }\r\n    }\r\n\r\n    return rc;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      Log.unexpectedUndefined(\"MATP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\n\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport CooperativeAddOnRequirementsGenerator from \"./CooperativeAddOnRequirementsGenerator\";\r\nimport RenderControllerSetDefinition from \"../minecraft/RenderControllerSetDefinition\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport ModelGeometryDefinition from \"../minecraft/ModelGeometryDefinition\";\r\nimport Material from \"../minecraft/Material\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport AnimationResourceDefinition from \"../minecraft/AnimationResourceDefinition\";\r\nimport AnimationBehaviorDefinition from \"../minecraft/AnimationBehaviorDefinition\";\r\nimport AnimationControllerBehaviorDefinition from \"../minecraft/AnimationControllerBehaviorDefinition\";\r\nimport AnimationControllerResourceDefinition from \"../minecraft/AnimationControllerResourceDefinition\";\r\nimport MinecraftDefinitions from \"../minecraft/MinecraftDefinitions\";\r\n\r\n/**\r\n * Validates cooperative add-on item requirements for naming conventions and identifiers.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/caddonireq.form.json} for topic definitions\r\n */\r\n// rule name/check. For validation errors, name should be a terse description of \"your problem\"\r\nexport enum CooperativeAddOnItemRequirementsGeneratorTest {\r\n  behaviorAnimationControllerIdNotInExpectedForm = 100,\r\n  behaviorAnimationControllerNameNotInExpectedForm = 101,\r\n  behaviorAnimationIdNotInExpectedForm = 110,\r\n  behaviorAnimationNameNotInExpectedForm = 111,\r\n  jsonIdentifierNotInExpectedForm = 112,\r\n  resourceAnimationControllerIdNotInExpectedForm = 120,\r\n  resourceAnimationControllerNameNotInExpectedForm = 121,\r\n  resourceAnimationIdNotInExpectedForm = 130,\r\n  resourceAnimationNameNotInExpectedForm = 131,\r\n  renderControllerIdNotInExpectedForm = 140,\r\n  renderControllerNameNotInExpectedForm = 141,\r\n  geometryIdNotInExpectedForm = 150,\r\n  geometryNameNotInExpectedForm = 151,\r\n  materialsIdentifierNotInExpectedForm = 160,\r\n  materialsFirstSegmentNotInExpectedForm = 161,\r\n  resourcePackDoesNotHavePackScopeWorld = 170,\r\n  noDimensionJson = 191,\r\n}\r\n\r\nexport default class CooperativeAddOnItemRequirementsGenerator implements IProjectInfoItemGenerator {\r\n  id = \"CADDONIREQ\";\r\n  title = \"Cooperative Add-On Item Requirements Generator\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (projectItem.itemType === ProjectItemType.dimensionJson) {\r\n      // CADDONIREQ191\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnItemRequirementsGeneratorTest.noDimensionJson,\r\n          `Dimension definition resources are not permitted in an add-on targeted behavior pack`,\r\n          projectItem\r\n        )\r\n      );\r\n    } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const rpManifest = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (rpManifest) {\r\n          await rpManifest.load();\r\n\r\n          if (!rpManifest.packScope) {\r\n            // CADDONIREQ170\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CooperativeAddOnItemRequirementsGeneratorTest.resourcePackDoesNotHavePackScopeWorld,\r\n                `Resource pack manifest does not specify that header/pack_scope that should be 'world'`,\r\n                projectItem\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationControllerBehaviorJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const bacManifest = await AnimationControllerBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (bacManifest && bacManifest.data && bacManifest.data.animation_controllers) {\r\n          for (let bacName in bacManifest.data.animation_controllers) {\r\n            let bacNameBreak = bacName.split(\".\");\r\n\r\n            if (bacNameBreak.length < 3 || bacNameBreak[0] !== \"controller\" || bacNameBreak[1] !== \"animation\") {\r\n              // CADDONIREQ100\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.behaviorAnimationControllerIdNotInExpectedForm,\r\n                  `Behavior pack animation controller identifier is not in the expected form of controller.animation.xyz`,\r\n                  projectItem,\r\n                  bacName\r\n                )\r\n              );\r\n            } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(bacNameBreak[2])) {\r\n              // CADDONIREQ101\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.behaviorAnimationControllerNameNotInExpectedForm,\r\n                  `Behavior pack animation controller name section is not in the expected form of controller.animation.creatorshortname_projectshortname`,\r\n                  projectItem,\r\n                  bacName\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationBehaviorJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const baManifest = await AnimationBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (baManifest && baManifest.data && baManifest.data.animations) {\r\n          for (let aName in baManifest.data.animations) {\r\n            let baNameBreak = aName.split(\".\");\r\n\r\n            if (baNameBreak.length < 2 || baNameBreak[0] !== \"animation\") {\r\n              // CADDONIREQ110\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.behaviorAnimationIdNotInExpectedForm,\r\n                  `Behavior animation identifier is not in the expected form of animation.xyz.animation_name`,\r\n                  projectItem,\r\n                  aName\r\n                )\r\n              );\r\n            } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(baNameBreak[1])) {\r\n              // CADDONIREQ111\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.behaviorAnimationNameNotInExpectedForm,\r\n                  `Behavior pack animation name section is not in the expected form of animation.creatorshortname_projectshortname.animation_name`,\r\n                  projectItem,\r\n                  aName\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationControllerResourceJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n      if (projectItem.primaryFile) {\r\n        const racManifest = await AnimationControllerResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (racManifest && racManifest.data && racManifest.data.animation_controllers) {\r\n          for (let racName in racManifest.data.animation_controllers) {\r\n            let racNameBreak = racName.split(\".\");\r\n\r\n            if (racNameBreak.length < 3 || racNameBreak[0] !== \"controller\" || racNameBreak[1] !== \"animation\") {\r\n              // CADDONIREQ120\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.resourceAnimationControllerIdNotInExpectedForm,\r\n                  `Resource pack animation controller identifier is not in the expected form of controller.animation.xyz`,\r\n                  projectItem,\r\n                  racName\r\n                )\r\n              );\r\n            } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(racNameBreak[2])) {\r\n              // CADDONIREQ121\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.resourceAnimationControllerNameNotInExpectedForm,\r\n                  `Resource pack animation controller name section is not in the expected form of controller.animation.creatorshortname_projectshortname`,\r\n                  projectItem,\r\n                  racName\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationResourceJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n      if (projectItem.primaryFile) {\r\n        const raManifest = await AnimationResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (raManifest && raManifest.animations) {\r\n          for (let aName in raManifest.animations) {\r\n            let raNameBreak = aName.split(\".\");\r\n\r\n            if (raNameBreak.length < 2 || raNameBreak[0] !== \"animation\") {\r\n              // CADDONIREQ130\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.resourceAnimationIdNotInExpectedForm,\r\n                  `Resource animation identifier is not in the expected form of animation.xyz.animation_name`,\r\n                  projectItem,\r\n                  aName\r\n                )\r\n              );\r\n            } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(raNameBreak[1])) {\r\n              // CADDONIREQ131\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.resourceAnimationNameNotInExpectedForm,\r\n                  `Resource animation name section is not in the expected form of animation.creatorshortname_projectshortname.animation_name`,\r\n                  projectItem,\r\n                  aName\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.renderControllerJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n      if (projectItem.primaryFile) {\r\n        const racManifest = await RenderControllerSetDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (racManifest && racManifest.data && racManifest.data.render_controllers) {\r\n          for (let rrcName in racManifest.data.render_controllers) {\r\n            let racNameBreak = rrcName.split(\".\");\r\n\r\n            if (racNameBreak.length < 3 || racNameBreak[0] !== \"controller\" || racNameBreak[1] !== \"render\") {\r\n              // CADDONIREQ140\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.renderControllerIdNotInExpectedForm,\r\n                  `Resource pack render controller identifier is not in the expected form of controller.render.creatorshortname_projectshortname.other`,\r\n                  projectItem,\r\n                  rrcName\r\n                )\r\n              );\r\n            } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(racNameBreak[2])) {\r\n              // CADDONIREQ141\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.renderControllerNameNotInExpectedForm,\r\n                  `Resource pack render controller name section is not in the expected form of controller.render.creatorshortname_projectshortname`,\r\n                  projectItem,\r\n                  rrcName\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.modelGeometryJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n      if (projectItem.primaryFile) {\r\n        const modGeo = await ModelGeometryDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (modGeo) {\r\n          for (const modId of modGeo.identifiers) {\r\n            if (modGeo && modId) {\r\n              let modGeoBreaks = modId.split(\".\");\r\n\r\n              if (modGeoBreaks.length < 2 || modGeoBreaks[0] !== \"geometry\") {\r\n                // CADDONIREQ150\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    CooperativeAddOnItemRequirementsGeneratorTest.geometryIdNotInExpectedForm,\r\n                    `Geometry is not in the expected form of geometry.creatorshortname_projectshortname.other`,\r\n                    projectItem,\r\n                    modId\r\n                  )\r\n                );\r\n              } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(modGeoBreaks[1])) {\r\n                // CADDONIREQ151\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    CooperativeAddOnItemRequirementsGeneratorTest.geometryNameNotInExpectedForm,\r\n                    `Geometry identifier section is not in the expected form of geometry.creatorshortname_projectshortname`,\r\n                    projectItem,\r\n                    modId\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (\r\n      projectItem.itemType === ProjectItemType.recipeBehavior ||\r\n      projectItem.itemType === ProjectItemType.entityTypeBehavior ||\r\n      projectItem.itemType === ProjectItemType.blockTypeBehavior ||\r\n      projectItem.itemType === ProjectItemType.itemTypeBehavior\r\n    ) {\r\n      await projectItem.loadFileContent();\r\n\r\n      if (projectItem.primaryFile) {\r\n        const projectItemDef = await MinecraftDefinitions.get(projectItem);\r\n\r\n        if (projectItemDef && projectItemDef.id) {\r\n          if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(projectItemDef.id)) {\r\n            // CADDONIREQ112\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CooperativeAddOnItemRequirementsGeneratorTest.jsonIdentifierNotInExpectedForm,\r\n                `JSON namespaced identifier is not in the expected form of creatorshortname_projectshortname:myitem`,\r\n                projectItem,\r\n                projectItemDef.id\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.material) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const mat = await Material.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (mat && mat.definition && mat.definition.materials) {\r\n          for (const modId in mat.definition.materials) {\r\n            let modIdBreaks = modId.split(\":\");\r\n            // CADDONIREQ160\r\n            if (modIdBreaks.length < 1) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.materialsIdentifierNotInExpectedForm,\r\n                  `Materials section identifier is not in the expected form of creatorshortname_projectshortname:other`,\r\n                  projectItem,\r\n                  modId\r\n                )\r\n              );\r\n            } else if (\r\n              modIdBreaks[0] !== \"version\" &&\r\n              (!CooperativeAddOnRequirementsGenerator.isNamespacedString(modIdBreaks[0]) ||\r\n                CooperativeAddOnRequirementsGenerator.isCommonMaterialName(modIdBreaks[0]))\r\n            ) {\r\n              // CADDONIREQ161\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.materialsFirstSegmentNotInExpectedForm,\r\n                  `First segment of a Materials section identifier is not in the expected form of creatorshortname_projectshortname_materialname or creatorshortname_projectshortname_materialname:baseitem`,\r\n                  projectItem,\r\n                  modId\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport IProjectFileInfoGenerator from \"./IProjectFileInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IFile from \"../storage/IFile\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport { PackContainerFolderHints, PackFolderHints } from \"../storage/StorageUtilities\";\r\n\r\nexport enum PathLengthFileGeneratorTest {\r\n  filePathExceeds8DirectorySegments = 102,\r\n  filePathExceedsCharacterLength = 103,\r\n  filePathContainsNonLowercaseLetters = 104,\r\n}\r\n\r\n/**\r\n * Validates file path lengths and naming conventions.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/pathlength.form.json} for topic definitions\r\n */\r\nexport default class PathLengthFileGenerator implements IProjectFileInfoGenerator {\r\n  id = \"PATHLENGTH\";\r\n  title = \"Path Length\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, file: IFile, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    let path = file.storageRelativePath;\r\n    let pathSub = path;\r\n\r\n    pathSub = pathSub.replace(\"/Content/\", \"/content/\");\r\n    pathSub = pathSub.replace(\"/Marketing Art/\", \"/marketing art/\");\r\n    pathSub = pathSub.replace(\"/Store Art/\", \"/store art/\");\r\n\r\n    // we don't want to check the marketing art or store art folders, as they are not part of the content\r\n    if (pathSub.indexOf(\"/marketing art/\") >= 0 || pathSub.indexOf(\"/store art/\") >= 0) {\r\n      return items;\r\n    }\r\n\r\n    if (pathSub.startsWith(\"/content/\")) {\r\n      pathSub = pathSub.substring(9);\r\n    }\r\n\r\n    let packsIndex = pathSub.indexOf(\"_packs/\");\r\n\r\n    if (packsIndex > 0) {\r\n      packsIndex = pathSub.indexOf(\"/\", packsIndex + 7);\r\n\r\n      if (packsIndex >= 0) {\r\n        pathSub = pathSub.substring(packsIndex);\r\n      }\r\n    } else {\r\n      // else, try to find the first subfolder after the second slash\r\n      packsIndex = pathSub.indexOf(\"/\", 2);\r\n      if (packsIndex >= 0) {\r\n        pathSub = pathSub.substring(packsIndex + 1);\r\n      }\r\n    }\r\n\r\n    if (\r\n      pathSub.toLowerCase() !== pathSub &&\r\n      !pathSub.startsWith(\"/marketing art/\") &&\r\n      !pathSub.startsWith(\"/store art/\") &&\r\n      !pathSub.endsWith(\".lang\") &&\r\n      pathSub.indexOf(\"/texts/\") < 0 &&\r\n      pathSub.indexOf(\"/scripts/\") < 0\r\n    ) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.recommendation,\r\n          this.id,\r\n          PathLengthFileGeneratorTest.filePathContainsNonLowercaseLetters,\r\n          `File path contains non-lowercase letters`,\r\n          project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n          pathSub\r\n        )\r\n      );\r\n    }\r\n\r\n    for (const hint of PackContainerFolderHints) {\r\n      const hintIndex = path.toLowerCase().indexOf(\"/\" + hint + \"/\");\r\n\r\n      if (hintIndex >= 0) {\r\n        path = path.substring(hintIndex + hint.length + 2);\r\n      }\r\n    }\r\n\r\n    for (const hint of PackFolderHints) {\r\n      if (path.toLowerCase().startsWith(\"/\" + hint + \"/\")) {\r\n        path = path.substring(hint.length + 2);\r\n      }\r\n      if (path.toLowerCase().startsWith(hint + \"/\")) {\r\n        path = path.substring(hint.length + 1);\r\n      }\r\n    }\r\n\r\n    const fSlashSegments = path.split(\"/\");\r\n    const bSlashSegments = path.split(\"\\\\\");\r\n\r\n    if (fSlashSegments.length > 9 || bSlashSegments.length > 9) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          PathLengthFileGeneratorTest.filePathExceeds8DirectorySegments,\r\n          `File path contains 8 or more directory segments, and may not run on all devices`,\r\n          project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n          path\r\n        )\r\n      );\r\n    }\r\n\r\n    if (path.length > 100) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          PathLengthFileGeneratorTest.filePathExceedsCharacterLength,\r\n          `File path contains more than 100 characters, and may not run on all devices`,\r\n          project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n          path\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport { MaxItemTypes } from \"../app/IProjectItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nconst TopicTestIdBase = 200;\r\n\r\nexport enum ItemCountsInfoGeneratorTest {\r\n  behaviorPackManifest = 102,\r\n  resourcePackManifest = 103,\r\n}\r\n\r\n/**\r\n * Aggregates counts of various content types in a project.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/items.form.json} for topic definitions\r\n */\r\nexport default class ItemCountsInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"ITEMS\";\r\n  title = \"Minimum Definition of a Pack\";\r\n\r\n  getTopicData(topicId: number) {\r\n    if (topicId > TopicTestIdBase && topicId < TopicTestIdBase + MaxItemTypes) {\r\n      return {\r\n        title: ProjectItemUtilities.getDescriptionForType(topicId - TopicTestIdBase) + \" count\",\r\n      };\r\n    }\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.behaviorPackManifestCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.behaviorPackManifestJson\r\n    );\r\n    info.unknownJsonCount = infoSet.getFirstNumberDataValue(this.id, TopicTestIdBase + ProjectItemType.unknownJson);\r\n    info.entityTypeManifestCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.entityTypeBehavior\r\n    );\r\n    info.itemTypeManifestCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.itemTypeBehavior\r\n    );\r\n    info.blockTypeManifestCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.blockTypeBehavior\r\n    );\r\n    info.resourcePackManifestCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.resourcePackManifestJson\r\n    );\r\n\r\n    info.worldCount =\r\n      infoSet.getFirstNumberDataValue(this.id, TopicTestIdBase + ProjectItemType.MCWorld) +\r\n      infoSet.getFirstNumberDataValue(this.id, TopicTestIdBase + ProjectItemType.worldFolder);\r\n\r\n    info.entityTypeResourceCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.entityTypeResource\r\n    );\r\n\r\n    info.behaviorPackAnimationCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.animationBehaviorJson\r\n    );\r\n\r\n    info.behaviorPackAnimationControllerCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.animationControllerBehaviorJson\r\n    );\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const typeCounts: number[] = [];\r\n\r\n    for (let i = 0; i < MaxItemTypes; i++) {\r\n      typeCounts[i] = 0;\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      typeCounts[pi.itemType]++;\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            ItemCountsInfoGeneratorTest.behaviorPackManifest,\r\n            \"Behavior pack manifest found\",\r\n            pi\r\n          )\r\n        );\r\n      } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            ItemCountsInfoGeneratorTest.resourcePackManifest,\r\n            \"Resource pack manifest found\",\r\n            pi\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < MaxItemTypes; i++) {\r\n      if (typeCounts[i] > 0) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            TopicTestIdBase + i,\r\n            ProjectItemUtilities.getDescriptionForType(i) + \" item count\",\r\n            undefined,\r\n            typeCounts[i]\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IContextIndexData from \"../core/IContentIndexData\";\r\nimport IInfoItemData from \"./IInfoItemData\";\r\nimport IProjectInfo from \"./IProjectInfo\";\r\nimport IProjectMetaState from \"./IProjectMetaState\";\r\n\r\nexport enum ProjectInfoSuite {\r\n  defaultInDevelopment = 0,\r\n  currentPlatformVersions = 1,\r\n  cooperativeAddOn = 2,\r\n  sharing = 3,\r\n  sharingStrict = 4,\r\n}\r\n\r\nexport default interface IProjectInfoData {\r\n  info?: IProjectInfo;\r\n  items?: IInfoItemData[];\r\n  sourcePath?: string;\r\n  sourceHash?: string;\r\n  sourceName?: string;\r\n  suite?: number;\r\n  subsetReports?: IProjectMetaState[];\r\n  index?: IContextIndexData;\r\n  generatorName?: string;\r\n  generatorVersion?: string;\r\n}\r\n", "export const constants = {\r\n  version: \"0.17.0\",\r\n  name: \"Minecraft Creator Tools\",\r\n  disclaimer: \"Alpha software. License at https://github.com/mojang/minecraft-creator-tools.\",\r\n  copyright: \"Copyright 2026 Mojang AB. All rights reserved.\",\r\n  homeUrl: \"https://mctools.dev\",\r\n  repositoryUrl: \"https://github.com/mojang/minecraft-creator-tools\",\r\n};\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport enum StatusType {\r\n  message = 0,\r\n  operationStarted = 1,\r\n  operationUpdate = 2,\r\n  operationEndedComplete = 3,\r\n  operationEndedErrors = 4,\r\n}\r\n\r\nexport enum StatusTopic {\r\n  general = 0,\r\n  validation = 1,\r\n  projectLoad = 2,\r\n  worldLoad = 3,\r\n  scriptBuild = 4,\r\n  processing = 5,\r\n  minecraft = 6,\r\n}\r\n\r\nexport default interface IStatus {\r\n  type: StatusType;\r\n  topic?: StatusTopic;\r\n  time: Date;\r\n  operationId?: number;\r\n  message: string;\r\n  context?: string;\r\n  operation?: string;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport { constants } from \"../core/Constants\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\n\r\nexport interface ISummaryInfoGeneratorResults {\r\n  size: number;\r\n  fileCounts: number;\r\n  folderCounts: number;\r\n  contentSize: number;\r\n  contentFileCounts: number;\r\n  contentFolderCounts: number;\r\n}\r\n\r\nexport enum SummaryInfoGeneratorTest {\r\n  resourceManifest = 101,\r\n  behaviorManifest = 102,\r\n}\r\n\r\n/**\r\n * Aggregates summary information about the project including manifests and content types.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/summary.form.json} for topic definitions\r\n */\r\nexport default class SummaryInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"SUMMARY\";\r\n  title = \"Summary Information\";\r\n  canAlwaysProcess = true;\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.mctoolsVersion = MinecraftUtilities.getVersionNumber(constants.version);\r\n\r\n    let typesInUse: string[] = [];\r\n\r\n    const typesInUseSet = new Set<string>();\r\n\r\n    const resourceFeatureMeasures = infoSet.getFeaturesWithInstances(\r\n      this.id,\r\n      SummaryInfoGeneratorTest.resourceManifest\r\n    );\r\n\r\n    for (const resourceFeatureMeasure of resourceFeatureMeasures) {\r\n      if (resourceFeatureMeasure === \"pbr\") {\r\n        info.capabilities.push(\"vvcompat\");\r\n      }\r\n\r\n      if (!info.capabilities.includes(resourceFeatureMeasure)) {\r\n        info.capabilities.push(resourceFeatureMeasure);\r\n      }\r\n    }\r\n\r\n    const behaviorFeatureMeasures = infoSet.getFeaturesWithInstances(\r\n      this.id,\r\n      SummaryInfoGeneratorTest.behaviorManifest\r\n    );\r\n\r\n    for (const behaviorFeatureMeasure of behaviorFeatureMeasures) {\r\n      if (!info.capabilities.includes(behaviorFeatureMeasure)) {\r\n        info.capabilities.push(behaviorFeatureMeasure);\r\n      }\r\n    }\r\n\r\n    if (infoSet.project) {\r\n      const itemsCopy = infoSet.project.getItemsCopy();\r\n      for (const item of itemsCopy) {\r\n        const typeDesc = ProjectItemUtilities.getDescriptionForType(item.itemType);\r\n\r\n        if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          if (!info.capabilities.includes(\"behaviorPack\")) {\r\n            info.capabilities.push(\"behaviorPack\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          if (!info.capabilities.includes(\"resourcePack\")) {\r\n            info.capabilities.push(\"resourcePack\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.skinPackManifestJson) {\r\n          if (!info.capabilities.includes(\"skinPack\")) {\r\n            info.capabilities.push(\"skinPack\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.js) {\r\n          if (!info.capabilities.includes(\"scripting\")) {\r\n            info.capabilities.push(\"scripting\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.tickJson) {\r\n          if (!info.capabilities.includes(\"tickJson\")) {\r\n            info.capabilities.push(\"tickJson\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.MCFunction) {\r\n          if (!info.capabilities.includes(\"functions\")) {\r\n            info.capabilities.push(\"functions\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.animationBehaviorJson) {\r\n          if (!info.capabilities.includes(\"behaviorAnimations\")) {\r\n            info.capabilities.push(\"behaviorAnimations\");\r\n          }\r\n        } else if (ProjectItemUtilities.isVibrantVisualsRelated(item)) {\r\n          if (!info.capabilities.includes(\"vvfiles\")) {\r\n            info.capabilities.push(\"vvfiles\");\r\n          }\r\n        }\r\n\r\n        if (!typesInUseSet.has(typeDesc)) {\r\n          typesInUse.push(typeDesc);\r\n          typesInUseSet.add(typeDesc);\r\n        }\r\n      }\r\n    }\r\n\r\n    typesInUse.sort();\r\n\r\n    info.itemTypes = typesInUse;\r\n  }\r\n\r\n  // this should run after every other summarize pass has happened.\r\n  summarizePhase2(info: any, infoSet: ProjectInfoSet) {\r\n    let hasCameraJson = false;\r\n\r\n    if (infoSet.project) {\r\n      for (const item of infoSet.project.items) {\r\n        if (item.itemType === ProjectItemType.cameraBehaviorJson) {\r\n          hasCameraJson = true;\r\n          break; // Early exit once found\r\n        }\r\n      }\r\n    }\r\n\r\n    const commands = info.commands;\r\n    const apisUsed = info.apisUsed;\r\n    const capabilitiesSet = new Set(info.capabilities);\r\n\r\n    if (hasCameraJson || commands.includes(\"camera\") || apisUsed.includes(\"setCamera\")) {\r\n      if (!capabilitiesSet.has(\"camera\")) {\r\n        info.capabilities.push(\"camera\");\r\n      }\r\n    }\r\n\r\n    info.capabilities.sort();\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const itemsCopy = project.getItemsCopy();\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const resourceManifestPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      SummaryInfoGeneratorTest.resourceManifest,\r\n      \"Resource Manifests\"\r\n    );\r\n\r\n    items.push(resourceManifestPi);\r\n\r\n    const behaviorManifestPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      SummaryInfoGeneratorTest.behaviorManifest,\r\n      \"Behavior Manifests\"\r\n    );\r\n\r\n    items.push(behaviorManifestPi);\r\n\r\n    for (const item of itemsCopy) {\r\n      if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        const manifestFile = item.primaryFile;\r\n\r\n        if (!manifestFile) {\r\n          continue;\r\n        }\r\n\r\n        const manifest = await BehaviorManifestDefinition.ensureOnFile(manifestFile);\r\n\r\n        if (!manifest) {\r\n          continue;\r\n        }\r\n\r\n        if (manifest.capabilities) {\r\n          for (const capability of manifest.capabilities) {\r\n            behaviorManifestPi.incrementFeature(capability);\r\n          }\r\n        }\r\n      } else if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        const manifestFile = item.primaryFile;\r\n\r\n        if (!manifestFile) {\r\n          continue;\r\n        }\r\n\r\n        const manifest = await ResourceManifestDefinition.ensureOnFile(manifestFile);\r\n\r\n        if (!manifest) {\r\n          continue;\r\n        }\r\n\r\n        if (manifest.capabilities) {\r\n          for (const capability of manifest.capabilities) {\r\n            resourceManifestPi.incrementFeature(capability);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"./Log\";\r\nimport * as md5 from \"js-md5\";\r\nimport Utilities from \"./Utilities\";\r\n\r\nexport interface IHashCatalogEntry {\r\n  fileName: string;\r\n  propertyName: string;\r\n  filePath?: string;\r\n}\r\n\r\nexport type HashCatalog = { [hash: string]: IHashCatalogEntry };\r\n\r\nexport default class HashUtilities {\r\n  /**\r\n   * Generates hash catalog entries for a file (both complete file hash and property hashes for JSON files)\r\n   * @param file The file to generate hashes for\r\n   * @param filePath The file path to store in the catalog entry\r\n   * @param hashCatalog The hash catalog to populate\r\n   * @param onError Optional error callback for handling errors\r\n   */\r\n  static async addHashesForFile(hashCatalog: HashCatalog, file: IFile, filePath: string): Promise<void> {\r\n    try {\r\n      // Complete file hash with filename included\r\n      await file.loadContent();\r\n      if (file.content !== null && file.content !== undefined) {\r\n        const fileHash = await file.getHash();\r\n\r\n        if (fileHash) {\r\n          hashCatalog[fileHash] = {\r\n            fileName: file.name,\r\n            propertyName: \"\",\r\n            filePath: filePath,\r\n          };\r\n        }\r\n      }\r\n\r\n      // Property hashes for JSON files\r\n      if (file.name.endsWith(\".json\")) {\r\n        await file.loadContent();\r\n        if (file.isString && typeof file.content === \"string\") {\r\n          try {\r\n            // Check for BOM and handle it properly\r\n            const bytes = StorageUtilities.getContentsAsBinary(file);\r\n            const hasBOM = StorageUtilities.hasUTF8ByteOrderMark(bytes);\r\n\r\n            let cleanContent = file.content;\r\n            if (hasBOM && bytes) {\r\n              // Convert back to string without BOM\r\n              const withoutBOM = bytes.slice(3); // Remove the 3-byte UTF-8 BOM\r\n              cleanContent = new TextDecoder(\"utf-8\").decode(withoutBOM);\r\n            }\r\n\r\n            // Strip comments from JSON content and parse\r\n            const fixedContent = Utilities.fixJsonContent(cleanContent);\r\n            const jsonContent = JSON.parse(fixedContent);\r\n\r\n            // Process each top-level property\r\n            for (const key in jsonContent) {\r\n              const value = jsonContent[key];\r\n\r\n              if (value !== null && !key.includes(\":\") && typeof value === \"object\") {\r\n                const stringifiedObj = JSON.stringify(value);\r\n                const stringifiedObjAndKey = stringifiedObj + key;\r\n\r\n                const propertyHash = md5.md5(stringifiedObjAndKey).toLowerCase();\r\n\r\n                hashCatalog[propertyHash] = {\r\n                  fileName: file.name,\r\n                  propertyName: key,\r\n                  filePath: filePath,\r\n                };\r\n              }\r\n            }\r\n          } catch (error) {\r\n            Log.verbose(`Skipping property hash generation for ${file.fullPath}: ${error}`);\r\n          }\r\n        }\r\n      }\r\n    } catch (error) {\r\n      Log.verbose(`Skipping property hash generation for ${file.fullPath}: ${error}`);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Standardized telemetry event names for Minecraft Creator Tools.\r\n */\r\nexport const TelemetryEvents = {\r\n  // Application lifecycle\r\n  APP_STARTED: \"AppStarted\",\r\n  APP_CLOSED: \"AppClosed\",\r\n\r\n  // Project operations\r\n  PROJECT_CREATED: \"ProjectCreated\",\r\n  PROJECT_OPENED: \"ProjectOpened\",\r\n  PROJECT_CLOSED: \"ProjectClosed\",\r\n  PROJECT_SAVED: \"ProjectSaved\",\r\n  PROJECT_EXPORTED: \"ProjectExported\",\r\n  PROJECT_IMPORTED: \"ProjectImported\",\r\n  PROJECT_DELETED: \"ProjectDeleted\",\r\n\r\n  // File operations\r\n  FILE_CREATED: \"FileCreated\",\r\n  FILE_OPENED: \"FileOpened\",\r\n  FILE_SAVED: \"FileSaved\",\r\n  FILE_DELETED: \"FileDeleted\",\r\n  FILE_RENAMED: \"FileRenamed\",\r\n\r\n  // Editor actions\r\n  EDITOR_OPENED: \"EditorOpened\",\r\n  EDITOR_CLOSED: \"EditorClosed\",\r\n  CODE_EDITED: \"CodeEdited\",\r\n  JSON_EDITED: \"JsonEdited\",\r\n\r\n  // Validation\r\n  VALIDATION_STARTED: \"ValidationStarted\",\r\n  VALIDATION_COMPLETED: \"ValidationCompleted\",\r\n  VALIDATION_ERROR: \"ValidationError\",\r\n\r\n  // Build and deployment\r\n  BUILD_STARTED: \"BuildStarted\",\r\n  BUILD_COMPLETED: \"BuildCompleted\",\r\n  BUILD_FAILED: \"BuildFailed\",\r\n  DEPLOYMENT_STARTED: \"DeploymentStarted\",\r\n  DEPLOYMENT_COMPLETED: \"DeploymentCompleted\",\r\n  DEPLOYMENT_FAILED: \"DeploymentFailed\",\r\n\r\n  // Minecraft integration\r\n  MINECRAFT_CONNECTED: \"MinecraftConnected\",\r\n  MINECRAFT_DISCONNECTED: \"MinecraftDisconnected\",\r\n  MINECRAFT_COMMAND_SENT: \"MinecraftCommandSent\",\r\n  MINECRAFT_WORLD_LOADED: \"MinecraftWorldLoaded\",\r\n\r\n  // Gallery and templates\r\n  GALLERY_OPENED: \"GalleryOpened\",\r\n  TEMPLATE_SELECTED: \"TemplateSelected\",\r\n  SAMPLE_DOWNLOADED: \"SampleDownloaded\",\r\n\r\n  // User actions\r\n  BUTTON_CLICKED: \"ButtonClicked\",\r\n  MENU_ITEM_SELECTED: \"MenuItemSelected\",\r\n  SETTING_CHANGED: \"SettingChanged\",\r\n  SEARCH_PERFORMED: \"SearchPerformed\",\r\n  ITEM_CLICKED: \"ItemClicked\",\r\n\r\n  // Project/File Management actions\r\n  SHARE_ADDON_FILE: \"ShareAddOnFile\",\r\n  PROJECT_SETTING_CHANGED: \"ProjectSettingChanged\",\r\n  CREATOR_TOOL_SETTING_CHANGED: \"CreatorToolSettingChanged\",\r\n  VIEW_CHANGED: \"ViewChanged\",\r\n  PROJECT_MAP_CLICKED: \"ProjectMapClicked\",\r\n  SHOW_FILTER_CLICKED: \"ShowFilterClicked\",\r\n  HOME_CLICKED: \"HomeClicked\",\r\n  SAVE_CLICKED: \"SaveClicked\",\r\n  EXPORT_TO_FOLDER: \"ExportToFolder\",\r\n\r\n  // Editor-specific events\r\n  ENTITY_TYPE_EDITOR_VIEW_CHANGE: \"EntityTypeEditorViewChange\",\r\n  ENTITY_TYPE_EDITOR_COMPONENT_CLICKED: \"EntityTypeEditorComponentClicked\",\r\n  ITEM_TYPE_EDITOR_VIEW_CHANGE: \"ItemTypeEditorViewChange\",\r\n  ITEM_TYPE_EDITOR_COMPONENT_CLICKED: \"ItemTypeEditorComponentClicked\",\r\n  ADD_NEW_PROJECT_ITEM: \"AddNewProjectItem\",\r\n  ITEM_ACTION: \"ItemAction\",\r\n\r\n  // Inspector events\r\n  INSPECTOR_OPENED: \"InspectorOpened\",\r\n  INSPECTOR_SUMMARY_OPENED: \"InspectorSummaryOpened\",\r\n  INSPECTOR_ITEMS_OPENED: \"InspectorItemsOpened\",\r\n  INSPECTOR_VIEW_CHANGED: \"InspectorViewChanged\",\r\n  INSPECTOR_SUITE_CHANGED: \"InspectorSuiteChanged\",\r\n\r\n  // Share events\r\n  PROJECT_SHARED: \"ProjectShared\",\r\n\r\n  // Extension (VS Code)\r\n  EXTENSION_ACTIVATED: \"ExtensionActivated\",\r\n  EXTENSION_COMMAND_EXECUTED: \"ExtensionCommandExecuted\",\r\n  CUSTOM_EDITOR_OPENED: \"CustomEditorOpened\",\r\n\r\n  // CLI operations\r\n  CLI_COMMAND_EXECUTED: \"CliCommandExecuted\",\r\n  CLI_ERROR: \"CliError\",\r\n\r\n  // Errors and exceptions\r\n  UNHANDLED_ERROR: \"UnhandledError\",\r\n  API_ERROR: \"ApiError\",\r\n  NETWORK_ERROR: \"NetworkError\",\r\n\r\n  // Performance metrics\r\n  PERFORMANCE_METRIC: \"PerformanceMetric\",\r\n  LOAD_TIME_RECORDED: \"LoadTimeRecorded\",\r\n\r\n  // File upload operations\r\n  FILE_UPLOADED: \"FileUploaded\",\r\n  FILE_DROPPED: \"FileDropped\",\r\n\r\n  // Project list operations\r\n  PROJECT_LIST_VIEWED: \"ProjectListViewed\",\r\n  BACKUP_EXPORTED: \"BackupExported\",\r\n  FOLDER_OPENED: \"FolderOpened\",\r\n\r\n  // Download operations\r\n  FLAT_WORLD_DOWNLOADED: \"FlatWorldDownloaded\",\r\n  EDITOR_PROJECT_DOWNLOADED: \"EditorProjectDownloaded\",\r\n  CUSTOM_WORLD_DOWNLOADED: \"CustomWorldDownloaded\",\r\n\r\n  // Project lifecycle\r\n  PROJECT_LOADED: \"ProjectLoaded\",\r\n} as const;\r\n\r\n/**\r\n * Property keys for consistent telemetry properties\r\n */\r\nexport const TelemetryProperties = {\r\n  // Project properties\r\n  PROJECT_TYPE: \"projectType\",\r\n  PROJECT_ID: \"projectId\",\r\n  HAS_BEHAVIOR_PACK: \"hasBehaviorPack\",\r\n  HAS_RESOURCE_PACK: \"hasResourcePack\",\r\n  HAS_SCRIPTS: \"hasScripts\",\r\n\r\n  // View properties\r\n  VIEW_CHANGE_TYPE: \"viewChangeType\",\r\n  VIEW_MODE: \"viewMode\",\r\n  PREVIOUS_VIEW: \"previousView\",\r\n\r\n  // Item properties\r\n  ITEM_ID: \"itemId\",\r\n  ITEM_TYPE: \"itemType\",\r\n  ITEM_NAME: \"itemName\",\r\n\r\n  // Export and share properties\r\n  EXPORT_TYPE: \"exportType\",\r\n  SHARE_METHOD: \"shareMethod\",\r\n  SHARE_TYPE: \"shareType\",\r\n\r\n  // Filter properties\r\n  FILTER_TYPE: \"filterType\",\r\n  FILTER_TEXT: \"filterText\",\r\n\r\n  // Setting properties\r\n  SETTING_TYPE: \"settingType\",\r\n  SETTING_VALUE: \"settingValue\",\r\n  OLD_VALUE: \"oldValue\",\r\n  NEW_VALUE: \"newValue\",\r\n\r\n  // File properties\r\n  FILE_TYPE: \"fileType\",\r\n  FILE_SIZE: \"fileSize\",\r\n  FILE_EXTENSION: \"fileExtension\",\r\n\r\n  // Action properties\r\n  ACTION_SOURCE: \"actionSource\",\r\n  ACTION_TYPE: \"actionType\",\r\n  SUCCESS: \"success\",\r\n  ERROR_MESSAGE: \"errorMessage\",\r\n  ERROR_CODE: \"errorCode\",\r\n\r\n  // User properties\r\n  IS_AUTHENTICATED: \"isAuthenticated\",\r\n\r\n  // Environment properties\r\n  OS_TYPE: \"osType\",\r\n  BROWSER_TYPE: \"browserType\",\r\n  VSCODE_VERSION: \"vscodeVersion\",\r\n  HOST_TYPE: \"hostType\",\r\n  MCTOOLS_VERSION: \"mctoolsVersion\",\r\n\r\n  // Feature flags\r\n  FEATURE_NAME: \"featureName\",\r\n  FEATURE_ENABLED: \"featureEnabled\",\r\n\r\n  // Timing\r\n  DURATION: \"duration\",\r\n  TIMESTAMP: \"timestamp\",\r\n\r\n  // Template and Gallery properties\r\n  TEMPLATE_ID: \"templateId\",\r\n  TEMPLATE_TITLE: \"templateTitle\",\r\n  SNIPPET_ID: \"snippetId\",\r\n  SNIPPET_TITLE: \"snippetTitle\",\r\n  TRACK: \"track\",\r\n  STORAGE_TYPE: \"storageType\",\r\n\r\n  // Search properties\r\n  SEARCH_QUERY: \"searchQuery\",\r\n  SEARCH_CONTEXT: \"searchContext\",\r\n  QUERY_LENGTH: \"queryLength\",\r\n\r\n  // Link properties\r\n  LINK_TYPE: \"linkType\",\r\n  LINK_URL: \"linkUrl\",\r\n\r\n  // Menu properties\r\n  MENU_ITEM: \"menuItem\",\r\n  LOCATION: \"location\",\r\n\r\n  // Setting properties\r\n  SETTING: \"setting\",\r\n\r\n  // Component properties\r\n  COMPONENT_NAME: \"componentName\",\r\n\r\n  // File upload properties\r\n  FILE_UPLOAD_METHOD: \"fileUploadMethod\",\r\n  FILE_FORMAT: \"fileFormat\",\r\n  UPLOAD_SOURCE: \"uploadSource\",\r\n\r\n  // Folder properties\r\n  FOLDER_DEPTH: \"folderDepth\",\r\n  FOLDER_TYPE: \"folderType\",\r\n\r\n  // Export/Backup properties\r\n  EXPORT_SUCCESS: \"exportSuccess\",\r\n  EXPORT_FORMAT: \"exportFormat\",\r\n\r\n  // Editor properties\r\n  EDITOR_TYPE: \"editorType\",\r\n  MODE: \"mode\",\r\n  COMPONENT_ID: \"componentId\",\r\n  ITEM_ACTION_TYPE: \"itemActionType\",\r\n  TEMPLATE: \"template\",\r\n\r\n  // List properties\r\n  PROJECT_LIST_SIZE: \"projectListSize\",\r\n  TAB_INDEX: \"tabIndex\",\r\n\r\n  // Project date properties\r\n  CREATION_DATE: \"creationDate\",\r\n  LAST_OPENED_DATE: \"lastOpenedDate\",\r\n\r\n  // Project customization properties\r\n  IS_TITLE_CUSTOMIZED: \"isTitleCustomized\",\r\n  IS_CREATOR_CUSTOMIZED: \"isCreatorCustomized\",\r\n  IS_SHORT_NAME_CUSTOMIZED: \"isShortNameCustomized\",\r\n\r\n  // File open method properties\r\n  OPEN_METHOD: \"openMethod\",\r\n\r\n  // World download properties\r\n  ADDITIONAL_PACKS_ADDED: \"additionalPacksAdded\",\r\n  BEHAVIOR_PACKS: \"behaviorPacks\",\r\n  RESOURCE_PACKS: \"resourcePacks\",\r\n  GAME_TYPE: \"gameType\",\r\n  DIFFICULTY: \"difficulty\",\r\n  WORLD_TEMPLATE_USED: \"worldTemplateUsed\",\r\n  MAP_STYLE: \"mapStyle\",\r\n  SEED: \"seed\",\r\n\r\n  // Project and validation properties\r\n  PROJECT_ITEM_COUNT: \"projectItemCount\",\r\n  INTERNAL_PROCESSING_ERROR_COUNT: \"internalProcessingErrorCount\",\r\n  ERROR_TYPES: \"errorTypes\",\r\n  SUITE_TYPE: \"suiteType\",\r\n} as const;\r\n\r\n/**\r\n * Measurement keys for numeric metrics\r\n */\r\nexport const TelemetryMeasurements = {\r\n  // Counts\r\n  FILE_COUNT: \"fileCount\",\r\n  ERROR_COUNT: \"errorCount\",\r\n  WARNING_COUNT: \"warningCount\",\r\n  LINE_COUNT: \"lineCount\",\r\n  ACTIVE_PROJECT_COUNT: \"activeProjectCount\",\r\n\r\n  // Sizes\r\n  FILE_SIZE_BYTES: \"fileSizeBytes\",\r\n  PROJECT_SIZE_BYTES: \"projectSizeBytes\",\r\n\r\n  // Timing (in milliseconds)\r\n  LOAD_TIME_MS: \"loadTimeMs\",\r\n  BUILD_TIME_MS: \"buildTimeMs\",\r\n  VALIDATION_TIME_MS: \"validationTimeMs\",\r\n  DEPLOYMENT_TIME_MS: \"deploymentTimeMs\",\r\n  DURATION: \"duration\",\r\n\r\n  // Performance\r\n  MEMORY_USAGE_MB: \"memoryUsageMb\",\r\n  CPU_USAGE_PERCENT: \"cpuUsagePercent\",\r\n} as const;\r\n\r\nexport const TelemetrySeverity = {\r\n  VERBOSE: 0,\r\n  INFORMATION: 1,\r\n  WARNING: 2,\r\n  ERROR: 3,\r\n  CRITICAL: 4,\r\n} as const;\r\n\r\nexport type TelemetryEventName = (typeof TelemetryEvents)[keyof typeof TelemetryEvents];\r\nexport type TelemetryPropertyKey = (typeof TelemetryProperties)[keyof typeof TelemetryProperties];\r\nexport type TelemetryMeasurementKey = (typeof TelemetryMeasurements)[keyof typeof TelemetryMeasurements];\r\nexport type TelemetrySeverityLevel = (typeof TelemetrySeverity)[keyof typeof TelemetrySeverity];\r\n\r\n/**\r\n * Type-safe interfaces for telemetry event properties\r\n */\r\n\r\nexport interface WorldDownloadProperties {\r\n  [TelemetryProperties.ADDITIONAL_PACKS_ADDED]?: number;\r\n  [TelemetryProperties.BEHAVIOR_PACKS]?: string;\r\n  [TelemetryProperties.RESOURCE_PACKS]?: string;\r\n  [TelemetryProperties.GAME_TYPE]?: number;\r\n  [TelemetryProperties.DIFFICULTY]?: number;\r\n  [TelemetryProperties.WORLD_TEMPLATE_USED]?: boolean;\r\n  [TelemetryProperties.MAP_STYLE]?: string | number;\r\n  [TelemetryProperties.SEED]?: string;\r\n}\r\n\r\nexport interface ProjectExportProperties {\r\n  [TelemetryProperties.EXPORT_FORMAT]?: string;\r\n  [TelemetryProperties.EXPORT_SUCCESS]?: boolean;\r\n}\r\n\r\nexport interface ProjectProperties {\r\n  [TelemetryProperties.PROJECT_TYPE]?: string;\r\n  [TelemetryProperties.PROJECT_ID]?: string;\r\n  [TelemetryProperties.HAS_BEHAVIOR_PACK]?: boolean;\r\n  [TelemetryProperties.HAS_RESOURCE_PACK]?: boolean;\r\n  [TelemetryProperties.HAS_SCRIPTS]?: boolean;\r\n  [TelemetryProperties.PROJECT_ITEM_COUNT]?: number;\r\n}\r\n\r\nexport interface FileProperties {\r\n  [TelemetryProperties.FILE_TYPE]?: string;\r\n  [TelemetryProperties.FILE_SIZE]?: number;\r\n  [TelemetryProperties.FILE_EXTENSION]?: string;\r\n  [TelemetryProperties.FILE_FORMAT]?: string;\r\n}\r\n\r\nexport interface EditorProperties {\r\n  [TelemetryProperties.EDITOR_TYPE]?: string;\r\n  [TelemetryProperties.MODE]?: string;\r\n  [TelemetryProperties.COMPONENT_ID]?: string;\r\n  [TelemetryProperties.COMPONENT_NAME]?: string;\r\n}\r\n\r\nexport interface ViewProperties {\r\n  [TelemetryProperties.VIEW_CHANGE_TYPE]?: string;\r\n  [TelemetryProperties.VIEW_MODE]?: string;\r\n  [TelemetryProperties.PREVIOUS_VIEW]?: string;\r\n}\r\n\r\nexport interface ActionProperties {\r\n  [TelemetryProperties.ACTION_SOURCE]?: string;\r\n  [TelemetryProperties.ACTION_TYPE]?: string;\r\n  [TelemetryProperties.SUCCESS]?: boolean;\r\n  [TelemetryProperties.ERROR_MESSAGE]?: string;\r\n  [TelemetryProperties.ERROR_CODE]?: string;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Telemetry service that wraps 1DS ApplicationInsights instance.\r\n *\r\n * Telemetry is ONLY enabled when both conditions are met:\r\n *   1. ENABLE_ANALYTICS is set to true at compile time (only for mctools.dev production builds)\r\n *   2. The 1DS SDK has been initialized and exposed as window.oneDSInstance (by site.js)\r\n *\r\n * All other environments (local dev, CLI, Electron, VS Code extension, CLI-served web)\r\n * will never send telemetry because ENABLE_ANALYTICS is false at compile time.\r\n */\r\n\r\nimport type { OneDSApplicationInsights } from \"../types/oneds\";\r\nimport type {\r\n  TelemetryEventName,\r\n  TelemetryPropertyKey,\r\n  TelemetryMeasurementKey,\r\n  TelemetrySeverityLevel,\r\n} from \"./TelemetryConstants\";\r\nimport { TelemetryProperties, TelemetryMeasurements } from \"./TelemetryConstants\";\r\nimport { constants } from \"../core/Constants\";\r\n\r\n/**\r\n * Telemetry event with strict type checking\r\n * Only accepts predefined event names, property keys, and measurement keys\r\n */\r\nexport interface TelemetryEvent {\r\n  name: TelemetryEventName;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  measurements?: Partial<Record<TelemetryMeasurementKey, number>>;\r\n}\r\n\r\nexport interface TelemetryException {\r\n  exception: Error;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  severityLevel?: TelemetrySeverityLevel;\r\n}\r\n\r\nexport interface TelemetryPageView {\r\n  name: string;\r\n  uri?: string;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  measurements?: Partial<Record<TelemetryMeasurementKey, number>>;\r\n}\r\n\r\nclass TelemetryService {\r\n  private _isInitialized: boolean = false;\r\n  private _oneDSInstance: OneDSApplicationInsights | null = null;\r\n  private _activeProjectCount: number = 0;\r\n  private _mctoolsVersion: string = \"0.0.1-dev\";\r\n  private window: typeof globalThis = globalThis;\r\n\r\n  /**\r\n   * Whether telemetry is allowed by the compile-time ENABLE_ANALYTICS flag.\r\n   * This is the primary gate \u2014 if false, no telemetry methods will do anything.\r\n   */\r\n  // @ts-ignore - ENABLE_ANALYTICS is injected by webpack and vite configs\r\n  private _analyticsAllowed: boolean = typeof ENABLE_ANALYTICS !== \"undefined\" && ENABLE_ANALYTICS === true;\r\n\r\n  constructor() {\r\n    if (this._analyticsAllowed) {\r\n      this._checkInitialization();\r\n    }\r\n    this._loadVersion();\r\n  }\r\n\r\n  /**\r\n   * Load the version from constants\r\n   */\r\n  private _loadVersion(): void {\r\n    this._mctoolsVersion = constants.version;\r\n  }\r\n\r\n  /**\r\n   * Set the active project count\r\n   */\r\n  public setActiveProjectCount(count: number): void {\r\n    this._activeProjectCount = count;\r\n  }\r\n\r\n  /**\r\n   * Get common properties and measurements to include with every event\r\n   */\r\n  private _getCommonPropertiesAndMeasurements(): {\r\n    properties: Partial<Record<TelemetryPropertyKey, any>>;\r\n    measurements: Partial<Record<TelemetryMeasurementKey, number>>;\r\n  } {\r\n    const properties: Partial<Record<TelemetryPropertyKey, any>> = {};\r\n    const measurements: Partial<Record<TelemetryMeasurementKey, number>> = {};\r\n\r\n    if (this._mctoolsVersion) {\r\n      properties[TelemetryProperties.MCTOOLS_VERSION] = this._mctoolsVersion;\r\n    }\r\n\r\n    if (this._activeProjectCount > 0) {\r\n      measurements[TelemetryMeasurements.ACTIVE_PROJECT_COUNT] = this._activeProjectCount;\r\n    }\r\n\r\n    return { properties, measurements };\r\n  }\r\n\r\n  /**\r\n   * Check if 1DS is initialized and available on the window object\r\n   */\r\n  private _checkInitialization(): void {\r\n    if (typeof this.window !== \"undefined\" && (this.window as any).oneDSInstance) {\r\n      this._oneDSInstance = (this.window as any).oneDSInstance;\r\n      this._isInitialized = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get the 1DS instance, checking initialization if not already done.\r\n   * Returns null immediately if ENABLE_ANALYTICS is false at compile time.\r\n   */\r\n  private _getInstance(): OneDSApplicationInsights | null {\r\n    if (!this._analyticsAllowed) {\r\n      return null;\r\n    }\r\n\r\n    if (!this._isInitialized) {\r\n      this._checkInitialization();\r\n    }\r\n\r\n    if (!this._isInitialized && typeof this.window !== \"undefined\" && (this.window as any).oneDSInstance) {\r\n      this._oneDSInstance = (this.window as any).oneDSInstance;\r\n      this._isInitialized = true;\r\n    }\r\n\r\n    return this._oneDSInstance;\r\n  }\r\n\r\n  /**\r\n   * Check if telemetry is enabled and available\r\n   */\r\n  public isEnabled(): boolean {\r\n    return this._getInstance() !== null;\r\n  }\r\n\r\n  /**\r\n   * Track a custom event\r\n   * Only accepts predefined event names, property keys, and measurement keys from TelemetryConstants\r\n   * @param event Event with strictly typed properties and measurements\r\n   */\r\n  public trackEvent(event: TelemetryEvent): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const commonData = this._getCommonPropertiesAndMeasurements();\r\n\r\n      const eventData: any = {\r\n        name: event.name,\r\n      };\r\n\r\n      const mergedProperties = {\r\n        ...commonData.properties,\r\n        ...(event.properties || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedProperties).length > 0) {\r\n        eventData.data = mergedProperties;\r\n      }\r\n\r\n      const mergedMeasurements = {\r\n        ...commonData.measurements,\r\n        ...(event.measurements || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedMeasurements).length > 0) {\r\n        eventData.measurements = mergedMeasurements;\r\n      }\r\n\r\n      instance.trackEvent(eventData);\r\n    } catch (error) {\r\n      console.error(\"Error tracking event:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Track a page view\r\n   * @param pageView Page view name and optional properties\r\n   */\r\n  public trackPageView(pageView: TelemetryPageView): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const commonData = this._getCommonPropertiesAndMeasurements();\r\n\r\n      const pageViewData: any = {\r\n        name: pageView.name,\r\n        uri:\r\n          pageView.uri ||\r\n          (typeof this.window !== \"undefined\" && (this.window as any).location\r\n            ? (this.window as any).location.href\r\n            : \"\"),\r\n      };\r\n\r\n      const mergedProperties = {\r\n        ...commonData.properties,\r\n        ...(pageView.properties || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedProperties).length > 0) {\r\n        pageViewData.data = mergedProperties;\r\n      }\r\n\r\n      const mergedMeasurements = {\r\n        ...commonData.measurements,\r\n        ...(pageView.measurements || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedMeasurements).length > 0) {\r\n        pageViewData.measurements = mergedMeasurements;\r\n      }\r\n\r\n      instance.trackPageView(pageViewData);\r\n    } catch (error) {\r\n      console.error(\"Error tracking page view:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Track an exception\r\n   * @param exception Exception details\r\n   */\r\n  public trackException(exception: TelemetryException): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const commonData = this._getCommonPropertiesAndMeasurements();\r\n\r\n      const exceptionData: any = {\r\n        exception: exception.exception,\r\n        severityLevel: exception.severityLevel || 3,\r\n      };\r\n\r\n      const mergedProperties = {\r\n        ...commonData.properties,\r\n        ...(exception.properties || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedProperties).length > 0) {\r\n        exceptionData.data = mergedProperties;\r\n      }\r\n\r\n      instance.trackException(exceptionData);\r\n    } catch (error) {\r\n      console.error(\"Error tracking exception:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Track a metric/measurement\r\n   * @param name Metric name from TelemetryMeasurements\r\n   * @param value Metric value\r\n   * @param properties Optional properties\r\n   */\r\n  public trackMetric(\r\n    name: TelemetryMeasurementKey,\r\n    value: number,\r\n    properties?: Partial<Record<TelemetryPropertyKey, any>>\r\n  ): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const commonData = this._getCommonPropertiesAndMeasurements();\r\n\r\n      const metricData: any = {\r\n        name,\r\n        average: value,\r\n      };\r\n\r\n      const mergedProperties = {\r\n        ...commonData.properties,\r\n        ...(properties || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedProperties).length > 0) {\r\n        metricData.data = mergedProperties;\r\n      }\r\n\r\n      instance.trackMetric(metricData);\r\n    } catch (error) {\r\n      console.error(\"Error tracking metric:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Track a trace/log message\r\n   * @param message Log message\r\n   * @param severityLevel Severity level\r\n   * @param properties Optional properties\r\n   */\r\n  public trackTrace(\r\n    message: string,\r\n    severityLevel?: TelemetrySeverityLevel,\r\n    properties?: Partial<Record<TelemetryPropertyKey, any>>\r\n  ): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const commonData = this._getCommonPropertiesAndMeasurements();\r\n\r\n      const traceData: any = {\r\n        message,\r\n        severityLevel: severityLevel || 1,\r\n      };\r\n\r\n      const mergedProperties = {\r\n        ...commonData.properties,\r\n        ...(properties || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedProperties).length > 0) {\r\n        traceData.data = mergedProperties;\r\n      }\r\n\r\n      instance.trackTrace(traceData);\r\n    } catch (error) {\r\n      console.error(\"Error tracking trace:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Flush any pending telemetry data\r\n   */\r\n  public flush(): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      if (instance.flush) {\r\n        instance.flush();\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error flushing telemetry:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set authenticated user context\r\n   * @param authenticatedUserId User ID\r\n   * @param accountId Optional account ID\r\n   */\r\n  public setAuthenticatedUserContext(authenticatedUserId: string, accountId?: string): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      if (instance.setAuthenticatedUserContext) {\r\n        instance.setAuthenticatedUserContext(authenticatedUserId, accountId);\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error setting authenticated user context:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clear authenticated user context\r\n   */\r\n  public clearAuthenticatedUserContext(): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      if (instance.clearAuthenticatedUserContext) {\r\n        instance.clearAuthenticatedUserContext();\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error clearing authenticated user context:\", error);\r\n    }\r\n  }\r\n}\r\n\r\n// Export singleton instance as default\r\nexport default new TelemetryService();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Database from \"../minecraft/Database\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\nimport { IProjectInfoTopicData, IProjectUpdaterReference } from \"./IProjectInfoGeneratorBase\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\n/**\r\n * Utility class for managing info generator topic data from form.json files.\r\n * Topic metadata (titles, descriptions, updaters) is stored in form.json files\r\n * in the public/data/forms/mctoolsval/ folder, with each generator having its own form file.\r\n */\r\nexport default class InfoGeneratorTopicUtilities {\r\n  private static _topicFormsByGeneratorId: { [generatorId: string]: IFormDefinition | null | undefined } = {};\r\n  private static _loadingPromises: { [generatorId: string]: Promise<IFormDefinition | null> } = {};\r\n\r\n  /**\r\n   * Gets topic data for a specific generator and topic ID from form.json files.\r\n   * Returns undefined if no form file exists for the generator or if the topic is not found.\r\n   * @param generatorId The ID of the generator (e.g., \"CADDONREQ\", \"MCFUNCTION\")\r\n   * @param topicId The numeric topic ID (typically from an enum like 101, 102, etc.)\r\n   * @returns The topic data including title and optional updaters, or undefined if not found\r\n   */\r\n  static async getTopicData(generatorId: string, topicId: number): Promise<IProjectInfoTopicData | undefined> {\r\n    const form = await this.ensureFormLoaded(generatorId);\r\n\r\n    if (!form) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.getTopicDataFromForm(form, topicId);\r\n  }\r\n\r\n  /**\r\n   * Gets topic data synchronously from already-loaded form data.\r\n   * Returns undefined if the form hasn't been loaded yet or if the topic is not found.\r\n   * @param generatorId The ID of the generator\r\n   * @param topicId The numeric topic ID\r\n   * @returns The topic data or undefined\r\n   */\r\n  static getTopicDataSync(generatorId: string, topicId: number): IProjectInfoTopicData | undefined {\r\n    const normalizedId = generatorId.toLowerCase();\r\n    const form = this._topicFormsByGeneratorId[normalizedId];\r\n\r\n    if (!form || form === null) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.getTopicDataFromForm(form, topicId);\r\n  }\r\n\r\n  /**\r\n   * Extracts topic data from a form definition for a given topic ID.\r\n   * For summary items (topicId 0 or 1), returns the form's root title/description if no specific field is found.\r\n   */\r\n  private static getTopicDataFromForm(form: IFormDefinition, topicId: number): IProjectInfoTopicData | undefined {\r\n    if (!form.fields) {\r\n      // If no fields but we have form-level title, return it for summary items\r\n      if ((topicId === 0 || topicId === 1) && form.title) {\r\n        return {\r\n          title: form.title,\r\n          description: form.description,\r\n        };\r\n      }\r\n      return undefined;\r\n    }\r\n\r\n    const topicIdStr = topicId.toString();\r\n\r\n    for (const field of form.fields) {\r\n      if (field.id === topicIdStr) {\r\n        const result: IProjectInfoTopicData = {\r\n          title: field.title || Utilities.humanifyJsName(field.id || \"\"),\r\n        };\r\n\r\n        // Extract description, howToUse, and technicalDescription if present\r\n        if (field.description) {\r\n          result.description = field.description;\r\n        }\r\n        if (field.howToUse) {\r\n          result.howToUse = field.howToUse;\r\n        }\r\n        if (field.technicalDescription) {\r\n          result.technicalDescription = field.technicalDescription;\r\n        }\r\n        // Extract suggestedLineToken for diagnostic line location hints\r\n        if (field.suggestedLineToken) {\r\n          result.suggestedLineToken = field.suggestedLineToken;\r\n        }\r\n        // Extract suggestedLineShouldHaveData for data-based line matching\r\n        if (field.suggestedLineShouldHaveData) {\r\n          result.suggestedLineShouldHaveData = field.suggestedLineShouldHaveData;\r\n        }\r\n\r\n        // Extract updaters from field metadata if present\r\n        if (field.matchedValues && Array.isArray(field.matchedValues)) {\r\n          const updaters: IProjectUpdaterReference[] = [];\r\n          for (const val of field.matchedValues) {\r\n            if (val && typeof val === \"object\" && \"updaterId\" in val) {\r\n              updaters.push(val as IProjectUpdaterReference);\r\n            }\r\n          }\r\n          if (updaters.length > 0) {\r\n            result.updaters = updaters;\r\n          }\r\n        }\r\n\r\n        return result;\r\n      }\r\n    }\r\n\r\n    // For summary items (topicId 0 or 1 - fail/success), return the form's root title if available\r\n    if ((topicId === 0 || topicId === 1) && form.title) {\r\n      return {\r\n        title: form.title,\r\n        description: form.description,\r\n      };\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Ensures that the form.json file for a generator is loaded.\r\n   * @param generatorId The ID of the generator\r\n   * @returns The form definition or undefined if not found\r\n   */\r\n  static async ensureFormLoaded(generatorId: string): Promise<IFormDefinition | undefined> {\r\n    const normalizedId = generatorId.toLowerCase();\r\n\r\n    // Check if already loaded (null means \"checked and not found\")\r\n    if (normalizedId in this._topicFormsByGeneratorId) {\r\n      return this._topicFormsByGeneratorId[normalizedId] ?? undefined;\r\n    }\r\n\r\n    // Check if currently loading\r\n    const loadingPromise = this._loadingPromises[normalizedId];\r\n    if (loadingPromise) {\r\n      const result = await loadingPromise;\r\n      return result ?? undefined;\r\n    }\r\n\r\n    // Start loading\r\n    this._loadingPromises[normalizedId] = this.loadForm(normalizedId);\r\n\r\n    const form = await this._loadingPromises[normalizedId];\r\n    // Cache result: store null for missing forms to avoid re-fetching\r\n    this._topicFormsByGeneratorId[normalizedId] = form ?? null;\r\n\r\n    delete this._loadingPromises[normalizedId];\r\n\r\n    return form ?? undefined;\r\n  }\r\n\r\n  /**\r\n   * Loads a form.json file for a generator.\r\n   */\r\n  private static async loadForm(generatorId: string): Promise<IFormDefinition | null> {\r\n    try {\r\n      const form = await Database.ensureFormLoaded(\"mctoolsval\", generatorId);\r\n      return form ?? null;\r\n    } catch {\r\n      // Form file doesn't exist for this generator - that's OK\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Checks if a form is loaded for a generator.\r\n   */\r\n  static isFormLoaded(generatorId: string): boolean {\r\n    return this._topicFormsByGeneratorId[generatorId.toLowerCase()] !== undefined;\r\n  }\r\n\r\n  /**\r\n   * Preloads forms for all known generators.\r\n   * This can be called at startup to ensure all forms are available synchronously later.\r\n   */\r\n  static async preloadAllForms(generatorIds: string[]): Promise<void> {\r\n    const loadPromises = generatorIds.map((id) => this.ensureFormLoaded(id));\r\n    await Promise.all(loadPromises);\r\n  }\r\n\r\n  /**\r\n   * Clears all cached forms. Useful for testing or hot-reloading.\r\n   */\r\n  static clearCache(): void {\r\n    this._topicFormsByGeneratorId = {};\r\n    this._loadingPromises = {};\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IParticleEffectWrapper } from \"./IParticleEffect\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Project from \"../app/Project\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport Database from \"./Database\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IProjectItemRelationship from \"../app/IProjectItemRelationship\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\n\r\nexport default class ParticleEffectResourceDefinition {\r\n  private _data?: IParticleEffectWrapper;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<ParticleEffectResourceDefinition, ParticleEffectResourceDefinition>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (!this._data || !this._data.particle_effect || !this._data.particle_effect.description) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.particle_effect.description.identifier;\r\n  }\r\n\r\n  public get description() {\r\n    if (!this._data || !this._data.particle_effect || !this._data.particle_effect.description) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.particle_effect.description;\r\n  }\r\n\r\n  public getCanonicalizedTexturesList() {\r\n    if (\r\n      !this.description ||\r\n      !this.description.basic_render_parameters ||\r\n      !this.description.basic_render_parameters.texture\r\n    ) {\r\n      return undefined;\r\n    }\r\n\r\n    const result = TextureDefinition.canonicalizeTexturePath(this.description.basic_render_parameters.texture);\r\n\r\n    return result ? [result] : [];\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return fv[0] > 1 || fv[1] >= 10;\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._data.format_version);\r\n  }\r\n\r\n  get formatVersion() {\r\n    if (!this._data || !this._data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.format_version;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<ParticleEffectResourceDefinition, ParticleEffectResourceDefinition>\r\n  ) {\r\n    let et: ParticleEffectResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new ParticleEffectResourceDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ParticleEffectResourceDefinition) {\r\n      et = file.manager as ParticleEffectResourceDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"PERPF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async deleteLinkToChild(rel: IProjectItemRelationship) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (this._data === undefined) {\r\n      await this.load();\r\n    }\r\n\r\n    if (\r\n      !this.description ||\r\n      !this.description.basic_render_parameters ||\r\n      !this.description.basic_render_parameters.texture\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const basicTexture = this.description.basic_render_parameters.texture;\r\n\r\n    if (rel.childItem.itemType === ProjectItemType.texture) {\r\n      if (!rel.childItem.isContentLoaded) {\r\n        await rel.childItem.loadContent();\r\n      }\r\n\r\n      if (rel.childItem.primaryFile && packRootFolder) {\r\n        let relativePath = StorageUtilities.getBaseRelativePath(rel.childItem.primaryFile, packRootFolder);\r\n\r\n        if (relativePath) {\r\n          if (basicTexture === relativePath) {\r\n            this.description.basic_render_parameters.texture = undefined;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"particles\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n    let textureList = this.getCanonicalizedTexturesList();\r\n\r\n    // Textures still need path-based matching (no ID-based index possible)\r\n    if (packRootFolder && textureList && textureList.length > 0) {\r\n      const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n      for (const candItem of textureItems) {\r\n        if (candItem.primaryFile) {\r\n          let relativePath = StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder);\r\n\r\n          if (relativePath) {\r\n            if (textureList && textureList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n              textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        const isVanillaToken = await Database.isVanillaToken(texturePath);\r\n        item.addUnfulfilledRelationship(texturePath, ProjectItemType.texture, isVanillaToken);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IFogResource from \"./IFogResource\";\r\n\r\nexport default class FogResourceDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public data?: IFogResource;\r\n\r\n  private _onLoaded = new EventDispatcher<FogResourceDefinition, FogResourceDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this.data || !this.data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this.data.format_version);\r\n  }\r\n\r\n  setFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this.data) {\r\n      this.data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this.data === undefined) {\r\n      this.data = {};\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<FogResourceDefinition, FogResourceDefinition>) {\r\n    let rbd: FogResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rbd = new FogResourceDefinition();\r\n\r\n      rbd.file = file;\r\n\r\n      file.manager = rbd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof FogResourceDefinition) {\r\n      rbd = file.manager as FogResourceDefinition;\r\n\r\n      if (!rbd.isLoaded) {\r\n        if (loadHandler) {\r\n          rbd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rbd.load();\r\n      }\r\n    }\r\n\r\n    return rbd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IRecipeBehavior, { IRecipeShaped, IRecipeShapeless } from \"./IRecipeBehavior\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ItemTypeDefinition from \"./ItemTypeDefinition\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\n\r\nexport default class RecipeBehaviorDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: IRecipeBehavior;\r\n  private _interior?: IRecipeShaped | IRecipeShapeless;\r\n\r\n  private _onLoaded = new EventDispatcher<RecipeBehaviorDefinition, RecipeBehaviorDefinition>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public set data(newData: IRecipeBehavior | undefined) {\r\n    this._data = newData;\r\n\r\n    if (this._data && this._data[\"minecraft:recipe_shaped\"]) {\r\n      this._interior = this._data[\"minecraft:recipe_shaped\"];\r\n    } else if (this._data && this._data[\"minecraft:recipe_shapeless\"]) {\r\n      this._interior = this._data[\"minecraft:recipe_shapeless\"];\r\n    } else {\r\n      this._interior = undefined;\r\n    }\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._interior && this._interior.description && this._interior.description.identifier) {\r\n      return this._interior.description.identifier;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    if (this._interior && this._interior.description) {\r\n      this._interior.description.identifier = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data || !this._data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._data.format_version);\r\n  }\r\n\r\n  setBehaviorPackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this._data) {\r\n      this._data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {};\r\n    }\r\n  }\r\n\r\n  async addChildItems(project: Project, recipeItem: ProjectItem, index?: RelationsIndex) {\r\n    const dependentItemIds: string[] = [];\r\n\r\n    // Collect all item IDs that this recipe depends on\r\n    if (this._interior) {\r\n      const ingredientsArray = (this._interior as any).ingredients;\r\n\r\n      // For shapeless recipes, collect ingredients\r\n      if (ingredientsArray && Array.isArray(ingredientsArray)) {\r\n        for (const ingredient of ingredientsArray) {\r\n          if (ingredient && ingredient.item) {\r\n            dependentItemIds.push(ingredient.item);\r\n          }\r\n        }\r\n      }\r\n\r\n      // For shaped recipes, collect key items\r\n      if (\"key\" in this._interior && this._interior.key) {\r\n        for (const keyItem of Object.values(this._interior.key)) {\r\n          if (keyItem && keyItem.item) {\r\n            dependentItemIds.push(keyItem.item);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check each dependent item ID against project items\r\n    for (const dependentItemId of dependentItemIds) {\r\n      let foundMatch = false;\r\n\r\n      // Use index for O(1) lookup when available\r\n      if (index) {\r\n        const matchingItems = index.getItemsById(index.itemTypesById, dependentItemId);\r\n        if (matchingItems.length > 0) {\r\n          for (const matchItem of matchingItems) {\r\n            recipeItem.addChildItem(matchItem);\r\n          }\r\n          foundMatch = true;\r\n        }\r\n      } else {\r\n        const itemTypeItems = project.getItemsByType(ProjectItemType.itemTypeBehavior);\r\n        for (const candItem of itemTypeItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const itd = await ItemTypeDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (itd && itd.id === dependentItemId) {\r\n              recipeItem.addChildItem(candItem);\r\n              foundMatch = true;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // If no matching item type was found, add as unfulfilled relationship\r\n      if (!foundMatch) {\r\n        recipeItem.addUnfulfilledRelationship(dependentItemId, ProjectItemType.itemTypeBehavior, false);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<RecipeBehaviorDefinition, RecipeBehaviorDefinition>\r\n  ) {\r\n    let rbd: RecipeBehaviorDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rbd = new RecipeBehaviorDefinition();\r\n\r\n      rbd.file = file;\r\n\r\n      file.manager = rbd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof RecipeBehaviorDefinition) {\r\n      rbd = file.manager as RecipeBehaviorDefinition;\r\n\r\n      if (!rbd.isLoaded) {\r\n        if (loadHandler) {\r\n          rbd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rbd.load();\r\n      }\r\n    }\r\n\r\n    return rbd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport ISpawnRulesBehavior, { ISpawnRulesInner } from \"./ISpawnRulesBehavior\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport EntityTypeDefinition from \"./EntityTypeDefinition\";\r\n\r\nexport default class SpawnRulesBehaviorDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public data?: ISpawnRulesBehavior;\r\n  public dataInner?: ISpawnRulesInner;\r\n\r\n  private _onLoaded = new EventDispatcher<SpawnRulesBehaviorDefinition, SpawnRulesBehaviorDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n\r\n    if (this.dataInner && this.dataInner.description && newId) {\r\n      this.dataInner.description.identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this.data || !this.data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this.data.format_version);\r\n  }\r\n\r\n  setFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this.data) {\r\n      this.data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this.data === undefined) {\r\n      this.data = { \"minecraft:spawn_rules\": { description: { identifier: this._id ? this._id : \"\" } } };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<SpawnRulesBehaviorDefinition, SpawnRulesBehaviorDefinition>\r\n  ) {\r\n    let srb: SpawnRulesBehaviorDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      srb = new SpawnRulesBehaviorDefinition();\r\n\r\n      srb.file = file;\r\n\r\n      file.manager = srb;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof SpawnRulesBehaviorDefinition) {\r\n      srb = file.manager as SpawnRulesBehaviorDefinition;\r\n\r\n      if (!srb.isLoaded) {\r\n        if (loadHandler) {\r\n          srb.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await srb.load();\r\n      }\r\n    }\r\n\r\n    return srb;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    if (!this.id) {\r\n      return;\r\n    }\r\n\r\n    let foundMatch = false;\r\n\r\n    if (index) {\r\n      // Use pre-built index for O(1) lookup\r\n      const matchingEntities = index.getItemsById(index.entityBehaviorsById, this.id);\r\n      foundMatch = matchingEntities.length > 0;\r\n    } else {\r\n      // Fallback: scan entity behaviors\r\n      const entityBehaviorItems = project.getItemsByType(ProjectItemType.entityTypeBehavior);\r\n\r\n      for (const candItem of entityBehaviorItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const entityType = await EntityTypeDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (entityType) {\r\n            const entityId = entityType.id;\r\n\r\n            if (entityId === this.id) {\r\n              foundMatch = true;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // If no matching entity type was found, add as unfulfilled relationship\r\n    if (!foundMatch) {\r\n      const isVanilla = await Database.isVanillaToken(this.id);\r\n      item.addUnfulfilledRelationship(this.id, ProjectItemType.entityTypeBehavior, isVanilla);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this.dataInner = this.data?.[\"minecraft:spawn_rules\"];\r\n\r\n    if (this.dataInner && this.dataInner.description) {\r\n      this._id = this.dataInner.description.identifier;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * CrossReferenceIndexGenerator - Indexes cross-file references into ContentIndex\r\n *\r\n * ARCHITECTURE:\r\n * This generator populates the ContentIndex trie with annotated entries for all\r\n * content types that can be referenced across files. This data powers autocomplete\r\n * suggestions in both Monaco (web editor) and VS Code.\r\n *\r\n * REFERENCE TYPES INDEXED:\r\n * - Geometry identifiers (from .geo.json files)\r\n * - Animation identifiers (from animation files)\r\n * - Animation controller identifiers\r\n * - Render controller identifiers\r\n * - Particle identifiers\r\n * - Fog identifiers\r\n * - Sound event names (from sound_definitions.json)\r\n * - Loot table paths\r\n * - Recipe identifiers\r\n * - Biome identifiers\r\n * - Spawn rule identifiers\r\n * - Dialogue paths\r\n * - Function paths (.mcfunction files)\r\n * - Structure paths\r\n *\r\n * TYPES ALREADY INDEXED ELSEWHERE (not duplicated here):\r\n * - Entity IDs \u2192 TypesInfoGenerator (AnnotationCategory.entityTypeSource)\r\n * - Block IDs \u2192 TypesInfoGenerator (AnnotationCategory.blockTypeSource)\r\n * - Item IDs \u2192 TypesInfoGenerator (AnnotationCategory.itemTypeSource)\r\n * - Feature IDs \u2192 TypesInfoGenerator (AnnotationCategory.featureSource)\r\n * - Texture file paths \u2192 TextureInfoGenerator (AnnotationCategory.textureFile)\r\n *\r\n * RELATED FILES:\r\n * - ContentIndex.ts \u2014 The trie data structure and AnnotationCategory enum\r\n * - TypesInfoGenerator.ts \u2014 Indexes entity, block, item, feature IDs\r\n * - TextureInfoGenerator.ts \u2014 Indexes texture file paths\r\n * - langcore/json/CrossReferenceCompletionSource.ts \u2014 Queries this data for completions\r\n *\r\n * Last updated: February 2026\r\n */\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ModelGeometryDefinition from \"../minecraft/ModelGeometryDefinition\";\r\nimport AnimationResourceDefinition from \"../minecraft/AnimationResourceDefinition\";\r\nimport AnimationBehaviorDefinition from \"../minecraft/AnimationBehaviorDefinition\";\r\nimport AnimationControllerResourceDefinition from \"../minecraft/AnimationControllerResourceDefinition\";\r\nimport AnimationControllerBehaviorDefinition from \"../minecraft/AnimationControllerBehaviorDefinition\";\r\nimport RenderControllerSetDefinition from \"../minecraft/RenderControllerSetDefinition\";\r\nimport ParticleEffectResourceDefinition from \"../minecraft/ParticleEffectResourceDefinition\";\r\nimport FogResourceDefinition from \"../minecraft/FogResourceDefinition\";\r\nimport RecipeBehaviorDefinition from \"../minecraft/RecipeBehaviorDefinition\";\r\nimport BiomeBehaviorDefinition from \"../minecraft/BiomeBehaviorDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"../minecraft/SpawnRulesBehaviorDefinition\";\r\nimport SoundDefinitionCatalogDefinition from \"../minecraft/SoundDefinitionCatalogDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\n\r\nexport default class CrossReferenceIndexGenerator implements IProjectInfoGenerator {\r\n  id = \"CROSSREFINDEX\";\r\n  title = \"Cross-Reference Index\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(_info: any, _infoSet: ProjectInfoSet) {\r\n    // No summary needed \u2014 this generator only populates the content index\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      const path = projectItem.projectPath;\r\n      if (!path) {\r\n        continue;\r\n      }\r\n\r\n      switch (projectItem.itemType) {\r\n        case ProjectItemType.modelGeometryJson:\r\n          await this.indexGeometry(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.animationResourceJson:\r\n          await this.indexAnimationResource(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.animationBehaviorJson:\r\n          await this.indexAnimationBehavior(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.animationControllerResourceJson:\r\n          await this.indexAnimationControllerResource(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.animationControllerBehaviorJson:\r\n          await this.indexAnimationControllerBehavior(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.renderControllerJson:\r\n          await this.indexRenderController(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.particleJson:\r\n          await this.indexParticle(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.fogResourceJson:\r\n          await this.indexFog(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.soundDefinitionCatalog:\r\n          await this.indexSoundDefinitions(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.lootTableBehavior:\r\n          this.indexLootTable(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.recipeBehavior:\r\n          await this.indexRecipe(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.biomeBehavior:\r\n          await this.indexBiome(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.spawnRuleBehavior:\r\n          await this.indexSpawnRule(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.dialogueBehaviorJson:\r\n          this.indexDialogue(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.MCFunction:\r\n          this.indexFunction(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.structure:\r\n          this.indexStructure(projectItem, contentIndex, path);\r\n          break;\r\n      }\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  private async indexGeometry(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const modGeo = await ModelGeometryDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (modGeo && modGeo.identifiers) {\r\n        for (const geoId of modGeo.identifiers) {\r\n          contentIndex.insert(geoId, path, AnnotationCategory.geometrySource);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexAnimationResource(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const animDef = await AnimationResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (animDef && animDef.animations) {\r\n        for (const animName in animDef.animations) {\r\n          contentIndex.insert(animName, path, AnnotationCategory.animationSource);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexAnimationBehavior(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const animDef = await AnimationBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (animDef) {\r\n        const data = animDef.data;\r\n        if (data && data.animations) {\r\n          for (const animName in data.animations) {\r\n            contentIndex.insert(animName, path, AnnotationCategory.animationSource);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexAnimationControllerResource(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const acDef = await AnimationControllerResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (acDef && acDef.idList) {\r\n        for (const acId of acDef.idList) {\r\n          contentIndex.insert(acId, path, AnnotationCategory.animationControllerSource);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexAnimationControllerBehavior(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const acDef = await AnimationControllerBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (acDef) {\r\n        const data = acDef.data;\r\n        if (data && data.animation_controllers) {\r\n          for (const acId in data.animation_controllers) {\r\n            contentIndex.insert(acId, path, AnnotationCategory.animationControllerSource);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexRenderController(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const rcDef = await RenderControllerSetDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (rcDef && rcDef.idList) {\r\n        for (const rcId of rcDef.idList) {\r\n          contentIndex.insert(rcId, path, AnnotationCategory.renderControllerSource);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexParticle(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const particleDef = await ParticleEffectResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (particleDef && particleDef.id) {\r\n        contentIndex.insert(particleDef.id, path, AnnotationCategory.particleSource);\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexFog(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const fogDef = await FogResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (fogDef && fogDef.id) {\r\n        contentIndex.insert(fogDef.id, path, AnnotationCategory.fogSource);\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexSoundDefinitions(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const soundDef = await SoundDefinitionCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (soundDef) {\r\n        const soundNames = soundDef.getSoundDefinitionSetNameList();\r\n        if (soundNames) {\r\n          for (const soundName of soundNames) {\r\n            contentIndex.insert(soundName, path, AnnotationCategory.soundEventSource);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private indexLootTable(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    // Loot tables are referenced by their path relative to the pack root\r\n    // e.g., \"loot_tables/entities/zombie.json\"\r\n    const normalizedPath = path.replace(/\\\\/g, \"/\");\r\n    const lootTablesIdx = normalizedPath.indexOf(\"loot_tables/\");\r\n    if (lootTablesIdx >= 0) {\r\n      const lootPath = normalizedPath.substring(lootTablesIdx);\r\n      contentIndex.insert(lootPath, path, AnnotationCategory.lootTableSource);\r\n    }\r\n  }\r\n\r\n  private async indexRecipe(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const recipeDef = await RecipeBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (recipeDef && recipeDef.id) {\r\n        contentIndex.insert(recipeDef.id, path, AnnotationCategory.recipeSource);\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexBiome(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const biomeDef = await BiomeBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (biomeDef && biomeDef.id) {\r\n        contentIndex.insert(biomeDef.id, path, AnnotationCategory.biomeSource);\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexSpawnRule(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const spawnDef = await SpawnRulesBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (spawnDef && spawnDef.id) {\r\n        contentIndex.insert(spawnDef.id, path, AnnotationCategory.spawnRuleSource);\r\n      }\r\n    }\r\n  }\r\n\r\n  private indexDialogue(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    // Dialogues are referenced by their scene tag, but we index path as well\r\n    const normalizedPath = path.replace(/\\\\/g, \"/\");\r\n    const baseName = StorageUtilities.getBaseFromName(normalizedPath);\r\n    if (baseName) {\r\n      contentIndex.insert(baseName, path, AnnotationCategory.dialogueSource);\r\n    }\r\n  }\r\n\r\n  private indexFunction(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    // Functions are referenced by path relative to functions/ folder, without extension\r\n    // e.g., \"my_function\" from \"functions/my_function.mcfunction\"\r\n    const normalizedPath = path.replace(/\\\\/g, \"/\");\r\n    const functionsIdx = normalizedPath.indexOf(\"functions/\");\r\n    if (functionsIdx >= 0) {\r\n      let funcPath = normalizedPath.substring(functionsIdx + \"functions/\".length);\r\n      // Remove .mcfunction extension\r\n      if (funcPath.endsWith(\".mcfunction\")) {\r\n        funcPath = funcPath.substring(0, funcPath.length - \".mcfunction\".length);\r\n      }\r\n      contentIndex.insert(funcPath, path, AnnotationCategory.functionSource);\r\n    }\r\n  }\r\n\r\n  private indexStructure(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    // Structures are referenced by namespace:name format or by path\r\n    const normalizedPath = path.replace(/\\\\/g, \"/\");\r\n    const structuresIdx = normalizedPath.indexOf(\"structures/\");\r\n    if (structuresIdx >= 0) {\r\n      let structPath = normalizedPath.substring(structuresIdx + \"structures/\".length);\r\n      // Remove .mcstructure extension\r\n      if (structPath.endsWith(\".mcstructure\")) {\r\n        structPath = structPath.substring(0, structPath.length - \".mcstructure\".length);\r\n      }\r\n      contentIndex.insert(structPath, path, AnnotationCategory.structureSource);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport MinecraftAggregateFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftAggregateFeature\";\r\nimport MinecraftBeardsAndShavers from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftBeardsAndShavers\";\r\nimport MinecraftCaveCarverFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftCaveCarverFeature\";\r\nimport MinecraftFossilFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftFossilFeature\";\r\nimport MinecraftGeodeFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftGeodeFeature\";\r\nimport MinecraftGrowingPlantFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftGrowingPlantFeature\";\r\nimport MinecraftMultifaceFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftMultifaceFeature\";\r\nimport MinecraftNetherCaveCarverFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftNetherCaveCarverFeature\";\r\nimport MinecraftOreFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftOreFeature\";\r\nimport MinecraftPartiallyExposedBlobFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftPartiallyExposedBlobFeature\";\r\nimport MinecraftRectLayout from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftRectLayout\";\r\nimport MinecraftScanSurface from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftScanSurface\";\r\nimport MinecraftScatterFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftScatterFeature\";\r\nimport MinecraftSculkPatchFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSculkPatchFeature\";\r\nimport MinecraftSearchFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSearchFeature\";\r\nimport MinecraftSequenceFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSequenceFeature\";\r\nimport MinecraftSingleBlockFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSingleBlockFeature\";\r\nimport MinecraftSnapToSurfaceFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSnapToSurfaceFeature\";\r\nimport MinecraftStructureTemplateFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftStructureTemplateFeature\";\r\nimport MinecraftSurfaceRelativeThresholdFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSurfaceRelativeThresholdFeature\";\r\nimport MinecraftTreeFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftTreeFeature\";\r\nimport MinecraftUnderwaterCaveCarverFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftUnderwaterCaveCarverFeature\";\r\nimport MinecraftVegetationPatchFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftVegetationPatchFeature\";\r\nimport MinecraftWeightedRandomFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftWeightedRandomFeature\";\r\nimport MinecraftFeatureBase from \"./jsoncommon/MinecraftFeatureBase\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport const FeatureTypes = [\r\n  \"aggregate_feature\",\r\n  \"beards_and_shavers\",\r\n  \"cave_carver_feature\",\r\n  \"conditional_list\",\r\n  \"fossil_feature\",\r\n  \"geode_feature\",\r\n  \"growing_plant_feature\",\r\n  \"multiface_feature\",\r\n  \"nether_cave_carver_feature\",\r\n  \"ore_feature\",\r\n  \"partially_exposed_blob_feature\",\r\n  \"rect_layout\",\r\n  \"scan_surface\",\r\n  \"scatter_feature\",\r\n  \"sculk_patch_feature\",\r\n  \"search_feature\",\r\n  \"sequence_feature\",\r\n  \"single_block_feature\",\r\n  \"snap_to_surface_feature\",\r\n  \"structure_template_feature\",\r\n  \"surface_relative_threshold_feature\",\r\n  \"tree_feature\",\r\n  \"underwater_cave_carver_feature\",\r\n  \"vegetation_patch_feature\",\r\n  \"weighted_random_feature\",\r\n];\r\n\r\nexport default class FeatureDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?:\r\n    | MinecraftAggregateFeature\r\n    | MinecraftBeardsAndShavers\r\n    | MinecraftCaveCarverFeature\r\n    | MinecraftFossilFeature\r\n    | MinecraftGeodeFeature\r\n    | MinecraftGrowingPlantFeature\r\n    | MinecraftMultifaceFeature\r\n    | MinecraftNetherCaveCarverFeature\r\n    | MinecraftOreFeature\r\n    | MinecraftPartiallyExposedBlobFeature\r\n    | MinecraftRectLayout\r\n    | MinecraftScanSurface\r\n    | MinecraftScatterFeature\r\n    | MinecraftSculkPatchFeature\r\n    | MinecraftSearchFeature\r\n    | MinecraftSequenceFeature\r\n    | MinecraftSingleBlockFeature\r\n    | MinecraftSnapToSurfaceFeature\r\n    | MinecraftStructureTemplateFeature\r\n    | MinecraftSurfaceRelativeThresholdFeature\r\n    | MinecraftTreeFeature\r\n    | MinecraftUnderwaterCaveCarverFeature\r\n    | MinecraftVegetationPatchFeature\r\n    | MinecraftWeightedRandomFeature\r\n    | MinecraftFeatureBase;\r\n\r\n  private _onLoaded = new EventDispatcher<FeatureDefinition, FeatureDefinition>();\r\n\r\n  public get typeString() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const typeStr of FeatureTypes) {\r\n      if ((this._data as any)[\"minecraft:\" + typeStr] !== undefined) {\r\n        return typeStr;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data || !(this._data as MinecraftFeatureBase).format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom((this._data as MinecraftFeatureBase).format_version);\r\n  }\r\n\r\n  setResourcePackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this._data) {\r\n      (this._data as MinecraftFeatureBase).format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        format_version: \"1.21.0\",\r\n      };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<FeatureDefinition, FeatureDefinition>) {\r\n    let fd: FeatureDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      fd = new FeatureDefinition();\r\n\r\n      fd.file = file;\r\n\r\n      file.manager = fd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof FeatureDefinition) {\r\n      fd = file.manager as FeatureDefinition;\r\n\r\n      if (!fd.isLoaded) {\r\n        if (loadHandler) {\r\n          fd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await fd.load();\r\n      }\r\n    }\r\n\r\n    return fd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._data !== null, \"FDP\");\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    // Extract the identifier from the feature description\r\n    // Features can be of different types, so we check all known feature types\r\n    if (this._data) {\r\n      for (const typeStr of FeatureTypes) {\r\n        const featureData = (this._data as any)[\"minecraft:\" + typeStr];\r\n        if (featureData?.description?.identifier) {\r\n          this._id = featureData.description.identifier;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  /**\r\n   * Extracts all feature identifiers that this feature references/depends on.\r\n   * Different feature types reference other features in different ways:\r\n   * - aggregate_feature, sequence_feature: features[] array of strings\r\n   * - weighted_random_feature: features[] array of [featureId, weight] tuples\r\n   * - scatter_feature, search_feature, beards_and_shavers: places_feature string\r\n   * - conditional_list: conditional_features[] array of objects with places_feature\r\n   * - snap_to_surface_feature: feature_to_snap string\r\n   * - surface_relative_threshold_feature: feature_to_place string\r\n   * - vegetation_patch_feature: vegetation_feature string\r\n   */\r\n  getReferencedFeatureIds(): string[] {\r\n    if (!this._data) {\r\n      return [];\r\n    }\r\n\r\n    const referencedFeatures: string[] = [];\r\n\r\n    // Check each possible feature type and extract references\r\n    for (const typeStr of FeatureTypes) {\r\n      const featureData = (this._data as any)[\"minecraft:\" + typeStr];\r\n      if (!featureData) {\r\n        continue;\r\n      }\r\n\r\n      // aggregate_feature and sequence_feature: features[] is an array of feature IDs\r\n      if (typeStr === \"aggregate_feature\" || typeStr === \"sequence_feature\") {\r\n        if (Array.isArray(featureData.features)) {\r\n          for (const feature of featureData.features) {\r\n            if (typeof feature === \"string\") {\r\n              referencedFeatures.push(feature);\r\n            }\r\n          }\r\n        }\r\n      }\r\n      // weighted_random_feature: features[] is an array of [featureId, weight] tuples\r\n      else if (typeStr === \"weighted_random_feature\") {\r\n        if (Array.isArray(featureData.features)) {\r\n          for (const feature of featureData.features) {\r\n            if (Array.isArray(feature) && feature.length >= 1 && typeof feature[0] === \"string\") {\r\n              referencedFeatures.push(feature[0]);\r\n            }\r\n          }\r\n        }\r\n      }\r\n      // scatter_feature, search_feature, beards_and_shavers: places_feature is a string\r\n      else if (typeStr === \"scatter_feature\" || typeStr === \"search_feature\" || typeStr === \"beards_and_shavers\") {\r\n        if (typeof featureData.places_feature === \"string\") {\r\n          referencedFeatures.push(featureData.places_feature);\r\n        }\r\n      }\r\n      // conditional_list: conditional_features[] is an array of objects with places_feature\r\n      else if (typeStr === \"conditional_list\") {\r\n        if (Array.isArray(featureData.conditional_features)) {\r\n          for (const condFeature of featureData.conditional_features) {\r\n            if (condFeature && typeof condFeature.places_feature === \"string\") {\r\n              referencedFeatures.push(condFeature.places_feature);\r\n            }\r\n          }\r\n        }\r\n      }\r\n      // snap_to_surface_feature: feature_to_snap is a string\r\n      else if (typeStr === \"snap_to_surface_feature\") {\r\n        if (typeof featureData.feature_to_snap === \"string\") {\r\n          referencedFeatures.push(featureData.feature_to_snap);\r\n        }\r\n      }\r\n      // surface_relative_threshold_feature: feature_to_place is a string\r\n      else if (typeStr === \"surface_relative_threshold_feature\") {\r\n        if (typeof featureData.feature_to_place === \"string\") {\r\n          referencedFeatures.push(featureData.feature_to_place);\r\n        }\r\n      }\r\n      // vegetation_patch_feature: vegetation_feature is a string\r\n      else if (typeStr === \"vegetation_patch_feature\") {\r\n        if (typeof featureData.vegetation_feature === \"string\") {\r\n          referencedFeatures.push(featureData.vegetation_feature);\r\n        }\r\n      }\r\n    }\r\n\r\n    return referencedFeatures;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    const referencedFeatureIds = this.getReferencedFeatureIds();\r\n\r\n    if (referencedFeatureIds.length === 0) {\r\n      return;\r\n    }\r\n\r\n    for (const featureId of referencedFeatureIds) {\r\n      let foundMatch = false;\r\n\r\n      // Use index for O(1) lookup when available\r\n      if (index) {\r\n        const matchingItems = index.getItemsById(index.featureBehaviorsById, featureId);\r\n        if (matchingItems.length > 0) {\r\n          for (const matchItem of matchingItems) {\r\n            item.addChildItem(matchItem);\r\n          }\r\n          foundMatch = true;\r\n        }\r\n      } else {\r\n        const featureItems = project.getItemsByType(ProjectItemType.featureBehavior);\r\n\r\n        // Look for matching feature items in the project\r\n        for (const candItem of featureItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const featureDef = await FeatureDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (featureDef) {\r\n              const candFeatureId = featureDef.id;\r\n\r\n              if (candFeatureId === featureId) {\r\n                item.addChildItem(candItem);\r\n                foundMatch = true;\r\n                break;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // If no matching feature was found, add as unfulfilled relationship\r\n      if (!foundMatch) {\r\n        const isVanilla = await Database.isVanillaToken(featureId);\r\n        item.addUnfulfilledRelationship(featureId, ProjectItemType.featureBehavior, isVanilla);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\nimport BlocksCatalogDefinition from \"../minecraft/BlocksCatalogDefinition\";\r\nimport FeatureDefinition from \"../minecraft/FeatureDefinition\";\r\n\r\nexport enum TypesInfoGeneratorTest {\r\n  types = 101,\r\n}\r\n\r\n/**\r\n * Aggregates content type information (entities, blocks, items) from the project.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/types.form.json} for topic definitions\r\n */\r\nexport default class TypesInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"TYPES\";\r\n  title = \"Types Info Aggregation\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.textureCount = infoSet.getSummedDataValue(this.id, TypesInfoGeneratorTest.types);\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const typesCountPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      TypesInfoGeneratorTest.types,\r\n      \"Types\"\r\n    );\r\n    items.push(typesCountPi);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.entityTypeBehavior) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const etd = await EntityTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (etd && etd.id && projectItem.projectPath) {\r\n            contentIndex.insert(etd.id, projectItem.projectPath, AnnotationCategory.entityTypeSource);\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.blockTypeBehavior) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const blockTypeDef = await BlockTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (blockTypeDef && blockTypeDef.id && projectItem.projectPath) {\r\n            contentIndex.insert(blockTypeDef.id, projectItem.projectPath, AnnotationCategory.blockTypeSource);\r\n\r\n            let colon = blockTypeDef.id.indexOf(\":\");\r\n\r\n            if (colon >= 0) {\r\n              contentIndex.insert(\r\n                blockTypeDef.id.substring(colon + 1),\r\n                projectItem.projectPath,\r\n                AnnotationCategory.blockTypeSource\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.blocksCatalogResourceJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const blockCatalog = await BlocksCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (blockCatalog && projectItem.projectPath && blockCatalog.blocksCatalog) {\r\n            for (const name in blockCatalog.blocksCatalog) {\r\n              let adjustedName = name;\r\n\r\n              let colon = adjustedName.indexOf(\":\");\r\n\r\n              if (colon < 0 && project.isVanillaSourceProject) {\r\n                adjustedName = \"minecraft:\" + adjustedName;\r\n\r\n                contentIndex.insert(adjustedName, projectItem.projectPath, AnnotationCategory.blockTypeSource);\r\n              }\r\n\r\n              contentIndex.insert(name, projectItem.projectPath, AnnotationCategory.blockTypeSource);\r\n            }\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.itemTypeBehavior) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const itemTypeDef = await ItemTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (itemTypeDef && itemTypeDef.id && projectItem.projectPath) {\r\n            contentIndex.insert(itemTypeDef.id, projectItem.projectPath, AnnotationCategory.itemTypeSource);\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.featureBehavior) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const featureDef = await FeatureDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (featureDef && featureDef.id && projectItem.projectPath) {\r\n            contentIndex.insert(featureDef.id, projectItem.projectPath, AnnotationCategory.featureSource);\r\n\r\n            // Also index without namespace prefix for easier lookup\r\n            let colon = featureDef.id.indexOf(\":\");\r\n            if (colon >= 0) {\r\n              contentIndex.insert(\r\n                featureDef.id.substring(colon + 1),\r\n                projectItem.projectPath,\r\n                AnnotationCategory.featureSource\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n * ==========================================================================================\r\n * PROJECTINFOSET - VALIDATION SYSTEM NOTES\r\n * ==========================================================================================\r\n *\r\n * OVERVIEW:\r\n * ---------\r\n * ProjectInfoSet is the central hub for project validation. It aggregates results from\r\n * multiple \"info generators\" that check different aspects of a project for errors,\r\n * warnings, recommendations, and informational items. It also coordinates \"updaters\"\r\n * that can automatically fix certain issues.\r\n *\r\n * VALIDATION ARCHITECTURE:\r\n * ------------------------\r\n *\r\n *   ProjectInfoSet\r\n *        \u2502\r\n *        \u251C\u2500\u2500 IProjectInfoGenerator[] \u2500\u2500\u2500 Checks whole project (e.g., script versions)\r\n *        \u251C\u2500\u2500 IProjectItemInfoGenerator[] \u2500\u2500\u2500 Checks individual items (e.g., entity format)\r\n *        \u2514\u2500\u2500 IProjectFileInfoGenerator[] \u2500\u2500\u2500 Checks specific files\r\n *\r\n *   Each generator produces ProjectInfoItem[] with:\r\n *   - itemType: error, warning, recommendation, info, testPass, testFail\r\n *   - generatorId: Which generator produced it (e.g., \"SCRIPTMOD\", \"FORMATVER\")\r\n *   - generatorIndex: Specific test within generator\r\n *   - message: Human-readable description\r\n *   - projectItem: Optional link to affected ProjectItem\r\n *   - data: Optional structured data for tooling\r\n *\r\n * See registered info generators in GeneratorRegistrations.ts.\r\n *\r\n * VALIDATION SUITES (ProjectInfoSuite):\r\n * -------------------------------------\r\n * Suites determine which generators run:\r\n * - defaultInDevelopment: Most generators except sharing-specific\r\n * - cooperativeAddOn: Marketplace add-on specific checks\r\n * - sharing: Checks for content to be shared\r\n * - sharingStrict: Sharing + additional strictness\r\n * - currentPlatformVersions: Version compatibility checks\r\n *\r\n * KEY METHODS:\r\n * ------------\r\n * - generateForProject(): Run all matching generators, populate items[]\r\n * - matchesSuite(): Check if generator applies to current suite\r\n * - getCountByType() / getSummaryByType(): Query results\r\n * - errorFailWarnCount: Quick error/warning count\r\n *\r\n * UPDATERS:\r\n * ---------\r\n * Some generators provide IProjectUpdater implementations:\r\n * - Can automatically fix issues (e.g., update script module versions)\r\n * - Accessed via generator.getUpdaters() method\r\n * - Applied via ProjectUpdateRunner, the implementation of which shadows ProjectInfoSet.\r\n *\r\n * AGGREGATION:\r\n * ------------\r\n * - info: IProjectInfo object with aggregated statistics\r\n * - itemsByStoragePath: Quick lookup by file path\r\n * - contentIndex: ContentIndex for text search across results\r\n *\r\n * GENERATOR OPTIONS:\r\n * ------------------\r\n * IGeneratorOptions controls generator behavior:\r\n * - performAggressiveCleanup: Release memory after processing (CLI mode)\r\n *   Set false when data needed later (e.g., world map rendering)\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - IProjectInfoGenerator.ts: Generator interface\r\n * - ProjectInfoItem.ts: Individual validation result\r\n * - GeneratorRegistrations.ts: Generator registry\r\n * - ProjectUpdateRunner.ts: Applies updaters\r\n * - IInfoItemData.ts: Serialized info item format\r\n *\r\n * ==========================================================================================\r\n */\r\n\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Project, { ProjectErrorState } from \"./../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport IProjectItemInfoGenerator from \"./IProjectItemInfoGenerator\";\r\nimport IProjectFileInfoGenerator from \"./IProjectFileInfoGenerator\";\r\nimport IProjectInfo from \"./IProjectInfo\";\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IInfoItemData, { InfoItemType } from \"./IInfoItemData\";\r\nimport IProjectInfoGeneratorBase, { IProjectInfoTopicData } from \"./IProjectInfoGeneratorBase\";\r\nimport IProjectInfoData, { ProjectInfoSuite } from \"./IProjectInfoData\";\r\nimport { constants } from \"../core/Constants\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\nimport { StatusTopic } from \"../app/Status\";\r\nimport GeneratorRegistrations, { TestsToExcludeFromDefaultSuite } from \"./registration/GeneratorRegistrations\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport IProjectMetaState from \"./IProjectMetaState\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport SummaryInfoGenerator from \"./SummaryInfoGenerator\";\r\nimport HashUtilities from \"../core/HashUtilities\";\r\nimport Database from \"../minecraft/Database\";\r\nimport telemetryService from \"../analytics/Telemetry\";\r\nimport { TelemetryEvents, TelemetryProperties } from \"../analytics/TelemetryConstants\";\r\nimport InfoGeneratorTopicUtilities from \"./InfoGeneratorTopicUtilities\";\r\nimport CrossReferenceIndexGenerator from \"./CrossReferenceIndexGenerator\";\r\nimport TypesInfoGenerator from \"./TypesInfoGenerator\";\r\n\r\nconst ItemBatchSize = 500;\r\n\r\n/**\r\n * Controls how aggressively generators should constrain resource consumption.\r\n * Use this to balance between thoroughness and performance/memory usage.\r\n */\r\nexport enum ResourceConsumptionConstraint {\r\n  /** No constraints - process all data regardless of resource usage */\r\n  none = 0,\r\n  /** Medium constraints - apply reasonable limits to prevent excessive resource usage */\r\n  medium = 5,\r\n}\r\n\r\n/**\r\n * Options passed to info generators to control their behavior.\r\n */\r\nexport interface IGeneratorOptions {\r\n  /**\r\n   * When true, generators may perform aggressive memory cleanup operations\r\n   * after processing (e.g., clearing LevelDB data, chunk caches).\r\n   * This is appropriate for fire-and-forget contexts like CLI validation,\r\n   * but should be false when the data may be needed by other components\r\n   * (e.g., world map rendering in the browser).\r\n   */\r\n  performAggressiveCleanup?: boolean;\r\n\r\n  /**\r\n   * Controls how aggressively generators should limit resource consumption.\r\n   * When set to .medium, generators may apply limits like MaxWorldRecordsToProcess\r\n   * to prevent excessive memory or time usage on large datasets.\r\n   * When set to .none, no such limits are applied.\r\n   * Defaults to .medium if not specified.\r\n   */\r\n  constrainResourceConsumption?: ResourceConsumptionConstraint;\r\n\r\n  /**\r\n   * Optional callback for reporting progress during generation.\r\n   * Generators can call this to provide granular progress updates,\r\n   * especially for long-running operations like world data validation.\r\n   * @param message - A descriptive message about the current operation\r\n   * @param percentComplete - Optional percentage (0-100) of completion\r\n   */\r\n  onProgress?: (message: string, percentComplete?: number) => void;\r\n}\r\n\r\nexport default class ProjectInfoSet {\r\n  project?: Project;\r\n  suite: ProjectInfoSuite;\r\n  info: IProjectInfo;\r\n  items: ProjectInfoItem[] = [];\r\n  itemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined } = {};\r\n  contentIndex: ContentIndex;\r\n  performAggressiveCleanup: boolean = false;\r\n  constrainResourceConsumption: ResourceConsumptionConstraint = ResourceConsumptionConstraint.medium;\r\n\r\n  static _generatorsById: { [name: string]: IProjectInfoGenerator } = {};\r\n  _isGenerating: boolean = false;\r\n  _completedGeneration: boolean = false;\r\n  _excludeTests?: string[];\r\n  private _pendingGenerateRequests: ((value: unknown) => void)[] = [];\r\n\r\n  static CommonCsvHeader = \"Test,TestId,Type,Item,Message,Data,Path\";\r\n\r\n  static getSuiteFromString(suiteName: string) {\r\n    switch (suiteName.toLowerCase()) {\r\n      case \"addon\":\r\n      case \"addons\":\r\n        return ProjectInfoSuite.cooperativeAddOn;\r\n\r\n      case \"sharing\":\r\n        return ProjectInfoSuite.sharing;\r\n\r\n      case \"sharingstrict\":\r\n        return ProjectInfoSuite.sharingStrict;\r\n\r\n      case \"currentplatform\":\r\n        return ProjectInfoSuite.currentPlatformVersions;\r\n\r\n      default:\r\n        return ProjectInfoSuite.defaultInDevelopment; // default is all infogenerators except cooperative add-on and sharing\r\n    }\r\n  }\r\n\r\n  static getSuiteString(suite: ProjectInfoSuite) {\r\n    switch (suite) {\r\n      case ProjectInfoSuite.sharing:\r\n        return \"sharing\";\r\n\r\n      case ProjectInfoSuite.sharingStrict:\r\n        return \"sharingstrict\";\r\n\r\n      case ProjectInfoSuite.cooperativeAddOn:\r\n        return \"addon\";\r\n\r\n      case ProjectInfoSuite.currentPlatformVersions:\r\n        return \"currentplatform\";\r\n\r\n      default:\r\n        return \"all\";\r\n    }\r\n  }\r\n\r\n  get completedGeneration() {\r\n    return this._completedGeneration;\r\n  }\r\n\r\n  /**\r\n   * Mark generation as complete. Used when results are provided externally\r\n   * (e.g., from a web worker).\r\n   */\r\n  async markGenerationCompleteAsync() {\r\n    this._completedGeneration = true;\r\n    this._isGenerating = false;\r\n\r\n    // Build the itemsByStoragePath index from items array\r\n    this._rebuildItemsByStoragePath();\r\n\r\n    // Aggregate features from info items (needed for summary display)\r\n    this.aggregateFeatures();\r\n\r\n    // Build contentIndex from project files.\r\n    // The web worker path doesn't populate the contentIndex (it only streams\r\n    // validation items), so we must build it on the main thread.\r\n    this._buildContentIndexFromProject();\r\n\r\n    // Populate cross-reference and type annotations in the contentIndex.\r\n    // These are normally populated by generators running in the worker,\r\n    // but the worker's ContentIndex is not transferred back.\r\n    await this._populateContentIndexAnnotationsAsync();\r\n  }\r\n\r\n  /**\r\n   * Runs lightweight annotation-producing generators against the contentIndex.\r\n   * This populates cross-reference annotations (geometry IDs, animation names,\r\n   * entity/block/item types, etc.) that power autocomplete suggestions.\r\n   *\r\n   * Called after _buildContentIndexFromProject() in the web worker path,\r\n   * since the worker's ContentIndex (with all annotations) is not transferred back.\r\n   * The project files are already loaded in memory, so this runs quickly.\r\n   */\r\n  private async _populateContentIndexAnnotationsAsync() {\r\n    if (!this.project || !this.contentIndex) {\r\n      return;\r\n    }\r\n\r\n    // CrossReferenceIndexGenerator: geometry, animation, animation controller,\r\n    // render controller, particle, fog, sound, loot table, recipe, biome,\r\n    // spawn rule, dialogue, function, structure annotations\r\n    const crossRefGen = new CrossReferenceIndexGenerator();\r\n    await crossRefGen.generate(this.project, this.contentIndex);\r\n\r\n    // TypesInfoGenerator: entity, block, item, feature type annotations\r\n    const typesGen = new TypesInfoGenerator();\r\n    await typesGen.generate(this.project, this.contentIndex);\r\n    // Note: generate() returns info items which we discard here \u2014\r\n    // we already have the info items from the worker stream.\r\n  }\r\n\r\n  /**\r\n   * Populates the contentIndex by scanning all project items and their files.\r\n   * This is needed when the info set was generated via a web worker, which\r\n   * doesn't build or transfer the content index.\r\n   */\r\n  private _buildContentIndexFromProject() {\r\n    if (!this.project) {\r\n      return;\r\n    }\r\n\r\n    const ci = new ContentIndex();\r\n    ci.iteration = new Date().getTime();\r\n\r\n    for (const projectItem of this.project.items) {\r\n      if (!projectItem.projectPath) {\r\n        continue;\r\n      }\r\n\r\n      const file = projectItem.defaultFile;\r\n\r\n      if (file) {\r\n        const fileName = file.name;\r\n\r\n        ci.insert(StorageUtilities.getBaseFromName(fileName), projectItem.projectPath);\r\n        ci.insert(file.storageRelativePath, projectItem.projectPath);\r\n\r\n        if (file.content && typeof file.content === \"string\") {\r\n          const fileExtension = StorageUtilities.getTypeFromName(fileName);\r\n\r\n          switch (fileExtension) {\r\n            case \"json\":\r\n              ci.parseJsonContent(projectItem.projectPath, file.content);\r\n              break;\r\n            case \"ts\":\r\n            case \"js\":\r\n            case \"mjs\":\r\n              ci.parseJsContent(projectItem.projectPath, file.content);\r\n              break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.contentIndex = ci;\r\n  }\r\n\r\n  /**\r\n   * Rebuilds the itemsByStoragePath index from the items array.\r\n   * This is needed when items are set externally (e.g., from a web worker).\r\n   */\r\n  private _rebuildItemsByStoragePath() {\r\n    this.itemsByStoragePath = {};\r\n\r\n    for (const item of this.items) {\r\n      if (item.projectItem) {\r\n        const path = item.projectItem.projectPath;\r\n        if (path && typeof path === \"string\") {\r\n          if (!this.itemsByStoragePath[path]) {\r\n            this.itemsByStoragePath[path] = [];\r\n          }\r\n          this.itemsByStoragePath[path]?.push(item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  get errorAndFailCount() {\r\n    let count = 0;\r\n\r\n    for (const item of this.items) {\r\n      if (\r\n        item.itemType === InfoItemType.error ||\r\n        item.itemType === InfoItemType.internalProcessingError ||\r\n        item.itemType === InfoItemType.testCompleteFail\r\n      ) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  get errorFailWarnCount() {\r\n    let count = 0;\r\n\r\n    for (const item of this.items) {\r\n      if (\r\n        item.itemType === InfoItemType.error ||\r\n        item.itemType === InfoItemType.warning ||\r\n        item.itemType === InfoItemType.internalProcessingError ||\r\n        item.itemType === InfoItemType.testCompleteFail\r\n      ) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  get errorFailWarnString() {\r\n    let str: string[] = [];\r\n\r\n    for (const item of this.items) {\r\n      if (\r\n        item.itemType === InfoItemType.error ||\r\n        item.itemType === InfoItemType.warning ||\r\n        item.itemType === InfoItemType.internalProcessingError ||\r\n        item.itemType === InfoItemType.testCompleteFail\r\n      ) {\r\n        str.push(item.toString());\r\n      }\r\n    }\r\n\r\n    return str.join(\"\\n\");\r\n  }\r\n\r\n  constructor(\r\n    project?: Project,\r\n    suite?: ProjectInfoSuite,\r\n    excludeTests?: string[],\r\n    info?: IProjectInfo,\r\n    items?: IInfoItemData[],\r\n    index?: ContentIndex,\r\n    performAggressiveCleanup?: boolean\r\n  ) {\r\n    this.project = project;\r\n    this.info = info ? info : {};\r\n    this.contentIndex = index ? index : new ContentIndex();\r\n    this.performAggressiveCleanup = performAggressiveCleanup ?? false;\r\n\r\n    if (items) {\r\n      for (const item of items) {\r\n        let projectItem = undefined;\r\n\r\n        if (item.p) {\r\n          if (project) {\r\n            projectItem = project.getItemByProjectPath(item.p);\r\n          }\r\n\r\n          if (!this.itemsByStoragePath[item.p]) {\r\n            this.itemsByStoragePath[item.p] = [];\r\n          }\r\n\r\n          let projectInfoItem = new ProjectInfoItem(\r\n            item.iTp,\r\n            item.gId,\r\n            item.gIx,\r\n            item.m,\r\n            projectItem,\r\n            item.d,\r\n            item.iId,\r\n            item.c,\r\n            item.p\r\n          );\r\n\r\n          this.itemsByStoragePath[item.p]?.push(projectInfoItem);\r\n          this.items.push(projectInfoItem);\r\n        } else {\r\n          this.items.push(\r\n            new ProjectInfoItem(item.iTp, item.gId, item.gIx, item.m, projectItem, item.d, item.iId, item.c)\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    if (suite) {\r\n      this.suite = suite;\r\n    } else {\r\n      this.suite = ProjectInfoSuite.defaultInDevelopment;\r\n    }\r\n\r\n    if (index) {\r\n      if (info) {\r\n        for (const key in info) {\r\n          const val = (info as any)[key];\r\n\r\n          if (val && typeof val === \"string\") {\r\n            if (ProjectInfoSet.isAggregableFieldName(key)) {\r\n              index.parseTextContent(\"inspector\", val);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (excludeTests) {\r\n      const excludeTestList = [];\r\n\r\n      for (const excludeTest of excludeTests) {\r\n        const vals = excludeTest.trim().split(\",\");\r\n\r\n        for (const val of vals) {\r\n          const valD = val.toUpperCase().trim();\r\n\r\n          if (valD.length > 0) {\r\n            excludeTestList.push(valD);\r\n          }\r\n        }\r\n      }\r\n\r\n      this._excludeTests = excludeTestList;\r\n    }\r\n  }\r\n\r\n  static getTopicData(id: string, index: number): IProjectInfoTopicData | undefined {\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    // First, try to get topic data from form.json file (synchronously if already loaded)\r\n    const formTopicData = InfoGeneratorTopicUtilities.getTopicDataSync(id, index);\r\n    if (formTopicData) {\r\n      return formTopicData;\r\n    }\r\n\r\n    // Fall back to generator's getTopicData method if available\r\n    const gen = ProjectInfoSet._generatorsById[id];\r\n\r\n    if (gen && typeof (gen as IProjectInfoGeneratorBase).getTopicData === \"function\") {\r\n      return (gen as IProjectInfoGeneratorBase).getTopicData!(index);\r\n    }\r\n\r\n    for (const gen of GeneratorRegistrations.projectGenerators) {\r\n      if (gen.id === id) {\r\n        this._generatorsById[id] = gen;\r\n\r\n        if (typeof (gen as IProjectInfoGeneratorBase).getTopicData === \"function\") {\r\n          return (gen as IProjectInfoGeneratorBase).getTopicData!(index);\r\n        }\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  private static _getLineLocationFromIndex(content: string, index: number) {\r\n    const lineNumber = content.substring(0, index).split(\"\\n\").length;\r\n    const lastLineBreak = content.lastIndexOf(\"\\n\", index - 1);\r\n    const column = index - (lastLineBreak + 1) + 1;\r\n    return { lineNumber, column };\r\n  }\r\n\r\n  static async findLineLocationForItem(\r\n    content: string,\r\n    item: ProjectInfoItem\r\n  ): Promise<{ lineNumber: number; column: number } | undefined> {\r\n    if (!content) {\r\n      return undefined;\r\n    }\r\n\r\n    const directMatch = (matchText: string | undefined) => {\r\n      if (!matchText) {\r\n        return undefined;\r\n      }\r\n\r\n      const index = content.indexOf(matchText);\r\n      if (index >= 0) {\r\n        return ProjectInfoSet._getLineLocationFromIndex(content, index);\r\n      }\r\n\r\n      return undefined;\r\n    };\r\n\r\n    const contentLocation = directMatch(item.content);\r\n    if (contentLocation) {\r\n      return contentLocation;\r\n    }\r\n\r\n    if (typeof item.data === \"string\") {\r\n      const normalizedData = item.data.startsWith(\"Relevant line: \")\r\n        ? item.data.substring(\"Relevant line: \".length)\r\n        : item.data;\r\n      const dataLocation = directMatch(normalizedData);\r\n      if (dataLocation) {\r\n        return dataLocation;\r\n      }\r\n    }\r\n\r\n    if (item.generatorId) {\r\n      try {\r\n        const topicData = await InfoGeneratorTopicUtilities.getTopicData(item.generatorId, item.generatorIndex);\r\n        if (topicData?.suggestedLineToken) {\r\n          const token = topicData.suggestedLineToken;\r\n          const escapedToken = token.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n          if (topicData.suggestedLineShouldHaveData && item.data) {\r\n            const dataStr = String(item.data);\r\n            const escapedData = dataStr.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n            const combinedPattern = new RegExp(\r\n              `\"${escapedToken}\"[^\\\\n]*${escapedData}|${escapedData}[^\\\\n]*\"${escapedToken}\"`,\r\n              \"i\"\r\n            );\r\n            const combinedMatch = content.match(combinedPattern);\r\n            if (combinedMatch && combinedMatch.index !== undefined) {\r\n              return ProjectInfoSet._getLineLocationFromIndex(content, combinedMatch.index);\r\n            }\r\n          }\r\n\r\n          const tokenPattern = new RegExp(`\"${escapedToken}\"\\\\s*:\\\\s*[^,}\\\\]]+`, \"i\");\r\n          const match = content.match(tokenPattern);\r\n          if (match && match.index !== undefined) {\r\n            return ProjectInfoSet._getLineLocationFromIndex(content, match.index);\r\n          }\r\n\r\n          const simpleIndex = content.indexOf(`\"${token}\"`);\r\n          if (simpleIndex >= 0) {\r\n            return ProjectInfoSet._getLineLocationFromIndex(content, simpleIndex);\r\n          }\r\n        }\r\n      } catch {\r\n        // Ignore errors loading topic data\r\n      }\r\n    }\r\n\r\n    if (item.generatorId === \"FORMATVER\" || item.generatorId?.includes(\"FORMAT\")) {\r\n      const versionPattern = /\"format_version\"\\s*:\\s*\"[^\"]+\"/i;\r\n      const match = content.match(versionPattern);\r\n      if (match && match.index !== undefined) {\r\n        return ProjectInfoSet._getLineLocationFromIndex(content, match.index);\r\n      }\r\n    }\r\n\r\n    if (item.generatorId === \"ENTITYTYPE\" || item.generatorId === \"BLOCKTYPE\" || item.generatorId === \"ITEMTYPE\") {\r\n      const identifierPattern = /\"identifier\"\\s*:\\s*\"[^\"]+\"/;\r\n      const match = content.match(identifierPattern);\r\n      if (match && match.index !== undefined) {\r\n        return ProjectInfoSet._getLineLocationFromIndex(content, match.index);\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getCountByType(itemType: InfoItemType) {\r\n    let count = 0;\r\n\r\n    for (const item of this.items) {\r\n      if (item.itemType === itemType) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  getSummaryByType(itemType: InfoItemType) {\r\n    let str: string[] = [];\r\n\r\n    for (const item of this.items) {\r\n      if (str.length < 15 && item.itemType === itemType) {\r\n        str.push(item.toString());\r\n      }\r\n    }\r\n\r\n    return str.join(\"\\n\");\r\n  }\r\n\r\n  matchesSuite(\r\n    generator: IProjectFileInfoGenerator | IProjectInfoGenerator | IProjectItemInfoGenerator | IProjectInfoGeneratorBase\r\n  ) {\r\n    if (\r\n      this.suite === ProjectInfoSuite.defaultInDevelopment &&\r\n      !TestsToExcludeFromDefaultSuite.includes(generator.id)\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    if (this.suite === ProjectInfoSuite.sharing || this.suite === ProjectInfoSuite.sharingStrict) {\r\n      if (generator.id === \"SHARING\") {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    if (this.suite === ProjectInfoSuite.sharingStrict) {\r\n      if (generator.id === \"LANGFILES\" || generator.id === \"VANDUPES\") {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    if (this.suite === ProjectInfoSuite.currentPlatformVersions) {\r\n      if (\r\n        generator.id === \"MINENGINEVER\" ||\r\n        generator.id === \"BASEGAMEVER\" ||\r\n        generator.id === \"FORMATVER\" ||\r\n        generator.id === \"WORLDDATA\" ||\r\n        generator.id === \"CHKMANIF\"\r\n      ) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    if (this.suite === ProjectInfoSuite.cooperativeAddOn) {\r\n      if (\r\n        generator.id.indexOf(\"CADDON\") >= 0 ||\r\n        generator.id === \"PACKSIZE\" ||\r\n        generator.id === \"STRICT\" ||\r\n        generator.id === \"TEXTURE\" ||\r\n        generator.id === \"MINENGINEVER\" ||\r\n        generator.id === \"WORLDDATA\"\r\n      ) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Generate info items for the project.\r\n   * @param force If true, regenerate even if already completed.\r\n   * @param skipRelationsProcessing If true, skip the processRelations call (useful when relations\r\n   *        have already been processed, e.g., in a combined worker operation).\r\n   * @param onProgress Optional callback for progress updates (useful for worker thread communication).\r\n   */\r\n  async generateForProject(\r\n    force?: boolean,\r\n    skipRelationsProcessing?: boolean,\r\n    onProgress?: (message: string, percentComplete?: number) => void\r\n  ) {\r\n    if (force === true && this._completedGeneration) {\r\n      this._completedGeneration = false;\r\n      this._isGenerating = false;\r\n    }\r\n\r\n    if (this._completedGeneration) {\r\n      return;\r\n    }\r\n\r\n    if (!skipRelationsProcessing) {\r\n      await this.project?.processRelations();\r\n    }\r\n\r\n    if (this._isGenerating) {\r\n      const pendingGenerate = this._pendingGenerateRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingGenerate.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isGenerating = true;\r\n      const generationStartTime = Date.now();\r\n\r\n      if (!this.project) {\r\n        Log.throwUnexpectedUndefined(\"PISGFP\");\r\n        return;\r\n      }\r\n\r\n      let baseValidationMessage = \"Validating '\" + this.project.simplifiedName + \"'\";\r\n\r\n      const valOperId = await this.project?.creatorTools.notifyOperationStarted(\r\n        baseValidationMessage + \" (0%)\",\r\n        StatusTopic.validation\r\n      );\r\n\r\n      this.info.summary = undefined;\r\n\r\n      const projGenerators: IProjectInfoGenerator[] = GeneratorRegistrations.projectGenerators;\r\n      const itemGenerators: IProjectItemInfoGenerator[] = GeneratorRegistrations.itemGenerators;\r\n      const fileGenerators: IProjectFileInfoGenerator[] = GeneratorRegistrations.fileGenerators;\r\n\r\n      const genItems: ProjectInfoItem[] = [];\r\n      const genItemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined } = {};\r\n      const genContentIndex = new ContentIndex();\r\n\r\n      genContentIndex.iteration = new Date().getTime();\r\n\r\n      await this.project.loc.load();\r\n      await Database.loadVanillaCatalog();\r\n\r\n      // Preload all topic forms for generators so sync lookups work\r\n      const allGeneratorIds = [\r\n        ...projGenerators.map((g) => g.id),\r\n        ...itemGenerators.map((g) => g.id),\r\n        ...fileGenerators.map((g) => g.id),\r\n      ];\r\n      await InfoGeneratorTopicUtilities.preloadAllForms(allGeneratorIds);\r\n\r\n      if (this.project?.errorState === ProjectErrorState.cabinetFileCouldNotBeProcessed) {\r\n        genItems.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.internalProcessingError,\r\n            \"PROJECTMETA\",\r\n            500,\r\n            this.project.simplifiedName + \": \" + this.project.errorMessage\r\n          )\r\n        );\r\n      } else {\r\n        const projectFolder = await this.project.ensureProjectFolder();\r\n\r\n        const generatorTimings: { phase: string; id: string; durationMs: number }[] = [];\r\n\r\n        const preProcessStart = Date.now();\r\n        await this.preProcessFolder(\r\n          this.project,\r\n          projectFolder,\r\n          genItems,\r\n          genItemsByStoragePath,\r\n          genContentIndex,\r\n          fileGenerators,\r\n          0\r\n        );\r\n        generatorTimings.push({\r\n          phase: \"preprocess\",\r\n          id: \"preProcessFolder\",\r\n          durationMs: Date.now() - preProcessStart,\r\n        });\r\n\r\n        for (let i = 0; i < projGenerators.length; i++) {\r\n          const gen = projGenerators[i];\r\n\r\n          if ((!this._excludeTests || !this._excludeTests.includes(gen.id)) && gen && this.matchesSuite(gen)) {\r\n            const projGenPercent = Math.floor(10 + (i / projGenerators.length) * 20); // 10-30%\r\n            await this.project?.creatorTools.notifyOperationUpdate(\r\n              valOperId,\r\n              baseValidationMessage + \" - \" + gen.title + \" (\" + projGenPercent + \"%)\",\r\n              StatusTopic.validation\r\n            );\r\n\r\n            // Send progress to worker callback if provided\r\n            if (onProgress) {\r\n              const percent = Math.floor(10 + (i / projGenerators.length) * 20); // 10-30%\r\n              onProgress(`Validating: ${gen.title}`, percent);\r\n            }\r\n\r\n            GeneratorRegistrations.configureForSuite(gen, this.suite);\r\n\r\n            try {\r\n              const genStart = Date.now();\r\n              const results = await gen.generate(this.project, genContentIndex);\r\n              generatorTimings.push({ phase: \"project\", id: gen.id, durationMs: Date.now() - genStart });\r\n\r\n              for (const item of results) {\r\n                this.pushItem(genItems, genItemsByStoragePath, item);\r\n              }\r\n            } catch (e: any) {\r\n              // V--- add a breakpoint to the line below to catch validator exceptions (1 of 3) ---V\r\n              genItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.internalProcessingError,\r\n                  gen.id,\r\n                  500,\r\n                  this.project.simplifiedName + \": \" + e.message + (e.stack ? \" (\" + e.stack + \")\" : \"\")\r\n                )\r\n              );\r\n              if (e && (!e.message || !e.message.indexOf || e.message.indexOf(\"etwork \") < 0)) {\r\n                Log.debugAlert(e);\r\n              } else {\r\n                this.project?.creatorTools.notifyStatusUpdate(\r\n                  \"Could not connect to network to retrieve resources for validation. Details: \" + e.toString()\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        const itemsCopy = this.project.getItemsCopy();\r\n        const itemGenTimings: { [id: string]: number } = {};\r\n        for (const gen of itemGenerators) {\r\n          itemGenTimings[gen.id] = 0;\r\n        }\r\n        const itemLoopStart = Date.now();\r\n\r\n        for (let i = 0; i < itemsCopy.length; i++) {\r\n          const pi = itemsCopy[i];\r\n\r\n          if (i % ItemBatchSize === ItemBatchSize - 1) {\r\n            const itemPercent = Math.floor(30 + (i / itemsCopy.length) * 50); // 30-80%\r\n            await this.project?.creatorTools.notifyOperationUpdate(\r\n              valOperId,\r\n              baseValidationMessage + \" - items (\" + itemPercent + \"%)\",\r\n              StatusTopic.validation\r\n            );\r\n\r\n            // Send progress to worker callback if provided\r\n            if (onProgress) {\r\n              onProgress(`Validating items`, itemPercent);\r\n            }\r\n          }\r\n\r\n          if (!pi.isContentLoaded) {\r\n            await pi.loadContent();\r\n          }\r\n\r\n          for (let j = 0; j < itemGenerators.length; j++) {\r\n            const gen = itemGenerators[j];\r\n\r\n            if ((!this._excludeTests || !this._excludeTests.includes(gen.id)) && this.matchesSuite(gen)) {\r\n              GeneratorRegistrations.configureForSuite(gen, this.suite);\r\n\r\n              try {\r\n                const itemGenStart = Date.now();\r\n                const results = await gen.generate(pi, genContentIndex, {\r\n                  performAggressiveCleanup: this.performAggressiveCleanup,\r\n                  constrainResourceConsumption: this.constrainResourceConsumption,\r\n                  onProgress: onProgress,\r\n                });\r\n                itemGenTimings[gen.id] += Date.now() - itemGenStart;\r\n\r\n                for (const item of results) {\r\n                  this.pushItem(genItems, genItemsByStoragePath, item);\r\n                }\r\n              } catch (e: any) {\r\n                // V--- add a breakpoint to the line below to catch validator exceptions (2 of 3) ---V\r\n                genItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.internalProcessingError,\r\n                    gen.id,\r\n                    501,\r\n                    \"IP2:\" + this.project.simplifiedName + \": \" + e.toString()\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        generatorTimings.push({ phase: \"items-loop\", id: \"allItemGenerators\", durationMs: Date.now() - itemLoopStart });\r\n        for (const gen of itemGenerators) {\r\n          if (itemGenTimings[gen.id] > 0) {\r\n            generatorTimings.push({ phase: \"item\", id: gen.id, durationMs: itemGenTimings[gen.id] });\r\n          }\r\n        }\r\n\r\n        const processFolderStart = Date.now();\r\n        await this.processFolder(\r\n          this.project,\r\n          projectFolder,\r\n          genItems,\r\n          genItemsByStoragePath,\r\n          genContentIndex,\r\n          fileGenerators,\r\n          0\r\n        );\r\n        generatorTimings.push({\r\n          phase: \"postprocess\",\r\n          id: \"processFolder\",\r\n          durationMs: Date.now() - processFolderStart,\r\n        });\r\n\r\n        // Log timing breakdown\r\n        generatorTimings.sort((a, b) => b.durationMs - a.durationMs);\r\n        const totalValidationMs = Date.now() - generationStartTime;\r\n        Log.verbose(`[Validation] Total validation time: ${totalValidationMs}ms`);\r\n        Log.verbose(`[Validation] Top generators by time:`);\r\n        for (const t of generatorTimings.slice(0, 20)) {\r\n          Log.verbose(`[Validation]   ${t.phase.padEnd(12)} ${t.id.padEnd(45)} ${t.durationMs}ms`);\r\n        }\r\n      }\r\n\r\n      await this.project?.creatorTools.notifyOperationUpdate(\r\n        valOperId,\r\n        baseValidationMessage + \" - finishing (95%)\",\r\n        StatusTopic.validation\r\n      );\r\n\r\n      this.addTestSummations(genItems, genItemsByStoragePath, projGenerators, this._excludeTests);\r\n      this.addTestSummations(genItems, genItemsByStoragePath, itemGenerators, this._excludeTests);\r\n      this.addTestSummations(genItems, genItemsByStoragePath, fileGenerators, this._excludeTests);\r\n\r\n      genItems.sort((a: ProjectInfoItem, b: ProjectInfoItem) => {\r\n        if (a.generatorId !== b.generatorId) {\r\n          return Utilities.staticCompare(a.generatorId, b.generatorId);\r\n        }\r\n\r\n        if (a.generatorIndex !== b.generatorIndex) {\r\n          return a.generatorIndex - b.generatorIndex;\r\n        }\r\n\r\n        const aPath = a.projectItemPath;\r\n        const bPath = b.projectItemPath;\r\n\r\n        if (aPath !== bPath && aPath && bPath) {\r\n          return Utilities.staticCompare(aPath, bPath);\r\n        }\r\n\r\n        if (aPath !== bPath && aPath) {\r\n          return 1;\r\n        }\r\n\r\n        if (aPath !== bPath && bPath) {\r\n          return -1;\r\n        }\r\n\r\n        if (a.message !== b.message && a.message && b.message) {\r\n          return Utilities.staticCompare(a.message, b.message);\r\n        }\r\n\r\n        if (a.message !== b.message && a.message) {\r\n          return 1;\r\n        }\r\n\r\n        if (a.message !== b.message && b.message) {\r\n          return -1;\r\n        }\r\n\r\n        if (a.data !== b.data && a.data && b.data && typeof b.data === \"string\" && typeof a.data === \"string\") {\r\n          return Utilities.staticCompare(a.data, b.data);\r\n        }\r\n\r\n        if (a.data !== b.data && a.data) {\r\n          return 1;\r\n        }\r\n\r\n        if (a.data !== b.data && b.data) {\r\n          return -1;\r\n        }\r\n\r\n        return 0;\r\n      });\r\n\r\n      this.items = genItems;\r\n\r\n      this.itemsByStoragePath = genItemsByStoragePath;\r\n      this.contentIndex = genContentIndex;\r\n\r\n      this._completedGeneration = true;\r\n\r\n      this.generateProjectMetaInfo();\r\n\r\n      const pendingLoad = this._pendingGenerateRequests;\r\n      this._pendingGenerateRequests = [];\r\n\r\n      this.info.errorCount = this.getCountByType(InfoItemType.error);\r\n      this.info.internalProcessingErrorCount = this.getCountByType(InfoItemType.internalProcessingError);\r\n      this.info.warningCount = this.getCountByType(InfoItemType.warning);\r\n      this.info.testSuccessCount = this.getCountByType(InfoItemType.testCompleteSuccess);\r\n      this.info.testFailCount = this.getCountByType(InfoItemType.testCompleteFail);\r\n      this.info.testNotApplicableCount = this.getCountByType(InfoItemType.testCompleteNoApplicableItemsFound);\r\n\r\n      this.info.errorSummary = this.getSummaryByType(InfoItemType.error);\r\n      this.info.internalProcessingErrorSummary = this.getSummaryByType(InfoItemType.internalProcessingError);\r\n      this.info.warningSummary = this.getSummaryByType(InfoItemType.warning);\r\n      this.info.testFailSummary = this.getSummaryByType(InfoItemType.testCompleteFail);\r\n\r\n      const generationEndTime = Date.now();\r\n\r\n      this.info.infoGenerationTime = generationEndTime - generationStartTime;\r\n\r\n      if (this.project) {\r\n        this.info.endToEndGenerationTime = generationEndTime - this.project.creationTime;\r\n      }\r\n\r\n      if (\r\n        this.suite === ProjectInfoSuite.defaultInDevelopment ||\r\n        this.suite === ProjectInfoSuite.sharing ||\r\n        this.suite === ProjectInfoSuite.sharingStrict\r\n      ) {\r\n        this.info.reds = this.getRed();\r\n      }\r\n\r\n      this._isGenerating = false;\r\n\r\n      if (valOperId !== undefined) {\r\n        // End the operation - progress bar disappears immediately\r\n        await this.project?.creatorTools.notifyOperationEnded(valOperId, \"\", StatusTopic.validation);\r\n      }\r\n\r\n      if (this.project) {\r\n        const errorTypes: { [type: string]: number } = {};\r\n        for (const item of genItems) {\r\n          if (item.itemType === InfoItemType.internalProcessingError) {\r\n            const errorType = item.generatorId || \"unknown\";\r\n            errorTypes[errorType] = (errorTypes[errorType] || 0) + 1;\r\n          }\r\n        }\r\n\r\n        const properties: { [key: string]: string | number } = {\r\n          [TelemetryProperties.PROJECT_ITEM_COUNT]: this.project.items.length,\r\n          [TelemetryProperties.INTERNAL_PROCESSING_ERROR_COUNT]: this.info.internalProcessingErrorCount || 0,\r\n          [TelemetryProperties.SUITE_TYPE]: this.suite,\r\n        };\r\n\r\n        const errorTypeKeys = Object.keys(errorTypes);\r\n\r\n        if (errorTypeKeys.length > 0) {\r\n          properties[TelemetryProperties.ERROR_TYPES] = errorTypeKeys.join(\",\");\r\n        }\r\n\r\n        telemetryService.trackEvent({\r\n          name: TelemetryEvents.VALIDATION_COMPLETED,\r\n          properties,\r\n        });\r\n      }\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  disconnectFromProject() {\r\n    this.project = undefined;\r\n\r\n    for (const pi of this.items) {\r\n      pi.disconnect();\r\n    }\r\n  }\r\n\r\n  addTestSummations(\r\n    genItems: ProjectInfoItem[],\r\n    genItemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined },\r\n    generators: IProjectInfoGeneratorBase[],\r\n    excludeTests?: string[]\r\n  ) {\r\n    for (const gen of generators) {\r\n      if ((!excludeTests || !excludeTests.includes(gen.id)) && this.matchesSuite(gen)) {\r\n        const results = ProjectInfoSet.getItemsInCollection(genItems, gen.id);\r\n\r\n        if (results.length === 0 && !gen.canAlwaysProcess) {\r\n          this.pushItem(\r\n            genItems,\r\n            genItemsByStoragePath,\r\n            new ProjectInfoItem(\r\n              InfoItemType.testCompleteNoApplicableItemsFound,\r\n              gen.id,\r\n              2,\r\n              `No applicable items found for test ${gen.title} (${gen.id})`\r\n            )\r\n          );\r\n        } else {\r\n          let errorCount = 0;\r\n          let internalErrorCount = 0;\r\n          let foundTestVerdict = false;\r\n\r\n          for (const result of results) {\r\n            if (\r\n              result.itemType === InfoItemType.testCompleteFail ||\r\n              result.itemType === InfoItemType.testCompleteSuccess ||\r\n              result.itemType === InfoItemType.testCompleteNoApplicableItemsFound\r\n            ) {\r\n              foundTestVerdict = true;\r\n            } else if (result.itemType === InfoItemType.error) {\r\n              errorCount++;\r\n            } else if (result.itemType === InfoItemType.internalProcessingError) {\r\n              internalErrorCount++;\r\n            }\r\n          }\r\n\r\n          if (!foundTestVerdict) {\r\n            if (errorCount > 0 && internalErrorCount <= 0) {\r\n              this.pushItem(\r\n                genItems,\r\n                genItemsByStoragePath,\r\n                new ProjectInfoItem(\r\n                  InfoItemType.testCompleteFail,\r\n                  gen.id,\r\n                  0,\r\n                  `Found ${errorCount} error${errorCount !== 1 ? \"s\" : \"\"} in ${gen.title} check`\r\n                )\r\n              );\r\n            } else if (internalErrorCount > 0 && errorCount <= 0) {\r\n              this.pushItem(\r\n                genItems,\r\n                genItemsByStoragePath,\r\n                new ProjectInfoItem(\r\n                  InfoItemType.testCompleteFail,\r\n                  gen.id,\r\n                  0,\r\n                  `Found ${internalErrorCount} internal error${internalErrorCount !== 1 ? \"s\" : \"\"} in ${gen.title} check. This may be a temporary issue with the test run.`\r\n                )\r\n              );\r\n            } else if (errorCount + internalErrorCount > 0) {\r\n              this.pushItem(\r\n                genItems,\r\n                genItemsByStoragePath,\r\n                new ProjectInfoItem(\r\n                  InfoItemType.testCompleteFail,\r\n                  gen.id,\r\n                  0,\r\n                  `Found ${errorCount} error${errorCount !== 1 ? \"s\" : \"\"} and ${internalErrorCount} internal error${internalErrorCount !== 1 ? \"s\" : \"\"} in ${gen.title} check`\r\n                )\r\n              );\r\n            } else {\r\n              this.pushItem(\r\n                genItems,\r\n                genItemsByStoragePath,\r\n                new ProjectInfoItem(InfoItemType.testCompleteSuccess, gen.id, 1, `${gen.title} completed successfully`)\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  pushItem(\r\n    itemSet: ProjectInfoItem[],\r\n    itemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined },\r\n    item: ProjectInfoItem\r\n  ) {\r\n    if (\r\n      item.projectItem &&\r\n      item.projectItem.projectPath &&\r\n      item.itemType !== InfoItemType.info &&\r\n      item.itemType !== InfoItemType.featureAggregate\r\n    ) {\r\n      if (!itemsByStoragePath[item.projectItem.projectPath]) {\r\n        itemsByStoragePath[item.projectItem.projectPath] = [];\r\n      }\r\n\r\n      itemsByStoragePath[item.projectItem.projectPath]?.push(item);\r\n    }\r\n\r\n    itemSet.push(item);\r\n  }\r\n\r\n  public mergeFeatureSetsAndFieldsTo(\r\n    allFeatureSets: { [setName: string]: { [measureName: string]: number | undefined } | undefined },\r\n    allFields: { [featureName: string]: boolean | undefined }\r\n  ) {\r\n    if (!this.info || !this.info.featureSets) {\r\n      return;\r\n    }\r\n\r\n    for (const str in this.info) {\r\n      if (str !== \"features\") {\r\n        if (Utilities.isUsableAsObjectKey(str)) {\r\n          allFields[str] = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const str in allFields) {\r\n      let inf = this.info as any;\r\n\r\n      if (ProjectInfoSet.isAggregableFieldName(str) && Utilities.isUsableAsObjectKey(str)) {\r\n        if (inf[str] === undefined) {\r\n          inf[str] = \"\";\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const featureName in this.info.featureSets) {\r\n      if (Utilities.isUsableAsObjectKey(featureName)) {\r\n        const myFeature = this.info.featureSets[featureName];\r\n\r\n        if (myFeature !== undefined) {\r\n          let allFeature = allFeatureSets[featureName];\r\n\r\n          if (allFeature === undefined) {\r\n            allFeature = {};\r\n            allFeatureSets[featureName] = allFeature;\r\n          }\r\n\r\n          for (const measureName in myFeature) {\r\n            if (Utilities.isUsableAsObjectKey(measureName)) {\r\n              const measureVal = myFeature[measureName];\r\n\r\n              if (measureVal !== undefined) {\r\n                let allMeasureVal = allFeature[measureName];\r\n\r\n                if (allMeasureVal === undefined) {\r\n                  allMeasureVal = measureVal;\r\n                } else {\r\n                  allMeasureVal += measureVal;\r\n                }\r\n\r\n                allFeature[measureName] = allMeasureVal;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  ensureGenerators() {\r\n    if (!this.info) {\r\n      return;\r\n    }\r\n\r\n    if (this.info.summary !== undefined) {\r\n      return;\r\n    }\r\n\r\n    this.info.summary = {};\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const gId = this.items[i].generatorId;\r\n      const gIndex = this.items[i].generatorIndex;\r\n\r\n      let gen = this.info.summary[gId];\r\n\r\n      if (gen === undefined) {\r\n        gen = {};\r\n\r\n        this.info.summary[gId] = gen;\r\n      }\r\n\r\n      let genI = gen[gIndex];\r\n\r\n      if (genI === undefined) {\r\n        genI = {};\r\n\r\n        gen[gIndex] = genI;\r\n      }\r\n\r\n      const topicInfo = ProjectInfoSet.getTopicData(gId, gIndex);\r\n\r\n      if (topicInfo) {\r\n        genI.title = topicInfo.title;\r\n      }\r\n\r\n      if (genI.defaultMessage === undefined && this.items[i].message !== genI.title) {\r\n        genI.defaultMessage = this.items[i].message;\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const item = this.items[i];\r\n      const gId = item.generatorId;\r\n      const gIndex = item.generatorIndex;\r\n\r\n      let gen = this.info.summary[gId];\r\n\r\n      if (gen === undefined) {\r\n        gen = {};\r\n\r\n        this.info.summary[gId] = gen;\r\n      }\r\n\r\n      let genI = gen[gIndex];\r\n\r\n      if (genI === undefined) {\r\n        genI = {};\r\n\r\n        gen[gIndex] = genI;\r\n      }\r\n\r\n      if (item.itemType !== InfoItemType.featureAggregate) {\r\n        switch (item.itemType) {\r\n          case InfoItemType.error:\r\n            genI.errors = genI.errors ? genI.errors + 1 : 1;\r\n            break;\r\n          case InfoItemType.testCompleteFail:\r\n            genI.testCompleteFails = genI.testCompleteFails ? genI.testCompleteFails + 1 : 1;\r\n            break;\r\n          case InfoItemType.testCompleteSuccess:\r\n            genI.testCompleteSuccesses = genI.testCompleteSuccesses ? genI.testCompleteSuccesses + 1 : 1;\r\n            break;\r\n          case InfoItemType.warning:\r\n            genI.warnings = genI.warnings ? genI.warnings + 1 : 1;\r\n            break;\r\n          case InfoItemType.recommendation:\r\n            genI.recommendations = genI.recommendations ? genI.recommendations + 1 : 1;\r\n            break;\r\n          case InfoItemType.internalProcessingError:\r\n            genI.internalProcessingErrors = genI.internalProcessingErrors ? genI.internalProcessingErrors + 1 : 1;\r\n            break;\r\n        }\r\n      }\r\n\r\n      if (this.items[i].message === genI.defaultMessage || this.items[i].message === genI.title) {\r\n        this.items[i].message = undefined;\r\n      }\r\n    }\r\n  }\r\n\r\n  itemToString(item: ProjectInfoItem) {\r\n    let summaryString = item.typeSummaryShort + \": \";\r\n\r\n    summaryString += \"[\" + item.generatorId + Utilities.frontPadToLength(item.generatorIndex, 3, \"0\") + \"]\";\r\n\r\n    if (item.shortProjectItemPath) {\r\n      summaryString += \" (\" + item.shortProjectItemPath + \")\";\r\n    }\r\n\r\n    let effectiveMessage = this.getEffectiveMessage(item);\r\n\r\n    if (effectiveMessage.length > 0) {\r\n      summaryString += \" \" + effectiveMessage;\r\n    }\r\n\r\n    if (item.data) {\r\n      summaryString += \": \" + item.data;\r\n    }\r\n\r\n    const errorContent = item.contentSummary;\r\n\r\n    if (errorContent) {\r\n      summaryString += \" [in \" + errorContent + \"]\";\r\n    }\r\n\r\n    return summaryString;\r\n  }\r\n\r\n  static getExtendedMessageFromData(data: IProjectInfoData, item: IInfoItemData) {\r\n    return (\r\n      this.getEffectiveMessageFromData(data, item) + (item.d ? \": \" + item.d : \"\") + (item.p ? \" - \" + item.p : \"\")\r\n    );\r\n  }\r\n\r\n  static getEffectiveMessageFromData(data: IProjectInfoData, item: IInfoItemData) {\r\n    if (item.m !== undefined) {\r\n      return item.m;\r\n    }\r\n\r\n    if (data.info === undefined || data.info.summary === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    let gen = data.info.summary[item.gId];\r\n\r\n    if (gen === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    let genI = gen[item.gIx];\r\n\r\n    if (genI === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return genI.defaultMessage;\r\n  }\r\n\r\n  getEffectiveMessage(item: ProjectInfoItem) {\r\n    if (item.message !== undefined) {\r\n      return item.message;\r\n    }\r\n\r\n    if (this.info === undefined || this.info.summary === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    let gen = this.info.summary[item.generatorId];\r\n\r\n    if (gen === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    let genI = gen[item.generatorIndex];\r\n\r\n    if (genI === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return genI.defaultMessage ? genI.defaultMessage : \"\";\r\n  }\r\n\r\n  shouldIncludeInIndex(data: IInfoItemData) {\r\n    if (data.gId === \"JSON\" || data.gId === \"ESLINT\") {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  getDataObject(\r\n    sourceName?: string,\r\n    sourcePath?: string,\r\n    sourceHash?: string,\r\n    isIndexOnly?: boolean,\r\n    subsetReports?: IProjectMetaState[]\r\n  ): IProjectInfoData {\r\n    const items: IInfoItemData[] = [];\r\n\r\n    this.ensureGenerators();\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const dataObj = this.items[i].dataObject;\r\n\r\n      if (!isIndexOnly || this.shouldIncludeInIndex(dataObj)) {\r\n        items.push(dataObj);\r\n      }\r\n    }\r\n\r\n    Utilities.encodeObjectWithSequentialRunLengthEncodeUsingNegative(this.contentIndex.data.trie);\r\n\r\n    return {\r\n      info: this.info,\r\n      items: items,\r\n      index: this.contentIndex.data,\r\n      generatorName: constants.name,\r\n      suite: this.suite,\r\n      subsetReports: subsetReports,\r\n      generatorVersion: constants.version,\r\n      sourceName: sourceName,\r\n      sourcePath: sourcePath,\r\n      sourceHash: sourceHash,\r\n    };\r\n  }\r\n\r\n  static isAggregableFieldName(name: string) {\r\n    if (name !== \"features\" && name !== \"summary\" && name !== \"featureSets\" && name !== \"defaultIcon\") {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isAggregableFeatureMeasureName(name: string) {\r\n    if (!name.startsWith(\"#\")) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static getSummaryCsvHeaderLine(\r\n    projectInfo: IProjectInfo,\r\n    allFeatures: { [setName: string]: { [measureName: string]: number | undefined } | undefined }\r\n  ): string {\r\n    let csvLine = \"Name,Title,Area,\";\r\n\r\n    let fieldNames = [];\r\n\r\n    for (const str in projectInfo) {\r\n      if (ProjectInfoSet.isAggregableFieldName(str)) {\r\n        fieldNames.push(str);\r\n      }\r\n    }\r\n\r\n    fieldNames = fieldNames.sort(ProjectInfoSet.sortMinecraftFeatures);\r\n\r\n    for (const str of fieldNames) {\r\n      csvLine += Utilities.humanifyJsName(str) + \",\";\r\n    }\r\n\r\n    for (const str in projectInfo) {\r\n      if (ProjectInfoSet.isAggregableFieldName(str)) {\r\n        fieldNames.push(str);\r\n      }\r\n    }\r\n\r\n    for (const featureName in allFeatures) {\r\n      const feature = allFeatures[featureName];\r\n\r\n      if (feature) {\r\n        for (const measureName in feature) {\r\n          if (ProjectInfoSet.isAggregableFeatureMeasureName(measureName)) {\r\n            const measure = feature[measureName];\r\n\r\n            if (measure !== undefined) {\r\n              csvLine += ProjectInfoSet.getDataSummary(featureName + \" \" + measureName) + \",\";\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return csvLine;\r\n  }\r\n\r\n  getIndexJson(sourceName?: string, sourcePath?: string, sourceHash?: string) {\r\n    return JSON.stringify(this.getDataObject(sourceName, sourcePath, sourceHash, true));\r\n  }\r\n\r\n  getStrictIndexJson(sourceName?: string, sourcePath?: string, sourceHash?: string) {\r\n    const jsonO = this.getDataObject(sourceName, sourcePath, sourceHash, true);\r\n\r\n    if (jsonO) {\r\n      jsonO.info = undefined;\r\n      jsonO.items = undefined;\r\n    }\r\n\r\n    return JSON.stringify(jsonO);\r\n  }\r\n\r\n  getReportHtml(sourceName?: string, sourcePath?: string, sourceHash?: string): string {\r\n    const lines = [];\r\n\r\n    lines.push(\"<html><head>\");\r\n    lines.push(\"<script>\");\r\n    lines.push(`const _reportObjects = [];\r\n\r\nfunction _addReportJson(data) {\r\n  _reportObjects.push(data);\r\n}\r\n`);\r\n    const dataObject = this.getDataObject(sourceName, sourcePath, sourceHash);\r\n\r\n    dataObject.index = undefined;\r\n    lines.push(\"_addReportJson(\" + JSON.stringify(dataObject) + \");\");\r\n    lines.push(\"</script><script>\");\r\n    lines.push(`\r\n    function getDataName(name) {\r\n      if (typeof name === \"boolean\" || typeof name === \"number\") {\r\n        return name.toString();\r\n      }\r\n    \r\n      let retVal = \"\";\r\n    \r\n      for (let i = 0; i < name.length; i++) {\r\n        if (i === 0) {\r\n          retVal += name[i].toUpperCase();\r\n        } else {\r\n          if (name[i] >= \"A\" && name[i] <= \"Z\") {\r\n            retVal += \" \";\r\n          }\r\n          retVal += name[i];\r\n        }\r\n      }\r\n      return retVal;\r\n    }\r\n    \r\n    function getDataSummary(data) {\r\n      if (data) {\r\n        return data;\r\n      }\r\n      \r\n      if (typeof data === \"number\" || typeof data === \"boolean\") {\r\n        return data.toString();\r\n      }\r\n      \r\n      if (typeof data === \"object\") {\r\n        return JSON.stringify(data);\r\n      }\r\n    \r\n      return \"(not defined)\";\r\n    }  \r\n    \r\n    function getEmptySummary(data) {\r\n    \r\n      if (typeof data === \"object\") {\r\n        return JSON.stringify(data);\r\n      }\r\n      \r\n      if (typeof data === \"number\" || typeof data === \"boolean\") {\r\n        return data.toString();\r\n      }\r\n    \r\n      if (data) {\r\n        return data;\r\n      }\r\n      \r\n      return \"\";\r\n    }  \r\n\r\n    function getEffectiveMessage(reportObj, item) {\r\n      if (item.m !== undefined) {\r\n        return item.m;\r\n      }\r\n\r\n      if (reportObj.info === undefined || reportObj.info.summary === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      let gen = reportObj.info.summary[item.gId];\r\n\r\n      if (gen === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      let genI = gen[item.gIx];\r\n \r\n      if (genI === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      return genI.defaultMessage;\r\n    }\t    \r\n    \r\n    function generateReports() {\r\n      for (let i=0; i<_reportObjects.length; i++) {\r\n        document.write(\"<h1>\" + _reportObjects[i].sourceName + \"</h1>\");\r\n        document.write(\"<h3>Summary</h3>\");\r\n    \r\n        document.write(\"<table class='summary-table'>\");\r\n        document.write(\"<tr><th>Measure</th><th>Value</th></tr>\");\r\n        const info = _reportObjects[i].info;\r\n    \r\n        if (info) {\r\n          for (const key in info) {\r\n            const val = info[key];\r\n    \r\n            if (key !== 'featureSets' && key !== 'defaultIcon' && key !== 'summary') {\r\n              document.write(\"<tr>\");\r\n              document.write(\"<td class='summary-key items-cell'>\" + getDataName(key) + \"</td>\");\r\n              document.write(\"<td class='summary-value items-cell'>\" + getDataSummary(val) + \"</td>\");\r\n              document.write(\"</tr>\");\r\n            }\r\n          }\r\n    \r\n          if (info[\"featureSets\"]) {\r\n            for (const featureName in info.featureSets) {\r\n              const feature = info.featureSets[featureName];\r\n    \r\n              for (const measureName in feature) {\r\n                const val = feature[measureName];\r\n\r\n                 document.write(\"<tr>\");\r\n                document.write(\"<td class='summary-key items-cell'>\" + featureName + \" \" + measureName + \"</td>\");\r\n                document.write(\"<td class='summary-value items-cell'>\" + getDataSummary(val) + \"</td>\");\r\n                document.write(\"</tr>\");\r\n              }\r\n            }\r\n          }\r\n        }\r\n        document.write(\"</table>\");\r\n      }\r\n    \r\n      for (let i=0; i<_reportObjects.length; i++) {\r\n        document.write(\"<h3>Items</h3>\");\r\n        document.write(\"<table class='items-table'>\");\r\n        document.write(\"<tr><th>Type</th><th>Test Category</th><th>Category Id</th><th>Message</th><th>Data</th><th>Path</th></tr>\");\r\n        const info = _reportObjects[i].info;\r\n        \r\n        const items = _reportObjects[i].items;\r\n    \r\n        if (items && items.length) {\r\n          for (const item of items) {\r\n            if (item.itemType !== 2) {\r\n              document.write(\"<tr>\");\r\n              document.write(\"<td class='items-type items-cell'>\" + getDescriptionForItemType(item.iTp) + \"</td>\");\r\n              document.write(\"<td class='items-generator items-cell'>\" + item.gId + \"</td>\");\r\n              document.write(\"<td class='items-generatorIndex items-cell'>\" + item.gIx + \"</td>\");\r\n              document.write(\"<td class='items-message items-cell'>\" + getEmptySummary(getEffectiveMessage(_reportObjects[i], item)) + \"</td>\");\r\n              document.write(\"<td class='items-data items-cell'>\" + getEmptySummary(item.d) + \"</td>\");\r\n              document.write(\"<td class='items-path items-cell'>\" + getEmptySummary(item.p) + \"</td>\");\r\n              document.write(\"</tr>\");\r\n            }\r\n          }\r\n        }\r\n        document.write(\"</table>\");\r\n      }\r\n    } \r\n\r\n    function getDescriptionForItemType(itemType) {\r\n      switch (itemType) {\r\n        case 0: \r\n          return \"SUCCESS\";\r\n          break;\r\n        case 1: \r\n          return \"FAIL\";\r\n          break;\r\n        case 3: \r\n          return \"ERROR\";\r\n          break;\r\n        case 4: \r\n          return \"WARN\";\r\n          break;\r\n        case 5: \r\n          return \"INTERNALERR\";\r\n          break;\r\n        case 6: \r\n          return \"RECOMMEND\";\r\n          break;          \r\n      }\r\n      return \"INFO\";\r\n    }\r\n\r\n    </script>\r\n    <style>\r\n      body {\r\n        font-family: Noto Sans, Arial, Helvetica, sans-serif;\r\n        padding: 8px;\r\n      }\r\n    \r\n      .items-table {\r\n        border: solid 1px #606060;\r\n        padding: 0px;\r\n        max-width: 100vw;\r\n      }\r\n    \r\n      .items-cell {\r\n        border: solid 1px #606060;\r\n        padding: 4px;\r\n        vertical-align: top;\r\n        font-size: x-small;\r\n        overflow-wrap: anywhere;\r\n        max-width: 25vw;\r\n      }\r\n    \r\n      .summary-table {\r\n        border: solid 1px #606060;\r\n        padding: 0px;\r\n        max-width: 100vw;\r\n      }\r\n    </style>\r\n    </head><body> \r\n`);\r\n    lines.push(\"<script>\");\r\n    lines.push(\"generateReports();\");\r\n    lines.push(\"</script>\");\r\n    lines.push(\"</body></html>\");\r\n\r\n    return lines.join(\"\\n\");\r\n  }\r\n\r\n  static getDataSummary(data: any | undefined) {\r\n    if (typeof data === \"number\" || typeof data === \"boolean\") {\r\n      return data.toString();\r\n    }\r\n    if (Array.isArray(data)) {\r\n      const repData = data.slice();\r\n\r\n      for (let i = 0; i < repData.length; i++) {\r\n        repData[i] =\r\n          \"'\" +\r\n          repData[i]\r\n            .toString()\r\n            .replace(/'/gi, \"\")\r\n            .replace(/[\\r\\n]+/g, \" \") +\r\n          \"'\";\r\n      }\r\n      let arrStr = repData.join(\", \");\r\n\r\n      arrStr = arrStr.replace(/\"/gi, \"'\");\r\n\r\n      return '\"[' + arrStr + ']\"';\r\n    } else if (data) {\r\n      return '\"' + ProjectInfoSet.csvSanitize(data) + '\"';\r\n    }\r\n\r\n    return \"(not defined)\";\r\n  }\r\n\r\n  /**\r\n   * Sanitizes a string value for safe inclusion inside a quoted CSV field.\r\n   * Replaces double quotes with single quotes, and strips newlines/carriage returns\r\n   * so that the value doesn't create phantom rows in the CSV output.\r\n   */\r\n  static csvSanitize(value: string): string {\r\n    return value.replace(/\"/gi, \"'\").replace(/[\\r\\n]+/g, \" \");\r\n  }\r\n\r\n  static sortMinecraftFeatures(a: string, b: string) {\r\n    a = a.replace(\"minecraft:\", \"_\");\r\n    b = b.replace(\"minecraft:\", \"_\");\r\n\r\n    return Utilities.staticCompare(a, b);\r\n  }\r\n\r\n  getArea(title: string) {\r\n    title = title.toLowerCase();\r\n\r\n    if (title.indexOf(\"furniture\") >= 0) {\r\n      return \"Furniture\";\r\n    }\r\n\r\n    if (title.indexOf(\"skyblock\") >= 0 || title.indexOf(\"sky block\") >= 0) {\r\n      return \"Skyblock\";\r\n    }\r\n\r\n    if (title.indexOf(\"oneblock\") >= 0 || title.indexOf(\"one block\") >= 0) {\r\n      return \"One block\";\r\n    }\r\n\r\n    if (title.indexOf(\"lucky\") >= 0) {\r\n      return \"Lucky\";\r\n    }\r\n\r\n    if (title.indexOf(\"parkour\") >= 0) {\r\n      return \"Parkour\";\r\n    }\r\n\r\n    if (title.indexOf(\"surviv\") >= 0) {\r\n      return \"Survival\";\r\n    }\r\n\r\n    if (\r\n      title.indexOf(\"weapon\") >= 0 ||\r\n      title.indexOf(\"potion\") >= 0 ||\r\n      title.indexOf(\"tool\") >= 0 ||\r\n      title.indexOf(\"hook\") >= 0\r\n    ) {\r\n      return \"Tools\";\r\n    }\r\n\r\n    if (\r\n      title.indexOf(\"roleplay\") >= 0 ||\r\n      title.indexOf(\"teen\") >= 0 ||\r\n      title.indexOf(\"illionair\") >= 0 ||\r\n      title.indexOf(\"hacker\") >= 0\r\n    ) {\r\n      return \"Roleplay\";\r\n    }\r\n\r\n    if (\r\n      title.indexOf(\"mob\") >= 0 ||\r\n      title.indexOf(\"pirate\") >= 0 ||\r\n      title.indexOf(\"unicorn\") >= 0 ||\r\n      title.indexOf(\"alien\") >= 0 ||\r\n      title.indexOf(\"animals\") >= 0 ||\r\n      title.indexOf(\"cats\") >= 0 ||\r\n      title.indexOf(\"dogs\") >= 0 ||\r\n      title.indexOf(\"dragon\") >= 0\r\n    ) {\r\n      return \"Mob\";\r\n    }\r\n\r\n    if (title.indexOf(\"vehicles\") >= 0 || title.indexOf(\"car\") >= 0 || title.indexOf(\"plane\") >= 0) {\r\n      return \"Vehicles\";\r\n    }\r\n\r\n    if (\r\n      title.indexOf(\"island\") >= 0 ||\r\n      title.indexOf(\"kingdom\") >= 0 ||\r\n      title.indexOf(\"tower\") >= 0 ||\r\n      title.indexOf(\"mansion\") >= 0 ||\r\n      title.indexOf(\"village\") >= 0 ||\r\n      title.indexOf(\"resort\") >= 0 ||\r\n      title.indexOf(\"castle\") >= 0 ||\r\n      title.indexOf(\"base\") >= 0 ||\r\n      title.indexOf(\"town\") >= 0 ||\r\n      title.indexOf(\"city\") >= 0 ||\r\n      title.indexOf(\"fortress\") >= 0 ||\r\n      title.indexOf(\"citadel\") >= 0 ||\r\n      title.indexOf(\"outpost\") >= 0 ||\r\n      title.indexOf(\"farm\") >= 0 ||\r\n      title.indexOf(\"hotel\") >= 0 ||\r\n      title.indexOf(\"castle\") >= 0\r\n    ) {\r\n      return \"Area\";\r\n    }\r\n\r\n    if (title.indexOf(\"simulat\") >= 0) {\r\n      return \"Simulator\";\r\n    }\r\n\r\n    return \"General\";\r\n  }\r\n\r\n  getRed() {\r\n    let red = 0;\r\n\r\n    if (!this.info || !this.info.featureSets) {\r\n      return 0;\r\n    }\r\n\r\n    let val = this.info.featureSets[\"animation.size\"]?.total;\r\n\r\n    if (val === undefined || val === null) {\r\n      val = 0;\r\n    }\r\n\r\n    if (val) {\r\n      red += val * 0.2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"animationController.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.5;\r\n    }\r\n\r\n    val = this.info.featureSets[\"attachable.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"function.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"tick.size\"]?.total;\r\n    if (val) {\r\n      red += val * 20;\r\n    }\r\n\r\n    val = this.info.featureSets[\"command.execute\"]?.count;\r\n    if (val) {\r\n      red += val * 4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"behaviorPackAnimation.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.8;\r\n    }\r\n\r\n    val = this.info.featureSets[\"behaviorPackAnimationController.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1.2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"biome.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1.2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftChainCommandBlock\"]?.count;\r\n    if (val) {\r\n      red += val * 8;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftCommandBlock\"]?.count;\r\n    if (val) {\r\n      red += val * 8;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftRepeatingCommandBlock\"]?.count;\r\n    if (val) {\r\n      red += val * 8;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftStructureBlock\"]?.count;\r\n    if (val) {\r\n      red += val * 8;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftObserver\"]?.count;\r\n    if (val) {\r\n      red += val * 4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftComparator\"]?.count;\r\n    if (val) {\r\n      red += val * 4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftDropper\"]?.count;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftHopper\"]?.count;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftPressurePlate\"]?.count;\r\n    if (val) {\r\n      red += val * 1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftLever\"]?.count;\r\n    if (val) {\r\n      red += val * 4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftLitRedstoneLamp\"]?.count;\r\n    if (val) {\r\n      red += val;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftRedstoneBlock\"]?.count;\r\n    if (val) {\r\n      red += val;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftRedstoneTorch\"]?.count;\r\n    if (val) {\r\n      red += val;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftRedstoneWire\"]?.count;\r\n    if (val) {\r\n      red += val;\r\n    }\r\n\r\n    val = this.info.featureSets[\"entityDialogue.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"entityType.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"entityTypeResources.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"itemType.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"itemTypeResources.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"javaScript.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"lootTable.size\"]?.total;\r\n    if (val) {\r\n      red += val;\r\n    }\r\n\r\n    val = this.info.featureSets[\"model.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"particle.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"recipe.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"renderController.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.5;\r\n    }\r\n\r\n    val = this.info.featureSets[\"spawnRule.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"trading.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"userInterface.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    return Math.round(red);\r\n  }\r\n\r\n  getSummaryCsvLine(\r\n    containerName: string,\r\n    title: string,\r\n    allFeatures: { [setName: string]: { [measureName: string]: number | undefined } | undefined } | undefined\r\n  ): string {\r\n    let line =\r\n      ProjectInfoSet.getDataSummary(containerName) +\r\n      \",\" +\r\n      ProjectInfoSet.getDataSummary(title) +\r\n      \",\" +\r\n      this.getArea(title) +\r\n      \",\";\r\n\r\n    let fieldNames = [];\r\n\r\n    for (const str in this.info) {\r\n      if (ProjectInfoSet.isAggregableFieldName(str)) {\r\n        fieldNames.push(str);\r\n      }\r\n    }\r\n\r\n    fieldNames = fieldNames.sort(ProjectInfoSet.sortMinecraftFeatures);\r\n\r\n    for (const str of fieldNames) {\r\n      // @ts-ignore\r\n      line += ProjectInfoSet.getDataSummary(this.info[str]) + \",\";\r\n    }\r\n\r\n    if (this.info.featureSets) {\r\n      for (const featureName in allFeatures) {\r\n        const allFeature = allFeatures[featureName];\r\n        const thisFeature = this.info.featureSets[featureName];\r\n\r\n        if (allFeature) {\r\n          for (const measureName in allFeature) {\r\n            if (ProjectInfoSet.isAggregableFeatureMeasureName(measureName)) {\r\n              if (thisFeature) {\r\n                const measure = thisFeature[measureName];\r\n\r\n                if (measure !== undefined) {\r\n                  if (typeof measure === \"number\") {\r\n                    line += measure;\r\n                  }\r\n                }\r\n              }\r\n              line += \",\";\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return line;\r\n  }\r\n\r\n  getItemCsvLines(): string[] {\r\n    const lines: string[] = [];\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const item = this.items[i];\r\n\r\n      if (item.itemType !== InfoItemType.featureAggregate) {\r\n        let sp = \"\";\r\n\r\n        if (item.projectItem && item.projectItem.projectPath) {\r\n          sp = item.projectItem.projectPath;\r\n        } else if (item.projectItemPath) {\r\n          sp = item.projectItemPath;\r\n        }\r\n\r\n        let line =\r\n          item.generatorId +\r\n          \",\" +\r\n          item.generatorIndex +\r\n          \",\" +\r\n          '\"' +\r\n          ProjectInfoSet.csvSanitize(item.typeSummary || \"\") +\r\n          '\"' +\r\n          \",\" +\r\n          '\"' +\r\n          ProjectInfoSet.csvSanitize(item.projectItem ? item.projectItem.name : \"\") +\r\n          '\"' +\r\n          ',\"' +\r\n          ProjectInfoSet.csvSanitize(this.getEffectiveMessage(item)) +\r\n          '\",';\r\n\r\n        if (item.data) {\r\n          if (typeof item.data === \"string\") {\r\n            line += '\"' + ProjectInfoSet.csvSanitize(item.data) + '\"';\r\n          } else {\r\n            line += item.data.toString();\r\n          }\r\n        }\r\n\r\n        line += ',\"' + ProjectInfoSet.csvSanitize(sp) + '\",';\r\n\r\n        if (item.featureSets) {\r\n          for (const featName in item.featureSets) {\r\n            const feature = item.featureSets[featName];\r\n\r\n            if (feature) {\r\n              for (const measureName in feature) {\r\n                if (ProjectInfoSet.isAggregableFeatureMeasureName(measureName)) {\r\n                  const measure = feature[measureName];\r\n\r\n                  if (measure !== undefined) {\r\n                    if (typeof measure === \"number\") {\r\n                      line += featName + \" \" + measureName + \",\" + measure + \",\";\r\n                    } else if (typeof measure === \"string\") {\r\n                      line += featName + \" \" + measureName + ',\"' + ProjectInfoSet.csvSanitize(measure) + '\",';\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        lines.push(line);\r\n      }\r\n    }\r\n\r\n    return lines;\r\n  }\r\n\r\n  getItems(generatorId: string, itemIndex: number) {\r\n    const resultItems: ProjectInfoItem[] = [];\r\n\r\n    for (const genItem of this.items) {\r\n      if (genItem.generatorId === generatorId && genItem.generatorIndex === itemIndex) {\r\n        resultItems.push(genItem);\r\n      }\r\n    }\r\n\r\n    return resultItems;\r\n  }\r\n\r\n  getItemsByType(generatorId: string, itemType: InfoItemType) {\r\n    return ProjectInfoSet.getItemsInCollectionByType(this.items, generatorId, itemType);\r\n  }\r\n\r\n  getItemsByStoragePath(path: string) {\r\n    if (!this.itemsByStoragePath) {\r\n      return;\r\n    }\r\n\r\n    return this.itemsByStoragePath[path];\r\n  }\r\n\r\n  static getItemsInCollection(genItems: ProjectInfoItem[], generatorId: string) {\r\n    const resultItems: ProjectInfoItem[] = [];\r\n\r\n    for (const genItem of genItems) {\r\n      if (genItem.generatorId === generatorId) {\r\n        resultItems.push(genItem);\r\n      }\r\n    }\r\n\r\n    return resultItems;\r\n  }\r\n\r\n  static getItemsInCollectionByType(genItems: ProjectInfoItem[], generatorId: string, itemType: InfoItemType) {\r\n    const resultItems: ProjectInfoItem[] = [];\r\n\r\n    for (const genItem of genItems) {\r\n      if (genItem.generatorId === generatorId && genItem.itemType === itemType) {\r\n        resultItems.push(genItem);\r\n      }\r\n    }\r\n\r\n    return resultItems;\r\n  }\r\n\r\n  async preProcessFolder(\r\n    project: Project,\r\n    folder: IFolder,\r\n    genItems: ProjectInfoItem[],\r\n    genItemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined },\r\n    genContentIndex: ContentIndex,\r\n    fileGenerators: IProjectFileInfoGenerator[],\r\n    depth: number\r\n  ) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file) {\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n\r\n        if (file.content !== null) {\r\n          if (StorageUtilities.isContainerFile(file.storageRelativePath)) {\r\n            const zipFolder = await StorageUtilities.getFileStorageFolder(file);\r\n\r\n            if (zipFolder && typeof zipFolder !== \"string\") {\r\n              await this.preProcessFolder(\r\n                project,\r\n                zipFolder,\r\n                genItems,\r\n                genItemsByStoragePath,\r\n                genContentIndex,\r\n                fileGenerators,\r\n                depth + 1\r\n              );\r\n            }\r\n          }\r\n\r\n          const projectItem = project.getItemByFile(file);\r\n\r\n          if (projectItem && projectItem.projectPath) {\r\n            await HashUtilities.addHashesForFile(genContentIndex.hashCatalog, file, projectItem.projectPath);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (depth < 15) {\r\n      for (const folderName in folder.folders) {\r\n        const childFolder = folder.folders[folderName];\r\n\r\n        if (childFolder && !childFolder.errorStatus && childFolder.name) {\r\n          if (ProjectInfoSet.isFolderThatShouldBeProcessed(childFolder)) {\r\n            await this.preProcessFolder(\r\n              project,\r\n              childFolder,\r\n              genItems,\r\n              genItemsByStoragePath,\r\n              genContentIndex,\r\n              fileGenerators,\r\n              depth + 1\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async processFolder(\r\n    project: Project,\r\n    folder: IFolder,\r\n    genItems: ProjectInfoItem[],\r\n    genItemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined },\r\n    genContentIndex: ContentIndex,\r\n    fileGenerators: IProjectFileInfoGenerator[],\r\n    depth: number\r\n  ) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file) {\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n\r\n        if (file.content !== null) {\r\n          const projectItem = project.getItemByFile(file);\r\n\r\n          if (projectItem && projectItem.projectPath) {\r\n            genContentIndex.insert(StorageUtilities.getBaseFromName(fileName), projectItem.projectPath);\r\n            genContentIndex.insert(file.storageRelativePath, projectItem.projectPath);\r\n\r\n            if (file.content && typeof file.content === \"string\") {\r\n              const fileExtension = StorageUtilities.getTypeFromName(fileName);\r\n\r\n              if (projectItem && projectItem.projectPath) {\r\n                switch (fileExtension) {\r\n                  case \"json\":\r\n                    // Try to use already-parsed JSON object for faster indexing\r\n                    // instead of character-by-character text tokenization\r\n                    const jsonObj = StorageUtilities.getJsonObject(file);\r\n                    if (jsonObj) {\r\n                      genContentIndex.indexJsonObject(projectItem.projectPath, jsonObj);\r\n                    } else {\r\n                      genContentIndex.parseJsonContent(projectItem.projectPath, file.content);\r\n                    }\r\n                    break;\r\n                  case \"ts\":\r\n                  case \"js\":\r\n                  case \"mjs\":\r\n                    genContentIndex.parseJsContent(projectItem.projectPath, file.content);\r\n                    break;\r\n                }\r\n              }\r\n            }\r\n\r\n            for (const fileGen of fileGenerators) {\r\n              if (this.matchesSuite(fileGen)) {\r\n                try {\r\n                  const results = await fileGen.generate(project, file, genContentIndex);\r\n\r\n                  for (const item of results) {\r\n                    this.pushItem(genItems, genItemsByStoragePath, item);\r\n                  }\r\n                } catch (e: any) {\r\n                  // V--- add a breakpoint to the line below to catch validator exceptions (3 of 3) ---V\r\n                  genItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.internalProcessingError,\r\n                      fileGen.id,\r\n                      502,\r\n                      file.fullPath + \": \" + e.toString()\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n            if (StorageUtilities.isContainerFile(file.storageRelativePath)) {\r\n              const zipFolder = await StorageUtilities.getFileStorageFolder(file);\r\n\r\n              if (zipFolder && typeof zipFolder !== \"string\") {\r\n                await this.processFolder(\r\n                  project,\r\n                  zipFolder,\r\n                  genItems,\r\n                  genItemsByStoragePath,\r\n                  genContentIndex,\r\n                  fileGenerators,\r\n                  depth + 1\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (depth < 15) {\r\n      for (const folderName in folder.folders) {\r\n        const childFolder = folder.folders[folderName];\r\n\r\n        if (childFolder && !childFolder.errorStatus && childFolder.name) {\r\n          if (ProjectInfoSet.isFolderThatShouldBeProcessed(childFolder)) {\r\n            await this.processFolder(\r\n              project,\r\n              childFolder,\r\n              genItems,\r\n              genItemsByStoragePath,\r\n              genContentIndex,\r\n              fileGenerators,\r\n              depth + 1\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static isFolderThatShouldBeProcessed(folder: IFolder): boolean {\r\n    const name = folder.name.toLowerCase();\r\n\r\n    if (name.startsWith(\".\") || name.startsWith(\"node_modules\")) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  generateProjectMetaInfo() {\r\n    this.info = {\r\n      capabilities: [],\r\n    };\r\n\r\n    const projGenerators: IProjectInfoGenerator[] = GeneratorRegistrations.projectGenerators;\r\n    const itemGenerators: IProjectItemInfoGenerator[] = GeneratorRegistrations.itemGenerators;\r\n    const fileGenerators: IProjectFileInfoGenerator[] = GeneratorRegistrations.fileGenerators;\r\n\r\n    for (let j = 0; j < projGenerators.length; j++) {\r\n      projGenerators[j].summarize(this.info, this);\r\n    }\r\n\r\n    for (let j = 0; j < itemGenerators.length; j++) {\r\n      itemGenerators[j].summarize(this.info, this);\r\n    }\r\n\r\n    for (let j = 0; j < fileGenerators.length; j++) {\r\n      fileGenerators[j].summarize(this.info, this);\r\n    }\r\n\r\n    for (let j = 0; j < projGenerators.length; j++) {\r\n      if (projGenerators[j] instanceof SummaryInfoGenerator) {\r\n        (projGenerators[j] as SummaryInfoGenerator).summarizePhase2(this.info, this);\r\n      }\r\n    }\r\n\r\n    this.aggregateFeatures();\r\n  }\r\n\r\n  addObjectsToArray(validatorName: string, validatorId: number, parentArray: object[]) {\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        if (typeof item.data === \"object\") {\r\n          parentArray.push(item.data);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getFirstStringValue(validatorName: string, validatorId: number) {\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        if (typeof item.data === \"string\") {\r\n          return item.data;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  removeItems(validatorName: string, validatorIds: number[]) {\r\n    const itemsNext = [];\r\n    for (const item of this.items) {\r\n      if (item.generatorId !== validatorName || !validatorIds.includes(item.generatorIndex)) {\r\n        itemsNext.push(item);\r\n      }\r\n    }\r\n\r\n    this.items = itemsNext;\r\n  }\r\n\r\n  getGeneratorForItem(item: ProjectInfoItem): IProjectInfoGeneratorBase | undefined {\r\n    const itemGens = GeneratorRegistrations.itemGenerators;\r\n\r\n    for (const itemGen of itemGens) {\r\n      if (itemGen.id === item.generatorId) {\r\n        return itemGen;\r\n      }\r\n    }\r\n\r\n    const fileGens = GeneratorRegistrations.fileGenerators;\r\n    for (const fileGen of fileGens) {\r\n      if (fileGen.id === item.generatorId) {\r\n        return fileGen;\r\n      }\r\n    }\r\n\r\n    const projGens = GeneratorRegistrations.projectGenerators;\r\n\r\n    for (const projGen of projGens) {\r\n      if (projGen.id === item.generatorId) {\r\n        return projGen;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getItemSummary(item: ProjectInfoItem) {\r\n    // First, try to get topic data from form.json file\r\n    const formTopicData = InfoGeneratorTopicUtilities.getTopicDataSync(item.generatorId, item.generatorIndex);\r\n    if (formTopicData) {\r\n      return formTopicData.title;\r\n    }\r\n\r\n    // Fall back to generator's getTopicData method if available\r\n    const gen = this.getGeneratorForItem(item);\r\n\r\n    if (gen && typeof (gen as IProjectInfoGeneratorBase).getTopicData === \"function\") {\r\n      const topic = (gen as IProjectInfoGeneratorBase).getTopicData!(item.generatorIndex);\r\n\r\n      if (topic) {\r\n        return topic.title;\r\n      }\r\n    }\r\n\r\n    return item.generatorId + \"-\" + item.generatorIndex;\r\n  }\r\n\r\n  /**\r\n   * Gets a stable key for aggregation purposes based on the form.json field title.\r\n   * Uses getItemSummary() which returns the form.json title (e.g., \"Texture Images\"),\r\n   * then convertToJsonKey() transforms it to camelCase (e.g., \"textureImages\").\r\n   * This produces consistent JSON keys in validation reports.\r\n   */\r\n  getItemAggregationKey(item: ProjectInfoItem) {\r\n    // Use getItemSummary which returns the form.json title or falls back to generator data\r\n    return this.getItemSummary(item);\r\n  }\r\n\r\n  aggregateFeatures() {\r\n    if (this.info === undefined) {\r\n      return;\r\n    }\r\n\r\n    this.info.featureSets = {};\r\n\r\n    for (const item of this.items) {\r\n      if (item.featureSets) {\r\n        for (const featureSetName in item.featureSets) {\r\n          const featureSet = item.featureSets[featureSetName];\r\n\r\n          const aggFeatureSetName =\r\n            Utilities.convertToJsonKey(this.getItemAggregationKey(item)) +\r\n            \".\" +\r\n            Utilities.ensureFirstCharIsLowerCase(featureSetName);\r\n\r\n          for (const measureName in featureSet) {\r\n            const measure = featureSet[measureName];\r\n\r\n            if (typeof measure === \"number\") {\r\n              let feature = this.info.featureSets[aggFeatureSetName];\r\n\r\n              if (feature === undefined) {\r\n                feature = {};\r\n                this.info.featureSets[aggFeatureSetName] = feature;\r\n              }\r\n\r\n              let aggVal = feature[measureName];\r\n\r\n              if (aggVal === undefined) {\r\n                aggVal = measure;\r\n              } else if (measureName.startsWith(\"max_\")) {\r\n                aggVal = Math.max(aggVal, measure);\r\n              } else if (featureSetName.startsWith(\"min_\")) {\r\n                aggVal = Math.min(aggVal, measure);\r\n              } else {\r\n                aggVal += measure;\r\n              }\r\n\r\n              feature[measureName] = aggVal;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getFirstNumberDataValue(validatorName: string, validatorId: number) {\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        if (typeof item.data === \"number\") {\r\n          return item.data;\r\n        }\r\n      }\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  getAverageFeatureValue(validatorName: string, validatorId: number, setName: string, measureName: string) {\r\n    let sum = 0;\r\n    let count = 0;\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId) {\r\n        const feat = item.getFeatureMeasureNumber(setName, measureName);\r\n\r\n        if (typeof feat === \"number\") {\r\n          sum += feat;\r\n          count++;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (count === 0) {\r\n      return 0;\r\n    }\r\n\r\n    return sum / count;\r\n  }\r\n\r\n  getSummedFeatureValue(validatorName: string, validatorId: number, setName: string, measureName: string) {\r\n    let sum = 0;\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId) {\r\n        const feat = item.getFeatureMeasureNumber(setName, measureName);\r\n\r\n        if (typeof feat === \"number\") {\r\n          sum += feat;\r\n        }\r\n      }\r\n    }\r\n\r\n    return sum;\r\n  }\r\n\r\n  getFeaturesWithInstances(validatorName: string, validatorId: number) {\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId) {\r\n        return item.getNonZeroFeatureMeasures();\r\n      }\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  getSummedDataValue(validatorName: string, validatorId: number) {\r\n    let sum = 0;\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        if (typeof item.data === \"number\") {\r\n          sum += item.data;\r\n        }\r\n      }\r\n    }\r\n\r\n    return sum;\r\n  }\r\n\r\n  getCount(validatorName: string, validatorId: number) {\r\n    let sum = 0;\r\n\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId) {\r\n        sum++;\r\n      }\r\n    }\r\n\r\n    return sum;\r\n  }\r\n\r\n  getMinNumberArrayValueAsVersionString(validatorName: string, validatorId: number) {\r\n    let minVerNum = -1;\r\n    let minVerStr = undefined;\r\n\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        let val = item.data;\r\n        if (typeof val === \"string\") {\r\n          const strArr = val.split(\".\");\r\n          const numArr: number[] = [];\r\n\r\n          for (const strNum of strArr) {\r\n            try {\r\n              const num = parseInt(strNum);\r\n              if (!isNaN(num)) {\r\n                numArr.push(num);\r\n              }\r\n            } catch (e) {\r\n              throw e;\r\n            }\r\n          }\r\n\r\n          val = numArr;\r\n        }\r\n\r\n        if (val instanceof Array && val.length && val.length > 0) {\r\n          let ret = \"\";\r\n          for (let i = 0; i < val.length; i++) {\r\n            if (ret.length > 0) {\r\n              ret += \".\";\r\n            }\r\n\r\n            ret += val[i];\r\n          }\r\n\r\n          const verNum = MinecraftUtilities.getVersionNumber(ret);\r\n\r\n          if (minVerNum < 0 || verNum < minVerNum) {\r\n            minVerNum = verNum;\r\n            minVerStr = ret;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return minVerStr;\r\n  }\r\n\r\n  getFirstNumberArrayValueAsVersionString(validatorName: string, validatorId: number) {\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        const val = item.data;\r\n        if (typeof val === \"string\") {\r\n          return val;\r\n        } else if (val instanceof Array && val.length && val.length > 0) {\r\n          let ret = \"\";\r\n          for (let i = 0; i < val.length; i++) {\r\n            if (ret.length > 0) {\r\n              ret += \".\";\r\n            }\r\n\r\n            ret += val[i];\r\n          }\r\n\r\n          return ret;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async getInfoForItem(projectItem: ProjectItem, contentIndex: ContentIndex) {\r\n    const itemGenerators: IProjectItemInfoGenerator[] = GeneratorRegistrations.itemGenerators;\r\n    let genItems: ProjectInfoItem[] = [];\r\n\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    for (let j = 0; j < itemGenerators.length; j++) {\r\n      try {\r\n        const infoItems = await itemGenerators[j].generate(projectItem, contentIndex);\r\n\r\n        for (const infoItem of infoItems) {\r\n          genItems.push(infoItem);\r\n        }\r\n      } catch (e: any) {\r\n        genItems.push(\r\n          new ProjectInfoItem(InfoItemType.internalProcessingError, itemGenerators[j].id, 504, e.toString())\r\n        );\r\n      }\r\n    }\r\n\r\n    return genItems;\r\n  }\r\n\r\n  /**\r\n   * Gets the hash catalog as JSON string\r\n   */\r\n  getHashCatalogJson(): string {\r\n    return JSON.stringify(this.contentIndex.hashCatalog);\r\n  }\r\n}\r\n", "import Project from \"../app/Project\";\r\nimport ProjectUtilities from \"../app/ProjectUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { ProjectInfoSuite } from \"./IProjectInfoData\";\r\nimport IProjectMetaState from \"./IProjectMetaState\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\n\r\nexport default class ProjectInfoUtilities {\r\n  private static _generalTopicsById: Record<number, string> = {\r\n    0: \"Test Failure\",\r\n    1: \"Test Success\",\r\n    2: \"Test Not Applicable\",\r\n  };\r\n  static getTitleFromEnum(categoryEnum: { [name: number]: string }, topicId: number) {\r\n    if (categoryEnum[topicId]) {\r\n      return Utilities.humanifyJsName(categoryEnum[topicId]);\r\n    }\r\n\r\n    const generalTitle = this._generalTopicsById[topicId];\r\n    if (!!generalTitle) {\r\n      return generalTitle;\r\n    }\r\n\r\n    return \"General Item \" + topicId;\r\n  }\r\n\r\n  static getGeneralTopicTitle(topicId: number) {\r\n    return this._generalTopicsById[topicId];\r\n  }\r\n\r\n  static async getDerivedStates(project: Project, pisData: ProjectInfoSet) {\r\n    const isAddon = await ProjectUtilities.getIsAddon(project);\r\n    const derivedStates: IProjectMetaState[] = [];\r\n\r\n    if (isAddon) {\r\n      const pisAddon = new ProjectInfoSet(project, ProjectInfoSuite.cooperativeAddOn);\r\n\r\n      await pisAddon.generateForProject();\r\n\r\n      const projectSet = {\r\n        projectContainerName: project.containerName,\r\n        projectPath: project.projectFolder?.storageRelativePath,\r\n        projectName: project.name,\r\n        projectTitle: project.title,\r\n        infoSetData: pisAddon.getDataObject(),\r\n        suite: ProjectInfoSuite.cooperativeAddOn,\r\n      };\r\n\r\n      derivedStates.push(projectSet);\r\n    }\r\n\r\n    const pisSharing = new ProjectInfoSet(project, ProjectInfoSuite.sharing);\r\n    await pisSharing.generateForProject();\r\n\r\n    const sharing = {\r\n      projectContainerName: project.containerName,\r\n      projectPath: project.projectFolder?.storageRelativePath,\r\n      projectName: project.name,\r\n      projectTitle: project.title,\r\n      infoSetData: pisSharing.getDataObject(),\r\n      suite: ProjectInfoSuite.cooperativeAddOn,\r\n    };\r\n\r\n    derivedStates.push(sharing);\r\n\r\n    const shouldRunPlatformVersion = (pisData.info as any)[\"CWave\"] !== undefined;\r\n\r\n    if (shouldRunPlatformVersion) {\r\n      const pisPlatforMVersion = new ProjectInfoSet(project, ProjectInfoSuite.currentPlatformVersions);\r\n\r\n      await pisPlatforMVersion.generateForProject();\r\n\r\n      const projectSet = {\r\n        projectContainerName: project.containerName,\r\n        projectPath: project.projectFolder?.storageRelativePath,\r\n        projectName: project.name,\r\n        projectTitle: project.title,\r\n        infoSetData: pisPlatforMVersion.getDataObject(),\r\n        suite: ProjectInfoSuite.currentPlatformVersions,\r\n      };\r\n\r\n      derivedStates.push(projectSet);\r\n    }\r\n\r\n    return derivedStates;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IAddonManifest, { IResourcePackManifest } from \"../minecraft/IAddonManifest\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\n\r\nconst MemoryTierBase = 40;\r\n\r\nexport enum PackInfoGeneratorTest {\r\n  behaviorPackName = 104,\r\n  behaviorPackDescription = 105,\r\n  behaviorPackId = 106,\r\n  behaviorPackMinEngineVersion = 107,\r\n  behaviorPackUuid = 108,\r\n  behaviorPackManifest = 109,\r\n  resourcePackMinEngineVersion = 111,\r\n  resourcePackUuid = 112,\r\n  resourcePackManifest = 113,\r\n  resourcePackName = 114,\r\n  resourcePackDescription = 115,\r\n  resourcePackId = 116,\r\n  resourcePackFormatVersion = 117,\r\n  subPacks = 118,\r\n  resourcePackIcon = 121,\r\n  behaviorPackIcon = 122,\r\n  skinPackIcon = 123,\r\n  subpackTiers = 245,\r\n}\r\n\r\n/**\r\n * Aggregates general pack information from manifests (names, descriptions, UUIDs, etc.).\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/pack.form.json} for topic definitions\r\n */\r\nexport default class PackInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"PACK\";\r\n  title = \"General info\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.defaultBehaviorPackUuid = infoSet.getFirstStringValue(this.id, PackInfoGeneratorTest.behaviorPackUuid);\r\n\r\n    info.defaultIcon = infoSet.getFirstStringValue(this.id, PackInfoGeneratorTest.resourcePackIcon);\r\n\r\n    if (info.defaultIcon === undefined) {\r\n      info.defaultIcon = infoSet.getFirstStringValue(this.id, PackInfoGeneratorTest.behaviorPackIcon);\r\n    }\r\n\r\n    // because it's heavy, remove pack icon from this list of issues. Though the summarize op is probably\r\n    // the wrong place to do this.\r\n    infoSet.removeItems(this.id, [PackInfoGeneratorTest.resourcePackIcon, PackInfoGeneratorTest.behaviorPackIcon]);\r\n\r\n    info.defaultBehaviorPackMinEngineVersion = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.behaviorPackMinEngineVersion\r\n    );\r\n\r\n    info.minBehaviorPackMinEngineVersionString = infoSet.getMinNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.behaviorPackMinEngineVersion\r\n    );\r\n\r\n    info.minBehaviorPackMinEngineVersion = MinecraftUtilities.getVersionNumber(\r\n      info.minBehaviorPackMinEngineVersionString\r\n    );\r\n\r\n    info.defaultBehaviorPackName = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.behaviorPackName\r\n    );\r\n\r\n    info.defaultBehaviorPackDescription = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.behaviorPackDescription\r\n    );\r\n\r\n    info.defaultResourcePackUuid = infoSet.getFirstStringValue(this.id, PackInfoGeneratorTest.resourcePackUuid);\r\n\r\n    info.defaultResourcePackMinEngineVersion = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.resourcePackMinEngineVersion\r\n    );\r\n\r\n    info.minResourcePackMinEngineVersionString = infoSet.getMinNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.resourcePackMinEngineVersion\r\n    );\r\n\r\n    info.minResourcePackMinEngineVersion = MinecraftUtilities.getVersionNumber(\r\n      info.minResourcePackMinEngineVersionString\r\n    );\r\n\r\n    info.defaultResourcePackName = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.resourcePackName\r\n    );\r\n\r\n    info.defaultResourcePackDescription = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.resourcePackDescription\r\n    );\r\n\r\n    info.subpackCount = infoSet.getFirstNumberDataValue(this.id, PackInfoGeneratorTest.subPacks);\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const memoryTiersPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      PackInfoGeneratorTest.subpackTiers,\r\n      \"Entity Geometry\"\r\n    );\r\n\r\n    const items: ProjectInfoItem[] = [memoryTiersPi];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.packIconImage) {\r\n        const itemFile = pi.primaryFile;\r\n        if (itemFile) {\r\n          if (\r\n            StorageUtilities.getBaseFromName(itemFile.name) === \"pack_icon\" &&\r\n            StorageUtilities.getTypeFromName(itemFile.name) === \"png\"\r\n          ) {\r\n            if (!itemFile.isContentLoaded) {\r\n              await itemFile.loadContent(false);\r\n            }\r\n\r\n            if (itemFile.content && typeof itemFile.content !== \"string\") {\r\n              let index = PackInfoGeneratorTest.resourcePackIcon;\r\n\r\n              if (MinecraftUtilities.pathLooksLikeBehaviorPackName(itemFile.storageRelativePath)) {\r\n                index = PackInfoGeneratorTest.behaviorPackIcon;\r\n              } else if (MinecraftUtilities.pathLooksLikeSkinPackName(itemFile.storageRelativePath)) {\r\n                index = PackInfoGeneratorTest.skinPackIcon;\r\n              }\r\n\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  index,\r\n                  ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, index),\r\n                  pi,\r\n                  Utilities.uint8ArrayToBase64(itemFile.content)\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        const obj = (await pi.getJsonObject()) as IAddonManifest;\r\n\r\n        if (obj) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              PackInfoGeneratorTest.behaviorPackManifest,\r\n              ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.behaviorPackManifest),\r\n              pi\r\n            )\r\n          );\r\n\r\n          if (obj.format_version) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                PackInfoGeneratorTest.behaviorPackMinEngineVersion,\r\n                ProjectInfoUtilities.getTitleFromEnum(\r\n                  PackInfoGeneratorTest,\r\n                  PackInfoGeneratorTest.behaviorPackMinEngineVersion\r\n                ),\r\n                pi,\r\n                obj.format_version\r\n              )\r\n            );\r\n          }\r\n\r\n          if (obj.header) {\r\n            if (obj.header.uuid) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.behaviorPackUuid,\r\n                  ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.behaviorPackUuid),\r\n                  pi,\r\n                  obj.header.uuid\r\n                )\r\n              );\r\n            }\r\n\r\n            if (obj.header.uuid && obj.header.version) {\r\n              if (obj.header.version.length === 3) {\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.info,\r\n                    this.id,\r\n                    PackInfoGeneratorTest.behaviorPackId,\r\n                    ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.behaviorPackId),\r\n                    pi,\r\n                    obj.header.uuid +\r\n                      \"|\" +\r\n                      obj.header.version[0] +\r\n                      \".\" +\r\n                      obj.header.version[1] +\r\n                      \".\" +\r\n                      obj.header.version[2]\r\n                  )\r\n                );\r\n              }\r\n            }\r\n\r\n            if (obj.header.name) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.behaviorPackName,\r\n                  ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.behaviorPackName),\r\n                  pi,\r\n                  project.loc.getExpandedValue(obj.header.name)\r\n                )\r\n              );\r\n            }\r\n\r\n            if (obj.header.description) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.behaviorPackDescription,\r\n                  ProjectInfoUtilities.getTitleFromEnum(\r\n                    PackInfoGeneratorTest,\r\n                    PackInfoGeneratorTest.behaviorPackDescription\r\n                  ),\r\n                  pi,\r\n                  project.loc.getExpandedValue(obj.header.description)\r\n                )\r\n              );\r\n            }\r\n\r\n            if (obj.header.min_engine_version) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.behaviorPackMinEngineVersion,\r\n                  ProjectInfoUtilities.getTitleFromEnum(\r\n                    PackInfoGeneratorTest,\r\n                    PackInfoGeneratorTest.behaviorPackMinEngineVersion\r\n                  ),\r\n                  pi,\r\n                  obj.header.min_engine_version\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        const obj = (await pi.getJsonObject()) as IResourcePackManifest;\r\n\r\n        if (obj) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              PackInfoGeneratorTest.resourcePackManifest,\r\n              ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.resourcePackManifest),\r\n              pi\r\n            )\r\n          );\r\n\r\n          if (obj.subpacks) {\r\n            if (Array.isArray(obj.subpacks)) {\r\n              items.push(new ProjectInfoItem(InfoItemType.info, this.id, 18, \"Subpacks\", pi, obj.subpacks.length));\r\n\r\n              for (const sp of obj.subpacks) {\r\n                if (sp.memory_tier) {\r\n                  memoryTiersPi.spectrumIntFeature(\"Memory Tier\", sp.memory_tier);\r\n\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.info,\r\n                      this.id,\r\n                      MemoryTierBase + sp.memory_tier,\r\n                      \"Subpack Memory Tier \" + sp.memory_tier,\r\n                      pi,\r\n                      sp.name\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n\r\n          if (obj.format_version) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                PackInfoGeneratorTest.resourcePackFormatVersion,\r\n                ProjectInfoUtilities.getTitleFromEnum(\r\n                  PackInfoGeneratorTest,\r\n                  PackInfoGeneratorTest.resourcePackFormatVersion\r\n                ),\r\n                pi,\r\n                obj.format_version\r\n              )\r\n            );\r\n          }\r\n\r\n          if (obj.header) {\r\n            if (obj.header.uuid) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.resourcePackUuid,\r\n                  ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.resourcePackUuid),\r\n                  pi,\r\n                  obj.header.uuid\r\n                )\r\n              );\r\n            }\r\n            if (obj.header.uuid && obj.header.version) {\r\n              if (obj.header.version.length === 3) {\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.info,\r\n                    this.id,\r\n                    PackInfoGeneratorTest.resourcePackId,\r\n                    ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.resourcePackId),\r\n                    pi,\r\n                    obj.header.uuid +\r\n                      \"|\" +\r\n                      obj.header.version[0] +\r\n                      \".\" +\r\n                      obj.header.version[1] +\r\n                      \".\" +\r\n                      obj.header.version[2]\r\n                  )\r\n                );\r\n              }\r\n            }\r\n\r\n            if (obj.header.name) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.resourcePackName,\r\n                  ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.resourcePackName),\r\n                  pi,\r\n                  project.loc.getExpandedValue(obj.header.name)\r\n                )\r\n              );\r\n            }\r\n\r\n            if (obj.header.description) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.resourcePackDescription,\r\n                  ProjectInfoUtilities.getTitleFromEnum(\r\n                    PackInfoGeneratorTest,\r\n                    PackInfoGeneratorTest.resourcePackDescription\r\n                  ),\r\n                  pi,\r\n                  project.loc.getExpandedValue(obj.header.description)\r\n                )\r\n              );\r\n            }\r\n\r\n            if (obj.header.min_engine_version) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.resourcePackMinEngineVersion,\r\n                  ProjectInfoUtilities.getTitleFromEnum(\r\n                    PackInfoGeneratorTest,\r\n                    PackInfoGeneratorTest.resourcePackMinEngineVersion\r\n                  ),\r\n                  pi,\r\n                  obj.header.min_engine_version\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { ProjectItemStorageType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport { MaxItemTypes } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nconst TopicTestIdBase = 100;\r\n\r\n/**\r\n * Aggregates file line counts and size information by content type.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/linesize.form.json} for topic definitions\r\n */\r\nexport default class LineSizeInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"LINESIZE\";\r\n  title = \"File Line/Size Information\";\r\n  canAlwaysProcess = true;\r\n\r\n  getTopicData(topicId: number) {\r\n    if (topicId >= TopicTestIdBase) {\r\n      return {\r\n        title: ProjectItemUtilities.getDescriptionForType(topicId - TopicTestIdBase),\r\n      };\r\n    }\r\n\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const itemsByType: { [index: number]: ProjectInfoItem } = {};\r\n    const lineSizeCounts: number[] = [];\r\n\r\n    for (let i = 0; i < MaxItemTypes; i++) {\r\n      lineSizeCounts[i] = 0;\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n      let projInfoItem = undefined;\r\n\r\n      if (itemsByType[pi.itemType] !== undefined) {\r\n        projInfoItem = itemsByType[pi.itemType];\r\n      } else {\r\n        const name =\r\n          ProjectItemUtilities.getDescriptionForType(pi.itemType) +\r\n          \" file \" +\r\n          (ProjectItemUtilities.isBinaryType(pi.itemType) ? \"size\" : \"lines\");\r\n\r\n        projInfoItem = new ProjectInfoItem(InfoItemType.featureAggregate, this.id, TopicTestIdBase + pi.itemType, name);\r\n        itemsByType[pi.itemType] = projInfoItem;\r\n        items.push(projInfoItem);\r\n      }\r\n\r\n      if (pi.storageType === ProjectItemStorageType.singleFile) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        const file = pi.primaryFile;\r\n\r\n        if (file) {\r\n          if (!file.isContentLoaded) {\r\n            await file.loadContent();\r\n          }\r\n\r\n          projInfoItem.spectrumIntFeature(\"size\", file.coreContentLength);\r\n\r\n          const content = file.content;\r\n          if (content && typeof content === \"string\") {\r\n            projInfoItem.spectrumIntFeature(\"lines\", Utilities.countSignificantLines(content));\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport enum ComparisonType {\r\n  equals = \"=\",\r\n  lessThan = \"<\",\r\n  lessThanOrEqualTo = \"<=\",\r\n  greaterThan = \">\",\r\n  greaterThanOrEqualTo = \">=\",\r\n  isDefined = \"defined\",\r\n  isLiterallyDefined = \"literallyDefined\",\r\n  isNonEmpty = \"nonempty\",\r\n  matchesPattern = \"pattern\",\r\n}\r\n\r\n/**\r\n * Represents a condition that can be evaluated against data.\r\n *\r\n * Conditions are used to determine visibility of fields, validity of data,\r\n * and for summarizer token switching logic.\r\n *\r\n * @example\r\n * // Check if a field equals a specific value\r\n * { \"field\": \"max\", \"comparison\": \"=\", \"value\": 100 }\r\n *\r\n * @example\r\n * // Check if a boolean field is true\r\n * { \"field\": \"can_fly\", \"comparison\": \"=\", \"value\": true }\r\n *\r\n * @example\r\n * // Check if a numeric field is greater than a threshold\r\n * { \"field\": \"health\", \"comparison\": \">\", \"value\": 50 }\r\n *\r\n * @example\r\n * // Check if a field is defined (not undefined/null)\r\n * { \"field\": \"loot_table\", \"comparison\": \"defined\" }\r\n */\r\nexport default interface ICondition {\r\n  /**\r\n   * The field path to check. Supports dot notation for nested fields.\r\n   * @example \"max\", \"damage.min\", \"components.health\"\r\n   */\r\n  field?: string;\r\n\r\n  /**\r\n   * The comparison operation to perform.\r\n   */\r\n  comparison: ComparisonType | string;\r\n\r\n  /**\r\n   * The value to compare against.\r\n   * Supports numbers, strings, and booleans.\r\n   */\r\n  value?: number | string | boolean;\r\n\r\n  /**\r\n   * Alternative: match if the field value equals ANY of these values.\r\n   * Useful for enum-like checks.\r\n   */\r\n  anyValues?: number[] | string[] | boolean[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * # Summarizer Token Types\r\n *\r\n * This file defines the token types used to build summarizer phrases. A summarizer\r\n * produces natural language descriptions of structured data by evaluating a tree\r\n * of tokens against the data.\r\n *\r\n * ## Design Philosophy\r\n *\r\n * Summarizer tokens are designed to be:\r\n * - **AI-friendly**: Clear, self-documenting JSON that models can generate\r\n * - **Composable**: Tokens can be nested to build complex phrases\r\n * - **Conditional**: Any token can be hidden based on data conditions\r\n * - **Grammatically aware**: Built-in support for lists, plurals, and conjunctions\r\n *\r\n * ## Mini Style Guide for Writing Summarizers\r\n *\r\n * ### Phrase Structure\r\n * Phrases are designed to complete \"This object ____\", so they typically:\r\n * - Start with a verb: \"has\", \"can\", \"will\", \"is\", \"deals\", \"takes\"\r\n * - Use present tense for capabilities: \"can fly\", \"deals fire damage\"\r\n * - Use descriptive adjectives: \"extremely high\", \"dangerously low\", \"moderate\"\r\n *\r\n * ### Good Examples:\r\n * - \"has extremely high health (500 HP, stronger than an Ender Dragon)\"\r\n * - \"will catch fire when exposed to sunlight\"\r\n * - \"can teleport when attacked\"\r\n * - \"deals 15 damage per hit, which is enough to one-shot most passive mobs\"\r\n * - \"has a 25% chance to drop rare loot\"\r\n *\r\n * ### Avoid:\r\n * - Starting with articles: \"a high health mob\" \u274C\r\n * - Sentence fragments: \"health: 500\" \u274C\r\n * - Just stating values: \"has 500 health\" (prefer comparisons when possible)\r\n * - Passive voice when active is clearer: \"is damaged by fire\" vs \"takes fire damage\"\r\n *\r\n * ### Comparisons Make Data Meaningful\r\n * Raw numbers often mean little to readers. Use comparisons to known entities:\r\n * - \"stronger than an Iron Golem\" (100 HP)\r\n * - \"as fast as a Spider\" (0.3 speed)\r\n * - \"more health than an Ender Dragon\" (200 HP)\r\n * - \"can one-shot a Zombie\" (20 HP)\r\n *\r\n * ### When to Use Each Token Type\r\n *\r\n * | Token Type | Use When... | Example |\r\n * |------------|-------------|---------|\r\n * | literal | Static text that never changes | \"has \", \"HP\", \"per second\" |\r\n * | value | Showing the actual field value | \"{damage} damage\" \u2192 \"15 damage\" |\r\n * | switch | Describing value in qualitative terms | value>100 \u2192 \"extremely high\" |\r\n * | list | Multiple conditional items | \"can fly, swim, and teleport\" |\r\n * | template | Inserting values into sentences | \"deals {damage} {type} damage\" |\r\n * | plural | Singular/plural based on count | \"1 item\" vs \"5 items\" |\r\n * | reference | Comparing to known values | \"more than a Zombie's health\" |\r\n * | sample | Using example values from the form | \"like the Warden (500 HP)\" |\r\n * | unit | Formatting values with units | \"200 ticks (10 seconds)\" |\r\n * | exists | Checking if field is defined | \"has custom loot\" (if loot_table defined) |\r\n * | group | Grouping tokens for visibility | Wrap related tokens together |\r\n */\r\n\r\nimport ICondition from \"./ICondition\";\r\n\r\n/**\r\n * Semantic emphasis level for token display.\r\n *\r\n * Use semantic emphasis rather than literal styling (bold, italic) so that\r\n * the rendering can adapt to different themes and contexts.\r\n *\r\n * @example\r\n * // Make a value stand out\r\n * { \"type\": \"value\", \"field\": \"max\", \"effects\": { \"emphasis\": \"strong\" } }\r\n */\r\nexport enum SummarizerEmphasis {\r\n  /** Normal text weight, no special styling */\r\n  normal = \"normal\",\r\n  /** Make text stand out (typically bold or highlighted) */\r\n  strong = \"strong\",\r\n  /** De-emphasize text (typically lighter/smaller) */\r\n  subtle = \"subtle\",\r\n}\r\n\r\n/**\r\n * Semantic sentiment for color-coding tokens.\r\n *\r\n * Sentiment indicates the \"meaning\" of a value, allowing the renderer to\r\n * apply appropriate colors that work across themes.\r\n *\r\n * @example\r\n * // Show high health as positive (green)\r\n * { \"type\": \"value\", \"field\": \"max\", \"effects\": { \"sentiment\": \"positive\" } }\r\n *\r\n * // Show low health as negative (red)\r\n * { \"type\": \"literal\", \"text\": \"very low health\", \"effects\": { \"sentiment\": \"negative\" } }\r\n */\r\nexport enum SummarizerSentiment {\r\n  /** No special color treatment */\r\n  neutral = \"neutral\",\r\n  /** Good/desirable value (typically green) */\r\n  positive = \"positive\",\r\n  /** Bad/dangerous value (typically red) */\r\n  negative = \"negative\",\r\n  /** Caution/attention needed (typically yellow/orange) */\r\n  warning = \"warning\",\r\n  /** Informational highlight (typically blue) */\r\n  info = \"info\",\r\n}\r\n\r\n/**\r\n * Semantic role for consistent styling of different token types.\r\n *\r\n * This provides a way to ensure consistent styling for similar content\r\n * across different summarizers.\r\n *\r\n * @example\r\n * // Style as a value (might be monospace or highlighted)\r\n * { \"type\": \"value\", \"field\": \"damage\", \"effects\": { \"role\": \"value\" } }\r\n */\r\nexport enum SummarizerRole {\r\n  /** Plain text, no special role */\r\n  text = \"text\",\r\n  /** A data value (number, identifier) */\r\n  value = \"value\",\r\n  /** A unit label (HP, blocks, seconds) */\r\n  unit = \"unit\",\r\n  /** A label or category name */\r\n  label = \"label\",\r\n  /** A comparison or reference */\r\n  comparison = \"comparison\",\r\n}\r\n\r\n/**\r\n * Visual effects that can be applied to tokens for richer display.\r\n *\r\n * Effects are OPTIONAL and purely for enhanced rendering. The summarizer\r\n * will always produce valid plain text output regardless of effects.\r\n *\r\n * ## Design Philosophy\r\n *\r\n * Effects use SEMANTIC values (positive/negative, strong/subtle) rather than\r\n * literal styling (red, bold) so that:\r\n * - They adapt to light/dark themes\r\n * - They work with accessibility requirements\r\n * - They degrade gracefully to plain text\r\n *\r\n * ## When to Use Effects\r\n *\r\n * - **emphasis: \"strong\"** - For key values you want to stand out\r\n * - **emphasis: \"subtle\"** - For parenthetical context or units\r\n * - **sentiment: \"positive\"** - High health, good stats, buffs\r\n * - **sentiment: \"negative\"** - Low health, weaknesses, debuffs\r\n * - **sentiment: \"warning\"** - Dangerous abilities, caution needed\r\n * - **badge: true** - For categories, tags, or short labels\r\n * - **icon** - For visual flair (emoji work well)\r\n *\r\n * @example\r\n * // A token with multiple effects\r\n * {\r\n *   \"type\": \"value\",\r\n *   \"field\": \"max\",\r\n *   \"effects\": {\r\n *     \"emphasis\": \"strong\",\r\n *     \"sentiment\": \"positive\",\r\n *     \"icon\": \"\u2764\uFE0F\"\r\n *   }\r\n * }\r\n */\r\nexport interface ISummarizerEffects {\r\n  /**\r\n   * Emphasis level for the token.\r\n   * @default \"normal\"\r\n   */\r\n  emphasis?: SummarizerEmphasis | string;\r\n\r\n  /**\r\n   * Semantic sentiment for color-coding.\r\n   * @default \"neutral\"\r\n   */\r\n  sentiment?: SummarizerSentiment | string;\r\n\r\n  /**\r\n   * Semantic role for consistent styling.\r\n   * @default \"text\"\r\n   */\r\n  role?: SummarizerRole | string;\r\n\r\n  /**\r\n   * Render as a badge/pill shape.\r\n   * Good for short categories or tags like \"ranged\", \"explosive\", \"boss\".\r\n   * @default false\r\n   */\r\n  badge?: boolean;\r\n\r\n  /**\r\n   * Optional icon to display before the token text.\r\n   * Can be an emoji (\u2764\uFE0F, \u2694\uFE0F, \uD83C\uDFC3) or an icon identifier.\r\n   *\r\n   * @example\r\n   * // Emoji icon\r\n   * { \"icon\": \"\u2764\uFE0F\" }\r\n   *\r\n   * // Named icon (for icon font integration)\r\n   * { \"icon\": \"heart\" }\r\n   */\r\n  icon?: string;\r\n\r\n  /**\r\n   * Position of the icon relative to the text.\r\n   * @default \"before\"\r\n   */\r\n  iconPosition?: \"before\" | \"after\";\r\n}\r\n\r\n/**\r\n * Enumeration of all summarizer token types.\r\n *\r\n * @example\r\n * // A simple literal token\r\n * { \"type\": \"literal\", \"text\": \"has \" }\r\n *\r\n * @example\r\n * // A switch token for qualitative descriptions\r\n * {\r\n *   \"type\": \"switch\",\r\n *   \"cases\": [\r\n *     { \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 100 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"extremely high health\" }] }\r\n *   ]\r\n * }\r\n */\r\nexport enum SummarizerTokenType {\r\n  /**\r\n   * Outputs a static text string. The most basic token type.\r\n   * @example { \"type\": \"literal\", \"text\": \"has \" }\r\n   */\r\n  literal = \"literal\",\r\n\r\n  /**\r\n   * Inserts the value of a field from the data object.\r\n   * @example { \"type\": \"value\", \"field\": \"max\", \"format\": \"number\" }\r\n   */\r\n  value = \"value\",\r\n\r\n  /**\r\n   * Selects one of several token arrays based on conditions.\r\n   * Essential for qualitative descriptions (\"low\", \"medium\", \"high\").\r\n   * @example See ISwitchToken for full example\r\n   */\r\n  switch = \"switch\",\r\n\r\n  /**\r\n   * Renders a grammatically correct list of items.\r\n   * Handles \"a\", \"a and b\", \"a, b, and c\" automatically.\r\n   * @example See IListToken for full example\r\n   */\r\n  list = \"list\",\r\n\r\n  /**\r\n   * String interpolation with named placeholders.\r\n   * Useful for complex phrases with multiple values.\r\n   * @example { \"type\": \"template\", \"template\": \"deals {damage} {type} damage\" }\r\n   */\r\n  template = \"template\",\r\n\r\n  /**\r\n   * Handles singular/plural forms based on a numeric field.\r\n   * @example \"1 heart\" vs \"5 hearts\"\r\n   */\r\n  plural = \"plural\",\r\n\r\n  /**\r\n   * Pulls a sample value from the form definition to use as a reference.\r\n   * Encourages AI to use real-world examples from the data.\r\n   * @example { \"type\": \"sample\", \"samplePath\": \"entities/warden\", \"field\": \"max\" }\r\n   */\r\n  sample = \"sample\",\r\n\r\n  /**\r\n   * Formats a value with units and optional conversion.\r\n   * @example \"200 ticks (10 seconds)\"\r\n   */\r\n  unit = \"unit\",\r\n\r\n  /**\r\n   * Outputs tokens only if a field is defined (or undefined).\r\n   * @example \"has a custom loot table\" (only if loot_table exists)\r\n   */\r\n  exists = \"exists\",\r\n\r\n  /**\r\n   * Groups tokens together, useful for applying visibility to multiple tokens.\r\n   * @example Wrap \"(stronger than X)\" in a group with visibility condition\r\n   */\r\n  group = \"group\",\r\n\r\n  /**\r\n   * Joins child token arrays with a conjunction (\"and\", \"or\", \"but\").\r\n   * @example \"can fly and swim\" or \"immune to fire but weak to water\"\r\n   */\r\n  conjunction = \"conjunction\",\r\n}\r\n\r\n/**\r\n * Algorithms for making values more human-readable.\r\n *\r\n * @example\r\n * // In a value token:\r\n * { \"type\": \"value\", \"field\": \"entity_type\", \"humanify\": \"minecraft\" }\r\n * // Converts \"minecraft:zombie_pigman\" \u2192 \"Zombie Pigman\"\r\n */\r\nexport enum SummarizerHumanifyType {\r\n  /**\r\n   * No transformation, output the raw value.\r\n   */\r\n  none = \"none\",\r\n\r\n  /**\r\n   * General humanification: underscores to spaces, title case.\r\n   * \"my_cool_thing\" \u2192 \"My Cool Thing\"\r\n   */\r\n  general = \"general\",\r\n\r\n  /**\r\n   * Minecraft-specific humanification: removes namespace, converts to title case.\r\n   * \"minecraft:zombie_pigman\" \u2192 \"Zombie Pigman\"\r\n   * \"custom:my_entity\" \u2192 \"My Entity\"\r\n   */\r\n  minecraft = \"minecraft\",\r\n\r\n  /**\r\n   * Capitalize first letter only.\r\n   * \"hello world\" \u2192 \"Hello world\"\r\n   */\r\n  sentence = \"sentence\",\r\n}\r\n\r\n/**\r\n * Base interface for all summarizer tokens.\r\n *\r\n * Every token can have:\r\n * - Conditional visibility (appears only when conditions are met)\r\n * - Priority for truncation (lower number = more important)\r\n *\r\n * @example\r\n * // A token that only appears when health > 100\r\n * {\r\n *   \"type\": \"literal\",\r\n *   \"text\": \" (that's really tanky!)\",\r\n *   \"visibility\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 100 }]\r\n * }\r\n */\r\nexport interface ISummarizerTokenBase {\r\n  /**\r\n   * The type of token. Determines how the token is evaluated.\r\n   */\r\n  type: SummarizerTokenType | string;\r\n\r\n  /**\r\n   * Optional conditions that must ALL be true for this token to appear.\r\n   * Uses the same ICondition format as field visibility in forms.\r\n   *\r\n   * @example\r\n   * // Only show when health is defined and greater than 100\r\n   * \"visibility\": [\r\n   *   { \"field\": \"max\", \"comparison\": \"defined\" },\r\n   *   { \"field\": \"max\", \"comparison\": \">\", \"value\": 100 }\r\n   * ]\r\n   */\r\n  visibility?: ICondition[];\r\n\r\n  /**\r\n   * Priority for truncation when space is limited.\r\n   * Lower numbers are more important and will be kept.\r\n   * - Priority 1: Essential information, always show\r\n   * - Priority 2: Important details\r\n   * - Priority 3: Nice-to-have comparisons\r\n   * - Priority 4+: Optional flavor text\r\n   *\r\n   * @default 2\r\n   */\r\n  priority?: number;\r\n\r\n  /**\r\n   * Visual effects for enhanced rendering.\r\n   *\r\n   * Effects are optional and purely for display enhancement.\r\n   * The summarizer always produces valid plain text regardless of effects.\r\n   *\r\n   * @example\r\n   * // Make a value stand out with icon and positive sentiment\r\n   * {\r\n   *   \"type\": \"value\",\r\n   *   \"field\": \"max\",\r\n   *   \"effects\": {\r\n   *     \"emphasis\": \"strong\",\r\n   *     \"sentiment\": \"positive\",\r\n   *     \"icon\": \"\u2764\uFE0F\"\r\n   *   }\r\n   * }\r\n   */\r\n  effects?: ISummarizerEffects;\r\n}\r\n\r\n/**\r\n * Literal token: outputs static text.\r\n *\r\n * @example\r\n * // Simple text\r\n * { \"type\": \"literal\", \"text\": \"has \" }\r\n *\r\n * @example\r\n * // With conditional visibility - only show parenthetical for high values\r\n * {\r\n *   \"type\": \"literal\",\r\n *   \"text\": \" (that's incredibly powerful!)\",\r\n *   \"visibility\": [{ \"field\": \"damage\", \"comparison\": \">\", \"value\": 50 }],\r\n *   \"priority\": 3\r\n * }\r\n */\r\nexport interface ILiteralToken extends ISummarizerTokenBase {\r\n  type: \"literal\";\r\n\r\n  /**\r\n   * The literal text to output.\r\n   */\r\n  text: string;\r\n}\r\n\r\n/**\r\n * Value token: inserts a field value from the data object.\r\n *\r\n * @example\r\n * // Simple value insertion\r\n * { \"type\": \"value\", \"field\": \"max\" }\r\n * // With data { \"max\": 100 } \u2192 \"100\"\r\n *\r\n * @example\r\n * // With humanification for Minecraft identifiers\r\n * { \"type\": \"value\", \"field\": \"entity_type\", \"humanify\": \"minecraft\" }\r\n * // With data { \"entity_type\": \"minecraft:zombie\" } \u2192 \"Zombie\"\r\n *\r\n * @example\r\n * // With number formatting\r\n * { \"type\": \"value\", \"field\": \"chance\", \"format\": \"percent\" }\r\n * // With data { \"chance\": 0.25 } \u2192 \"25%\"\r\n */\r\nexport interface IValueToken extends ISummarizerTokenBase {\r\n  type: \"value\";\r\n\r\n  /**\r\n   * The field path to get the value from.\r\n   * Supports dot notation for nested fields: \"damage.min\"\r\n   */\r\n  field: string;\r\n\r\n  /**\r\n   * Optional format for the value.\r\n   * - \"number\": Format as locale number (1,000)\r\n   * - \"percent\": Multiply by 100 and add % (0.25 \u2192 \"25%\")\r\n   * - \"decimal:N\": Round to N decimal places\r\n   */\r\n  format?: string;\r\n\r\n  /**\r\n   * Algorithm to make the value more human-readable.\r\n   * @default \"none\"\r\n   */\r\n  humanify?: SummarizerHumanifyType | string;\r\n\r\n  /**\r\n   * Fallback text if the field is undefined.\r\n   * @default \"\" (empty string)\r\n   */\r\n  fallback?: string;\r\n}\r\n\r\n/**\r\n * A single case in a switch token.\r\n *\r\n * @example\r\n * {\r\n *   \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 200 }],\r\n *   \"tokens\": [{ \"type\": \"literal\", \"text\": \"extremely high health\" }]\r\n * }\r\n */\r\nexport interface ISwitchCase {\r\n  /**\r\n   * Conditions that must ALL be true for this case to be selected.\r\n   */\r\n  conditions: ICondition[];\r\n\r\n  /**\r\n   * Tokens to output when this case is selected.\r\n   */\r\n  tokens: ISummarizerToken[];\r\n}\r\n\r\n/**\r\n * Switch token: selects tokens based on conditions.\r\n *\r\n * Cases are evaluated in order, and the first matching case is used.\r\n * If no case matches, the default tokens are used (if provided).\r\n *\r\n * ## Best Practice: Order Cases from Most to Least Specific\r\n *\r\n * @example\r\n * // Describing health levels with rich comparisons\r\n * {\r\n *   \"type\": \"switch\",\r\n *   \"cases\": [\r\n *     {\r\n *       \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 500 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"god-tier health, rivaling a Wither\" }]\r\n *     },\r\n *     {\r\n *       \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 200 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"extremely high health, tougher than an Ender Dragon\" }]\r\n *     },\r\n *     {\r\n *       \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 100 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"high health, like an Iron Golem\" }]\r\n *     },\r\n *     {\r\n *       \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 40 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"above-average health\" }]\r\n *     },\r\n *     {\r\n *       \"conditions\": [{ \"field\": \"max\", \"comparison\": \"<\", \"value\": 10 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"very fragile, weaker than a Chicken\" }]\r\n *     }\r\n *   ],\r\n *   \"default\": [{ \"type\": \"literal\", \"text\": \"typical health for a mob\" }]\r\n * }\r\n */\r\nexport interface ISwitchToken extends ISummarizerTokenBase {\r\n  type: \"switch\";\r\n\r\n  /**\r\n   * Ordered list of cases. First matching case wins.\r\n   */\r\n  cases: ISwitchCase[];\r\n\r\n  /**\r\n   * Tokens to output if no case matches.\r\n   */\r\n  default?: ISummarizerToken[];\r\n}\r\n\r\n/**\r\n * List token: renders items as a grammatically correct list.\r\n *\r\n * Automatically handles:\r\n * - Empty list: outputs emptyText or nothing\r\n * - Single item: just the item\r\n * - Two items: \"A and B\"\r\n * - Three+ items: \"A, B, and C\"\r\n *\r\n * Only items whose tokens produce non-empty output are included.\r\n *\r\n * @example\r\n * // List of capabilities\r\n * {\r\n *   \"type\": \"list\",\r\n *   \"items\": [\r\n *     {\r\n *       \"visibility\": [{ \"field\": \"can_fly\", \"comparison\": \"=\", \"value\": true }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"fly\" }]\r\n *     },\r\n *     {\r\n *       \"visibility\": [{ \"field\": \"can_swim\", \"comparison\": \"=\", \"value\": true }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"swim\" }]\r\n *     },\r\n *     {\r\n *       \"visibility\": [{ \"field\": \"can_teleport\", \"comparison\": \"=\", \"value\": true }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"teleport\" }]\r\n *     }\r\n *   ],\r\n *   \"prefix\": [{ \"type\": \"literal\", \"text\": \"can \" }],\r\n *   \"emptyText\": \"has no special movement abilities\"\r\n * }\r\n * // With can_fly=true, can_teleport=true \u2192 \"can fly and teleport\"\r\n * // With all three true \u2192 \"can fly, swim, and teleport\"\r\n */\r\nexport interface IListToken extends ISummarizerTokenBase {\r\n  type: \"list\";\r\n\r\n  /**\r\n   * Each item is an object with optional visibility and required tokens.\r\n   */\r\n  items: IListItem[];\r\n\r\n  /**\r\n   * Separator between items (except the last two).\r\n   * @default \", \"\r\n   */\r\n  separator?: string;\r\n\r\n  /**\r\n   * Separator before the last item when there are 3+ items.\r\n   * @default \", and \"\r\n   */\r\n  finalSeparator?: string;\r\n\r\n  /**\r\n   * Separator when there are exactly 2 items.\r\n   * @default \" and \"\r\n   */\r\n  twoItemSeparator?: string;\r\n\r\n  /**\r\n   * Text to output when no items are visible.\r\n   * If not provided, the entire list token outputs nothing.\r\n   */\r\n  emptyText?: string;\r\n\r\n  /**\r\n   * Tokens to output before the list (only if list is non-empty).\r\n   */\r\n  prefix?: ISummarizerToken[];\r\n\r\n  /**\r\n   * Tokens to output after the list (only if list is non-empty).\r\n   */\r\n  suffix?: ISummarizerToken[];\r\n}\r\n\r\n/**\r\n * A single item in a list token.\r\n */\r\nexport interface IListItem {\r\n  /**\r\n   * Conditions for this item to be included in the list.\r\n   */\r\n  visibility?: ICondition[];\r\n\r\n  /**\r\n   * Tokens that make up this list item.\r\n   */\r\n  tokens: ISummarizerToken[];\r\n}\r\n\r\n/**\r\n * Template token: string interpolation with named placeholders.\r\n *\r\n * Placeholders use {name} syntax and are replaced with evaluated token arrays.\r\n *\r\n * @example\r\n * {\r\n *   \"type\": \"template\",\r\n *   \"template\": \"deals {damage} {damageType} damage per hit\",\r\n *   \"values\": {\r\n *     \"damage\": [{ \"type\": \"value\", \"field\": \"damage\" }],\r\n *     \"damageType\": [{ \"type\": \"value\", \"field\": \"damage_type\", \"humanify\": \"minecraft\" }]\r\n *   }\r\n * }\r\n * // With { damage: 15, damage_type: \"minecraft:fire\" }\r\n * // \u2192 \"deals 15 Fire damage per hit\"\r\n */\r\nexport interface ITemplateToken extends ISummarizerTokenBase {\r\n  type: \"template\";\r\n\r\n  /**\r\n   * Template string with {placeholder} syntax.\r\n   */\r\n  template: string;\r\n\r\n  /**\r\n   * Map of placeholder names to token arrays.\r\n   */\r\n  values: { [key: string]: ISummarizerToken[] };\r\n}\r\n\r\n/**\r\n * Plural token: handles singular/plural forms based on a count.\r\n *\r\n * @example\r\n * {\r\n *   \"type\": \"plural\",\r\n *   \"countField\": \"item_count\",\r\n *   \"singular\": [{ \"type\": \"literal\", \"text\": \"item\" }],\r\n *   \"plural\": [{ \"type\": \"literal\", \"text\": \"items\" }],\r\n *   \"includeCount\": true\r\n * }\r\n * // With { item_count: 1 } \u2192 \"1 item\"\r\n * // With { item_count: 5 } \u2192 \"5 items\"\r\n *\r\n * @example\r\n * // Without including the count\r\n * {\r\n *   \"type\": \"plural\",\r\n *   \"countField\": \"heart_count\",\r\n *   \"singular\": [{ \"type\": \"literal\", \"text\": \"heart\" }],\r\n *   \"plural\": [{ \"type\": \"literal\", \"text\": \"hearts\" }],\r\n *   \"zero\": [{ \"type\": \"literal\", \"text\": \"no hearts\" }],\r\n *   \"includeCount\": false\r\n * }\r\n */\r\nexport interface IPluralToken extends ISummarizerTokenBase {\r\n  type: \"plural\";\r\n\r\n  /**\r\n   * Field containing the count value.\r\n   */\r\n  countField: string;\r\n\r\n  /**\r\n   * Tokens for singular form (count === 1).\r\n   */\r\n  singular: ISummarizerToken[];\r\n\r\n  /**\r\n   * Tokens for plural form (count !== 1).\r\n   */\r\n  plural: ISummarizerToken[];\r\n\r\n  /**\r\n   * Tokens for zero count. If not provided, uses plural.\r\n   */\r\n  zero?: ISummarizerToken[];\r\n\r\n  /**\r\n   * Whether to prepend the count value.\r\n   * @default true\r\n   */\r\n  includeCount?: boolean;\r\n}\r\n\r\n/**\r\n * Sample token: pulls a sample value from form.json to use as a reference.\r\n *\r\n * This encourages AI to create rich comparisons using real examples from the data.\r\n * The form.json can contain samples like:\r\n * ```json\r\n * {\r\n *   \"samples\": {\r\n *     \"entities/warden\": { \"max\": 500, \"value\": 500 },\r\n *     \"entities/zombie\": { \"max\": 20, \"value\": 20 }\r\n *   }\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * {\r\n *   \"type\": \"sample\",\r\n *   \"samplePath\": \"entities/warden\",\r\n *   \"field\": \"max\",\r\n *   \"template\": [\r\n *     { \"type\": \"literal\", \"text\": \"like a Warden (\" },\r\n *     { \"type\": \"value\", \"field\": \"__sampleValue\" },\r\n *     { \"type\": \"literal\", \"text\": \" HP)\" }\r\n *   ]\r\n * }\r\n * // \u2192 \"like a Warden (500 HP)\"\r\n */\r\nexport interface ISampleToken extends ISummarizerTokenBase {\r\n  type: \"sample\";\r\n\r\n  /**\r\n   * Path to the sample in the form's samples collection.\r\n   * e.g., \"entities/warden\", \"items/diamond_sword\"\r\n   */\r\n  samplePath: string;\r\n\r\n  /**\r\n   * Field within the sample to extract.\r\n   */\r\n  field: string;\r\n\r\n  /**\r\n   * Tokens to output. Use { \"type\": \"value\", \"field\": \"__sampleValue\" }\r\n   * to insert the extracted sample value.\r\n   */\r\n  template: ISummarizerToken[];\r\n\r\n  /**\r\n   * Humanify algorithm for the sample name (derived from samplePath).\r\n   * @default \"minecraft\"\r\n   */\r\n  humanifySampleName?: SummarizerHumanifyType | string;\r\n}\r\n\r\n/**\r\n * Unit token: formats a value with units and optional conversion.\r\n *\r\n * @example\r\n * // Simple unit display\r\n * {\r\n *   \"type\": \"unit\",\r\n *   \"field\": \"health\",\r\n *   \"unit\": \"HP\"\r\n * }\r\n * // With { health: 100 } \u2192 \"100 HP\"\r\n *\r\n * @example\r\n * // With unit conversion\r\n * {\r\n *   \"type\": \"unit\",\r\n *   \"field\": \"duration\",\r\n *   \"unit\": \"ticks\",\r\n *   \"conversion\": {\r\n *     \"targetUnit\": \"seconds\",\r\n *     \"factor\": 0.05\r\n *   },\r\n *   \"showBoth\": true\r\n * }\r\n * // With { duration: 200 } \u2192 \"200 ticks (10 seconds)\"\r\n *\r\n * @example\r\n * // Blocks/meters conversion\r\n * {\r\n *   \"type\": \"unit\",\r\n *   \"field\": \"range\",\r\n *   \"unit\": \"blocks\",\r\n *   \"pluralize\": true\r\n * }\r\n * // With { range: 1 } \u2192 \"1 block\"\r\n * // With { range: 5 } \u2192 \"5 blocks\"\r\n */\r\nexport interface IUnitToken extends ISummarizerTokenBase {\r\n  type: \"unit\";\r\n\r\n  /**\r\n   * Field containing the numeric value.\r\n   */\r\n  field: string;\r\n\r\n  /**\r\n   * The unit name (e.g., \"HP\", \"blocks\", \"ticks\", \"seconds\").\r\n   */\r\n  unit: string;\r\n\r\n  /**\r\n   * Plural form of the unit (e.g., \"block\" \u2192 \"blocks\").\r\n   * If not provided and pluralize is true, adds \"s\".\r\n   */\r\n  unitPlural?: string;\r\n\r\n  /**\r\n   * Whether to pluralize the unit based on the value.\r\n   * @default false\r\n   */\r\n  pluralize?: boolean;\r\n\r\n  /**\r\n   * Optional conversion to another unit.\r\n   */\r\n  conversion?: {\r\n    /**\r\n     * Name of the converted unit.\r\n     */\r\n    targetUnit: string;\r\n\r\n    /**\r\n     * Multiply original value by this factor to get converted value.\r\n     */\r\n    factor: number;\r\n\r\n    /**\r\n     * Plural form of target unit.\r\n     */\r\n    targetUnitPlural?: string;\r\n\r\n    /**\r\n     * Decimal places for converted value.\r\n     * @default 1\r\n     */\r\n    decimals?: number;\r\n  };\r\n\r\n  /**\r\n   * If conversion is defined, whether to show both values.\r\n   * @default true\r\n   */\r\n  showBoth?: boolean;\r\n\r\n  /**\r\n   * Format for the parenthetical when showBoth is true.\r\n   * @default \"({value} {unit})\"\r\n   */\r\n  bothFormat?: string;\r\n}\r\n\r\n/**\r\n * Exists token: outputs tokens only if a field is defined (or undefined).\r\n *\r\n * Useful for optional fields where presence/absence is meaningful.\r\n *\r\n * @example\r\n * {\r\n *   \"type\": \"exists\",\r\n *   \"field\": \"loot_table\",\r\n *   \"whenDefined\": [\r\n *     { \"type\": \"literal\", \"text\": \"has a custom loot table\" }\r\n *   ],\r\n *   \"whenUndefined\": [\r\n *     { \"type\": \"literal\", \"text\": \"uses default loot\" }\r\n *   ]\r\n * }\r\n *\r\n * @example\r\n * // Only show something when defined, nothing otherwise\r\n * {\r\n *   \"type\": \"exists\",\r\n *   \"field\": \"on_death_event\",\r\n *   \"whenDefined\": [\r\n *     { \"type\": \"literal\", \"text\": \"triggers an event on death\" }\r\n *   ]\r\n * }\r\n */\r\nexport interface IExistsToken extends ISummarizerTokenBase {\r\n  type: \"exists\";\r\n\r\n  /**\r\n   * Field to check for existence.\r\n   */\r\n  field: string;\r\n\r\n  /**\r\n   * Tokens to output when the field IS defined.\r\n   */\r\n  whenDefined: ISummarizerToken[];\r\n\r\n  /**\r\n   * Tokens to output when the field is NOT defined.\r\n   * If not provided, outputs nothing when undefined.\r\n   */\r\n  whenUndefined?: ISummarizerToken[];\r\n\r\n  /**\r\n   * If true, also treat empty strings, empty arrays, and empty objects as \"undefined\".\r\n   * @default false\r\n   */\r\n  treatEmptyAsUndefined?: boolean;\r\n}\r\n\r\n/**\r\n * Group token: groups tokens together, useful for shared visibility.\r\n *\r\n * @example\r\n * // A parenthetical that only appears under certain conditions\r\n * {\r\n *   \"type\": \"group\",\r\n *   \"visibility\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 100 }],\r\n *   \"tokens\": [\r\n *     { \"type\": \"literal\", \"text\": \" (\" },\r\n *     { \"type\": \"reference\", \"field\": \"max\", \"referenceId\": \"iron_golem_health\", ... },\r\n *     { \"type\": \"literal\", \"text\": \")\" }\r\n *   ]\r\n * }\r\n */\r\nexport interface IGroupToken extends ISummarizerTokenBase {\r\n  type: \"group\";\r\n\r\n  /**\r\n   * Tokens in this group.\r\n   */\r\n  tokens: ISummarizerToken[];\r\n}\r\n\r\n/**\r\n * Conjunction token: joins child token arrays with a conjunction.\r\n *\r\n * @example\r\n * {\r\n *   \"type\": \"conjunction\",\r\n *   \"conjunction\": \"and\",\r\n *   \"items\": [\r\n *     { \"tokens\": [{ \"type\": \"literal\", \"text\": \"can fly\" }] },\r\n *     { \"tokens\": [{ \"type\": \"literal\", \"text\": \"can swim\" }] }\r\n *   ]\r\n * }\r\n * // \u2192 \"can fly and can swim\"\r\n *\r\n * @example\r\n * // With \"but\" for contrasts\r\n * {\r\n *   \"type\": \"conjunction\",\r\n *   \"conjunction\": \"but\",\r\n *   \"items\": [\r\n *     { \"tokens\": [{ \"type\": \"literal\", \"text\": \"is immune to fire\" }] },\r\n *     { \"tokens\": [{ \"type\": \"literal\", \"text\": \"is weak to water\" }] }\r\n *   ]\r\n * }\r\n * // \u2192 \"is immune to fire but is weak to water\"\r\n */\r\nexport interface IConjunctionToken extends ISummarizerTokenBase {\r\n  type: \"conjunction\";\r\n\r\n  /**\r\n   * The conjunction word to use.\r\n   */\r\n  conjunction: \"and\" | \"or\" | \"but\" | string;\r\n\r\n  /**\r\n   * Items to join with the conjunction.\r\n   */\r\n  items: IListItem[];\r\n}\r\n\r\n/**\r\n * Union type of all summarizer token types.\r\n */\r\nexport type ISummarizerToken =\r\n  | ILiteralToken\r\n  | IValueToken\r\n  | ISwitchToken\r\n  | IListToken\r\n  | ITemplateToken\r\n  | IPluralToken\r\n  | ISampleToken\r\n  | IUnitToken\r\n  | IExistsToken\r\n  | IGroupToken\r\n  | IConjunctionToken;\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * # Summarizer Evaluator\r\n *\r\n * This class evaluates a summarizer definition against data to produce\r\n * natural language phrases describing the data.\r\n *\r\n * ## Usage\r\n *\r\n * ```typescript\r\n * const evaluator = new SummarizerEvaluator();\r\n * const result = evaluator.evaluate(summarizer, data, options);\r\n *\r\n * console.log(result.phrases);\r\n * // [\"has extremely high health (500 HP)\", \"can fly and teleport\"]\r\n *\r\n * console.log(result.asCompleteSentence);\r\n * // \"This entity has extremely high health (500 HP), can fly and teleport.\"\r\n * ```\r\n */\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ICondition, { ComparisonType } from \"./ICondition\";\r\nimport IFormDefinition from \"./IFormDefinition\";\r\nimport ISummarizer, {\r\n  ISummarizerEvaluatedPhrase,\r\n  ISummarizerEvaluatedResult,\r\n  ISummarizerEvaluatedToken,\r\n  ISummarizerOptions,\r\n  ISummarizerResult,\r\n} from \"./ISummarizer\";\r\nimport {\r\n  IConjunctionToken,\r\n  IExistsToken,\r\n  IGroupToken,\r\n  IListToken,\r\n  ILiteralToken,\r\n  IPluralToken,\r\n  ISampleToken,\r\n  ISummarizerEffects,\r\n  ISummarizerToken,\r\n  ISummarizerTokenBase,\r\n  ISwitchToken,\r\n  ITemplateToken,\r\n  IUnitToken,\r\n  IValueToken,\r\n  SummarizerHumanifyType,\r\n  SummarizerTokenType,\r\n} from \"./ISummarizerToken\";\r\n\r\n/**\r\n * Evaluates summarizer definitions against data objects.\r\n *\r\n * ## Design Philosophy\r\n *\r\n * Summarizers are **authored**, not dynamically generated. When creating a\r\n * summarizer (by AI or human), the author looks at form samples and bakes in\r\n * meaningful comparisons as literal text (e.g., \"stronger than an Iron Golem\").\r\n *\r\n * This evaluator focuses on:\r\n * - Evaluating conditions to select which phrases/tokens to display\r\n * - Formatting values with units and humanification\r\n * - Combining phrases with proper grammar\r\n *\r\n * It does NOT maintain a catalog of reference values - comparisons are\r\n * baked into the summarizer definition as literal text.\r\n */\r\nexport default class SummarizerEvaluator {\r\n  private formDefinition?: IFormDefinition;\r\n  private currentData?: object;\r\n  private options: ISummarizerOptions;\r\n\r\n  /**\r\n   * Create a new SummarizerEvaluator.\r\n   */\r\n  constructor() {\r\n    this.options = {};\r\n  }\r\n\r\n  /**\r\n   * Evaluate a summarizer against data to produce natural language phrases.\r\n   *\r\n   * @param summarizer The summarizer definition\r\n   * @param data The data object to summarize\r\n   * @param formDefinition Optional form definition for sample lookup\r\n   * @param options Evaluation options\r\n   * @returns Result containing phrases and formatted output\r\n   *\r\n   * @example\r\n   * const result = evaluator.evaluate(\r\n   *   healthSummarizer,\r\n   *   { max: 500, value: 500 },\r\n   *   healthForm\r\n   * );\r\n   * // result.phrases = [\"has god-tier health (500 HP)\"]\r\n   * // result.asCompleteSentence = \"This entity has god-tier health (500 HP).\"\r\n   */\r\n  evaluate(\r\n    summarizer: ISummarizer,\r\n    data: object,\r\n    formDefinition?: IFormDefinition,\r\n    options?: ISummarizerOptions\r\n  ): ISummarizerResult {\r\n    this.formDefinition = formDefinition;\r\n    this.currentData = data;\r\n    this.options = options || {};\r\n\r\n    const debug = this.options.debug\r\n      ? {\r\n          includedPhrases: [] as string[],\r\n          excludedPhrases: [] as string[],\r\n          truncatedPhrases: [] as string[],\r\n        }\r\n      : undefined;\r\n\r\n    // Evaluate all phrases\r\n    const evaluatedPhrases: { text: string; priority: number; id?: string }[] = [];\r\n\r\n    for (const phrase of summarizer.phrases) {\r\n      const phraseId = phrase.id || `phrase_${evaluatedPhrases.length}`;\r\n\r\n      // Check category filters\r\n      if (this.options.includeCategories && phrase.category) {\r\n        if (!this.options.includeCategories.includes(phrase.category)) {\r\n          debug?.excludedPhrases.push(phraseId);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      if (this.options.excludeCategories && phrase.category) {\r\n        if (this.options.excludeCategories.includes(phrase.category)) {\r\n          debug?.excludedPhrases.push(phraseId);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      // Check visibility conditions\r\n      if (phrase.visibility && !this.checkConditions(phrase.visibility, data)) {\r\n        debug?.excludedPhrases.push(phraseId);\r\n        continue;\r\n      }\r\n\r\n      // Evaluate the phrase tokens\r\n      const text = this.evaluateTokens(phrase.tokens, data);\r\n\r\n      if (text.trim().length > 0) {\r\n        const priority = phrase.priority ?? 2;\r\n\r\n        // Check priority filter\r\n        if (this.options.maxPriority !== undefined && priority > this.options.maxPriority) {\r\n          debug?.excludedPhrases.push(phraseId);\r\n          continue;\r\n        }\r\n\r\n        evaluatedPhrases.push({\r\n          text: text.trim(),\r\n          priority,\r\n          id: phraseId,\r\n        });\r\n        debug?.includedPhrases.push(phraseId);\r\n      } else {\r\n        debug?.excludedPhrases.push(phraseId);\r\n      }\r\n    }\r\n\r\n    // Sort by priority (lower = more important)\r\n    evaluatedPhrases.sort((a, b) => a.priority - b.priority);\r\n\r\n    // Apply max phrases limit\r\n    let phrases = evaluatedPhrases.map((p) => p.text);\r\n    if (this.options.maxPhrases !== undefined && phrases.length > this.options.maxPhrases) {\r\n      const truncated = evaluatedPhrases.slice(this.options.maxPhrases);\r\n      debug?.truncatedPhrases.push(...truncated.map((p) => p.id || \"unknown\"));\r\n      phrases = phrases.slice(0, this.options.maxPhrases);\r\n    }\r\n\r\n    // Build result\r\n    const asSentence = this.joinPhrases(phrases);\r\n    const asCompleteSentence = phrases.length > 0 ? `This entity ${asSentence}.` : \"\";\r\n\r\n    return {\r\n      phrases,\r\n      asSentence,\r\n      asCompleteSentence,\r\n      debug,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Evaluate a summarizer against data with structured token output for rich rendering.\r\n   *\r\n   * This method is similar to evaluate() but returns structured data that preserves\r\n   * token boundaries and effects, allowing the UI to render tokens with styling.\r\n   *\r\n   * @param summarizer The summarizer definition\r\n   * @param data The data object to summarize\r\n   * @param formDefinition Optional form definition for sample lookup\r\n   * @param options Evaluation options\r\n   * @returns Result containing structured tokens with effects\r\n   *\r\n   * @example\r\n   * const result = evaluator.evaluateWithEffects(\r\n   *   healthSummarizer,\r\n   *   { max: 500, value: 500 },\r\n   *   healthForm\r\n   * );\r\n   * // result.evaluatedPhrases[0].tokens = [\r\n   * //   { text: \"has \", effects: undefined },\r\n   * //   { text: \"god-tier health\", effects: { emphasis: \"strong\", sentiment: \"positive\" } },\r\n   * //   { text: \" (\", effects: { emphasis: \"subtle\" } },\r\n   * //   { text: \"500 HP\", effects: { emphasis: \"strong\", role: \"value\" } },\r\n   * //   { text: \")\", effects: { emphasis: \"subtle\" } }\r\n   * // ]\r\n   */\r\n  evaluateWithEffects(\r\n    summarizer: ISummarizer,\r\n    data: object,\r\n    formDefinition?: IFormDefinition,\r\n    options?: ISummarizerOptions\r\n  ): ISummarizerEvaluatedResult {\r\n    this.formDefinition = formDefinition;\r\n    this.currentData = data;\r\n    this.options = options || {};\r\n\r\n    const debug = this.options.debug\r\n      ? {\r\n          includedPhrases: [] as string[],\r\n          excludedPhrases: [] as string[],\r\n          truncatedPhrases: [] as string[],\r\n        }\r\n      : undefined;\r\n\r\n    // Evaluate all phrases with structured output\r\n    const evaluatedPhrases: ISummarizerEvaluatedPhrase[] = [];\r\n\r\n    for (const phrase of summarizer.phrases) {\r\n      const phraseId = phrase.id || `phrase_${evaluatedPhrases.length}`;\r\n\r\n      // Check category filters\r\n      if (this.options.includeCategories && phrase.category) {\r\n        if (!this.options.includeCategories.includes(phrase.category)) {\r\n          debug?.excludedPhrases.push(phraseId);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      if (this.options.excludeCategories && phrase.category) {\r\n        if (this.options.excludeCategories.includes(phrase.category)) {\r\n          debug?.excludedPhrases.push(phraseId);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      // Check visibility conditions\r\n      if (phrase.visibility && !this.checkConditions(phrase.visibility, data)) {\r\n        debug?.excludedPhrases.push(phraseId);\r\n        continue;\r\n      }\r\n\r\n      // Check priority filter\r\n      const priority = phrase.priority ?? 2;\r\n      if (this.options.maxPriority !== undefined && priority > this.options.maxPriority) {\r\n        debug?.excludedPhrases.push(phraseId);\r\n        continue;\r\n      }\r\n\r\n      // Evaluate the phrase tokens with effects\r\n      const tokens = this.evaluateTokensWithEffects(phrase.tokens, data);\r\n      const plainText = tokens.map((t) => t.text).join(\"\");\r\n\r\n      if (plainText.trim().length > 0) {\r\n        evaluatedPhrases.push({\r\n          id: phraseId,\r\n          category: phrase.category,\r\n          priority,\r\n          tokens,\r\n          plainText: plainText.trim(),\r\n        });\r\n        debug?.includedPhrases.push(phraseId);\r\n      } else {\r\n        debug?.excludedPhrases.push(phraseId);\r\n      }\r\n    }\r\n\r\n    // Sort by priority (lower = more important)\r\n    evaluatedPhrases.sort((a, b) => a.priority - b.priority);\r\n\r\n    // Apply max phrases limit\r\n    let resultPhrases = evaluatedPhrases;\r\n    if (this.options.maxPhrases !== undefined && resultPhrases.length > this.options.maxPhrases) {\r\n      const truncated = resultPhrases.slice(this.options.maxPhrases);\r\n      debug?.truncatedPhrases.push(...truncated.map((p) => p.id || \"unknown\"));\r\n      resultPhrases = resultPhrases.slice(0, this.options.maxPhrases);\r\n    }\r\n\r\n    // Build result\r\n    const phrases = resultPhrases.map((p) => p.plainText);\r\n    const asSentence = this.joinPhrases(phrases);\r\n    const asCompleteSentence = phrases.length > 0 ? `This entity ${asSentence}.` : \"\";\r\n\r\n    return {\r\n      evaluatedPhrases: resultPhrases,\r\n      phrases,\r\n      asSentence,\r\n      asCompleteSentence,\r\n      debug,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Join phrases into a grammatically correct sentence.\r\n   */\r\n  private joinPhrases(phrases: string[]): string {\r\n    if (phrases.length === 0) {\r\n      return \"\";\r\n    }\r\n    if (phrases.length === 1) {\r\n      return phrases[0];\r\n    }\r\n    if (phrases.length === 2) {\r\n      return `${phrases[0]} and ${phrases[1]}`;\r\n    }\r\n\r\n    const allButLast = phrases.slice(0, -1).join(\", \");\r\n    return `${allButLast}, and ${phrases[phrases.length - 1]}`;\r\n  }\r\n\r\n  /**\r\n   * Evaluate an array of tokens and return structured output with effects.\r\n   *\r\n   * This method preserves token boundaries and effects for rich rendering.\r\n   */\r\n  private evaluateTokensWithEffects(tokens: ISummarizerToken[], data: object): ISummarizerEvaluatedToken[] {\r\n    const result: ISummarizerEvaluatedToken[] = [];\r\n\r\n    for (const token of tokens) {\r\n      // Check token visibility\r\n      if (token.visibility && !this.checkConditions(token.visibility, data)) {\r\n        continue;\r\n      }\r\n\r\n      const evaluatedTokens = this.evaluateTokenWithEffects(token, data);\r\n      result.push(...evaluatedTokens);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a single token and return structured output with effects.\r\n   *\r\n   * Some token types (like switch, list, template) recursively evaluate\r\n   * child tokens and inherit effects from the parent.\r\n   */\r\n  private evaluateTokenWithEffects(token: ISummarizerToken, data: object): ISummarizerEvaluatedToken[] {\r\n    const baseEffects = token.effects;\r\n\r\n    switch (token.type) {\r\n      case SummarizerTokenType.literal:\r\n      case \"literal\": {\r\n        const text = (token as ILiteralToken).text;\r\n        if (text) {\r\n          return [{ text, effects: baseEffects }];\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.value:\r\n      case \"value\": {\r\n        const text = this.evaluateValueToken(token as IValueToken, data);\r\n        if (text) {\r\n          // Value tokens default to \"value\" role if no effects specified\r\n          const effects = baseEffects || { role: \"value\" };\r\n          return [{ text, effects }];\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.switch:\r\n      case \"switch\": {\r\n        const switchToken = token as ISwitchToken;\r\n        for (const switchCase of switchToken.cases) {\r\n          if (this.checkConditions(switchCase.conditions, data)) {\r\n            const childTokens = this.evaluateTokensWithEffects(switchCase.tokens, data);\r\n            // Apply parent effects to children that don't have their own\r\n            return this.applyEffectsToChildren(childTokens, baseEffects);\r\n          }\r\n        }\r\n        if (switchToken.default) {\r\n          const childTokens = this.evaluateTokensWithEffects(switchToken.default, data);\r\n          return this.applyEffectsToChildren(childTokens, baseEffects);\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.list:\r\n      case \"list\": {\r\n        const listToken = token as IListToken;\r\n        const visibleItems: ISummarizerEvaluatedToken[][] = [];\r\n\r\n        for (const item of listToken.items) {\r\n          if (item.visibility && !this.checkConditions(item.visibility, data)) {\r\n            continue;\r\n          }\r\n          const itemTokens = this.evaluateTokensWithEffects(item.tokens, data);\r\n          const itemText = itemTokens.map((t) => t.text).join(\"\");\r\n          if (itemText.trim().length > 0) {\r\n            visibleItems.push(itemTokens);\r\n          }\r\n        }\r\n\r\n        if (visibleItems.length === 0) {\r\n          if (listToken.emptyText) {\r\n            return [{ text: listToken.emptyText, effects: baseEffects }];\r\n          }\r\n          return [];\r\n        }\r\n\r\n        // Build the list with separators\r\n        const result: ISummarizerEvaluatedToken[] = [];\r\n\r\n        // Add prefix\r\n        if (listToken.prefix) {\r\n          result.push(...this.evaluateTokensWithEffects(listToken.prefix, data));\r\n        }\r\n\r\n        for (let i = 0; i < visibleItems.length; i++) {\r\n          result.push(...visibleItems[i]);\r\n\r\n          if (i < visibleItems.length - 1) {\r\n            let sep: string;\r\n            if (visibleItems.length === 2) {\r\n              sep = listToken.twoItemSeparator ?? \" and \";\r\n            } else if (i === visibleItems.length - 2) {\r\n              sep = listToken.finalSeparator ?? \", and \";\r\n            } else {\r\n              sep = listToken.separator ?? \", \";\r\n            }\r\n            result.push({ text: sep, effects: { emphasis: \"subtle\" } });\r\n          }\r\n        }\r\n\r\n        // Add suffix\r\n        if (listToken.suffix) {\r\n          result.push(...this.evaluateTokensWithEffects(listToken.suffix, data));\r\n        }\r\n\r\n        return this.applyEffectsToChildren(result, baseEffects);\r\n      }\r\n\r\n      case SummarizerTokenType.template:\r\n      case \"template\": {\r\n        const templateToken = token as ITemplateToken;\r\n        // For templates, we need to parse the template and insert evaluated values\r\n        const result: ISummarizerEvaluatedToken[] = [];\r\n        const template = templateToken.template;\r\n        const parts = template.split(/(\\{[^}]+\\})/);\r\n\r\n        for (const part of parts) {\r\n          if (part.startsWith(\"{\") && part.endsWith(\"}\")) {\r\n            const key = part.slice(1, -1);\r\n            const valueTokens = templateToken.values[key];\r\n            if (valueTokens) {\r\n              result.push(...this.evaluateTokensWithEffects(valueTokens, data));\r\n            }\r\n          } else if (part.length > 0) {\r\n            result.push({ text: part, effects: undefined });\r\n          }\r\n        }\r\n\r\n        return this.applyEffectsToChildren(result, baseEffects);\r\n      }\r\n\r\n      case SummarizerTokenType.plural:\r\n      case \"plural\": {\r\n        const text = this.evaluatePluralToken(token as IPluralToken, data);\r\n        if (text) {\r\n          return [{ text, effects: baseEffects }];\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.sample:\r\n      case \"sample\": {\r\n        const text = this.evaluateSampleToken(token as ISampleToken, data);\r\n        if (text) {\r\n          return [{ text, effects: baseEffects }];\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.unit:\r\n      case \"unit\": {\r\n        const text = this.evaluateUnitToken(token as IUnitToken, data);\r\n        if (text) {\r\n          // Unit tokens get \"value\" role for the number and \"unit\" role overall\r\n          const effects = baseEffects || { role: \"value\" };\r\n          return [{ text, effects }];\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.exists:\r\n      case \"exists\": {\r\n        const existsToken = token as IExistsToken;\r\n        const value = this.getFieldValue(existsToken.field, data);\r\n        let isDefined = value !== undefined && value !== null;\r\n\r\n        if (isDefined && existsToken.treatEmptyAsUndefined) {\r\n          if (typeof value === \"string\" && value.length === 0) {\r\n            isDefined = false;\r\n          } else if (Array.isArray(value) && value.length === 0) {\r\n            isDefined = false;\r\n          } else if (typeof value === \"object\" && Object.keys(value).length === 0) {\r\n            isDefined = false;\r\n          }\r\n        }\r\n\r\n        if (isDefined) {\r\n          const childTokens = this.evaluateTokensWithEffects(existsToken.whenDefined, data);\r\n          return this.applyEffectsToChildren(childTokens, baseEffects);\r\n        } else if (existsToken.whenUndefined) {\r\n          const childTokens = this.evaluateTokensWithEffects(existsToken.whenUndefined, data);\r\n          return this.applyEffectsToChildren(childTokens, baseEffects);\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.group:\r\n      case \"group\": {\r\n        const childTokens = this.evaluateTokensWithEffects((token as IGroupToken).tokens, data);\r\n        return this.applyEffectsToChildren(childTokens, baseEffects);\r\n      }\r\n\r\n      case SummarizerTokenType.conjunction:\r\n      case \"conjunction\": {\r\n        const conjunctionToken = token as IConjunctionToken;\r\n        const visibleItems: ISummarizerEvaluatedToken[][] = [];\r\n\r\n        for (const item of conjunctionToken.items) {\r\n          if (item.visibility && !this.checkConditions(item.visibility, data)) {\r\n            continue;\r\n          }\r\n          const itemTokens = this.evaluateTokensWithEffects(item.tokens, data);\r\n          const itemText = itemTokens.map((t) => t.text).join(\"\");\r\n          if (itemText.trim().length > 0) {\r\n            visibleItems.push(itemTokens);\r\n          }\r\n        }\r\n\r\n        if (visibleItems.length === 0) {\r\n          return [];\r\n        }\r\n\r\n        const result: ISummarizerEvaluatedToken[] = [];\r\n        for (let i = 0; i < visibleItems.length; i++) {\r\n          result.push(...visibleItems[i]);\r\n          if (i < visibleItems.length - 1) {\r\n            result.push({\r\n              text: ` ${conjunctionToken.conjunction} `,\r\n              effects: { emphasis: \"subtle\" },\r\n            });\r\n          }\r\n        }\r\n\r\n        return this.applyEffectsToChildren(result, baseEffects);\r\n      }\r\n\r\n      default:\r\n        Log.debug(`Unknown summarizer token type: ${(token as ISummarizerTokenBase).type}`);\r\n        return [];\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Apply parent effects to child tokens that don't have their own effects.\r\n   *\r\n   * Child effects take precedence. This allows a parent switch token to\r\n   * set a sentiment (e.g., \"positive\" for high health) that applies to\r\n   * all its children unless they override it.\r\n   */\r\n  private applyEffectsToChildren(\r\n    children: ISummarizerEvaluatedToken[],\r\n    parentEffects?: ISummarizerEffects\r\n  ): ISummarizerEvaluatedToken[] {\r\n    if (!parentEffects) {\r\n      return children;\r\n    }\r\n\r\n    return children.map((child) => {\r\n      if (!child.effects) {\r\n        return { ...child, effects: parentEffects };\r\n      }\r\n      // Merge: child effects take precedence\r\n      return {\r\n        ...child,\r\n        effects: { ...parentEffects, ...child.effects },\r\n      };\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Evaluate an array of tokens and concatenate their output.\r\n   */\r\n  private evaluateTokens(tokens: ISummarizerToken[], data: object): string {\r\n    const parts: string[] = [];\r\n\r\n    for (const token of tokens) {\r\n      // Check token visibility\r\n      if (token.visibility && !this.checkConditions(token.visibility, data)) {\r\n        continue;\r\n      }\r\n\r\n      const text = this.evaluateToken(token, data);\r\n      if (text !== undefined && text !== null) {\r\n        parts.push(text);\r\n      }\r\n    }\r\n\r\n    return parts.join(\"\");\r\n  }\r\n\r\n  /**\r\n   * Evaluate a single token and return its string output.\r\n   */\r\n  private evaluateToken(token: ISummarizerToken, data: object): string | undefined {\r\n    switch (token.type) {\r\n      case SummarizerTokenType.literal:\r\n      case \"literal\":\r\n        return (token as ILiteralToken).text;\r\n\r\n      case SummarizerTokenType.value:\r\n      case \"value\":\r\n        return this.evaluateValueToken(token as IValueToken, data);\r\n\r\n      case SummarizerTokenType.switch:\r\n      case \"switch\":\r\n        return this.evaluateSwitchToken(token as ISwitchToken, data);\r\n\r\n      case SummarizerTokenType.list:\r\n      case \"list\":\r\n        return this.evaluateListToken(token as IListToken, data);\r\n\r\n      case SummarizerTokenType.template:\r\n      case \"template\":\r\n        return this.evaluateTemplateToken(token as ITemplateToken, data);\r\n\r\n      case SummarizerTokenType.plural:\r\n      case \"plural\":\r\n        return this.evaluatePluralToken(token as IPluralToken, data);\r\n\r\n      case SummarizerTokenType.sample:\r\n      case \"sample\":\r\n        return this.evaluateSampleToken(token as ISampleToken, data);\r\n\r\n      case SummarizerTokenType.unit:\r\n      case \"unit\":\r\n        return this.evaluateUnitToken(token as IUnitToken, data);\r\n\r\n      case SummarizerTokenType.exists:\r\n      case \"exists\":\r\n        return this.evaluateExistsToken(token as IExistsToken, data);\r\n\r\n      case SummarizerTokenType.group:\r\n      case \"group\":\r\n        return this.evaluateTokens((token as IGroupToken).tokens, data);\r\n\r\n      case SummarizerTokenType.conjunction:\r\n      case \"conjunction\":\r\n        return this.evaluateConjunctionToken(token as IConjunctionToken, data);\r\n\r\n      default:\r\n        Log.debug(`Unknown summarizer token type: ${(token as ISummarizerTokenBase).type}`);\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Evaluate a value token: insert a field value from the data.\r\n   */\r\n  private evaluateValueToken(token: IValueToken, data: object): string {\r\n    const value = this.getFieldValue(token.field, data);\r\n\r\n    if (value === undefined || value === null) {\r\n      return token.fallback ?? \"\";\r\n    }\r\n\r\n    let result: string;\r\n\r\n    // Format the value\r\n    if (token.format) {\r\n      result = this.formatValue(value, token.format);\r\n    } else {\r\n      result = String(value);\r\n    }\r\n\r\n    // Apply humanification\r\n    if (token.humanify && token.humanify !== SummarizerHumanifyType.none && token.humanify !== \"none\") {\r\n      result = this.humanifyValue(result, token.humanify);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a switch token: select tokens based on conditions.\r\n   */\r\n  private evaluateSwitchToken(token: ISwitchToken, data: object): string | undefined {\r\n    for (const switchCase of token.cases) {\r\n      if (this.checkConditions(switchCase.conditions, data)) {\r\n        return this.evaluateTokens(switchCase.tokens, data);\r\n      }\r\n    }\r\n\r\n    if (token.default) {\r\n      return this.evaluateTokens(token.default, data);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a list token: render items as a grammatically correct list.\r\n   */\r\n  private evaluateListToken(token: IListToken, data: object): string {\r\n    const visibleItems: string[] = [];\r\n\r\n    for (const item of token.items) {\r\n      // Check item visibility\r\n      if (item.visibility && !this.checkConditions(item.visibility, data)) {\r\n        continue;\r\n      }\r\n\r\n      const itemText = this.evaluateTokens(item.tokens, data);\r\n      if (itemText.trim().length > 0) {\r\n        visibleItems.push(itemText.trim());\r\n      }\r\n    }\r\n\r\n    if (visibleItems.length === 0) {\r\n      return token.emptyText ?? \"\";\r\n    }\r\n\r\n    // Build the list with proper grammar\r\n    let listText: string;\r\n    if (visibleItems.length === 1) {\r\n      listText = visibleItems[0];\r\n    } else if (visibleItems.length === 2) {\r\n      const sep = token.twoItemSeparator ?? \" and \";\r\n      listText = `${visibleItems[0]}${sep}${visibleItems[1]}`;\r\n    } else {\r\n      const separator = token.separator ?? \", \";\r\n      const finalSep = token.finalSeparator ?? \", and \";\r\n      const allButLast = visibleItems.slice(0, -1).join(separator);\r\n      listText = `${allButLast}${finalSep}${visibleItems[visibleItems.length - 1]}`;\r\n    }\r\n\r\n    // Add prefix and suffix\r\n    let result = listText;\r\n    if (token.prefix) {\r\n      result = this.evaluateTokens(token.prefix, data) + result;\r\n    }\r\n    if (token.suffix) {\r\n      result = result + this.evaluateTokens(token.suffix, data);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a template token: string interpolation.\r\n   */\r\n  private evaluateTemplateToken(token: ITemplateToken, data: object): string {\r\n    let result = token.template;\r\n\r\n    for (const key in token.values) {\r\n      const valueTokens = token.values[key];\r\n      const valueText = this.evaluateTokens(valueTokens, data);\r\n      result = result.replace(new RegExp(`\\\\{${key}\\\\}`, \"g\"), valueText);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a plural token: handle singular/plural forms.\r\n   */\r\n  private evaluatePluralToken(token: IPluralToken, data: object): string {\r\n    const count = this.getFieldValue(token.countField, data);\r\n    const numCount = typeof count === \"number\" ? count : parseInt(String(count), 10) || 0;\r\n\r\n    let formTokens: ISummarizerToken[];\r\n    if (numCount === 0 && token.zero) {\r\n      formTokens = token.zero;\r\n    } else if (numCount === 1) {\r\n      formTokens = token.singular;\r\n    } else {\r\n      formTokens = token.plural;\r\n    }\r\n\r\n    const formText = this.evaluateTokens(formTokens, data);\r\n    const includeCount = token.includeCount !== false;\r\n\r\n    if (includeCount) {\r\n      return `${numCount} ${formText}`;\r\n    }\r\n\r\n    return formText;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a sample token: pull a sample value from the form definition.\r\n   */\r\n  private evaluateSampleToken(token: ISampleToken, data: object): string | undefined {\r\n    if (!this.formDefinition) {\r\n      Log.debug(\"Sample token used but no form definition provided\");\r\n      return undefined;\r\n    }\r\n\r\n    // Look for the sample in the form definition\r\n    // Samples are stored in fields as: samples: { \"path\": [{ content: ... }] }\r\n    let sampleValue: any = undefined;\r\n\r\n    // Try to find the sample in the form's fields\r\n    for (const field of this.formDefinition.fields) {\r\n      if (field.samples) {\r\n        const sample = field.samples[token.samplePath];\r\n        if (sample && sample.length > 0) {\r\n          const sampleContent = sample[0].content;\r\n          if (typeof sampleContent === \"object\" && sampleContent !== null) {\r\n            sampleValue = (sampleContent as any)[token.field];\r\n          } else if (field.id === token.field) {\r\n            sampleValue = sampleContent;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (sampleValue === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    // Evaluate the template with sample value available\r\n    const augmentedData = {\r\n      ...data,\r\n      __sampleValue: sampleValue,\r\n      __samplePath: token.samplePath,\r\n      __sampleName: this.humanifyValue(\r\n        token.samplePath.split(\"/\").pop() || token.samplePath,\r\n        token.humanifySampleName || SummarizerHumanifyType.minecraft\r\n      ),\r\n    };\r\n\r\n    return this.evaluateTokens(token.template, augmentedData);\r\n  }\r\n\r\n  /**\r\n   * Evaluate a unit token: format value with units.\r\n   */\r\n  private evaluateUnitToken(token: IUnitToken, data: object): string {\r\n    const value = this.getFieldValue(token.field, data);\r\n    const numValue = typeof value === \"number\" ? value : parseFloat(String(value));\r\n\r\n    if (isNaN(numValue)) {\r\n      return \"\";\r\n    }\r\n\r\n    // Get the unit string with optional pluralization\r\n    let unitStr = token.unit;\r\n    if (token.pluralize && numValue !== 1) {\r\n      unitStr = token.unitPlural ?? token.unit + \"s\";\r\n    }\r\n\r\n    let result = `${numValue} ${unitStr}`;\r\n\r\n    // Add conversion if specified\r\n    if (token.conversion) {\r\n      const convertedValue = numValue * token.conversion.factor;\r\n      const decimals = token.conversion.decimals ?? 1;\r\n      const formattedConverted = convertedValue.toFixed(decimals).replace(/\\.?0+$/, \"\");\r\n\r\n      let targetUnit = token.conversion.targetUnit;\r\n      if (token.pluralize && convertedValue !== 1) {\r\n        targetUnit = token.conversion.targetUnitPlural ?? token.conversion.targetUnit + \"s\";\r\n      }\r\n\r\n      if (token.showBoth !== false) {\r\n        const format = token.bothFormat ?? \"({value} {unit})\";\r\n        const parenthetical = format.replace(\"{value}\", formattedConverted).replace(\"{unit}\", targetUnit);\r\n        result = `${result} ${parenthetical}`;\r\n      } else {\r\n        result = `${formattedConverted} ${targetUnit}`;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Evaluate an exists token: check if a field is defined.\r\n   */\r\n  private evaluateExistsToken(token: IExistsToken, data: object): string {\r\n    const value = this.getFieldValue(token.field, data);\r\n\r\n    let isDefined = value !== undefined && value !== null;\r\n\r\n    // Optionally treat empty values as undefined\r\n    if (isDefined && token.treatEmptyAsUndefined) {\r\n      if (typeof value === \"string\" && value.length === 0) {\r\n        isDefined = false;\r\n      } else if (Array.isArray(value) && value.length === 0) {\r\n        isDefined = false;\r\n      } else if (typeof value === \"object\" && Object.keys(value).length === 0) {\r\n        isDefined = false;\r\n      }\r\n    }\r\n\r\n    if (isDefined) {\r\n      return this.evaluateTokens(token.whenDefined, data);\r\n    } else if (token.whenUndefined) {\r\n      return this.evaluateTokens(token.whenUndefined, data);\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n\r\n  /**\r\n   * Evaluate a conjunction token: join items with a conjunction.\r\n   */\r\n  private evaluateConjunctionToken(token: IConjunctionToken, data: object): string {\r\n    const visibleItems: string[] = [];\r\n\r\n    for (const item of token.items) {\r\n      if (item.visibility && !this.checkConditions(item.visibility, data)) {\r\n        continue;\r\n      }\r\n\r\n      const itemText = this.evaluateTokens(item.tokens, data);\r\n      if (itemText.trim().length > 0) {\r\n        visibleItems.push(itemText.trim());\r\n      }\r\n    }\r\n\r\n    if (visibleItems.length === 0) {\r\n      return \"\";\r\n    }\r\n\r\n    if (visibleItems.length === 1) {\r\n      return visibleItems[0];\r\n    }\r\n\r\n    return visibleItems.join(` ${token.conjunction} `);\r\n  }\r\n\r\n  /**\r\n   * Get a field value from the data object only (literal value).\r\n   * Does NOT fall back to default values from the form definition.\r\n   * Use this when you need to check if a value is explicitly set.\r\n   * Supports dot notation for nested fields: \"damage.min\"\r\n   */\r\n  private getLiteralFieldValue(fieldPath: string, data: object): any {\r\n    const parts = fieldPath.split(\".\");\r\n    let current: any = data;\r\n\r\n    for (const part of parts) {\r\n      if (current === undefined || current === null) {\r\n        return undefined;\r\n      }\r\n      current = current[part];\r\n    }\r\n\r\n    return current;\r\n  }\r\n\r\n  /**\r\n   * Get the default value for a field from the form definition.\r\n   */\r\n  private getFieldDefaultValue(fieldPath: string): any {\r\n    if (!this.formDefinition || !this.formDefinition.fields) {\r\n      return undefined;\r\n    }\r\n\r\n    // For simple field paths, look up directly\r\n    // For nested paths like \"damage.min\", we'd need to traverse subforms\r\n    const parts = fieldPath.split(\".\");\r\n    const fieldId = parts[0];\r\n\r\n    for (const field of this.formDefinition.fields) {\r\n      if (field.id === fieldId) {\r\n        if (parts.length === 1) {\r\n          return field.defaultValue;\r\n        }\r\n        // KNOWN LIMITATION: Nested subform default value lookup not implemented.\r\n        // For paths like \"damage.min\", we would need to:\r\n        // 1. Load the subForm referenced by field.subFormId\r\n        // 2. Look up the remaining path parts in that subForm's fields\r\n        // This is a rare edge case as most summarizers don't reference nested defaults.\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get a field value from the data object, falling back to the\r\n   * form definition's default value if not explicitly set.\r\n   *\r\n   * This is the \"effective\" value - what the user would see in the form.\r\n   * Supports dot notation for nested fields: \"damage.min\"\r\n   */\r\n  private getFieldValue(fieldPath: string, data: object): any {\r\n    // First try to get the literal value from the data\r\n    const literalValue = this.getLiteralFieldValue(fieldPath, data);\r\n\r\n    // If it's explicitly set (not undefined), use it\r\n    if (literalValue !== undefined) {\r\n      return literalValue;\r\n    }\r\n\r\n    // Fall back to the default value from the form definition\r\n    return this.getFieldDefaultValue(fieldPath);\r\n  }\r\n\r\n  /**\r\n   * Check if all conditions are met.\r\n   */\r\n  private checkConditions(conditions: ICondition[], data: object): boolean {\r\n    for (const condition of conditions) {\r\n      if (!this.checkCondition(condition, data)) {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Check a single condition against data.\r\n   * Uses effective values (data + defaults) unless checking for literallyDefined.\r\n   */\r\n  private checkCondition(condition: ICondition, data: object): boolean {\r\n    const comparison = condition.comparison.toLowerCase();\r\n\r\n    // For literallyDefined, we check only the actual data, not defaults\r\n    if (comparison === ComparisonType.isLiterallyDefined || comparison === \"literallydefined\") {\r\n      const literalValue = condition.field ? this.getLiteralFieldValue(condition.field, data) : undefined;\r\n      return literalValue !== undefined && literalValue !== null;\r\n    }\r\n\r\n    // For all other comparisons, use effective value (data + defaults)\r\n    const fieldValue = condition.field ? this.getFieldValue(condition.field, data) : undefined;\r\n\r\n    switch (comparison) {\r\n      case ComparisonType.equals:\r\n      case \"=\":\r\n      case \"==\":\r\n      case \"equals\":\r\n        if (condition.value !== undefined) {\r\n          return fieldValue === condition.value;\r\n        }\r\n        if (condition.anyValues !== undefined) {\r\n          return (condition.anyValues as (string | number | boolean)[]).includes(\r\n            fieldValue as string | number | boolean\r\n          );\r\n        }\r\n        return false;\r\n\r\n      case ComparisonType.lessThan:\r\n      case \"<\":\r\n        return typeof fieldValue === \"number\" && fieldValue < (condition.value as number);\r\n\r\n      case ComparisonType.lessThanOrEqualTo:\r\n      case \"<=\":\r\n        return typeof fieldValue === \"number\" && fieldValue <= (condition.value as number);\r\n\r\n      case ComparisonType.greaterThan:\r\n      case \">\":\r\n        return typeof fieldValue === \"number\" && fieldValue > (condition.value as number);\r\n\r\n      case ComparisonType.greaterThanOrEqualTo:\r\n      case \">=\":\r\n        return typeof fieldValue === \"number\" && fieldValue >= (condition.value as number);\r\n\r\n      case ComparisonType.isDefined:\r\n      case \"defined\":\r\n        return fieldValue !== undefined && fieldValue !== null;\r\n\r\n      case ComparisonType.isNonEmpty:\r\n      case \"nonempty\":\r\n        if (fieldValue === undefined || fieldValue === null) {\r\n          return false;\r\n        }\r\n        if (typeof fieldValue === \"string\") {\r\n          return fieldValue.length > 0;\r\n        }\r\n        if (Array.isArray(fieldValue)) {\r\n          return fieldValue.length > 0;\r\n        }\r\n        return true;\r\n\r\n      case \"!=\":\r\n      case \"notequals\":\r\n        return fieldValue !== condition.value;\r\n\r\n      default:\r\n        Log.debug(`Unknown comparison type: ${condition.comparison}`);\r\n        return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Format a value according to a format string.\r\n   */\r\n  private formatValue(value: any, format: string): string {\r\n    const locale = this.options.locale ?? \"en-US\";\r\n\r\n    if (format === \"number\") {\r\n      const num = typeof value === \"number\" ? value : parseFloat(String(value));\r\n      if (!isNaN(num)) {\r\n        return num.toLocaleString(locale);\r\n      }\r\n    }\r\n\r\n    if (format === \"percent\") {\r\n      const num = typeof value === \"number\" ? value : parseFloat(String(value));\r\n      if (!isNaN(num)) {\r\n        return `${(num * 100).toFixed(0)}%`;\r\n      }\r\n    }\r\n\r\n    if (format.startsWith(\"decimal:\")) {\r\n      const decimals = parseInt(format.substring(8), 10);\r\n      const num = typeof value === \"number\" ? value : parseFloat(String(value));\r\n      if (!isNaN(num)) {\r\n        return num.toFixed(decimals);\r\n      }\r\n    }\r\n\r\n    return String(value);\r\n  }\r\n\r\n  /**\r\n   * Apply humanification to a value.\r\n   */\r\n  private humanifyValue(value: string, humanifyType: SummarizerHumanifyType | string): string {\r\n    switch (humanifyType) {\r\n      case SummarizerHumanifyType.minecraft:\r\n      case \"minecraft\":\r\n        return Utilities.humanifyMinecraftName(value) as string;\r\n\r\n      case SummarizerHumanifyType.general:\r\n      case \"general\":\r\n        return Utilities.humanifyJsName(value);\r\n\r\n      case SummarizerHumanifyType.sentence:\r\n      case \"sentence\":\r\n        return value.charAt(0).toUpperCase() + value.slice(1);\r\n\r\n      default:\r\n        return value;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ========================================================================\r\n * ARCHITECTURE: DataFormUtilities\r\n * ========================================================================\r\n *\r\n * DataFormUtilities provides static utility functions for the DataForm\r\n * system, including field selection, type checking, and form manipulation.\r\n *\r\n * This file is a key part of the \"upscale/downscale\" UI layer pattern.\r\n * See FormPropertyManager.ts for the complete architecture documentation.\r\n *\r\n * KEY FUNCTION: selectFieldForValue()\r\n *\r\n *   This function implements the UI-layer part of the upscale pattern.\r\n *   When a field has multiple \"alternates\" (different type representations),\r\n *   this function selects the variant that best matches the actual data.\r\n *\r\n *   Example: A repair_items field might have:\r\n *     - Primary: stringArray (for simple item list)\r\n *     - Alternate: objectArray with subForm (for complex items with amounts)\r\n *\r\n *   If the data is an array of objects, selectFieldForValue returns the\r\n *   objectArray alternate so the UI renders the appropriate editor.\r\n *\r\n * RELATED FILES:\r\n *    - src/dataform/FormPropertyManager.ts - Data-layer upscale/downscale\r\n *    - src/dataformux/DataForm.tsx - Uses selectFieldForValue() in render\r\n *    - src/dataform/IField.ts - Field definitions with alternates\r\n *\r\n * ========================================================================\r\n */\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"../minecraft/Database\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport IField, { FieldDataType } from \"./IField\";\r\nimport IFormDefinition, { IFormSample } from \"./IFormDefinition\";\r\nimport ISummarizer, { ISummarizerOptions, ISummarizerResult } from \"./ISummarizer\";\r\nimport SummarizerEvaluator from \"./SummarizerEvaluator\";\r\n\r\nexport default class DataFormUtilities {\r\n  public static generateDefaultItem(formDefinition: IFormDefinition) {\r\n    const newDataObject: any = {};\r\n\r\n    for (let i = 0; i < formDefinition.fields.length; i++) {\r\n      const field = formDefinition.fields[i];\r\n\r\n      if (field.defaultValue !== undefined) {\r\n        if (\r\n          typeof field.defaultValue === \"string\" &&\r\n          DataFormUtilities.isObjectFieldType(field.dataType) &&\r\n          Utilities.isUsableAsObjectKey(field.id)\r\n        ) {\r\n          // sometimes our docs say the default value for an object is \"N/A\", which is not awesome\r\n          newDataObject[field.id] = {};\r\n        } else {\r\n          newDataObject[field.id] = field.defaultValue;\r\n        }\r\n      }\r\n    }\r\n\r\n    return newDataObject;\r\n  }\r\n\r\n  /**\r\n   * Returns true if the component data only contains default or empty values\r\n   * relative to the form definition \u2014 meaning it can be safely removed from\r\n   * the persisted JSON without losing any user intent.\r\n   */\r\n  public static isDefaultOrEmpty(formDefinition: IFormDefinition, data: unknown): boolean {\r\n    if (data === undefined || data === null) {\r\n      return true;\r\n    }\r\n\r\n    if (typeof data !== \"object\") {\r\n      return false;\r\n    }\r\n\r\n    const record = data as Record<string, unknown>;\r\n\r\n    for (const field of formDefinition.fields) {\r\n      const actual = record[field.id];\r\n\r\n      if (actual === undefined || actual === null) {\r\n        continue;\r\n      }\r\n\r\n      if (field.defaultValue !== undefined) {\r\n        if (typeof actual === \"object\" && typeof field.defaultValue === \"object\") {\r\n          if (JSON.stringify(actual) !== JSON.stringify(field.defaultValue)) {\r\n            return false;\r\n          }\r\n        } else if (actual !== field.defaultValue) {\r\n          return false;\r\n        }\r\n      } else {\r\n        if (typeof actual === \"object\") {\r\n          if (Array.isArray(actual) ? actual.length > 0 : Object.keys(actual as object).length > 0) {\r\n            return false;\r\n          }\r\n        } else if (actual !== \"\" && actual !== 0 && actual !== false) {\r\n          return false;\r\n        }\r\n      }\r\n    }\r\n\r\n    const fieldIds = new Set(formDefinition.fields.map((f) => f.id));\r\n    for (const key of Object.keys(record)) {\r\n      if (!fieldIds.has(key) && record[key] !== undefined && record[key] !== null) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public static selectSubForm(form: IFormDefinition, select: string) {\r\n    const selectors = select.split(\"/\");\r\n\r\n    for (const selector of selectors) {\r\n      if (selector.length > 0) {\r\n        const field = DataFormUtilities.getFieldById(form, selector);\r\n\r\n        if (!field || !field.subForm) {\r\n          throw new Error(\"Unable to find field \" + selector + \" in form \" + form.id);\r\n        }\r\n\r\n        form = field.subForm;\r\n      }\r\n    }\r\n\r\n    return form;\r\n  }\r\n\r\n  public static mergeFields(form: IFormDefinition) {\r\n    let fields: IField[] = [];\r\n    const fieldsByName: { [name: string]: IField } = {};\r\n\r\n    for (const field of form.fields) {\r\n      if (fieldsByName[field.id]) {\r\n        const origField = fieldsByName[field.id];\r\n\r\n        if (!origField.alternates) {\r\n          origField.alternates = [];\r\n        }\r\n\r\n        origField.alternates.push(field);\r\n\r\n        if (field.alternates) {\r\n          for (const subField of field.alternates) {\r\n            origField.alternates.push(subField);\r\n          }\r\n\r\n          field.alternates = undefined;\r\n        }\r\n      } else {\r\n        fields.push(field);\r\n        if (Utilities.isUsableAsObjectKey(field.id)) {\r\n          fieldsByName[field.id] = field;\r\n        }\r\n      }\r\n    }\r\n\r\n    form.fields = fields;\r\n\r\n    for (const field of fields) {\r\n      if (field.subForm) {\r\n        DataFormUtilities.mergeFields(field.subForm);\r\n      }\r\n\r\n      if (field.alternates) {\r\n        for (let addField of field.alternates) {\r\n          if (addField.subForm) {\r\n            DataFormUtilities.mergeFields(addField.subForm);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    DataFormUtilities.sortAndCleanAlternateFields(form);\r\n  }\r\n\r\n  /**\r\n   * Selects the most appropriate field definition (primary or alternate) based on the actual value type.\r\n   *\r\n   * This is the UI-layer component of the \"upscale/downscale\" pattern. It ensures that\r\n   * when rendering a form, the correct editor is used for the actual data type.\r\n   *\r\n   * BACKGROUND:\r\n   *   Minecraft JSON often supports multiple representations of the same field:\r\n   *   - A scalar: \"hello\"\r\n   *   - An array: [\"a\", \"b\"]\r\n   *   - An object: { items: [\"a\"], amount: 5 }\r\n   *\r\n   *   Field definitions can have \"alternates\" - additional field definitions that\r\n   *   represent the same logical field but with different dataTypes and potentially\r\n   *   different subForms.\r\n   *\r\n   * HOW IT WORKS:\r\n   *   1. Collects all field variants (primary + alternates)\r\n   *   2. Scores each variant based on how well its dataType matches the value\r\n   *   3. Returns the highest-scoring variant\r\n   *\r\n   * SCORING RULES:\r\n   *   - Array values prefer stringArray, numberArray, objectArray types\r\n   *   - Object values prefer object types, especially with subForms\r\n   *   - Scalar values prefer matching primitive types (string, int, boolean)\r\n   *\r\n   * USAGE IN DataForm.tsx:\r\n   *   const effectiveField = DataFormUtilities.selectFieldForValue(field, curVal);\r\n   *   // effectiveField is now the variant that best represents curVal\r\n   *   // Use effectiveField.dataType, effectiveField.subForm, etc.\r\n   *\r\n   * RELATED:\r\n   *   - FormPropertyManager.upscaleDirectObject() - Data-layer scalar\u2192object\r\n   *   - FormPropertyManager.downscaleDirectObject() - Data-layer object\u2192scalar\r\n   *\r\n   * @param field - The primary field definition (may have alternates)\r\n   * @param value - The actual value to match against\r\n   * @returns The best-matching field definition (primary or an alternate)\r\n   */\r\n  public static selectFieldForValue(field: IField, value: any): IField {\r\n    if (value === undefined || value === null) {\r\n      return field;\r\n    }\r\n\r\n    // Collect all field variants (primary + alternates)\r\n    const allFields = [field];\r\n    if (field.alternates) {\r\n      allFields.push(...field.alternates);\r\n    }\r\n\r\n    // If only one field, return it\r\n    if (allFields.length === 1) {\r\n      return field;\r\n    }\r\n\r\n    const valueType = typeof value;\r\n    const isArray = Array.isArray(value);\r\n    const isObject = valueType === \"object\" && !isArray;\r\n\r\n    // Score each field based on how well it matches the value type\r\n    let bestField = field;\r\n    let bestScore = -1;\r\n\r\n    for (const candidate of allFields) {\r\n      let score = 0;\r\n      const dt = candidate.dataType;\r\n\r\n      if (isArray) {\r\n        // Value is an array - prefer array types\r\n        if (\r\n          dt === FieldDataType.stringArray ||\r\n          dt === FieldDataType.numberArray ||\r\n          dt === FieldDataType.objectArray ||\r\n          dt === FieldDataType.longFormStringArray\r\n        ) {\r\n          score = 10;\r\n        }\r\n      } else if (isObject) {\r\n        // Value is an object - prefer object types (especially those with subForms)\r\n        if (DataFormUtilities.isObjectFieldType(dt)) {\r\n          score = 10;\r\n          if (candidate.subForm || candidate.subFormId) {\r\n            score = 15; // Prefer objects with subForms\r\n          }\r\n        } else if (dt === FieldDataType.keyedObjectCollection || dt === FieldDataType.keyedStringCollection) {\r\n          score = 8;\r\n        }\r\n      } else if (valueType === \"string\") {\r\n        // Value is a string - prefer string types\r\n        // Note: isString includes stringEnum, so it gets score 10\r\n        if (DataFormUtilities.isString(dt)) {\r\n          score = 10;\r\n        }\r\n      } else if (valueType === \"number\") {\r\n        // Value is a number - prefer numeric types\r\n        if (\r\n          dt === FieldDataType.int ||\r\n          dt === FieldDataType.float ||\r\n          dt === FieldDataType.number ||\r\n          dt === FieldDataType.long\r\n        ) {\r\n          score = 10;\r\n        } else if (dt === FieldDataType.intEnum) {\r\n          score = 9;\r\n        }\r\n      } else if (valueType === \"boolean\") {\r\n        // Value is a boolean - prefer boolean types\r\n        if (dt === FieldDataType.boolean || dt === FieldDataType.intBoolean) {\r\n          score = 10;\r\n        }\r\n      }\r\n\r\n      if (score > bestScore) {\r\n        bestScore = score;\r\n        bestField = candidate;\r\n      }\r\n    }\r\n\r\n    return bestField;\r\n  }\r\n\r\n  public static isObjectFieldType(fieldDataType: FieldDataType) {\r\n    return (\r\n      fieldDataType === FieldDataType.object ||\r\n      fieldDataType === FieldDataType.minecraftFilter ||\r\n      fieldDataType === FieldDataType.minecraftEventTrigger\r\n    );\r\n  }\r\n\r\n  public static isScalarFieldType(fieldDataType: FieldDataType) {\r\n    return (\r\n      fieldDataType === FieldDataType.boolean ||\r\n      fieldDataType === FieldDataType.float ||\r\n      fieldDataType === FieldDataType.int ||\r\n      fieldDataType === FieldDataType.intBoolean ||\r\n      fieldDataType === FieldDataType.intEnum ||\r\n      fieldDataType === FieldDataType.string ||\r\n      fieldDataType === FieldDataType.molang\r\n    );\r\n  }\r\n\r\n  public static sortFieldsBySignificance(fieldA: IField, fieldB: IField): number {\r\n    if (fieldA.subForm && !fieldB.subForm) {\r\n      return -1;\r\n    }\r\n\r\n    if (!fieldA.subForm && fieldB.subForm) {\r\n      return 1;\r\n    }\r\n\r\n    const isAComplex = !DataFormUtilities.isScalarFieldType(fieldA.dataType);\r\n    const isBComplex = !DataFormUtilities.isScalarFieldType(fieldB.dataType);\r\n\r\n    if (isAComplex && !isBComplex) {\r\n      return -1;\r\n    }\r\n\r\n    if (!isAComplex && isBComplex) {\r\n      return 1;\r\n    }\r\n\r\n    if (fieldA.dataType < fieldB.dataType) {\r\n      return -1;\r\n    }\r\n    if (fieldA.dataType > fieldB.dataType) {\r\n      return 1;\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  public static sortFieldsByPriority(fieldA: IField, fieldB: IField): number {\r\n    if (fieldA.isDeprecated && !fieldB.isDeprecated) {\r\n      return 1;\r\n    }\r\n\r\n    if (!fieldA.isDeprecated && fieldB.isDeprecated) {\r\n      return -1;\r\n    }\r\n\r\n    if (fieldA.priority && !fieldB.priority) {\r\n      return -1;\r\n    }\r\n\r\n    if (fieldB.priority && !fieldA.priority) {\r\n      return 1;\r\n    }\r\n\r\n    if (fieldA.priority && fieldB.priority) {\r\n      return fieldA.priority - fieldB.priority;\r\n    }\r\n\r\n    if (fieldA.title && fieldB.title) {\r\n      return fieldA.title.localeCompare(fieldB.title);\r\n    }\r\n\r\n    if (fieldA.id && fieldB.id) {\r\n      return Utilities.staticCompare(fieldA.id, fieldB.id);\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  public static async loadSubForms(\r\n    form: IFormDefinition,\r\n    loadedForms?: string | undefined\r\n  ): Promise<string | undefined> {\r\n    if (!loadedForms) {\r\n      loadedForms = \"\";\r\n    }\r\n\r\n    if (form && form.fields) {\r\n      for (const field of form.fields) {\r\n        let subForm: IFormDefinition | undefined = undefined;\r\n\r\n        if (field.subForm) {\r\n          subForm = field.subForm;\r\n        } else if (field.subFormId) {\r\n          if (loadedForms.indexOf(\"|\" + field.subFormId + \"|\") < 0) {\r\n            subForm = await Database.ensureFormLoadedByPath(field.subFormId);\r\n\r\n            loadedForms += \"|\" + field.subFormId + \"|\";\r\n          }\r\n        }\r\n\r\n        if (subForm) {\r\n          await this.loadSubForms(subForm, loadedForms);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (loadedForms === \"\") {\r\n      return undefined;\r\n    }\r\n\r\n    return loadedForms;\r\n  }\r\n\r\n  public static sortAndCleanAlternateFields(form: IFormDefinition) {\r\n    let fields: IField[] = [];\r\n\r\n    for (const field of form.fields) {\r\n      if (field.alternates) {\r\n        const allFields: IField[] = [];\r\n        allFields.push(field);\r\n        allFields.push(...field.alternates);\r\n        field.alternates = undefined;\r\n\r\n        allFields.sort(DataFormUtilities.sortFieldsBySignificance);\r\n\r\n        allFields[0].alternates = [];\r\n\r\n        fields.push(allFields[0]);\r\n\r\n        for (let i = 1; i < allFields.length; i++) {\r\n          if (allFields[i].title === allFields[0].title) {\r\n            allFields[i].title = undefined;\r\n          }\r\n          allFields[0].alternates.push(allFields[i]);\r\n        }\r\n      } else {\r\n        fields.push(field);\r\n      }\r\n    }\r\n\r\n    form.fields = fields;\r\n\r\n    for (const field of fields) {\r\n      if (field.subForm) {\r\n        DataFormUtilities.sortAndCleanAlternateFields(field.subForm);\r\n      }\r\n\r\n      if (field.alternates) {\r\n        for (let addField of field.alternates) {\r\n          if (addField.subForm) {\r\n            DataFormUtilities.sortAndCleanAlternateFields(addField.subForm);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public static fixupFields(form: IFormDefinition, parentField?: IField) {\r\n    let fields: IField[] = [];\r\n\r\n    for (const field of form.fields) {\r\n      if (\r\n        (field.dataType === FieldDataType.stringArray || field.dataType === FieldDataType.numberArray) &&\r\n        field.subForm &&\r\n        field.subForm.fields &&\r\n        field.subForm.fields.length >= 1\r\n      ) {\r\n        const subField = field.subForm.fields[0];\r\n\r\n        if (subField.id.indexOf(\"<\") >= 0) {\r\n          if (subField.dataType === FieldDataType.molang) {\r\n            field.dataType = FieldDataType.molangArray;\r\n          }\r\n\r\n          field.subForm = undefined;\r\n        }\r\n\r\n        fields.push(field);\r\n      } else if (field.id.startsWith(\"<\") && parentField) {\r\n        if (!parentField.alternates) {\r\n          parentField.alternates = [];\r\n        }\r\n        field.keyDescription = field.id;\r\n        field.id = parentField.id;\r\n\r\n        if (field.dataType === FieldDataType.molangArray || field.dataType === FieldDataType.stringArray) {\r\n          field.dataType = FieldDataType.keyedStringCollection;\r\n        }\r\n\r\n        parentField.alternates.push(field);\r\n      } else {\r\n        fields.push(field);\r\n      }\r\n    }\r\n\r\n    form.fields = fields;\r\n\r\n    for (const field of fields) {\r\n      if (field.subForm) {\r\n        DataFormUtilities.fixupFields(field.subForm, field);\r\n      }\r\n\r\n      if (field.alternates) {\r\n        for (let addField of field.alternates) {\r\n          if (addField.subForm) {\r\n            DataFormUtilities.fixupFields(addField.subForm, field);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static generateFormFromObject(id: string, obj: object, exampleSourcePath?: string) {\r\n    let fields: IField[] = [];\r\n\r\n    for (const fieldName in obj) {\r\n      const fieldData = (obj as any)[fieldName];\r\n\r\n      let fieldType = FieldDataType.string;\r\n\r\n      if (typeof fieldData === \"number\") {\r\n        fieldType = FieldDataType.number;\r\n      }\r\n\r\n      const samples: { [name: string]: IFormSample[] } = {};\r\n\r\n      samples[exampleSourcePath ? exampleSourcePath : \"generated_doNotEdit\"] = [\r\n        {\r\n          path: fieldName,\r\n          content: fieldData,\r\n        },\r\n      ];\r\n\r\n      fields.push({\r\n        id: fieldName,\r\n        title: Utilities.humanifyJsName(fieldName),\r\n        dataType: fieldType,\r\n        samples: samples,\r\n      });\r\n    }\r\n\r\n    return {\r\n      id: id,\r\n      title: Utilities.humanifyJsName(id),\r\n      fields: fields,\r\n    };\r\n  }\r\n\r\n  static getFieldAndAlternates(fieldDefinition: IField) {\r\n    const fields = [fieldDefinition];\r\n\r\n    if (fieldDefinition.alternates) {\r\n      for (const altField of fieldDefinition.alternates) {\r\n        fields.push(...DataFormUtilities.getFieldAndAlternates(altField));\r\n      }\r\n    }\r\n\r\n    return fields;\r\n  }\r\n\r\n  static getScalarField(formDefinition: IFormDefinition) {\r\n    if (formDefinition.scalarField) {\r\n      return formDefinition.scalarField;\r\n    }\r\n\r\n    if (formDefinition.scalarFieldUpgradeName && formDefinition.fields) {\r\n      for (const field of formDefinition.fields) {\r\n        if (field.id === formDefinition.scalarFieldUpgradeName) {\r\n          return field;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static isString(fieldType: FieldDataType) {\r\n    return (\r\n      fieldType === FieldDataType.string ||\r\n      fieldType === FieldDataType.molang ||\r\n      fieldType === FieldDataType.longFormString ||\r\n      fieldType === FieldDataType.stringLookup ||\r\n      fieldType === FieldDataType.stringEnum ||\r\n      fieldType === FieldDataType.localizableString\r\n    );\r\n  }\r\n\r\n  static getFieldById(formDefinition: IFormDefinition, fieldId: string) {\r\n    if (!formDefinition.fields) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const field of formDefinition.fields) {\r\n      if (field.id === fieldId) {\r\n        return field;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getFieldTypeDescription(fieldType: FieldDataType) {\r\n    switch (fieldType) {\r\n      case FieldDataType.int:\r\n        return \"Integer number\";\r\n      case FieldDataType.boolean:\r\n        return \"Boolean true/false\";\r\n      case FieldDataType.float:\r\n        return \"Decimal number\";\r\n      case FieldDataType.stringEnum:\r\n        return \"String from a list of choices\";\r\n      case FieldDataType.intEnum:\r\n        return \"Integer number from a list of choices\";\r\n      case FieldDataType.intBoolean:\r\n        return \"Boolean 0/1\";\r\n      case FieldDataType.number:\r\n        return \"Decimal number\";\r\n      case FieldDataType.long:\r\n        return \"Large number\";\r\n      case FieldDataType.stringLookup:\r\n        return \"String from a list of choices\";\r\n      case FieldDataType.intValueLookup:\r\n        return \"Integer number from a list of choices\";\r\n      case FieldDataType.point3:\r\n        return \"x, y, z coordinate array\";\r\n      case FieldDataType.intPoint3:\r\n        return \"integer x, y, z coordinate array\";\r\n      case FieldDataType.longFormString:\r\n        return \"Longer descriptive text\";\r\n      case FieldDataType.keyedObjectCollection:\r\n        return \"Named set of objects\";\r\n      case FieldDataType.objectArray:\r\n        return \"Array of objects\";\r\n      case FieldDataType.object:\r\n        return \"Object\";\r\n      case FieldDataType.stringArray:\r\n        return \"Array of strings\";\r\n      case FieldDataType.intRange:\r\n        return \"Range of integers\";\r\n      case FieldDataType.floatRange:\r\n        return \"Range of floats\";\r\n      case FieldDataType.minecraftFilter:\r\n        return \"Minecraft filter\";\r\n      case FieldDataType.minecraftEventTriggerArray:\r\n        return \"Array of Minecraft Event Triggers\";\r\n      case FieldDataType.percentRange:\r\n        return \"Percent Range\";\r\n      case FieldDataType.minecraftEventTrigger:\r\n        return \"Minecraft Event Trigger\";\r\n      case FieldDataType.minecraftEventReference:\r\n        return \"Minecraft Event Reference\";\r\n      case FieldDataType.longFormStringArray:\r\n        return \"Array of longer descriptive text\";\r\n      case FieldDataType.keyedStringCollection:\r\n        return \"Keyed set of strings\";\r\n      case FieldDataType.version:\r\n        return \"Version\";\r\n      case FieldDataType.uuid:\r\n        return \"Unique Id\";\r\n      case FieldDataType.keyedBooleanCollection:\r\n        return \"Keyed collection of boolean values\";\r\n      case FieldDataType.keyedStringArrayCollection:\r\n        return \"Keyed collection of string arrays\";\r\n      case FieldDataType.arrayOfKeyedStringCollection:\r\n        return \"Array of keyed string sets\";\r\n      case FieldDataType.keyedKeyedStringArrayCollection:\r\n        return \"Keyed set of keyed string sets\";\r\n      case FieldDataType.keyedNumberCollection:\r\n        return \"Keyed set of numbers\";\r\n      case FieldDataType.numberArray:\r\n        return \"Array of numbers\";\r\n      case FieldDataType.point2:\r\n        return \"a, b coordinate array\";\r\n      case FieldDataType.localizableString:\r\n        return \"Localizable String\";\r\n      case FieldDataType.string:\r\n        return \"String\";\r\n      case FieldDataType.molang:\r\n        return \"Molang\";\r\n      case FieldDataType.molangArray:\r\n        return \"Molang array\";\r\n      default:\r\n        return \"String\";\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate a natural language summary of an object based on its form definition.\r\n   *\r\n   * This method loads the summarizer associated with the form (if one exists)\r\n   * and evaluates it against the provided data to produce human-readable phrases.\r\n   *\r\n   * @param data The data object to summarize\r\n   * @param formPath Path to the form definition (e.g., \"entity/minecraft_health\")\r\n   * @param options Optional evaluation options\r\n   * @returns Result containing phrases and formatted output\r\n   *\r\n   * @example\r\n   * const result = await DataFormUtilities.generateSummary(\r\n   *   { max: 500, value: 500 },\r\n   *   \"entity/minecraft_health\"\r\n   * );\r\n   * console.log(result.asCompleteSentence);\r\n   * // \"This entity has god-tier health (500 HP).\"\r\n   */\r\n  static async generateSummary(\r\n    data: object,\r\n    formPath: string,\r\n    options?: ISummarizerOptions\r\n  ): Promise<ISummarizerResult> {\r\n    // Load the form definition\r\n    const form = await Database.ensureFormLoadedByPath(formPath);\r\n\r\n    // Extract category from the path (e.g., \"entity\" from \"entity/minecraft_health.form.json\")\r\n    let category: string | undefined;\r\n    const lastSlash = formPath.lastIndexOf(\"/\");\r\n    if (lastSlash > 0) {\r\n      category = formPath.substring(0, lastSlash);\r\n    }\r\n\r\n    // Derive the summarizer ID from the form path (same name, different extension)\r\n    const summarizerName = formPath.substring(lastSlash + 1).replace(\".form.json\", \"\");\r\n\r\n    // Try to load the summarizer\r\n    const summarizer = await DataFormUtilities.loadSummarizerById(summarizerName, category);\r\n\r\n    if (!summarizer) {\r\n      // No summarizer defined, return empty result\r\n      return {\r\n        phrases: [],\r\n        asSentence: \"\",\r\n        asCompleteSentence: \"\",\r\n      };\r\n    }\r\n\r\n    const evaluator = new SummarizerEvaluator();\r\n    return evaluator.evaluate(summarizer, data, form, options);\r\n  }\r\n\r\n  /**\r\n   * Generate a summary and format it as a complete sentence.\r\n   *\r\n   * @param data The data object to summarize\r\n   * @param formPath Path to the form definition\r\n   * @param prefix Optional prefix for the sentence (default: \"This entity \")\r\n   * @returns A complete sentence describing the object, or empty string if no summarizer\r\n   *\r\n   * @example\r\n   * const sentence = await DataFormUtilities.generateSummaryAsSentence(\r\n   *   { max: 100 },\r\n   *   \"entity/minecraft_health\",\r\n   *   \"This mob \"\r\n   * );\r\n   * // \"This mob has extremely high health, on par with an Iron Golem (100 HP).\"\r\n   */\r\n  static async generateSummaryAsSentence(\r\n    data: object,\r\n    formPath: string,\r\n    prefix: string = \"This entity \"\r\n  ): Promise<string> {\r\n    const result = await DataFormUtilities.generateSummary(data, formPath);\r\n\r\n    if (result.phrases.length === 0) {\r\n      return \"\";\r\n    }\r\n\r\n    return `${prefix}${result.asSentence}.`;\r\n  }\r\n\r\n  /**\r\n   * Load a summarizer definition by ID.\r\n   *\r\n   * The ID format matches subFormId: \"category/name\" or just \"name\".\r\n   * Does NOT include the .summarizer.json suffix.\r\n   *\r\n   * @param summarizerId ID of the summarizer (e.g., \"entity/minecraft_health\" or \"minecraft_health\")\r\n   * @param category Optional category subfolder (e.g., \"entity\", \"block\") - used if ID doesn't include category\r\n   * @returns The summarizer definition, or undefined if not found\r\n   *\r\n   * @example\r\n   * // These are equivalent:\r\n   * loadSummarizerById(\"entity/minecraft_health\")\r\n   * loadSummarizerById(\"minecraft_health\", \"entity\")\r\n   */\r\n  static async loadSummarizerById(summarizerId: string, category?: string): Promise<ISummarizer | undefined> {\r\n    try {\r\n      // Parse the ID to extract category and name\r\n      const lastSlash = summarizerId.lastIndexOf(\"/\");\r\n      let resolvedCategory: string | undefined;\r\n      let name: string;\r\n\r\n      if (lastSlash >= 0) {\r\n        // ID includes category: \"entity/minecraft_health\"\r\n        resolvedCategory = summarizerId.substring(0, lastSlash);\r\n        name = summarizerId.substring(lastSlash + 1);\r\n      } else {\r\n        // ID is just name: \"minecraft_health\"\r\n        resolvedCategory = category;\r\n        name = summarizerId;\r\n      }\r\n\r\n      // Build the full path - use contentWebRoot for Electron compatibility\r\n      let relativePath = \"data/forms/\";\r\n      if (resolvedCategory) {\r\n        relativePath += resolvedCategory + \"/\";\r\n      }\r\n      relativePath += name + \".summarizer.json\";\r\n\r\n      const fullPath = CreatorToolsHost.contentWebRoot + relativePath;\r\n\r\n      // Load the summarizer JSON\r\n      const response = await fetch(fullPath);\r\n      if (!response.ok) {\r\n        return undefined;\r\n      }\r\n\r\n      const data: unknown = await response.json();\r\n      if (!data || typeof data !== \"object\" || !Array.isArray((data as ISummarizer).phrases)) {\r\n        return undefined;\r\n      }\r\n\r\n      return data as ISummarizer;\r\n    } catch (e) {\r\n      // Summarizer not found or invalid\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Evaluate a summarizer directly against data.\r\n   *\r\n   * Use this when you already have the summarizer loaded and want to\r\n   * avoid the overhead of loading it from disk.\r\n   *\r\n   * @param summarizer The summarizer definition\r\n   * @param data The data object to summarize\r\n   * @param form Optional form definition for sample lookup\r\n   * @param options Optional evaluation options\r\n   * @returns Result containing phrases and formatted output\r\n   */\r\n  static evaluateSummarizer(\r\n    summarizer: ISummarizer,\r\n    data: object,\r\n    form?: IFormDefinition,\r\n    options?: ISummarizerOptions\r\n  ): ISummarizerResult {\r\n    const evaluator = new SummarizerEvaluator();\r\n    return evaluator.evaluate(summarizer, data, form, options);\r\n  }\r\n\r\n  // ========================================================================\r\n  // FIELD PROPERTY UTILITIES\r\n  // These are shared utilities for inspecting field structures, used by\r\n  // JSON schema generators, hover providers, and other field-analysis code.\r\n  // ========================================================================\r\n\r\n  /**\r\n   * Get a preview of property names for an object field.\r\n   * Returns a string like \"{ description, components, events, ... }\" for objects with many properties,\r\n   * or \"{ prop1, prop2 }\" for objects with few properties.\r\n   *\r\n   * This is useful for displaying concise type information in hovers and tooltips.\r\n   *\r\n   * @param field The field to inspect\r\n   * @returns A formatted string preview of property names, or null if not applicable\r\n   */\r\n  static getObjectPropertyPreview(field: IField): string | null {\r\n    let fieldNames: string[] = [];\r\n\r\n    // Helper to clean field IDs - removes embedded enum syntax like `render_distance_type\"<\"fixed\", \"render\"`\r\n    const cleanFieldId = (id: string): string => {\r\n      const lessThanIndex = id.indexOf('\"<\"');\r\n      if (lessThanIndex > 0) {\r\n        return id.substring(0, lessThanIndex);\r\n      }\r\n      return id;\r\n    };\r\n\r\n    // Check subFields (direct field definitions)\r\n    if (field.subFields) {\r\n      fieldNames = Object.keys(field.subFields)\r\n        .filter((k) => !k.startsWith(\"_\"))\r\n        .map(cleanFieldId);\r\n    }\r\n    // Check subForm (embedded form definition)\r\n    else if (field.subForm?.fields) {\r\n      fieldNames = field.subForm.fields.filter((f) => f.id && !f.id.startsWith(\"_\")).map((f) => cleanFieldId(f.id!));\r\n    }\r\n\r\n    if (fieldNames.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    // Show up to 3 property names with ellipsis if more\r\n    const maxToShow = 3;\r\n    if (fieldNames.length <= maxToShow) {\r\n      return `{ ${fieldNames.join(\", \")} }`;\r\n    }\r\n    const shown = fieldNames.slice(0, maxToShow).join(\", \");\r\n    return `{ ${shown}, ... }`;\r\n  }\r\n\r\n  /**\r\n   * Get the child properties of a field (what this field contains).\r\n   * Returns the field's own subForm/subFields, or the referenced subFormId's fields.\r\n   * Returns null if the field doesn't have child properties.\r\n   *\r\n   * This supports multiple resolution strategies:\r\n   * 1. subFormId reference - looks up in the provided forms dictionary\r\n   * 2. Inline subForm - embedded form definition\r\n   * 3. subFields - dictionary-style field definitions\r\n   *\r\n   * @param field The field to inspect\r\n   * @param formsBySubFormId Optional dictionary of forms keyed by subFormId for resolving references\r\n   * @returns Array of child fields, or null if none found\r\n   */\r\n  static getFieldChildProperties(field: IField, formsBySubFormId?: Record<string, IFormDefinition>): IField[] | null {\r\n    // First check if field references a subFormId\r\n    if (field.subFormId && formsBySubFormId && formsBySubFormId[field.subFormId]) {\r\n      const referencedForm = formsBySubFormId[field.subFormId];\r\n      if (referencedForm.fields && referencedForm.fields.length > 0) {\r\n        return referencedForm.fields;\r\n      }\r\n    }\r\n\r\n    // Check inline subForm\r\n    if (field.subForm?.fields && field.subForm.fields.length > 0) {\r\n      return field.subForm.fields;\r\n    }\r\n\r\n    // Check subFields (dictionary style)\r\n    if (field.subFields) {\r\n      const subFieldsArray: IField[] = [];\r\n      for (const [key, subField] of Object.entries(field.subFields)) {\r\n        if (!key.startsWith(\"_\")) {\r\n          subFieldsArray.push({ ...subField, id: key } as IField);\r\n        }\r\n      }\r\n      if (subFieldsArray.length > 0) {\r\n        return subFieldsArray;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"../minecraft/Database\";\r\nimport ICondition, { ComparisonType } from \"./ICondition\";\r\nimport IDataContainer from \"./IDataContainer\";\r\nimport IField, { FieldDataType } from \"./IField\";\r\nimport IFormDefinition from \"./IFormDefinition\";\r\n\r\nexport default class FieldUtilities {\r\n  static getFieldValueAsBoolean(name: string, defaultValue: boolean, container: IDataContainer) {\r\n    let value = undefined;\r\n\r\n    if (container.dataPropertyObject !== undefined) {\r\n      const prop = container.dataPropertyObject.getProperty(name);\r\n\r\n      if (prop !== undefined) {\r\n        value = prop.value;\r\n      }\r\n    }\r\n\r\n    if (container.getsetPropertyObject !== undefined) {\r\n      value = container.getsetPropertyObject.getProperty(name);\r\n    }\r\n\r\n    if (container.directObject !== undefined) {\r\n      value = container.directObject[name];\r\n    }\r\n\r\n    if (value === undefined) {\r\n      return defaultValue;\r\n    }\r\n\r\n    if (typeof value === \"boolean\") {\r\n      return value;\r\n    } else if (typeof value === \"number\") {\r\n      if (value === 0) {\r\n        return false;\r\n      } else {\r\n        return true;\r\n      }\r\n    } else if (typeof value === \"string\") {\r\n      if (value === \"false\") {\r\n        return false;\r\n      } else {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return defaultValue;\r\n  }\r\n\r\n  static async getSubForm(field: IField): Promise<IFormDefinition | undefined> {\r\n    if (field.subForm) {\r\n      return field.subForm;\r\n    }\r\n\r\n    if (field.subFormId) {\r\n      const subForm = await Database.ensureFormLoadedByPath(field.subFormId);\r\n      return subForm;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getFieldValue(field: IField, container: IDataContainer) {\r\n    let curVal = undefined;\r\n\r\n    const dataObj = container.dataPropertyObject;\r\n\r\n    if (dataObj !== undefined) {\r\n      let prop = dataObj.getProperty(field.id);\r\n\r\n      if (prop === undefined && field.altId !== undefined) {\r\n        prop = dataObj.getProperty(field.altId);\r\n      }\r\n\r\n      if (prop !== undefined) {\r\n        curVal = prop.value;\r\n      }\r\n    }\r\n\r\n    const gsObj = container.getsetPropertyObject;\r\n\r\n    if (gsObj !== undefined) {\r\n      if (field.id === \"__scalar\") {\r\n        const res = gsObj.getBaseValue();\r\n\r\n        if (typeof res === \"object\") {\r\n          return undefined;\r\n        }\r\n\r\n        return res;\r\n      }\r\n\r\n      curVal = gsObj.getProperty(field.id);\r\n\r\n      if (curVal === undefined && field.altId !== undefined) {\r\n        curVal = gsObj.getProperty(field.altId);\r\n      }\r\n    }\r\n\r\n    const dirObj = container.directObject;\r\n\r\n    if (dirObj !== undefined) {\r\n      if (field.id === \"__scalar\") {\r\n        if (typeof dirObj === \"object\") {\r\n          return undefined;\r\n        }\r\n\r\n        return dirObj;\r\n      }\r\n\r\n      curVal = dirObj[field.id];\r\n    }\r\n\r\n    return curVal;\r\n  }\r\n\r\n  static getFieldTitle(field: IField) {\r\n    let title = field.id;\r\n\r\n    if (field.title !== undefined) {\r\n      title = field.title;\r\n    } else {\r\n      title = Utilities.humanifyMinecraftName(title);\r\n    }\r\n\r\n    if (title === undefined) {\r\n      title = \"Untitled\";\r\n    }\r\n\r\n    return title;\r\n  }\r\n\r\n  static getFieldId(field: IField) {\r\n    if (field.id) {\r\n      return field.id;\r\n    }\r\n\r\n    if (field.title) {\r\n      return field.title;\r\n    }\r\n\r\n    return \"<no id>\";\r\n  }\r\n\r\n  static getFieldById(id: string, form: IFormDefinition) {\r\n    const fields = form.fields;\r\n\r\n    for (let i = 0; i < fields.length; i++) {\r\n      const field = fields[i];\r\n\r\n      if (field.id === id) {\r\n        return field;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Legacy numeric-to-string mapping for FieldDataType.\r\n   * Some form.json files still contain numeric dataType values from that era. \r\n   * This map converts them to the current string-based FieldDataType values.\r\n   */\r\n  private static readonly _legacyNumericDataTypeMap: { [key: number]: FieldDataType } = {\r\n    0: FieldDataType.int,\r\n    1: FieldDataType.boolean,\r\n    2: FieldDataType.string,\r\n    3: FieldDataType.float,\r\n    4: FieldDataType.stringEnum,\r\n    5: FieldDataType.intEnum,\r\n    6: FieldDataType.intBoolean,\r\n    7: FieldDataType.number,\r\n    8: FieldDataType.stringLookup,\r\n    9: FieldDataType.intValueLookup,\r\n    10: FieldDataType.long,\r\n    11: FieldDataType.point3,\r\n    12: FieldDataType.intPoint3,\r\n    13: FieldDataType.longFormString,\r\n    14: FieldDataType.keyedObjectCollection,\r\n    15: FieldDataType.objectArray,\r\n    16: FieldDataType.object,\r\n    17: FieldDataType.stringArray,\r\n    18: FieldDataType.intRange,\r\n    19: FieldDataType.floatRange,\r\n    20: FieldDataType.minecraftFilter,\r\n    21: FieldDataType.percentRange,\r\n    22: FieldDataType.minecraftEventTrigger,\r\n    23: FieldDataType.longFormStringArray,\r\n    24: FieldDataType.keyedStringCollection,\r\n    25: FieldDataType.version,\r\n    26: FieldDataType.uuid,\r\n    27: FieldDataType.keyedBooleanCollection,\r\n    28: FieldDataType.keyedStringArrayCollection,\r\n    29: FieldDataType.arrayOfKeyedStringCollection,\r\n    30: FieldDataType.keyedKeyedStringArrayCollection,\r\n    31: FieldDataType.keyedNumberCollection,\r\n    32: FieldDataType.numberArray,\r\n    33: FieldDataType.checkboxListAsStringArray,\r\n    34: FieldDataType.molang,\r\n    35: FieldDataType.molangArray,\r\n    36: FieldDataType.point2,\r\n    37: FieldDataType.localizableString,\r\n    38: FieldDataType.keyedNumberArrayCollection,\r\n    39: FieldDataType.minecraftEventReference,\r\n  };\r\n\r\n  /**\r\n   * Converts a legacy numeric FieldDataType value to its string equivalent.\r\n   * If the value is already a string, returns it as-is.\r\n   */\r\n  static normalizeFieldDataType(dataType: FieldDataType | number): FieldDataType {\r\n    if (typeof dataType === \"number\") {\r\n      return FieldUtilities._legacyNumericDataTypeMap[dataType] ?? FieldDataType.string;\r\n    }\r\n    return dataType;\r\n  }\r\n\r\n  /**\r\n   * Normalizes all numeric dataType values in a form definition (and its nested\r\n   * subForms/alternates) to string-based FieldDataType values.\r\n   */\r\n  static normalizeFormFieldDataTypes(form: IFormDefinition) {\r\n    if (!form.fields) {\r\n      return;\r\n    }\r\n\r\n    for (const field of form.fields) {\r\n      FieldUtilities.normalizeFieldDataTypes(field);\r\n    }\r\n\r\n    if (form.scalarField) {\r\n      FieldUtilities.normalizeFieldDataTypes(form.scalarField);\r\n    }\r\n  }\r\n\r\n  private static normalizeFieldDataTypes(field: IField) {\r\n    if (field.dataType !== undefined) {\r\n      field.dataType = FieldUtilities.normalizeFieldDataType(field.dataType);\r\n    }\r\n\r\n    if (field.alternates) {\r\n      for (const alt of field.alternates) {\r\n        FieldUtilities.normalizeFieldDataTypes(alt);\r\n      }\r\n    }\r\n\r\n    if (field.subForm) {\r\n      FieldUtilities.normalizeFormFieldDataTypes(field.subForm);\r\n    }\r\n  }\r\n\r\n  static getStringKeyedFieldType(fieldType: FieldDataType) {\r\n    switch (fieldType) {\r\n      case FieldDataType.string:\r\n        return FieldDataType.keyedStringCollection;\r\n      case FieldDataType.number:\r\n        return FieldDataType.keyedNumberCollection;\r\n      case FieldDataType.stringArray:\r\n        return FieldDataType.keyedStringArrayCollection;\r\n      case FieldDataType.numberArray:\r\n        return FieldDataType.keyedNumberArrayCollection;\r\n      case FieldDataType.boolean:\r\n        return FieldDataType.keyedBooleanCollection;\r\n      case FieldDataType.object:\r\n        return FieldDataType.keyedObjectCollection;\r\n    }\r\n\r\n    return fieldType;\r\n  }\r\n\r\n  static evaluate(form: IFormDefinition, conditions: ICondition[], container: IDataContainer, defaultField?: IField) {\r\n    for (let condition of conditions) {\r\n      let field: IField | undefined;\r\n\r\n      if (condition.field) {\r\n        field = FieldUtilities.getFieldById(condition.field, form);\r\n      }\r\n\r\n      if (!field && defaultField) {\r\n        field = defaultField;\r\n      }\r\n\r\n      if (!field) {\r\n        Log.fail(\"Could not find field '\" + condition.field + \"'\");\r\n        return false;\r\n      }\r\n\r\n      const actualVal = FieldUtilities.getFieldValue(field, container);\r\n\r\n      if (condition.comparison) {\r\n        const comp = condition.comparison.toLowerCase();\r\n\r\n        if (comp === ComparisonType.equals) {\r\n          if (condition.value !== undefined && actualVal !== condition.value) {\r\n            return false;\r\n          }\r\n\r\n          if (condition.anyValues !== undefined) {\r\n            let foundMatch = false;\r\n\r\n            for (const val of condition.anyValues) {\r\n              if (val === actualVal) {\r\n                foundMatch = true;\r\n              }\r\n            }\r\n\r\n            if (!foundMatch) {\r\n              return false;\r\n            }\r\n          }\r\n        } else if (comp === ComparisonType.isDefined && (actualVal === undefined || actualVal === null)) {\r\n          return false;\r\n        } else if (\r\n          comp === ComparisonType.isNonEmpty &&\r\n          (actualVal === undefined || actualVal === null || (typeof actualVal === \"string\" && actualVal.length <= 0))\r\n        ) {\r\n          return false;\r\n        }\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n}\r\n", "import Utilities from \"../core/Utilities\";\r\nimport DataFormUtilities from \"./DataFormUtilities\";\r\nimport FieldUtilities from \"./FieldUtilities\";\r\nimport { ComparisonType } from \"./ICondition\";\r\nimport IField, { FieldDataType } from \"./IField\";\r\nimport IFormDefinition from \"./IFormDefinition\";\r\n\r\n/**\r\n * Cleans a field ID by removing the embedded enum syntax that appears in some form files.\r\n * For example: 'render_distance_type\"<\"fixed\", \"render\"' becomes 'render_distance_type'\r\n * This syntax is used in forms to specify enum choices but should not appear in property names.\r\n */\r\nfunction cleanFieldId(fieldId: string): string {\r\n  const quoteIndex = fieldId.indexOf('\"<\"');\r\n  if (quoteIndex !== -1) {\r\n    return fieldId.substring(0, quoteIndex);\r\n  }\r\n  return fieldId;\r\n}\r\n\r\n/**\r\n * Maximum recursion depth for validation to prevent exponential time complexity\r\n * when validating deeply nested structures. Beyond this depth, validation will\r\n * skip recursive subForm validation.\r\n */\r\nconst MAX_VALIDATION_DEPTH = 10;\r\n\r\n/**\r\n * Cache for subForm lookups during a single validation call chain.\r\n * This prevents repeated async lookups for the same subFormId during recursive validation.\r\n * Exported so it can be shared across items with the same formPath for performance.\r\n */\r\nexport interface IValidationContext {\r\n  depth: number;\r\n  subFormCache: Map<string, IFormDefinition | null>;\r\n}\r\n\r\nexport enum DataFormIssueType {\r\n  unexpectedStringUsedWhenObjectExpected = 101,\r\n  unexpectedBooleanUsedWhenObjectExpected = 102,\r\n  unexpectedNumberUsedWhenObjectExpected = 103,\r\n  dataTypeMismatch = 110,\r\n  valueBelowMinimum = 111,\r\n  valueAboveMaximum = 112,\r\n  stringTooShort = 113,\r\n  stringTooLong = 114,\r\n  valueNotInChoices = 115,\r\n  patternMismatch = 116,\r\n  arrayLengthMismatch = 117,\r\n  pointSizeMismatch = 118,\r\n  keyNotAllowed = 119,\r\n  unexpectedProperty = 120,\r\n  missingRequiredField = 121,\r\n}\r\n\r\nexport interface IDataFormValidationIssue {\r\n  message: string;\r\n  type: DataFormIssueType;\r\n}\r\n\r\nexport default class DataFormValidator {\r\n  static async validate(\r\n    data: object | string | number | boolean,\r\n    form: IFormDefinition,\r\n    issues?: IDataFormValidationIssue[],\r\n    path?: string,\r\n    context?: IValidationContext\r\n  ): Promise<IDataFormValidationIssue[]> {\r\n    // Initialize context on first call (top-level validation)\r\n    if (!context) {\r\n      context = {\r\n        depth: 0,\r\n        subFormCache: new Map<string, IFormDefinition | null>(),\r\n      };\r\n    }\r\n\r\n    // Check recursion depth limit - skip deep validation to prevent exponential complexity\r\n    if (context.depth >= MAX_VALIDATION_DEPTH) {\r\n      return issues || [];\r\n    }\r\n\r\n    if (path === undefined) {\r\n      path = \"\";\r\n    } else {\r\n      path = path + \".\";\r\n    }\r\n\r\n    if (!issues) {\r\n      issues = [];\r\n    }\r\n\r\n    if (typeof data === \"string\" || typeof data === \"number\" || typeof data === \"boolean\") {\r\n      const scalarField = DataFormUtilities.getScalarField(form);\r\n\r\n      if (!scalarField) {\r\n        if (typeof data === \"string\") {\r\n          issues.push(DataFormValidator.getValidationIssue(DataFormIssueType.unexpectedStringUsedWhenObjectExpected));\r\n        } else if (typeof data === \"number\") {\r\n          issues.push(DataFormValidator.getValidationIssue(DataFormIssueType.unexpectedNumberUsedWhenObjectExpected));\r\n        } else if (typeof data === \"boolean\") {\r\n          issues.push(DataFormValidator.getValidationIssue(DataFormIssueType.unexpectedBooleanUsedWhenObjectExpected));\r\n        }\r\n\r\n        return issues;\r\n      }\r\n\r\n      await this.validateField(data, scalarField, issues, path + \"<default value>\", context);\r\n    }\r\n\r\n    const fields = form.fields;\r\n\r\n    // Guard against forms with undefined or null fields array\r\n    if (fields && Array.isArray(fields)) {\r\n      for (const field of fields) {\r\n        if (field.id) {\r\n          // Clean the field ID to remove embedded enum syntax like 'render_distance_type\"<\"fixed\", \"render\"'\r\n          const cleanedFieldId = cleanFieldId(field.id);\r\n\r\n          // Check if the cleaned field ID is a regex pattern (contains metacharacters like [, ], +, *, etc.)\r\n          if (\r\n            this.isPatternFieldId(cleanedFieldId) &&\r\n            typeof data === \"object\" &&\r\n            data !== null &&\r\n            !Array.isArray(data)\r\n          ) {\r\n            // For pattern-based field IDs, find all matching keys in the data\r\n            await this.validatePatternField(data, field, issues, path, context, cleanedFieldId);\r\n          } else {\r\n            // Use the cleaned field ID for data lookup\r\n            const fieldData = (data as any)[cleanedFieldId];\r\n            await this.validateField(fieldData, field, issues, path + cleanedFieldId, context);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check for unexpected properties not defined in the form\r\n    if (typeof data === \"object\" && data !== null && !Array.isArray(data)) {\r\n      await this.validateUnexpectedProperties(data, form, issues, path);\r\n    }\r\n\r\n    return issues;\r\n  }\r\n\r\n  /**\r\n   * Validates that an object doesn't have properties not defined in the form.\r\n   * This check only runs when form.strictAdditionalProperties is true, as most Minecraft\r\n   * content formats allow additional properties not explicitly defined in the schema.\r\n   */\r\n  static async validateUnexpectedProperties(\r\n    data: object,\r\n    form: IFormDefinition,\r\n    issues: IDataFormValidationIssue[],\r\n    path: string\r\n  ): Promise<void> {\r\n    // Skip if the form allows additional properties (default behavior for Minecraft content)\r\n    if (!form.strictAdditionalProperties) {\r\n      return;\r\n    }\r\n\r\n    // Skip if the form explicitly allows custom fields\r\n    if (form.customField) {\r\n      return;\r\n    }\r\n\r\n    // Skip if form.fields is not available\r\n    if (!form.fields || !Array.isArray(form.fields)) {\r\n      return;\r\n    }\r\n\r\n    const definedFieldIds = new Set<string>();\r\n\r\n    for (const field of form.fields) {\r\n      if (field.id) {\r\n        definedFieldIds.add(field.id);\r\n      }\r\n      if (field.altId) {\r\n        definedFieldIds.add(field.altId);\r\n      }\r\n    }\r\n\r\n    const dataKeys = Object.keys(data);\r\n    for (const key of dataKeys) {\r\n      if (!definedFieldIds.has(key)) {\r\n        issues.push({\r\n          message: `At ${path}${key}, unexpected property '${key}' is not defined in the schema.`,\r\n          type: DataFormIssueType.unexpectedProperty,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  static async validateField(\r\n    data: object | string | number | boolean | undefined | null,\r\n    field: IField,\r\n    issues: IDataFormValidationIssue[],\r\n    path: string,\r\n    context: IValidationContext\r\n  ) {\r\n    const allFields = DataFormUtilities.getFieldAndAlternates(field);\r\n\r\n    let dataMismatchErrors = \"\";\r\n    let hasOneMatch = false;\r\n    let isRequired = false;\r\n    let matchingField: IField | undefined;\r\n\r\n    for (const altField of allFields) {\r\n      if (data !== undefined && data !== null) {\r\n        const mismatchError = DataFormValidator.getDataMismatchError(data, altField.dataType);\r\n\r\n        if (!mismatchError) {\r\n          hasOneMatch = true;\r\n          matchingField = altField;\r\n        } else {\r\n          dataMismatchErrors += mismatchError;\r\n        }\r\n      }\r\n\r\n      if (altField.isRequired) {\r\n        isRequired = true;\r\n      }\r\n    }\r\n\r\n    if (data === undefined || data === null) {\r\n      if (isRequired) {\r\n        // Use cleaned field ID in error message\r\n        const cleanedId = field.id ? cleanFieldId(field.id) : field.id;\r\n        issues.push({\r\n          message: \"At \" + path + \", data is missing required field '\" + cleanedId + \"'.\",\r\n          type: DataFormIssueType.missingRequiredField,\r\n        });\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    if (!hasOneMatch) {\r\n      if (allFields.length > 1) {\r\n        issues.push({\r\n          message: \"At \" + path + \", data does not match any one of the expected types: \" + dataMismatchErrors,\r\n          type: DataFormIssueType.dataTypeMismatch,\r\n        });\r\n      } else {\r\n        issues.push({\r\n          message: \"At \" + path + \", data does not match expected type. \" + dataMismatchErrors,\r\n          type: DataFormIssueType.dataTypeMismatch,\r\n        });\r\n      }\r\n      return; // Don't continue validation if type doesn't match\r\n    }\r\n\r\n    // Use the matching field for remaining validations\r\n    const activeField = matchingField || field;\r\n\r\n    // Validate numeric ranges\r\n    if (typeof data === \"number\") {\r\n      this.validateNumericRange(data, activeField, issues, path);\r\n    }\r\n\r\n    // Validate string length\r\n    if (typeof data === \"string\") {\r\n      this.validateStringLength(data, activeField, issues, path);\r\n    }\r\n\r\n    // Validate choices/enum values\r\n    this.validateChoices(data, activeField, issues, path);\r\n\r\n    // Validate patterns from validity conditions\r\n    this.validatePatterns(data, activeField, issues, path);\r\n\r\n    // Validate array lengths\r\n    if (Array.isArray(data)) {\r\n      this.validateArrayLength(data, activeField, issues, path);\r\n    }\r\n\r\n    // Validate point sizes (point2, point3, etc.)\r\n    this.validatePointSize(data, activeField, issues, path);\r\n\r\n    // Validate keyed collection keys\r\n    if (typeof data === \"object\" && data !== null && !Array.isArray(data)) {\r\n      await this.validateKeyedCollection(data, activeField, issues, path, context);\r\n    }\r\n\r\n    if (typeof data === \"object\" && data === null && field.id && Utilities.isUsableAsObjectKey(field.id)) {\r\n      const fieldData = (data as any)[field.id];\r\n\r\n      const subForm = await this.getCachedSubForm(field, context);\r\n\r\n      if (subForm && fieldData !== undefined && fieldData !== null) {\r\n        await this.validate(fieldData, subForm, issues, path, {\r\n          depth: context.depth + 1,\r\n          subFormCache: context.subFormCache,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  static getDataMismatchError(data: object | string | number | boolean | string[] | number[], type: FieldDataType) {\r\n    if (Array.isArray(data)) {\r\n      // Determine array element type by checking first element\r\n      const elementType = data.length > 0 ? typeof data[0] : undefined;\r\n\r\n      if (elementType === \"string\") {\r\n        if (\r\n          type === FieldDataType.stringArray ||\r\n          type === FieldDataType.checkboxListAsStringArray ||\r\n          type === FieldDataType.longFormStringArray\r\n        ) {\r\n          return undefined;\r\n        }\r\n\r\n        return (\r\n          \"Data '\" +\r\n          data +\r\n          \"' is of type string array, which does not match type '\" +\r\n          DataFormUtilities.getFieldTypeDescription(type) +\r\n          \"'.\"\r\n        );\r\n      } else if (elementType === \"number\") {\r\n        // Number arrays can match numberArray, floatRange, intRange, percentRange, point2, point3, intPoint3, version\r\n        if (\r\n          type === FieldDataType.numberArray ||\r\n          type === FieldDataType.floatRange ||\r\n          type === FieldDataType.intRange ||\r\n          type === FieldDataType.percentRange ||\r\n          type === FieldDataType.point2 ||\r\n          type === FieldDataType.point3 ||\r\n          type === FieldDataType.intPoint3 ||\r\n          type === FieldDataType.version ||\r\n          type === FieldDataType.location ||\r\n          type === FieldDataType.locationOffset\r\n        ) {\r\n          return undefined;\r\n        }\r\n\r\n        return (\r\n          \"Data '\" +\r\n          data +\r\n          \"' is of type number array, which does not match type '\" +\r\n          DataFormUtilities.getFieldTypeDescription(type) +\r\n          \"'.\"\r\n        );\r\n      } else if (elementType === \"object\") {\r\n        // Array of objects - valid for objectArray, minecraftEventTriggerArray, etc.\r\n        if (\r\n          type === FieldDataType.objectArray ||\r\n          type === FieldDataType.minecraftEventTriggerArray ||\r\n          type === FieldDataType.arrayOfKeyedStringCollection\r\n        ) {\r\n          return undefined;\r\n        }\r\n\r\n        return (\r\n          \"Data is of type object array, which does not match type '\" +\r\n          DataFormUtilities.getFieldTypeDescription(type) +\r\n          \"'.\"\r\n        );\r\n      } else if (Array.isArray(data[0])) {\r\n        // Two-dimensional array\r\n        if (type === FieldDataType.twoDStringArray) {\r\n          return undefined;\r\n        }\r\n\r\n        return (\r\n          \"Data is of type 2D array, which does not match type '\" +\r\n          DataFormUtilities.getFieldTypeDescription(type) +\r\n          \"'.\"\r\n        );\r\n      }\r\n\r\n      // Empty array - allow it for any array type\r\n      if (data.length === 0) {\r\n        return undefined;\r\n      }\r\n    } else if (typeof data === \"string\") {\r\n      // Strings can match many types including enums, molang expressions, UUIDs, etc.\r\n      if (\r\n        type === FieldDataType.localizableString ||\r\n        type === FieldDataType.longFormString ||\r\n        type === FieldDataType.version ||\r\n        type === FieldDataType.stringLookup ||\r\n        type === FieldDataType.string ||\r\n        type === FieldDataType.stringEnum ||\r\n        type === FieldDataType.molang ||\r\n        type === FieldDataType.uuid ||\r\n        type === FieldDataType.minecraftEventReference\r\n      ) {\r\n        return undefined;\r\n      }\r\n\r\n      return (\r\n        \"Data '\" +\r\n        data +\r\n        \"' is of type string, which does not match type '\" +\r\n        DataFormUtilities.getFieldTypeDescription(type) +\r\n        \"'.\"\r\n      );\r\n    } else if (typeof data === \"number\") {\r\n      // A single number can match many types including range types (collapsed ranges)\r\n      // According to IField.ts docs, intRange/floatRange/percentRange can be a single number\r\n      if (\r\n        type === FieldDataType.float ||\r\n        type === FieldDataType.intBoolean ||\r\n        type === FieldDataType.int ||\r\n        type === FieldDataType.intEnum ||\r\n        type === FieldDataType.intValueLookup ||\r\n        type === FieldDataType.number ||\r\n        type === FieldDataType.long ||\r\n        type === FieldDataType.intRange ||\r\n        type === FieldDataType.floatRange ||\r\n        type === FieldDataType.percentRange\r\n      ) {\r\n        return undefined;\r\n      }\r\n\r\n      return (\r\n        \"Data '\" +\r\n        data +\r\n        \"' is of type number, which does not match type '\" +\r\n        DataFormUtilities.getFieldTypeDescription(type) +\r\n        \"'.\"\r\n      );\r\n    } else if (typeof data === \"boolean\") {\r\n      if (type === FieldDataType.boolean) {\r\n        return undefined;\r\n      }\r\n\r\n      return (\r\n        \"Data '\" +\r\n        data +\r\n        \"' is of type boolean, which does not match type '\" +\r\n        DataFormUtilities.getFieldTypeDescription(type) +\r\n        \"'.\"\r\n      );\r\n    } else if (typeof data === \"object\") {\r\n      // Objects can match many types - keyed collections, range types (with min/max), filters, event triggers, etc.\r\n      if (\r\n        type === FieldDataType.object ||\r\n        type === FieldDataType.keyedBooleanCollection ||\r\n        type === FieldDataType.keyedKeyedStringArrayCollection ||\r\n        type === FieldDataType.keyedNumberArrayCollection ||\r\n        type === FieldDataType.keyedNumberCollection ||\r\n        type === FieldDataType.keyedObjectCollection ||\r\n        type === FieldDataType.keyedStringArrayCollection ||\r\n        type === FieldDataType.keyedStringCollection ||\r\n        // Range types can also be objects with min/max properties\r\n        type === FieldDataType.intRange ||\r\n        type === FieldDataType.floatRange ||\r\n        type === FieldDataType.percentRange ||\r\n        // Minecraft-specific object types\r\n        type === FieldDataType.minecraftFilter ||\r\n        type === FieldDataType.minecraftEventTrigger ||\r\n        type === FieldDataType.minecraftEventReference ||\r\n        // Point types can be objects with x/y/z properties\r\n        type === FieldDataType.point2 ||\r\n        type === FieldDataType.point3 ||\r\n        type === FieldDataType.intPoint3 ||\r\n        type === FieldDataType.location ||\r\n        type === FieldDataType.locationOffset\r\n      ) {\r\n        return undefined;\r\n      }\r\n\r\n      let dataStr = JSON.stringify(data);\r\n\r\n      if (dataStr.length > 60) {\r\n        dataStr = dataStr.substring(0, 60) + \"...\";\r\n      }\r\n\r\n      return (\r\n        \"Data '\" +\r\n        dataStr +\r\n        \"' is an object, which does not match type '\" +\r\n        DataFormUtilities.getFieldTypeDescription(type) +\r\n        \"'.\"\r\n      );\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Validates that a numeric value is within the allowed range.\r\n   */\r\n  static validateNumericRange(data: number, field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    if (field.minValue !== undefined && data < field.minValue) {\r\n      issues.push({\r\n        message: `At ${path}, value ${data} is below minimum value ${field.minValue}.`,\r\n        type: DataFormIssueType.valueBelowMinimum,\r\n      });\r\n    }\r\n\r\n    if (field.maxValue !== undefined && data > field.maxValue) {\r\n      issues.push({\r\n        message: `At ${path}, value ${data} is above maximum value ${field.maxValue}.`,\r\n        type: DataFormIssueType.valueAboveMaximum,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates that a string value is within the allowed length.\r\n   */\r\n  static validateStringLength(data: string, field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    if (field.minLength !== undefined && data.length < field.minLength) {\r\n      issues.push({\r\n        message: `At ${path}, string length ${data.length} is below minimum length ${field.minLength}.`,\r\n        type: DataFormIssueType.stringTooShort,\r\n      });\r\n    }\r\n\r\n    if (field.maxLength !== undefined && data.length > field.maxLength) {\r\n      issues.push({\r\n        message: `At ${path}, string length ${data.length} is above maximum length ${field.maxLength}.`,\r\n        type: DataFormIssueType.stringTooLong,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates that a value matches one of the allowed choices.\r\n   */\r\n  static validateChoices(data: unknown, field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    // If no choices defined or mustMatchChoices is explicitly false, skip\r\n    if (!field.choices || field.choices.length === 0) {\r\n      return;\r\n    }\r\n\r\n    // If mustMatchChoices is explicitly false, skip validation\r\n    if (field.mustMatchChoices === false) {\r\n      return;\r\n    }\r\n\r\n    // For lookup fields without mustMatchChoices explicitly set, skip by default\r\n    // since lookups may have dynamic values\r\n    if (\r\n      field.mustMatchChoices === undefined &&\r\n      (field.dataType === FieldDataType.stringLookup || field.dataType === FieldDataType.intValueLookup)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const dataValue = typeof data === \"string\" || typeof data === \"number\" ? data : undefined;\r\n    if (dataValue === undefined) {\r\n      return;\r\n    }\r\n\r\n    const validChoiceIds = field.choices.map((choice) => choice.id);\r\n    const valueStr = String(dataValue);\r\n\r\n    if (!validChoiceIds.includes(valueStr)) {\r\n      const choiceList = validChoiceIds.slice(0, 5).join(\", \") + (validChoiceIds.length > 5 ? \", ...\" : \"\");\r\n      issues.push({\r\n        message: `At ${path}, value '${valueStr}' is not one of the allowed choices: ${choiceList}.`,\r\n        type: DataFormIssueType.valueNotInChoices,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates that a value matches patterns defined in field.validity conditions.\r\n   */\r\n  static validatePatterns(data: unknown, field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    if (!field.validity || field.validity.length === 0) {\r\n      return;\r\n    }\r\n\r\n    if (typeof data !== \"string\") {\r\n      return;\r\n    }\r\n\r\n    for (const condition of field.validity) {\r\n      if (condition.comparison === ComparisonType.matchesPattern && condition.value !== undefined) {\r\n        try {\r\n          const pattern = new RegExp(String(condition.value));\r\n          if (!pattern.test(data)) {\r\n            issues.push({\r\n              message: `At ${path}, value '${data}' does not match required pattern '${condition.value}'.`,\r\n              type: DataFormIssueType.patternMismatch,\r\n            });\r\n          }\r\n        } catch (e) {\r\n          // Invalid regex pattern - skip validation but don't crash\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates that an array has the correct length if fixedLength is specified.\r\n   */\r\n  static validateArrayLength(data: unknown[], field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    if (field.fixedLength !== undefined && data.length !== field.fixedLength) {\r\n      issues.push({\r\n        message: `At ${path}, array has ${data.length} elements but expected exactly ${field.fixedLength}.`,\r\n        type: DataFormIssueType.arrayLengthMismatch,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates that point arrays (point2, point3, etc.) have the correct number of elements.\r\n   */\r\n  static validatePointSize(data: unknown, field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    if (!Array.isArray(data)) {\r\n      return;\r\n    }\r\n\r\n    let expectedSize: number | undefined;\r\n\r\n    switch (field.dataType) {\r\n      case FieldDataType.point2:\r\n        expectedSize = 2;\r\n        break;\r\n      case FieldDataType.point3:\r\n        expectedSize = 3;\r\n        break;\r\n      case FieldDataType.floatRange:\r\n        expectedSize = 2;\r\n        break;\r\n      case FieldDataType.intRange:\r\n        expectedSize = 2;\r\n        break;\r\n    }\r\n\r\n    if (expectedSize !== undefined && data.length !== expectedSize) {\r\n      const typeName = DataFormUtilities.getFieldTypeDescription(field.dataType);\r\n      issues.push({\r\n        message: `At ${path}, ${typeName} has ${data.length} elements but expected exactly ${expectedSize}.`,\r\n        type: DataFormIssueType.pointSizeMismatch,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets a subForm for a field, using the validation context cache to avoid repeated lookups.\r\n   * This significantly improves performance when validating deeply nested structures.\r\n   */\r\n  static async getCachedSubForm(field: IField, context: IValidationContext): Promise<IFormDefinition | null> {\r\n    // If there's an inline subForm, return it directly (no caching needed)\r\n    if (field.subForm) {\r\n      return field.subForm;\r\n    }\r\n\r\n    // If there's no subFormId, nothing to look up\r\n    if (!field.subFormId) {\r\n      return null;\r\n    }\r\n\r\n    const cacheKey = field.subFormId;\r\n\r\n    if (context.subFormCache.has(cacheKey)) {\r\n      return context.subFormCache.get(cacheKey) || null;\r\n    }\r\n\r\n    const subForm = await FieldUtilities.getSubForm(field);\r\n    context.subFormCache.set(cacheKey, subForm || null);\r\n    return subForm || null;\r\n  }\r\n\r\n  /**\r\n   * Validates that keys in a keyed collection are allowed if allowedKeys is specified.\r\n   */\r\n  static async validateKeyedCollection(\r\n    data: object,\r\n    field: IField,\r\n    issues: IDataFormValidationIssue[],\r\n    path: string,\r\n    context: IValidationContext\r\n  ): Promise<void> {\r\n    const isKeyedCollection =\r\n      field.dataType === FieldDataType.keyedObjectCollection ||\r\n      field.dataType === FieldDataType.keyedStringCollection ||\r\n      field.dataType === FieldDataType.keyedNumberCollection ||\r\n      field.dataType === FieldDataType.keyedBooleanCollection ||\r\n      field.dataType === FieldDataType.keyedStringArrayCollection ||\r\n      field.dataType === FieldDataType.keyedNumberArrayCollection ||\r\n      field.dataType === FieldDataType.keyedKeyedStringArrayCollection;\r\n\r\n    if (!isKeyedCollection) {\r\n      // For regular objects, validate subForm if available\r\n      const subForm = await this.getCachedSubForm(field, context);\r\n      if (subForm) {\r\n        await this.validate(data, subForm, issues, path, {\r\n          depth: context.depth + 1,\r\n          subFormCache: context.subFormCache,\r\n        });\r\n      }\r\n      return;\r\n    }\r\n\r\n    // Validate allowedKeys if specified\r\n    if (field.allowedKeys && field.allowedKeys.length > 0) {\r\n      const dataKeys = Object.keys(data);\r\n      for (const key of dataKeys) {\r\n        if (!field.allowedKeys.includes(key)) {\r\n          issues.push({\r\n            message: `At ${path}, key '${key}' is not in the allowed keys list.`,\r\n            type: DataFormIssueType.keyNotAllowed,\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    // If there's a subForm, validate each value in the keyed collection\r\n    if (field.dataType === FieldDataType.keyedObjectCollection) {\r\n      const subForm = await this.getCachedSubForm(field, context);\r\n      if (subForm) {\r\n        for (const key of Object.keys(data)) {\r\n          const value = (data as Record<string, unknown>)[key];\r\n          if (value !== undefined && value !== null && typeof value === \"object\") {\r\n            await this.validate(value as object, subForm, issues, `${path}.${key}`, {\r\n              depth: context.depth + 1,\r\n              subFormCache: context.subFormCache,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Checks if a field ID contains regex metacharacters, indicating it's a pattern\r\n   * that should be matched against data keys rather than used as a literal property name.\r\n   * Common patterns in Minecraft forms: \"geometry.[a-zA-Z0-9_.'-:]+\" for legacy geometry.\r\n   */\r\n  static isPatternFieldId(fieldId: string): boolean {\r\n    // Check for common regex metacharacters that indicate a pattern\r\n    return /[[\\]{}()*+?\\\\^$|]/.test(fieldId);\r\n  }\r\n\r\n  /**\r\n   * Validates a pattern-based field ID against the data object.\r\n   * For pattern fields, iterates through all data keys and validates those matching the pattern.\r\n   * If the field is required, at least one matching key must exist.\r\n   * @param cleanedFieldId - The field ID after cleaning (removing embedded enum syntax)\r\n   */\r\n  static async validatePatternField(\r\n    data: object,\r\n    field: IField,\r\n    issues: IDataFormValidationIssue[],\r\n    path: string,\r\n    context: IValidationContext,\r\n    cleanedFieldId?: string\r\n  ): Promise<void> {\r\n    const fieldIdToUse = cleanedFieldId || (field.id ? cleanFieldId(field.id) : undefined);\r\n    if (!fieldIdToUse) {\r\n      return;\r\n    }\r\n\r\n    let pattern: RegExp;\r\n    try {\r\n      // Anchor the pattern to match the full key\r\n      pattern = new RegExp(\"^\" + fieldIdToUse + \"$\");\r\n    } catch (e) {\r\n      // Invalid regex - treat as literal field ID (fallback)\r\n      const fieldData = (data as any)[fieldIdToUse];\r\n      await this.validateField(fieldData, field, issues, path + fieldIdToUse, context);\r\n      return;\r\n    }\r\n\r\n    const dataKeys = Object.keys(data);\r\n    const matchingKeys = dataKeys.filter((key) => pattern.test(key));\r\n\r\n    if (matchingKeys.length === 0) {\r\n      if (field.isRequired) {\r\n        issues.push({\r\n          message: `At ${path}${fieldIdToUse}, data is missing required field matching pattern '${fieldIdToUse}'.`,\r\n          type: DataFormIssueType.missingRequiredField,\r\n        });\r\n      }\r\n      return;\r\n    }\r\n\r\n    // Validate each matching key against the field's subForm or validation rules\r\n    for (const matchingKey of matchingKeys) {\r\n      const fieldData = (data as any)[matchingKey];\r\n      await this.validateField(fieldData, field, issues, path + matchingKey, context);\r\n    }\r\n  }\r\n\r\n  static getValidationIssue(type: DataFormIssueType): IDataFormValidationIssue {\r\n    return {\r\n      message: Utilities.getTitleFromEnum(DataFormIssueType, type),\r\n      type: type,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\n\r\nimport axios from \"axios\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport Database from \"../minecraft/Database\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport DataFormValidator, { IValidationContext } from \"../dataform/DataFormValidator\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\n\r\nexport enum FormSchemaItemInfoGeneratorTest {\r\n  couldNotParseJson = 401,\r\n  couldNotFindForm = 402,\r\n}\r\n\r\n/**\r\n * Validates JSON files against Minecraft documentation-based form schemas.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/jsonf.form.json} for topic definitions\r\n */\r\nexport default class FormSchemaItemInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"JSONF\";\r\n  title = \"JSON Structure\";\r\n  canAlwaysProcess = true;\r\n\r\n  _schemaContentByPath: { [id: string]: object } = {};\r\n\r\n  /**\r\n   * Cache of loaded form definitions keyed by formPath.\r\n   * Avoids redundant Database.ensureFormLoadedByPath() calls for items sharing the same form.\r\n   *\r\n   * Lifecycle: This generator is instantiated once per validation run by GeneratorRegistrations.\r\n   * Caches are valid for the duration of a single ProjectInfoSet.generate() call and are\r\n   * naturally discarded when the generator instance is garbage-collected after the run.\r\n   */\r\n  _formCache: Map<string, IFormDefinition | null> = new Map();\r\n\r\n  /**\r\n   * Cache of validation contexts keyed by formPath.\r\n   * Items with the same form share a subForm cache, avoiding repeated async subForm lookups.\r\n   *\r\n   * Lifecycle: Same as _formCache \u2014 scoped to a single validation run.\r\n   */\r\n  _contextCache: Map<string, IValidationContext> = new Map();\r\n\r\n  uuidRegex = new RegExp(\"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\");\r\n\r\n  constructor() {\r\n    this.testUuid = this.testUuid.bind(this);\r\n    this.testUri = this.testUri.bind(this);\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async loadSchema(uri: string) {\r\n    const res = await axios.get(Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) + uri);\r\n\r\n    return res.data;\r\n  }\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    // Fast path: skip items that can never have a form.\r\n    // getFormPathForType returns undefined for most item types (textures, audio, etc.).\r\n    // Only geometry items need special logic via getFormPath().\r\n    if (\r\n      projectItem.itemType !== ProjectItemType.modelGeometryJson &&\r\n      ProjectItemUtilities.getFormPathForType(projectItem.itemType) === undefined\r\n    ) {\r\n      return items;\r\n    }\r\n\r\n    if (\r\n      projectItem.primaryFile &&\r\n      projectItem.primaryFile.content &&\r\n      typeof projectItem.primaryFile.content === \"string\"\r\n    ) {\r\n      const formPath = projectItem.getFormPath();\r\n\r\n      if (formPath) {\r\n        // Use cached form definition to avoid repeated Database lookups\r\n        let form: IFormDefinition | null | undefined = this._formCache.get(formPath);\r\n        if (form === undefined) {\r\n          const loaded = await Database.ensureFormLoadedByPath(formPath);\r\n          form = loaded || null;\r\n          this._formCache.set(formPath, form);\r\n        }\r\n\r\n        if (form) {\r\n          const data = StorageUtilities.getJsonObject(projectItem.primaryFile);\r\n\r\n          if (!data) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                FormSchemaItemInfoGeneratorTest.couldNotParseJson,\r\n                \"Could not parse JSON. \" +\r\n                  (projectItem.primaryFile.errorStateMessage ? projectItem.primaryFile.errorStateMessage : \"\"),\r\n                projectItem,\r\n                formPath\r\n              )\r\n            );\r\n          } else {\r\n            // Share validation context (and its subForm cache) across items\r\n            // with the same formPath for massive speedup on repeated forms.\r\n            let context = this._contextCache.get(formPath);\r\n            if (!context) {\r\n              context = {\r\n                depth: 0,\r\n                subFormCache: new Map<string, IFormDefinition | null>(),\r\n              };\r\n              this._contextCache.set(formPath, context);\r\n            }\r\n\r\n            // Reset depth for each new item (subFormCache is intentionally preserved)\r\n            const itemContext: IValidationContext = {\r\n              depth: 0,\r\n              subFormCache: context.subFormCache,\r\n            };\r\n\r\n            const results = await DataFormValidator.validate(data, form, undefined, undefined, itemContext);\r\n\r\n            if (results) {\r\n              for (const result of results) {\r\n                items.push(\r\n                  new ProjectInfoItem(InfoItemType.warning, this.id, result.type, result.message, projectItem)\r\n                );\r\n              }\r\n            }\r\n          }\r\n        } else {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.internalProcessingError,\r\n              this.id,\r\n              FormSchemaItemInfoGeneratorTest.couldNotFindForm,\r\n              \"Could not find expected form\",\r\n              undefined,\r\n              formPath\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  testUuid(uuidString: string) {\r\n    return this.uuidRegex.test(uuidString);\r\n  }\r\n\r\n  testUnknownFormat(formatString: string) {\r\n    return true;\r\n  }\r\n\r\n  testUri(uriString: string) {\r\n    // could get much more sophisticated here...\r\n    return uriString.indexOf(\"://\") >= 0;\r\n  }\r\n}\r\n", "import ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nexport enum UnknownItemGeneratorTest {\r\n  unknownItemTypeFound = 101,\r\n}\r\n\r\n/**\r\n * Detects JSON files with unknown or unrecognized structure.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/unkjson.form.json} for topic definitions\r\n */\r\nexport default class UnknownItemGenerator implements IProjectInfoItemGenerator {\r\n  id = \"UNKJSON\";\r\n  title = \"Unknown JSON\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (projectItem.itemType === ProjectItemType.unknownJson) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          UnknownItemGeneratorTest.unknownItemTypeFound,\r\n          \"Unknown JSON file found\",\r\n          projectItem\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport IProjectFileInfoGenerator from \"./IProjectFileInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IFile from \"../storage/IFile\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nexport enum UnknownFileGeneratorTest {\r\n  unknownTypeFileFound = 102,\r\n}\r\n\r\n/**\r\n * Detects files with unknown or unrecognized extensions.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/unkfile.form.json} for topic definitions\r\n */\r\nexport default class UnknownFileGenerator implements IProjectFileInfoGenerator {\r\n  id = \"UNKFILE\";\r\n  title = \"Unknown files\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, file: IFile, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (!StorageUtilities.isUsableFile(file.storageRelativePath)) {\r\n      const ext = StorageUtilities.getTypeFromName(file.name);\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          UnknownFileGeneratorTest.unknownTypeFileFound,\r\n          `Unknown type ${ext} file found`,\r\n          project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n          file.extendedPath\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport NbtBinary from \"./NbtBinary\";\r\nimport { NbtTagType } from \"./NbtBinaryTag\";\r\nimport Log from \"../core/Log\";\r\nimport DataUtilities from \"../core/DataUtilities\";\r\nimport IFlatWorldLayerSet from \"./IFlatWorldLayerSet\";\r\nimport { BackupType, IWorldSettings } from \"./IWorldSettings\";\r\nimport { IErrorMessage, IErrorable } from \"../core/IErrorable\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport enum GameType {\r\n  survival = 0,\r\n  creative = 1,\r\n  adventure = 2,\r\n}\r\n\r\nexport enum Generator {\r\n  old = 0,\r\n  infinite = 1,\r\n  flat = 2,\r\n}\r\n\r\nexport enum Difficulty {\r\n  peaceful = 0,\r\n  easy = 1,\r\n  normal = 2,\r\n  hard = 3,\r\n}\r\n\r\nexport enum PlayerPermissionsLevel {\r\n  visitor = 0,\r\n  member = 1,\r\n  operator = 2,\r\n  custom = 3,\r\n}\r\n\r\nexport const TOPMOST_BLOCK = 32767;\r\nexport const DEFAULT_SPAWN_COORD = -2147483648;\r\n\r\nexport default class WorldLevelDat implements IWorldSettings, IErrorable {\r\n  public nbt: NbtBinary | undefined;\r\n\r\n  public levelName?: string;\r\n  public spawnX?: number;\r\n  public spawnY?: number;\r\n  public spawnZ?: number;\r\n  public gameType?: GameType;\r\n  public editorWorldType?: number;\r\n  public generator?: Generator;\r\n  public commandsEnabled?: boolean; // same as \"are cheats enabled\".. or maybe not?\r\n  public commandBlocksEnabled?: boolean;\r\n  public experimentalGameplay?: boolean;\r\n  public betaApisExperiment?: boolean;\r\n  public deferredTechnicalPreviewExperiment?: boolean;\r\n  public dataDrivenItemsExperiment?: boolean;\r\n  public savedWithToggledExperiments?: boolean;\r\n  public experimentsEverUsed?: boolean;\r\n  public cheatsEnabled?: boolean;\r\n  public attackMobs?: boolean;\r\n  public attackPlayers?: boolean;\r\n  public build?: boolean;\r\n  public doorsAndSwitches?: boolean;\r\n  public flySpeed?: number;\r\n  public flying?: boolean;\r\n  public instaBuild?: boolean;\r\n  public invulnerable?: boolean;\r\n  public lightning?: boolean;\r\n  public mayFly?: boolean;\r\n  public mine?: boolean;\r\n  public op?: boolean;\r\n  public openContainers?: boolean;\r\n  public teleport?: boolean;\r\n  public walkSpeed?: number;\r\n\r\n  public isCreatedInEditor?: boolean;\r\n  public isExportedFromEditor?: boolean;\r\n  public isRandomSeedAllowed?: boolean;\r\n  public biomeOverride?: string;\r\n  public centerMapsToOrigin?: boolean;\r\n  public confirmedPlatformLockedContent?: boolean;\r\n  public difficulty?: Difficulty;\r\n  public flatWorldLayers?: IFlatWorldLayerSet;\r\n  public forceGameType?: boolean;\r\n  public inventoryVersion?: string;\r\n  public lanBroadcast?: boolean;\r\n  public lanBroadcastIntent?: boolean;\r\n  public lastPlayed?: bigint;\r\n  public limitedWorldOriginX?: number;\r\n  public limitedWorldOriginY?: number;\r\n  public limitedWorldOriginZ?: number;\r\n  public minimumCompatibleClientVersion?: number[];\r\n  public multiplayerGame?: boolean;\r\n  public multiplayerGameIntent?: boolean;\r\n  public netherScale?: number;\r\n  public networkVersion?: number;\r\n  public platform?: number;\r\n  public platformBroadcastIntent?: number;\r\n  public randomSeed?: string;\r\n  public spawnV1Villagers?: boolean;\r\n  public storageVersion?: number;\r\n  public time?: bigint;\r\n  public worldVersion?: number;\r\n  public xblBroadcastIntent?: number;\r\n  public abilities?: any[];\r\n  public baseGameVersion?: string;\r\n  public bonusChestEnabled?: boolean;\r\n  public bonusChestSpawned?: boolean;\r\n  public commandBlockOutput?: boolean;\r\n  public currentTick?: bigint;\r\n  public doDaylightCycle?: boolean;\r\n\r\n  public daylightCycle?: number;\r\n  public doEntityDrops?: boolean;\r\n  public doFireTick?: boolean;\r\n  public doImmediateRespawn?: boolean;\r\n  public doInsomnia?: boolean;\r\n  public doMobLoot?: boolean;\r\n  public doMobSpawning?: boolean;\r\n  public doTileDrops?: boolean;\r\n  public doWeatherCycle?: boolean;\r\n  public drowningDamage?: boolean;\r\n  public eduOffer?: number;\r\n  public educationFeaturesEnabled?: boolean;\r\n  public fallDamage?: boolean;\r\n  public fireDamage?: boolean;\r\n  public freezeDamage?: boolean;\r\n  public functionCommandLimit?: number;\r\n  public hasBeenLoadedInCreative?: boolean;\r\n  public hasLockedBehaviorPack?: boolean;\r\n  public hasLockedResourcePack?: boolean;\r\n  public immutableWorld?: boolean;\r\n  public isFromLockedTemplate?: boolean;\r\n  public isFromWorldTemplate?: boolean;\r\n  public isSingleUseWorld?: boolean;\r\n  public isWorldTemplateOptionLocked?: boolean;\r\n  public keepInventory?: boolean;\r\n  public lastOpenedWithVersion?: number[];\r\n  public lightningTime?: number;\r\n  public lightningLevel?: number;\r\n  public limitedWorldDepth?: number;\r\n  public limitedWorldWidth?: number;\r\n  public maxCommandChainLength?: number;\r\n  public mobGriefing?: boolean;\r\n  public naturalRegeneration?: boolean;\r\n  public permissionsLevel?: PlayerPermissionsLevel;\r\n  public playerPermissionsLevel?: PlayerPermissionsLevel;\r\n  public prid?: string;\r\n  public pvp?: boolean;\r\n  public rainLevel?: number;\r\n  public rainTime?: number;\r\n  public randomTickSpeed?: number;\r\n  public requiresCopiedPackRemovalCheck?: boolean;\r\n  public respawnBlocksExplode?: boolean;\r\n  public sendCommandFeedback?: boolean;\r\n  public serverChunkTickRange?: number;\r\n  public showBorderEffect?: boolean;\r\n  public showCoordinates?: boolean;\r\n  public showDeathMessages?: boolean;\r\n  public showTags?: boolean;\r\n  public spawnMobs?: boolean;\r\n  public spawnRadius?: number;\r\n  public startWithMapEnabled?: boolean;\r\n  public texturePacksRequired?: boolean;\r\n  public tntExplodes?: boolean;\r\n  public useMsaGamertagsOnly?: boolean;\r\n  public worldStartCount?: bigint;\r\n  public worldPolicies?: number;\r\n\r\n  isInErrorState?: boolean;\r\n  errorMessages?: IErrorMessage[];\r\n\r\n  context?: string;\r\n\r\n  // inert in this class, but added for compatibility w/ IWorldSettings\r\n  backupType?: BackupType;\r\n  useCustomSettings?: boolean;\r\n\r\n  createNbt() {\r\n    const nbt = new NbtBinary();\r\n\r\n    nbt.context = this.context;\r\n\r\n    return nbt;\r\n  }\r\n\r\n  private _pushError(message: string, contextIn?: string) {\r\n    this.isInErrorState = true;\r\n\r\n    if (this.errorMessages === undefined) {\r\n      this.errorMessages = [];\r\n    }\r\n\r\n    Log.error(message + (contextIn ? \" \" + contextIn : \"\"));\r\n\r\n    this.errorMessages.push({\r\n      message: message,\r\n      context: contextIn,\r\n    });\r\n  }\r\n\r\n  loadFromNbtBytes(bytes: Uint8Array, context?: string) {\r\n    this.isInErrorState = false;\r\n    this.errorMessages = undefined;\r\n\r\n    const tag = new NbtBinary();\r\n\r\n    tag.context = this.context;\r\n\r\n    const fileType = DataUtilities.getUnsignedInteger(bytes[0], bytes[1], bytes[2], bytes[3], true);\r\n    const restOfLength = DataUtilities.getUnsignedInteger(bytes[4], bytes[5], bytes[6], bytes[7], true);\r\n\r\n    if (fileType < 4 || fileType === 7 || fileType > 10) {\r\n      /* 10 has been recently observed? */\r\n      this._pushError(\"Unexpected world level dat type (\" + fileType + \")\", context);\r\n      return;\r\n    }\r\n\r\n    // some type 8 maps have restOfLength === bytes.length - 16 (?)\r\n    if (restOfLength !== bytes.length - 8 && restOfLength !== bytes.length - 16) {\r\n      this._pushError(\"Unexpected world level dat length.\", context);\r\n    }\r\n\r\n    tag.fromBinary(bytes, true, false, 8);\r\n\r\n    this.nbt = tag;\r\n\r\n    this.loadFromNbt(tag);\r\n\r\n    Utilities.appendErrors(this, tag, context);\r\n  }\r\n\r\n  ensureNbt() {\r\n    if (this.nbt !== undefined) {\r\n      return;\r\n    }\r\n\r\n    const tag = new NbtBinary();\r\n\r\n    tag.context = this.context;\r\n\r\n    tag.ensureSingleRoot();\r\n\r\n    this.nbt = tag;\r\n  }\r\n\r\n  getBytes() {\r\n    this.ensureNbt();\r\n\r\n    if (this.nbt !== undefined) {\r\n      const bytes = this.nbt.toBinary();\r\n\r\n      if (bytes !== undefined) {\r\n        const fullBytes = new Uint8Array(bytes.length + 8);\r\n\r\n        for (let i = 0; i < bytes.length; i++) {\r\n          fullBytes[i + 8] = bytes[i];\r\n        }\r\n\r\n        DataUtilities.writeUnsignedInteger(fullBytes, 0, 10, true);\r\n        DataUtilities.writeUnsignedInteger(fullBytes, 4, bytes.length, true);\r\n\r\n        return fullBytes;\r\n      }\r\n    }\r\n\r\n    Log.fail(\"Could not create MC level bytes for updating.\");\r\n\r\n    return undefined;\r\n  }\r\n\r\n  persist(): boolean {\r\n    this.ensureNbt();\r\n\r\n    if (this.nbt !== undefined) {\r\n      this._saveToNbt(this.nbt);\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  ensureDefaults() {\r\n    if (this.biomeOverride === undefined) {\r\n      this.biomeOverride = \"\";\r\n    }\r\n\r\n    if (this.centerMapsToOrigin === undefined) {\r\n      this.centerMapsToOrigin = false;\r\n    }\r\n\r\n    if (this.confirmedPlatformLockedContent === undefined) {\r\n      this.confirmedPlatformLockedContent = false;\r\n    }\r\n\r\n    if (this.savedWithToggledExperiments === undefined) {\r\n      this.savedWithToggledExperiments = false;\r\n    }\r\n\r\n    if (this.experimentsEverUsed === undefined) {\r\n      this.experimentsEverUsed = false;\r\n    }\r\n\r\n    if (this.difficulty === undefined) {\r\n      this.difficulty = Difficulty.easy;\r\n    }\r\n\r\n    if (this.forceGameType === undefined) {\r\n      this.forceGameType = false;\r\n    }\r\n\r\n    if (this.experimentsEverUsed === undefined) {\r\n      this.experimentsEverUsed = false;\r\n    }\r\n\r\n    if (this.savedWithToggledExperiments === undefined) {\r\n      this.savedWithToggledExperiments = false;\r\n    }\r\n\r\n    if (this.isCreatedInEditor === undefined) {\r\n      this.isCreatedInEditor = false;\r\n    }\r\n\r\n    if (this.isExportedFromEditor === undefined) {\r\n      this.isExportedFromEditor = false;\r\n    }\r\n\r\n    if (this.flatWorldLayers === undefined) {\r\n      this.flatWorldLayers = {\r\n        biome_id: 1,\r\n        block_layers: [\r\n          { block_name: \"minecraft:bedrock\", count: 1 },\r\n          { block_name: \"minecraft:dirt\", count: 2 },\r\n          { block_name: \"minecraft:grass\", count: 1 },\r\n        ],\r\n        encoding_version: 6,\r\n        structure_options: null,\r\n        world_version: \"version.post_1_18\",\r\n      };\r\n    }\r\n\r\n    if (this.forceGameType === undefined) {\r\n      this.forceGameType = false;\r\n    }\r\n\r\n    if (this.gameType === undefined) {\r\n      this.gameType = GameType.creative;\r\n    }\r\n\r\n    if (this.generator === undefined) {\r\n      this.generator = Generator.infinite;\r\n    }\r\n\r\n    if (this.inventoryVersion === undefined) {\r\n      this.inventoryVersion = \"1.20.0\";\r\n    }\r\n\r\n    if (this.lanBroadcast === undefined) {\r\n      this.lanBroadcast = true;\r\n    }\r\n\r\n    if (this.lanBroadcastIntent === undefined) {\r\n      this.lanBroadcastIntent = true;\r\n    }\r\n\r\n    if (this.lastPlayed === undefined) {\r\n      const newDate = new Date();\r\n\r\n      this.lastPlayed = BigInt(Math.floor(newDate.getTime() / 1000));\r\n    }\r\n\r\n    if (this.limitedWorldOriginX === undefined) {\r\n      this.limitedWorldOriginX = 0;\r\n    }\r\n\r\n    if (this.limitedWorldOriginY === undefined) {\r\n      this.limitedWorldOriginY = TOPMOST_BLOCK;\r\n    }\r\n\r\n    if (this.limitedWorldOriginZ === undefined) {\r\n      this.limitedWorldOriginZ = 0;\r\n    }\r\n\r\n    if (this.minimumCompatibleClientVersion === undefined) {\r\n      this.minimumCompatibleClientVersion = [1, 20, 0, 0, 0];\r\n    }\r\n\r\n    if (this.multiplayerGame === undefined) {\r\n      this.multiplayerGame = true;\r\n    }\r\n\r\n    if (this.multiplayerGameIntent === undefined) {\r\n      this.multiplayerGameIntent = true;\r\n    }\r\n\r\n    if (this.netherScale === undefined) {\r\n      this.netherScale = 8;\r\n    }\r\n\r\n    if (this.networkVersion === undefined) {\r\n      this.networkVersion = 588;\r\n    }\r\n\r\n    if (this.platform === undefined) {\r\n      this.platform = 2;\r\n    }\r\n\r\n    if (this.platformBroadcastIntent === undefined) {\r\n      this.platformBroadcastIntent = 2;\r\n    }\r\n\r\n    if (this.randomSeed === undefined) {\r\n      this.randomSeed = \"3025905974105939481\";\r\n    }\r\n\r\n    if (this.spawnV1Villagers === undefined) {\r\n      this.spawnV1Villagers = false;\r\n    }\r\n\r\n    if (this.spawnX === undefined) {\r\n      this.spawnX = 0;\r\n    }\r\n\r\n    if (this.spawnY === undefined) {\r\n      this.spawnY = TOPMOST_BLOCK;\r\n    }\r\n\r\n    if (this.spawnZ === undefined) {\r\n      this.spawnZ = 0;\r\n    }\r\n\r\n    if (this.storageVersion === undefined) {\r\n      this.storageVersion = 10;\r\n    }\r\n\r\n    if (this.time === undefined) {\r\n      this.time = BigInt(1);\r\n    }\r\n\r\n    if (this.worldVersion === undefined) {\r\n      this.worldVersion = 1;\r\n    }\r\n\r\n    if (this.xblBroadcastIntent === undefined) {\r\n      this.xblBroadcastIntent = 2;\r\n    }\r\n\r\n    if (this.baseGameVersion === undefined) {\r\n      this.baseGameVersion = \"*\";\r\n    }\r\n\r\n    if (this.bonusChestEnabled === undefined) {\r\n      this.bonusChestEnabled = false;\r\n    }\r\n\r\n    if (this.bonusChestSpawned === undefined) {\r\n      this.bonusChestSpawned = false;\r\n    }\r\n\r\n    if (this.commandBlockOutput === undefined) {\r\n      this.commandBlockOutput = true;\r\n    }\r\n\r\n    if (this.commandBlocksEnabled === undefined) {\r\n      this.commandBlocksEnabled = true;\r\n    }\r\n\r\n    if (this.commandsEnabled === undefined) {\r\n      this.commandsEnabled = true;\r\n    }\r\n\r\n    if (this.cheatsEnabled === undefined) {\r\n      this.cheatsEnabled = true;\r\n    }\r\n\r\n    if (this.currentTick === undefined) {\r\n      this.currentTick = BigInt(1);\r\n    }\r\n\r\n    if (this.doDaylightCycle === undefined) {\r\n      this.doDaylightCycle = true;\r\n    }\r\n\r\n    if (this.daylightCycle === undefined) {\r\n      this.daylightCycle = 0;\r\n    }\r\n\r\n    if (this.doEntityDrops === undefined) {\r\n      this.doEntityDrops = true;\r\n    }\r\n\r\n    if (this.doFireTick === undefined) {\r\n      this.doFireTick = true;\r\n    }\r\n\r\n    if (this.doImmediateRespawn === undefined) {\r\n      this.doImmediateRespawn = false;\r\n    }\r\n\r\n    if (this.doInsomnia === undefined) {\r\n      this.doInsomnia = true;\r\n    }\r\n\r\n    if (this.doMobLoot === undefined) {\r\n      this.doMobLoot = true;\r\n    }\r\n\r\n    if (this.doMobSpawning === undefined) {\r\n      this.doMobSpawning = true;\r\n    }\r\n\r\n    if (this.doTileDrops === undefined) {\r\n      this.doTileDrops = true;\r\n    }\r\n\r\n    if (this.doWeatherCycle === undefined) {\r\n      this.doWeatherCycle = true;\r\n    }\r\n\r\n    if (this.drowningDamage === undefined) {\r\n      this.drowningDamage = true;\r\n    }\r\n\r\n    if (this.eduOffer === undefined) {\r\n      this.eduOffer = 0;\r\n    }\r\n\r\n    if (this.educationFeaturesEnabled === undefined) {\r\n      this.educationFeaturesEnabled = false;\r\n    }\r\n\r\n    if (this.fallDamage === undefined) {\r\n      this.fallDamage = true;\r\n    }\r\n\r\n    if (this.fireDamage === undefined) {\r\n      this.fireDamage = true;\r\n    }\r\n\r\n    if (this.freezeDamage === undefined) {\r\n      this.freezeDamage = true;\r\n    }\r\n\r\n    if (this.functionCommandLimit === undefined) {\r\n      this.functionCommandLimit = 10000;\r\n    }\r\n\r\n    if (this.hasBeenLoadedInCreative === undefined) {\r\n      this.hasBeenLoadedInCreative = true;\r\n    }\r\n\r\n    if (this.hasLockedBehaviorPack === undefined) {\r\n      this.hasLockedBehaviorPack = false;\r\n    }\r\n\r\n    if (this.hasLockedResourcePack === undefined) {\r\n      this.hasLockedResourcePack = false;\r\n    }\r\n\r\n    if (this.immutableWorld === undefined) {\r\n      this.immutableWorld = false;\r\n    }\r\n\r\n    if (this.isFromLockedTemplate === undefined) {\r\n      this.isFromLockedTemplate = false;\r\n    }\r\n    if (this.isRandomSeedAllowed === undefined) {\r\n      this.isRandomSeedAllowed = false;\r\n    }\r\n\r\n    if (this.isFromWorldTemplate === undefined) {\r\n      this.isFromWorldTemplate = false;\r\n    }\r\n\r\n    if (this.isSingleUseWorld === undefined) {\r\n      this.isSingleUseWorld = false;\r\n    }\r\n\r\n    if (this.isWorldTemplateOptionLocked === undefined) {\r\n      this.isWorldTemplateOptionLocked = false;\r\n    }\r\n\r\n    if (this.keepInventory === undefined) {\r\n      this.keepInventory = false;\r\n    }\r\n\r\n    if (this.lastOpenedWithVersion === undefined) {\r\n      this.lastOpenedWithVersion = [1, 20, 0, 0, 1];\r\n    }\r\n\r\n    if (this.lightningTime === undefined) {\r\n      this.lightningTime = 124600;\r\n    }\r\n    if (this.lightningLevel === undefined) {\r\n      this.lightningLevel = 0;\r\n    }\r\n\r\n    if (this.limitedWorldDepth === undefined) {\r\n      this.limitedWorldDepth = 16;\r\n    }\r\n\r\n    if (this.limitedWorldWidth === undefined) {\r\n      this.limitedWorldWidth = 16;\r\n    }\r\n\r\n    if (this.maxCommandChainLength === undefined) {\r\n      this.maxCommandChainLength = 65535;\r\n    }\r\n\r\n    if (this.mobGriefing === undefined) {\r\n      this.mobGriefing = true;\r\n    }\r\n\r\n    if (this.naturalRegeneration === undefined) {\r\n      this.naturalRegeneration = true;\r\n    }\r\n\r\n    if (this.permissionsLevel === undefined) {\r\n      this.permissionsLevel = PlayerPermissionsLevel.visitor;\r\n    }\r\n\r\n    if (this.playerPermissionsLevel === undefined) {\r\n      this.playerPermissionsLevel = PlayerPermissionsLevel.member;\r\n    }\r\n\r\n    if (this.prid === undefined) {\r\n      this.prid = \"\";\r\n    }\r\n\r\n    if (this.pvp === undefined) {\r\n      this.pvp = true;\r\n    }\r\n\r\n    if (this.rainLevel === undefined) {\r\n      this.rainLevel = 0;\r\n    }\r\n\r\n    if (this.rainTime === undefined) {\r\n      this.rainTime = 94841;\r\n    }\r\n\r\n    if (this.randomTickSpeed === undefined) {\r\n      this.randomTickSpeed = 1;\r\n    }\r\n\r\n    if (this.requiresCopiedPackRemovalCheck === undefined) {\r\n      this.requiresCopiedPackRemovalCheck = false;\r\n    }\r\n\r\n    if (this.respawnBlocksExplode === undefined) {\r\n      this.respawnBlocksExplode = true;\r\n    }\r\n\r\n    if (this.sendCommandFeedback === undefined) {\r\n      this.sendCommandFeedback = true;\r\n    }\r\n\r\n    if (this.serverChunkTickRange === undefined) {\r\n      this.serverChunkTickRange = 4;\r\n    }\r\n\r\n    if (this.showBorderEffect === undefined) {\r\n      this.showBorderEffect = true;\r\n    }\r\n\r\n    if (this.showCoordinates === undefined) {\r\n      this.showCoordinates = false;\r\n    }\r\n\r\n    if (this.showDeathMessages === undefined) {\r\n      this.showDeathMessages = true;\r\n    }\r\n\r\n    if (this.showTags === undefined) {\r\n      this.showTags = true;\r\n    }\r\n\r\n    if (this.spawnMobs === undefined) {\r\n      this.spawnMobs = true;\r\n    }\r\n\r\n    if (this.spawnRadius === undefined) {\r\n      this.spawnRadius = 5;\r\n    }\r\n\r\n    if (this.startWithMapEnabled === undefined) {\r\n      this.startWithMapEnabled = false;\r\n    }\r\n\r\n    if (this.texturePacksRequired === undefined) {\r\n      this.texturePacksRequired = false;\r\n    }\r\n\r\n    if (this.tntExplodes === undefined) {\r\n      this.tntExplodes = true;\r\n    }\r\n    if (this.useMsaGamertagsOnly === undefined) {\r\n      this.useMsaGamertagsOnly = false;\r\n    }\r\n\r\n    if (this.worldStartCount === undefined) {\r\n      this.worldStartCount = BigInt(4294967294);\r\n    }\r\n\r\n    if (this.attackMobs === undefined) {\r\n      this.attackMobs = true;\r\n    }\r\n\r\n    if (this.attackPlayers === undefined) {\r\n      this.attackPlayers = true;\r\n    }\r\n\r\n    if (this.build === undefined) {\r\n      this.build = true;\r\n    }\r\n\r\n    if (this.doorsAndSwitches === undefined) {\r\n      this.doorsAndSwitches = true;\r\n    }\r\n\r\n    if (this.flySpeed === undefined) {\r\n      this.flySpeed = 0.5;\r\n    }\r\n\r\n    if (this.flying === undefined) {\r\n      this.flying = false;\r\n    }\r\n\r\n    if (this.instaBuild === undefined) {\r\n      this.instaBuild = false;\r\n    }\r\n\r\n    if (this.invulnerable === undefined) {\r\n      this.invulnerable = false;\r\n    }\r\n\r\n    if (this.lightning === undefined) {\r\n      this.lightning = false;\r\n    }\r\n\r\n    if (this.mayFly === undefined) {\r\n      this.mayFly = false;\r\n    }\r\n\r\n    if (this.mine === undefined) {\r\n      this.mine = true;\r\n    }\r\n\r\n    if (this.op === undefined) {\r\n      this.op = false;\r\n    }\r\n\r\n    if (this.openContainers === undefined) {\r\n      this.openContainers = true;\r\n    }\r\n    if (this.teleport === undefined) {\r\n      this.teleport = true;\r\n    }\r\n\r\n    if (this.walkSpeed === undefined) {\r\n      this.walkSpeed = 0.1;\r\n    }\r\n  }\r\n\r\n  applyFromWorldSettings(settings: IWorldSettings) {\r\n    if (settings.generator !== undefined) {\r\n      this.generator = settings.generator;\r\n    }\r\n\r\n    if (settings.gameType !== undefined) {\r\n      this.gameType = settings.gameType;\r\n    }\r\n\r\n    if (settings.difficulty !== undefined) {\r\n      this.difficulty = settings.difficulty;\r\n    }\r\n\r\n    if (settings.commandsEnabled !== undefined) {\r\n      this.commandsEnabled = settings.commandsEnabled;\r\n    }\r\n\r\n    if (settings.cheatsEnabled !== undefined) {\r\n      this.cheatsEnabled = settings.cheatsEnabled;\r\n    }\r\n\r\n    if (settings.playerPermissionLevel !== undefined) {\r\n      this.playerPermissionsLevel = settings.playerPermissionLevel;\r\n    }\r\n\r\n    if (settings.permissionLevel !== undefined) {\r\n      this.permissionsLevel = settings.permissionLevel;\r\n    }\r\n\r\n    if (settings.randomSeed !== undefined) {\r\n      this.randomSeed = settings.randomSeed;\r\n    }\r\n\r\n    if (settings.name !== undefined) {\r\n      this.levelName = settings.name;\r\n    }\r\n\r\n    if (settings.lastPlayed !== undefined) {\r\n      this.lastPlayed = BigInt(settings.lastPlayed);\r\n    }\r\n\r\n    if (settings.isEditor) {\r\n      this.isCreatedInEditor = true;\r\n      this.editorWorldType = 1;\r\n    } else if (settings.isEditor === false) {\r\n      this.isCreatedInEditor = false;\r\n      this.editorWorldType = undefined;\r\n    }\r\n\r\n    if (settings.betaApisExperiment === true) {\r\n      this.betaApisExperiment = settings.betaApisExperiment;\r\n    } else if (settings.betaApisExperiment === false) {\r\n      this.betaApisExperiment = false;\r\n    }\r\n\r\n    if (settings.deferredTechnicalPreviewExperiment === true) {\r\n      this.deferredTechnicalPreviewExperiment = settings.deferredTechnicalPreviewExperiment;\r\n    } else if (settings.deferredTechnicalPreviewExperiment === false) {\r\n      this.deferredTechnicalPreviewExperiment = false;\r\n    }\r\n  }\r\n\r\n  _saveToNbt(binary: NbtBinary) {\r\n    const root = binary.ensureSingleRoot();\r\n\r\n    if (root == null) {\r\n      return;\r\n    }\r\n\r\n    if (this.biomeOverride !== undefined) {\r\n      root.ensureTag(\"BiomeOverride\", NbtTagType.string).value = this.biomeOverride;\r\n    }\r\n\r\n    if (this.centerMapsToOrigin !== undefined) {\r\n      root.ensureTag(\"CenterMapsToOrigin\", NbtTagType.byte).value = this.centerMapsToOrigin;\r\n    }\r\n\r\n    if (this.confirmedPlatformLockedContent !== undefined) {\r\n      root.ensureTag(\"ConfirmedPlatformLockedContent\", NbtTagType.byte).value = this.confirmedPlatformLockedContent;\r\n    }\r\n\r\n    if (this.difficulty !== undefined) {\r\n      root.ensureTag(\"Difficulty\", NbtTagType.int).value = this.difficulty;\r\n    }\r\n\r\n    if (this.flatWorldLayers !== undefined) {\r\n      root.ensureTag(\"FlatWorldLayers\", NbtTagType.string).value = JSON.stringify(this.flatWorldLayers).trim();\r\n    }\r\n\r\n    if (this.forceGameType !== undefined) {\r\n      root.ensureTag(\"ForceGameType\", NbtTagType.byte).value = this.forceGameType;\r\n    }\r\n\r\n    if (this.gameType !== undefined) {\r\n      root.ensureTag(\"GameType\", NbtTagType.int).value = this.gameType;\r\n    }\r\n\r\n    if (this.generator !== undefined) {\r\n      root.ensureTag(\"Generator\", NbtTagType.int).value = this.generator;\r\n    }\r\n\r\n    if (this.inventoryVersion !== undefined) {\r\n      root.ensureTag(\"InventoryVersion\", NbtTagType.string).value = this.inventoryVersion;\r\n    }\r\n\r\n    if (this.lanBroadcast !== undefined) {\r\n      root.ensureTag(\"LANBroadcast\", NbtTagType.byte).value = this.lanBroadcast;\r\n    }\r\n\r\n    if (this.lanBroadcastIntent !== undefined) {\r\n      root.ensureTag(\"LANBroadcastIntent\", NbtTagType.byte).value = this.lanBroadcastIntent;\r\n    }\r\n\r\n    if (this.lastPlayed !== undefined) {\r\n      root.ensureTag(\"LastPlayed\", NbtTagType.long).value = this.lastPlayed;\r\n    }\r\n\r\n    if (this.levelName !== undefined) {\r\n      root.ensureTag(\"LevelName\", NbtTagType.string).value = this.levelName;\r\n    }\r\n\r\n    if (this.limitedWorldOriginX !== undefined) {\r\n      root.ensureTag(\"LimitedWorldOriginX\", NbtTagType.int).value = this.limitedWorldOriginX;\r\n    }\r\n\r\n    if (this.limitedWorldOriginY !== undefined) {\r\n      root.ensureTag(\"LimitedWorldOriginY\", NbtTagType.int).value = this.limitedWorldOriginY;\r\n    }\r\n\r\n    if (this.limitedWorldOriginZ !== undefined) {\r\n      root.ensureTag(\"LimitedWorldOriginZ\", NbtTagType.int).value = this.limitedWorldOriginZ;\r\n    }\r\n\r\n    if (this.minimumCompatibleClientVersion && this.minimumCompatibleClientVersion.length > 0) {\r\n      const tag = root.ensureTag(\"MinimumCompatibleClientVersion\", NbtTagType.list);\r\n      tag.setListFromArray(this.minimumCompatibleClientVersion);\r\n    }\r\n\r\n    if (this.multiplayerGame !== undefined) {\r\n      root.ensureTag(\"MultiplayerGame\", NbtTagType.byte).value = this.multiplayerGame;\r\n    }\r\n\r\n    if (this.multiplayerGameIntent !== undefined) {\r\n      root.ensureTag(\"MultiplayerGameIntent\", NbtTagType.byte).value = this.multiplayerGameIntent;\r\n    }\r\n\r\n    if (this.netherScale !== undefined) {\r\n      root.ensureTag(\"NetherScale\", NbtTagType.int).value = this.netherScale;\r\n    }\r\n\r\n    if (this.networkVersion !== undefined) {\r\n      root.ensureTag(\"NetworkVersion\", NbtTagType.int).value = this.networkVersion;\r\n    }\r\n\r\n    if (this.platform !== undefined) {\r\n      root.ensureTag(\"Platform\", NbtTagType.int).value = this.platform;\r\n    }\r\n\r\n    if (this.platformBroadcastIntent !== undefined) {\r\n      root.ensureTag(\"PlatformBroadcastIntent\", NbtTagType.int).value = this.platformBroadcastIntent;\r\n    }\r\n\r\n    if (this.randomSeed !== undefined) {\r\n      try {\r\n        const seedBig = BigInt(this.randomSeed);\r\n        root.ensureTag(\"RandomSeed\", NbtTagType.long).value = seedBig;\r\n      } catch (e) {\r\n        Log.debugAlert(\"Could not set seed: \" + this.randomSeed);\r\n      }\r\n    }\r\n\r\n    if (this.spawnV1Villagers !== undefined) {\r\n      root.ensureTag(\"SpawnV1Villagers\", NbtTagType.byte).value = this.spawnV1Villagers;\r\n    }\r\n\r\n    if (this.spawnX !== undefined) {\r\n      root.ensureTag(\"SpawnX\", NbtTagType.int).value = this.spawnX;\r\n    }\r\n\r\n    if (this.spawnY !== undefined) {\r\n      root.ensureTag(\"SpawnY\", NbtTagType.int).value = this.spawnY;\r\n    }\r\n\r\n    if (this.spawnZ !== undefined) {\r\n      root.ensureTag(\"SpawnZ\", NbtTagType.int).value = this.spawnZ;\r\n    }\r\n\r\n    if (this.storageVersion !== undefined) {\r\n      root.ensureTag(\"StorageVersion\", NbtTagType.int).value = this.storageVersion;\r\n    }\r\n\r\n    if (this.time !== undefined) {\r\n      root.ensureTag(\"Time\", NbtTagType.long).value = this.time;\r\n    }\r\n\r\n    if (this.worldVersion !== undefined) {\r\n      root.ensureTag(\"WorldVersion\", NbtTagType.int).value = this.worldVersion;\r\n    }\r\n\r\n    if (this.xblBroadcastIntent !== undefined) {\r\n      root.ensureTag(\"XBLBroadcastIntent\", NbtTagType.int).value = this.xblBroadcastIntent;\r\n    }\r\n    const abilitiesTag = root.ensureTag(\"abilities\", NbtTagType.compound);\r\n\r\n    if (this.attackMobs !== undefined) {\r\n      abilitiesTag.ensureTag(\"attackmobs\", NbtTagType.byte).value = this.attackMobs;\r\n    }\r\n\r\n    if (this.attackPlayers !== undefined) {\r\n      abilitiesTag.ensureTag(\"attackplayers\", NbtTagType.byte).value = this.attackPlayers;\r\n    }\r\n\r\n    if (this.build !== undefined) {\r\n      abilitiesTag.ensureTag(\"build\", NbtTagType.byte).value = this.build;\r\n    }\r\n\r\n    if (this.doorsAndSwitches !== undefined) {\r\n      abilitiesTag.ensureTag(\"doorsandswitches\", NbtTagType.byte).value = this.doorsAndSwitches;\r\n    }\r\n\r\n    if (this.flySpeed !== undefined) {\r\n      abilitiesTag.ensureTag(\"flySpeed\", NbtTagType.float).value = this.flySpeed;\r\n    }\r\n\r\n    if (this.flying !== undefined) {\r\n      abilitiesTag.ensureTag(\"flying\", NbtTagType.byte).value = this.flying;\r\n    }\r\n\r\n    if (this.instaBuild !== undefined) {\r\n      abilitiesTag.ensureTag(\"instabuild\", NbtTagType.byte).value = this.instaBuild;\r\n    }\r\n\r\n    if (this.invulnerable !== undefined) {\r\n      abilitiesTag.ensureTag(\"invulnerable\", NbtTagType.byte).value = this.invulnerable;\r\n    }\r\n\r\n    if (this.lightning !== undefined) {\r\n      abilitiesTag.ensureTag(\"lightning\", NbtTagType.byte).value = this.lightning;\r\n    }\r\n\r\n    if (this.mayFly !== undefined) {\r\n      abilitiesTag.ensureTag(\"mayfly\", NbtTagType.byte).value = this.mayFly;\r\n    }\r\n\r\n    if (this.mine !== undefined) {\r\n      abilitiesTag.ensureTag(\"mine\", NbtTagType.byte).value = this.mine;\r\n    }\r\n\r\n    if (this.op !== undefined) {\r\n      abilitiesTag.ensureTag(\"op\", NbtTagType.byte).value = this.op;\r\n    }\r\n\r\n    if (this.openContainers !== undefined) {\r\n      abilitiesTag.ensureTag(\"opencontainers\", NbtTagType.byte).value = this.openContainers;\r\n    }\r\n\r\n    if (this.teleport !== undefined) {\r\n      abilitiesTag.ensureTag(\"teleport\", NbtTagType.byte).value = this.teleport;\r\n    }\r\n\r\n    if (this.walkSpeed !== undefined) {\r\n      abilitiesTag.ensureTag(\"walkSpeed\", NbtTagType.float).value = this.walkSpeed;\r\n    }\r\n\r\n    if (this.baseGameVersion !== undefined) {\r\n      root.ensureTag(\"baseGameVersion\", NbtTagType.string).value = this.baseGameVersion;\r\n    }\r\n\r\n    if (this.bonusChestEnabled !== undefined) {\r\n      root.ensureTag(\"bonusChestEnabled\", NbtTagType.byte).value = this.bonusChestEnabled;\r\n    }\r\n\r\n    if (this.bonusChestSpawned !== undefined) {\r\n      root.ensureTag(\"bonusChestSpawned\", NbtTagType.byte).value = this.bonusChestSpawned;\r\n    }\r\n\r\n    if (this.cheatsEnabled !== undefined) {\r\n      root.ensureTag(\"cheatsEnabled\", NbtTagType.byte).value = this.cheatsEnabled;\r\n    }\r\n\r\n    if (this.commandBlockOutput !== undefined) {\r\n      root.ensureTag(\"commandblockoutput\", NbtTagType.byte).value = this.commandBlockOutput;\r\n    }\r\n\r\n    if (this.commandBlocksEnabled !== undefined) {\r\n      root.ensureTag(\"commandblocksenabled\", NbtTagType.byte).value = this.commandBlocksEnabled;\r\n    }\r\n\r\n    if (this.commandsEnabled !== undefined) {\r\n      root.ensureTag(\"commandsEnabled\", NbtTagType.byte).value = this.commandsEnabled;\r\n    }\r\n\r\n    if (this.currentTick !== undefined) {\r\n      root.ensureTag(\"currentTick\", NbtTagType.long).value = this.currentTick;\r\n    }\r\n\r\n    if (this.daylightCycle !== undefined) {\r\n      root.ensureTag(\"daylightCycle\", NbtTagType.int).value = this.daylightCycle;\r\n    }\r\n\r\n    if (this.doDaylightCycle !== undefined) {\r\n      root.ensureTag(\"dodaylightcycle\", NbtTagType.byte).value = this.doDaylightCycle;\r\n    }\r\n\r\n    if (this.doEntityDrops !== undefined) {\r\n      root.ensureTag(\"doentitydrops\", NbtTagType.byte).value = this.doEntityDrops;\r\n    }\r\n\r\n    if (this.doFireTick !== undefined) {\r\n      root.ensureTag(\"dofiretick\", NbtTagType.byte).value = this.doFireTick;\r\n    }\r\n\r\n    if (this.doImmediateRespawn !== undefined) {\r\n      root.ensureTag(\"doimmediaterespawn\", NbtTagType.byte).value = this.doImmediateRespawn;\r\n    }\r\n\r\n    if (this.doInsomnia !== undefined) {\r\n      root.ensureTag(\"doinsomnia\", NbtTagType.byte).value = this.doInsomnia;\r\n    }\r\n\r\n    if (this.doMobLoot !== undefined) {\r\n      root.ensureTag(\"domobloot\", NbtTagType.byte).value = this.doMobLoot;\r\n    }\r\n\r\n    if (this.doMobSpawning !== undefined) {\r\n      root.ensureTag(\"domobspawning\", NbtTagType.byte).value = this.doMobSpawning;\r\n    }\r\n\r\n    if (this.doTileDrops !== undefined) {\r\n      root.ensureTag(\"dotiledrops\", NbtTagType.byte).value = this.doTileDrops;\r\n    }\r\n\r\n    if (this.doWeatherCycle !== undefined) {\r\n      root.ensureTag(\"doweathercycle\", NbtTagType.byte).value = this.doWeatherCycle;\r\n    }\r\n\r\n    if (this.drowningDamage !== undefined) {\r\n      root.ensureTag(\"drowningdamage\", NbtTagType.byte).value = this.drowningDamage;\r\n    }\r\n\r\n    if (this.eduOffer !== undefined) {\r\n      root.ensureTag(\"eduOffer\", NbtTagType.int).value = this.eduOffer;\r\n    }\r\n\r\n    if (this.educationFeaturesEnabled !== undefined) {\r\n      root.ensureTag(\"educationFeaturesEnabled\", NbtTagType.byte).value = this.educationFeaturesEnabled;\r\n    }\r\n\r\n    if (\r\n      this.betaApisExperiment ||\r\n      this.dataDrivenItemsExperiment ||\r\n      this.deferredTechnicalPreviewExperiment ||\r\n      this.savedWithToggledExperiments ||\r\n      this.experimentsEverUsed\r\n    ) {\r\n      const experimentsTag = root.ensureTag(\"experiments\", NbtTagType.compound);\r\n\r\n      if (this.betaApisExperiment) {\r\n        experimentsTag.ensureTag(\"gametest\", NbtTagType.byte).value = 1;\r\n      } else {\r\n        experimentsTag.removeTag(\"gametest\");\r\n      }\r\n\r\n      if (this.dataDrivenItemsExperiment) {\r\n        experimentsTag.ensureTag(\"data_driven_items\", NbtTagType.byte).value = 1;\r\n      } else {\r\n        experimentsTag.removeTag(\"data_driven_items\");\r\n      }\r\n\r\n      if (this.deferredTechnicalPreviewExperiment) {\r\n        experimentsTag.ensureTag(\"deferred_technical_preview\", NbtTagType.byte).value = 1;\r\n      } else {\r\n        experimentsTag.removeTag(\"deferred_technical_preview\");\r\n      }\r\n\r\n      if (this.savedWithToggledExperiments !== undefined) {\r\n        experimentsTag.ensureTag(\"saved_with_toggled_experiments\", NbtTagType.byte).value =\r\n          this.savedWithToggledExperiments;\r\n      }\r\n\r\n      if (this.experimentsEverUsed !== undefined) {\r\n        experimentsTag.ensureTag(\"experiments_ever_used\", NbtTagType.byte).value = this.experimentsEverUsed;\r\n      }\r\n    }\r\n\r\n    if (this.fallDamage !== undefined) {\r\n      root.ensureTag(\"falldamage\", NbtTagType.byte).value = this.fallDamage;\r\n    }\r\n\r\n    if (this.fireDamage !== undefined) {\r\n      root.ensureTag(\"firedamage\", NbtTagType.byte).value = this.fireDamage;\r\n    }\r\n\r\n    if (this.freezeDamage !== undefined) {\r\n      root.ensureTag(\"freezedamage\", NbtTagType.byte).value = this.freezeDamage;\r\n    }\r\n\r\n    if (this.functionCommandLimit !== undefined) {\r\n      root.ensureTag(\"functioncommandlimit\", NbtTagType.int).value = this.functionCommandLimit;\r\n    }\r\n\r\n    if (this.hasBeenLoadedInCreative !== undefined) {\r\n      root.ensureTag(\"hasBeenLoadedInCreative\", NbtTagType.byte).value = this.hasBeenLoadedInCreative;\r\n    }\r\n\r\n    if (this.hasLockedBehaviorPack !== undefined) {\r\n      root.ensureTag(\"hasLockedBehaviorPack\", NbtTagType.byte).value = this.hasLockedBehaviorPack;\r\n    }\r\n\r\n    if (this.hasLockedResourcePack !== undefined) {\r\n      root.ensureTag(\"hasLockedResourcePack\", NbtTagType.byte).value = this.hasLockedResourcePack;\r\n    }\r\n\r\n    if (this.immutableWorld !== undefined) {\r\n      root.ensureTag(\"immutableWorld\", NbtTagType.byte).value = this.immutableWorld;\r\n    }\r\n\r\n    if (this.isCreatedInEditor !== undefined) {\r\n      root.ensureTag(\"isCreatedInEditor\", NbtTagType.byte).value = this.isCreatedInEditor;\r\n    }\r\n\r\n    if (this.editorWorldType !== undefined) {\r\n      root.ensureTag(\"editorWorldType\", NbtTagType.int).value = this.editorWorldType;\r\n    }\r\n\r\n    if (this.isExportedFromEditor !== undefined) {\r\n      root.ensureTag(\"isExportedFromEditor\", NbtTagType.byte).value = this.isExportedFromEditor;\r\n    }\r\n\r\n    if (this.isFromLockedTemplate !== undefined) {\r\n      root.ensureTag(\"isFromLockedTemplate\", NbtTagType.byte).value = this.isFromLockedTemplate;\r\n    }\r\n\r\n    if (this.isFromWorldTemplate !== undefined) {\r\n      root.ensureTag(\"isFromWorldTemplate\", NbtTagType.byte).value = this.isFromWorldTemplate;\r\n    }\r\n\r\n    if (this.isRandomSeedAllowed !== undefined) {\r\n      root.ensureTag(\"isRandomSeedAllowed\", NbtTagType.byte).value = this.isRandomSeedAllowed;\r\n    }\r\n\r\n    if (this.isSingleUseWorld !== undefined) {\r\n      root.ensureTag(\"isSingleUseWorld\", NbtTagType.byte).value = this.isSingleUseWorld;\r\n    }\r\n\r\n    if (this.isWorldTemplateOptionLocked !== undefined) {\r\n      root.ensureTag(\"isWorldTemplateOptionLocked\", NbtTagType.byte).value = this.isWorldTemplateOptionLocked;\r\n    }\r\n\r\n    if (this.keepInventory !== undefined) {\r\n      root.ensureTag(\"keepinventory\", NbtTagType.byte).value = this.keepInventory;\r\n    }\r\n\r\n    if (this.lastOpenedWithVersion && this.lastOpenedWithVersion.length > 0) {\r\n      const tag = root.ensureTag(\"lastOpenedWithVersion\", NbtTagType.list);\r\n      tag.setListFromArray(this.lastOpenedWithVersion);\r\n    }\r\n\r\n    if (this.lightningLevel !== undefined) {\r\n      root.ensureTag(\"lightningLevel\", NbtTagType.float).value = this.lightningLevel;\r\n    }\r\n\r\n    if (this.lightningTime !== undefined) {\r\n      root.ensureTag(\"lightningTime\", NbtTagType.int).value = this.lightningTime;\r\n    }\r\n\r\n    if (this.limitedWorldDepth !== undefined) {\r\n      root.ensureTag(\"limitedWorldDepth\", NbtTagType.int).value = this.limitedWorldDepth;\r\n    }\r\n\r\n    if (this.limitedWorldWidth !== undefined) {\r\n      root.ensureTag(\"limitedWorldWidth\", NbtTagType.int).value = this.limitedWorldWidth;\r\n    }\r\n\r\n    if (this.maxCommandChainLength !== undefined) {\r\n      root.ensureTag(\"maxcommandchainlength\", NbtTagType.int).value = this.maxCommandChainLength;\r\n    }\r\n\r\n    if (this.mobGriefing !== undefined) {\r\n      root.ensureTag(\"mobgriefing\", NbtTagType.byte).value = this.mobGriefing;\r\n    }\r\n\r\n    if (this.naturalRegeneration !== undefined) {\r\n      root.ensureTag(\"naturalregeneration\", NbtTagType.byte).value = this.naturalRegeneration;\r\n    }\r\n\r\n    if (this.permissionsLevel !== undefined) {\r\n      root.ensureTag(\"permissionsLevel\", NbtTagType.int).value = this.permissionsLevel;\r\n    }\r\n\r\n    if (this.playerPermissionsLevel !== undefined) {\r\n      root.ensureTag(\"playerPermissionsLevel\", NbtTagType.int).value = this.playerPermissionsLevel;\r\n    }\r\n    if (this.prid !== undefined) {\r\n      root.ensureTag(\"prid\", NbtTagType.string).value = this.prid;\r\n    }\r\n\r\n    if (this.pvp !== undefined) {\r\n      root.ensureTag(\"pvp\", NbtTagType.byte).value = this.pvp;\r\n    }\r\n\r\n    if (this.rainLevel !== undefined) {\r\n      root.ensureTag(\"rainLevel\", NbtTagType.float).value = this.rainLevel;\r\n    }\r\n\r\n    if (this.rainTime !== undefined) {\r\n      root.ensureTag(\"rainTime\", NbtTagType.int).value = this.rainTime;\r\n    }\r\n\r\n    if (this.randomTickSpeed !== undefined) {\r\n      root.ensureTag(\"randomtickspeed\", NbtTagType.int).value = this.randomTickSpeed;\r\n    }\r\n\r\n    if (this.requiresCopiedPackRemovalCheck !== undefined) {\r\n      root.ensureTag(\"requiresCopiedPackRemovalCheck\", NbtTagType.byte).value = this.requiresCopiedPackRemovalCheck;\r\n    }\r\n\r\n    if (this.respawnBlocksExplode !== undefined) {\r\n      root.ensureTag(\"respawnblocksexplode\", NbtTagType.byte).value = this.respawnBlocksExplode;\r\n    }\r\n\r\n    if (this.sendCommandFeedback !== undefined) {\r\n      root.ensureTag(\"sendcommandfeedback\", NbtTagType.byte).value = this.sendCommandFeedback;\r\n    }\r\n\r\n    if (this.serverChunkTickRange !== undefined) {\r\n      root.ensureTag(\"serverChunkTickRange\", NbtTagType.int).value = this.serverChunkTickRange;\r\n    }\r\n\r\n    if (this.showBorderEffect !== undefined) {\r\n      root.ensureTag(\"showbordereffect\", NbtTagType.byte).value = this.showBorderEffect;\r\n    }\r\n\r\n    if (this.showCoordinates !== undefined) {\r\n      root.ensureTag(\"showcoordinates\", NbtTagType.byte).value = this.showCoordinates;\r\n    }\r\n\r\n    if (this.showDeathMessages !== undefined) {\r\n      root.ensureTag(\"showdeathmessages\", NbtTagType.byte).value = this.showDeathMessages;\r\n    }\r\n\r\n    if (this.showTags !== undefined) {\r\n      root.ensureTag(\"showtags\", NbtTagType.byte).value = this.showTags;\r\n    }\r\n\r\n    if (this.spawnMobs !== undefined) {\r\n      root.ensureTag(\"spawnMobs\", NbtTagType.byte).value = this.spawnMobs;\r\n    }\r\n\r\n    if (this.spawnRadius !== undefined) {\r\n      root.ensureTag(\"spawnradius\", NbtTagType.int).value = this.spawnRadius;\r\n    }\r\n\r\n    if (this.startWithMapEnabled !== undefined) {\r\n      root.ensureTag(\"startWithMapEnabled\", NbtTagType.byte).value = this.startWithMapEnabled;\r\n    }\r\n\r\n    if (this.texturePacksRequired !== undefined) {\r\n      root.ensureTag(\"texturePacksRequired\", NbtTagType.byte).value = this.texturePacksRequired;\r\n    }\r\n    if (this.tntExplodes !== undefined) {\r\n      root.ensureTag(\"tntexplodes\", NbtTagType.byte).value = this.tntExplodes;\r\n    }\r\n\r\n    if (this.useMsaGamertagsOnly !== undefined) {\r\n      root.ensureTag(\"useMsaGamertagsOnly\", NbtTagType.byte).value = this.useMsaGamertagsOnly;\r\n    }\r\n\r\n    if (this.worldStartCount !== undefined) {\r\n      root.ensureTag(\"worldStartCount\", NbtTagType.long).value = this.worldStartCount;\r\n    }\r\n\r\n    // const worldPoliciesTag = root.ensureTag(\"world_policies\", NbtTagType.compound);\r\n  }\r\n\r\n  loadFromNbt(binary: NbtBinary) {\r\n    this.nbt = binary;\r\n\r\n    if (binary.singleRoot == null) {\r\n      return;\r\n    }\r\n\r\n    const root = binary.singleRoot;\r\n\r\n    let tag = root.find(\"LevelName\");\r\n\r\n    if (tag !== null) {\r\n      this.levelName = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"SpawnX\");\r\n\r\n    if (tag !== null) {\r\n      this.spawnX = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"SpawnY\");\r\n\r\n    if (tag !== null) {\r\n      this.spawnY = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"SpawnZ\");\r\n\r\n    if (tag !== null) {\r\n      this.spawnZ = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"editorWorldType\");\r\n\r\n    if (tag !== null) {\r\n      this.editorWorldType = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"GameType\");\r\n\r\n    if (tag !== null) {\r\n      this.gameType = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Generator\");\r\n\r\n    if (tag !== null) {\r\n      this.generator = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"commandsEnabled\");\r\n\r\n    if (tag !== null) {\r\n      this.commandsEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"cheatsEnabled\");\r\n\r\n    if (tag !== null) {\r\n      this.cheatsEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"commandsblocksenabled\");\r\n\r\n    if (tag !== null) {\r\n      this.commandBlocksEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"experimentalgameplay\");\r\n\r\n    if (tag !== null) {\r\n      this.experimentalGameplay = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"BiomeOverride\");\r\n    if (tag !== null) {\r\n      this.biomeOverride = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"CenterMapsToOrigin\");\r\n    if (tag !== null) {\r\n      this.centerMapsToOrigin = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"ConfirmedPlatformLockedComponent\");\r\n    if (tag !== null) {\r\n      this.confirmedPlatformLockedContent = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Difficulty\");\r\n    if (tag !== null) {\r\n      this.difficulty = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"FlatWorldLayers\");\r\n    if (tag !== null) {\r\n      this.flatWorldLayers = tag.valueAsJSONObject;\r\n    }\r\n\r\n    tag = root.find(\"ForceGameType\");\r\n    if (tag !== null) {\r\n      this.forceGameType = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"InventoryVersion\");\r\n    if (tag !== null) {\r\n      this.inventoryVersion = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"LANBroadcast\");\r\n    if (tag !== null) {\r\n      this.lanBroadcast = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"LANBroadcastIntent\");\r\n    if (tag !== null) {\r\n      this.lanBroadcastIntent = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"LastPlayed\");\r\n    if (tag !== null) {\r\n      this.lastPlayed = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"LimitedWorldOriginX\");\r\n    if (tag !== null) {\r\n      this.limitedWorldOriginX = tag.valueAsInt;\r\n    }\r\n    tag = root.find(\"LimitedWorldOriginY\");\r\n    if (tag !== null) {\r\n      this.limitedWorldOriginY = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"LimitedWorldOriginZ\");\r\n    if (tag !== null) {\r\n      this.limitedWorldOriginZ = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"MinimumCompatibleClientVersion\");\r\n    if (tag !== null) {\r\n      this.minimumCompatibleClientVersion = tag.valueAsNumericArray;\r\n    }\r\n\r\n    tag = root.find(\"lastOpenedWithVersion\");\r\n    if (tag !== null) {\r\n      this.lastOpenedWithVersion = tag.valueAsNumericArray;\r\n    }\r\n\r\n    tag = root.find(\"MultiplayerGame\");\r\n    if (tag !== null) {\r\n      this.multiplayerGame = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"MultiplayerGameIntent\");\r\n    if (tag !== null) {\r\n      this.multiplayerGameIntent = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"NetherScale\");\r\n    if (tag !== null) {\r\n      this.netherScale = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"NetworkVersion\");\r\n    if (tag !== null) {\r\n      this.networkVersion = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Platform\");\r\n    if (tag !== null) {\r\n      this.platform = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"PlatformBroadcastIntent\");\r\n    if (tag !== null) {\r\n      this.platformBroadcastIntent = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"RandomSeed\");\r\n    if (tag !== null) {\r\n      this.randomSeed = tag.valueAsBigInt.toString();\r\n    }\r\n\r\n    tag = root.find(\"SpawnV1Villagers\");\r\n    if (tag !== null) {\r\n      this.spawnV1Villagers = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"StorageVersion\");\r\n    if (tag !== null) {\r\n      this.storageVersion = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Time\");\r\n    if (tag !== null) {\r\n      this.time = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"WorldVersion\");\r\n    if (tag !== null) {\r\n      this.worldVersion = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"XBLBroadcastIntent\");\r\n    if (tag !== null) {\r\n      this.xblBroadcastIntent = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"baseGameVersion\");\r\n    if (tag !== null) {\r\n      this.baseGameVersion = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"bonusChestEnabled\");\r\n    if (tag !== null) {\r\n      this.bonusChestEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"bonusChestSpawned\");\r\n    if (tag !== null) {\r\n      this.bonusChestSpawned = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"commandblockoutput\");\r\n    if (tag !== null) {\r\n      this.commandBlockOutput = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"MultiplayerGame\");\r\n    if (tag !== null) {\r\n      this.multiplayerGame = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"currentTick\");\r\n    if (tag !== null) {\r\n      this.currentTick = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"dodaylightcycle\");\r\n    if (tag !== null) {\r\n      this.doDaylightCycle = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"daylightCycle\");\r\n    if (tag !== null) {\r\n      this.daylightCycle = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"doentitydrops\");\r\n    if (tag !== null) {\r\n      this.doEntityDrops = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"dofiretick\");\r\n    if (tag !== null) {\r\n      this.doFireTick = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"doimmediaterespawn\");\r\n    if (tag !== null) {\r\n      this.doImmediateRespawn = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"doinsomnia\");\r\n    if (tag !== null) {\r\n      this.doInsomnia = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"domobloot\");\r\n    if (tag !== null) {\r\n      this.doMobLoot = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"domobspawning\");\r\n    if (tag !== null) {\r\n      this.doMobSpawning = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"dotiledrops\");\r\n    if (tag !== null) {\r\n      this.doTileDrops = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"doweathercycle\");\r\n    if (tag !== null) {\r\n      this.doWeatherCycle = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"drowningdamage\");\r\n    if (tag !== null) {\r\n      this.drowningDamage = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"eduOffer\");\r\n    if (tag !== null) {\r\n      this.eduOffer = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"educationFeaturesEnabled\");\r\n    if (tag !== null) {\r\n      this.educationFeaturesEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"falldamage\");\r\n    if (tag !== null) {\r\n      this.fallDamage = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"freezedamage\");\r\n    if (tag !== null) {\r\n      this.freezeDamage = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"functioncommandlimit\");\r\n    if (tag !== null) {\r\n      this.functionCommandLimit = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"hasBeenLoadedInCreative\");\r\n    if (tag !== null) {\r\n      this.hasBeenLoadedInCreative = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"hasLockedBehaviorPack\");\r\n    if (tag !== null) {\r\n      this.hasLockedBehaviorPack = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"hasLockedResourcePack\");\r\n    if (tag !== null) {\r\n      this.hasLockedResourcePack = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"immutableWorld\");\r\n    if (tag !== null) {\r\n      this.immutableWorld = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isFromLockedTemplate\");\r\n    if (tag !== null) {\r\n      this.isFromLockedTemplate = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isRandomSeedAllowed\");\r\n    if (tag !== null) {\r\n      this.isRandomSeedAllowed = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isCreatedInEditor\");\r\n    if (tag !== null) {\r\n      this.isCreatedInEditor = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isExportedFromEditor\");\r\n    if (tag !== null) {\r\n      this.isExportedFromEditor = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isFromWorldTemplate\");\r\n    if (tag !== null) {\r\n      this.isFromWorldTemplate = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isSingleUseWorld\");\r\n    if (tag !== null) {\r\n      this.isSingleUseWorld = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isWorldTemplateOptionLocked\");\r\n    if (tag !== null) {\r\n      this.isWorldTemplateOptionLocked = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"keepinventory\");\r\n    if (tag !== null) {\r\n      this.keepInventory = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"lightningTime\");\r\n    if (tag !== null) {\r\n      this.lightningTime = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"lightningLevel\");\r\n    if (tag !== null) {\r\n      this.lightningLevel = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = root.find(\"limitedWorldDepth\");\r\n    if (tag !== null) {\r\n      this.limitedWorldDepth = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"limitedWorldWidth\");\r\n    if (tag !== null) {\r\n      this.limitedWorldWidth = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"maxcommandchainlength\");\r\n    if (tag !== null) {\r\n      this.maxCommandChainLength = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"mobgriefing\");\r\n    if (tag !== null) {\r\n      this.mobGriefing = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"naturalregeneration\");\r\n    if (tag !== null) {\r\n      this.naturalRegeneration = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"permissionsLevel\");\r\n    if (tag !== null) {\r\n      this.permissionsLevel = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"playerPermissionsLevel\");\r\n    if (tag !== null) {\r\n      this.playerPermissionsLevel = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"prid\");\r\n    if (tag !== null) {\r\n      this.prid = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"pvp\");\r\n    if (tag !== null) {\r\n      this.pvp = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"rainLevel\");\r\n    if (tag !== null) {\r\n      this.rainLevel = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = root.find(\"rainTime\");\r\n    if (tag !== null) {\r\n      this.rainTime = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"randomtickspeed\");\r\n    if (tag !== null) {\r\n      this.randomTickSpeed = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"requiresCopiedPackRemovalCheck\");\r\n    if (tag !== null) {\r\n      this.requiresCopiedPackRemovalCheck = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"respawnblocksexplode\");\r\n    if (tag !== null) {\r\n      this.respawnBlocksExplode = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"sendcommandfeedback\");\r\n    if (tag !== null) {\r\n      this.sendCommandFeedback = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"serverChunkTickRange\");\r\n    if (tag !== null) {\r\n      this.serverChunkTickRange = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"showbordereffect\");\r\n    if (tag !== null) {\r\n      this.showBorderEffect = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"showcoordinates\");\r\n    if (tag !== null) {\r\n      this.showCoordinates = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"showdeathmessages\");\r\n    if (tag !== null) {\r\n      this.showDeathMessages = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"showtags\");\r\n    if (tag !== null) {\r\n      this.showTags = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"spawnMobs\");\r\n    if (tag !== null) {\r\n      this.spawnMobs = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"spawnradius\");\r\n    if (tag !== null) {\r\n      this.spawnRadius = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"startWithMapEnabled\");\r\n    if (tag !== null) {\r\n      this.startWithMapEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"texturePacksRequired\");\r\n    if (tag !== null) {\r\n      this.texturePacksRequired = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"tntexplodes\");\r\n    if (tag !== null) {\r\n      this.tntExplodes = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"useMsaGamertagsOnly\");\r\n    if (tag !== null) {\r\n      this.useMsaGamertagsOnly = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"worldStartCount\");\r\n    if (tag !== null) {\r\n      this.worldStartCount = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"abilities\");\r\n\r\n    if (tag !== null) {\r\n      const attackMobs = tag.find(\"attackmobs\");\r\n\r\n      if (attackMobs) {\r\n        this.attackMobs = attackMobs.valueAsBoolean;\r\n      }\r\n\r\n      const attackPlayers = tag.find(\"attackplayers\");\r\n\r\n      if (attackPlayers) {\r\n        this.attackPlayers = attackPlayers.valueAsBoolean;\r\n      }\r\n      const build = tag.find(\"build\");\r\n\r\n      if (build) {\r\n        this.build = build.valueAsBoolean;\r\n      }\r\n\r\n      const doorsAndSwitches = tag.find(\"doorsandswitches\");\r\n\r\n      if (doorsAndSwitches) {\r\n        this.doorsAndSwitches = doorsAndSwitches.valueAsBoolean;\r\n      }\r\n\r\n      const flySpeed = tag.find(\"flySpeed\");\r\n\r\n      if (flySpeed) {\r\n        this.flySpeed = flySpeed.valueAsFloat;\r\n      }\r\n\r\n      const flying = tag.find(\"flying\");\r\n\r\n      if (flying) {\r\n        this.flying = flying.valueAsBoolean;\r\n      }\r\n\r\n      const instabuild = tag.find(\"instabuild\");\r\n\r\n      if (instabuild) {\r\n        this.instaBuild = instabuild.valueAsBoolean;\r\n      }\r\n\r\n      const invulnerable = tag.find(\"invulnerable\");\r\n\r\n      if (invulnerable) {\r\n        this.invulnerable = invulnerable.valueAsBoolean;\r\n      }\r\n\r\n      const lightning = tag.find(\"lightning\");\r\n\r\n      if (lightning) {\r\n        this.lightning = lightning.valueAsBoolean;\r\n      }\r\n\r\n      const mayFly = tag.find(\"mayfly\");\r\n\r\n      if (mayFly) {\r\n        this.mayFly = mayFly.valueAsBoolean;\r\n      }\r\n\r\n      const mine = tag.find(\"mine\");\r\n\r\n      if (mine) {\r\n        this.mine = mine.valueAsBoolean;\r\n      }\r\n\r\n      const op = tag.find(\"op\");\r\n\r\n      if (op) {\r\n        this.op = op.valueAsBoolean;\r\n      }\r\n\r\n      const openContainers = tag.find(\"opencontainers\");\r\n\r\n      if (openContainers) {\r\n        this.openContainers = openContainers.valueAsBoolean;\r\n      }\r\n\r\n      const teleport = tag.find(\"teleport\");\r\n\r\n      if (teleport) {\r\n        this.teleport = teleport.valueAsBoolean;\r\n      }\r\n\r\n      const walkSpeed = tag.find(\"walkSpeed\");\r\n\r\n      if (walkSpeed) {\r\n        this.walkSpeed = walkSpeed.valueAsFloat;\r\n      }\r\n    }\r\n\r\n    tag = root.find(\"experiments\");\r\n    this.betaApisExperiment = undefined;\r\n    this.dataDrivenItemsExperiment = undefined;\r\n\r\n    if (tag !== null) {\r\n      const gameTest = tag.find(\"gametest\");\r\n\r\n      if (gameTest !== null && gameTest.valueAsInt === 1) {\r\n        this.betaApisExperiment = true;\r\n      } else {\r\n        this.betaApisExperiment = false;\r\n      }\r\n\r\n      const ddi = tag.find(\"data_driven_items\");\r\n\r\n      if (ddi !== null && ddi.valueAsInt === 1) {\r\n        this.dataDrivenItemsExperiment = true;\r\n      } else {\r\n        this.dataDrivenItemsExperiment = false;\r\n      }\r\n\r\n      const eeu = tag.find(\"experiments_ever_used\");\r\n\r\n      if (eeu !== null) {\r\n        this.experimentsEverUsed = eeu.valueAsBoolean;\r\n      } else {\r\n        this.experimentsEverUsed = false;\r\n      }\r\n\r\n      const swtoggex = tag.find(\"saved_with_toggled_experiments\");\r\n\r\n      if (swtoggex !== null) {\r\n        this.savedWithToggledExperiments = swtoggex.valueAsBoolean;\r\n      } else {\r\n        this.savedWithToggledExperiments = false;\r\n      }\r\n    }\r\n  }\r\n}\r\n", "\n/*! pako 2.0.4 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED          = 1;\n//const Z_HUFFMAN_ONLY      = 2;\n//const Z_RLE               = 3;\nconst Z_FIXED$1               = 4;\n//const Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY              = 0;\nconst Z_TEXT                = 1;\n//const Z_ASCII             = 1; // = Z_TEXT\nconst Z_UNKNOWN$1             = 2;\n\n/*============================================================================*/\n\n\nfunction zero$1(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES    = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH$1    = 3;\nconst MAX_MATCH$1    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES$1  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS$1      = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES$1       = LITERALS$1 + 1 + LENGTH_CODES$1;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES$1       = 30;\n/* number of distance codes */\n\nconst BL_CODES$1      = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE$1     = 2 * L_CODES$1 + 1;\n/* maximum heap size */\n\nconst MAX_BITS$1      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK   = 256;\n/* end of block literal code */\n\nconst REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits =   /* extra bits for each length code */\n  new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits =   /* extra bits for each distance code */\n  new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits =  /* extra bits for each bit length code */\n  new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n  new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree  = new Array((L_CODES$1 + 2) * 2);\nzero$1(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree  = new Array(D_CODES$1 * 2);\nzero$1(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code    = new Array(DIST_CODE_LEN);\nzero$1(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code  = new Array(MAX_MATCH$1 - MIN_MATCH$1 + 1);\nzero$1(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length   = new Array(LENGTH_CODES$1);\nzero$1(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist     = new Array(D_CODES$1);\nzero$1(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n  let res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nconst gen_bitlen = (s, desc) =>\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  const tree            = desc.dyn_tree;\n  const max_code        = desc.max_code;\n  const stree           = desc.stat_desc.static_tree;\n  const has_stree       = desc.stat_desc.has_stree;\n  const extra           = desc.stat_desc.extra_bits;\n  const base            = desc.stat_desc.extra_base;\n  const max_length      = desc.stat_desc.max_length;\n  let h;              /* heap index */\n  let n, m;           /* iterate over the tree elements */\n  let bits;           /* bit length */\n  let xbits;          /* extra bits */\n  let f;              /* frequency */\n  let overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS$1; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) =>\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  const next_code = new Array(MAX_BITS$1 + 1); /* next code value for each bit length */\n  let code = 0;              /* running code value */\n  let bits;                  /* bit index */\n  let n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS$1; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    let len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n};\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nconst tr_static_init = () => {\n\n  let n;        /* iterates over tree elements */\n  let bits;     /* bit counter */\n  let length;   /* length value */\n  let code;     /* code value */\n  let dist;     /* distance index */\n  const bl_count = new Array(MAX_BITS$1 + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES$1 - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES$1; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS$1; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES$1 + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES$1; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS$1 + 1, L_CODES$1, MAX_BITS$1);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES$1, MAX_BITS$1);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES$1, MAX_BL_BITS);\n\n  //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n  let n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES$1;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES$1;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES$1; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nconst copy_block = (s, buf, len, header) =>\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  s.pending_buf.set(s.window.subarray(buf, buf + len), s.pending);\n  s.pending += len;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n  const _n2 = n * 2;\n  const _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) =>\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  const v = s.heap[k];\n  let j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) =>\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  let dist;           /* distance of matched string */\n  let lc;             /* match length or unmatched char (if dist == 0) */\n  let lx = 0;         /* running index in l_buf */\n  let code;           /* the code to send */\n  let extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS$1 + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) =>\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  const tree     = desc.dyn_tree;\n  const stree    = desc.stat_desc.static_tree;\n  const has_stree = desc.stat_desc.has_stree;\n  const elems    = desc.stat_desc.elems;\n  let n, m;          /* iterate over heap elements */\n  let max_code = -1; /* largest code with non zero frequency */\n  let node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE$1;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) =>\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  let n;                     /* iterates over all tree elements */\n  let prevlen = -1;          /* last emitted length */\n  let curlen;                /* length of current code */\n\n  let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  let count = 0;             /* repeat count of the current code */\n  let max_count = 7;         /* max repeat count */\n  let min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) =>\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  let n;                     /* iterates over all tree elements */\n  let prevlen = -1;          /* last emitted length */\n  let curlen;                /* length of current code */\n\n  let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  let count = 0;             /* repeat count of the current code */\n  let max_count = 7;         /* max repeat count */\n  let min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n  let max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES$1 - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) =>\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  let rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  let black_mask = 0xf3ffc07f;\n  let n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS$1; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init$1 = (s) =>\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block$1 = (s, buf, stored_len, last) =>\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align$1 = (s) => {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nconst _tr_flush_block$1 = (s, buf, stored_len, last) =>\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  let opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  let max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN$1) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block$1(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED$1 || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally$1 = (s, dist, lc) =>\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //let out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n};\n\nvar _tr_init_1  = _tr_init$1;\nvar _tr_stored_block_1 = _tr_stored_block$1;\nvar _tr_flush_block_1  = _tr_flush_block$1;\nvar _tr_tally_1 = _tr_tally$1;\nvar _tr_align_1 = _tr_align$1;\n\nvar trees = {\n\t_tr_init: _tr_init_1,\n\t_tr_stored_block: _tr_stored_block_1,\n\t_tr_flush_block: _tr_flush_block_1,\n\t_tr_tally: _tr_tally_1,\n\t_tr_align: _tr_align_1\n};\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n  let s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n};\n\n\nvar adler32_1 = adler32;\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n  let c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n  const t = crcTable;\n  const end = pos + len;\n\n  crc ^= -1;\n\n  for (let i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n};\n\n\nvar crc32_1 = crc32;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar messages = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar constants$2 = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  Z_MEM_ERROR:       -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = trees;\n\n\n\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1,\n  Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$1,\n  Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1,\n  Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1,\n  Z_UNKNOWN,\n  Z_DEFLATED: Z_DEFLATED$2\n} = constants$2;\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS$1 = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS      = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES       = 30;\n/* number of distance codes */\nconst BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42;\nconst EXTRA_STATE = 69;\nconst NAME_STATE = 73;\nconst COMMENT_STATE = 91;\nconst HCRC_STATE = 103;\nconst BUSY_STATE = 113;\nconst FINISH_STATE = 666;\n\nconst BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE     = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n  strm.msg = messages[errorCode];\n  return errorCode;\n};\n\nconst rank = (f) => {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n  let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n  const s = strm.state;\n\n  //_tr_flush_bits(s);\n  let len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n};\n\n\nconst flush_block_only = (s, last) => {\n  _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n  s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n  //  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n  let len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32_1(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32_1(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n  let chain_length = s.max_chain_length;      /* max hash chain length */\n  let scan = s.strstart; /* current string */\n  let match;                       /* matched string */\n  let len;                           /* length of current match */\n  let best_len = s.prev_length;              /* best match length so far */\n  let nice_match = s.nice_match;             /* stop if match long enough */\n  const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  const _win = s.window; // shortcut\n\n  const wmask = s.w_mask;\n  const prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  const strend = s.strstart + MAX_MATCH;\n  let scan_end1  = _win[scan + best_len - 1];\n  let scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nconst fill_window = (s) => {\n\n  const _w_size = s.w_size;\n  let p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      s.window.set(s.window.subarray(_w_size, _w_size + _w_size), 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    const curr = s.strstart + s.lookahead;\n//    let init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nconst deflate_stored = (s, flush) => {\n\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  let max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH$2) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    const max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH$3) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n};\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n  let hash_head;        /* head of the hash chain */\n  let bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH$3) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n  let hash_head;          /* head of hash chain */\n  let bflush;              /* set if current block must be flushed */\n\n  let max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH$3) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n  let bflush;            /* set if current block must be flushed */\n  let prev;              /* byte at distance one to match */\n  let scan, strend;      /* scan goes up to strend for length of run */\n\n  const _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH$2) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH$3) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n  let bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH$2) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = _tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH$3) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nconst configuration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED$2; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new Uint16Array(HEAP_SIZE * 2);\n  this.dyn_dtree  = new Uint16Array((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new Uint16Array((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new Uint16Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new Uint16Array(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nconst deflateResetKeep = (strm) => {\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR$2);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  const s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH$2;\n  _tr_init(s);\n  return Z_OK$3;\n};\n\n\nconst deflateReset = (strm) => {\n\n  const ret = deflateResetKeep(strm);\n  if (ret === Z_OK$3) {\n    lm_init(strm.state);\n  }\n  return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR$2; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR$2; }\n  strm.state.gzhead = head;\n  return Z_OK$3;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR$2;\n  }\n  let wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION$1) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED$2 ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR$2);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  const s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new Uint8Array(s.w_size * 2);\n  s.head = new Uint16Array(s.hash_size);\n  s.prev = new Uint16Array(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n  return deflateInit2(strm, level, Z_DEFLATED$2, MAX_WBITS$1, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY$1);\n};\n\n\nconst deflate$2 = (strm, flush) => {\n\n  let beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK$1 || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;\n  }\n\n  const s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH$3)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR$1 : Z_STREAM_ERROR$2);\n  }\n\n  s.strm = strm; /* just in case */\n  const old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      let header = (Z_DEFLATED$2 + ((s.w_bits - 8) << 4)) << 8;\n      let level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK$3;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH$3) {\n    return err(strm, Z_BUF_ERROR$1);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR$1);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH$2 && s.status !== FINISH_STATE)) {\n    let bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK$3;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        _tr_align(s);\n      }\n      else if (flush !== Z_BLOCK$1) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        _tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH$1) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK$3;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH$3) { return Z_OK$3; }\n  if (s.wrap <= 0) { return Z_STREAM_END$3; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK$3 : Z_STREAM_END$3;\n};\n\n\nconst deflateEnd = (strm) => {\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR$2;\n  }\n\n  const status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR$2);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n  let dictLength = dictionary.length;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR$2;\n  }\n\n  const s = strm.state;\n  const wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR$2;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    let tmpDict = new Uint8Array(s.w_size);\n    tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  const avail = strm.avail_in;\n  const next = strm.next_in;\n  const input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    let str = s.strstart;\n    let n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK$3;\n};\n\n\nvar deflateInit_1 = deflateInit;\nvar deflateInit2_1 = deflateInit2;\nvar deflateReset_1 = deflateReset;\nvar deflateResetKeep_1 = deflateResetKeep;\nvar deflateSetHeader_1 = deflateSetHeader;\nvar deflate_2$1 = deflate$2;\nvar deflateEnd_1 = deflateEnd;\nvar deflateSetDictionary_1 = deflateSetDictionary;\nvar deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n\nvar deflate_1$2 = {\n\tdeflateInit: deflateInit_1,\n\tdeflateInit2: deflateInit2_1,\n\tdeflateReset: deflateReset_1,\n\tdeflateResetKeep: deflateResetKeep_1,\n\tdeflateSetHeader: deflateSetHeader_1,\n\tdeflate: deflate_2$1,\n\tdeflateEnd: deflateEnd_1,\n\tdeflateSetDictionary: deflateSetDictionary_1,\n\tdeflateInfo: deflateInfo\n};\n\nconst _has = (obj, key) => {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nvar assign = function (obj /*from1, from2, from3, ...*/) {\n  const sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    const source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (const p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// Join array of chunks to single array.\nvar flattenChunks = (chunks) => {\n  // calculate data length\n  let len = 0;\n\n  for (let i = 0, l = chunks.length; i < l; i++) {\n    len += chunks[i].length;\n  }\n\n  // join chunks\n  const result = new Uint8Array(len);\n\n  for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n    let chunk = chunks[i];\n    result.set(chunk, pos);\n    pos += chunk.length;\n  }\n\n  return result;\n};\n\nvar common = {\n\tassign: assign,\n\tflattenChunks: flattenChunks\n};\n\n// String encode/decode helpers\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nvar string2buf = (str) => {\n  if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n    return new TextEncoder().encode(str);\n  }\n\n  let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new Uint8Array(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n  // On Chrome, the arguments in a function call that are allowed is `65534`.\n  // If the length of the buffer is smaller than that, we can use this optimization,\n  // otherwise we will take a slower path.\n  if (len < 65534) {\n    if (buf.subarray && STR_APPLY_UIA_OK) {\n      return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n    }\n  }\n\n  let result = '';\n  for (let i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n};\n\n\n// convert array to string\nvar buf2string = (buf, max) => {\n  const len = max || buf.length;\n\n  if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n    return new TextDecoder().decode(buf.subarray(0, max));\n  }\n\n  let i, out;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  const utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    let c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    let c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nvar utf8border = (buf, max) => {\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  let pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\nvar strings = {\n\tstring2buf: string2buf,\n\tbuf2string: buf2string,\n\tutf8border: utf8border\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nvar zstream = ZStream;\n\nconst toString$1 = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2,\n  Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2,\n  Z_DEFAULT_COMPRESSION,\n  Z_DEFAULT_STRATEGY,\n  Z_DEFLATED: Z_DEFLATED$1\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n *   , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate$1(options) {\n  this.options = common.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED$1,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY\n  }, options || {});\n\n  let opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new zstream();\n  this.strm.avail_out = 0;\n\n  let status = deflate_1$2.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK$2) {\n    throw new Error(messages[status]);\n  }\n\n  if (opt.header) {\n    deflate_1$2.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    let dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = deflate_1$2.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK$2) {\n      throw new Error(messages[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate$1.prototype.push = function (data, flush_mode) {\n  const strm = this.strm;\n  const chunkSize = this.options.chunkSize;\n  let status, _flush_mode;\n\n  if (this.ended) { return false; }\n\n  if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n  else _flush_mode = flush_mode === true ? Z_FINISH$2 : Z_NO_FLUSH$1;\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString$1.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  for (;;) {\n    if (strm.avail_out === 0) {\n      strm.output = new Uint8Array(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    // Make sure avail_out > 6 to avoid repeating markers\n    if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n      this.onData(strm.output.subarray(0, strm.next_out));\n      strm.avail_out = 0;\n      continue;\n    }\n\n    status = deflate_1$2.deflate(strm, _flush_mode);\n\n    // Ended => flush and finish\n    if (status === Z_STREAM_END$2) {\n      if (strm.next_out > 0) {\n        this.onData(strm.output.subarray(0, strm.next_out));\n      }\n      status = deflate_1$2.deflateEnd(this.strm);\n      this.onEnd(status);\n      this.ended = true;\n      return status === Z_OK$2;\n    }\n\n    // Flush if out buffer full\n    if (strm.avail_out === 0) {\n      this.onData(strm.output);\n      continue;\n    }\n\n    // Flush if requested and has data\n    if (_flush_mode > 0 && strm.next_out > 0) {\n      this.onData(strm.output.subarray(0, strm.next_out));\n      strm.avail_out = 0;\n      continue;\n    }\n\n    if (strm.avail_in === 0) break;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate$1.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate$1.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK$2) {\n    this.result = common.flattenChunks(this.chunks);\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate$1(input, options) {\n  const deflator = new Deflate$1(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || messages[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw$1(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate$1(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip$1(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate$1(input, options);\n}\n\n\nvar Deflate_1$1 = Deflate$1;\nvar deflate_2 = deflate$1;\nvar deflateRaw_1$1 = deflateRaw$1;\nvar gzip_1$1 = gzip$1;\nvar constants$1 = constants$2;\n\nvar deflate_1$1 = {\n\tDeflate: Deflate_1$1,\n\tdeflate: deflate_2,\n\tdeflateRaw: deflateRaw_1$1,\n\tgzip: gzip_1$1,\n\tconstants: constants$1\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD$1 = 30;       /* got a data error -- remain here until reset */\nconst TYPE$1 = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nvar inffast = function inflate_fast(strm, start) {\n  let _in;                    /* local strm.input */\n  let last;                   /* have enough input while in < last */\n  let _out;                   /* local strm.output */\n  let beg;                    /* inflate()'s initial strm.output */\n  let end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  let dmax;                   /* maximum distance from zlib header */\n//#endif\n  let wsize;                  /* window size or zero if not using window */\n  let whave;                  /* valid bytes in the window */\n  let wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  let s_window;               /* allocated sliding window, if wsize != 0 */\n  let hold;                   /* local strm.hold */\n  let bits;                   /* local strm.bits */\n  let lcode;                  /* local strm.lencode */\n  let dcode;                  /* local strm.distcode */\n  let lmask;                  /* mask for first level of length codes */\n  let dmask;                  /* mask for first level of distance codes */\n  let here;                   /* retrieved table entry */\n  let op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  let len;                    /* match length, unused bytes */\n  let dist;                   /* match distance */\n  let from;                   /* where to copy match from */\n  let from_source;\n\n\n  let input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  const state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD$1;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD$1;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD$1;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE$1;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD$1;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS$1 = 852;\nconst ENOUGH_DISTS$1 = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES$1 = 0;\nconst LENS$1 = 1;\nconst DISTS$1 = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n  const bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  let len = 0;               /* a code's length in bits */\n  let sym = 0;               /* index of code symbols */\n  let min = 0, max = 0;          /* minimum and maximum code lengths */\n  let root = 0;              /* number of index bits for root table */\n  let curr = 0;              /* number of index bits for current table */\n  let drop = 0;              /* code bits to drop for sub-table */\n  let left = 0;                   /* number of prefix codes available */\n  let used = 0;              /* code entries in table used */\n  let huff = 0;              /* Huffman code */\n  let incr;              /* for incrementing code, index */\n  let fill;              /* index for replicating entries */\n  let low;               /* low bits for current root entry */\n  let mask;              /* mask for low root bits */\n  let next;             /* next available space in table */\n  let base = null;     /* base value table to use */\n  let base_index = 0;\n//  let shoextra;    /* extra bits table to use */\n  let end;                    /* use base and extra for symbol > end */\n  const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  let extra = null;\n  let extra_index = 0;\n\n  let here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES$1 || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES$1) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS$1) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n    (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n        (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n\n\nvar inftrees = inflate_table;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n\n\n\n\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES,\n  Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR,\n  Z_DEFLATED\n} = constants$2;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst    HEAD = 1;       /* i: waiting for magic header */\nconst    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nconst    TIME = 3;       /* i: waiting for modification time (gzip) */\nconst    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nconst    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nconst    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nconst    NAME = 7;       /* i: waiting for end of file name (gzip) */\nconst    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nconst    HCRC = 9;       /* i: waiting for header crc (gzip) */\nconst    DICTID = 10;    /* i: waiting for dictionary check value */\nconst    DICT = 11;      /* waiting for inflateSetDictionary() call */\nconst        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nconst        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nconst        STORED = 14;    /* i: waiting for stored size (length and complement) */\nconst        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nconst        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nconst        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nconst        LENLENS = 18;   /* i: waiting for code length code lengths */\nconst        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nconst            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nconst            LEN = 21;       /* i: waiting for length/lit/eob code */\nconst            LENEXT = 22;    /* i: waiting for length extra bits */\nconst            DIST = 23;      /* i: waiting for distance code */\nconst            DISTEXT = 24;   /* i: waiting for distance extra bits */\nconst            MATCH = 25;     /* o: waiting for output space to copy string */\nconst            LIT = 26;       /* o: waiting for output space to write literal */\nconst    CHECK = 27;     /* i: waiting for 32-bit check value */\nconst    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nconst    DONE = 29;      /* finished check, done -- remain here until reset */\nconst    BAD = 30;       /* got a data error -- remain here until reset */\nconst    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nconst    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n  this.work = new Uint16Array(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new Int32Array(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\n\nconst inflateResetKeep = (strm) => {\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n  const state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n  state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK$1;\n};\n\n\nconst inflateReset = (strm) => {\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n  const state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n  let wrap;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n  const state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR$1;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n  if (!strm) { return Z_STREAM_ERROR$1; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  const state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  const ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK$1) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n  return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    lenfix = new Int32Array(512);\n    distfix = new Int32Array(32);\n\n    /* literal/length table */\n    let sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inftrees(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inftrees(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n  let dist;\n  const state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new Uint8Array(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    state.window.set(src.subarray(end - state.wsize, end), 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      state.window.set(src.subarray(end - copy, end), 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n};\n\n\nconst inflate$2 = (strm, flush) => {\n\n  let state;\n  let input, output;          // input/output buffers\n  let next;                   /* next input INDEX */\n  let put;                    /* next output INDEX */\n  let have, left;             /* available input and output */\n  let hold;                   /* bit buffer */\n  let bits;                   /* bits in bit buffer */\n  let _in, _out;              /* save starting available input and output */\n  let copy;                   /* number of stored or match bytes to copy */\n  let from;                   /* where to copy match bytes from */\n  let from_source;\n  let here = 0;               /* current decoding table entry */\n  let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //let last;                   /* parent table entry */\n  let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  let len;                    /* length to copy for repeats, bits to drop */\n  let ret;                    /* return code */\n  const hbuf = new Uint8Array(4);    /* buffer for gzip header crc calculation */\n  let opts;\n\n  let n; // temporary variable for NEED_BITS\n\n  const order = /* permutation of code lengths */\n    new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR$1;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK$1;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32_1(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n\n        // !!! pako patch. Force use `options.windowBits` if passed.\n        // Required to always use max window size by default.\n        state.dmax = 1 << state.wbits;\n        //state.dmax = 1 << len;\n\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32_1(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32_1(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32_1(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32_1(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Uint8Array(state.head.extra_len);\n              }\n              state.head.extra.set(\n                input.subarray(\n                  next,\n                  // extra field is limited to 65536 bytes\n                  // - no need for additional size check\n                  next + copy\n                ),\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32_1(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32_1(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32_1(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT$1;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          output.set(input.subarray(next, next + copy), put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inftrees(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inftrees(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inftrees(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inffast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END$1;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR$1;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR$1;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR$1;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH$1))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR$1;\n  }\n\n  let state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK$1;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n  const state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK$1;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n  const dictLength = dictionary.length;\n\n  let state;\n  let dictid;\n  let ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR$1; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR$1;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32_1(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR$1;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR$1;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK$1;\n};\n\n\nvar inflateReset_1 = inflateReset;\nvar inflateReset2_1 = inflateReset2;\nvar inflateResetKeep_1 = inflateResetKeep;\nvar inflateInit_1 = inflateInit;\nvar inflateInit2_1 = inflateInit2;\nvar inflate_2$1 = inflate$2;\nvar inflateEnd_1 = inflateEnd;\nvar inflateGetHeader_1 = inflateGetHeader;\nvar inflateSetDictionary_1 = inflateSetDictionary;\nvar inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\n*/\n\nvar inflate_1$2 = {\n\tinflateReset: inflateReset_1,\n\tinflateReset2: inflateReset2_1,\n\tinflateResetKeep: inflateResetKeep_1,\n\tinflateInit: inflateInit_1,\n\tinflateInit2: inflateInit2_1,\n\tinflate: inflate_2$1,\n\tinflateEnd: inflateEnd_1,\n\tinflateGetHeader: inflateGetHeader_1,\n\tinflateSetDictionary: inflateSetDictionary_1,\n\tinflateInfo: inflateInfo\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nvar gzheader = GZheader;\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_NO_FLUSH, Z_FINISH,\n  Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate$1(options) {\n  this.options = common.assign({\n    chunkSize: 1024 * 64,\n    windowBits: 15,\n    to: ''\n  }, options || {});\n\n  const opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new zstream();\n  this.strm.avail_out = 0;\n\n  let status  = inflate_1$2.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(messages[status]);\n  }\n\n  this.header = new gzheader();\n\n  inflate_1$2.inflateGetHeader(this.strm, this.header);\n\n  // Setup dictionary\n  if (opt.dictionary) {\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      opt.dictionary = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      opt.dictionary = new Uint8Array(opt.dictionary);\n    }\n    if (opt.raw) { //In raw mode we need to set the dictionary early\n      status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);\n      if (status !== Z_OK) {\n        throw new Error(messages[status]);\n      }\n    }\n  }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n *   flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n *   `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate$1.prototype.push = function (data, flush_mode) {\n  const strm = this.strm;\n  const chunkSize = this.options.chunkSize;\n  const dictionary = this.options.dictionary;\n  let status, _flush_mode, last_avail_out;\n\n  if (this.ended) return false;\n\n  if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n  else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n  // Convert data if needed\n  if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  for (;;) {\n    if (strm.avail_out === 0) {\n      strm.output = new Uint8Array(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = inflate_1$2.inflate(strm, _flush_mode);\n\n    if (status === Z_NEED_DICT && dictionary) {\n      status = inflate_1$2.inflateSetDictionary(strm, dictionary);\n\n      if (status === Z_OK) {\n        status = inflate_1$2.inflate(strm, _flush_mode);\n      } else if (status === Z_DATA_ERROR) {\n        // Replace code with more verbose\n        status = Z_NEED_DICT;\n      }\n    }\n\n    // Skip snyc markers if more data follows and not raw mode\n    while (strm.avail_in > 0 &&\n           status === Z_STREAM_END &&\n           strm.state.wrap > 0 &&\n           data[strm.next_in] !== 0)\n    {\n      inflate_1$2.inflateReset(strm);\n      status = inflate_1$2.inflate(strm, _flush_mode);\n    }\n\n    switch (status) {\n      case Z_STREAM_ERROR:\n      case Z_DATA_ERROR:\n      case Z_NEED_DICT:\n      case Z_MEM_ERROR:\n        this.onEnd(status);\n        this.ended = true;\n        return false;\n    }\n\n    // Remember real `avail_out` value, because we may patch out buffer content\n    // to align utf8 strings boundaries.\n    last_avail_out = strm.avail_out;\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n        if (this.options.to === 'string') {\n\n          let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          let tail = strm.next_out - next_out_utf8;\n          let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail & realign counters\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n        }\n      }\n    }\n\n    // Must repeat iteration if out buffer is full\n    if (status === Z_OK && last_avail_out === 0) continue;\n\n    // Finalize if end of stream reached.\n    if (status === Z_STREAM_END) {\n      status = inflate_1$2.inflateEnd(this.strm);\n      this.onEnd(status);\n      this.ended = true;\n      return true;\n    }\n\n    if (strm.avail_in === 0) break;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n *   each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate$1.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate$1.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = common.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err) {\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate$1(input, options) {\n  const inflator = new Inflate$1(options);\n\n  inflator.push(input);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) throw inflator.msg || messages[inflator.err];\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw$1(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate$1(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nvar Inflate_1$1 = Inflate$1;\nvar inflate_2 = inflate$1;\nvar inflateRaw_1$1 = inflateRaw$1;\nvar ungzip$1 = inflate$1;\nvar constants = constants$2;\n\nvar inflate_1$1 = {\n\tInflate: Inflate_1$1,\n\tinflate: inflate_2,\n\tinflateRaw: inflateRaw_1$1,\n\tungzip: ungzip$1,\n\tconstants: constants\n};\n\nconst { Deflate, deflate, deflateRaw, gzip } = deflate_1$1;\n\nconst { Inflate, inflate, inflateRaw, ungzip } = inflate_1$1;\n\n\n\nvar Deflate_1 = Deflate;\nvar deflate_1 = deflate;\nvar deflateRaw_1 = deflateRaw;\nvar gzip_1 = gzip;\nvar Inflate_1 = Inflate;\nvar inflate_1 = inflate;\nvar inflateRaw_1 = inflateRaw;\nvar ungzip_1 = ungzip;\nvar constants_1 = constants$2;\n\nvar pako = {\n\tDeflate: Deflate_1,\n\tdeflate: deflate_1,\n\tdeflateRaw: deflateRaw_1,\n\tgzip: gzip_1,\n\tInflate: Inflate_1,\n\tinflate: inflate_1,\n\tinflateRaw: inflateRaw_1,\n\tungzip: ungzip_1,\n\tconstants: constants_1\n};\n\nexport { Deflate_1 as Deflate, Inflate_1 as Inflate, constants_1 as constants, pako as default, deflate_1 as deflate, deflateRaw_1 as deflateRaw, gzip_1 as gzip, inflate_1 as inflate, inflateRaw_1 as inflateRaw, ungzip_1 as ungzip };\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class Varint {\r\n  fileBytes: Uint8Array;\r\n  startIndex: number;\r\n  byteLength: number = 0;\r\n  value: number = 0;\r\n\r\n  public constructor(incomingBytes: Uint8Array, startingIndex: number) {\r\n    this.fileBytes = incomingBytes;\r\n    this.startIndex = startingIndex;\r\n\r\n    let i = 0;\r\n\r\n    while (this.fileBytes[this.startIndex + i] >= 128 && this.startIndex + i < incomingBytes.length) {\r\n      i++;\r\n    }\r\n\r\n    this.byteLength = i + 1;\r\n\r\n    this.value = this.fileBytes[this.startIndex + i];\r\n\r\n    while (i > 0) {\r\n      this.value *= 128;\r\n      this.value += this.fileBytes[this.startIndex + i - 1] - 128;\r\n      i--;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport Varint from \"./Varint\";\r\n\r\nexport default class LevelKeyValue {\r\n  fileBytes: Uint8Array | undefined;\r\n  startIndex: number | undefined;\r\n\r\n  unsharedKeyBytes: Uint8Array | undefined;\r\n  keyDelta: string | undefined;\r\n  value: Uint8Array | undefined;\r\n  sharedKey: string | undefined;\r\n  sharedByteLength: number | undefined;\r\n  length: number | undefined;\r\n  previousKey: LevelKeyValue | undefined;\r\n  keyCached: string | undefined;\r\n  fullBytesCached: Uint8Array | undefined;\r\n\r\n  public get unsharedKey(): string | undefined {\r\n    if (this.unsharedKeyBytes === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const dv = new DataView(\r\n      this.unsharedKeyBytes.buffer,\r\n      this.unsharedKeyBytes.byteOffset,\r\n      this.unsharedKeyBytes.byteLength\r\n    );\r\n\r\n    return Utilities.getAsciiString(dv, 0, dv.byteLength);\r\n  }\r\n\r\n  public get key(): string {\r\n    if (this.keyCached) {\r\n      return this.keyCached;\r\n    }\r\n\r\n    const previous = this.previousKey;\r\n    let key = \"\";\r\n\r\n    if (previous !== undefined) {\r\n      key = previous.key.substring(0, this.sharedByteLength);\r\n    }\r\n\r\n    const ukey = this.unsharedKey;\r\n\r\n    if (ukey !== undefined) {\r\n      key += ukey;\r\n    }\r\n\r\n    this.keyCached = key;\r\n\r\n    return key;\r\n  }\r\n\r\n  public get keyBytes(): Uint8Array | undefined {\r\n    if (!this.unsharedKeyBytes) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.fullBytesCached) {\r\n      return this.fullBytesCached;\r\n    }\r\n\r\n    if (this.sharedByteLength === undefined || this.sharedByteLength === 0) {\r\n      return this.unsharedKeyBytes;\r\n    }\r\n\r\n    if (this.previousKey === undefined) {\r\n      throw new Error(\"Unexpected shared key without a previous\");\r\n    }\r\n\r\n    const previousBytes = this.previousKey.keyBytes;\r\n\r\n    if (previousBytes === undefined) {\r\n      throw new Error(\"Unexpected shared key without previous bytes\");\r\n    }\r\n\r\n    const bytes = new Uint8Array(this.sharedByteLength + this.unsharedKeyBytes.length);\r\n    const i = this.sharedByteLength;\r\n\r\n    for (let j = 0; j < i; j++) {\r\n      bytes[j] = previousBytes[j];\r\n    }\r\n\r\n    for (let j = 0; j < this.unsharedKeyBytes.length; j++) {\r\n      bytes[j + i] = this.unsharedKeyBytes[j];\r\n    }\r\n\r\n    this.fullBytesCached = bytes;\r\n\r\n    return bytes;\r\n  }\r\n\r\n  public get isRestart() {\r\n    return this.sharedByteLength === 0;\r\n  }\r\n\r\n  /**\r\n   * Clears the value data to free up memory. Call this after the value has been\r\n   * processed and is no longer needed. The key information is preserved.\r\n   */\r\n  public clearValueData() {\r\n    this.value = undefined;\r\n    this.fileBytes = undefined;\r\n  }\r\n\r\n  /**\r\n   * Clears all data including key bytes to maximize memory savings.\r\n   * Only call this when the LevelKeyValue is no longer needed.\r\n   */\r\n  public clearAllData() {\r\n    this.value = undefined;\r\n    this.fileBytes = undefined;\r\n    this.unsharedKeyBytes = undefined;\r\n    this.fullBytesCached = undefined;\r\n    this.previousKey = undefined;\r\n  }\r\n\r\n  public loadFromLdb(incomingBytes: Uint8Array, startingIndex: number, prevKey: LevelKeyValue | undefined) {\r\n    this.fileBytes = incomingBytes;\r\n    this.startIndex = startingIndex;\r\n\r\n    let i = 0;\r\n\r\n    const sharedBytes = new Varint(this.fileBytes, this.startIndex);\r\n    this.sharedByteLength = sharedBytes.value;\r\n    i += sharedBytes.byteLength;\r\n\r\n    if (this.sharedByteLength > 0) {\r\n      this.previousKey = prevKey;\r\n    }\r\n\r\n    const unsharedBytes = new Varint(this.fileBytes, this.startIndex + i);\r\n    i += unsharedBytes.byteLength;\r\n\r\n    const valueLength = new Varint(this.fileBytes, this.startIndex + i);\r\n    i += valueLength.byteLength;\r\n\r\n    // mystery: why is unsharedKeyBytes 8 bytes longer than what we are expecting for keys?\r\n    this.unsharedKeyBytes = incomingBytes.subarray(startingIndex + i, startingIndex + i + unsharedBytes.value - 8);\r\n\r\n    /*const extraBytes = incomingBytes.subarray(\r\n      startingIndex + i + unsharedBytes.value - 8,\r\n      startingIndex + i + unsharedBytes.value\r\n    ); */\r\n\r\n    i += unsharedBytes.value;\r\n\r\n    this.value = incomingBytes.subarray(startingIndex + i, startingIndex + i + valueLength.value);\r\n    i += valueLength.value;\r\n\r\n    /*    this.restarts = [];\r\n\r\n    for (let j = 0; j < restartsToRead; j++) {\r\n      const offset = startingIndex + i + j * 4;\r\n      this.restarts.push(\r\n        DataUtilities.getUnsignedInteger(\r\n          incomingBytes[offset],\r\n          incomingBytes[offset + 1],\r\n          incomingBytes[offset + 2],\r\n          incomingBytes[offset + 3],\r\n          true\r\n        )\r\n      );\r\n    }\r\n    const offset = startingIndex + i + restartsToRead * 4;\r\n\r\n    const numRestarts = DataUtilities.getUnsignedInteger(\r\n      incomingBytes[offset],\r\n      incomingBytes[offset + 1],\r\n      incomingBytes[offset + 2],\r\n      incomingBytes[offset + 3],\r\n      false\r\n    );\r\n\r\n    if (numRestarts != restartsToRead) {\r\n      throw new Error(\"Unexpected restart mismatch\");\r\n    }*/\r\n\r\n    this.length = i;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport ILevelDbFileInfo from \"./ILevelDbFileInfo\";\r\n\r\n/**\r\n * Represents metadata about a single LDB file's index without loading full data.\r\n * Used for lazy-loading to determine which files might contain a requested key.\r\n */\r\nexport interface ILevelDbFileIndex {\r\n  /** The file info including level and index */\r\n  fileInfo: ILevelDbFileInfo;\r\n\r\n  /** Smallest key in this file (from manifest) */\r\n  smallestKey?: string;\r\n\r\n  /** Largest key in this file (from manifest) */\r\n  largestKey?: string;\r\n\r\n  /** Whether this file has been fully loaded */\r\n  isLoaded: boolean;\r\n\r\n  /** Priority for loading (higher level files have lower priority) */\r\n  priority: number;\r\n}\r\n\r\n/**\r\n * Represents metadata about a LOG file for lazy loading.\r\n * LOG files contain the most recent writes and take priority.\r\n */\r\nexport interface ILevelDbLogIndex {\r\n  /** The log file */\r\n  file: IFile;\r\n\r\n  /** File name/index for sorting */\r\n  name: string;\r\n\r\n  /** Whether this file has been loaded */\r\n  isLoaded: boolean;\r\n}\r\n\r\n/**\r\n * Represents a key location for on-demand loading.\r\n * Tracks where a key can be found without loading its data.\r\n */\r\nexport interface IKeyLocation {\r\n  /** The file containing this key (LDB or LOG) */\r\n  file: IFile;\r\n\r\n  /** Whether this is from a LOG file (higher priority) */\r\n  isLogFile: boolean;\r\n\r\n  /** The file level (for LDB files, lower = newer) */\r\n  fileLevel: number;\r\n\r\n  /** The file index */\r\n  fileIndex: number;\r\n}\r\n\r\n/**\r\n * LevelDbIndex manages metadata about LevelDB files to enable lazy loading.\r\n *\r\n * Instead of loading all files upfront, this class:\r\n * 1. Parses the MANIFEST to understand file metadata\r\n * 2. Tracks key ranges per file for efficient lookup\r\n * 3. Enables on-demand loading of specific files when keys are requested\r\n *\r\n * This dramatically reduces initial memory usage for large worlds.\r\n */\r\nexport default class LevelDbIndex {\r\n  /** Indexed LDB files with metadata */\r\n  ldbFileIndexes: ILevelDbFileIndex[] = [];\r\n\r\n  /** Indexed LOG files with metadata */\r\n  logFileIndexes: ILevelDbLogIndex[] = [];\r\n\r\n  /** Map of file index to file info for quick lookup */\r\n  filesByIndex: Map<number, ILevelDbFileIndex> = new Map();\r\n\r\n  /** Deleted file numbers from manifest */\r\n  deletedFileNumbers: Set<number> = new Set();\r\n\r\n  /** Total number of files in the index */\r\n  get totalFiles(): number {\r\n    return this.ldbFileIndexes.length + this.logFileIndexes.length;\r\n  }\r\n\r\n  /** Number of files that have been loaded */\r\n  get loadedFileCount(): number {\r\n    let count = 0;\r\n    for (const idx of this.ldbFileIndexes) {\r\n      if (idx.isLoaded) count++;\r\n    }\r\n    for (const idx of this.logFileIndexes) {\r\n      if (idx.isLoaded) count++;\r\n    }\r\n    return count;\r\n  }\r\n\r\n  /**\r\n   * Initialize the index from manifest metadata.\r\n   * This does NOT load any file contents - just organizes metadata.\r\n   */\r\n  initFromManifest(\r\n    ldbFiles: IFile[],\r\n    logFiles: IFile[],\r\n    newFileLevel?: number[],\r\n    newFileNumber?: number[],\r\n    newFileSmallest?: string[],\r\n    newFileLargest?: string[],\r\n    deletedFileNumber?: number[]\r\n  ): void {\r\n    // Track deleted files\r\n    this.deletedFileNumbers.clear();\r\n    if (deletedFileNumber) {\r\n      for (const num of deletedFileNumber) {\r\n        this.deletedFileNumbers.add(num);\r\n      }\r\n    }\r\n\r\n    // Index LDB files\r\n    this.ldbFileIndexes = [];\r\n    this.filesByIndex.clear();\r\n\r\n    for (const file of ldbFiles) {\r\n      try {\r\n        const index = parseInt(file.name);\r\n\r\n        // Skip deleted files\r\n        if (this.deletedFileNumbers.has(index)) {\r\n          continue;\r\n        }\r\n\r\n        // Find level and key range from manifest\r\n        let level = 0;\r\n        let smallest: string | undefined;\r\n        let largest: string | undefined;\r\n\r\n        if (newFileLevel && newFileNumber) {\r\n          for (let j = 0; j < newFileNumber.length; j++) {\r\n            if (newFileNumber[j] === index) {\r\n              level = newFileLevel[j];\r\n              if (newFileSmallest) smallest = newFileSmallest[j];\r\n              if (newFileLargest) largest = newFileLargest[j];\r\n              break;\r\n            }\r\n          }\r\n        }\r\n\r\n        const fileIndex: ILevelDbFileIndex = {\r\n          fileInfo: {\r\n            index: index,\r\n            file: file,\r\n            isDeleted: false,\r\n            level: level,\r\n          },\r\n          smallestKey: smallest,\r\n          largestKey: largest,\r\n          isLoaded: false,\r\n          // Higher level = lower priority (older data, less likely to be superceded)\r\n          priority: 1000 - level,\r\n        };\r\n\r\n        this.ldbFileIndexes.push(fileIndex);\r\n        this.filesByIndex.set(index, fileIndex);\r\n      } catch (e) {\r\n        // Skip files that don't have numeric names\r\n      }\r\n    }\r\n\r\n    // Sort LDB files by level (descending) then index (ascending)\r\n    // This ensures we process files in the correct order for supercession\r\n    this.ldbFileIndexes.sort((a, b) => {\r\n      if (a.fileInfo.level === b.fileInfo.level) {\r\n        return a.fileInfo.index - b.fileInfo.index;\r\n      }\r\n      return b.fileInfo.level - a.fileInfo.level;\r\n    });\r\n\r\n    // Index LOG files\r\n    this.logFileIndexes = [];\r\n    for (const file of logFiles) {\r\n      this.logFileIndexes.push({\r\n        file: file,\r\n        name: file.name,\r\n        isLoaded: false,\r\n      });\r\n    }\r\n\r\n    // Sort LOG files by name (ascending) - later files supercede earlier\r\n    this.logFileIndexes.sort((a, b) => a.name.localeCompare(b.name));\r\n  }\r\n\r\n  /**\r\n   * Find files that might contain a specific key based on key range metadata.\r\n   * Returns files in priority order (LOG files first, then LDB by level).\r\n   *\r\n   * Note: This is a heuristic - if key ranges aren't available from manifest,\r\n   * all files are considered potential matches.\r\n   */\r\n  findPotentialFilesForKey(key: string): Array<ILevelDbFileIndex | ILevelDbLogIndex> {\r\n    const result: Array<ILevelDbFileIndex | ILevelDbLogIndex> = [];\r\n\r\n    // LOG files always have priority (most recent writes)\r\n    // We need to check all LOG files since they don't have key range metadata\r\n    for (const logIdx of this.logFileIndexes) {\r\n      result.push(logIdx);\r\n    }\r\n\r\n    // Filter LDB files by key range if available\r\n    for (const ldbIdx of this.ldbFileIndexes) {\r\n      const hasRange = ldbIdx.smallestKey !== undefined && ldbIdx.largestKey !== undefined;\r\n\r\n      if (hasRange) {\r\n        // Check if key falls within the file's key range\r\n        if (key >= ldbIdx.smallestKey! && key <= ldbIdx.largestKey!) {\r\n          result.push(ldbIdx);\r\n        }\r\n      } else {\r\n        // No range metadata - must check this file\r\n        result.push(ldbIdx);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Get files that should be loaded for initial chunk enumeration.\r\n   * This returns a subset of files that contain chunk metadata keys\r\n   * (keys that are 9-14 bytes, which identify chunk coordinates).\r\n   *\r\n   * Returns files in the order they should be processed for correct supercession.\r\n   */\r\n  getFilesForChunkEnumeration(): Array<ILevelDbFileIndex | ILevelDbLogIndex> {\r\n    // For initial enumeration, we need all files in the correct order\r\n    // LDB files first (sorted by level desc, index asc), then LOG files\r\n    const result: Array<ILevelDbFileIndex | ILevelDbLogIndex> = [];\r\n\r\n    for (const ldbIdx of this.ldbFileIndexes) {\r\n      result.push(ldbIdx);\r\n    }\r\n\r\n    for (const logIdx of this.logFileIndexes) {\r\n      result.push(logIdx);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Mark a file as loaded.\r\n   */\r\n  markFileLoaded(file: IFile): void {\r\n    for (const ldbIdx of this.ldbFileIndexes) {\r\n      if (ldbIdx.fileInfo.file === file) {\r\n        ldbIdx.isLoaded = true;\r\n        return;\r\n      }\r\n    }\r\n\r\n    for (const logIdx of this.logFileIndexes) {\r\n      if (logIdx.file === file) {\r\n        logIdx.isLoaded = true;\r\n        return;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if all files have been loaded.\r\n   */\r\n  isFullyLoaded(): boolean {\r\n    for (const ldbIdx of this.ldbFileIndexes) {\r\n      if (!ldbIdx.isLoaded) return false;\r\n    }\r\n    for (const logIdx of this.logFileIndexes) {\r\n      if (!logIdx.isLoaded) return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Get unloaded files in priority order for background loading.\r\n   */\r\n  getUnloadedFiles(): Array<ILevelDbFileIndex | ILevelDbLogIndex> {\r\n    const result: Array<ILevelDbFileIndex | ILevelDbLogIndex> = [];\r\n\r\n    // LDB files in priority order\r\n    for (const ldbIdx of this.ldbFileIndexes) {\r\n      if (!ldbIdx.isLoaded) {\r\n        result.push(ldbIdx);\r\n      }\r\n    }\r\n\r\n    // LOG files (highest priority for supercession)\r\n    for (const logIdx of this.logFileIndexes) {\r\n      if (!logIdx.isLoaded) {\r\n        result.push(logIdx);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport * as pako from \"pako\";\r\nimport Log from \"../core/Log\";\r\nimport LevelKeyValue from \"./LevelKeyValue\";\r\nimport Varint from \"./Varint\";\r\nimport DataUtilities from \"../core/DataUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { IErrorMessage, IErrorable } from \"../core/IErrorable\";\r\nimport ILevelDbFileInfo from \"./ILevelDbFileInfo\";\r\nimport LevelDbIndex, { ILevelDbFileIndex, ILevelDbLogIndex } from \"./LevelDbIndex\";\r\n\r\n/**\r\n * Options for initializing LevelDb.\r\n */\r\nexport interface ILevelDbInitOptions {\r\n  /** Whether to unload file content after parsing (default: true for lazy mode) */\r\n  unloadFilesAfterParse?: boolean;\r\n\r\n  /**\r\n   * Use lazy loading mode - only load manifest initially, load files on-demand.\r\n   * This dramatically reduces initial memory usage for large worlds.\r\n   * Default: false (full load for backwards compatibility)\r\n   */\r\n  lazyLoad?: boolean;\r\n\r\n  /**\r\n   * Maximum number of keys to keep in memory when using lazy mode.\r\n   * Older keys will be evicted when this limit is reached.\r\n   * Default: 50000\r\n   */\r\n  maxKeysInMemory?: number;\r\n\r\n  /**\r\n   * Progress callback for loading operations.\r\n   */\r\n  progressCallback?: (phase: string, current: number, total: number) => void;\r\n}\r\n\r\n/**\r\n * Represents chunk coordinates extracted from LevelDB keys.\r\n * Used for incremental chunk updates when new LDB files are detected.\r\n */\r\nexport interface IChunkCoordinate {\r\n  x: number;\r\n  z: number;\r\n  dimension: number;\r\n}\r\n\r\nexport default class LevelDb implements IErrorable {\r\n  ldbFiles: IFile[];\r\n  logFiles: IFile[];\r\n  manifestFiles: IFile[];\r\n  keys: Map<string, LevelKeyValue | false | undefined> = new Map();\r\n\r\n  isInErrorState?: boolean;\r\n  errorMessages?: IErrorMessage[];\r\n\r\n  comparator?: string;\r\n  logNumber?: number;\r\n  previousLogNumber?: number;\r\n  nextFileNumber?: number;\r\n  lastSequence?: number;\r\n  compactPointerLevels?: number[];\r\n  compactPointerStrings?: string[];\r\n  deletedFileLevel?: number[];\r\n  deletedFileNumber?: number[];\r\n  newFileLevel?: number[];\r\n  newFileNumber?: number[];\r\n  newFileSize?: number[];\r\n  newFileSmallest?: string[];\r\n  newFileLargest?: string[];\r\n\r\n  context?: string;\r\n\r\n  /** Index for lazy loading - tracks file metadata without loading content */\r\n  private _index?: LevelDbIndex;\r\n\r\n  /** Whether lazy loading mode is enabled */\r\n  private _isLazyMode = false;\r\n\r\n  /** Maximum keys to keep in memory during lazy mode */\r\n  private _maxKeysInMemory = 50000;\r\n\r\n  /** LRU tracking for key eviction in lazy mode */\r\n  private _keyAccessOrder: string[] = [];\r\n\r\n  /** Set of keys that have been loaded but may be evicted */\r\n  private _loadedKeys: Set<string> = new Set();\r\n\r\n  /** Whether initial metadata has been loaded */\r\n  private _isInitialized = false;\r\n\r\n  /** Get whether lazy loading mode is enabled */\r\n  get isLazyMode(): boolean {\r\n    return this._isLazyMode;\r\n  }\r\n\r\n  /** Get the file index for lazy loading */\r\n  get index(): LevelDbIndex | undefined {\r\n    return this._index;\r\n  }\r\n\r\n  /** Get the number of keys currently in memory */\r\n  get keysInMemoryCount(): number {\r\n    return this.keys.size;\r\n  }\r\n\r\n  public constructor(ldbFileArr: IFile[], logFileArr: IFile[], manifestFilesArr: IFile[], context?: string) {\r\n    this.ldbFiles = ldbFileArr;\r\n    this.logFiles = logFileArr;\r\n    this.manifestFiles = manifestFilesArr;\r\n    this.context = context;\r\n  }\r\n\r\n  private _pushError(message: string, contextIn?: string) {\r\n    this.isInErrorState = true;\r\n\r\n    if (this.errorMessages === undefined) {\r\n      this.errorMessages = [];\r\n    }\r\n\r\n    let contextOut = undefined;\r\n\r\n    if (contextIn) {\r\n      contextOut = this.context ? this.context + \"-\" + contextIn : contextIn;\r\n    } else {\r\n      contextOut = this.context;\r\n    }\r\n\r\n    Log.error(message + (contextOut ? \" \" + contextOut : \"\"));\r\n\r\n    this.errorMessages.push({\r\n      message: message,\r\n      context: contextOut,\r\n    });\r\n\r\n    return message;\r\n  }\r\n\r\n  public async init(log?: (message: string) => Promise<void>, options?: { unloadFilesAfterParse?: boolean }) {\r\n    this.keys = new Map<string, LevelKeyValue | false | undefined>();\r\n    this.isInErrorState = false;\r\n    this.errorMessages = undefined;\r\n\r\n    const unloadAfterParse = options?.unloadFilesAfterParse ?? false;\r\n\r\n    for (let i = 0; i < this.manifestFiles.length; i++) {\r\n      await this.manifestFiles[i].loadContent(false);\r\n\r\n      const content = this.manifestFiles[i].content;\r\n\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        this.parseManifestContent(content, this.manifestFiles[i].storageRelativePath);\r\n        if (log) {\r\n          await log(\"Loaded map manifest file '\" + this.manifestFiles[i].fullPath + \"'.\");\r\n        }\r\n      }\r\n\r\n      // Unload file content to free memory after parsing\r\n      if (unloadAfterParse) {\r\n        this.manifestFiles[i].unload();\r\n      }\r\n    }\r\n\r\n    const ldbFileInfos: ILevelDbFileInfo[] = [];\r\n\r\n    for (let i = 0; i < this.ldbFiles.length; i++) {\r\n      const file = this.ldbFiles[i];\r\n\r\n      try {\r\n        const index = parseInt(file.name);\r\n\r\n        //        if (true) {\r\n        if (!this.deletedFileNumber || !this.deletedFileNumber.includes(index)) {\r\n          let level = 0;\r\n\r\n          if (this.newFileLevel && this.newFileNumber) {\r\n            Log.assert(this.newFileLevel.length === this.newFileNumber.length);\r\n\r\n            if (this.newFileLevel.length === this.newFileNumber.length) {\r\n              for (let j = 0; j < this.newFileNumber.length; j++) {\r\n                if (this.newFileNumber[j] === index) {\r\n                  level = this.newFileLevel[j];\r\n                }\r\n              }\r\n            }\r\n          }\r\n\r\n          ldbFileInfos.push({\r\n            index: index,\r\n            file: file,\r\n            isDeleted: false,\r\n            level: level,\r\n          });\r\n        }\r\n      } catch (e: any) {\r\n        this._pushError(\"Error including LDB file: \" + file.fullPath + \" Error: \" + e.toString());\r\n      }\r\n    }\r\n\r\n    const ldbFileInfoSorted = ldbFileInfos.sort((fileA: ILevelDbFileInfo, fileB: ILevelDbFileInfo) => {\r\n      if (fileA.level === fileB.level) {\r\n        return fileA.index - fileB.index;\r\n      }\r\n\r\n      return fileB.level - fileA.level;\r\n    });\r\n\r\n    // Yield every N files to allow garbage collection and prevent memory pressure\r\n    const yieldInterval = 10;\r\n\r\n    for (let i = 0; i < ldbFileInfoSorted.length; i++) {\r\n      const ldbFile = ldbFileInfoSorted[i].file;\r\n\r\n      if (!ldbFile.isContentLoaded) {\r\n        await ldbFile.loadContent(false);\r\n      }\r\n\r\n      const content = ldbFile.content;\r\n\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        const kp = this.parseLdbContent(content, ldbFile.storageRelativePath);\r\n        if (log) {\r\n          await log(\"Loaded map record file '\" + ldbFile.fullPath + \"'. Records: \" + kp);\r\n        }\r\n      }\r\n\r\n      // Unload file content to free memory after parsing\r\n      if (unloadAfterParse) {\r\n        ldbFile.unload();\r\n      }\r\n\r\n      // Periodically yield to the event loop to allow garbage collection\r\n      // This helps prevent out-of-memory errors when loading large worlds\r\n      if (i % yieldInterval === 0 && i > 0) {\r\n        await new Promise((resolve) => setTimeout(resolve, 0));\r\n      }\r\n    }\r\n\r\n    const logFilesSorted = this.logFiles.sort((fileA: IFile, fileB: IFile) => {\r\n      return fileA.name.localeCompare(fileB.name);\r\n    });\r\n\r\n    for (let i = 0; i < logFilesSorted.length; i++) {\r\n      await logFilesSorted[i].loadContent(false);\r\n\r\n      const content = logFilesSorted[i].content;\r\n\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        const kp = this.parseLogContent(content, logFilesSorted[i].storageRelativePath);\r\n        if (log) {\r\n          await log(\"Loaded map latest-updates file '\" + logFilesSorted[i].fullPath + \"'. Records: \" + kp);\r\n        }\r\n      }\r\n\r\n      // Unload file content to free memory after parsing\r\n      if (unloadAfterParse) {\r\n        logFilesSorted[i].unload();\r\n      }\r\n\r\n      // Periodically yield to allow garbage collection\r\n      if (i % yieldInterval === 0 && i > 0) {\r\n        await new Promise((resolve) => setTimeout(resolve, 0));\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Initialize in lazy loading mode - only loads manifest metadata.\r\n   * Files are loaded on-demand when keys are requested.\r\n   *\r\n   * This dramatically reduces initial memory usage for large worlds.\r\n   * Call loadAllFiles() to fully load everything, or use getKey() for on-demand loading.\r\n   */\r\n  public async initLazy(options?: ILevelDbInitOptions): Promise<void> {\r\n    this.keys = new Map<string, LevelKeyValue | false | undefined>();\r\n    this.isInErrorState = false;\r\n    this.errorMessages = undefined;\r\n    this._isLazyMode = true;\r\n    this._maxKeysInMemory = options?.maxKeysInMemory ?? 50000;\r\n    this._keyAccessOrder = [];\r\n    this._loadedKeys = new Set();\r\n\r\n    // Load manifest to get file metadata\r\n    for (let i = 0; i < this.manifestFiles.length; i++) {\r\n      await this.manifestFiles[i].loadContent(false);\r\n\r\n      const content = this.manifestFiles[i].content;\r\n\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        this.parseManifestContent(content, this.manifestFiles[i].storageRelativePath);\r\n      }\r\n\r\n      // Unload manifest content - we've extracted the metadata\r\n      this.manifestFiles[i].unload();\r\n    }\r\n\r\n    // Build the index from manifest metadata\r\n    this._index = new LevelDbIndex();\r\n    this._index.initFromManifest(\r\n      this.ldbFiles,\r\n      this.logFiles,\r\n      this.newFileLevel,\r\n      this.newFileNumber,\r\n      this.newFileSmallest,\r\n      this.newFileLargest,\r\n      this.deletedFileNumber\r\n    );\r\n\r\n    this._isInitialized = true;\r\n  }\r\n\r\n  /**\r\n   * Load all files in lazy mode. This is useful after initLazy() when you want\r\n   * to fully populate all keys (e.g., for world enumeration).\r\n   *\r\n   * @param options Options for loading\r\n   * @returns The number of keys loaded\r\n   */\r\n  public async loadAllFiles(options?: {\r\n    progressCallback?: (phase: string, current: number, total: number) => void;\r\n    unloadFilesAfterParse?: boolean;\r\n  }): Promise<number> {\r\n    if (!this._isInitialized || !this._index) {\r\n      throw new Error(\"LevelDb must be initialized before loading files\");\r\n    }\r\n\r\n    const unloadAfterParse = options?.unloadFilesAfterParse ?? true;\r\n    const yieldInterval = 10;\r\n    let filesProcessed = 0;\r\n    const totalFiles = this._index.totalFiles;\r\n\r\n    // Load LDB files in order (sorted by level for correct supercession)\r\n    for (let i = 0; i < this._index.ldbFileIndexes.length; i++) {\r\n      const fileIdx = this._index.ldbFileIndexes[i];\r\n      const file = fileIdx.fileInfo.file;\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const content = file.content;\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        this.parseLdbContent(content, file.storageRelativePath);\r\n      }\r\n\r\n      fileIdx.isLoaded = true;\r\n\r\n      if (unloadAfterParse) {\r\n        file.unload();\r\n      }\r\n\r\n      filesProcessed++;\r\n      if (options?.progressCallback && filesProcessed % 5 === 0) {\r\n        options.progressCallback(\"Summarizing all world files\", filesProcessed, totalFiles);\r\n      }\r\n\r\n      // Yield periodically for GC\r\n      if (i % yieldInterval === 0 && i > 0) {\r\n        await new Promise((resolve) => setTimeout(resolve, 0));\r\n      }\r\n    }\r\n\r\n    // Load LOG files in order (sorted by name for correct supercession)\r\n    for (let i = 0; i < this._index.logFileIndexes.length; i++) {\r\n      const fileIdx = this._index.logFileIndexes[i];\r\n      const file = fileIdx.file;\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const content = file.content;\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        this.parseLogContent(content, file.storageRelativePath);\r\n      }\r\n\r\n      fileIdx.isLoaded = true;\r\n\r\n      if (unloadAfterParse) {\r\n        file.unload();\r\n      }\r\n\r\n      filesProcessed++;\r\n      if (options?.progressCallback) {\r\n        options.progressCallback(\"Loading LOG files\", filesProcessed, totalFiles);\r\n      }\r\n\r\n      // Yield periodically for GC\r\n      if (i % yieldInterval === 0 && i > 0) {\r\n        await new Promise((resolve) => setTimeout(resolve, 0));\r\n      }\r\n    }\r\n\r\n    return this.keys.size;\r\n  }\r\n\r\n  /**\r\n   * Load a specific file's keys into memory.\r\n   * Used for on-demand loading in lazy mode.\r\n   */\r\n  public async loadFile(fileIndex: ILevelDbFileIndex | ILevelDbLogIndex): Promise<number> {\r\n    const isLogFile = \"name\" in fileIndex; // ILevelDbLogIndex has 'name', ILevelDbFileIndex doesn't\r\n    const file = isLogFile ? (fileIndex as ILevelDbLogIndex).file : (fileIndex as ILevelDbFileIndex).fileInfo.file;\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent(false);\r\n    }\r\n\r\n    const content = file.content;\r\n    let keysParsed = 0;\r\n\r\n    if (content instanceof Uint8Array && content.length > 0) {\r\n      if (isLogFile) {\r\n        keysParsed = this.parseLogContent(content, file.storageRelativePath) || 0;\r\n      } else {\r\n        keysParsed = this.parseLdbContent(content, file.storageRelativePath) || 0;\r\n      }\r\n    }\r\n\r\n    fileIndex.isLoaded = true;\r\n    file.unload(); // Always unload in lazy mode\r\n\r\n    return keysParsed;\r\n  }\r\n\r\n  // Track the last parsed size for each log file to enable incremental parsing\r\n  private _logFileParsedSizes: Map<string, number> = new Map();\r\n\r\n  /**\r\n   * Parse a new or modified LDB/LOG file and return the chunk coordinates affected.\r\n   * This is used for incremental updates when the file system detects new files.\r\n   *\r\n   * @param file The LDB or LOG file to parse\r\n   * @returns Array of unique chunk coordinates affected by keys in this file\r\n   */\r\n  public async parseIncrementalFile(file: IFile): Promise<IChunkCoordinate[]> {\r\n    const affectedChunks: IChunkCoordinate[] = [];\r\n    const seenChunks = new Set<string>();\r\n\r\n    // For incremental updates, always force reload the file content\r\n    // The file may have been updated (especially .log files which are append-only)\r\n    if (file.isContentLoaded) {\r\n      file.unload();\r\n    }\r\n    await file.loadContent(false);\r\n\r\n    const content = file.content;\r\n    if (!(content instanceof Uint8Array) || content.length === 0) {\r\n      return affectedChunks;\r\n    }\r\n\r\n    const isLogFile = file.name.toLowerCase().endsWith(\".log\");\r\n    const filePath = file.storageRelativePath || file.fullPath;\r\n\r\n    // For log files, check if the file has grown since last parse\r\n    const previousSize = this._logFileParsedSizes.get(filePath) || 0;\r\n    const currentSize = content.length;\r\n\r\n    if (isLogFile && currentSize <= previousSize) {\r\n      // File hasn't grown, no new data\r\n      file.unload();\r\n      return affectedChunks;\r\n    }\r\n\r\n    // Track keys before parsing\r\n    const keysBefore = new Map<string, LevelKeyValue | false | undefined>();\r\n    for (const [key, val] of this.keys) {\r\n      keysBefore.set(key, val);\r\n    }\r\n\r\n    // Parse the file\r\n    if (isLogFile) {\r\n      // For log files, parse and extract chunks from ALL keys in the file that are chunk-related\r\n      // This is because log files are append-only and we need to catch any chunk updates\r\n      this.parseLogContent(content, file.storageRelativePath);\r\n      this._logFileParsedSizes.set(filePath, currentSize);\r\n\r\n      // For log files that have grown, find all keys that now have different values\r\n      // (parseLogContent creates new LevelKeyValue objects, so any updated key will have a different reference)\r\n      for (const [keyname, keyValue] of this.keys) {\r\n        if (!keyValue || typeof keyValue === \"boolean\") continue;\r\n\r\n        const prevValue = keysBefore.get(keyname);\r\n\r\n        // Skip if key existed with same object reference (wasn't updated)\r\n        if (prevValue === keyValue) {\r\n          continue;\r\n        }\r\n\r\n        // This is either a new key or an updated key (different object reference)\r\n        // Extract chunk coordinates\r\n        this._extractChunkFromKey(keyname, seenChunks, affectedChunks);\r\n      }\r\n    } else {\r\n      // For LDB files, use the original approach of tracking new/updated keys\r\n      this.parseLdbContent(content, file.storageRelativePath);\r\n\r\n      // Find new/updated keys and extract chunk coordinates\r\n      for (const [keyname, keyValue] of this.keys) {\r\n        if (!keyValue) continue;\r\n\r\n        const prevValue = keysBefore.get(keyname);\r\n        if (prevValue === keyValue) continue; // Same object reference = no change\r\n\r\n        this._extractChunkFromKey(keyname, seenChunks, affectedChunks);\r\n      }\r\n    }\r\n\r\n    // Unload file content to free memory\r\n    file.unload();\r\n\r\n    // Add file to our tracking arrays if not already present\r\n    if (isLogFile && !this.logFiles.includes(file)) {\r\n      this.logFiles.push(file);\r\n    } else if (!isLogFile && !this.ldbFiles.includes(file)) {\r\n      this.ldbFiles.push(file);\r\n    }\r\n\r\n    return affectedChunks;\r\n  }\r\n\r\n  /**\r\n   * Extract chunk coordinates from a key name if it represents chunk data.\r\n   */\r\n  private _extractChunkFromKey(keyname: string, seenChunks: Set<string>, affectedChunks: IChunkCoordinate[]): boolean {\r\n    // Extract chunk coordinates from key (9-14 byte keys encode chunk data)\r\n    if (keyname.length < 9 || keyname.length > 14) {\r\n      return false;\r\n    }\r\n\r\n    // Skip named keys\r\n    if (\r\n      keyname.startsWith(\"AutonomousEntities\") ||\r\n      keyname.startsWith(\"schedulerWT\") ||\r\n      keyname.startsWith(\"Overworld\") ||\r\n      keyname.startsWith(\"BiomeData\") ||\r\n      keyname.startsWith(\"digp\") ||\r\n      keyname.startsWith(\"actorprefix\") ||\r\n      keyname.startsWith(\"player\") ||\r\n      keyname.startsWith(\"portals\")\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    const hasDimensionParam = keyname.length >= 13;\r\n\r\n    const x = DataUtilities.getSignedInteger(\r\n      keyname.charCodeAt(0),\r\n      keyname.charCodeAt(1),\r\n      keyname.charCodeAt(2),\r\n      keyname.charCodeAt(3),\r\n      true\r\n    );\r\n    const z = DataUtilities.getSignedInteger(\r\n      keyname.charCodeAt(4),\r\n      keyname.charCodeAt(5),\r\n      keyname.charCodeAt(6),\r\n      keyname.charCodeAt(7),\r\n      true\r\n    );\r\n    let dim = 0;\r\n\r\n    if (hasDimensionParam) {\r\n      dim = DataUtilities.getSignedInteger(\r\n        keyname.charCodeAt(8),\r\n        keyname.charCodeAt(9),\r\n        keyname.charCodeAt(10),\r\n        keyname.charCodeAt(11),\r\n        true\r\n      );\r\n\r\n      if (dim < 0 || dim > 2) {\r\n        return false; // Invalid dimension\r\n      }\r\n    }\r\n\r\n    // Track unique chunks\r\n    const chunkKey = `${dim}_${x}_${z}`;\r\n    if (!seenChunks.has(chunkKey)) {\r\n      seenChunks.add(chunkKey);\r\n      affectedChunks.push({ x, z, dimension: dim });\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Evict old keys to stay under the memory limit.\r\n   * Uses LRU (least recently used) eviction.\r\n   */\r\n  private _evictKeysIfNeeded(): void {\r\n    if (!this._isLazyMode || this.keys.size <= this._maxKeysInMemory) {\r\n      return;\r\n    }\r\n\r\n    // Evict oldest keys until we're under the limit\r\n    const keysToEvict = this.keys.size - Math.floor(this._maxKeysInMemory * 0.8); // Evict to 80%\r\n\r\n    for (let i = 0; i < keysToEvict && this._keyAccessOrder.length > 0; i++) {\r\n      const oldestKey = this._keyAccessOrder.shift();\r\n      if (oldestKey && this._loadedKeys.has(oldestKey)) {\r\n        const keyValue = this.keys.get(oldestKey);\r\n        // keyValue can be LevelKeyValue, false, or undefined\r\n        if (keyValue && typeof keyValue !== \"boolean\") {\r\n          keyValue.clearAllData();\r\n        }\r\n        this.keys.delete(oldestKey);\r\n        this._loadedKeys.delete(oldestKey);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Track key access for LRU eviction.\r\n   */\r\n  private _trackKeyAccess(key: string): void {\r\n    if (!this._isLazyMode) return;\r\n\r\n    // Remove from old position if it exists\r\n    const existingIndex = this._keyAccessOrder.indexOf(key);\r\n    if (existingIndex >= 0) {\r\n      this._keyAccessOrder.splice(existingIndex, 1);\r\n    }\r\n\r\n    // Add to end (most recently used)\r\n    this._keyAccessOrder.push(key);\r\n    this._loadedKeys.add(key);\r\n\r\n    // Periodically evict old keys\r\n    if (this.keys.size > this._maxKeysInMemory) {\r\n      this._evictKeysIfNeeded();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get a key's value, loading the containing file if necessary (lazy mode).\r\n   * In non-lazy mode, this is a simple map lookup.\r\n   *\r\n   * @param key The key to retrieve\r\n   * @returns The LevelKeyValue, false (if deleted), or undefined (if not found)\r\n   */\r\n  public async getKey(key: string): Promise<LevelKeyValue | false | undefined> {\r\n    // Check if already in memory\r\n    if (this.keys.has(key)) {\r\n      this._trackKeyAccess(key);\r\n      return this.keys.get(key);\r\n    }\r\n\r\n    // In non-lazy mode, if not in keys, it doesn't exist\r\n    if (!this._isLazyMode || !this._index) {\r\n      return undefined;\r\n    }\r\n\r\n    // Lazy mode: find and load files that might contain this key\r\n    const potentialFiles = this._index.findPotentialFilesForKey(key);\r\n\r\n    for (const fileIdx of potentialFiles) {\r\n      if (!fileIdx.isLoaded) {\r\n        await this.loadFile(fileIdx);\r\n\r\n        // Check if key is now available\r\n        if (this.keys.has(key)) {\r\n          this._trackKeyAccess(key);\r\n          return this.keys.get(key);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Key not found in any file\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Clear all loaded keys and reset to just the index metadata.\r\n   * Useful for freeing memory after processing a world.\r\n   */\r\n  public clearLoadedKeys(): void {\r\n    for (const [key, value] of this.keys) {\r\n      // value can be LevelKeyValue, false, or undefined\r\n      if (value && typeof value !== \"boolean\") {\r\n        value.clearAllData();\r\n      }\r\n    }\r\n    this.keys.clear();\r\n    this._keyAccessOrder = [];\r\n    this._loadedKeys.clear();\r\n\r\n    // Reset file loaded flags so they can be reloaded on demand\r\n    if (this._index) {\r\n      for (const fileIdx of this._index.ldbFileIndexes) {\r\n        fileIdx.isLoaded = false;\r\n      }\r\n      for (const fileIdx of this._index.logFileIndexes) {\r\n        fileIdx.isLoaded = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  parseLdbContent(content: Uint8Array, context?: string) {\r\n    let keysParsed = 0;\r\n\r\n    //  Ends with magic: fixed64;\r\n    // == 0xdb4775248b80fb57 (little-endian)\r\n    if (\r\n      content.length <= 8 ||\r\n      content[content.length - 8] !== 87 ||\r\n      content[content.length - 7] !== 251 ||\r\n      content[content.length - 6] !== 128 ||\r\n      content[content.length - 5] !== 139 ||\r\n      content[content.length - 4] !== 36 ||\r\n      content[content.length - 3] !== 117 ||\r\n      content[content.length - 2] !== 71 ||\r\n      content[content.length - 1] !== 219\r\n    ) {\r\n      this._pushError(\"Unexpected bytes in LDB file. File seems unreadable.\", context);\r\n      return;\r\n    }\r\n\r\n    // https://github.com/google/leveldb/blob/main/doc/table_format.md\r\n\r\n    let index = content.length - 48;\r\n\r\n    const metaIndexOffset = new Varint(content, index);\r\n    index += metaIndexOffset.byteLength;\r\n\r\n    const metaIndexSize = new Varint(content, index);\r\n    index += metaIndexSize.byteLength;\r\n\r\n    const indexOffset = new Varint(content, index);\r\n    index += indexOffset.byteLength;\r\n\r\n    const indexSize = new Varint(content, index);\r\n    index += indexSize.byteLength;\r\n\r\n    if (indexOffset.value <= 0 || indexOffset.value + indexSize.value >= content.length) {\r\n      this._pushError(\"LDB content index offset not within bounds.\", context);\r\n      return false;\r\n    }\r\n\r\n    if (metaIndexOffset.value <= 0 || metaIndexOffset.value + metaIndexSize.value >= content.length) {\r\n      this._pushError(\"LDB meta index offset not within bounds.\", context);\r\n      return false;\r\n    }\r\n\r\n    const indexContentCompressed = content.subarray(indexOffset.value, indexOffset.value + indexSize.value);\r\n\r\n    let indexContent = undefined;\r\n\r\n    // I believe this logic replicates: https://twitter.com/_tomcc/status/894294552084860928\r\n    try {\r\n      indexContent = pako.inflate(indexContentCompressed, { raw: true });\r\n    } catch (e) {\r\n      //      Log.fail(\"Error inflating index compressed content: \" + e);\r\n    }\r\n\r\n    if (!indexContent) {\r\n      try {\r\n        indexContent = pako.inflate(indexContentCompressed);\r\n      } catch (e) {\r\n        // Log.verbose(\"Error inflating index content: \" + e + \". Further content may fail to load.\", this.context);\r\n      }\r\n    }\r\n\r\n    if (!indexContent) {\r\n      indexContent = indexContentCompressed;\r\n\r\n      // this._pushError(\"Treating level DB content as compressed.\", context);\r\n    }\r\n\r\n    if (indexContent) {\r\n      const indexKeys: { [id: string]: LevelKeyValue | undefined } = {};\r\n\r\n      if (!this.parseIndexBytes(indexContent, 0, indexContent.length, indexKeys, context)) {\r\n        return false;\r\n      }\r\n\r\n      for (const lastKeyInBlock in indexKeys) {\r\n        const indexKey = indexKeys[lastKeyInBlock];\r\n\r\n        if (indexKey && indexKey.value) {\r\n          const indexBytes = indexKey.value;\r\n          let indexByteIndex = 0;\r\n\r\n          const blockOffset = new Varint(indexBytes, indexByteIndex);\r\n          indexByteIndex += blockOffset.byteLength;\r\n\r\n          const blockSize = new Varint(indexBytes, indexByteIndex);\r\n          indexByteIndex += blockSize.byteLength;\r\n\r\n          if (blockOffset.value < 0 || blockOffset.value + blockSize.value >= content.length) {\r\n            this._pushError(\"Block offset does not appear correct\", context);\r\n            return;\r\n          }\r\n\r\n          if (indexByteIndex !== indexBytes.length) {\r\n            this._pushError(\"Index byte index is not correct\", context);\r\n            return;\r\n          }\r\n\r\n          const blockContentCompressed = content.subarray(blockOffset.value, blockOffset.value + blockSize.value);\r\n\r\n          let blockContent = undefined;\r\n\r\n          try {\r\n            blockContent = pako.inflate(blockContentCompressed, { raw: true });\r\n          } catch (e) {}\r\n\r\n          if (!blockContent) {\r\n            try {\r\n              blockContent = pako.inflate(blockContentCompressed);\r\n            } catch (e) {\r\n              // Apparently, some content is just not compressed, so failing to decompress is an acceptable state.\r\n              // Log.fail(\"Error inflating block content: \" + e);\r\n            }\r\n          }\r\n\r\n          if (!blockContent) {\r\n            blockContent = blockContentCompressed;\r\n          }\r\n\r\n          keysParsed += this.parseLdbBlockBytes(blockContent, 0, blockContent.length, context);\r\n        } else {\r\n          this._pushError(\"Could not find index key.\", context);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (keysParsed === 0) {\r\n      this._pushError(\"No keys found in LDB.\", context);\r\n    }\r\n\r\n    return keysParsed;\r\n  }\r\n\r\n  parseIndexBytes(\r\n    data: Uint8Array,\r\n    offset: number,\r\n    length: number,\r\n    indexKeys: { [id: string]: LevelKeyValue | undefined },\r\n    context?: string\r\n  ) {\r\n    let index = offset;\r\n\r\n    let lastKeyValuePair = undefined;\r\n\r\n    const restarts = DataUtilities.getUnsignedInteger(\r\n      data[length - 4],\r\n      data[length - 3],\r\n      data[length - 2],\r\n      data[length - 1],\r\n      true\r\n    );\r\n\r\n    const endRestartSize = restarts * 4 + 4;\r\n\r\n    while (index < offset + length - endRestartSize) {\r\n      const lb = new LevelKeyValue();\r\n\r\n      lb.loadFromLdb(data, index, lastKeyValuePair);\r\n\r\n      const key = lb.key;\r\n      lastKeyValuePair = lb;\r\n\r\n      if (Utilities.isUsableAsObjectKey(key)) {\r\n        indexKeys[key] = lb;\r\n      }\r\n\r\n      if (lb.length === undefined) {\r\n        this._pushError(\"Unexpected parse of level key value \" + key, context);\r\n        return false;\r\n      }\r\n\r\n      index += lb.length;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  parseLdbBlockBytes(data: Uint8Array, offset: number, length: number, context?: string) {\r\n    let index = offset;\r\n    let keysParsed = 0;\r\n    let lastKeyValuePair = undefined;\r\n\r\n    const restarts = DataUtilities.getUnsignedInteger(\r\n      data[length - 4],\r\n      data[length - 3],\r\n      data[length - 2],\r\n      data[length - 1],\r\n      true\r\n    );\r\n\r\n    const endRestartSize = restarts * 4 + 4;\r\n\r\n    if (endRestartSize > offset + length) {\r\n      this._pushError(\"Unexpected size received for LDB bytes. File could be corrupt.\", context);\r\n      return 0;\r\n    }\r\n\r\n    while (index < offset + length - endRestartSize) {\r\n      const lb = new LevelKeyValue();\r\n\r\n      lb.loadFromLdb(data, index, lastKeyValuePair);\r\n\r\n      const key = lb.key;\r\n      lastKeyValuePair = lb;\r\n\r\n      if (Utilities.isUsableAsObjectKey(key)) {\r\n        this.keys.set(key, lb);\r\n      }\r\n\r\n      if (lb.length === undefined || lb.length < 0) {\r\n        throw new Error(this._pushError(\"Unexpected parse of key \" + key, context));\r\n      }\r\n\r\n      keysParsed++;\r\n      index += lb.length;\r\n    }\r\n\r\n    return keysParsed;\r\n  }\r\n\r\n  parseLogContent(content: Uint8Array, context?: string) {\r\n    let index = 0;\r\n    let pendingBytes = undefined;\r\n    let keysParsed = 0;\r\n\r\n    // https://github.com/google/leveldb/blob/main/doc/log_format.md\r\n\r\n    while (index < content.length - 6) {\r\n      /*const checksum = DataUtilities.getUnsignedInteger(\r\n        content[index],\r\n        content[index + 1],\r\n        content[index + 2],\r\n        content[index + 3],\r\n        true\r\n      );*/\r\n\r\n      const length = DataUtilities.getUnsignedShort(content[index + 4], content[index + 5], true);\r\n      const type = content[index + 6];\r\n      index += 7; // size of record header\r\n\r\n      if (type === 1 /* Type 1 = FULL */) {\r\n        keysParsed += this.addValueFromLog(content, index, length, context);\r\n      } else if (type === 2 /* Type 2 = FIRST */) {\r\n        pendingBytes = new Uint8Array(content.buffer, index, length);\r\n      } else if (type === 3 /* Type 3 = MIDDLE */ || type === 4 /* Type 4 = LAST*/) {\r\n        if (pendingBytes !== undefined) {\r\n          const appendBytes = new Uint8Array(content.buffer, index, length);\r\n\r\n          const newBytes: Uint8Array = new Uint8Array(pendingBytes.byteLength + appendBytes.byteLength);\r\n\r\n          newBytes.set(pendingBytes);\r\n          newBytes.set(appendBytes, pendingBytes.byteLength);\r\n\r\n          pendingBytes = newBytes;\r\n\r\n          if (type === 4 /* This is the last part of a record */) {\r\n            keysParsed += this.addValueFromLog(pendingBytes, 0, pendingBytes.length, context);\r\n          }\r\n        } else {\r\n          this._pushError(\r\n            \"Unexpected middle to a set of bytes found within LevelDB content. File seems unreadable.\",\r\n            context\r\n          );\r\n          return;\r\n        }\r\n      } else {\r\n        this._pushError(\"Unexpected type for log file. File seems unreadable.\", context);\r\n        return;\r\n      }\r\n\r\n      index += length;\r\n\r\n      // new records don't start within 6 bytes of the end of a 32K block\r\n      // Per docs: \"A record never starts within the last six bytes of a [32K] block (since it won't fit). Any\r\n      // leftover bytes here form the trailer, which must consist entirely of zero bytes and must be skipped by readers.\"\r\n      let bytesFromEndOfBlock = 32768 - (index % 32768);\r\n\r\n      while (bytesFromEndOfBlock <= 6 && bytesFromEndOfBlock > 0) {\r\n        bytesFromEndOfBlock--;\r\n        if (content[index] !== 0) {\r\n          this._pushError(\"Unexpectedly found a padding trailer with data\", context);\r\n        }\r\n\r\n        index++;\r\n      }\r\n    }\r\n\r\n    if (keysParsed <= 0) {\r\n      this._pushError(\"Did not find any keys in log file\", context);\r\n    }\r\n\r\n    return keysParsed;\r\n  }\r\n\r\n  addValueFromLog(content: Uint8Array, index: number, length: number, context?: string) {\r\n    const startIndex = index;\r\n    // first 8 bytes are sequence number; next 4 are record count; skip over those for now.\r\n    index += 12;\r\n    let keysParsed = 0;\r\n\r\n    while (index <= startIndex + length - 5) {\r\n      const isLive = content[index];\r\n      index++;\r\n\r\n      const keyLength = new Varint(content, index);\r\n      index += keyLength.byteLength;\r\n\r\n      const keyBytes = new Uint8Array(keyLength.value);\r\n      for (let i = 0; i < keyLength.value; i++) {\r\n        keyBytes[i] = content[index + i];\r\n      }\r\n\r\n      index += keyLength.value;\r\n\r\n      if (index > content.length) {\r\n        this._pushError(\"Unexpected log file length issue.\", context);\r\n      }\r\n\r\n      if (index <= content.length) {\r\n        const key = Utilities.getAsciiStringFromUint8Array(keyBytes);\r\n\r\n        if (key === undefined) {\r\n          this._pushError(\"Unexpected empty key in a log file. File could be unreadable.\", context);\r\n        }\r\n\r\n        keysParsed++;\r\n\r\n        if (isLive) {\r\n          if (index >= content.length) {\r\n            this._pushError(\"Unexpectedly leftover content in a log file. File could be unreadable.\", context);\r\n          }\r\n\r\n          const dataLength = new Varint(content, index);\r\n          index += dataLength.byteLength;\r\n\r\n          if (dataLength.value + index <= content.buffer.byteLength) {\r\n            const data = new Uint8Array(content.buffer, index, dataLength.value);\r\n            index += dataLength.value;\r\n\r\n            const kv = new LevelKeyValue();\r\n            kv.sharedKey = \"\";\r\n            kv.keyDelta = key;\r\n            kv.unsharedKeyBytes = keyBytes;\r\n\r\n            kv.value = data;\r\n\r\n            if (Utilities.isUsableAsObjectKey(key)) {\r\n              this.keys.set(key, kv);\r\n            }\r\n          }\r\n        } else {\r\n          if (Utilities.isUsableAsObjectKey(key)) {\r\n            this.keys.set(key, false);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return keysParsed;\r\n  }\r\n\r\n  parseManifestContent(content: Uint8Array, context?: string) {\r\n    let index = 0;\r\n    let pendingBytes = undefined;\r\n\r\n    this.comparator = undefined;\r\n    this.logNumber = undefined;\r\n    this.nextFileNumber = undefined;\r\n    this.lastSequence = undefined;\r\n    this.compactPointerLevels = undefined;\r\n    this.compactPointerStrings = undefined;\r\n    this.deletedFileLevel = undefined;\r\n    this.deletedFileNumber = undefined;\r\n    this.newFileLevel = undefined;\r\n    this.newFileNumber = undefined;\r\n    this.newFileSize = undefined;\r\n    this.newFileSmallest = undefined;\r\n    this.newFileLargest = undefined;\r\n\r\n    // https://github.com/google/leveldb/blob/main/doc/log_format.md\r\n\r\n    while (index < content.length - 6) {\r\n      /*const checksum = DataUtilities.getUnsignedInteger(\r\n        content[index],\r\n        content[index + 1],\r\n        content[index + 2],\r\n        content[index + 3],\r\n        true\r\n      );*/\r\n\r\n      const length = DataUtilities.getUnsignedShort(content[index + 4], content[index + 5], true);\r\n      const type = content[index + 6];\r\n      index += 7; // size of record header\r\n\r\n      if (type === 1 /* Type 1 = FULL */) {\r\n        this.addValueFromManifest(content, index, length);\r\n      } else if (type === 2 /* Type 2 = FIRST */) {\r\n        pendingBytes = new Uint8Array(content.buffer, index, length);\r\n      } else if (type === 3 /* Type 3 = MIDDLE */ || type === 4 /* Type 4 = LAST*/) {\r\n        if (pendingBytes !== undefined) {\r\n          const appendBytes = new Uint8Array(content.buffer, index, length);\r\n\r\n          const newBytes: Uint8Array = new Uint8Array(pendingBytes.byteLength + appendBytes.byteLength);\r\n\r\n          newBytes.set(pendingBytes);\r\n          newBytes.set(appendBytes, pendingBytes.byteLength);\r\n\r\n          pendingBytes = newBytes;\r\n\r\n          if (type === 4 /* This is the last part of a record */) {\r\n            this.addValueFromManifest(pendingBytes, 0, pendingBytes.length);\r\n          }\r\n        } else {\r\n          this._pushError(\r\n            \"Unexpected middle to a set of bytes found within a manifest file. File could be unreadable.\",\r\n            context\r\n          );\r\n          return;\r\n        }\r\n      } else {\r\n        this._pushError(\"Unexpected type for manifest file.  File could be unreadable.\", context);\r\n        return;\r\n      }\r\n\r\n      index += length;\r\n\r\n      // new records don't start within 6 bytes of the end of a 32K block\r\n      // Per docs: \"A record never starts within the last six bytes of a [32K] block (since it won't fit). Any\r\n      // leftover bytes here form the trailer, which must consist entirely of zero bytes and must be skipped by readers.\"\r\n      let bytesFromEndOfBlock = 32768 - (index % 32768);\r\n\r\n      while (bytesFromEndOfBlock <= 6 && bytesFromEndOfBlock > 0) {\r\n        bytesFromEndOfBlock--;\r\n        if (content[index] !== 0) {\r\n          this._pushError(\"Unexpectedly found a padding trailer with data in a manifest file.\", context);\r\n        }\r\n        index++;\r\n      }\r\n    }\r\n  }\r\n\r\n  addValueFromManifest(content: Uint8Array, index: number, length: number, context?: string) {\r\n    const startIndex = index;\r\n\r\n    // https://github.com/google/leveldb/blob/main/db/version_edit.cc\r\n    while (index < startIndex + length) {\r\n      const tag = new Varint(content, index);\r\n      index += tag.byteLength;\r\n\r\n      switch (tag.value) {\r\n        case 1: // comparator\r\n          const comparatorPrefixedSliceLength = new Varint(content, index);\r\n          index += comparatorPrefixedSliceLength.byteLength;\r\n\r\n          // comparator prefixed slice\r\n          const comparatorBytes = new Uint8Array(comparatorPrefixedSliceLength.value);\r\n          for (let i = 0; i < comparatorPrefixedSliceLength.value; i++) {\r\n            comparatorBytes[i] = content[index + i];\r\n          }\r\n\r\n          index += comparatorPrefixedSliceLength.value;\r\n\r\n          if (index > content.length) {\r\n            this._pushError(\"Unexpected manifest file length issue.\", context);\r\n          }\r\n\r\n          this.comparator = Utilities.getAsciiStringFromUint8Array(comparatorBytes);\r\n\r\n          if (this.comparator === undefined) {\r\n            this._pushError(\"Unexpected comparator.\", context);\r\n          }\r\n          break;\r\n\r\n        case 2: // logNumber\r\n          const logNumberVarint = new Varint(content, index);\r\n          index += logNumberVarint.byteLength;\r\n          this.logNumber = logNumberVarint.value;\r\n          break;\r\n\r\n        case 3: // nextFileNumber\r\n          const nextFileNumberVarint = new Varint(content, index);\r\n          index += nextFileNumberVarint.byteLength;\r\n          this.nextFileNumber = nextFileNumberVarint.value;\r\n          break;\r\n\r\n        case 4: // lastSequence\r\n          const lastSequenceVarint = new Varint(content, index);\r\n          index += lastSequenceVarint.byteLength;\r\n          this.lastSequence = lastSequenceVarint.value;\r\n          break;\r\n\r\n        case 5: // compactPointer\r\n          if (this.compactPointerLevels === undefined) {\r\n            this.compactPointerLevels = [];\r\n          }\r\n          if (this.compactPointerStrings === undefined) {\r\n            this.compactPointerStrings = [];\r\n          }\r\n          const compactPointerLevel = new Varint(content, index);\r\n          index += compactPointerLevel.byteLength;\r\n          this.compactPointerLevels.push(compactPointerLevel.value);\r\n\r\n          const compactPointerStrLength = new Varint(content, index);\r\n          index += compactPointerStrLength.byteLength;\r\n\r\n          // comparator prefixed slice\r\n          const compactPointerStrBytes = new Uint8Array(compactPointerStrLength.value);\r\n          for (let i = 0; i < compactPointerStrLength.value; i++) {\r\n            compactPointerStrBytes[i] = content[index + i];\r\n          }\r\n\r\n          index += compactPointerStrLength.value;\r\n\r\n          if (index > content.length) {\r\n            this._pushError(\"Unexpected manifest file length issue at compact pointer.\", context);\r\n          }\r\n\r\n          this.compactPointerStrings.push(Utilities.getAsciiStringFromUint8Array(compactPointerStrBytes));\r\n\r\n          if (this.compactPointerStrings[this.compactPointerStrings.length - 1] === undefined) {\r\n            this._pushError(\"Unexpected compact pointer string.\", context);\r\n          }\r\n          break;\r\n\r\n        case 6: // deletedFile\r\n          if (this.deletedFileLevel === undefined) {\r\n            this.deletedFileLevel = [];\r\n          }\r\n          if (this.deletedFileNumber === undefined) {\r\n            this.deletedFileNumber = [];\r\n          }\r\n          const deletedFileLevel = new Varint(content, index);\r\n          index += deletedFileLevel.byteLength;\r\n          this.deletedFileLevel.push(deletedFileLevel.value);\r\n\r\n          const deletedFileNumber = new Varint(content, index);\r\n          index += deletedFileNumber.byteLength;\r\n          this.deletedFileNumber.push(deletedFileNumber.value);\r\n          break;\r\n\r\n        case 7: // newFile\r\n          if (this.newFileLargest === undefined) {\r\n            this.newFileLargest = [];\r\n          }\r\n          if (this.newFileLevel === undefined) {\r\n            this.newFileLevel = [];\r\n          }\r\n          if (this.newFileNumber === undefined) {\r\n            this.newFileNumber = [];\r\n          }\r\n          if (this.newFileSmallest === undefined) {\r\n            this.newFileSmallest = [];\r\n          }\r\n          if (this.newFileSize === undefined) {\r\n            this.newFileSize = [];\r\n          }\r\n\r\n          const newFileLevel = new Varint(content, index);\r\n          index += newFileLevel.byteLength;\r\n          this.newFileLevel.push(newFileLevel.value);\r\n\r\n          const newFileNumber = new Varint(content, index);\r\n          index += newFileNumber.byteLength;\r\n          this.newFileNumber.push(newFileNumber.value);\r\n\r\n          const newFileSize = new Varint(content, index);\r\n          index += newFileSize.byteLength;\r\n          this.newFileSize.push(newFileSize.value);\r\n\r\n          const newFileSmallestStrLength = new Varint(content, index);\r\n          index += newFileSmallestStrLength.byteLength;\r\n\r\n          const newFileSmallestStrBytes = new Uint8Array(newFileSmallestStrLength.value);\r\n          for (let i = 0; i < newFileSmallestStrLength.value; i++) {\r\n            newFileSmallestStrBytes[i] = content[index + i];\r\n          }\r\n\r\n          index += newFileSmallestStrLength.value;\r\n\r\n          if (index > content.length) {\r\n            this._pushError(\"Unexpected manifest file length issue at new file smallest.\", context);\r\n          }\r\n\r\n          this.newFileSmallest.push(Utilities.getAsciiStringFromUint8Array(newFileSmallestStrBytes));\r\n\r\n          if (this.newFileSmallest[this.newFileSmallest.length - 1] === undefined) {\r\n            this._pushError(\"Unexpected file smallest tag string.\", context);\r\n          }\r\n\r\n          const newFileLargestStrLength = new Varint(content, index);\r\n          index += newFileLargestStrLength.byteLength;\r\n\r\n          const newFileLargestStrBytes = new Uint8Array(newFileLargestStrLength.value);\r\n          for (let i = 0; i < newFileLargestStrLength.value; i++) {\r\n            newFileLargestStrBytes[i] = content[index + i];\r\n          }\r\n\r\n          index += newFileLargestStrLength.value;\r\n\r\n          if (index > content.length) {\r\n            this._pushError(\"Unexpected manifest file length issue at new file largest.\", context);\r\n          }\r\n\r\n          this.newFileLargest.push(Utilities.getAsciiStringFromUint8Array(newFileLargestStrBytes));\r\n\r\n          if (this.newFileLargest[this.newFileLargest.length - 1] === undefined) {\r\n            this._pushError(\"Unexpected file largest tag string.\", context);\r\n          }\r\n          break;\r\n\r\n        case 9: // previousLogNumber\r\n          const prevLogNumber = new Varint(content, index);\r\n          index += prevLogNumber.byteLength;\r\n          this.previousLogNumber = prevLogNumber.value;\r\n          break;\r\n\r\n        default:\r\n          this._pushError(\"Unexpected manifest item: \" + tag.value, context);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Block from \"./Block\";\r\nimport NbtBinary from \"./NbtBinary\";\r\n\r\nexport default class BlockPalette {\r\n  blocks: Block[] = [];\r\n\r\n  parseFromBytes(bytes: Uint8Array, index: number, paletteCount: number) {\r\n    for (let i = 0; i < paletteCount; i++) {\r\n      const nbt = new NbtBinary();\r\n\r\n      const bytesRead = nbt.fromBinary(bytes, true, false, index, true);\r\n\r\n      if (bytesRead <= 0) {\r\n        return index;\r\n      }\r\n\r\n      index += bytesRead;\r\n\r\n      Log.assert(index <= bytes.length, \"Unexpected expansion of bytes processed.\");\r\n\r\n      if (nbt.singleRoot === null) {\r\n        return index;\r\n      }\r\n\r\n      const children = nbt.singleRoot.getTagChildren();\r\n\r\n      let block = null;\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const child = children[i];\r\n\r\n        if (child.name === \"name\") {\r\n          block = new Block();\r\n          block.typeName = child.valueAsString;\r\n\r\n          this.blocks.push(block);\r\n        } else if (child.name === \"type\") {\r\n        }\r\n      }\r\n    }\r\n\r\n    return index;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport NbtBinaryTag from \"../NbtBinaryTag\";\r\n\r\nexport default abstract class BlockActor {\r\n  rootTag: NbtBinaryTag;\r\n\r\n  x: number | undefined;\r\n  y: number | undefined;\r\n  z: number | undefined;\r\n\r\n  id?: string;\r\n\r\n  isMovable?: boolean;\r\n\r\n  constructor(rootTagIn: NbtBinaryTag) {\r\n    this.rootTag = rootTagIn;\r\n\r\n    let tag = this.rootTag.find(\"x\");\r\n\r\n    if (tag !== null) {\r\n      this.x = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"y\");\r\n\r\n    if (tag !== null) {\r\n      this.y = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"z\");\r\n\r\n    if (tag !== null) {\r\n      this.z = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"id\");\r\n\r\n    if (tag !== null) {\r\n      this.id = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"isMovable\");\r\n    if (tag) {\r\n      this.isMovable = tag.valueAsBoolean;\r\n    }\r\n  }\r\n\r\n  public abstract load(): void;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class GenericBlockActor extends BlockActor {\r\n  public override load() {}\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\nimport { InventoryItem } from \"../Items\";\r\n\r\nexport default class ChestBlockActor extends BlockActor {\r\n  findable?: boolean;\r\n\r\n  items: InventoryItem[] = [];\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"Findable\");\r\n    if (tag) {\r\n      this.findable = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"Items\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.items = [];\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const countTag = childTag.find(\"Count\");\r\n        const damageTag = childTag.find(\"Damage\");\r\n        const nameTag = childTag.find(\"Name\");\r\n        const slotTag = childTag.find(\"Slot\");\r\n        const wasPickedUpTag = childTag.find(\"WasPickedUp\");\r\n\r\n        if (countTag && damageTag && nameTag && slotTag && wasPickedUpTag) {\r\n          this.items.push({\r\n            count: countTag.valueAsInt,\r\n            damage: damageTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n            slot: slotTag.valueAsInt,\r\n            wasPickedUp: wasPickedUpTag.valueAsBoolean,\r\n          });\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class BedBlockActor extends BlockActor {\r\n  color?: boolean;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"color\");\r\n    if (tag) {\r\n      this.color = tag.valueAsBoolean;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { Item } from \"../Items\";\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class FrameBlockActor extends BlockActor {\r\n  itemDropChance?: number;\r\n  itemRotation?: number;\r\n  item?: Item;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"ItemDropChance\");\r\n    if (tag) {\r\n      this.itemDropChance = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"ItemRotation\");\r\n    if (tag) {\r\n      this.itemRotation = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"Item\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const countTag = childTag.find(\"Count\");\r\n        const damageTag = childTag.find(\"Damage\");\r\n        const nameTag = childTag.find(\"Name\");\r\n        const wasPickedUpTag = childTag.find(\"WasPickedUp\");\r\n\r\n        if (countTag && damageTag && nameTag && wasPickedUpTag) {\r\n          this.item = {\r\n            count: countTag.valueAsInt,\r\n            damage: damageTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n            wasPickedUp: wasPickedUpTag.valueAsBoolean,\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    // add Item parsing here.\r\n  }\r\n}\r\n", "import BlockActor from \"./BlockActor\";\r\n\r\nexport default class NoteBlockActor extends BlockActor {\r\n  note?: boolean;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"note\");\r\n    if (tag) {\r\n      this.note = tag.valueAsBoolean;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class SignBlockActor extends BlockActor {\r\n  textIgnoreLegacyBugResolved?: boolean;\r\n  ignoreLighting?: boolean;\r\n  persistFormatting?: boolean;\r\n  signTextColor?: number;\r\n  text?: string;\r\n  textOwner?: string;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"IgnoreLighting\");\r\n    if (tag) {\r\n      this.ignoreLighting = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"PersistFormatting\");\r\n    if (tag) {\r\n      this.persistFormatting = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"SignTextColor\");\r\n    if (tag) {\r\n      this.signTextColor = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"Text\");\r\n    if (tag) {\r\n      this.text = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"TextOwner\");\r\n    if (tag) {\r\n      this.textOwner = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"TextIgnoreLegacyBugResolved\");\r\n    if (tag) {\r\n      this.textIgnoreLegacyBugResolved = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"IsMovable\");\r\n    if (tag) {\r\n      this.isMovable = tag.valueAsBoolean;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class StructureBlockActor extends BlockActor {\r\n  animationMode?: boolean;\r\n  animationSeconds?: number;\r\n  data?: number;\r\n  dataField?: string;\r\n  ignoreEntities?: boolean;\r\n  includePlayers?: boolean;\r\n  integrity?: number;\r\n  isPowered?: boolean;\r\n  mirror?: boolean;\r\n  redstoneSaveMode?: number;\r\n  removeBlocks?: boolean;\r\n  rotation?: boolean;\r\n  seed?: BigInt;\r\n  showBoundingBox?: boolean;\r\n  structureName?: string;\r\n  xStructureOffset?: number;\r\n  xStructureSize?: number;\r\n  yStructureOffset?: number;\r\n  yStructureSize?: number;\r\n  zStructureOffset?: number;\r\n  zStructureSize?: number;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"animationMode\");\r\n    if (tag) {\r\n      this.animationMode = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"animationSeconds\");\r\n    if (tag) {\r\n      this.animationSeconds = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"data\");\r\n    if (tag) {\r\n      this.data = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"dataField\");\r\n    if (tag) {\r\n      this.dataField = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"ignoreEntities\");\r\n    if (tag) {\r\n      this.ignoreEntities = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"includePlayers\");\r\n    if (tag) {\r\n      this.includePlayers = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"integrity\");\r\n    if (tag) {\r\n      this.integrity = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"isPowered\");\r\n    if (tag) {\r\n      this.isMovable = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"mirror\");\r\n    if (tag) {\r\n      this.mirror = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"redstoneSaveMode\");\r\n    if (tag) {\r\n      this.redstoneSaveMode = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"removeBlocks\");\r\n    if (tag) {\r\n      this.removeBlocks = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"rotation\");\r\n    if (tag) {\r\n      this.rotation = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"seed\");\r\n    if (tag) {\r\n      this.seed = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"showBoundingBox\");\r\n    if (tag) {\r\n      this.showBoundingBox = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"structureName\");\r\n    if (tag) {\r\n      this.structureName = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"xStructureOffset\");\r\n    if (tag) {\r\n      this.xStructureOffset = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"xStructureSize\");\r\n    if (tag) {\r\n      this.xStructureSize = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"yStructureOffset\");\r\n    if (tag) {\r\n      this.yStructureOffset = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"yStructureSize\");\r\n    if (tag) {\r\n      this.yStructureSize = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"zStructureOffset\");\r\n    if (tag) {\r\n      this.zStructureOffset = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"zStructureSize\");\r\n    if (tag) {\r\n      this.zStructureSize = tag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\nimport { InventoryItem } from \"../Items\";\r\n\r\nexport default class CauldronBlockActor extends BlockActor {\r\n  potionId?: number;\r\n  potionType?: number;\r\n\r\n  items: InventoryItem[] = [];\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"PotionId\");\r\n    if (tag) {\r\n      this.potionId = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"PotionType\");\r\n    if (tag) {\r\n      this.potionType = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"Items\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.items = [];\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const countTag = childTag.find(\"Count\");\r\n        const damageTag = childTag.find(\"Damage\");\r\n        const nameTag = childTag.find(\"Name\");\r\n        const slotTag = childTag.find(\"Slot\");\r\n        const wasPickedUpTag = childTag.find(\"WasPickedUp\");\r\n\r\n        if (countTag && damageTag && nameTag && slotTag && wasPickedUpTag) {\r\n          this.items.push({\r\n            count: countTag.valueAsInt,\r\n            damage: damageTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n            slot: slotTag.valueAsInt,\r\n            wasPickedUp: wasPickedUpTag.valueAsBoolean,\r\n          });\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class CampfireBlockActor extends BlockActor {\r\n  itemTime1?: number;\r\n  itemTime2?: number;\r\n  itemTime3?: number;\r\n  itemTime4?: number;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"itemTime1\");\r\n    if (tag) {\r\n      this.itemTime1 = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"itemTime2\");\r\n    if (tag) {\r\n      this.itemTime2 = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"itemTime3\");\r\n    if (tag) {\r\n      this.itemTime3 = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"itemTime4\");\r\n    if (tag) {\r\n      this.itemTime4 = tag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class BeehiveBlockActor extends BlockActor {\r\n  shouldSpawnBees?: boolean;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    const tag = this.rootTag.find(\"shouldSpawnBees\");\r\n    if (tag) {\r\n      this.shouldSpawnBees = tag.valueAsBoolean;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class CommandBlockActor extends BlockActor {\r\n  command?: string;\r\n  customName?: string;\r\n  executeOnFirstTick?: boolean;\r\n  lpCommandMode?: number;\r\n  lpConditionalMode?: boolean;\r\n  lpRedstoneMode?: boolean;\r\n  lastExecution?: bigint;\r\n  lastOutput?: string;\r\n  lastOutputParams?: string[];\r\n  successCount?: number;\r\n  tickDelay?: number;\r\n  trackOutput?: boolean;\r\n  version?: number;\r\n  auto?: boolean;\r\n  conditionMet?: boolean;\r\n  powered?: boolean;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"Command\");\r\n    if (tag) {\r\n      this.command = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"CustomName\");\r\n    if (tag) {\r\n      this.customName = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"ExecuteOnFirstTick\");\r\n    if (tag) {\r\n      this.executeOnFirstTick = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LPCommandMode\");\r\n    if (tag) {\r\n      this.lpCommandMode = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LPCondionalMode\"); // re: condional, that's sic\r\n    if (tag) {\r\n      this.lpConditionalMode = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LPRedstoneMode\");\r\n    if (tag) {\r\n      this.lpRedstoneMode = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LastExecution\");\r\n    if (tag) {\r\n      this.lastExecution = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LastOutput\");\r\n    if (tag) {\r\n      this.lastOutput = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LastOutputParams\");\r\n    if (tag) {\r\n      this.lastOutputParams = tag.valueAsStringArray;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"SuccessCount\");\r\n    if (tag) {\r\n      this.successCount = tag.valueAsInt;\r\n    }\r\n    tag = this.rootTag.find(\"TickDelay\");\r\n    if (tag) {\r\n      this.tickDelay = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"TrackOutput\");\r\n    if (tag) {\r\n      this.trackOutput = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"Version\");\r\n    if (tag) {\r\n      this.version = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"auto\");\r\n    if (tag) {\r\n      this.auto = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"powered\");\r\n    if (tag) {\r\n      this.powered = tag.valueAsBoolean;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class MobSpawnerBlockActor extends BlockActor {\r\n  delay?: number;\r\n  displayEntityHeight?: number;\r\n  displayEntityScale?: number;\r\n  displayEntityWidth?: number;\r\n  entityIdentifier?: string;\r\n  maxNearbyEntities?: number;\r\n  maxSpawnDelay?: number;\r\n  minSpawnDelay?: number;\r\n  requiredPlayerRange?: number;\r\n  spawnCount?: number;\r\n  spawnRange?: number;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"Delay\");\r\n    if (tag) {\r\n      this.delay = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"DisplayEntityType\");\r\n    if (tag) {\r\n      this.displayEntityHeight = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"DisplayEntityScale\");\r\n    if (tag) {\r\n      this.displayEntityScale = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"DisplayEntityWidth\");\r\n    if (tag) {\r\n      this.displayEntityWidth = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"EntityIdentifier\");\r\n    if (tag) {\r\n      this.entityIdentifier = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"MaxNearbyEntities\");\r\n    if (tag) {\r\n      this.maxNearbyEntities = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"MaxSpawnDelay\");\r\n    if (tag) {\r\n      this.maxSpawnDelay = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"MinSpawnDelay\");\r\n    if (tag) {\r\n      this.minSpawnDelay = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"RequiredPlayerRange\");\r\n    if (tag) {\r\n      this.requiredPlayerRange = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"SpawnCount\");\r\n    if (tag) {\r\n      this.spawnCount = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"SpawnRange\");\r\n    if (tag) {\r\n      this.spawnRange = tag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class HopperBlockActor extends BlockActor {\r\n  customName?: string;\r\n  transferCooldown?: number;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"CustomName\");\r\n    if (tag) {\r\n      this.customName = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"TransferCooldown\");\r\n    if (tag) {\r\n      this.transferCooldown = tag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class ComparatorBlockActor extends BlockActor {\r\n  outputSignal?: number;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    const tag = this.rootTag.find(\"OutputSignal\");\r\n    if (tag) {\r\n      this.outputSignal = tag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../../core/Log\";\r\nimport NbtBinaryTag from \"../NbtBinaryTag\";\r\nimport ChestBlockActor from \"./ChestBlockActor\";\r\nimport BedBlockActor from \"./BedBlockActor\";\r\nimport FrameBlockActor from \"./FrameBlockActor\";\r\nimport GenericBlockActor from \"./GenericBlockActor\";\r\nimport NoteBlockActor from \"./NoteBlockActor\";\r\nimport SignBlockActor from \"./SignBlockActor\";\r\nimport StructureBlockActor from \"./StructureBlockActor\";\r\nimport CauldronBlockActor from \"./CauldronBlockActor\";\r\nimport CampfireBlockActor from \"./CampfireBlockActor\";\r\nimport BeehiveBlockActor from \"./BeehiveBlockActor\";\r\nimport CommandBlockActor from \"./CommandBlockActor\";\r\nimport MobSpawnerBlockActor from \"./MobSpawnerBlockActor\";\r\nimport HopperBlockActor from \"./HopperBlockActor\";\r\nimport ComparatorBlockActor from \"./ComparatorBlockActor\";\r\n\r\nexport default class BlockActorFactory {\r\n  public static create(id: string, rootTagIn: NbtBinaryTag) {\r\n    switch (id) {\r\n      case \"minecraft:wall_sign\":\r\n      case \"minecraft:standing_sign\":\r\n      case \"Sign\":\r\n      case \"HangingSign\":\r\n        return new SignBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:structure_block\":\r\n      case \"StructureBlock\":\r\n        return new StructureBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:ender_chest\":\r\n      case \"minecraft:chest\":\r\n      case \"minecraft:barrel\":\r\n      case \"Barrel\":\r\n      case \"Chest\":\r\n      case \"EnderChest\":\r\n        return new ChestBlockActor(rootTagIn);\r\n\r\n      case \"Cauldron\":\r\n        return new CauldronBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:noteblock\":\r\n      case \"Music\":\r\n        return new NoteBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:frame\":\r\n      case \"ItemFrame\":\r\n      case \"GlowItemFrame\":\r\n        return new FrameBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:spore_blossom\":\r\n      case \"SporeBlossom\":\r\n      case \"FlowerPot\":\r\n      case \"EndPortal\":\r\n      case \"Banner\": // start of just blanket inclusion.\r\n      case \"EnchantTable\":\r\n      case \"Lectern\":\r\n      case \"BlastFurnace\":\r\n      case \"Furnace\":\r\n      case \"DaylightDetector\":\r\n      case \"ShulkerBox\":\r\n      case \"BrewingStand\":\r\n      case \"Skull\":\r\n      case \"Dropper\":\r\n      case \"Dispenser\":\r\n      case \"Bell\":\r\n      case \"BrushableBlock\":\r\n      case \"ChiseledBookshelf\":\r\n      case \"SculkSensor\":\r\n      case \"PistonArm\":\r\n      case \"SculkShrieker\":\r\n      case \"NetherReactor\":\r\n      case \"SculkCatalyst\":\r\n      case \"Lodestone\":\r\n      case \"Beacon\":\r\n      case \"Conduit\":\r\n      case \"Jukebox\":\r\n      case \"JigsawBlock\":\r\n      case \"Smoker\":\r\n      case \"ChalkboardBlock\":\r\n      case \"ChemistryTable\":\r\n      case \"CalibratedSculkSensor\":\r\n      case \"DecoratedPot\":\r\n      case \"SuspiciousSand\":\r\n      case \"EndGateway\":\r\n      case \"SuspiciousGravel\":\r\n      case \"TrialSpawner\":\r\n      case \"Piston\":\r\n      case \"MovingBlock\":\r\n      case \"Vault\":\r\n      case \"Crafter\":\r\n        return new GenericBlockActor(rootTagIn);\r\n\r\n      case \"Bed\":\r\n        return new BedBlockActor(rootTagIn);\r\n\r\n      case \"Campfire\":\r\n      case \"SoulCampfire\":\r\n        return new CampfireBlockActor(rootTagIn);\r\n\r\n      case \"Beehive\":\r\n        return new BeehiveBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:chain_command_block\":\r\n      case \"CommandBlock\":\r\n        return new CommandBlockActor(rootTagIn);\r\n\r\n      case \"MobSpawner\":\r\n      case \"mob_spawner\":\r\n      case \"minecraft:mob_spawner\":\r\n        return new MobSpawnerBlockActor(rootTagIn);\r\n\r\n      case \"Hopper\":\r\n        return new HopperBlockActor(rootTagIn);\r\n\r\n      case \"Comparator\":\r\n        return new ComparatorBlockActor(rootTagIn);\r\n\r\n      default:\r\n        Log.debugAlert(\"Unexpected block actor type found '\" + id + \"'\");\r\n        return undefined;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport NbtBinaryTag from \"./NbtBinaryTag\";\r\n\r\n/**\r\n * Represents an entity stored in a chunk's entity data.\r\n * This is a lightweight representation used for world map rendering.\r\n */\r\nexport default class ChunkEntity {\r\n  /** The entity type identifier (e.g., \"minecraft:cow\", \"minecraft:zombie\") */\r\n  identifier: string;\r\n\r\n  /** Entity position (absolute world coordinates) */\r\n  x: number;\r\n  y: number;\r\n  z: number;\r\n\r\n  /** Entity rotation (yaw, pitch) */\r\n  yaw?: number;\r\n  pitch?: number;\r\n\r\n  /** Whether the entity is a baby */\r\n  isBaby?: boolean;\r\n\r\n  /** Whether the entity is tamed */\r\n  isTamed?: boolean;\r\n\r\n  /** Entity variant (for entities with visual variants) */\r\n  variant?: number;\r\n\r\n  /** Entity's unique ID */\r\n  uniqueId?: bigint;\r\n\r\n  /** Custom name if set */\r\n  customName?: string;\r\n\r\n  /** Entity definitions (component groups) */\r\n  definitions?: string[];\r\n\r\n  constructor(identifier: string, x: number, y: number, z: number) {\r\n    this.identifier = identifier;\r\n    this.x = x;\r\n    this.y = y;\r\n    this.z = z;\r\n  }\r\n\r\n  /**\r\n   * Creates a ChunkEntity from an NBT compound tag.\r\n   */\r\n  static fromNbtTag(root: NbtBinaryTag): ChunkEntity | undefined {\r\n    const identifierTag = root.find(\"identifier\");\r\n    const posTag = root.find(\"Pos\");\r\n\r\n    if (!identifierTag || !posTag) {\r\n      return undefined;\r\n    }\r\n\r\n    const identifier = identifierTag.valueAsString;\r\n    const pos = posTag.valueAsNumericArray;\r\n\r\n    if (!identifier || !pos || pos.length < 3) {\r\n      return undefined;\r\n    }\r\n\r\n    const entity = new ChunkEntity(identifier, pos[0], pos[1], pos[2]);\r\n\r\n    // Parse rotation\r\n    const rotationTag = root.find(\"Rotation\");\r\n    if (rotationTag) {\r\n      const rotation = rotationTag.valueAsNumericArray;\r\n      if (rotation && rotation.length >= 2) {\r\n        entity.yaw = rotation[0];\r\n        entity.pitch = rotation[1];\r\n      }\r\n    }\r\n\r\n    // Parse optional properties\r\n    const isBabyTag = root.find(\"IsBaby\");\r\n    if (isBabyTag) {\r\n      entity.isBaby = isBabyTag.valueAsBoolean;\r\n    }\r\n\r\n    const isTamedTag = root.find(\"IsTamed\");\r\n    if (isTamedTag) {\r\n      entity.isTamed = isTamedTag.valueAsBoolean;\r\n    }\r\n\r\n    const variantTag = root.find(\"Variant\");\r\n    if (variantTag) {\r\n      entity.variant = variantTag.valueAsInt;\r\n    }\r\n\r\n    const uniqueIdTag = root.find(\"UniqueID\");\r\n    if (uniqueIdTag) {\r\n      entity.uniqueId = uniqueIdTag.valueAsBigInt;\r\n    }\r\n\r\n    const customNameTag = root.find(\"CustomName\");\r\n    if (customNameTag) {\r\n      entity.customName = customNameTag.valueAsString;\r\n    }\r\n\r\n    const definitionsTag = root.find(\"definitions\");\r\n    if (definitionsTag) {\r\n      entity.definitions = definitionsTag.valueAsStringArray;\r\n    }\r\n\r\n    return entity;\r\n  }\r\n\r\n  /**\r\n   * Gets a short, human-readable name for this entity type.\r\n   */\r\n  get shortName(): string {\r\n    let name = this.identifier;\r\n\r\n    // Remove namespace prefix\r\n    const colonIndex = name.indexOf(\":\");\r\n    if (colonIndex >= 0) {\r\n      name = name.substring(colonIndex + 1);\r\n    }\r\n\r\n    // Convert snake_case to Title Case\r\n    return name\r\n      .split(\"_\")\r\n      .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\r\n      .join(\" \");\r\n  }\r\n\r\n  /**\r\n   * Checks if this is a hostile mob.\r\n   */\r\n  get isHostile(): boolean {\r\n    const hostileMobs = [\r\n      \"zombie\",\r\n      \"skeleton\",\r\n      \"creeper\",\r\n      \"spider\",\r\n      \"cave_spider\",\r\n      \"enderman\",\r\n      \"witch\",\r\n      \"slime\",\r\n      \"magma_cube\",\r\n      \"blaze\",\r\n      \"ghast\",\r\n      \"wither_skeleton\",\r\n      \"zombie_pigman\",\r\n      \"zombified_piglin\",\r\n      \"piglin\",\r\n      \"piglin_brute\",\r\n      \"hoglin\",\r\n      \"zoglin\",\r\n      \"drowned\",\r\n      \"husk\",\r\n      \"stray\",\r\n      \"phantom\",\r\n      \"pillager\",\r\n      \"vindicator\",\r\n      \"evoker\",\r\n      \"ravager\",\r\n      \"vex\",\r\n      \"warden\",\r\n      \"elder_guardian\",\r\n      \"guardian\",\r\n      \"shulker\",\r\n      \"endermite\",\r\n      \"silverfish\",\r\n      \"breeze\",\r\n      \"bogged\",\r\n    ];\r\n\r\n    const shortId = this.identifier.replace(\"minecraft:\", \"\");\r\n    return hostileMobs.includes(shortId);\r\n  }\r\n\r\n  /**\r\n   * Checks if this is a passive/friendly mob.\r\n   */\r\n  get isPassive(): boolean {\r\n    const passiveMobs = [\r\n      \"cow\",\r\n      \"pig\",\r\n      \"sheep\",\r\n      \"chicken\",\r\n      \"horse\",\r\n      \"donkey\",\r\n      \"mule\",\r\n      \"llama\",\r\n      \"wolf\",\r\n      \"cat\",\r\n      \"ocelot\",\r\n      \"parrot\",\r\n      \"rabbit\",\r\n      \"fox\",\r\n      \"bee\",\r\n      \"turtle\",\r\n      \"dolphin\",\r\n      \"squid\",\r\n      \"glow_squid\",\r\n      \"cod\",\r\n      \"salmon\",\r\n      \"tropical_fish\",\r\n      \"pufferfish\",\r\n      \"axolotl\",\r\n      \"goat\",\r\n      \"frog\",\r\n      \"tadpole\",\r\n      \"allay\",\r\n      \"camel\",\r\n      \"sniffer\",\r\n      \"armadillo\",\r\n      \"villager\",\r\n      \"wandering_trader\",\r\n      \"snow_golem\",\r\n      \"iron_golem\",\r\n      \"bat\",\r\n      \"mooshroom\",\r\n      \"panda\",\r\n      \"polar_bear\",\r\n      \"strider\",\r\n    ];\r\n\r\n    const shortId = this.identifier.replace(\"minecraft:\", \"\");\r\n    return passiveMobs.includes(shortId);\r\n  }\r\n\r\n  /**\r\n   * Checks if this is a player entity.\r\n   */\r\n  get isPlayer(): boolean {\r\n    return this.identifier === \"minecraft:player\";\r\n  }\r\n\r\n  /**\r\n   * Gets a category for this entity (for icon selection).\r\n   */\r\n  get category(): \"hostile\" | \"passive\" | \"player\" | \"item\" | \"other\" {\r\n    if (this.isPlayer) return \"player\";\r\n    if (this.isHostile) return \"hostile\";\r\n    if (this.isPassive) return \"passive\";\r\n    if (this.identifier === \"minecraft:item\") return \"item\";\r\n    return \"other\";\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport LevelKeyValue from \"./LevelKeyValue\";\r\nimport BlockPalette from \"./BlockPalette\";\r\nimport DataUtilities from \"../core/DataUtilities\";\r\nimport BlockVolume from \"./BlockVolume\";\r\nimport Block from \"./Block\";\r\nimport MCWorld from \"./MCWorld\";\r\nimport NbtBinary from \"./NbtBinary\";\r\nimport BlockActor from \"./blockActors/BlockActor\";\r\nimport GenericBlockActor from \"./blockActors/GenericBlockActor\";\r\nimport BlockActorFactory from \"./blockActors/BlockActorFactory\";\r\nimport Database from \"./Database\";\r\nimport ChunkEntity from \"./ChunkEntity\";\r\n\r\nconst CHUNK_X_SIZE = 16;\r\nconst CHUNK_Z_SIZE = 16;\r\nconst SUBCHUNK_Y_SIZE = 16;\r\n\r\nconst MAX_LEGACY_Y = 128;\r\n\r\n// Subchunk index constants for extended height worlds (Caves & Cliffs, 1.18+)\r\n// Stored subchunk indices use unsigned bytes: 0-63 for positive, 224-255 for negative (-32 to -1)\r\nconst MAX_POSITIVE_SUBCHUNK_STORED = 63; // Maximum positive subchunk index stored in LevelDB key\r\nconst MIN_NEGATIVE_SUBCHUNK_STORED = 224; // Minimum negative subchunk index (stored as unsigned byte)\r\nconst MAX_NEGATIVE_SUBCHUNK_STORED = 255; // Maximum negative subchunk index (stored as unsigned byte)\r\nconst NEGATIVE_SUBCHUNK_OFFSET = 224; // Offset to convert stored negative index to array index (224 \u2192 0)\r\nconst POSITIVE_SUBCHUNK_OFFSET = 32; // Offset to convert stored positive index to array index (0 \u2192 32)\r\nconst TOTAL_SUBCHUNK_SLOTS = 96; // Total subchunk array slots: 32 negative + 64 positive\r\n\r\nexport enum SubChunkFormatType {\r\n  paletteFrom1dot2dot13 = 0,\r\n  subChunk1dot0 = 1,\r\n}\r\n\r\nexport default class WorldChunk {\r\n  checksumKey: LevelKeyValue | undefined;\r\n  subChunks: LevelKeyValue[];\r\n  subChunkVersions: number[] | undefined;\r\n  chunkVersion: LevelKeyValue | undefined;\r\n  biomesAndElevation: LevelKeyValue | undefined;\r\n  finalizedState: LevelKeyValue | undefined;\r\n  entity: LevelKeyValue | undefined;\r\n  blockActorKeys: LevelKeyValue[] = [];\r\n  private _hasContent?: boolean = undefined;\r\n  private _blockActorsRelLoc: BlockActor[][][] = [];\r\n  private _blockActors: BlockActor[] = [];\r\n  private _entities: ChunkEntity[] = [];\r\n  private _entitiesEnsured: boolean = false;\r\n  pendingTicks: LevelKeyValue | undefined;\r\n  biomeState: LevelKeyValue | undefined;\r\n  blockTops: number[][] | undefined;\r\n  data3dRecord: LevelKeyValue | undefined;\r\n\r\n  blockActorsEnsured = false;\r\n  absoluteZeroY = -512;\r\n  chunkMinY: number = 0;\r\n  legacyVersion: number | undefined;\r\n  world: MCWorld;\r\n  legacyTerrainBytes: Uint8Array | undefined;\r\n\r\n  bitsPerBlock: number[];\r\n  blockDataStart: number[];\r\n  blockPalettes: (BlockPalette | undefined)[];\r\n  subChunkFormatType: SubChunkFormatType[];\r\n\r\n  actorDigests: string[];\r\n\r\n  auxBitsPerBlock: number[];\r\n  auxBlockDataStart: number[];\r\n  auxBlockPalettes: BlockPalette[];\r\n  pendingSubChunksToProcess: boolean[];\r\n\r\n  x: number = 0;\r\n  z: number = 0;\r\n  maxSubChunkIndex: number = -512; // set it very low\r\n  minSubChunkIndex: number = 512; // set it very high\r\n\r\n  get absoluteMinY() {\r\n    this._checkNotCleared();\r\n    return this.absoluteZeroY;\r\n  }\r\n\r\n  get minY() {\r\n    this._checkNotCleared();\r\n    return this.absoluteZeroY + this.minSubChunkIndex * 16;\r\n  }\r\n\r\n  get maxY() {\r\n    this._checkNotCleared();\r\n    return this.absoluteZeroY + (this.maxSubChunkIndex + 1) * 16;\r\n  }\r\n\r\n  get absoluteMaxY() {\r\n    return this.absoluteZeroY + this.subChunks.length * 16;\r\n  }\r\n\r\n  get blockActors() {\r\n    this._checkNotCleared();\r\n    if (!this.blockActorsEnsured) {\r\n      this.ensureBlockActors();\r\n    }\r\n\r\n    return this._blockActors;\r\n  }\r\n\r\n  /**\r\n   * Gets the entities in this chunk.\r\n   * Entities are parsed lazily from the entity LevelKeyValue on first access.\r\n   */\r\n  get entities(): ChunkEntity[] {\r\n    this._checkNotCleared();\r\n\r\n    if (!this._entitiesEnsured) {\r\n      this.ensureEntities();\r\n    }\r\n\r\n    return this._entities;\r\n  }\r\n\r\n  constructor(world: MCWorld, inX: number, inZ: number) {\r\n    this.world = world;\r\n    this.subChunks = [];\r\n    this.subChunkFormatType = [];\r\n    this.blockPalettes = [];\r\n    this.bitsPerBlock = [];\r\n    this.blockDataStart = [];\r\n    this.auxBlockPalettes = [];\r\n    this.auxBitsPerBlock = [];\r\n    this.auxBlockDataStart = [];\r\n    this.pendingSubChunksToProcess = [];\r\n    this.actorDigests = [];\r\n\r\n    for (let i = 0; i < TOTAL_SUBCHUNK_SLOTS; i++) {\r\n      this.pendingSubChunksToProcess[i] = false;\r\n    }\r\n\r\n    this.x = inX;\r\n    this.z = inZ;\r\n  }\r\n\r\n  _checkNotCleared() {\r\n    Log.assert(this._hasContent !== false, \"Chunk data has been cleared - cannot access data in \" + this.world.name);\r\n  }\r\n\r\n  /**\r\n   * Clears cached/parsed data to free memory while preserving the ability to re-parse later.\r\n   * Use this after processing a chunk to reduce memory usage.\r\n   * The raw LevelKeyValue data is preserved, allowing getBlock() to re-parse on demand.\r\n   */\r\n  clearCachedData() {\r\n    for (let i = 0; i < TOTAL_SUBCHUNK_SLOTS; i++) {\r\n      if (this.subChunks[i] !== undefined) {\r\n        this.blockDataStart[i] = -1;\r\n        this.bitsPerBlock[i] = -1;\r\n        this.blockPalettes[i] = undefined;\r\n\r\n        this.pendingSubChunksToProcess[i] = true;\r\n      }\r\n    }\r\n\r\n    this.blockTops = undefined;\r\n\r\n    this.blockActorsEnsured = false;\r\n    this._blockActorsRelLoc = [];\r\n    this._blockActors = [];\r\n\r\n    this._entitiesEnsured = false;\r\n    this._entities = [];\r\n    // Note: _hasContent remains true since raw LevelKeyValue data is preserved\r\n    // and can be re-parsed on demand via pendingSubChunksToProcess\r\n  }\r\n\r\n  /**\r\n   * Aggressively clears all chunk data including raw LevelKeyValue bytes.\r\n   * Call this when the chunk data is no longer needed and will not be re-accessed.\r\n   * WARNING: After calling this, the chunk cannot be re-parsed from its data.\r\n   */\r\n  clearAllData() {\r\n    this.clearCachedData();\r\n\r\n    // Mark as having no content since raw data is being cleared\r\n    this._hasContent = false;\r\n\r\n    // Clear subchunk LevelKeyValue data\r\n    for (let i = 0; i < this.subChunks.length; i++) {\r\n      if (this.subChunks[i] !== undefined) {\r\n        this.subChunks[i].clearValueData();\r\n      }\r\n    }\r\n\r\n    // Clear block actor key data\r\n    for (const blockActorKey of this.blockActorKeys) {\r\n      blockActorKey.clearValueData();\r\n    }\r\n\r\n    // Clear other LevelKeyValue data\r\n    if (this.entity) {\r\n      this.entity.clearValueData();\r\n    }\r\n    if (this.biomesAndElevation) {\r\n      this.biomesAndElevation.clearValueData();\r\n    }\r\n    if (this.pendingTicks) {\r\n      this.pendingTicks.clearValueData();\r\n    }\r\n    if (this.biomeState) {\r\n      this.biomeState.clearValueData();\r\n    }\r\n    if (this.chunkVersion) {\r\n      this.chunkVersion.clearValueData();\r\n    }\r\n    if (this.finalizedState) {\r\n      this.finalizedState.clearValueData();\r\n    }\r\n    if (this.checksumKey) {\r\n      this.checksumKey.clearValueData();\r\n    }\r\n\r\n    // Clear legacy terrain bytes\r\n    this.legacyTerrainBytes = undefined;\r\n  }\r\n\r\n  addActorDigest(digest: string) {\r\n    this.actorDigests.push(digest);\r\n  }\r\n\r\n  translateSubChunkIndex(storageSubChunk: number) {\r\n    // Valid range: 0-63 (positive subchunks) or 224-255 (negative subchunks stored as unsigned byte)\r\n    // Output range: 0-31 for negative subchunks (224-255), 32-95 for positive subchunks (0-63)\r\n    Log.assert(\r\n      (storageSubChunk >= 0 && storageSubChunk <= MAX_POSITIVE_SUBCHUNK_STORED) ||\r\n        (storageSubChunk >= MIN_NEGATIVE_SUBCHUNK_STORED && storageSubChunk <= MAX_NEGATIVE_SUBCHUNK_STORED),\r\n      \"Unexpected subchunk index (\" + storageSubChunk + \")\"\r\n    );\r\n\r\n    if (storageSubChunk >= MIN_NEGATIVE_SUBCHUNK_STORED) {\r\n      return storageSubChunk - NEGATIVE_SUBCHUNK_OFFSET; // 224\u21920, 255\u219231 (represents Y subchunks -32 to -1)\r\n    }\r\n\r\n    return storageSubChunk + POSITIVE_SUBCHUNK_OFFSET; // 0\u219232, 63\u219295 (represents Y subchunks 0 to 63)\r\n  }\r\n\r\n  processSubChunk(index: number) {\r\n    if (this.pendingSubChunksToProcess[index] === true) {\r\n      this.pendingSubChunksToProcess[index] = false;\r\n      this.parseSubChunk(index);\r\n    }\r\n  }\r\n\r\n  addKeyValue(keyValue: LevelKeyValue) {\r\n    this._hasContent = true;\r\n    let keyBytes = keyValue.keyBytes;\r\n    let wasSuperceded = false; // Track if this update supercedes existing data\r\n    let isSignificantUpdate = false; // Track if this is a significant data addition (subchunk, blockTops, etc.)\r\n\r\n    if (keyBytes) {\r\n      const dimExtensionBytes = keyBytes.length >= 13 ? 4 : 0;\r\n\r\n      const val = keyBytes[8 + dimExtensionBytes];\r\n\r\n      // disabling the \"duplicate unexpected versions\" since this assumption is violated in C&C R17 world\r\n\r\n      switch (val) {\r\n        case 43:\r\n          Log.assert(\r\n            keyValue.value !== undefined && keyValue.value.length > 512,\r\n            \"Unexpected length for a type 43 record.\"\r\n          );\r\n\r\n          // Data3D contains a heightmap with 256 int16 values encoding block top heights.\r\n          // Previously this code set blockTops from these values using an offset (val - 65),\r\n          // but the offset was not verified and described as \"arbitrary\". In practice, when\r\n          // data3d arrives AFTER subchunk data (tag 47) in the LevelDB log \u2014 which is the\r\n          // typical write order \u2014 it would overwrite the cleared blockTops, preventing\r\n          // determineBlockTops() from computing heights from actual parsed subchunk data.\r\n          // This caused incorrect heights and missing blocks in the world map.\r\n          //\r\n          // We now store the raw data3d record for reference but do NOT set blockTops,\r\n          // so getTopBlockY() always calls determineBlockTops() which computes correct\r\n          // heights from the actual subchunk block palette data.\r\n          if (keyValue.value && keyValue.value.length >= 512) {\r\n            this.data3dRecord = keyValue;\r\n          }\r\n\r\n          break;\r\n\r\n        case 115: // not sure what chunk #115 is, or if this is a parsing bug. observed to be one byte with a value of 0\r\n          // Log.assert(false, \"Unexpected type 115 record.\");\r\n          break;\r\n\r\n        case 118: // 118 = legacy version\r\n          Log.assert(\r\n            keyValue.value !== undefined && (keyValue.value.length === 0 || keyValue.value.length === 1),\r\n            \"Unexpected type 118 record.\"\r\n          );\r\n\r\n          if (keyValue.value && keyValue.value.length === 1) {\r\n            if (this.legacyVersion !== undefined) {\r\n              wasSuperceded = true;\r\n            }\r\n            this.legacyVersion = keyValue.value[0];\r\n          } else if (keyValue.value && keyValue.value.length === 0) {\r\n            this.legacyVersion = undefined;\r\n          }\r\n          break;\r\n\r\n        case 44: // version\r\n          if (this.chunkVersion !== undefined) {\r\n            wasSuperceded = true;\r\n          }\r\n          this.chunkVersion = keyValue;\r\n          break;\r\n\r\n        case 45: // data2d\r\n          if (this.biomesAndElevation !== undefined) {\r\n            wasSuperceded = true;\r\n          }\r\n          this.biomesAndElevation = keyValue;\r\n          break;\r\n\r\n        case 46: // data2d legacy\r\n          // Log.assert(false, \"Data 2D legacy (NYI).\");\r\n          break;\r\n\r\n        case 47: // subchunk prefix\r\n          let subChunkIndex = this.translateSubChunkIndex(keyBytes[9 + dimExtensionBytes]);\r\n\r\n          if (subChunkIndex < 0) {\r\n            Log.fail(\"Unexpected sub chunk index.\");\r\n            return;\r\n          }\r\n\r\n          if (this.subChunks[subChunkIndex] !== undefined) {\r\n            // This subchunk is being superceded by newer data\r\n            wasSuperceded = true;\r\n            // Clear cached parsed data for this subchunk\r\n            this.blockDataStart[subChunkIndex] = -1;\r\n            this.bitsPerBlock[subChunkIndex] = -1;\r\n            this.blockPalettes[subChunkIndex] = undefined;\r\n          }\r\n\r\n          // Always clear blockTops when adding/updating subchunk data\r\n          // so it gets recalculated with the new data\r\n          this.blockTops = undefined;\r\n\r\n          if (!keyValue.value || keyValue.value.length <= 0) {\r\n            Log.assert(this.subChunks[subChunkIndex] === undefined, \"Empty subchunk defined.\");\r\n            return;\r\n          }\r\n\r\n          this.subChunks[subChunkIndex] = keyValue;\r\n          this.maxSubChunkIndex = Math.max(this.maxSubChunkIndex, subChunkIndex);\r\n          this.minSubChunkIndex = Math.min(this.minSubChunkIndex, subChunkIndex);\r\n          this.pendingSubChunksToProcess[subChunkIndex] = true;\r\n          isSignificantUpdate = true; // Subchunk data affects block rendering\r\n          break;\r\n\r\n        case 48: // legacy terrain\r\n          const bytes = keyValue.value;\r\n\r\n          if (bytes && bytes.length > 0) {\r\n            Log.assert(bytes.length === 83200, \"LegacyTerrain record should be 83,200 bytes\");\r\n            if (this.legacyTerrainBytes !== undefined) {\r\n              wasSuperceded = true;\r\n            }\r\n            this.legacyTerrainBytes = bytes;\r\n            isSignificantUpdate = true; // Legacy terrain data affects block rendering\r\n          }\r\n          break;\r\n\r\n        case 49: // block entity\r\n          this.blockActorKeys.push(keyValue);\r\n          this.blockActorsEnsured = false;\r\n          break;\r\n\r\n        case 50: // entity\r\n          //       Log.assert(!this.entity, \"Unexpected multiple entities.\");\r\n          if (this.entity !== undefined) {\r\n            wasSuperceded = true;\r\n          }\r\n          this.entity = keyValue;\r\n          break;\r\n\r\n        case 51: // pending ticks\r\n          //Log.assert(!this.pendingTicks, \"Unexpected multiple pending ticks.\");\r\n          this.pendingTicks = keyValue;\r\n          break;\r\n\r\n        case 52: // legacy block extra data\r\n          // Log.assert(false, \"Legacy block extra data - NYI\");\r\n          break;\r\n\r\n        case 53: // biome state\r\n          //Log.assert(!this.biomeState, \"Unexpected multiple biome states.\");\r\n          if (this.biomeState !== undefined) {\r\n            wasSuperceded = true;\r\n          }\r\n          this.biomeState = keyValue;\r\n          break;\r\n\r\n        case 54: // finalized state\r\n          //  Log.assert(!this.finalizedState, \"Unexpected multiple states.\");\r\n          this.finalizedState = keyValue;\r\n          break;\r\n        case 55: // conversion data. data that the converter provides, that are used at runtime for things like blending. no longer used?\r\n          break;\r\n        case 56: // EDU border blocks?\r\n          break;\r\n        case 57: // spawn areas (hard coded spawners)\r\n          break;\r\n        case 58: // random tick\r\n          break;\r\n\r\n        case 59: // check sums\r\n          // Log.assert(!this.checksumKey, \"Unexpected multiple states.\");\r\n          this.checksumKey = keyValue;\r\n          break;\r\n\r\n        case 60: // generation seed\r\n          break;\r\n\r\n        case 61: // generated pre caves and cliffs blending (unused)\r\n          break;\r\n\r\n        case 62: // blending biome height (unused)\r\n          break;\r\n\r\n        case 63: // metadata hash\r\n          break;\r\n\r\n        case 64: // blending data\r\n          break;\r\n\r\n        case 65: // actor digest version\r\n          break;\r\n\r\n        case 119: // ??\r\n          //Log.assert(false, \"Unexpected type 119 data.\");\r\n          break;\r\n        default:\r\n          Log.debugAlert(\"Unsupported chunk type: \" + val);\r\n      }\r\n    }\r\n\r\n    // If data was superceded or significant new data was added, notify the world so map tiles can be refreshed\r\n    // This handles both: (1) old data being replaced by new, and (2) new data arriving for chunks that\r\n    // may have already been rendered as empty/air\r\n    // Only notify if the world has finished initial loading - otherwise we'd spam notifications\r\n    if (wasSuperceded || isSignificantUpdate) {\r\n      this.world.notifyChunkUpdated(this);\r\n    }\r\n  }\r\n\r\n  clearKeyValue(keyBytes: string) {\r\n    if (keyBytes) {\r\n      const dimExtensionBytes = keyBytes.length > 18 || keyBytes.length === 13 || keyBytes.length === 14 ? 4 : 0;\r\n\r\n      const val = keyBytes.charCodeAt(8 + dimExtensionBytes);\r\n\r\n      // disabling the \"duplicate unexpected versions\" since this assumption is violated in C&C R17 world\r\n\r\n      switch (val) {\r\n        case 43: // not sure what chunk #43 is, or if this is a parsing bug. observed to be 578 bytes. \"data3d\"\r\n          break;\r\n        case 115: // not sure what chunk #61 is, or if this is a parsing bug. observed to be one byte with a value of 0\r\n          break;\r\n\r\n        case 118: // 118 = legacy version\r\n        case 44: // version\r\n          //    Log.assert(!this.chunkVersion, \"Unexpected multiple chunk versions.\");\r\n          this.chunkVersion = undefined;\r\n          break;\r\n\r\n        case 45: // data2d\r\n          //  Log.assert(!this.biomesAndElevation, \"Unexpected multiple biomes and elevations.\");\r\n          this.biomesAndElevation = undefined;\r\n          break;\r\n\r\n        case 46: // data2d legacy\r\n          break;\r\n\r\n        case 47: // subchunk prefix\r\n          break;\r\n\r\n        case 48: // legacy terrain\r\n          this.legacyTerrainBytes = undefined;\r\n          break;\r\n\r\n        case 49: // block entity\r\n          break;\r\n\r\n        case 50: // entity\r\n          //       Log.assert(!this.entity, \"Unexpected multiple entities.\");\r\n          this.entity = undefined;\r\n          break;\r\n\r\n        case 51: // pending ticks\r\n          //Log.assert(!this.pendingTicks, \"Unexpected multiple pending ticks.\");\r\n          this.pendingTicks = undefined;\r\n          break;\r\n\r\n        case 52: // legacy block extra data\r\n          break;\r\n        case 53: // biome state\r\n          //Log.assert(!this.biomeState, \"Unexpected multiple biome states.\");\r\n          this.biomeState = undefined;\r\n          break;\r\n\r\n        case 54: // finalized state\r\n          //  Log.assert(!this.finalizedState, \"Unexpected multiple states.\");\r\n          this.finalizedState = undefined;\r\n          break;\r\n        case 55: // conversion data. data that the converter provides, that are used at runtime for things like blending. no longer used?\r\n          break;\r\n        case 56: // EDU border blocks?\r\n          break;\r\n        case 57: // spawn areas (hard coded spawners)\r\n          break;\r\n        case 58: // random tick\r\n          break;\r\n        case 59: // check sums\r\n          // Log.assert(!this.checksumKey, \"Unexpected multiple states.\");\r\n          this.checksumKey = undefined;\r\n          break;\r\n\r\n        case 60: // generation seed\r\n          break;\r\n        case 61: // generated pre caves and cliffs blending (unused)\r\n          break;\r\n        case 62: // blending biome height (unused)\r\n          break;\r\n\r\n        case 63: // metadata hash\r\n          break;\r\n\r\n        case 64: // blending data\r\n          break;\r\n        case 65: // actor digest version\r\n          break;\r\n        case 72: // actor digest version\r\n          break;\r\n\r\n        case 119: // ??\r\n          break;\r\n        default:\r\n          throw new Error(\"Unsupported chunk type: \" + val);\r\n      }\r\n    }\r\n  }\r\n\r\n  ensureBlockActors() {\r\n    if (!this._blockActorsRelLoc || this.blockActorsEnsured) {\r\n      return;\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    this._blockActorsRelLoc = [];\r\n    this._blockActors = [];\r\n\r\n    for (const keyValue of this.blockActorKeys) {\r\n      if (keyValue.value && keyValue.value.length > 0) {\r\n        const tag = new NbtBinary();\r\n\r\n        tag.context = this.world.name + \" chunk at x:\" + this.x * 16 + \" z:\" + this.z * 16;\r\n\r\n        try {\r\n          tag.fromBinary(keyValue.value, true, false, 0, true, true);\r\n        } catch (e) {\r\n          Log.error(\"Could not parse a block actor.\");\r\n        }\r\n\r\n        if (tag.roots) {\r\n          for (let i = 0; i < tag.roots.length; i++) {\r\n            const ba = new GenericBlockActor(tag.roots[i]);\r\n\r\n            if (\r\n              ba.x !== undefined &&\r\n              ba.z !== undefined &&\r\n              ba.y !== undefined &&\r\n              ba.x >= this.x * 16 &&\r\n              ba.x < (this.x + 1) * 16 &&\r\n              ba.z >= this.z * 16 &&\r\n              ba.z < (this.z + 1) * 16\r\n            ) {\r\n              let actorRelX = ba.x % 16;\r\n              let actorRelZ = ba.z % 16;\r\n\r\n              if (actorRelX < 0) {\r\n                actorRelX = 16 + actorRelX;\r\n              }\r\n\r\n              if (actorRelZ < 0) {\r\n                actorRelZ = 16 + actorRelZ;\r\n              }\r\n\r\n              if (ba.id) {\r\n                const specificBa = BlockActorFactory.create(ba.id, tag.roots[i]);\r\n\r\n                if (specificBa) {\r\n                  specificBa.load();\r\n                  if (!this._blockActorsRelLoc[actorRelX]) {\r\n                    this._blockActorsRelLoc[actorRelX] = [];\r\n                  }\r\n                  if (!this._blockActorsRelLoc[actorRelX][ba.y]) {\r\n                    this._blockActorsRelLoc[actorRelX][ba.y] = [];\r\n                  }\r\n\r\n                  this._blockActorsRelLoc[actorRelX][ba.y][actorRelZ] = specificBa;\r\n\r\n                  if (specificBa.x !== undefined && specificBa.y !== undefined && specificBa.z !== undefined) {\r\n                    //       this.removeBlockActorAtLoc(specificBa.x, specificBa.y, specificBa.z);\r\n                  }\r\n\r\n                  this._blockActors.push(specificBa);\r\n                }\r\n\r\n                Log.assert(specificBa !== undefined, \"Could not find an actor implementation for '\" + ba.id + \"'\");\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.blockActorsEnsured = true;\r\n  }\r\n\r\n  /**\r\n   * Parses entity data from the chunk's entity LevelKeyValue.\r\n   * This handles legacy entity storage (pre-1.18.30) where entity data\r\n   * is stored as concatenated NBT compound tags per chunk (type 50).\r\n   *\r\n   * Modern worlds (1.18.30+) store actors individually via actorprefix keys,\r\n   * which are parsed into MCWorld.actorsById instead.\r\n   *\r\n   * See: https://learn.microsoft.com/en-us/minecraft/creator/documents/actorstorage\r\n   */\r\n  ensureEntities() {\r\n    if (this._entitiesEnsured) {\r\n      return;\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    this._entities = [];\r\n    this._entitiesEnsured = true;\r\n\r\n    if (!this.entity || !this.entity.value || this.entity.value.length === 0) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const entityNbt = new NbtBinary();\r\n      entityNbt.context = this.world.name + \" entities at chunk x:\" + this.x + \" z:\" + this.z;\r\n      entityNbt.fromBinary(this.entity.value, true, false, 0, true, true);\r\n\r\n      if (entityNbt.roots) {\r\n        for (const root of entityNbt.roots) {\r\n          // Each root is an entity compound tag - parse it into a ChunkEntity\r\n          const entity = ChunkEntity.fromNbtTag(root);\r\n          if (entity) {\r\n            this._entities.push(entity);\r\n          }\r\n        }\r\n\r\n        if (this._entities.length > 0) {\r\n          Log.verbose(\"Parsed \" + this._entities.length + \" legacy entities in chunk x:\" + this.x + \" z:\" + this.z);\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.error(\"Could not parse legacy entities for chunk x:\" + this.x + \" z:\" + this.z + \" - \" + e);\r\n    }\r\n  }\r\n\r\n  removeBlockActorAtLoc(x: number, y: number, z: number) {\r\n    this._checkNotCleared();\r\n\r\n    const newBlockActors = [];\r\n\r\n    for (const blockActor of this._blockActors) {\r\n      if (blockActor.x !== x || blockActor.y !== y || blockActor.z !== z) {\r\n        newBlockActors.push(blockActor);\r\n      }\r\n    }\r\n\r\n    this._blockActors = newBlockActors;\r\n  }\r\n\r\n  getSubChunkCube(subChunkId: number) {\r\n    this._checkNotCleared();\r\n\r\n    const bc = new BlockVolume();\r\n\r\n    bc.maxX = CHUNK_X_SIZE;\r\n    bc.maxY = SUBCHUNK_Y_SIZE;\r\n    bc.maxZ = CHUNK_Z_SIZE;\r\n\r\n    this.fillCube(bc, 0, 0, 0, 16, 16, 16, 0, subChunkId * SUBCHUNK_Y_SIZE, 0);\r\n\r\n    return bc;\r\n  }\r\n\r\n  fillCubeLegacy(\r\n    cube: BlockVolume,\r\n    cubeX: number,\r\n    cubeY: number,\r\n    cubeZ: number,\r\n    maxCubeX: number,\r\n    maxCubeY: number,\r\n    maxCubeZ: number,\r\n    internalOffsetX: number,\r\n    internalOffsetY: number,\r\n    internalOffsetZ: number\r\n  ) {\r\n    Log.assert(\r\n      cubeX >= 0 &&\r\n        cubeY >= 0 &&\r\n        cubeZ >= 0 &&\r\n        maxCubeX > cubeX &&\r\n        maxCubeY > cubeY &&\r\n        maxCubeZ > cubeZ &&\r\n        internalOffsetX < CHUNK_X_SIZE &&\r\n        internalOffsetZ < CHUNK_Z_SIZE &&\r\n        this.legacyTerrainBytes !== undefined,\r\n      \"Fill cube legacy not within bounds.\"\r\n    );\r\n\r\n    if (!this.legacyTerrainBytes) {\r\n      return;\r\n    }\r\n\r\n    for (let iX = cubeX; iX < maxCubeX && iX - cubeX + internalOffsetX < CHUNK_X_SIZE; iX++) {\r\n      const inChunkX = iX - cubeX + internalOffsetX;\r\n      const plane = cube.x(iX);\r\n\r\n      for (let iY = cubeY; iY < maxCubeY && iY - cubeY + internalOffsetY < 128; iY++) {\r\n        const blockLine = plane.y(iY);\r\n        const inChunkY = iY - cubeY + internalOffsetY;\r\n\r\n        for (let iZ = cubeZ; iZ < maxCubeZ && iZ - cubeZ + internalOffsetZ < CHUNK_Z_SIZE; iZ++) {\r\n          const inChunkZ = iZ - cubeZ + internalOffsetZ;\r\n\r\n          const byte = this.legacyTerrainBytes[inChunkX * 128 * 16 + inChunkZ * 128 + inChunkY];\r\n\r\n          if (byte) {\r\n            blockLine.z(iZ).copyFrom(Block.fromLegacyId(byte));\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  fillCube(\r\n    cube: BlockVolume,\r\n    cubeX: number,\r\n    cubeY: number,\r\n    cubeZ: number,\r\n    maxCubeX: number,\r\n    maxCubeY: number,\r\n    maxCubeZ: number,\r\n    internalOffsetX: number,\r\n    internalOffsetY: number,\r\n    internalOffsetZ: number\r\n  ) {\r\n    if (this.legacyTerrainBytes) {\r\n      this.fillCubeLegacy(\r\n        cube,\r\n        cubeX,\r\n        cubeY,\r\n        cubeZ,\r\n        maxCubeX,\r\n        maxCubeY,\r\n        maxCubeZ,\r\n        internalOffsetX,\r\n        internalOffsetY,\r\n        internalOffsetZ\r\n      );\r\n      return;\r\n    }\r\n\r\n    Log.assert(\r\n      cubeX >= 0 &&\r\n        cubeY >= 0 &&\r\n        cubeZ >= 0 &&\r\n        maxCubeX > cubeX &&\r\n        maxCubeY > cubeY &&\r\n        maxCubeZ > cubeZ &&\r\n        internalOffsetX < CHUNK_X_SIZE &&\r\n        internalOffsetZ < CHUNK_Z_SIZE,\r\n      \"Fill cube not within bounds.\"\r\n    );\r\n\r\n    const zHeight = maxCubeY - cubeY;\r\n    const initialChunkId = this.getSubChunkIndexFromY(internalOffsetY);\r\n    const finalChunkId = this.getSubChunkIndexFromY(internalOffsetY + zHeight);\r\n\r\n    Log.assert(initialChunkId >= 0 && finalChunkId >= initialChunkId, \"WCFC\");\r\n\r\n    for (let i = 0; i <= finalChunkId - initialChunkId; i++) {\r\n      const subChunkId = initialChunkId + i;\r\n      const subChunk = this.subChunks[subChunkId];\r\n\r\n      if (subChunk) {\r\n        const subChunkYExtent = this.getStartYFromSubChunkIndex(subChunkId + 1);\r\n\r\n        let cubeYStartForThisSubChunk = 0;\r\n\r\n        if (i >= 1) {\r\n          cubeYStartForThisSubChunk = 16 - ((Math.abs(this.absoluteZeroY) + internalOffsetY) % 16);\r\n        }\r\n        if (i >= 2) {\r\n          cubeYStartForThisSubChunk += (i - 1) * 16;\r\n        }\r\n\r\n        if (this.subChunkFormatType[subChunkId] === SubChunkFormatType.subChunk1dot0) {\r\n          const blockTemplates: Block[] = [];\r\n          const bytes = subChunk.value;\r\n          if (bytes) {\r\n            Log.assert(\r\n              bytes.length === 10251 || bytes.length === 10241 || bytes.length === 6145,\r\n              \"Expected 6145 or 10241 bytes for a legacy subchunk. (\" + bytes.length + \")\"\r\n            );\r\n\r\n            for (let i = 0; i < 4096; i++) {\r\n              let blockTypeIndex = bytes[1 + i];\r\n              let blockAuxIndex = bytes[4097 + i];\r\n\r\n              let templateIndex = blockTypeIndex * 256 + blockAuxIndex;\r\n\r\n              if (!blockTemplates[templateIndex]) {\r\n                const blockType = Database.getBlockTypeByLegacyId(blockTypeIndex);\r\n\r\n                if (!blockType || !blockType.id) {\r\n                  throw new Error(\"Expected a block type for index \" + blockTypeIndex);\r\n                }\r\n\r\n                const block = new Block(\"minecraft:\" + blockType.id);\r\n\r\n                block.data = blockAuxIndex;\r\n\r\n                blockTemplates[templateIndex] = block;\r\n              }\r\n\r\n              cube\r\n                .x(i % 16)\r\n                .y(Math.floor(i / 256))\r\n                .z(Math.floor(i / 16))\r\n                .copyFrom(blockTemplates[templateIndex]);\r\n            }\r\n          }\r\n        } else {\r\n          const subChunkBitsPerBlock = this.bitsPerBlock[subChunkId];\r\n          const bpw = Math.floor(32 / subChunkBitsPerBlock);\r\n\r\n          const subChunkBlockDataStart = this.blockDataStart[subChunkId];\r\n\r\n          const bytes = subChunk.value;\r\n          const blockPalette = this.blockPalettes[subChunkId];\r\n\r\n          if (bytes && blockPalette) {\r\n            for (let iX = cubeX; iX < maxCubeX && iX - cubeX + internalOffsetX < CHUNK_X_SIZE; iX++) {\r\n              const inChunkX = iX - cubeX + internalOffsetX;\r\n              const plane = cube.x(iX);\r\n\r\n              const blockIndexXStart = inChunkX * 256;\r\n\r\n              for (\r\n                let iY = cubeY + cubeYStartForThisSubChunk;\r\n                iY < maxCubeY && iY - cubeY + internalOffsetY < subChunkYExtent;\r\n                iY++\r\n              ) {\r\n                const inSubChunkY = (Math.abs(this.absoluteZeroY) + (iY - cubeY + internalOffsetY)) % 16;\r\n\r\n                Log.assert(inSubChunkY >= 0, \"WCFCA\");\r\n\r\n                const blockLine = plane.y(iY);\r\n\r\n                for (let iZ = cubeZ; iZ < maxCubeZ && iZ - cubeZ + internalOffsetZ < CHUNK_Z_SIZE; iZ++) {\r\n                  const inChunkZ = iZ - cubeZ + internalOffsetZ;\r\n\r\n                  const blockWordByteStart =\r\n                    subChunkBlockDataStart + Math.floor((blockIndexXStart + inChunkZ * 16 + inSubChunkY) / bpw) * 4;\r\n\r\n                  const blocksIn = (blockIndexXStart + inChunkZ * 16 + inSubChunkY) % bpw;\r\n\r\n                  let word = DataUtilities.getUnsignedInteger(\r\n                    bytes[blockWordByteStart],\r\n                    bytes[blockWordByteStart + 1],\r\n                    bytes[blockWordByteStart + 2],\r\n                    bytes[blockWordByteStart + 3],\r\n                    true\r\n                  );\r\n\r\n                  word >>>= subChunkBitsPerBlock * blocksIn;\r\n\r\n                  let value = 0;\r\n\r\n                  for (let i = 0; i < subChunkBitsPerBlock; i++) {\r\n                    let inc = word % 2;\r\n                    inc <<= i;\r\n                    value += inc;\r\n                    word >>>= 1;\r\n                  }\r\n\r\n                  if (blockPalette.blocks.length > 0) {\r\n                    Log.assert(value < blockPalette.blocks.length, \"Unexpected block index.\");\r\n\r\n                    const block = blockPalette.blocks[value];\r\n\r\n                    if (block) {\r\n                      blockLine.z(iZ).copyFrom(block);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getTopBlockY(x: number, z: number) {\r\n    if (!this.blockTops) {\r\n      this.determineBlockTops();\r\n    }\r\n\r\n    if (!this.blockTops) {\r\n      throw new Error(\"Unexpected block top error.\");\r\n    }\r\n\r\n    return this.blockTops[x][z];\r\n  }\r\n\r\n  getTopBlock(x: number, z: number) {\r\n    if (!this.blockTops) {\r\n      this.determineBlockTops();\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    if (!this.blockTops) {\r\n      throw new Error(\"Unexpected block top error.\");\r\n    }\r\n\r\n    return this.getBlock(x, this.blockTops[x][z], z);\r\n  }\r\n\r\n  _getBlockLegacy(x: number, y: number, z: number) {\r\n    if (!this.legacyTerrainBytes || z < 0 || x < 0 || y < 0) {\r\n      throw new Error();\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    const byte = this.legacyTerrainBytes[x * 128 * 16 + z * 128 + y];\r\n\r\n    return Block.fromLegacyId(byte);\r\n  }\r\n\r\n  _getBlockLegacyList() {\r\n    if (!this.legacyTerrainBytes) {\r\n      throw new Error();\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    const blocks: Block[] = [];\r\n\r\n    for (let y = 0; y < MAX_LEGACY_Y; y++) {\r\n      for (let z = 0; z < 16; z++) {\r\n        for (let x = 0; x < 16; x++) {\r\n          const byte = this.legacyTerrainBytes[x * 128 * 16 + z * 128 + y];\r\n\r\n          blocks.push(Block.fromLegacyId(byte));\r\n        }\r\n      }\r\n    }\r\n\r\n    return blocks;\r\n  }\r\n\r\n  doesBlockPaletteExist(y: number) {\r\n    if (this.legacyTerrainBytes) {\r\n      return true;\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    const subChunkId = this.getSubChunkIndexFromY(y);\r\n\r\n    const blockPalettes = this.blockPalettes[subChunkId];\r\n\r\n    if (blockPalettes) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  // x and z should be between 0 and 15\r\n  getBlock(x: number, y: number, z: number) {\r\n    if (y < this.absoluteZeroY) {\r\n      return undefined;\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    Log.assert(x >= 0 && x < 16 && z >= 0 && z < 16, \"Retrieving an out-of-range block from a chunk.\");\r\n\r\n    if (this.legacyTerrainBytes) {\r\n      return this._getBlockLegacy(x, y, z);\r\n    }\r\n\r\n    const subChunkId = this.getSubChunkIndexFromY(y);\r\n\r\n    if (this.pendingSubChunksToProcess[subChunkId] === true) {\r\n      this.processSubChunk(subChunkId);\r\n    }\r\n\r\n    // legacy subchunk format 1.0 -> 1.2.13\r\n    if (this.subChunkFormatType[subChunkId] === SubChunkFormatType.subChunk1dot0) {\r\n      const subChunk = this.subChunks[subChunkId];\r\n\r\n      if (subChunk === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      const bytes = subChunk.value;\r\n      if (bytes) {\r\n        const inSubChunkY = y - this.getStartYFromSubChunkIndex(subChunkId);\r\n\r\n        Log.assert(inSubChunkY >= 0 && inSubChunkY < 16, \"Unexpected Y for a sub chunk (\" + inSubChunkY + \")\");\r\n        Log.assert(\r\n          bytes.length === 10251 || bytes.length === 10241 || bytes.length === 6145,\r\n          \"1.00 subchunk format should be 6145 or 10241 bytes. (\" + bytes.length + \")\"\r\n        );\r\n\r\n        const blockTypeIndex = bytes[1 + (inSubChunkY + z * 16 + x * 256)];\r\n        const blockAuxIndex = bytes[4097 + (inSubChunkY + z * 16 + x * 256)];\r\n\r\n        const baseType = Database.getBlockTypeByLegacyId(blockTypeIndex);\r\n        Log.assertDefined(baseType.id);\r\n        // Use air for unknown block types to gracefully handle missing legacy IDs\r\n        const blockId = baseType?.id ? \"minecraft:\" + baseType.id : \"minecraft:air\";\r\n        const block = new Block(blockId);\r\n        block.data = blockAuxIndex;\r\n\r\n        return block;\r\n      }\r\n\r\n      return undefined;\r\n    }\r\n\r\n    const index = this.getBlockPaletteIndex(x, y, z);\r\n\r\n    if (index === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const blockPalettes = this.blockPalettes[subChunkId];\r\n\r\n    if (!blockPalettes) {\r\n      return undefined;\r\n    }\r\n\r\n    const blocks = blockPalettes.blocks;\r\n\r\n    Log.assert(index < blocks.length, \"Unexpected block index\");\r\n\r\n    return blocks[index];\r\n  }\r\n\r\n  /**\r\n   * Returns a count of block types in this chunk without allocating Block objects.\r\n   * This is much more memory-efficient than getBlockList() for statistical analysis.\r\n   * @returns A Map of block type names to their counts in this chunk\r\n   */\r\n  countBlockTypes(): Map<string, number> {\r\n    const typeCounts = new Map<string, number>();\r\n\r\n    if (this.legacyTerrainBytes) {\r\n      // Legacy terrain - count block type IDs directly\r\n      for (let i = 0; i < this.legacyTerrainBytes.length && i < 16 * 16 * MAX_LEGACY_Y; i++) {\r\n        const byte = this.legacyTerrainBytes[i];\r\n        if (byte !== 0) {\r\n          const blockType = Database.getBlockTypeByLegacyId(byte);\r\n          if (blockType && blockType.id) {\r\n            const typeName = \"minecraft:\" + blockType.id;\r\n            typeCounts.set(typeName, (typeCounts.get(typeName) || 0) + 1);\r\n          }\r\n        }\r\n      }\r\n      return typeCounts;\r\n    }\r\n\r\n    for (let subChunkId = this.minSubChunkIndex; subChunkId <= this.maxSubChunkIndex; subChunkId++) {\r\n      const subChunk = this.subChunks[subChunkId];\r\n\r\n      if (subChunk !== undefined) {\r\n        if (this.pendingSubChunksToProcess[subChunkId] === true) {\r\n          this.processSubChunk(subChunkId);\r\n        }\r\n\r\n        if (this.subChunkFormatType[subChunkId] === SubChunkFormatType.subChunk1dot0) {\r\n          // Legacy subchunk format - count from raw bytes\r\n          const bytes = subChunk.value;\r\n          if (bytes && bytes.length >= 4097) {\r\n            for (let i = 0; i < 4096; i++) {\r\n              const blockTypeIndex = bytes[1 + i];\r\n              if (blockTypeIndex !== 0) {\r\n                const blockType = Database.getBlockTypeByLegacyId(blockTypeIndex);\r\n                if (blockType && blockType.id) {\r\n                  const typeName = \"minecraft:\" + blockType.id;\r\n                  typeCounts.set(typeName, (typeCounts.get(typeName) || 0) + 1);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        } else {\r\n          // Modern palette-based format - count palette entries efficiently\r\n          const blockPalette = this.blockPalettes[subChunkId];\r\n          if (blockPalette && blockPalette.blocks.length > 0) {\r\n            // Count how many times each palette index appears\r\n            const paletteCounts = new Map<number, number>();\r\n            const bytes = subChunk.value;\r\n\r\n            if (bytes) {\r\n              const subChunkBitsPerBlock = this.bitsPerBlock[subChunkId];\r\n              const bpw = Math.floor(32 / subChunkBitsPerBlock);\r\n              const blockDataStart = this.blockDataStart[subChunkId];\r\n\r\n              // Iterate through all 4096 blocks in this subchunk\r\n              for (let blockIndex = 0; blockIndex < 4096; blockIndex++) {\r\n                const byteStart = blockDataStart + Math.floor(blockIndex / bpw) * 4;\r\n                const blocksIn = blockIndex % bpw;\r\n\r\n                let word = DataUtilities.getUnsignedInteger(\r\n                  bytes[byteStart],\r\n                  bytes[byteStart + 1],\r\n                  bytes[byteStart + 2],\r\n                  bytes[byteStart + 3],\r\n                  true\r\n                );\r\n\r\n                word >>>= subChunkBitsPerBlock * blocksIn;\r\n\r\n                let paletteIndex = 0;\r\n                for (let i = 0; i < subChunkBitsPerBlock; i++) {\r\n                  let inc = word % 2;\r\n                  inc <<= i;\r\n                  paletteIndex += inc;\r\n                  word >>>= 1;\r\n                }\r\n\r\n                paletteCounts.set(paletteIndex, (paletteCounts.get(paletteIndex) || 0) + 1);\r\n              }\r\n\r\n              // Convert palette counts to type counts\r\n              for (const [paletteIndex, count] of paletteCounts) {\r\n                if (paletteIndex < blockPalette.blocks.length) {\r\n                  const block = blockPalette.blocks[paletteIndex];\r\n                  if (block && block.typeName) {\r\n                    typeCounts.set(block.typeName, (typeCounts.get(block.typeName) || 0) + count);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return typeCounts;\r\n  }\r\n\r\n  getBlockList() {\r\n    if (this.legacyTerrainBytes) {\r\n      return this._getBlockLegacyList();\r\n    }\r\n\r\n    const blocks = [];\r\n    for (let subChunkId = this.minSubChunkIndex; subChunkId <= this.maxSubChunkIndex; subChunkId++) {\r\n      const subChunk = this.subChunks[subChunkId];\r\n\r\n      if (subChunk !== undefined) {\r\n        if (this.pendingSubChunksToProcess[subChunkId] === true) {\r\n          this.processSubChunk(subChunkId);\r\n        }\r\n\r\n        if (this.subChunkFormatType[subChunkId] === SubChunkFormatType.subChunk1dot0) {\r\n          const blockTemplates: Block[] = [];\r\n          const bytes = subChunk.value;\r\n          if (bytes) {\r\n            Log.assert(\r\n              bytes.length === 10251 || bytes.length === 10241 || bytes.length === 6145 || bytes.length === 6155,\r\n              \"Expected 6145 or 10241 bytes for a legacy subchunk in getblock. (\" + bytes.length + \")\"\r\n            );\r\n            // 6145 bytes if the light information is omitted;\r\n            // 10241 bytes if there is 2kb + 2kb of light information\r\n\r\n            for (let i = 0; i < 4096; i++) {\r\n              let blockTypeIndex = bytes[1 + i];\r\n              let blockAuxIndex = bytes[4097 + i];\r\n\r\n              let templateIndex = blockTypeIndex * 256 + blockAuxIndex;\r\n\r\n              if (!blockTemplates[templateIndex]) {\r\n                const blockType = Database.getBlockTypeByLegacyId(blockTypeIndex);\r\n                if (!blockType || !blockType.id) {\r\n                  throw new Error(\"Expected a block type for index \" + blockTypeIndex);\r\n                }\r\n                // Use air for unknown block types to gracefully handle missing legacy IDs\r\n                const blockId = blockType?.id ? \"minecraft:\" + blockType.id : \"minecraft:air\";\r\n                const block = new Block(blockId);\r\n\r\n                block.data = blockAuxIndex;\r\n\r\n                blockTemplates[templateIndex] = block;\r\n              }\r\n\r\n              blocks.push(blockTemplates[templateIndex]);\r\n            }\r\n          }\r\n        } else {\r\n          let indices = this.getBlockPaletteIndexList(subChunkId);\r\n\r\n          if (indices) {\r\n            const blockPalettes = this.blockPalettes[subChunkId];\r\n\r\n            if (blockPalettes) {\r\n              const blockTemplates = blockPalettes.blocks;\r\n\r\n              for (let i = 0; i < indices.length; i++) {\r\n                blocks.push(blockTemplates[indices[i]]);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return blocks;\r\n  }\r\n\r\n  _determineBlockTopsLegacy() {\r\n    if (!this.legacyTerrainBytes || !this.blockTops) {\r\n      return;\r\n    }\r\n\r\n    for (let iX = 0; iX < 16; iX++) {\r\n      const iXByte = iX * 128 * 16;\r\n\r\n      for (let iZ = 0; iZ < 16; iZ++) {\r\n        const iZByte = iZ * 128;\r\n\r\n        for (let iY = 127; iY >= 0; iY--) {\r\n          const byte = this.legacyTerrainBytes[iXByte + iZByte + iY];\r\n\r\n          if (byte !== 0) {\r\n            this.blockTops[iX][iZ] = iY;\r\n            iY = -1;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  determineBlockTops() {\r\n    this.blockTops = [];\r\n\r\n    for (let i = 0; i < 16; i++) {\r\n      const arr = [];\r\n\r\n      for (let j = 0; j < 16; j++) {\r\n        arr.push(-32768);\r\n      }\r\n\r\n      this.blockTops.push(arr);\r\n    }\r\n\r\n    if (this.legacyTerrainBytes) {\r\n      this._determineBlockTopsLegacy();\r\n      return;\r\n    }\r\n\r\n    let matchCount = 0;\r\n\r\n    for (let subChunkId = this.maxSubChunkIndex; subChunkId >= 0; subChunkId--) {\r\n      if (this.pendingSubChunksToProcess[subChunkId] === true) {\r\n        this.parseSubChunk(subChunkId);\r\n      }\r\n\r\n      const subChunk = this.subChunks[subChunkId];\r\n\r\n      if (subChunk !== undefined) {\r\n        const bytes = subChunk.value;\r\n\r\n        if (bytes !== undefined) {\r\n          if (this.subChunkFormatType[subChunkId] === SubChunkFormatType.subChunk1dot0) {\r\n            for (let iY = 15; iY >= 0; iY--) {\r\n              for (let iZ = 0; iZ < 16; iZ++) {\r\n                for (let iX = 0; iX < 16; iX++) {\r\n                  let blockTypeId = bytes[iX * 256 + iZ * CHUNK_Z_SIZE + iY];\r\n\r\n                  if (\r\n                    blockTypeId !== 0 /* air */ &&\r\n                    blockTypeId !== 37 /* flower */ &&\r\n                    blockTypeId !== 31 /* tallgrass*/ &&\r\n                    this.blockTops[iX][iZ] < -1024\r\n                  ) {\r\n                    const yIndex = iY + this.getStartYFromSubChunkIndex(subChunkId);\r\n\r\n                    this.blockTops[iX][iZ] = yIndex - 1;\r\n                    matchCount++;\r\n                    if (matchCount === 256) {\r\n                      return;\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          } else {\r\n            //y z x\r\n            const subChunkBitsPerBlock = this.bitsPerBlock[subChunkId];\r\n            const bpw = Math.floor(32 / subChunkBitsPerBlock);\r\n\r\n            const disallowedIndices = [];\r\n\r\n            const blockPals = this.blockPalettes[subChunkId];\r\n\r\n            if (blockPals) {\r\n              Log.assert(blockPals.blocks !== undefined, \"WCDBTA\");\r\n\r\n              for (let iPal = 0; iPal < blockPals.blocks.length; iPal++) {\r\n                const block = blockPals.blocks[iPal];\r\n\r\n                if (\r\n                  block.shortTypeId === \"air\" ||\r\n                  block.shortTypeId === \"flower\" ||\r\n                  block.shortTypeId === \"tallgrass\" ||\r\n                  block.shortTypeId === \"barrier\" ||\r\n                  block.shortTypeId === \"structure_void\" ||\r\n                  block.shortTypeId === \"light_block\"\r\n                ) {\r\n                  disallowedIndices.push(iPal);\r\n                }\r\n              }\r\n              for (let iY = 15; iY >= 0; iY--) {\r\n                const yIndex = iY + this.getStartYFromSubChunkIndex(subChunkId);\r\n\r\n                for (let iZ = 0; iZ < 16; iZ++) {\r\n                  for (let iX = 0; iX < 16; iX++) {\r\n                    if (yIndex >= this.blockTops[iX][iZ]) {\r\n                      const blockIndex = iX * 256 + iZ * CHUNK_Z_SIZE + iY;\r\n\r\n                      const byteStart = this.blockDataStart[subChunkId] + Math.floor(blockIndex / bpw) * 4;\r\n                      const blocksIn = blockIndex % bpw;\r\n\r\n                      let word = DataUtilities.getUnsignedInteger(\r\n                        bytes[byteStart],\r\n                        bytes[byteStart + 1],\r\n                        bytes[byteStart + 2],\r\n                        bytes[byteStart + 3],\r\n                        true\r\n                      );\r\n\r\n                      word >>>= subChunkBitsPerBlock * blocksIn;\r\n\r\n                      let value = 0;\r\n\r\n                      for (let i = 0; i < subChunkBitsPerBlock; i++) {\r\n                        let inc = word % 2;\r\n                        inc <<= i;\r\n                        value += inc;\r\n                        word >>>= 1;\r\n                      }\r\n\r\n                      let matchesSolidIndex = true;\r\n\r\n                      for (let iDis = 0; iDis < disallowedIndices.length; iDis++) {\r\n                        if (value === disallowedIndices[iDis]) {\r\n                          matchesSolidIndex = false;\r\n                        }\r\n                      }\r\n                      if (matchesSolidIndex) {\r\n                        matchCount++;\r\n                        this.blockTops[iX][iZ] = yIndex;\r\n                        if (matchCount === 256) {\r\n                          return;\r\n                        }\r\n                      }\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getSubChunkIndexFromY(y: number) {\r\n    return Math.floor((y - this.absoluteZeroY) / SUBCHUNK_Y_SIZE);\r\n  }\r\n\r\n  getStartYFromSubChunkIndex(subChunkIndex: number) {\r\n    return subChunkIndex * SUBCHUNK_Y_SIZE + this.absoluteZeroY;\r\n  }\r\n\r\n  getBlockPaletteIndex(x: number, y: number, z: number) {\r\n    Log.assert(x >= 0 && x <= 15 && z >= 0 && z <= 15, \"Unexpected x/z\");\r\n\r\n    const subChunkId = this.getSubChunkIndexFromY(y);\r\n\r\n    const subChunk = this.subChunks[subChunkId];\r\n\r\n    if (subChunk === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const bytes = subChunk.value;\r\n\r\n    if (bytes === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    //y z x\r\n\r\n    // Compute the block's Y position within its subchunk (0-15).\r\n    // Math.abs(y % 16) is incorrect for negative Y: e.g., y=-2 gives 2 instead of 14.\r\n    // The correct formula uses modular arithmetic that always produces 0-15.\r\n    const subChunkY = ((y % 16) + 16) % 16;\r\n\r\n    const blockIndex = x * 256 + z * CHUNK_Z_SIZE + subChunkY;\r\n\r\n    const subChunkBitsPerBlock = this.bitsPerBlock[subChunkId];\r\n    const bpw = Math.floor(32 / subChunkBitsPerBlock);\r\n\r\n    const byteStart = this.blockDataStart[subChunkId] + Math.floor(blockIndex / bpw) * 4;\r\n    const blocksIn = blockIndex % bpw;\r\n\r\n    let word = DataUtilities.getUnsignedInteger(\r\n      bytes[byteStart],\r\n      bytes[byteStart + 1],\r\n      bytes[byteStart + 2],\r\n      bytes[byteStart + 3],\r\n      true\r\n    );\r\n    //  Log.assert(x !== 15 || y !== 80 || z !== 15);\r\n\r\n    word >>>= subChunkBitsPerBlock * blocksIn;\r\n\r\n    let value = 0;\r\n\r\n    for (let i = 0; i < subChunkBitsPerBlock; i++) {\r\n      let inc = word % 2;\r\n\r\n      inc <<= i;\r\n      value += inc;\r\n      word >>>= 1;\r\n    }\r\n\r\n    return value;\r\n  }\r\n\r\n  getBlockPaletteIndexList(subChunkId: number) {\r\n    const blockIndices = [];\r\n\r\n    const subChunk = this.subChunks[subChunkId];\r\n\r\n    if (subChunk !== undefined) {\r\n      const bytes = subChunk.value;\r\n\r\n      if (bytes === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      //y z x\r\n\r\n      const subChunkY = this.absoluteZeroY + this.minSubChunkIndex * 16;\r\n\r\n      for (let x = 0; x < 16; x++) {\r\n        for (let z = 0; z < 16; z++) {\r\n          const blockIndex = x * 256 + z * CHUNK_Z_SIZE + subChunkY;\r\n\r\n          const subChunkBitsPerBlock = this.bitsPerBlock[subChunkId];\r\n          const bpw = Math.floor(32 / subChunkBitsPerBlock);\r\n\r\n          const byteStart = this.blockDataStart[subChunkId] + Math.floor(blockIndex / bpw) * 4;\r\n          const blocksIn = blockIndex % bpw;\r\n\r\n          let word = DataUtilities.getUnsignedInteger(\r\n            bytes[byteStart],\r\n            bytes[byteStart + 1],\r\n            bytes[byteStart + 2],\r\n            bytes[byteStart + 3],\r\n            true\r\n          );\r\n\r\n          word >>>= subChunkBitsPerBlock * blocksIn;\r\n\r\n          let value = 0;\r\n\r\n          for (let i = 0; i < subChunkBitsPerBlock; i++) {\r\n            let inc = word % 2;\r\n\r\n            inc <<= i;\r\n            value += inc;\r\n            word >>>= 1;\r\n          }\r\n\r\n          blockIndices.push(value);\r\n        }\r\n      }\r\n    }\r\n\r\n    return blockIndices;\r\n  }\r\n\r\n  parseSubChunk(subChunkIndex: number) {\r\n    const bytes = this.subChunks[subChunkIndex].value;\r\n\r\n    if (bytes === undefined || bytes.length <= 0) {\r\n      Log.fail(\"Unexpected no bytes supplied for a chunk.\");\r\n      return;\r\n    }\r\n\r\n    let bitsPerBlock = 1;\r\n\r\n    const subChunkVersion = bytes[0]; // should be 1 or 8 or (9 = C&C pt 2?)\r\n\r\n    // legacy subchunk format for version 1.0/1.2.13, that predates palette-ized subchunks\r\n    if (subChunkVersion < 8 && subChunkVersion !== 1) {\r\n      this.subChunkFormatType[subChunkIndex] = SubChunkFormatType.subChunk1dot0;\r\n      this.chunkMinY = 0;\r\n\r\n      this.world.chunkMinY = Math.min(this.chunkMinY, this.world.chunkMinY);\r\n      return;\r\n    }\r\n\r\n    if (!(subChunkVersion === 1 || subChunkVersion === 8 || subChunkVersion === 9)) {\r\n      Log.fail(\"Unexpected sub chunk version (\" + subChunkVersion + \")\");\r\n      return;\r\n    }\r\n\r\n    let storageAreas = 1;\r\n    let index = 1;\r\n\r\n    if (subChunkVersion !== 1) {\r\n      storageAreas = bytes[1]; // is either one or two, to indicate the number of block storage areas.  the second is the auxiliary \"water logged\" block area\r\n      Log.assert(storageAreas === 1 || storageAreas === 2, \"Storage areas > 2 not expected\");\r\n      index++;\r\n    }\r\n\r\n    if (subChunkVersion === 9) {\r\n      // not sure what this second byte is for. observed to be of values 0, 1, and 252\r\n      // maybe this is the minimum subchunk level?\r\n      const interimVal = bytes[2];\r\n\r\n      Log.assert(\r\n        (interimVal >= 0 && interimVal <= 32) || (interimVal >= 224 && interimVal <= 256),\r\n        \"Unexpected chunk index\"\r\n      );\r\n\r\n      index++;\r\n      this.chunkMinY = -512;\r\n    } else if (subChunkVersion === 8) {\r\n      this.chunkMinY = 0;\r\n    }\r\n\r\n    if (this.chunkMinY !== undefined) {\r\n      this.world.chunkMinY = Math.min(this.chunkMinY, this.world.chunkMinY);\r\n    }\r\n\r\n    for (let sI = 0; sI < storageAreas; sI++) {\r\n      if (bytes[index] % 2 === 1) {\r\n        // if version LSB is set, this indicates a non-save persistence which we should probably never see\r\n        Log.unexpectedError(\"Unexpected non-save persistence version found.\");\r\n      }\r\n\r\n      bitsPerBlock = bytes[index] >>> 1;\r\n      index++;\r\n\r\n      // have observed empty subchunks with no actual data besides NBT records, where bitsPerBlock === 0\r\n      if (bitsPerBlock === 0) {\r\n        // const bp = new BlockPalette();\r\n        //   index = bp.parseFromBytes(bytes, index, 1);\r\n      } else {\r\n        const blocksPerWord = Math.floor(32 / bitsPerBlock);\r\n        const blockBytes = Math.ceil(4096 / blocksPerWord) * 4;\r\n\r\n        let numPaletteEntries = DataUtilities.getUnsignedInteger(\r\n          bytes[blockBytes + index],\r\n          bytes[blockBytes + index + 1],\r\n          bytes[blockBytes + index + 2],\r\n          bytes[blockBytes + index + 3],\r\n          true\r\n        );\r\n\r\n        if (numPaletteEntries >= 4096) {\r\n          // this is an odd workaround; but it seems like some worlds have their num palette entries listed as big endian\r\n          numPaletteEntries = DataUtilities.getUnsignedInteger(\r\n            bytes[blockBytes + index],\r\n            bytes[blockBytes + index + 1],\r\n            bytes[blockBytes + index + 2],\r\n            bytes[blockBytes + index + 3],\r\n            false\r\n          );\r\n        }\r\n\r\n        Log.assert(numPaletteEntries <= 4096, \"Unexpectedly large number of palette entries\");\r\n\r\n        const bp = new BlockPalette();\r\n\r\n        const blockDataStartIndex = index;\r\n\r\n        index = bp.parseFromBytes(bytes, blockBytes + index + 4, numPaletteEntries);\r\n\r\n        if (bp.blocks.length !== numPaletteEntries) {\r\n          Log.unexpectedError(\"Unexpected block palette count mismatch.\");\r\n        }\r\n\r\n        Log.assert(sI !== storageAreas - 1 || index === bytes.length, \"Unexpectedly didn't consume entire subchunk.\");\r\n\r\n        if (sI === 0) {\r\n          this.blockDataStart[subChunkIndex] = blockDataStartIndex;\r\n          this.bitsPerBlock[subChunkIndex] = bitsPerBlock;\r\n          this.blockPalettes[subChunkIndex] = bp;\r\n          this.subChunkFormatType[subChunkIndex] = SubChunkFormatType.paletteFrom1dot2dot13;\r\n        } else {\r\n          this.auxBlockDataStart[subChunkIndex] = blockDataStartIndex;\r\n          this.auxBitsPerBlock[subChunkIndex] = bitsPerBlock;\r\n          this.auxBlockPalettes[subChunkIndex] = bp;\r\n          this.subChunkFormatType[subChunkIndex] = SubChunkFormatType.paletteFrom1dot2dot13;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IAnchorData from \"./IAnchorData\";\r\nimport IVector3 from \"./IVector3\";\r\n\r\nexport default class Anchor {\r\n  data: IAnchorData;\r\n\r\n  get from() {\r\n    return this.data.from;\r\n  }\r\n\r\n  set from(newFrom: IVector3) {\r\n    this.data.from = newFrom;\r\n  }\r\n\r\n  get to() {\r\n    return this.data.to;\r\n  }\r\n\r\n  set to(newTo: IVector3 | undefined) {\r\n    this.data.to = newTo;\r\n  }\r\n\r\n  get name() {\r\n    return this.data.name;\r\n  }\r\n\r\n  set name(newName: string) {\r\n    this.data.name = newName;\r\n  }\r\n\r\n  constructor(data?: IAnchorData) {\r\n    if (data) {\r\n      this.data = data;\r\n    } else {\r\n      this.data = {\r\n        from: { x: 0, y: 0, z: 0 },\r\n        to: { x: 0, y: 0, z: 0 },\r\n        name: \"\",\r\n      };\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport Anchor from \"./Anchor\";\r\nimport IAnchorData from \"./IAnchorData\";\r\nimport IVector3 from \"./IVector3\";\r\n\r\nexport default class AnchorSet {\r\n  data: { [name: string]: IAnchorData | undefined } = {};\r\n  anchors: { [name: string]: Anchor | undefined } = {};\r\n\r\n  clear(anchorName: string) {\r\n    const exists = this.data[anchorName] !== undefined || this.anchors[anchorName] !== undefined;\r\n\r\n    if (Utilities.isUsableAsObjectKey(anchorName)) {\r\n      this.data[anchorName] = undefined;\r\n      this.anchors[anchorName] = undefined;\r\n    }\r\n\r\n    return exists;\r\n  }\r\n\r\n  clearAll() {\r\n    this.data = {};\r\n    this.anchors = {};\r\n  }\r\n\r\n  getLength() {\r\n    let count = 0;\r\n\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    for (const strKey in this.data) {\r\n      count++;\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  getKeys() {\r\n    const keyArr = [];\r\n\r\n    for (const strKey in this.data) {\r\n      keyArr.push(strKey);\r\n    }\r\n\r\n    return keyArr;\r\n  }\r\n\r\n  get(name: string) {\r\n    if (!Utilities.isUsableAsObjectKey(name)) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (this.anchors[name]) {\r\n      return this.anchors[name];\r\n    }\r\n\r\n    if (this.data[name]) {\r\n      this.anchors[name] = new Anchor(this.data[name]);\r\n\r\n      return this.anchors[name];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  ensure(name: string, from: IVector3, to?: IVector3) {\r\n    let anchor: Anchor | undefined;\r\n    if (!Utilities.isUsableAsObjectKey(name)) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (this.anchors[name]) {\r\n      anchor = this.anchors[name];\r\n    }\r\n\r\n    if (!anchor && this.data[name]) {\r\n      this.anchors[name] = new Anchor(this.data[name]);\r\n\r\n      anchor = this.anchors[name];\r\n    }\r\n\r\n    if (!anchor) {\r\n      this.data[name] = {\r\n        from: from,\r\n        to: to,\r\n        name: name,\r\n      };\r\n\r\n      this.anchors[name] = new Anchor(this.data[name]);\r\n\r\n      anchor = this.anchors[name];\r\n    }\r\n\r\n    if (anchor) {\r\n      anchor.from = from;\r\n      anchor.to = to;\r\n      anchor.name = name;\r\n    }\r\n\r\n    return anchor;\r\n  }\r\n\r\n  getAsString() {\r\n    return JSON.stringify(this.data);\r\n  }\r\n\r\n  fromString(incomingStr: string) {\r\n    try {\r\n      this.data = JSON.parse(incomingStr);\r\n    } catch (e) {}\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport { InventoryItem, Item } from \"./Items\";\r\nimport NbtBinary from \"./NbtBinary\";\r\nimport NbtBinaryTag, { NbtTagType } from \"./NbtBinaryTag\";\r\n\r\nexport interface ActorAttribute {\r\n  base: number;\r\n  current: number;\r\n  defaultMax: number;\r\n  defaultMin: number;\r\n  max: number;\r\n  min: number;\r\n  name: string;\r\n}\r\n\r\nexport default class ActorItem {\r\n  #identifier: string;\r\n  #nbtRoot?: NbtBinaryTag;\r\n  #dynamicProperties: { [behaviorPackUid: string]: { [propertyName: string]: string | number | boolean } } = {};\r\n\r\n  public armorItems: Item[] = [];\r\n  public chestItems: InventoryItem[] = [];\r\n  public attributes: ActorAttribute[] = [];\r\n  public air?: number;\r\n  public attackTime?: number;\r\n  public bodyRot?: number;\r\n  public chested?: boolean;\r\n  public color?: number;\r\n  public color2?: number;\r\n  public dead?: boolean;\r\n  public deathTime?: number;\r\n  public fallDistance?: number;\r\n  public hasExecuted?: boolean;\r\n  public hurtTime?: number;\r\n  public invulnerable?: boolean;\r\n  public isAngry?: boolean;\r\n  public isAutonomous?: boolean;\r\n  public isBaby?: boolean;\r\n  public isEating?: boolean;\r\n  public isGliding?: boolean;\r\n  public isGlobal?: boolean;\r\n  public isIllagerCaptain?: boolean;\r\n  public isOrphaned?: boolean;\r\n  public isOutOfControl?: boolean;\r\n  public isPregnant?: boolean;\r\n  public isRoaring?: boolean;\r\n  public isScared?: boolean;\r\n  public isStunned?: boolean;\r\n  public isSwimming?: boolean;\r\n  public isTamed?: boolean;\r\n  public isTrusting?: boolean;\r\n  public lastDimensionId?: number;\r\n  public leasherId?: number;\r\n  public lootDropped?: boolean;\r\n  public mainhand?: string;\r\n  public markVariant?: number;\r\n  public naturalSpawn?: boolean;\r\n  public offhand?: string;\r\n  public onGround?: boolean;\r\n  public ownerNew?: bigint;\r\n  public persistent?: boolean;\r\n  public portalCooldown?: boolean;\r\n  public pos?: number[];\r\n  public rotation?: number[];\r\n  public saddled?: boolean;\r\n  public sheared?: boolean;\r\n  public showBottom?: boolean;\r\n  public sitting?: boolean;\r\n  public skinId?: number;\r\n  public strength?: number;\r\n  public strengthMax?: number;\r\n  public surface?: boolean;\r\n  public targetId?: bigint;\r\n  public tradeExperience?: number;\r\n  public tradeTier?: number;\r\n  public uniqueId?: bigint;\r\n  public variant?: number;\r\n  public boundX?: number;\r\n  public boundY?: number;\r\n  public boundZ?: number;\r\n  public canPickupItems?: boolean;\r\n  public definitions?: string[];\r\n  public hasBoundOrigin?: boolean;\r\n  public hasSetCanPickupItems?: boolean;\r\n  public identifier?: string;\r\n  public internalComponents?: { [keyName: string]: string };\r\n\r\n  constructor(identifier: string, keyData: Uint8Array) {\r\n    this.#identifier = identifier;\r\n\r\n    const actorStorage = new NbtBinary();\r\n\r\n    actorStorage.context = identifier;\r\n\r\n    actorStorage.fromBinary(keyData, true, false, 0, true);\r\n\r\n    if (actorStorage.singleRoot) {\r\n      this.#nbtRoot = actorStorage.singleRoot;\r\n      this.loadFromNbt();\r\n    }\r\n  }\r\n\r\n  loadFromNbt() {\r\n    if (!this.#nbtRoot) {\r\n      return;\r\n    }\r\n\r\n    const root = this.#nbtRoot;\r\n\r\n    let tag = root.find(\"Armor\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.armorItems = [];\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const countTag = childTag.find(\"Count\");\r\n        const damageTag = childTag.find(\"Damage\");\r\n        const nameTag = childTag.find(\"Name\");\r\n        const wasPickedUpTag = childTag.find(\"WasPickedUp\");\r\n\r\n        if (countTag && damageTag && nameTag && wasPickedUpTag) {\r\n          this.armorItems.push({\r\n            count: countTag.valueAsInt,\r\n            damage: damageTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n            wasPickedUp: wasPickedUpTag.valueAsBoolean,\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    tag = root.find(\"ChestItems\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.armorItems = [];\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const countTag = childTag.find(\"Count\");\r\n        const damageTag = childTag.find(\"Damage\");\r\n        const nameTag = childTag.find(\"Name\");\r\n        const slotTag = childTag.find(\"Slot\");\r\n        const wasPickedUpTag = childTag.find(\"WasPickedUp\");\r\n\r\n        if (countTag && damageTag && nameTag && slotTag && wasPickedUpTag) {\r\n          this.chestItems.push({\r\n            count: countTag.valueAsInt,\r\n            damage: damageTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n            slot: slotTag.valueAsInt,\r\n            wasPickedUp: wasPickedUpTag.valueAsBoolean,\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    tag = root.find(\"Attributes\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.attributes = [];\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const baseTag = childTag.find(\"Base\");\r\n        const currentTag = childTag.find(\"Current\");\r\n        const defaultMaxTag = childTag.find(\"DefaultMax\");\r\n        const defaultMinTag = childTag.find(\"DefaultMin\");\r\n        const maxTag = childTag.find(\"Max\");\r\n        const minTag = childTag.find(\"Min\");\r\n        const nameTag = childTag.find(\"Name\");\r\n\r\n        if (baseTag && currentTag && nameTag && defaultMaxTag && defaultMinTag && maxTag && minTag) {\r\n          this.attributes.push({\r\n            base: baseTag.valueAsInt,\r\n            current: currentTag.valueAsInt,\r\n            defaultMax: defaultMaxTag.valueAsInt,\r\n            defaultMin: defaultMinTag.valueAsInt,\r\n            max: maxTag.valueAsInt,\r\n            min: minTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    tag = root.find(\"DynamicProperties\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.#dynamicProperties = {};\r\n\r\n      for (const child of children) {\r\n        if (child.name && Utilities.isValidUuid(child.name)) {\r\n          this.#dynamicProperties[child.name] = {};\r\n\r\n          const bpChildren = child.getTagChildren();\r\n\r\n          for (const propChild of bpChildren) {\r\n            if (propChild.name && propChild.type === NbtTagType.string) {\r\n              this.#dynamicProperties[child.name][propChild.name] = propChild.valueAsString;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    tag = root.find(\"AttackTime\");\r\n    if (tag !== null) {\r\n      this.attackTime = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Air\");\r\n    if (tag !== null) {\r\n      this.air = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"BodyRot\");\r\n    if (tag !== null) {\r\n      this.bodyRot = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = root.find(\"Chested\");\r\n    if (tag !== null) {\r\n      this.chested = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Color\");\r\n    if (tag !== null) {\r\n      this.color = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Color2\");\r\n    if (tag !== null) {\r\n      this.color2 = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Dead\");\r\n    if (tag !== null) {\r\n      this.dead = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"DeathTime\");\r\n    if (tag !== null) {\r\n      this.deathTime = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"FallDistance\");\r\n    if (tag !== null) {\r\n      this.fallDistance = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = root.find(\"HasExecuted\");\r\n    if (tag !== null) {\r\n      this.hasExecuted = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"HurtTime\");\r\n    if (tag !== null) {\r\n      this.hurtTime = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Invulnerable\");\r\n    if (tag !== null) {\r\n      this.invulnerable = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsAngry\");\r\n    if (tag !== null) {\r\n      this.isAngry = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsAutonomous\");\r\n    if (tag !== null) {\r\n      this.isAutonomous = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsBaby\");\r\n    if (tag !== null) {\r\n      this.isBaby = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsEating\");\r\n    if (tag !== null) {\r\n      this.isEating = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsGliding\");\r\n    if (tag !== null) {\r\n      this.isGliding = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsGlobal\");\r\n    if (tag !== null) {\r\n      this.isGliding = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsIllagerCaptain\");\r\n    if (tag !== null) {\r\n      this.isIllagerCaptain = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsOrphaned\");\r\n    if (tag !== null) {\r\n      this.isOrphaned = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsOutOfControl\");\r\n    if (tag !== null) {\r\n      this.isOutOfControl = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsPregnant\");\r\n    if (tag !== null) {\r\n      this.isPregnant = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsRoaring\");\r\n    if (tag !== null) {\r\n      this.isRoaring = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsScared\");\r\n    if (tag !== null) {\r\n      this.isScared = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsStunned\");\r\n    if (tag !== null) {\r\n      this.isStunned = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsSwimming\");\r\n    if (tag !== null) {\r\n      this.isSwimming = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsTamed\");\r\n    if (tag !== null) {\r\n      this.isTamed = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsTrusting\");\r\n    if (tag !== null) {\r\n      this.isTrusting = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"LastDimensionId\");\r\n    if (tag !== null) {\r\n      this.lastDimensionId = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"LeasherID\");\r\n    if (tag !== null) {\r\n      this.leasherId = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"LootDropped\");\r\n    if (tag !== null) {\r\n      this.lootDropped = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Mainhand\");\r\n    if (tag !== null) {\r\n      this.mainhand = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"MarkVariant\");\r\n    if (tag !== null) {\r\n      this.markVariant = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"NaturalSpawn\");\r\n    if (tag !== null) {\r\n      this.naturalSpawn = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Offhand\");\r\n    if (tag !== null) {\r\n      this.offhand = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"OnGround\");\r\n    if (tag !== null) {\r\n      this.onGround = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"OwnerNew\");\r\n    if (tag !== null) {\r\n      this.ownerNew = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"Persistent\");\r\n    if (tag !== null) {\r\n      this.persistent = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"PortalCooldown\");\r\n    if (tag !== null) {\r\n      this.portalCooldown = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Pos\");\r\n    if (tag !== null) {\r\n      this.pos = tag.valueAsNumericArray;\r\n    }\r\n\r\n    tag = root.find(\"Rotation\");\r\n    if (tag !== null) {\r\n      this.rotation = tag.valueAsNumericArray;\r\n    }\r\n\r\n    tag = root.find(\"Saddled\");\r\n    if (tag !== null) {\r\n      this.saddled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Sheared\");\r\n    if (tag !== null) {\r\n      this.sheared = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"ShowBottom\");\r\n    if (tag !== null) {\r\n      this.showBottom = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Sitting\");\r\n    if (tag !== null) {\r\n      this.sitting = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"SkinID\");\r\n    if (tag !== null) {\r\n      this.skinId = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Strength\");\r\n    if (tag !== null) {\r\n      this.strength = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"StrengthMax\");\r\n    if (tag !== null) {\r\n      this.strengthMax = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = root.find(\"Surface\");\r\n    if (tag !== null) {\r\n      this.surface = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"TargetID\");\r\n    if (tag !== null) {\r\n      this.targetId = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"TradeExperience\");\r\n    if (tag !== null) {\r\n      this.tradeExperience = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"TradeTier\");\r\n    if (tag !== null) {\r\n      this.tradeTier = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"UniqueID\");\r\n    if (tag !== null) {\r\n      this.uniqueId = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"Variant\");\r\n    if (tag !== null) {\r\n      this.variant = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"boundX\");\r\n    if (tag !== null) {\r\n      this.boundX = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"boundY\");\r\n    if (tag !== null) {\r\n      this.boundY = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"boundZ\");\r\n    if (tag !== null) {\r\n      this.boundZ = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"canPickupItems\");\r\n    if (tag !== null) {\r\n      this.canPickupItems = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"definitions\");\r\n    if (tag !== null) {\r\n      this.definitions = tag.valueAsStringArray;\r\n    }\r\n\r\n    tag = root.find(\"hasBoundOrigin\");\r\n    if (tag !== null) {\r\n      this.hasBoundOrigin = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"hasSetCanPickupItems\");\r\n    if (tag !== null) {\r\n      this.hasSetCanPickupItems = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"identifier\");\r\n    if (tag !== null) {\r\n      this.identifier = tag.valueAsString;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport WorldChunk from \"./WorldChunk\";\r\n\r\n/**\r\n * LRU (Least Recently Used) cache for WorldChunk objects.\r\n *\r\n * Manages memory by evicting least recently used chunks when the cache\r\n * exceeds its maximum size. This enables viewing of very large worlds\r\n * without loading all chunks into memory simultaneously.\r\n *\r\n * When a chunk is evicted, its cached/parsed data is cleared but the\r\n * chunk object itself remains in the world's chunks Map. This allows\r\n * the chunk to be re-parsed on demand from its raw LevelKeyValue data.\r\n */\r\nexport default class WorldChunkCache {\r\n  /** Maximum number of chunks to keep parsed data for */\r\n  private _maxChunks: number;\r\n\r\n  /** Ordered list of chunk keys, oldest first (LRU tracking) */\r\n  private _accessOrder: string[] = [];\r\n\r\n  /** Set of chunks currently in the cache */\r\n  private _cachedChunks: Set<string> = new Set();\r\n\r\n  /** Callback to get a chunk by its key */\r\n  private _getChunk?: (key: string) => WorldChunk | undefined;\r\n\r\n  /**\r\n   * Create a new chunk cache.\r\n   * @param maxChunks Maximum number of chunks to keep parsed data for\r\n   */\r\n  constructor(maxChunks: number = 20000) {\r\n    this._maxChunks = maxChunks;\r\n  }\r\n\r\n  /** Get the maximum number of cached chunks */\r\n  get maxChunks(): number {\r\n    return this._maxChunks;\r\n  }\r\n\r\n  /** Set the maximum number of cached chunks */\r\n  set maxChunks(value: number) {\r\n    this._maxChunks = value;\r\n    this._evictIfNeeded();\r\n  }\r\n\r\n  /** Get the current number of cached chunks */\r\n  get size(): number {\r\n    return this._cachedChunks.size;\r\n  }\r\n\r\n  /**\r\n   * Set the callback to retrieve chunks by key.\r\n   * The key format should be \"dim_x_z\" (e.g., \"0_10_-5\").\r\n   */\r\n  setChunkProvider(provider: (key: string) => WorldChunk | undefined): void {\r\n    this._getChunk = provider;\r\n  }\r\n\r\n  /**\r\n   * Generate a cache key for a chunk.\r\n   */\r\n  static makeKey(dim: number, x: number, z: number): string {\r\n    return `${dim}_${x}_${z}`;\r\n  }\r\n\r\n  /**\r\n   * Parse a cache key back into coordinates.\r\n   */\r\n  static parseKey(key: string): { dim: number; x: number; z: number } | undefined {\r\n    const parts = key.split(\"_\");\r\n    if (parts.length !== 3) return undefined;\r\n    return {\r\n      dim: parseInt(parts[0], 10),\r\n      x: parseInt(parts[1], 10),\r\n      z: parseInt(parts[2], 10),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Record access to a chunk, marking it as recently used.\r\n   * Call this whenever a chunk is accessed for rendering or data retrieval.\r\n   */\r\n  access(dim: number, x: number, z: number): void {\r\n    const key = WorldChunkCache.makeKey(dim, x, z);\r\n    this.accessByKey(key);\r\n  }\r\n\r\n  /**\r\n   * Record access to a chunk by key.\r\n   */\r\n  accessByKey(key: string): void {\r\n    // Remove from old position if exists\r\n    const existingIndex = this._accessOrder.indexOf(key);\r\n    if (existingIndex >= 0) {\r\n      this._accessOrder.splice(existingIndex, 1);\r\n    }\r\n\r\n    // Add to end (most recently used)\r\n    this._accessOrder.push(key);\r\n    this._cachedChunks.add(key);\r\n\r\n    // Evict old chunks if over limit\r\n    this._evictIfNeeded();\r\n  }\r\n\r\n  /**\r\n   * Evict least recently used chunks if over the limit.\r\n   */\r\n  private _evictIfNeeded(): void {\r\n    if (this._cachedChunks.size <= this._maxChunks) {\r\n      return;\r\n    }\r\n\r\n    // Evict to 80% of max to avoid frequent evictions\r\n    const targetSize = Math.floor(this._maxChunks * 0.8);\r\n    const chunksToEvict = this._cachedChunks.size - targetSize;\r\n\r\n    for (let i = 0; i < chunksToEvict && this._accessOrder.length > 0; i++) {\r\n      const oldestKey = this._accessOrder.shift();\r\n      if (oldestKey) {\r\n        this._evictChunk(oldestKey);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Evict a specific chunk, clearing its cached data.\r\n   */\r\n  private _evictChunk(key: string): void {\r\n    this._cachedChunks.delete(key);\r\n\r\n    if (this._getChunk) {\r\n      const chunk = this._getChunk(key);\r\n      if (chunk) {\r\n        // Clear cached/parsed data but keep raw LevelKeyValue data\r\n        // This allows the chunk to be re-parsed on demand\r\n        chunk.clearCachedData();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if a chunk is in the cache (has parsed data available).\r\n   */\r\n  isInCache(dim: number, x: number, z: number): boolean {\r\n    const key = WorldChunkCache.makeKey(dim, x, z);\r\n    return this._cachedChunks.has(key);\r\n  }\r\n\r\n  /**\r\n   * Clear all cached chunks.\r\n   */\r\n  clear(): void {\r\n    // Clear all cached chunk data\r\n    if (this._getChunk) {\r\n      for (const key of this._cachedChunks) {\r\n        const chunk = this._getChunk(key);\r\n        if (chunk) {\r\n          chunk.clearCachedData();\r\n        }\r\n      }\r\n    }\r\n\r\n    this._accessOrder = [];\r\n    this._cachedChunks.clear();\r\n  }\r\n\r\n  /**\r\n   * Prefetch chunks in a region, loading them into the cache.\r\n   * Useful for ensuring a viewport's worth of chunks are available.\r\n   *\r\n   * @param dim Dimension index\r\n   * @param minX Minimum chunk X coordinate\r\n   * @param maxX Maximum chunk X coordinate\r\n   * @param minZ Minimum chunk Z coordinate\r\n   * @param maxZ Maximum chunk Z coordinate\r\n   */\r\n  prefetchRegion(dim: number, minX: number, maxX: number, minZ: number, maxZ: number): void {\r\n    for (let x = minX; x <= maxX; x++) {\r\n      for (let z = minZ; z <= maxZ; z++) {\r\n        this.access(dim, x, z);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get statistics about cache usage.\r\n   */\r\n  getStats(): { size: number; maxSize: number; hitRate: number } {\r\n    return {\r\n      size: this._cachedChunks.size,\r\n      maxSize: this._maxChunks,\r\n      hitRate: 0, // TODO: Track hit/miss for debugging\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * MCWorld.ts\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * MCWorld is the primary class for managing Minecraft world data, including:\r\n * - World metadata (level.dat, level name, spawn position)\r\n * - World chunks and blocks (via LevelDB)\r\n * - Behavior/resource pack registrations\r\n * - Dynamic properties and experiments\r\n *\r\n * REAL-TIME SYNCHRONIZATION:\r\n * --------------------------\r\n * MCWorld can listen to IStorage events to automatically update when external\r\n * changes occur (e.g., file changes from a remote server):\r\n *\r\n * 1. Call startListeningToStorage() to subscribe to storage events\r\n * 2. When onFileContentsUpdated fires, MCWorld reloads affected data\r\n * 3. MCWorld fires appropriate events (onChunkUpdated, onDataReloaded, etc.)\r\n * 4. WorldView and other UI components update in response\r\n *\r\n * EVENTS:\r\n * -------\r\n * - onLoaded: Fired when world initially loads\r\n * - onDataLoaded: Fired when world data (chunks) finishes loading\r\n * - onChunkUpdated: Fired when a specific chunk is updated/reloaded\r\n * - onWorldDataReloaded: Fired when world files are externally modified and reloaded\r\n * - onPropertyChanged: Fired when a world property changes\r\n *\r\n * DATA FLOW:\r\n * ----------\r\n * HttpStorage (WebSocket notifications) -> MCWorld (this) ->\r\n *   onChunkUpdated/onWorldDataReloaded -> WorldView (React update)\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - IStorage.ts: Storage events (onFileContentsUpdated, etc.)\r\n * - HttpStorage.ts: Client-side storage with WebSocket notifications\r\n * - WorldView.tsx: UI component that displays world data\r\n * - WorldChunk.ts: Individual chunk data\r\n * - LevelDb.ts: LevelDB file parser\r\n */\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IPackRegistration from \"./IPackRegistration\";\r\nimport Log from \"./../core/Log\";\r\nimport IFolder from \"./../storage/IFolder\";\r\nimport IPackHistory from \"./IPackHistory\";\r\nimport WorldLevelDat from \"./WorldLevelDat\";\r\nimport IGetSetPropertyObject from \"../dataform/IGetSetPropertyObject\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IWorldManifest from \"./IWorldManifest\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport LevelDb, { IChunkCoordinate } from \"./LevelDb\";\r\nimport DataUtilities from \"../core/DataUtilities\";\r\nimport WorldChunk from \"./WorldChunk\";\r\nimport BlockLocation from \"./BlockLocation\";\r\nimport BlockVolume from \"./BlockVolume\";\r\nimport IDimension from \"./IDimension\";\r\nimport Block from \"./Block\";\r\nimport Entity from \"./Entity\";\r\nimport { IPackageReference, IWorldSettings } from \"./IWorldSettings\";\r\nimport { StorageErrorStatus } from \"../storage/IStorage\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport NbtBinary from \"./NbtBinary\";\r\nimport { NbtTagType } from \"./NbtBinaryTag\";\r\nimport AnchorSet from \"./AnchorSet\";\r\nimport Project from \"../app/Project\";\r\nimport ActorItem from \"./ActorItem\";\r\nimport { StatusTopic } from \"../app/Status\";\r\nimport { IErrorMessage, IErrorable } from \"../core/IErrorable\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport WorldChunkCache from \"./WorldChunkCache\";\r\n\r\nconst BEHAVIOR_PACKS_RELPATH = \"/world_behavior_packs.json\";\r\nconst BEHAVIOR_PACK_HISTORY_RELPATH = \"/world_behavior_pack_history.json\";\r\nconst RESOURCE_PACKS_RELPATH = \"/world_resource_packs.json\";\r\nconst RESOURCE_PACK_HISTORY_RELPATH = \"/world_resource_pack_history.json\";\r\nconst LEVELDAT_RELPATH = \"/level.dat\";\r\nconst LEVELDATOLD_RELPATH = \"/level.dat_old\";\r\nconst LEVELNAMETXT_RELPATH = \"/levelname.txt\";\r\nconst MANIFEST_RELPATH = \"/manifest.json\";\r\n\r\nconst CHUNK_X_SIZE = 16;\r\nconst CHUNK_Z_SIZE = 16;\r\n\r\nconst CREATOR_TOOLS_EDITOR_BPUUID = \"5d2f0b91-ca29-49da-a275-e6c6262ea3de\";\r\n\r\nexport interface IWorldProcessingOptions {\r\n  maxNumberOfRecordsToProcess?: number;\r\n  progressCallback?: (phase: string, current: number, total: number) => void;\r\n  /**\r\n   * If true, unloads raw file content after parsing to reduce memory usage.\r\n   * Recommended for large worlds to prevent out-of-memory errors.\r\n   * Default: true (optimized for memory)\r\n   */\r\n  unloadFilesAfterParse?: boolean;\r\n  /**\r\n   * If true, deletes LevelDB keys from the keys Map after they are processed\r\n   * and handed off to WorldChunks. This significantly reduces memory usage\r\n   * for large worlds by eliminating duplicate references.\r\n   * Default: true (optimized for memory)\r\n   */\r\n  clearKeysAfterProcess?: boolean;\r\n  /**\r\n   * If true, uses lazy loading mode for LevelDB.\r\n   * Only manifest metadata is loaded initially; files are loaded on-demand.\r\n   * This dramatically reduces initial memory usage for large worlds.\r\n   *\r\n   * When enabled:\r\n   * - Initial load only parses manifest files\r\n   * - LDB/LOG files are loaded only when their keys are needed\r\n   * - Chunk cache manages memory by evicting least-recently-used chunks\r\n   *\r\n   * Default: false (full load for backwards compatibility)\r\n   */\r\n  lazyLoad?: boolean;\r\n  /**\r\n   * Maximum number of chunks to keep in the LRU cache when using lazy loading.\r\n   * When exceeded, least-recently-used chunks have their parsed data cleared\r\n   * (but can be re-parsed on demand from raw LevelKeyValue data).\r\n   *\r\n   * Default: 20000\r\n   */\r\n  maxChunksInCache?: number;\r\n  /**\r\n   * If true, skips the full \"Phase 2\" world data processing that creates\r\n   * WorldChunk objects for every chunk upfront. Instead, chunks will be\r\n   * created on-demand when they are first accessed.\r\n   *\r\n   * This is ideal for map viewing where only visible chunks need to be loaded.\r\n   * It dramatically reduces memory usage for very large worlds (100k+ chunks).\r\n   *\r\n   * When enabled:\r\n   * - World bounds (minX, maxX, minZ, maxZ) are calculated from key names\r\n   * - Chunk objects are created lazily when getChunkAt() is called\r\n   * - Full chunk data is only parsed when accessed\r\n   *\r\n   * Default: false (full processing for backwards compatibility)\r\n   */\r\n  skipFullProcessing?: boolean;\r\n}\r\n\r\nexport interface IRegion {\r\n  minX: number;\r\n  minZ: number;\r\n  maxX: number;\r\n  maxZ: number;\r\n}\r\n\r\nexport default class MCWorld implements IGetSetPropertyObject, IDimension, IErrorable {\r\n  // Where possible, if _file is defined we'd prefer to use\r\n  // _file.fileContentStorage for zip manip. _zipStorage is only used from\r\n  // a pure \"zip bytes in memory\" scenario (for generating downloads.)\r\n  private _zipStorage?: ZipStorage;\r\n\r\n  private _file?: IFile;\r\n  private _folder?: IFolder;\r\n  private _project?: Project;\r\n\r\n  private _autogenTsFile?: IFile;\r\n\r\n  private _anchors = new AnchorSet();\r\n\r\n  private _dynamicProperties: { [behaviorPackUid: string]: { [propertyName: string]: string | number | boolean } } = {};\r\n  private _levelNameText?: string;\r\n\r\n  private _manifest?: IWorldManifest;\r\n\r\n  private _isLoaded = false;\r\n  private _isDataLoaded = false;\r\n  private _onLoaded = new EventDispatcher<MCWorld, MCWorld>();\r\n  private _onDataLoaded = new EventDispatcher<MCWorld, MCWorld>();\r\n  private _onChunkUpdated = new EventDispatcher<MCWorld, WorldChunk>();\r\n  /** Event fired when world data is externally modified and reloaded */\r\n  private _onWorldDataReloaded = new EventDispatcher<MCWorld, string>();\r\n  /** Whether we're listening to storage events for automatic updates */\r\n  private _isListeningToStorage = false;\r\n\r\n  private _hasDynamicProps = false;\r\n  private _hasCustomProps = false;\r\n\r\n  private _onPropertyChanged = new EventDispatcher<MCWorld, string>();\r\n\r\n  private _biomeData: NbtBinary | undefined;\r\n  private _overworldData: NbtBinary | undefined;\r\n  private _levelChunkMetaData: NbtBinary | undefined;\r\n  private _generationSeed: string | undefined;\r\n\r\n  isInErrorState?: boolean;\r\n  errorMessages?: IErrorMessage[];\r\n\r\n  worldBehaviorPacks?: IPackRegistration[];\r\n  worldResourcePacks?: IPackRegistration[];\r\n  worldBehaviorPackHistory?: IPackHistory;\r\n  worldResourcePackHistory?: IPackHistory;\r\n  chunkCount = 0;\r\n\r\n  private _chunkMinY = -64;\r\n  imageBase64?: string;\r\n\r\n  levelDb?: LevelDb;\r\n\r\n  actorsById: { [identifier: string]: ActorItem } = {};\r\n\r\n  levelData?: WorldLevelDat;\r\n\r\n  private _minX: number | undefined;\r\n  private _maxX: number | undefined;\r\n  private _minZ: number | undefined;\r\n  private _maxZ: number | undefined;\r\n\r\n  regionsByDimension: { [dim: number]: IRegion[] } = {};\r\n\r\n  chunks: Map<number, Map<number, Map<number, WorldChunk>>> = new Map();\r\n\r\n  /**\r\n   * All dimension IDs found in LevelDB chunk keys, including custom dimensions (>= 1000).\r\n   * Populated during processWorldData or buildMinimalWorldIndex.\r\n   */\r\n  private _dimensionIdsInChunks: Set<number> = new Set();\r\n\r\n  /**\r\n   * Parsed DimensionNameIdTable from LevelDB: maps dimension name to numeric ID.\r\n   * Undefined if the DimensionNameIdTable key was not found.\r\n   */\r\n  private _dimensionNameIdTable: Map<string, number> | undefined;\r\n\r\n  /** Whether the DimensionNameIdTable key exists in the LevelDB */\r\n  private _hasDimensionNameIdTable = false;\r\n\r\n  /** LRU cache for chunk data - manages memory by evicting old chunks */\r\n  private _chunkCache?: WorldChunkCache;\r\n\r\n  /** Whether lazy loading mode is enabled for this world */\r\n  private _isLazyLoadMode = false;\r\n\r\n  /**\r\n   * Set of chunk keys that exist in the world (format: \"dim_x_z\").\r\n   * Built during buildMinimalWorldIndex for O(1) chunk existence checking.\r\n   * This allows fast filtering of empty/non-existent chunks without scanning LevelDB keys.\r\n   */\r\n  private _chunkExistsSet: Set<string> = new Set();\r\n\r\n  /**\r\n   * Returns the set of all known chunk keys (format: \"dim_x_z\").\r\n   * Used by WorldMap to ensure sparse worlds render all known chunks,\r\n   * not just those hit by the sampling grid.\r\n   */\r\n  public get knownChunkKeys(): ReadonlySet<string> {\r\n    return this._chunkExistsSet;\r\n  }\r\n\r\n  /**\r\n   * Index mapping chunk keys (\"dim_x_z\") to the list of LevelDB key names for that chunk.\r\n   * Built during buildMinimalWorldIndex for O(1) chunk key lookup.\r\n   * This eliminates the O(N) full-scan of LevelDB keys in getOrCreateChunk.\r\n   */\r\n  private _chunkKeyIndex: Map<string, string[]> = new Map();\r\n\r\n  public get project() {\r\n    return this._project;\r\n  }\r\n\r\n  public set project(newProject: Project | undefined) {\r\n    this._project = newProject;\r\n  }\r\n\r\n  public get anchors() {\r\n    return this._anchors;\r\n  }\r\n\r\n  public get chunkMinY() {\r\n    return this._chunkMinY;\r\n  }\r\n\r\n  public set chunkMinY(newY: number) {\r\n    this._chunkMinY = newY;\r\n  }\r\n\r\n  public get effectiveRootFolder() {\r\n    if (this._folder) {\r\n      return this._folder;\r\n    }\r\n\r\n    if (this._file && this._file.fileContainerStorage) {\r\n      return this._file.fileContainerStorage.rootFolder;\r\n    }\r\n\r\n    if (this._zipStorage !== undefined) {\r\n      return this._zipStorage.rootFolder;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get manifest() {\r\n    return this._manifest;\r\n  }\r\n\r\n  public get hasDynamicProps() {\r\n    return this._hasDynamicProps;\r\n  }\r\n\r\n  public get hasCustomProps() {\r\n    return this._hasCustomProps;\r\n  }\r\n\r\n  public get minX() {\r\n    return this._minX;\r\n  }\r\n\r\n  public get maxX() {\r\n    return this._maxX;\r\n  }\r\n\r\n  public get minZ() {\r\n    return this._minZ;\r\n  }\r\n\r\n  public get maxZ() {\r\n    return this._maxZ;\r\n  }\r\n\r\n  /** Get whether lazy loading mode is enabled */\r\n  public get isLazyLoadMode(): boolean {\r\n    return this._isLazyLoadMode;\r\n  }\r\n\r\n  /** Get the chunk cache (only available when using chunk caching) */\r\n  public get chunkCache(): WorldChunkCache | undefined {\r\n    return this._chunkCache;\r\n  }\r\n\r\n  /** All dimension IDs found in LevelDB chunk keys, including custom dimensions (>= 1000). */\r\n  public get dimensionIdsInChunks(): ReadonlySet<number> {\r\n    return this._dimensionIdsInChunks;\r\n  }\r\n\r\n  /** Whether the DimensionNameIdTable key was found in the LevelDB. */\r\n  public get hasDimensionNameIdTable(): boolean {\r\n    return this._hasDimensionNameIdTable;\r\n  }\r\n\r\n  /** Parsed DimensionNameIdTable: maps dimension name to numeric ID. Undefined if not found. */\r\n  public get dimensionNameIdTable(): ReadonlyMap<string, number> | undefined {\r\n    return this._dimensionNameIdTable;\r\n  }\r\n\r\n  /** Parse DimensionNameIdTable NBT bytes into the name-to-ID map. */\r\n  private _parseDimensionNameIdTable(tableBytes: Uint8Array) {\r\n    this._hasDimensionNameIdTable = true;\r\n\r\n    const tableNbt = new NbtBinary();\r\n    tableNbt.context = this.name + \" DimensionNameIdTable\";\r\n    tableNbt.fromBinary(tableBytes, true, false, 0, true);\r\n\r\n    if (tableNbt.singleRoot) {\r\n      this._dimensionNameIdTable = new Map();\r\n      const children = tableNbt.singleRoot.getTagChildren();\r\n\r\n      for (const child of children) {\r\n        if (child.name && (child.type === NbtTagType.int || child.type === NbtTagType.long)) {\r\n          this._dimensionNameIdTable.set(child.name, child.valueAsInt);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if chunk data exists at the specified coordinates without loading it.\r\n   * This is O(1) when buildMinimalWorldIndex has been called (skipFullProcessing mode).\r\n   * Returns true if the chunk exists in the world's LevelDB data.\r\n   * Returns undefined if existence cannot be determined (index not built).\r\n   */\r\n  public hasChunkData(dim: number, x: number, z: number): boolean | undefined {\r\n    // If we have the chunk exists set, use it for O(1) lookup\r\n    if (this._chunkExistsSet.size > 0) {\r\n      return this._chunkExistsSet.has(`${dim}_${x}_${z}`);\r\n    }\r\n\r\n    // If we already have the chunk loaded, it exists\r\n    const existing = this.getChunkAt(dim, x, z);\r\n    if (existing) {\r\n      return true;\r\n    }\r\n\r\n    // Can't determine without scanning LevelDB\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get a chunk by coordinates.\r\n   * If chunk caching is enabled, marks the chunk as recently accessed.\r\n   */\r\n  public getChunkAt(dim: number, x: number, z: number): WorldChunk | undefined {\r\n    const dimMap = this.chunks.get(dim);\r\n    if (!dimMap) return undefined;\r\n\r\n    const xPlane = dimMap.get(x);\r\n    if (!xPlane) return undefined;\r\n\r\n    const chunk = xPlane.get(z);\r\n\r\n    // Track access for LRU cache\r\n    if (chunk && this._chunkCache) {\r\n      this._chunkCache.access(dim, x, z);\r\n    }\r\n\r\n    return chunk;\r\n  }\r\n\r\n  /**\r\n   * Get a chunk by cache key (format: \"dim_x_z\").\r\n   * Used by WorldChunkCache for eviction callbacks.\r\n   */\r\n  public getChunkByKey(key: string): WorldChunk | undefined {\r\n    const coords = WorldChunkCache.parseKey(key);\r\n    if (!coords) return undefined;\r\n\r\n    const dimMap = this.chunks.get(coords.dim);\r\n    if (!dimMap) return undefined;\r\n\r\n    const xPlane = dimMap.get(coords.x);\r\n    if (!xPlane) return undefined;\r\n\r\n    return xPlane.get(coords.z);\r\n  }\r\n\r\n  public get generationSeed() {\r\n    if (this._generationSeed === undefined && this._levelChunkMetaData && this._levelChunkMetaData.singleRoot) {\r\n      const tag = this._levelChunkMetaData.singleRoot.find(\"GenerationSeed\");\r\n      if (tag !== null) {\r\n        this._generationSeed = tag.valueAsBigInt.toString();\r\n      }\r\n    }\r\n\r\n    return this._generationSeed;\r\n  }\r\n\r\n  public async copyAsFolderTo(targetFolder: IFolder) {\r\n    if (this._folder) {\r\n      await StorageUtilities.syncFolderTo(this._folder, targetFolder, true, true, true);\r\n    } else if (this._file) {\r\n      const storage = this.storage;\r\n\r\n      if (storage) {\r\n        await StorageUtilities.syncFolderTo(this.storage.rootFolder, targetFolder, true, true, true);\r\n      }\r\n    }\r\n  }\r\n\r\n  public get storage() {\r\n    if (this._file) {\r\n      if (!this._file.fileContainerStorage) {\r\n        this._file.fileContainerStorage = new ZipStorage();\r\n        this._file.fileContainerStorage.containerFile = this._file;\r\n        this._file.fileContainerStorage.storagePath = this._file.extendedPath + \"#\";\r\n      }\r\n\r\n      return this._file.fileContainerStorage;\r\n    }\r\n\r\n    if (this._zipStorage === undefined) {\r\n      this._zipStorage = new ZipStorage();\r\n    }\r\n\r\n    return this._zipStorage;\r\n  }\r\n\r\n  public ensureZipStorage() {\r\n    if (this._zipStorage === undefined) {\r\n      this._zipStorage = new ZipStorage();\r\n    }\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  get storageErrorStatus() {\r\n    if (!this.storage) {\r\n      return StorageErrorStatus.none;\r\n    }\r\n\r\n    return this.storage.errorStatus;\r\n  }\r\n\r\n  get storageErrorMessage() {\r\n    return this.storage.errorMessage;\r\n  }\r\n\r\n  get storageFullPath() {\r\n    if (this._file) {\r\n      return this._file.fullPath;\r\n    }\r\n\r\n    if (this._folder) {\r\n      return this._folder.fullPath;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get deferredTechnicalPreviewExperiment() {\r\n    if (this.levelData !== undefined) {\r\n      const val = this.levelData.deferredTechnicalPreviewExperiment;\r\n\r\n      if (val === undefined) {\r\n        return false;\r\n      }\r\n\r\n      return val;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  set deferredTechnicalPreviewExperiment(newVal: boolean) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    if (this.levelData !== undefined) {\r\n      this.levelData.deferredTechnicalPreviewExperiment = newVal;\r\n    }\r\n  }\r\n\r\n  get betaApisExperiment() {\r\n    if (this.levelData !== undefined) {\r\n      const val = this.levelData.betaApisExperiment;\r\n\r\n      if (val === undefined) {\r\n        return false;\r\n      }\r\n\r\n      return val;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  set betaApisExperiment(newVal: boolean) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    if (this.levelData !== undefined) {\r\n      this.levelData.betaApisExperiment = newVal;\r\n    }\r\n  }\r\n\r\n  get dataDrivenItemsExperiment() {\r\n    if (this.levelData !== undefined) {\r\n      const val = this.levelData.dataDrivenItemsExperiment;\r\n\r\n      if (val === undefined) {\r\n        return false;\r\n      }\r\n\r\n      return val;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  set dataDrivenItemsExperiment(newVal: boolean) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    if (this.levelData !== undefined) {\r\n      this.levelData.dataDrivenItemsExperiment = newVal;\r\n    }\r\n  }\r\n\r\n  get name() {\r\n    if (this._levelNameText !== undefined) {\r\n      return this._levelNameText;\r\n    }\r\n\r\n    if (this.levelData !== undefined && this.levelData.levelName !== undefined) {\r\n      return this.levelData.levelName;\r\n    }\r\n\r\n    if (this._file !== undefined) {\r\n      return this._file.name;\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n\r\n  set name(newValue: string) {\r\n    this._levelNameText = newValue;\r\n\r\n    if (this.levelData !== undefined) {\r\n      this.levelData.levelName = newValue;\r\n    }\r\n  }\r\n\r\n  get file() {\r\n    return this._file;\r\n  }\r\n\r\n  set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  get folder() {\r\n    return this._folder;\r\n  }\r\n\r\n  set folder(newFolder: IFolder | undefined) {\r\n    this._folder = newFolder;\r\n  }\r\n\r\n  get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  get spawnX(): number | undefined {\r\n    if (this.levelData === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.levelData.spawnX;\r\n  }\r\n\r\n  set spawnX(newX: number | undefined) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    this.levelData.spawnX = newX;\r\n\r\n    this._onPropertyChanged.dispatch(this, \"spawnX\");\r\n  }\r\n\r\n  get spawnY() {\r\n    if (this.levelData === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.levelData.spawnY;\r\n  }\r\n\r\n  set spawnY(newY: number | undefined) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    this.levelData.spawnY = newY;\r\n\r\n    this._onPropertyChanged.dispatch(this, \"spawnY\");\r\n  }\r\n\r\n  get spawnZ() {\r\n    if (this.levelData === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.levelData.spawnZ;\r\n  }\r\n\r\n  set spawnZ(newZ: number | undefined) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    this.levelData.spawnZ = newZ;\r\n\r\n    this._onPropertyChanged.dispatch(this, \"spawnZ\");\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onDataLoaded() {\r\n    return this._onDataLoaded.asEvent();\r\n  }\r\n\r\n  public get onChunkUpdated() {\r\n    return this._onChunkUpdated.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Event fired when world data is externally modified and reloaded.\r\n   * Subscribe to this event to update UI when remote changes occur.\r\n   */\r\n  public get onWorldDataReloaded() {\r\n    return this._onWorldDataReloaded.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Whether this world is listening to storage events for automatic updates.\r\n   */\r\n  public get isListeningToStorage(): boolean {\r\n    return this._isListeningToStorage;\r\n  }\r\n\r\n  /**\r\n   * Start listening to storage events for automatic world data updates.\r\n   * When file changes are detected (via WebSocket or fs watcher), the world\r\n   * will automatically reload affected data and fire appropriate events.\r\n   */\r\n  public startListeningToStorage(): void {\r\n    Log.verbose(\"[MCWorld] startListeningToStorage called, _isListeningToStorage=\" + this._isListeningToStorage);\r\n\r\n    if (this._isListeningToStorage) {\r\n      Log.verbose(\"[MCWorld] Already listening to storage events - returning\");\r\n      return;\r\n    }\r\n\r\n    const storage = this.effectiveRootFolder?.storage;\r\n    Log.verbose(\r\n      \"[MCWorld] effectiveRootFolder=\" +\r\n        this.effectiveRootFolder?.fullPath +\r\n        \", storage=\" +\r\n        (storage ? storage.constructor.name : \"null\")\r\n    );\r\n\r\n    if (!storage) {\r\n      Log.verbose(\"[MCWorld] Cannot start listening: no storage available\");\r\n      return;\r\n    }\r\n\r\n    Log.message(`[MCWorld] Starting to listen to storage events on ${storage.constructor.name}`);\r\n\r\n    // Subscribe to file content updates\r\n    storage.onFileContentsUpdated.subscribe((sender, event) => {\r\n      Log.message(`[MCWorld] Received onFileContentsUpdated: ${event.file.storageRelativePath}`);\r\n      this._handleStorageFileUpdate(event.file.storageRelativePath, event);\r\n    });\r\n\r\n    // Subscribe to file additions\r\n    storage.onFileAdded.subscribe((sender, file) => {\r\n      Log.message(`[MCWorld] Received onFileAdded: ${file.storageRelativePath}`);\r\n      this._handleStorageFileAdded(file.storageRelativePath);\r\n    });\r\n\r\n    // Subscribe to file removals\r\n    storage.onFileRemoved.subscribe((sender, path) => {\r\n      Log.message(`[MCWorld] Received onFileRemoved: ${path}`);\r\n      this._handleStorageFileRemoved(path);\r\n    });\r\n\r\n    this._isListeningToStorage = true;\r\n    Log.message(\"[MCWorld] Successfully subscribed to storage events\");\r\n  }\r\n\r\n  /**\r\n   * Stop listening to storage events.\r\n   */\r\n  public stopListeningToStorage(): void {\r\n    // Note: ste-events doesn't have a simple \"unsubscribe all\" mechanism\r\n    // In a full implementation, we'd need to track subscription handles\r\n    this._isListeningToStorage = false;\r\n    Log.verbose(\"MCWorld: Stopped listening to storage events\");\r\n  }\r\n\r\n  /**\r\n   * Handle a file update from storage.\r\n   */\r\n  private async _handleStorageFileUpdate(path: string, event: any): Promise<void> {\r\n    if (!path) return;\r\n\r\n    // The path coming from storage events may be like /world/db/000039.log\r\n    // But MCWorld's effectiveRootFolder is already the world folder,\r\n    // so we need to strip the /world prefix if present\r\n    let relativePath = path;\r\n    if (relativePath.startsWith(\"/world/\")) {\r\n      relativePath = relativePath.substring(6); // Keep the leading / after \"world\"\r\n    } else if (relativePath.startsWith(\"world/\")) {\r\n      relativePath = \"/\" + relativePath.substring(6);\r\n    }\r\n\r\n    const pathLower = relativePath.toLowerCase();\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (!rootFolder) return;\r\n\r\n    try {\r\n      // Check what type of file changed\r\n      if (pathLower.endsWith(\"level.dat\")) {\r\n        // Reload level data\r\n        const levelDatFile = await rootFolder.getFileFromRelativePath(LEVELDAT_RELPATH);\r\n        if (levelDatFile) {\r\n          await levelDatFile.loadContent(true);\r\n          if (levelDatFile.content instanceof Uint8Array) {\r\n            this.levelData = new WorldLevelDat();\r\n            this.levelData.loadFromNbtBytes(levelDatFile.content);\r\n            this._loadFromNbt();\r\n          }\r\n        }\r\n        this._onWorldDataReloaded.dispatch(this, \"level.dat\");\r\n      } else if (pathLower.endsWith(\"levelname.txt\")) {\r\n        // Reload level name\r\n        const levelNameFile = await rootFolder.getFileFromRelativePath(LEVELNAMETXT_RELPATH);\r\n        if (levelNameFile) {\r\n          await levelNameFile.loadContent(true);\r\n          if (typeof levelNameFile.content === \"string\") {\r\n            this.name = levelNameFile.content;\r\n          }\r\n        }\r\n        this._onWorldDataReloaded.dispatch(this, \"levelname.txt\");\r\n      } else if (pathLower.includes(\"/db/\") && (pathLower.endsWith(\".ldb\") || pathLower.endsWith(\".log\"))) {\r\n        // LevelDB file changed - use incremental loading\r\n        await this._handleIncrementalLevelDbUpdate(relativePath);\r\n      } else if (pathLower.endsWith(\"world_behavior_packs.json\")) {\r\n        const packsFile = await rootFolder.getFileFromRelativePath(BEHAVIOR_PACKS_RELPATH);\r\n        if (packsFile) {\r\n          await packsFile.loadContent(true);\r\n          if (typeof packsFile.content === \"string\") {\r\n            this.worldBehaviorPacks = StorageUtilities.getJsonObject(packsFile);\r\n          }\r\n        }\r\n        this._onWorldDataReloaded.dispatch(this, \"behavior_packs\");\r\n      } else if (pathLower.endsWith(\"world_resource_packs.json\")) {\r\n        const packsFile = await rootFolder.getFileFromRelativePath(RESOURCE_PACKS_RELPATH);\r\n        if (packsFile) {\r\n          await packsFile.loadContent(true);\r\n          if (typeof packsFile.content === \"string\") {\r\n            this.worldResourcePacks = StorageUtilities.getJsonObject(packsFile);\r\n          }\r\n        }\r\n        this._onWorldDataReloaded.dispatch(this, \"resource_packs\");\r\n      }\r\n\r\n      Log.verbose(`MCWorld: Handled file update: ${path}`);\r\n    } catch (e) {\r\n      Log.debug(`MCWorld: Error handling file update ${path}: ${e}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle a new file being added to storage.\r\n   */\r\n  private async _handleStorageFileAdded(path: string): Promise<void> {\r\n    // For now, treat file additions similar to updates\r\n    await this._handleStorageFileUpdate(path, null);\r\n  }\r\n\r\n  /**\r\n   * Handle a file being removed from storage.\r\n   */\r\n  private async _handleStorageFileRemoved(path: string): Promise<void> {\r\n    if (!path) return;\r\n\r\n    const pathLower = path.toLowerCase();\r\n\r\n    // Handle removal of important files\r\n    if (pathLower.includes(\"/db/\") && pathLower.endsWith(\".ldb\")) {\r\n      // LevelDB compaction - chunks may have moved to new files\r\n      // This is a rare case where we might need a broader refresh,\r\n      // but typically compaction doesn't lose data, just reorganizes it\r\n      Log.verbose(`MCWorld: LDB file removed (compaction): ${path}`);\r\n    }\r\n\r\n    Log.verbose(`MCWorld: Handled file removal: ${path}`);\r\n  }\r\n\r\n  /**\r\n   * Handle incremental LevelDB file updates.\r\n   *\r\n   * When a new .ldb or .log file is detected, this method:\r\n   * 1. Parses just that file to extract new keys\r\n   * 2. Identifies which chunks are affected by those keys\r\n   * 3. Updates only those chunks with the new data\r\n   * 4. Fires onChunkUpdated for each affected chunk (for UI updates)\r\n   *\r\n   * This is much more efficient than reloading the entire world.\r\n   */\r\n  private async _handleIncrementalLevelDbUpdate(path: string): Promise<void> {\r\n    if (!this.levelDb) {\r\n      // LevelDB not yet loaded - nothing to update incrementally\r\n      return;\r\n    }\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n    if (!rootFolder) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Get the file that changed\r\n      const file = await rootFolder.getFileFromRelativePath(path);\r\n      if (!file) {\r\n        Log.debug(`MCWorld: Could not find LDB file for incremental update: ${path}`);\r\n        return;\r\n      }\r\n\r\n      // Parse the file and get affected chunk coordinates\r\n      const affectedChunks = await this.levelDb.parseIncrementalFile(file);\r\n\r\n      if (affectedChunks.length === 0) {\r\n        return;\r\n      }\r\n\r\n      Log.verbose(`MCWorld: Incremental update - ${affectedChunks.length} chunks affected from ${path}`);\r\n\r\n      // Update each affected chunk\r\n      for (const coord of affectedChunks) {\r\n        await this._updateChunkFromLevelDb(coord);\r\n      }\r\n    } catch (e) {\r\n      Log.error(`MCWorld: Error in incremental LDB update ${path}: ${e}`);\r\n      // Fall back to signaling a broader refresh\r\n      this._onWorldDataReloaded.dispatch(this, \"leveldb\");\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update a single chunk from LevelDB keys.\r\n   *\r\n   * This finds all keys for the specified chunk coordinates and either:\r\n   * - Updates an existing chunk with the new data\r\n   * - Creates a new chunk if one doesn't exist\r\n   *\r\n   * After updating, fires onChunkUpdated for UI refresh.\r\n   */\r\n  private async _updateChunkFromLevelDb(coord: IChunkCoordinate): Promise<void> {\r\n    if (!this.levelDb) return;\r\n\r\n    const { x, z, dimension } = coord;\r\n\r\n    // Get or create the chunk\r\n    let chunk = this.getChunkAt(dimension, x, z);\r\n    const isNewChunk = !chunk;\r\n\r\n    if (!chunk) {\r\n      chunk = new WorldChunk(this, x, z);\r\n    } else {\r\n      // Clear cached/parsed data so it will be re-parsed from the updated keys\r\n      chunk.clearCachedData();\r\n    }\r\n\r\n    // Find all keys that belong to this chunk and add them\r\n    const chunkKey = `${dimension}_${x}_${z}`;\r\n    const indexedKeyNames = this._chunkKeyIndex.get(chunkKey);\r\n\r\n    if (indexedKeyNames && indexedKeyNames.length > 0) {\r\n      // Fast path: use the pre-built chunk key index\r\n      for (const keyname of indexedKeyNames) {\r\n        const keyValue = this.levelDb.keys.get(keyname);\r\n        if (!keyValue || typeof keyValue === \"boolean\") continue;\r\n        chunk.addKeyValue(keyValue);\r\n      }\r\n    } else {\r\n      // Fallback: scan all LevelDB keys (used when index isn't built)\r\n      const hasDim = dimension !== 0;\r\n      for (const [keyname, keyValue] of this.levelDb.keys) {\r\n        // Skip if keyValue is undefined, false (deleted marker), or not a LevelKeyValue\r\n        if (!keyValue || typeof keyValue === \"boolean\") continue;\r\n\r\n        const keyBytes = keyValue.keyBytes;\r\n        if (!keyBytes) continue;\r\n        if (keyBytes.length < 9 || keyBytes.length > 14) continue;\r\n\r\n        const expectedLength = hasDim ? 13 : 9;\r\n        if (keyBytes.length !== expectedLength && keyBytes.length !== expectedLength + 1) continue;\r\n\r\n        const kx = DataUtilities.getSignedInteger(keyBytes[0], keyBytes[1], keyBytes[2], keyBytes[3], true);\r\n        const kz = DataUtilities.getSignedInteger(keyBytes[4], keyBytes[5], keyBytes[6], keyBytes[7], true);\r\n\r\n        if (kx !== x || kz !== z) continue;\r\n\r\n        let kDim = 0;\r\n        if (hasDim && keyBytes.length >= 13) {\r\n          kDim = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n        }\r\n\r\n        if (kDim !== dimension) continue;\r\n\r\n        // This key belongs to this chunk - add it\r\n        chunk.addKeyValue(keyValue);\r\n      }\r\n    }\r\n\r\n    // Add new chunk to the chunks map if needed\r\n    if (isNewChunk) {\r\n      let dimMap = this.chunks.get(dimension);\r\n      if (!dimMap) {\r\n        dimMap = new Map();\r\n        this.chunks.set(dimension, dimMap);\r\n      }\r\n\r\n      let xPlane = dimMap.get(x);\r\n      if (!xPlane) {\r\n        xPlane = new Map();\r\n        dimMap.set(x, xPlane);\r\n      }\r\n\r\n      xPlane.set(z, chunk);\r\n      this.chunkCount++;\r\n\r\n      // Update bounds\r\n      if (this._minX === undefined || x * 16 < this._minX) {\r\n        this._minX = x * 16;\r\n      }\r\n      if (this._maxX === undefined || (x + 1) * 16 > this._maxX) {\r\n        this._maxX = (x + 1) * 16;\r\n      }\r\n      if (this._minZ === undefined || z * 16 < this._minZ) {\r\n        this._minZ = z * 16;\r\n      }\r\n      if (this._maxZ === undefined || (z + 1) * 16 > this._maxZ) {\r\n        this._maxZ = (z + 1) * 16;\r\n      }\r\n\r\n      // Add to chunk exists set\r\n      if (this._chunkExistsSet) {\r\n        this._chunkExistsSet.add(`${dimension}_${x}_${z}`);\r\n      }\r\n    }\r\n\r\n    // Track access for LRU cache\r\n    if (this._chunkCache) {\r\n      this._chunkCache.access(dimension, x, z);\r\n    }\r\n\r\n    // Notify listeners that this chunk was updated\r\n    this._onChunkUpdated.dispatch(this, chunk);\r\n  }\r\n\r\n  /**\r\n   * Called by WorldChunk when chunk data is superceded by newer LevelDB keys.\r\n   * This notifies subscribers (like WorldMap) that they may need to redraw affected tiles.\r\n   */\r\n  notifyChunkUpdated(chunk: WorldChunk) {\r\n    this._onChunkUpdated.dispatch(this, chunk);\r\n  }\r\n\r\n  static async ensureMCWorldOnFolder(folder: IFolder, project?: Project, handler?: IEventHandler<MCWorld, MCWorld>) {\r\n    if (folder.manager === undefined) {\r\n      const world = new MCWorld();\r\n\r\n      world.project = project;\r\n      world.folder = folder;\r\n\r\n      folder.manager = world;\r\n    }\r\n\r\n    if (folder.manager !== undefined && folder.manager instanceof MCWorld) {\r\n      const mcworld = folder.manager as MCWorld;\r\n\r\n      if (!mcworld.isLoaded) {\r\n        if (handler) {\r\n          mcworld.onLoaded.subscribe(handler);\r\n        }\r\n        await mcworld.loadMetaFiles(false);\r\n      } else if (handler) {\r\n        handler(mcworld, mcworld, { unsub: () => {}, stopPropagation: () => {} });\r\n      }\r\n\r\n      return mcworld;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureOnItem(projectItem: ProjectItem) {\r\n    let mcworld: MCWorld | undefined = undefined;\r\n\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.defaultFolder) {\r\n      mcworld = await MCWorld.ensureMCWorldOnFolder(projectItem.defaultFolder, projectItem.project);\r\n    } else if (projectItem.primaryFile) {\r\n      mcworld = await MCWorld.ensureOnFile(projectItem.primaryFile, projectItem.project);\r\n    }\r\n\r\n    if (!mcworld) {\r\n      Log.debugAlert(\"Could not find respective world.\");\r\n    }\r\n\r\n    return mcworld;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, project?: Project, handler?: IEventHandler<MCWorld, MCWorld>) {\r\n    if (file.manager === undefined) {\r\n      const world = new MCWorld();\r\n      world.project = project;\r\n      world.file = file;\r\n\r\n      file.manager = world;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof MCWorld) {\r\n      const mcworld = file.manager as MCWorld;\r\n\r\n      if (!mcworld.isLoaded) {\r\n        if (handler) {\r\n          mcworld.onLoaded.subscribe(handler);\r\n        }\r\n        await mcworld.loadMetaFiles(false);\r\n      } else if (handler) {\r\n        handler(mcworld, mcworld, { unsub: () => {}, stopPropagation: () => {} });\r\n      }\r\n\r\n      return mcworld;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  loadAnchorsFromDynamicProperties() {\r\n    if (this._dynamicProperties && this._dynamicProperties[CREATOR_TOOLS_EDITOR_BPUUID]) {\r\n      this._anchors.clearAll();\r\n\r\n      const anchorStr = this._dynamicProperties && this._dynamicProperties[CREATOR_TOOLS_EDITOR_BPUUID][\"anchors\"];\r\n\r\n      if (anchorStr && typeof anchorStr === \"string\") {\r\n        this._anchors.fromString(anchorStr);\r\n        this.saveAutoGenItems();\r\n      }\r\n    }\r\n  }\r\n\r\n  public _updateMeta() {\r\n    this.regionsByDimension = {};\r\n\r\n    const chunkDims = this.chunks.keys();\r\n\r\n    for (const dimNum of chunkDims) {\r\n      const dim = this.chunks.get(dimNum);\r\n\r\n      let regions: IRegion[] = [];\r\n\r\n      if (dim) {\r\n        const xNums = dim.keys();\r\n\r\n        for (const xNum of xNums) {\r\n          const xPlane = dim.get(xNum);\r\n\r\n          if (xPlane) {\r\n            const zNums = xPlane.keys();\r\n            for (const zNum of zNums) {\r\n              let addedToRegion = false;\r\n\r\n              for (const region of regions) {\r\n                if (xNum >= region.minX && xNum <= region.maxX && zNum >= region.minZ && zNum <= region.maxZ) {\r\n                  region.minX = Math.min(region.minX, xNum - 1);\r\n                  region.minZ = Math.min(region.minZ, zNum - 1);\r\n                  region.maxX = Math.max(region.maxX, xNum + 1);\r\n                  region.maxZ = Math.max(region.maxZ, zNum + 1);\r\n                  addedToRegion = true;\r\n                }\r\n              }\r\n\r\n              if (!addedToRegion) {\r\n                regions.push({\r\n                  minX: xNum - 1,\r\n                  minZ: zNum - 1,\r\n                  maxX: xNum + 1,\r\n                  maxZ: zNum + 1,\r\n                });\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      this.regionsByDimension[dimNum] = this._coalesceRegions(regions);\r\n    }\r\n  }\r\n\r\n  private _coalesceRegions(regions: IRegion[]) {\r\n    const newRegions: IRegion[] = [];\r\n\r\n    for (const region of regions) {\r\n      let addedToRegion = false;\r\n\r\n      for (const newRegion of newRegions) {\r\n        if (\r\n          region.minX >= newRegion.minX &&\r\n          region.minX <= newRegion.maxX &&\r\n          region.minZ >= newRegion.minZ &&\r\n          region.minZ <= newRegion.maxZ\r\n        ) {\r\n          newRegion.minX = Math.min(newRegion.minX, region.minX - 1);\r\n          newRegion.minZ = Math.min(newRegion.minZ, region.minZ - 1);\r\n          newRegion.maxX = Math.max(newRegion.maxX, region.minX + 1);\r\n          newRegion.maxZ = Math.max(newRegion.maxZ, region.minZ + 1);\r\n          addedToRegion = true;\r\n          break;\r\n        }\r\n        if (\r\n          region.maxX >= newRegion.minX &&\r\n          region.maxX <= newRegion.maxX &&\r\n          region.minZ >= newRegion.minZ &&\r\n          region.minZ <= newRegion.maxZ\r\n        ) {\r\n          newRegion.minX = Math.min(newRegion.minX, region.maxX - 1);\r\n          newRegion.minZ = Math.min(newRegion.minZ, region.minZ - 1);\r\n          newRegion.maxX = Math.max(newRegion.maxX, region.maxX + 1);\r\n          newRegion.maxZ = Math.max(newRegion.maxZ, region.minZ + 1);\r\n          addedToRegion = true;\r\n          break;\r\n        }\r\n        if (\r\n          region.minX >= newRegion.minX &&\r\n          region.minX <= newRegion.maxX &&\r\n          region.maxZ >= newRegion.minZ &&\r\n          region.maxZ <= newRegion.maxZ\r\n        ) {\r\n          newRegion.minX = Math.min(newRegion.minX, region.minX - 1);\r\n          newRegion.minZ = Math.min(newRegion.minZ, region.maxZ - 1);\r\n          newRegion.maxX = Math.max(newRegion.maxX, region.minX + 1);\r\n          newRegion.maxZ = Math.max(newRegion.maxZ, region.maxZ + 1);\r\n          addedToRegion = true;\r\n          break;\r\n        }\r\n\r\n        if (\r\n          region.maxX >= newRegion.minX &&\r\n          region.maxX <= newRegion.maxX &&\r\n          region.maxZ >= newRegion.minZ &&\r\n          region.maxZ <= newRegion.maxZ\r\n        ) {\r\n          newRegion.minX = Math.min(newRegion.minX, region.maxX - 1);\r\n          newRegion.minZ = Math.min(newRegion.minZ, region.maxZ - 1);\r\n          newRegion.maxX = Math.max(newRegion.maxX, region.maxX + 1);\r\n          newRegion.maxZ = Math.max(newRegion.maxZ, region.maxZ + 1);\r\n          addedToRegion = true;\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (!addedToRegion) {\r\n        newRegions.push(region);\r\n      }\r\n    }\r\n\r\n    return newRegions;\r\n  }\r\n\r\n  private _pushError(message: string, contextIn?: string) {\r\n    this.isInErrorState = true;\r\n\r\n    if (this.errorMessages === undefined) {\r\n      this.errorMessages = [];\r\n    }\r\n\r\n    Log.error(message + (contextIn ? \" \" + contextIn : \"\"));\r\n\r\n    this.errorMessages.push({\r\n      message: message,\r\n      context: contextIn,\r\n    });\r\n  }\r\n\r\n  async save() {\r\n    if (this.storageErrorStatus === StorageErrorStatus.unprocessable) {\r\n      return;\r\n    }\r\n\r\n    await this.saveWorldManifest();\r\n    await this.saveLevelnameTxt();\r\n    await this.saveLevelDat();\r\n    await this.saveAutoGenItems();\r\n    await this.saveWorldBehaviorPacks();\r\n    await this.saveWorldBehaviorPackHistory();\r\n    await this.saveWorldResourcePacks();\r\n    await this.saveWorldResourcePackHistory();\r\n  }\r\n\r\n  private async saveWorldManifest() {\r\n    if (this._manifest !== undefined && this.effectiveRootFolder !== undefined) {\r\n      this._manifest.header.name = this.name;\r\n\r\n      const manifestJsonFile = await this.effectiveRootFolder.ensureFileFromRelativePath(MANIFEST_RELPATH);\r\n\r\n      if (manifestJsonFile !== undefined) {\r\n        manifestJsonFile.setContent(JSON.stringify(this._manifest, null, 2));\r\n\r\n        await manifestJsonFile.saveContent();\r\n      }\r\n    }\r\n  }\r\n\r\n  private async saveLevelnameTxt() {\r\n    const name = this.name;\r\n\r\n    if (name !== undefined && this.effectiveRootFolder !== undefined) {\r\n      const rootDataFile = await this.effectiveRootFolder.ensureFileFromRelativePath(LEVELNAMETXT_RELPATH);\r\n\r\n      if (rootDataFile !== undefined) {\r\n        rootDataFile.setContent(name);\r\n        await rootDataFile.saveContent();\r\n      }\r\n    }\r\n  }\r\n\r\n  private async saveLevelDat() {\r\n    if (this.levelData !== undefined && this.effectiveRootFolder !== undefined) {\r\n      this.levelData.persist();\r\n\r\n      let rootDataFile = await this.effectiveRootFolder.ensureFileFromRelativePath(LEVELDAT_RELPATH);\r\n      const bytes = this.levelData.getBytes();\r\n\r\n      if (rootDataFile !== undefined && bytes !== undefined) {\r\n        rootDataFile.setContent(bytes);\r\n        await rootDataFile.saveContent();\r\n      }\r\n\r\n      rootDataFile = await this.effectiveRootFolder.ensureFileFromRelativePath(LEVELDATOLD_RELPATH);\r\n\r\n      if (rootDataFile !== undefined && bytes !== undefined) {\r\n        rootDataFile.setContent(bytes);\r\n        await rootDataFile.saveContent();\r\n      }\r\n    }\r\n  }\r\n\r\n  async getBytes() {\r\n    if (this._file) {\r\n      if (!this._file.fileContainerStorage) {\r\n        this._file.fileContainerStorage = new ZipStorage();\r\n\r\n        this._file.fileContainerStorage.containerFile = this._file;\r\n        this._file.fileContainerStorage.storagePath = this._file.extendedPath + \"#\";\r\n      }\r\n\r\n      await this.save();\r\n\r\n      return await (this._file.fileContainerStorage as ZipStorage).generateUint8ArrayAsync();\r\n    }\r\n\r\n    if (this._zipStorage === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    await this.save();\r\n\r\n    return await this._zipStorage.generateUint8ArrayAsync();\r\n  }\r\n\r\n  async syncFolderTo(folder: IFolder) {\r\n    await this.save();\r\n\r\n    const sourceFolder = this.effectiveRootFolder;\r\n\r\n    if (!sourceFolder) {\r\n      Log.unexpectedUndefined(\"SFT\");\r\n      return;\r\n    }\r\n\r\n    await StorageUtilities.syncFolderTo(sourceFolder, folder, true, true, true);\r\n  }\r\n\r\n  async saveToFile() {\r\n    if (this._zipStorage === undefined || this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    const bytes = await this.getBytes();\r\n\r\n    if (bytes !== undefined) {\r\n      this._file.setContent(bytes);\r\n    }\r\n  }\r\n\r\n  ensurePackReferenceSet(packRefSet: IPackageReference) {\r\n    if (this.worldBehaviorPacks === undefined) {\r\n      this.worldBehaviorPacks = [];\r\n    }\r\n\r\n    if (this.worldResourcePacks === undefined) {\r\n      this.worldResourcePacks = [];\r\n    }\r\n\r\n    if (this.worldBehaviorPackHistory === undefined) {\r\n      this.worldBehaviorPackHistory = {\r\n        packs: [],\r\n      };\r\n    }\r\n\r\n    if (this.worldResourcePackHistory === undefined) {\r\n      this.worldResourcePacks = [];\r\n    }\r\n\r\n    if (this.worldResourcePackHistory === undefined) {\r\n      this.worldResourcePackHistory = {\r\n        packs: [],\r\n      };\r\n    }\r\n\r\n    if (packRefSet.behaviorPackReferences) {\r\n      for (let i = 0; i < packRefSet.behaviorPackReferences.length; i++) {\r\n        this.ensurePackReferenceInCollection(packRefSet.behaviorPackReferences[i], this.worldBehaviorPacks);\r\n        this.ensurePackReferenceInHistory(\r\n          packRefSet.behaviorPackReferences[i],\r\n          this.worldBehaviorPackHistory,\r\n          packRefSet.name\r\n        );\r\n      }\r\n    }\r\n\r\n    if (packRefSet.resourcePackReferences) {\r\n      for (let i = 0; i < packRefSet.resourcePackReferences.length; i++) {\r\n        this.ensurePackReferenceInCollection(packRefSet.resourcePackReferences[i], this.worldResourcePacks);\r\n        this.ensurePackReferenceInHistory(\r\n          packRefSet.resourcePackReferences[i],\r\n          this.worldResourcePackHistory,\r\n          packRefSet.name\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  ensurePackReferenceInCollection(\r\n    packRef: { uuid: string; version: number[]; priority?: number },\r\n    packRefs: IPackRegistration[]\r\n  ) {\r\n    Log.assert(packRef.version.length === 3, \"Packref version not within bounds.\");\r\n\r\n    const compareUuid = Utilities.canonicalizeId(packRef.uuid);\r\n\r\n    for (let i = 0; i < packRefs.length; i++) {\r\n      if (Utilities.canonicalizeId(packRefs[i].pack_id) === compareUuid) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    packRefs.push({\r\n      pack_id: packRef.uuid,\r\n      version: packRef.version,\r\n      priority: packRef.priority ? packRef.priority : 32767,\r\n    });\r\n  }\r\n\r\n  ensurePackReferenceInHistory(\r\n    packRef: { uuid: string; version: number[]; priority?: number },\r\n    packHistory: IPackHistory,\r\n    name: string\r\n  ) {\r\n    Log.assert(packRef.version.length === 3, \"Packref version not within bounds.\");\r\n    if (packHistory.packs === undefined) {\r\n      packHistory.packs = [];\r\n    }\r\n\r\n    const compareUuid = Utilities.canonicalizeId(packRef.uuid);\r\n\r\n    for (let i = 0; i < packHistory.packs.length; i++) {\r\n      if (Utilities.canonicalizeId(packHistory.packs[i].uuid) === compareUuid) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    packHistory.packs.push({ can_be_redownloaded: false, name: name, uuid: packRef.uuid, version: packRef.version });\r\n  }\r\n\r\n  private _loadFromNbt() {}\r\n\r\n  public getProperty(id: string): any {\r\n    const ld = this.levelData;\r\n\r\n    switch (id.toLowerCase()) {\r\n      // World identity\r\n      case \"levelname\":\r\n        return ld?.levelName;\r\n      case \"gametype\":\r\n        return ld?.gameType;\r\n      case \"difficulty\":\r\n        return ld?.difficulty;\r\n      case \"generator\":\r\n        return ld?.generator;\r\n      case \"flatworldlayers\":\r\n        return ld?.flatWorldLayers ? JSON.stringify(ld.flatWorldLayers) : undefined;\r\n      case \"randomseed\":\r\n        return ld?.randomSeed;\r\n      case \"basegameversion\":\r\n        return ld?.baseGameVersion;\r\n      case \"inventoryversion\":\r\n        return ld?.inventoryVersion;\r\n\r\n      // Spawn & bounds\r\n      case \"spawnx\":\r\n        return this.spawnX;\r\n      case \"spawny\":\r\n        return this.spawnY;\r\n      case \"spawnz\":\r\n        return this.spawnZ;\r\n      case \"limitedworldoriginx\":\r\n        return ld?.limitedWorldOriginX;\r\n      case \"limitedworldoriginy\":\r\n        return ld?.limitedWorldOriginY;\r\n      case \"limitedworldoriginz\":\r\n        return ld?.limitedWorldOriginZ;\r\n      case \"limitedworlddepth\":\r\n        return ld?.limitedWorldDepth;\r\n      case \"limitedworldwidth\":\r\n        return ld?.limitedWorldWidth;\r\n      case \"spawnradius\":\r\n        return ld?.spawnRadius;\r\n\r\n      // Game rules (boolean)\r\n      case \"commandsenabled\":\r\n        return ld?.commandsEnabled;\r\n      case \"commandblocksenabled\":\r\n        return ld?.commandBlocksEnabled;\r\n      case \"commandblockoutput\":\r\n        return ld?.commandBlockOutput;\r\n      case \"cheatsenabled\":\r\n        return ld?.cheatsEnabled;\r\n      case \"dodaylightcycle\":\r\n        return ld?.doDaylightCycle;\r\n      case \"doentitydrops\":\r\n        return ld?.doEntityDrops;\r\n      case \"dofiretick\":\r\n        return ld?.doFireTick;\r\n      case \"doimmediaterespawn\":\r\n        return ld?.doImmediateRespawn;\r\n      case \"doinsomnia\":\r\n        return ld?.doInsomnia;\r\n      case \"domobloot\":\r\n        return ld?.doMobLoot;\r\n      case \"domobspawning\":\r\n        return ld?.doMobSpawning;\r\n      case \"dotiledrops\":\r\n        return ld?.doTileDrops;\r\n      case \"doweathercycle\":\r\n        return ld?.doWeatherCycle;\r\n      case \"drowningdamage\":\r\n        return ld?.drowningDamage;\r\n      case \"falldamage\":\r\n        return ld?.fallDamage;\r\n      case \"firedamage\":\r\n        return ld?.fireDamage;\r\n      case \"freezedamage\":\r\n        return ld?.freezeDamage;\r\n      case \"keepinventory\":\r\n        return ld?.keepInventory;\r\n      case \"mobgriefing\":\r\n        return ld?.mobGriefing;\r\n      case \"naturalregeneration\":\r\n        return ld?.naturalRegeneration;\r\n      case \"pvp\":\r\n        return ld?.pvp;\r\n      case \"respawnblocksexplode\":\r\n        return ld?.respawnBlocksExplode;\r\n      case \"sendcommandfeedback\":\r\n        return ld?.sendCommandFeedback;\r\n      case \"showcoordinates\":\r\n        return ld?.showCoordinates;\r\n      case \"showdeathmessages\":\r\n        return ld?.showDeathMessages;\r\n      case \"showtags\":\r\n        return ld?.showTags;\r\n      case \"showbordereffect\":\r\n        return ld?.showBorderEffect;\r\n      case \"tntexplodes\":\r\n        return ld?.tntExplodes;\r\n      case \"forcegametype\":\r\n        return ld?.forceGameType;\r\n      case \"immutableworld\":\r\n        return ld?.immutableWorld;\r\n      case \"spawnmobs\":\r\n        return ld?.spawnMobs;\r\n      case \"bonuschestenabled\":\r\n        return ld?.bonusChestEnabled;\r\n      case \"bonuschestspawned\":\r\n        return ld?.bonusChestSpawned;\r\n      case \"startwithmapenabled\":\r\n        return ld?.startWithMapEnabled;\r\n\r\n      // Game rules (numeric)\r\n      case \"randomtickspeed\":\r\n        return ld?.randomTickSpeed;\r\n      case \"functioncommandlimit\":\r\n        return ld?.functionCommandLimit;\r\n      case \"maxcommandchainlength\":\r\n        return ld?.maxCommandChainLength;\r\n      case \"serverchunktickrange\":\r\n        return ld?.serverChunkTickRange;\r\n      case \"netherscale\":\r\n        return ld?.netherScale;\r\n\r\n      // Multiplayer\r\n      case \"multiplayergame\":\r\n        return ld?.multiplayerGame;\r\n      case \"multiplayergameintent\":\r\n        return ld?.multiplayerGameIntent;\r\n      case \"lanbroadcast\":\r\n        return ld?.lanBroadcast;\r\n      case \"lanbroadcastintent\":\r\n        return ld?.lanBroadcastIntent;\r\n      case \"platformbroadcastintent\":\r\n        return ld?.platformBroadcastIntent;\r\n      case \"xblbroadcastintent\":\r\n        return ld?.xblBroadcastIntent;\r\n      case \"usemsagamertagsonly\":\r\n        return ld?.useMsaGamertagsOnly;\r\n      case \"texturepacksrequired\":\r\n        return ld?.texturePacksRequired;\r\n\r\n      // Editor\r\n      case \"iscreatedineditor\":\r\n        return ld?.isCreatedInEditor;\r\n      case \"isexportedfromeditor\":\r\n        return ld?.isExportedFromEditor;\r\n      case \"editorworldtype\":\r\n        return ld?.editorWorldType;\r\n\r\n      // Experiments\r\n      case \"experimentalgameplay\":\r\n        return ld?.experimentalGameplay;\r\n      case \"betaapisexperiment\":\r\n        return ld?.betaApisExperiment;\r\n      case \"deferredtechnicalpreviewexperiment\":\r\n        return ld?.deferredTechnicalPreviewExperiment;\r\n      case \"datadrivenitemsexperiment\":\r\n        return ld?.dataDrivenItemsExperiment;\r\n      case \"savedwithtoggledexperiments\":\r\n        return ld?.savedWithToggledExperiments;\r\n      case \"experimentseverused\":\r\n        return ld?.experimentsEverUsed;\r\n\r\n      // Permissions & abilities\r\n      case \"permissionslevel\":\r\n        return ld?.permissionsLevel;\r\n      case \"playerpermissionslevel\":\r\n        return ld?.playerPermissionsLevel;\r\n      case \"attackmobs\":\r\n        return ld?.attackMobs;\r\n      case \"attackplayers\":\r\n        return ld?.attackPlayers;\r\n      case \"build\":\r\n        return ld?.build;\r\n      case \"doorsandswitches\":\r\n        return ld?.doorsAndSwitches;\r\n      case \"flying\":\r\n        return ld?.flying;\r\n      case \"instabuild\":\r\n        return ld?.instaBuild;\r\n      case \"invulnerable\":\r\n        return ld?.invulnerable;\r\n      case \"lightning\":\r\n        return ld?.lightning;\r\n      case \"mayfly\":\r\n        return ld?.mayFly;\r\n      case \"mine\":\r\n        return ld?.mine;\r\n      case \"op\":\r\n        return ld?.op;\r\n      case \"opencontainers\":\r\n        return ld?.openContainers;\r\n      case \"teleport\":\r\n        return ld?.teleport;\r\n      case \"flyspeed\":\r\n        return ld?.flySpeed;\r\n      case \"walkspeed\":\r\n        return ld?.walkSpeed;\r\n\r\n      // Template & lock\r\n      case \"haslockedbehaviorpack\":\r\n        return ld?.hasLockedBehaviorPack;\r\n      case \"haslockedresourcepack\":\r\n        return ld?.hasLockedResourcePack;\r\n      case \"isfromlockedtemplate\":\r\n        return ld?.isFromLockedTemplate;\r\n      case \"isfromworldtemplate\":\r\n        return ld?.isFromWorldTemplate;\r\n      case \"issingleuseworld\":\r\n        return ld?.isSingleUseWorld;\r\n      case \"isworldtemplateoptionlocked\":\r\n        return ld?.isWorldTemplateOptionLocked;\r\n      case \"confirmedplatformlockedcontent\":\r\n        return ld?.confirmedPlatformLockedContent;\r\n      case \"requirescopiedpackremovalcheck\":\r\n        return ld?.requiresCopiedPackRemovalCheck;\r\n\r\n      // Misc\r\n      case \"israndomseedallowed\":\r\n        return ld?.isRandomSeedAllowed;\r\n      case \"biomeoverride\":\r\n        return ld?.biomeOverride;\r\n      case \"centermapstoorigin\":\r\n        return ld?.centerMapsToOrigin;\r\n      case \"hasbeenloadedincreative\":\r\n        return ld?.hasBeenLoadedInCreative;\r\n      case \"spawnv1villagers\":\r\n        return ld?.spawnV1Villagers;\r\n      case \"educationfeaturesenabled\":\r\n        return ld?.educationFeaturesEnabled;\r\n      case \"daylightcycle\":\r\n        return ld?.daylightCycle;\r\n      case \"lightningtime\":\r\n        return ld?.lightningTime;\r\n      case \"lightninglevel\":\r\n        return ld?.lightningLevel;\r\n      case \"rainlevel\":\r\n        return ld?.rainLevel;\r\n      case \"raintime\":\r\n        return ld?.rainTime;\r\n\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  getBaseValue(): any {\r\n    throw new Error(\"Method not implemented.\");\r\n  }\r\n\r\n  setBaseValue(value: any): void {\r\n    throw new Error(\"Method not implemented.\");\r\n  }\r\n\r\n  public setProperty(id: string, newVal: any): any {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    const ld = this.levelData;\r\n\r\n    switch (id.toLowerCase()) {\r\n      // World identity\r\n      case \"levelname\":\r\n        ld.levelName = newVal as string;\r\n        break;\r\n      case \"gametype\":\r\n        ld.gameType = newVal as number;\r\n        break;\r\n      case \"difficulty\":\r\n        ld.difficulty = newVal as number;\r\n        break;\r\n      case \"generator\":\r\n        ld.generator = newVal as number;\r\n        break;\r\n      case \"randomseed\":\r\n        ld.randomSeed = newVal as string;\r\n        break;\r\n      case \"basegameversion\":\r\n        ld.baseGameVersion = newVal as string;\r\n        break;\r\n      case \"inventoryversion\":\r\n        ld.inventoryVersion = newVal as string;\r\n        break;\r\n\r\n      // Spawn & bounds\r\n      case \"spawnx\":\r\n        this.spawnX = newVal as number;\r\n        break;\r\n      case \"spawny\":\r\n        this.spawnY = newVal as number;\r\n        break;\r\n      case \"spawnz\":\r\n        this.spawnZ = newVal as number;\r\n        break;\r\n      case \"limitedworldoriginx\":\r\n        ld.limitedWorldOriginX = newVal as number;\r\n        break;\r\n      case \"limitedworldoriginy\":\r\n        ld.limitedWorldOriginY = newVal as number;\r\n        break;\r\n      case \"limitedworldoriginz\":\r\n        ld.limitedWorldOriginZ = newVal as number;\r\n        break;\r\n      case \"limitedworlddepth\":\r\n        ld.limitedWorldDepth = newVal as number;\r\n        break;\r\n      case \"limitedworldwidth\":\r\n        ld.limitedWorldWidth = newVal as number;\r\n        break;\r\n      case \"spawnradius\":\r\n        ld.spawnRadius = newVal as number;\r\n        break;\r\n\r\n      // Game rules (boolean)\r\n      case \"commandsenabled\":\r\n        ld.commandsEnabled = newVal as boolean;\r\n        break;\r\n      case \"commandblocksenabled\":\r\n        ld.commandBlocksEnabled = newVal as boolean;\r\n        break;\r\n      case \"commandblockoutput\":\r\n        ld.commandBlockOutput = newVal as boolean;\r\n        break;\r\n      case \"cheatsenabled\":\r\n        ld.cheatsEnabled = newVal as boolean;\r\n        break;\r\n      case \"dodaylightcycle\":\r\n        ld.doDaylightCycle = newVal as boolean;\r\n        break;\r\n      case \"doentitydrops\":\r\n        ld.doEntityDrops = newVal as boolean;\r\n        break;\r\n      case \"dofiretick\":\r\n        ld.doFireTick = newVal as boolean;\r\n        break;\r\n      case \"doimmediaterespawn\":\r\n        ld.doImmediateRespawn = newVal as boolean;\r\n        break;\r\n      case \"doinsomnia\":\r\n        ld.doInsomnia = newVal as boolean;\r\n        break;\r\n      case \"domobloot\":\r\n        ld.doMobLoot = newVal as boolean;\r\n        break;\r\n      case \"domobspawning\":\r\n        ld.doMobSpawning = newVal as boolean;\r\n        break;\r\n      case \"dotiledrops\":\r\n        ld.doTileDrops = newVal as boolean;\r\n        break;\r\n      case \"doweathercycle\":\r\n        ld.doWeatherCycle = newVal as boolean;\r\n        break;\r\n      case \"drowningdamage\":\r\n        ld.drowningDamage = newVal as boolean;\r\n        break;\r\n      case \"falldamage\":\r\n        ld.fallDamage = newVal as boolean;\r\n        break;\r\n      case \"firedamage\":\r\n        ld.fireDamage = newVal as boolean;\r\n        break;\r\n      case \"freezedamage\":\r\n        ld.freezeDamage = newVal as boolean;\r\n        break;\r\n      case \"keepinventory\":\r\n        ld.keepInventory = newVal as boolean;\r\n        break;\r\n      case \"mobgriefing\":\r\n        ld.mobGriefing = newVal as boolean;\r\n        break;\r\n      case \"naturalregeneration\":\r\n        ld.naturalRegeneration = newVal as boolean;\r\n        break;\r\n      case \"pvp\":\r\n        ld.pvp = newVal as boolean;\r\n        break;\r\n      case \"respawnblocksexplode\":\r\n        ld.respawnBlocksExplode = newVal as boolean;\r\n        break;\r\n      case \"sendcommandfeedback\":\r\n        ld.sendCommandFeedback = newVal as boolean;\r\n        break;\r\n      case \"showcoordinates\":\r\n        ld.showCoordinates = newVal as boolean;\r\n        break;\r\n      case \"showdeathmessages\":\r\n        ld.showDeathMessages = newVal as boolean;\r\n        break;\r\n      case \"showtags\":\r\n        ld.showTags = newVal as boolean;\r\n        break;\r\n      case \"showbordereffect\":\r\n        ld.showBorderEffect = newVal as boolean;\r\n        break;\r\n      case \"tntexplodes\":\r\n        ld.tntExplodes = newVal as boolean;\r\n        break;\r\n      case \"forcegametype\":\r\n        ld.forceGameType = newVal as boolean;\r\n        break;\r\n      case \"immutableworld\":\r\n        ld.immutableWorld = newVal as boolean;\r\n        break;\r\n      case \"spawnmobs\":\r\n        ld.spawnMobs = newVal as boolean;\r\n        break;\r\n      case \"bonuschestenabled\":\r\n        ld.bonusChestEnabled = newVal as boolean;\r\n        break;\r\n      case \"bonuschestspawned\":\r\n        ld.bonusChestSpawned = newVal as boolean;\r\n        break;\r\n      case \"startwithmapenabled\":\r\n        ld.startWithMapEnabled = newVal as boolean;\r\n        break;\r\n\r\n      // Game rules (numeric)\r\n      case \"randomtickspeed\":\r\n        ld.randomTickSpeed = newVal as number;\r\n        break;\r\n      case \"functioncommandlimit\":\r\n        ld.functionCommandLimit = newVal as number;\r\n        break;\r\n      case \"maxcommandchainlength\":\r\n        ld.maxCommandChainLength = newVal as number;\r\n        break;\r\n      case \"serverchunktickrange\":\r\n        ld.serverChunkTickRange = newVal as number;\r\n        break;\r\n      case \"netherscale\":\r\n        ld.netherScale = newVal as number;\r\n        break;\r\n\r\n      // Multiplayer\r\n      case \"multiplayergame\":\r\n        ld.multiplayerGame = newVal as boolean;\r\n        break;\r\n      case \"multiplayergameintent\":\r\n        ld.multiplayerGameIntent = newVal as boolean;\r\n        break;\r\n      case \"lanbroadcast\":\r\n        ld.lanBroadcast = newVal as boolean;\r\n        break;\r\n      case \"lanbroadcastintent\":\r\n        ld.lanBroadcastIntent = newVal as boolean;\r\n        break;\r\n      case \"platformbroadcastintent\":\r\n        ld.platformBroadcastIntent = newVal as number;\r\n        break;\r\n      case \"xblbroadcastintent\":\r\n        ld.xblBroadcastIntent = newVal as number;\r\n        break;\r\n      case \"usemsagamertagsonly\":\r\n        ld.useMsaGamertagsOnly = newVal as boolean;\r\n        break;\r\n      case \"texturepacksrequired\":\r\n        ld.texturePacksRequired = newVal as boolean;\r\n        break;\r\n\r\n      // Editor\r\n      case \"iscreatedineditor\":\r\n        ld.isCreatedInEditor = newVal as boolean;\r\n        break;\r\n      case \"isexportedfromeditor\":\r\n        ld.isExportedFromEditor = newVal as boolean;\r\n        break;\r\n      case \"editorworldtype\":\r\n        ld.editorWorldType = newVal as number;\r\n        break;\r\n\r\n      // Experiments\r\n      case \"experimentalgameplay\":\r\n        ld.experimentalGameplay = newVal as boolean;\r\n        break;\r\n      case \"betaapisexperiment\":\r\n        ld.betaApisExperiment = newVal as boolean;\r\n        break;\r\n      case \"deferredtechnicalpreviewexperiment\":\r\n        ld.deferredTechnicalPreviewExperiment = newVal as boolean;\r\n        break;\r\n      case \"datadrivenitemsexperiment\":\r\n        ld.dataDrivenItemsExperiment = newVal as boolean;\r\n        break;\r\n      case \"savedwithtoggledexperiments\":\r\n        ld.savedWithToggledExperiments = newVal as boolean;\r\n        break;\r\n      case \"experimentseverused\":\r\n        ld.experimentsEverUsed = newVal as boolean;\r\n        break;\r\n\r\n      // Permissions & abilities\r\n      case \"permissionslevel\":\r\n        ld.permissionsLevel = newVal as number;\r\n        break;\r\n      case \"playerpermissionslevel\":\r\n        ld.playerPermissionsLevel = newVal as number;\r\n        break;\r\n      case \"attackmobs\":\r\n        ld.attackMobs = newVal as boolean;\r\n        break;\r\n      case \"attackplayers\":\r\n        ld.attackPlayers = newVal as boolean;\r\n        break;\r\n      case \"build\":\r\n        ld.build = newVal as boolean;\r\n        break;\r\n      case \"doorsandswitches\":\r\n        ld.doorsAndSwitches = newVal as boolean;\r\n        break;\r\n      case \"flying\":\r\n        ld.flying = newVal as boolean;\r\n        break;\r\n      case \"instabuild\":\r\n        ld.instaBuild = newVal as boolean;\r\n        break;\r\n      case \"invulnerable\":\r\n        ld.invulnerable = newVal as boolean;\r\n        break;\r\n      case \"lightning\":\r\n        ld.lightning = newVal as boolean;\r\n        break;\r\n      case \"mayfly\":\r\n        ld.mayFly = newVal as boolean;\r\n        break;\r\n      case \"mine\":\r\n        ld.mine = newVal as boolean;\r\n        break;\r\n      case \"op\":\r\n        ld.op = newVal as boolean;\r\n        break;\r\n      case \"opencontainers\":\r\n        ld.openContainers = newVal as boolean;\r\n        break;\r\n      case \"teleport\":\r\n        ld.teleport = newVal as boolean;\r\n        break;\r\n      case \"flyspeed\":\r\n        ld.flySpeed = newVal as number;\r\n        break;\r\n      case \"walkspeed\":\r\n        ld.walkSpeed = newVal as number;\r\n        break;\r\n\r\n      // Template & lock\r\n      case \"haslockedbehaviorpack\":\r\n        ld.hasLockedBehaviorPack = newVal as boolean;\r\n        break;\r\n      case \"haslockedresourcepack\":\r\n        ld.hasLockedResourcePack = newVal as boolean;\r\n        break;\r\n      case \"isfromlockedtemplate\":\r\n        ld.isFromLockedTemplate = newVal as boolean;\r\n        break;\r\n      case \"isfromworldtemplate\":\r\n        ld.isFromWorldTemplate = newVal as boolean;\r\n        break;\r\n      case \"issingleuseworld\":\r\n        ld.isSingleUseWorld = newVal as boolean;\r\n        break;\r\n      case \"isworldtemplateoptionlocked\":\r\n        ld.isWorldTemplateOptionLocked = newVal as boolean;\r\n        break;\r\n      case \"confirmedplatformlockedcontent\":\r\n        ld.confirmedPlatformLockedContent = newVal as boolean;\r\n        break;\r\n      case \"requirescopiedpackremovalcheck\":\r\n        ld.requiresCopiedPackRemovalCheck = newVal as boolean;\r\n        break;\r\n\r\n      // Misc\r\n      case \"israndomseedallowed\":\r\n        ld.isRandomSeedAllowed = newVal as boolean;\r\n        break;\r\n      case \"biomeoverride\":\r\n        ld.biomeOverride = newVal as string;\r\n        break;\r\n      case \"centermapstoorigin\":\r\n        ld.centerMapsToOrigin = newVal as boolean;\r\n        break;\r\n      case \"hasbeenloadedincreative\":\r\n        ld.hasBeenLoadedInCreative = newVal as boolean;\r\n        break;\r\n      case \"spawnv1villagers\":\r\n        ld.spawnV1Villagers = newVal as boolean;\r\n        break;\r\n      case \"educationfeaturesenabled\":\r\n        ld.educationFeaturesEnabled = newVal as boolean;\r\n        break;\r\n      case \"daylightcycle\":\r\n        ld.daylightCycle = newVal as number;\r\n        break;\r\n      case \"lightningtime\":\r\n        ld.lightningTime = newVal as number;\r\n        break;\r\n      case \"lightninglevel\":\r\n        ld.lightningLevel = newVal as number;\r\n        break;\r\n      case \"rainlevel\":\r\n        ld.rainLevel = newVal as number;\r\n        break;\r\n      case \"raintime\":\r\n        ld.rainTime = newVal as number;\r\n        break;\r\n    }\r\n\r\n    this._onPropertyChanged.dispatch(this, id);\r\n  }\r\n\r\n  async loadMetaFiles(force?: boolean) {\r\n    if ((this._isLoaded && !force) || (this._file === undefined && this._folder === undefined)) {\r\n      return;\r\n    }\r\n\r\n    if (this._file) {\r\n      if (!this._file.isContentLoaded) {\r\n        await this._file.loadContent();\r\n      }\r\n\r\n      if (this._file.content === undefined || !(this._file.content instanceof Uint8Array)) {\r\n        return;\r\n      }\r\n      await this.loadFromBytes(this._file.content);\r\n    }\r\n\r\n    if (this._folder) {\r\n      await this.loadFromFolder(this._folder);\r\n    }\r\n  }\r\n\r\n  public ensureResourcePacksFromString(packStr: string) {\r\n    const refs = MinecraftUtilities.getIdsAndVersions(packStr);\r\n\r\n    for (const ref of refs) {\r\n      this.ensureResourcePack(ref.uuid, ref.version, ref.uuid);\r\n    }\r\n  }\r\n\r\n  public ensureBehaviorPacksFromString(packStr: string) {\r\n    const refs = MinecraftUtilities.getIdsAndVersions(packStr);\r\n\r\n    for (const ref of refs) {\r\n      this.ensureBehaviorPack(ref.uuid, ref.version, ref.uuid);\r\n    }\r\n  }\r\n\r\n  public ensureBehaviorPack(packId: string, version: number[], packName: string, packPriority?: number) {\r\n    if (this.worldBehaviorPacks === undefined) {\r\n      this.worldBehaviorPacks = [];\r\n    }\r\n\r\n    if (this.worldBehaviorPackHistory === undefined) {\r\n      this.worldBehaviorPackHistory = {\r\n        packs: [],\r\n      };\r\n    }\r\n\r\n    let wasAdded = false;\r\n\r\n    const bp = this.getBehaviorPack(packId);\r\n\r\n    if (bp === undefined) {\r\n      this.worldBehaviorPacks.push({\r\n        pack_id: packId,\r\n        version: version,\r\n        priority: packPriority,\r\n      });\r\n      wasAdded = true;\r\n    }\r\n\r\n    const bph = this.getBehaviorPackHistory(packId);\r\n\r\n    if (bph === undefined) {\r\n      this.worldBehaviorPackHistory.packs.push({\r\n        uuid: packId,\r\n        version: version,\r\n        name: packName,\r\n        can_be_redownloaded: false,\r\n      });\r\n      wasAdded = true;\r\n    }\r\n    return wasAdded;\r\n  }\r\n\r\n  public getBehaviorPack(packId: string) {\r\n    if (this.worldBehaviorPacks === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    packId = Utilities.canonicalizeId(packId);\r\n\r\n    for (let i = 0; i < this.worldBehaviorPacks.length; i++) {\r\n      const worldBP = this.worldBehaviorPacks[i];\r\n\r\n      if (Utilities.canonicalizeId(worldBP.pack_id) === packId) {\r\n        return worldBP;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public getBehaviorPackHistory(packId: string) {\r\n    if (this.worldBehaviorPackHistory === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    packId = Utilities.canonicalizeId(packId);\r\n\r\n    const packs = this.worldBehaviorPackHistory.packs;\r\n\r\n    for (let i = 0; i < packs.length; i++) {\r\n      const worldBPH = packs[i];\r\n\r\n      if (Utilities.canonicalizeId(worldBPH.uuid) === packId) {\r\n        return worldBPH;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static sortPackRegByPriority(a: IPackRegistration, b: IPackRegistration) {\r\n    return (a.priority === undefined ? 32767 : a.priority) - (b.priority === undefined ? 32767 : b.priority);\r\n  }\r\n\r\n  static sortPackCollectionByPriority(packRefs: IPackRegistration[]) {\r\n    MCWorld.freezePackRegistrationOrder(packRefs);\r\n\r\n    return packRefs.sort(MCWorld.sortPackRegByPriority);\r\n  }\r\n\r\n  static freezePackRegistrationOrder(packRefs: IPackRegistration[]) {\r\n    for (let i = 0; i < packRefs.length; i++) {\r\n      if (packRefs[i].priority === undefined) {\r\n        packRefs[i].priority = i * 100;\r\n      }\r\n    }\r\n  }\r\n\r\n  async saveWorldBehaviorPacks() {\r\n    if (this.effectiveRootFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (this.worldBehaviorPacks === undefined || this.worldBehaviorPacks.length === 0) {\r\n      await rootFolder.deleteFileFromRelativePath(BEHAVIOR_PACKS_RELPATH);\r\n      return;\r\n    }\r\n\r\n    const packsFile = await rootFolder.ensureFileFromRelativePath(BEHAVIOR_PACKS_RELPATH);\r\n\r\n    let packRefColl = MCWorld.freezeAndStripPriorities(this.worldBehaviorPacks);\r\n\r\n    packsFile.setContent(JSON.stringify(packRefColl, null, 2));\r\n\r\n    packsFile.saveContent();\r\n  }\r\n\r\n  static freezeAndStripPriorities(coll: IPackRegistration[]) {\r\n    let returnColl: IPackRegistration[] = [];\r\n\r\n    const collSort = MCWorld.sortPackCollectionByPriority(coll);\r\n\r\n    for (let i = 0; i < collSort.length; i++) {\r\n      returnColl.push({\r\n        pack_id: collSort[i].pack_id,\r\n        version: collSort[i].version,\r\n      });\r\n    }\r\n\r\n    return returnColl;\r\n  }\r\n\r\n  async saveWorldBehaviorPackHistory() {\r\n    if (this.effectiveRootFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (this.worldBehaviorPackHistory === undefined || this.worldBehaviorPackHistory.packs.length === 0) {\r\n      await rootFolder.deleteFileFromRelativePath(BEHAVIOR_PACK_HISTORY_RELPATH);\r\n      return;\r\n    }\r\n\r\n    const packsFile = await rootFolder.ensureFileFromRelativePath(BEHAVIOR_PACK_HISTORY_RELPATH);\r\n\r\n    packsFile.setContent(JSON.stringify(this.worldBehaviorPackHistory, null, 2));\r\n\r\n    packsFile.saveContent();\r\n  }\r\n\r\n  public ensureResourcePack(packId: string, version: number[], packName: string, packPriority?: number) {\r\n    if (this.worldResourcePacks === undefined) {\r\n      this.worldResourcePacks = [];\r\n    }\r\n\r\n    if (this.worldResourcePackHistory === undefined) {\r\n      this.worldResourcePackHistory = {\r\n        packs: [],\r\n      };\r\n    }\r\n\r\n    let wasAdded = false;\r\n\r\n    const rp = this.getResourcePack(packId);\r\n\r\n    if (rp === undefined) {\r\n      this.worldResourcePacks.push({\r\n        pack_id: packId,\r\n        version: version,\r\n        priority: packPriority,\r\n      });\r\n      wasAdded = true;\r\n    }\r\n\r\n    const rph = this.getResourcePackHistory(packId);\r\n\r\n    if (rph === undefined) {\r\n      this.worldResourcePackHistory.packs.push({\r\n        uuid: packId,\r\n        version: version,\r\n        name: packName,\r\n        can_be_redownloaded: false,\r\n      });\r\n      wasAdded = true;\r\n    }\r\n\r\n    return wasAdded;\r\n  }\r\n\r\n  public getResourcePack(packId: string) {\r\n    if (this.worldResourcePacks === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    packId = Utilities.canonicalizeId(packId);\r\n\r\n    for (let i = 0; i < this.worldResourcePacks.length; i++) {\r\n      const worldRP = this.worldResourcePacks[i];\r\n\r\n      if (Utilities.canonicalizeId(worldRP.pack_id) === packId) {\r\n        return worldRP;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public getResourcePackHistory(packId: string) {\r\n    if (this.worldResourcePackHistory === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    packId = Utilities.canonicalizeId(packId);\r\n\r\n    const packs = this.worldResourcePackHistory.packs;\r\n\r\n    for (let i = 0; i < packs.length; i++) {\r\n      const worldBPH = packs[i];\r\n\r\n      if (Utilities.canonicalizeId(worldBPH.uuid) === packId) {\r\n        return worldBPH;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async saveWorldResourcePacks() {\r\n    if (this.effectiveRootFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (this.worldResourcePacks === undefined || this.worldResourcePacks.length === 0) {\r\n      await rootFolder.deleteFileFromRelativePath(RESOURCE_PACKS_RELPATH);\r\n      return;\r\n    }\r\n\r\n    const packsFile = await rootFolder.ensureFileFromRelativePath(RESOURCE_PACKS_RELPATH);\r\n\r\n    let packRefColl = MCWorld.freezeAndStripPriorities(this.worldResourcePacks);\r\n\r\n    packsFile.setContent(JSON.stringify(packRefColl, null, 2));\r\n\r\n    packsFile.saveContent();\r\n  }\r\n\r\n  async saveWorldResourcePackHistory() {\r\n    if (this.effectiveRootFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (this.worldResourcePackHistory === undefined || this.worldResourcePackHistory.packs.length === 0) {\r\n      await rootFolder.deleteFileFromRelativePath(RESOURCE_PACK_HISTORY_RELPATH);\r\n      return;\r\n    }\r\n\r\n    const packsFile = await rootFolder.ensureFileFromRelativePath(RESOURCE_PACK_HISTORY_RELPATH);\r\n\r\n    packsFile.setContent(JSON.stringify(this.worldResourcePackHistory, null, 2));\r\n\r\n    packsFile.saveContent();\r\n  }\r\n\r\n  async loadFromBytes(content: Uint8Array) {\r\n    let storage = undefined;\r\n\r\n    if (this._file) {\r\n      if (!this._file.fileContainerStorage) {\r\n        this._file.fileContainerStorage = new ZipStorage();\r\n\r\n        this._file.fileContainerStorage.containerFile = this._file;\r\n        this._file.fileContainerStorage.storagePath = this._file.extendedPath + \"#\";\r\n      }\r\n\r\n      storage = this._file.fileContainerStorage as ZipStorage;\r\n    } else {\r\n      this._zipStorage = new ZipStorage();\r\n      storage = this._zipStorage;\r\n    }\r\n\r\n    await storage.loadFromUint8Array(content, this._file?.name);\r\n\r\n    const rootFolder = storage.rootFolder;\r\n\r\n    await this.loadFromFolder(rootFolder);\r\n  }\r\n\r\n  async applyWorldSettings(worldSettings?: IWorldSettings) {\r\n    if (!this._isLoaded) {\r\n      await this.loadMetaFiles(false);\r\n    }\r\n\r\n    this.ensureLevelData();\r\n\r\n    if (this.levelData) {\r\n      this.levelData.ensureDefaults();\r\n      if (worldSettings) {\r\n        this.levelData.applyFromWorldSettings(worldSettings);\r\n      }\r\n    }\r\n  }\r\n\r\n  ensureLevelData() {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    return this.levelData;\r\n  }\r\n\r\n  async loadFromFolder(rootFolder: IFolder) {\r\n    const rootDataFile = await rootFolder.getFileFromRelativePath(LEVELDAT_RELPATH);\r\n\r\n    if (rootDataFile !== undefined) {\r\n      if (!this.file?.isContentLoaded) {\r\n        await rootDataFile.loadContent();\r\n      }\r\n\r\n      if (rootDataFile.content !== undefined && rootDataFile.content instanceof Uint8Array) {\r\n        this.levelData = new WorldLevelDat();\r\n\r\n        this.levelData.loadFromNbtBytes(rootDataFile.content);\r\n\r\n        Utilities.appendErrors(this, this.levelData);\r\n\r\n        this._loadFromNbt();\r\n      }\r\n    }\r\n\r\n    const levelNameTextFile = await rootFolder.getFileFromRelativePath(LEVELNAMETXT_RELPATH);\r\n\r\n    if (levelNameTextFile !== undefined) {\r\n      if (!levelNameTextFile.isContentLoaded) {\r\n        await levelNameTextFile.loadContent();\r\n      }\r\n\r\n      if (levelNameTextFile.content !== undefined && typeof levelNameTextFile.content === \"string\") {\r\n        this.name = levelNameTextFile.content;\r\n      }\r\n    }\r\n\r\n    const manifestJsonFile = await rootFolder.getFileFromRelativePath(MANIFEST_RELPATH);\r\n\r\n    if (manifestJsonFile !== undefined) {\r\n      if (!manifestJsonFile.isContentLoaded) {\r\n        await manifestJsonFile.loadContent();\r\n      }\r\n\r\n      if (manifestJsonFile.content !== undefined && typeof manifestJsonFile.content === \"string\") {\r\n        this._manifest = StorageUtilities.getJsonObject(manifestJsonFile);\r\n      }\r\n    }\r\n\r\n    let packsFile = await rootFolder.getFileFromRelativePath(BEHAVIOR_PACKS_RELPATH);\r\n\r\n    if (packsFile !== undefined) {\r\n      if (!packsFile.isContentLoaded) {\r\n        await packsFile.loadContent();\r\n      }\r\n\r\n      if (packsFile.content !== undefined && typeof packsFile.content === \"string\") {\r\n        try {\r\n          this.worldBehaviorPacks = StorageUtilities.getJsonObject(packsFile);\r\n        } catch {\r\n          this._pushError(\"Could not parse behavior pack file content\");\r\n          this.worldBehaviorPacks = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    packsFile = await rootFolder.getFileFromRelativePath(RESOURCE_PACKS_RELPATH);\r\n\r\n    if (packsFile !== undefined) {\r\n      if (!packsFile.isContentLoaded) {\r\n        await packsFile.loadContent();\r\n      }\r\n\r\n      if (packsFile.content !== undefined && typeof packsFile.content === \"string\") {\r\n        try {\r\n          this.worldResourcePacks = StorageUtilities.getJsonObject(packsFile);\r\n        } catch {\r\n          this._pushError(\"Could not parse resource pack file content.\" + packsFile.fullPath);\r\n          this.worldResourcePacks = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    let packHistoryFile = await rootFolder.getFileFromRelativePath(BEHAVIOR_PACK_HISTORY_RELPATH);\r\n\r\n    if (packHistoryFile !== undefined) {\r\n      if (!packHistoryFile.isContentLoaded) {\r\n        await packHistoryFile.loadContent();\r\n      }\r\n\r\n      if (packHistoryFile.content !== undefined && typeof packHistoryFile.content === \"string\") {\r\n        try {\r\n          this.worldBehaviorPackHistory = StorageUtilities.getJsonObject(packHistoryFile);\r\n        } catch {\r\n          this._pushError(\"Could not parse behavior pack history file content\");\r\n          this.worldBehaviorPackHistory = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    packHistoryFile = await rootFolder.getFileFromRelativePath(RESOURCE_PACK_HISTORY_RELPATH);\r\n\r\n    if (packHistoryFile !== undefined) {\r\n      if (!packHistoryFile.isContentLoaded) {\r\n        await packHistoryFile.loadContent();\r\n      }\r\n\r\n      if (packHistoryFile.content !== undefined && typeof packHistoryFile.content === \"string\") {\r\n        try {\r\n          this.worldResourcePackHistory = StorageUtilities.getJsonObject(packHistoryFile);\r\n        } catch {\r\n          this._pushError(\"Could not parse resource pack history file content: \" + packHistoryFile.fullPath);\r\n          this.worldResourcePackHistory = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    const imageFile = await rootFolder.getFileFromRelativePath(\"/world_icon.jpeg\");\r\n\r\n    if (imageFile !== undefined) {\r\n      if (!imageFile.isContentLoaded) {\r\n        await imageFile.loadContent();\r\n      }\r\n\r\n      if (imageFile.content instanceof Uint8Array) {\r\n        this.imageBase64 = Utilities.uint8ArrayToBase64(imageFile.content);\r\n      }\r\n    }\r\n\r\n    this._isLoaded = true;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async loadLevelDb(force: boolean = false, options?: IWorldProcessingOptions): Promise<boolean> {\r\n    if (!force && this._isDataLoaded) {\r\n      return true;\r\n    }\r\n\r\n    const useLazyLoad = options?.lazyLoad === true;\r\n    this._isLazyLoadMode = useLazyLoad;\r\n\r\n    // Initialize chunk cache if requested\r\n    if (options?.maxChunksInCache !== undefined || useLazyLoad) {\r\n      this._chunkCache = new WorldChunkCache(options?.maxChunksInCache ?? 20000);\r\n      this._chunkCache.setChunkProvider((key) => this.getChunkByKey(key));\r\n    }\r\n\r\n    const loadOper = await this._project?.creatorTools.notifyOperationStarted(\r\n      \"Starting first-pass load of '\" + this.name + \"' world\",\r\n      StatusTopic.worldLoad\r\n    );\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (!rootFolder) {\r\n      return false;\r\n    }\r\n\r\n    await rootFolder.load(force);\r\n\r\n    const dbFolder = await rootFolder.getFolderFromRelativePath(\"/db\");\r\n\r\n    const ldbFileArr: IFile[] = [];\r\n    const logFileArr: IFile[] = [];\r\n    const manifestFileArr: IFile[] = [];\r\n\r\n    if (dbFolder) {\r\n      await dbFolder.load(force);\r\n\r\n      for (const fileName in dbFolder.files) {\r\n        const file = dbFolder.files[fileName];\r\n\r\n        if (file) {\r\n          const extension = StorageUtilities.getTypeFromName(file.name);\r\n\r\n          if (fileName.startsWith(\"MANIFEST\")) {\r\n            manifestFileArr.push(file);\r\n          } else if (extension === \"ldb\") {\r\n            // console.log(\"Adding map file \" + file.name + \"|\" + ldbFileArr.length);\r\n            ldbFileArr.push(file);\r\n          } else if (extension === \"log\") {\r\n            // console.log(\"Adding map file \" + file.name);\r\n            logFileArr.push(file);\r\n          }\r\n        }\r\n      }\r\n      Log.verbose(\r\n        \"[MCWorld] loadLevelDb: Found \" +\r\n          ldbFileArr.length +\r\n          \" LDB files, \" +\r\n          logFileArr.length +\r\n          \" LOG files, \" +\r\n          manifestFileArr.length +\r\n          \" MANIFEST files\"\r\n      );\r\n    } else {\r\n      Log.verbose(\"[MCWorld] loadLevelDb: No db folder found\");\r\n    }\r\n\r\n    this.levelDb = new LevelDb(ldbFileArr, logFileArr, manifestFileArr, this.name);\r\n\r\n    if (useLazyLoad) {\r\n      // Lazy loading mode: only load manifest initially\r\n      await this._project?.creatorTools.notifyStatusUpdate(\r\n        `Initializing lazy loading for '${this.name}'...`,\r\n        StatusTopic.worldLoad\r\n      );\r\n\r\n      await this.levelDb.initLazy({\r\n        maxKeysInMemory: 50000,\r\n        progressCallback: options?.progressCallback,\r\n      });\r\n\r\n      // Now load all files but with memory management\r\n      const totalFiles = this.levelDb.index?.totalFiles ?? 0;\r\n      let loadedFiles = 0;\r\n\r\n      await this.levelDb.loadAllFiles({\r\n        progressCallback: (phase, current, total) => {\r\n          loadedFiles = current;\r\n          const percent = total > 0 ? Math.round((current / total) * 100) : 0;\r\n          this._project?.creatorTools.notifyStatusUpdate(`${phase}... (${percent}%)`, StatusTopic.worldLoad);\r\n          if (options?.progressCallback) {\r\n            options.progressCallback(phase, current, total);\r\n          }\r\n        },\r\n        unloadFilesAfterParse: true, // Always unload in lazy mode\r\n      });\r\n    } else {\r\n      // Traditional full-load mode\r\n      const totalLdbFiles = ldbFileArr.length + logFileArr.length + manifestFileArr.length;\r\n      let loadedLdbFiles = 0;\r\n\r\n      await this.levelDb.init(\r\n        async (message: string): Promise<void> => {\r\n          loadedLdbFiles++;\r\n          const percent = totalLdbFiles > 0 ? Math.round((loadedLdbFiles / totalLdbFiles) * 100) : 0;\r\n          await this._project?.creatorTools.notifyStatusUpdate(\r\n            `Loading world files (1/2)... (${percent}%)`,\r\n            StatusTopic.worldLoad\r\n          );\r\n          if (options?.progressCallback) {\r\n            options.progressCallback(\"Loading world files (1/2)\", loadedLdbFiles, totalLdbFiles);\r\n          }\r\n        },\r\n        { unloadFilesAfterParse: options?.unloadFilesAfterParse !== false }\r\n      );\r\n    }\r\n\r\n    Utilities.appendErrors(this, this.levelDb);\r\n\r\n    if (loadOper !== undefined) {\r\n      await this._project?.creatorTools.notifyOperationEnded(\r\n        loadOper,\r\n        \"Completed first-pass load of '\" + this.name + \"' world\",\r\n        StatusTopic.worldLoad\r\n      );\r\n    }\r\n\r\n    return await this.loadFromLevelDb(this.levelDb, options);\r\n  }\r\n\r\n  async loadFromLevelDb(levelDb: LevelDb, options?: IWorldProcessingOptions): Promise<boolean> {\r\n    this.levelDb = levelDb;\r\n\r\n    // If skipFullProcessing is enabled, only build a minimal index\r\n    // Chunks will be created on-demand when accessed\r\n    if (options?.skipFullProcessing) {\r\n      const result = await this.buildMinimalWorldIndex(options);\r\n      if (!result) {\r\n        return false;\r\n      }\r\n    } else {\r\n      const result = await this.processWorldData(options);\r\n      if (!result) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    this._updateMeta();\r\n\r\n    this._onDataLoaded.dispatch(this, this);\r\n\r\n    this._isDataLoaded = true;\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Builds a minimal world index without creating WorldChunk objects.\r\n   * This calculates world bounds and chunk count from key names only.\r\n   * Chunks are created on-demand when getChunkAt() or getOrCreateChunk() is called.\r\n   *\r\n   * This dramatically reduces memory usage for large worlds (100k+ chunks).\r\n   *\r\n   * IMPORTANT: Key filtering must use the same approach as processWorldData():\r\n   * explicit named-key prefix checks + keyname.length checks. Do NOT filter by\r\n   * checking if the first byte of keyBytes is in printable ASCII range, because\r\n   * chunk coordinate keys are binary little-endian integers whose low byte can\r\n   * legitimately be any value 0-255 (e.g., chunk X=32 \u2192 first byte 0x20 = space).\r\n   */\r\n  private async buildMinimalWorldIndex(options?: IWorldProcessingOptions): Promise<boolean> {\r\n    if (!this.levelDb) {\r\n      return false;\r\n    }\r\n\r\n    this.chunks = new Map();\r\n    this.chunkCount = 0;\r\n    this._dimensionIdsInChunks = new Set();\r\n    this._dimensionNameIdTable = undefined;\r\n    this._hasDimensionNameIdTable = false;\r\n\r\n    const processOper = await this._project?.creatorTools.notifyOperationStarted(\r\n      \"Building minimal index for '\" + this.name + \"' world\",\r\n      StatusTopic.worldLoad\r\n    );\r\n\r\n    const levelDbKeysArray = Array.from(this.levelDb.keys.keys());\r\n    const totalKeys = levelDbKeysArray.length;\r\n    let processedKeys = 0;\r\n\r\n    // Track unique chunks we've seen (format: \"dim_x_z\")\r\n    const seenChunks = new Set<string>();\r\n\r\n    // Build index mapping chunk keys to their LevelDB key names for fast lookup\r\n    const chunkKeyIndex = new Map<string, string[]>();\r\n\r\n    // Report progress less frequently for this fast operation\r\n    const keyProgressInterval = Math.max(1000, Math.floor(totalKeys / 50));\r\n\r\n    // Yield periodically to allow garbage collection\r\n    const yieldInterval = 5000;\r\n\r\n    for (const keyname of levelDbKeysArray) {\r\n      processedKeys++;\r\n\r\n      // Report progress\r\n      if (processedKeys % keyProgressInterval === 0) {\r\n        const percent = totalKeys > 0 ? Math.round((processedKeys / totalKeys) * 100) : 0;\r\n        await this._project?.creatorTools.notifyStatusUpdate(\r\n          `Building world index... (${percent}%)`,\r\n          StatusTopic.worldLoad\r\n        );\r\n        if (options?.progressCallback) {\r\n          options.progressCallback(\"Building world index\", processedKeys, totalKeys);\r\n        }\r\n\r\n        // Yield periodically\r\n        if (processedKeys % yieldInterval === 0) {\r\n          await new Promise((resolve) => setTimeout(resolve, 0));\r\n        }\r\n      }\r\n\r\n      // Handle DimensionNameIdTable before skipping named keys\r\n      if (keyname === \"DimensionNameIdTable\") {\r\n        const keyValue = this.levelDb.keys.get(keyname);\r\n\r\n        if (keyValue && typeof keyValue !== \"boolean\" && keyValue.value) {\r\n          this._parseDimensionNameIdTable(keyValue.value);\r\n        } else {\r\n          this._hasDimensionNameIdTable = true;\r\n        }\r\n        continue;\r\n      }\r\n\r\n      // Skip known named keys using the same filtering approach as processWorldData.\r\n      // We must NOT filter by first-byte ASCII range because chunk coordinate keys\r\n      // are binary little-endian integers whose low byte can be any value (0-255),\r\n      // including printable ASCII (32-126). For example, chunk X=32 has first byte 0x20 (space).\r\n      if (\r\n        keyname.startsWith(\"AutonomousEntities\") ||\r\n        keyname.startsWith(\"schedulerWT\") ||\r\n        keyname.startsWith(\"Overworld\") ||\r\n        keyname.startsWith(\"BiomeData\") ||\r\n        keyname.startsWith(\"digp\") ||\r\n        keyname.startsWith(\"actorprefix\") ||\r\n        keyname.startsWith(\"player\") ||\r\n        keyname.startsWith(\"portals\") ||\r\n        keyname.startsWith(\"LevelChunk\") ||\r\n        keyname.startsWith(\"structuretemplate\") ||\r\n        keyname.startsWith(\"~local_player\") ||\r\n        keyname.startsWith(\"game_\") ||\r\n        keyname.startsWith(\"CustomProperties\") ||\r\n        keyname.startsWith(\"DynamicProperties\") ||\r\n        keyname.startsWith(\"LevelSpawnWasFixed\") ||\r\n        keyname.startsWith(\"VILLAGE_\") ||\r\n        keyname.startsWith(\"gametestinstance_\") ||\r\n        keyname.startsWith(\"tickingarea_\") ||\r\n        keyname.startsWith(\"map_\") ||\r\n        keyname.startsWith(\"scoreboard\") ||\r\n        keyname.startsWith(\"SavedEntity\") ||\r\n        keyname.startsWith(\"ServerMapRuntime\") ||\r\n        keyname.startsWith(\"VillageRuntime\") ||\r\n        keyname.startsWith(\"WorldFeatureRuntime\") ||\r\n        keyname.startsWith(\"WorldGenerationRuntime\") ||\r\n        keyname.startsWith(\"WorldStreamRuntime\") ||\r\n        keyname.startsWith(\"BSharpRuntime\") ||\r\n        keyname.startsWith(\"BadgerSynced\") ||\r\n        keyname.startsWith(\"CinematicsRuntime\") ||\r\n        keyname.startsWith(\"CustomGameOptions\") ||\r\n        keyname.startsWith(\"DeckRuntime\") ||\r\n        keyname.startsWith(\"EntityFactorySetup\") ||\r\n        keyname.startsWith(\"GeologyRuntime\") ||\r\n        keyname.startsWith(\"InvasionRuntime\") ||\r\n        keyname.startsWith(\"MapRevealRuntime\") ||\r\n        keyname.startsWith(\"RealmsStoriesData\") ||\r\n        keyname.startsWith(\"mobevents\") ||\r\n        keyname.startsWith(\"dimension\") ||\r\n        keyname.startsWith(\"structureplacement\") ||\r\n        keyname.startsWith(\"chunk_loaded_request\") ||\r\n        keyname.startsWith(\"legacy_console_player\") ||\r\n        keyname.startsWith(\"PosTrackDB\") ||\r\n        keyname.startsWith(\"PositionTrackDB\") ||\r\n        keyname.startsWith(\"OwnedEntitiesLimbo\") ||\r\n        keyname.startsWith(\"MCeditMap\") ||\r\n        keyname.startsWith(\"EDU_CurrentCodingURL\") ||\r\n        keyname.startsWith(\"TheEnd\") ||\r\n        keyname.startsWith(\"SST_\") ||\r\n        keyname.startsWith(\"SUSP\") ||\r\n        keyname.startsWith(\"neteaseData\") ||\r\n        keyname.startsWith(\"scriptGid\") ||\r\n        keyname.startsWith(\"Nether\") ||\r\n        keyname.startsWith(\"game_flatworldlayers\")\r\n      ) {\r\n        continue;\r\n      }\r\n\r\n      // Only process keys whose length matches chunk coordinate key formats.\r\n      // Chunk keys are 9, 10, 13, or 14 bytes:\r\n      //   [x:4][z:4][tag:1] = 9 bytes (overworld)\r\n      //   [x:4][z:4][tag:1][subchunk:1] = 10 bytes (overworld with subchunk)\r\n      //   [x:4][z:4][dim:4][tag:1] = 13 bytes (nether/end)\r\n      //   [x:4][z:4][dim:4][tag:1][subchunk:1] = 14 bytes (nether/end with subchunk)\r\n      // Use keyname.length as a fast pre-filter (matching processWorldData's approach).\r\n      if (keyname.length !== 9 && keyname.length !== 10 && keyname.length !== 13 && keyname.length !== 14) {\r\n        continue;\r\n      }\r\n\r\n      // Get the LevelKeyValue to access raw keyBytes\r\n      const keyValue = this.levelDb.keys.get(keyname);\r\n      if (!keyValue) {\r\n        continue;\r\n      }\r\n\r\n      // keyValue can be boolean (false for deleted markers)\r\n      if (typeof keyValue === \"boolean\") {\r\n        continue;\r\n      }\r\n\r\n      const keyBytes = keyValue.keyBytes;\r\n      if (!keyBytes) {\r\n        continue;\r\n      }\r\n\r\n      // Key format: [x:4 bytes][z:4 bytes][dim?:4 bytes][tag:1 byte][subchunk?:1 byte]\r\n      if (keyBytes.length >= 9 && keyBytes.length <= 14) {\r\n        const hasDimensionParam = keyBytes.length >= 13;\r\n\r\n        const x = DataUtilities.getSignedInteger(keyBytes[0], keyBytes[1], keyBytes[2], keyBytes[3], true);\r\n        const z = DataUtilities.getSignedInteger(keyBytes[4], keyBytes[5], keyBytes[6], keyBytes[7], true);\r\n        let dim = 0;\r\n\r\n        if (hasDimensionParam) {\r\n          dim = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n\r\n          // Track all dimension IDs, including custom dimensions (>= 1000)\r\n          this._dimensionIdsInChunks.add(dim);\r\n\r\n          if (dim < 0 || dim > 2) {\r\n            continue; // Skip custom/invalid dimensions from chunk index\r\n          }\r\n        } else {\r\n          // 9/10-byte keys are overworld (dim 0)\r\n          this._dimensionIdsInChunks.add(0);\r\n        }\r\n\r\n        // Track unique chunks\r\n        const chunkKey = `${dim}_${x}_${z}`;\r\n        if (!seenChunks.has(chunkKey)) {\r\n          seenChunks.add(chunkKey);\r\n          this.chunkCount++;\r\n\r\n          // Update bounds\r\n          if (this._minX === undefined || x * 16 < this._minX) {\r\n            this._minX = x * 16;\r\n          }\r\n          if (this._maxX === undefined || (x + 1) * 16 > this._maxX) {\r\n            this._maxX = (x + 1) * 16;\r\n          }\r\n          if (this._minZ === undefined || z * 16 < this._minZ) {\r\n            this._minZ = z * 16;\r\n          }\r\n          if (this._maxZ === undefined || (z + 1) * 16 > this._maxZ) {\r\n            this._maxZ = (z + 1) * 16;\r\n          }\r\n        }\r\n\r\n        // Build chunk key index: map chunk key to list of LevelDB key names\r\n        let keyList = chunkKeyIndex.get(chunkKey);\r\n        if (!keyList) {\r\n          keyList = [];\r\n          chunkKeyIndex.set(chunkKey, keyList);\r\n        }\r\n        keyList.push(keyname);\r\n      }\r\n    }\r\n\r\n    // Store the seen chunks set for O(1) existence checking\r\n    this._chunkExistsSet = seenChunks;\r\n\r\n    // Store the chunk key index for O(1) key lookup in getOrCreateChunk\r\n    this._chunkKeyIndex = chunkKeyIndex;\r\n\r\n    await this.notifyLoadEnded(processOper);\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Gets or creates a chunk at the specified coordinates.\r\n   * If the chunk doesn't exist, creates it and populates it from LevelDB keys.\r\n   * This is used for on-demand chunk loading when skipFullProcessing is enabled.\r\n   */\r\n  getOrCreateChunk(dim: number, x: number, z: number): WorldChunk | undefined {\r\n    // Check if chunk already exists\r\n    let dimMap = this.chunks.get(dim);\r\n    if (dimMap) {\r\n      const xPlane = dimMap.get(x);\r\n      if (xPlane) {\r\n        const existing = xPlane.get(z);\r\n        if (existing) {\r\n          // Track access for LRU cache\r\n          if (this._chunkCache) {\r\n            this._chunkCache.access(dim, x, z);\r\n          }\r\n          return existing;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Chunk doesn't exist - create it on demand if we have LevelDB data\r\n    if (!this.levelDb) {\r\n      return undefined;\r\n    }\r\n\r\n    // Create the chunk\r\n    const chunk = new WorldChunk(this, x, z);\r\n\r\n    // Find all keys that belong to this chunk using the pre-built index (O(1) lookup)\r\n    const chunkKey = `${dim}_${x}_${z}`;\r\n    const indexedKeyNames = this._chunkKeyIndex.get(chunkKey);\r\n\r\n    if (indexedKeyNames && indexedKeyNames.length > 0) {\r\n      // Fast path: use the pre-built chunk key index\r\n      for (const keyname of indexedKeyNames) {\r\n        const keyValue = this.levelDb.keys.get(keyname);\r\n        if (!keyValue || typeof keyValue === \"boolean\") continue;\r\n        chunk.addKeyValue(keyValue);\r\n      }\r\n    } else if (this._chunkKeyIndex.size > 0) {\r\n      // Index is built but this chunk has no keys \u2014 it doesn't exist in the world.\r\n      // Return undefined to avoid creating empty chunk objects.\r\n      return undefined;\r\n    } else {\r\n      // Fallback: scan all LevelDB keys (used when index isn't built, e.g., full processing mode)\r\n      const hasDim = dim !== 0;\r\n      for (const [keyname, keyValue] of this.levelDb.keys) {\r\n        if (!keyValue) continue;\r\n\r\n        const keyBytes = keyValue.keyBytes;\r\n        if (!keyBytes) continue;\r\n        if (keyBytes.length < 9 || keyBytes.length > 14) continue;\r\n\r\n        const expectedLength = hasDim ? 13 : 9;\r\n        if (keyBytes.length !== expectedLength && keyBytes.length !== expectedLength + 1) continue;\r\n\r\n        const kx = DataUtilities.getSignedInteger(keyBytes[0], keyBytes[1], keyBytes[2], keyBytes[3], true);\r\n        const kz = DataUtilities.getSignedInteger(keyBytes[4], keyBytes[5], keyBytes[6], keyBytes[7], true);\r\n\r\n        if (kx !== x || kz !== z) continue;\r\n\r\n        let kDim = 0;\r\n        if (hasDim && keyBytes.length >= 13) {\r\n          kDim = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n        }\r\n\r\n        if (kDim !== dim) continue;\r\n\r\n        // This key belongs to this chunk\r\n        chunk.addKeyValue(keyValue);\r\n      }\r\n    }\r\n\r\n    // Add chunk to the chunks map\r\n    if (!dimMap) {\r\n      dimMap = new Map();\r\n      this.chunks.set(dim, dimMap);\r\n    }\r\n\r\n    let xPlane = dimMap.get(x);\r\n    if (!xPlane) {\r\n      xPlane = new Map();\r\n      dimMap.set(x, xPlane);\r\n    }\r\n\r\n    xPlane.set(z, chunk);\r\n\r\n    // Track access for LRU cache\r\n    if (this._chunkCache) {\r\n      this._chunkCache.access(dim, x, z);\r\n    }\r\n\r\n    return chunk;\r\n  }\r\n\r\n  /**\r\n   * Iterates over all chunks in a memory-efficient manner, calling the processor function\r\n   * for each chunk and optionally clearing chunk data after processing.\r\n   *\r\n   * @param processor - Async function to process each chunk. Receives the chunk and its coordinates.\r\n   * @param options - Optional configuration for iteration behavior.\r\n   * @param options.clearCacheAfterProcess - If true, clears parsed/cached data after processing but preserves\r\n   *                                          raw LevelKeyValue data, allowing chunks to be re-parsed on demand.\r\n   *                                          This is the recommended option for memory optimization.\r\n   * @param options.clearAllAfterProcess - If true, aggressively clears ALL chunk data including raw bytes.\r\n   *                                        WARNING: Chunks cannot be re-parsed after this. Only use when\r\n   *                                        the world data will never be accessed again.\r\n   * @param options.dimensionFilter - If specified, only iterate chunks in this dimension (0=overworld, 1=nether, 2=end).\r\n   * @param options.progressCallback - Optional callback for progress updates during iteration.\r\n   */\r\n  async forEachChunk(\r\n    processor: (chunk: WorldChunk, x: number, z: number, dimension: number) => Promise<void>,\r\n    options?: {\r\n      clearCacheAfterProcess?: boolean;\r\n      clearAllAfterProcess?: boolean;\r\n      dimensionFilter?: number;\r\n      progressCallback?: (processed: number, total: number) => Promise<void>;\r\n    }\r\n  ): Promise<void> {\r\n    // Handle legacy option name\r\n    const clearCacheAfterProcess = options?.clearCacheAfterProcess ?? false;\r\n    const clearAllAfterProcess = options?.clearAllAfterProcess ?? false;\r\n    const dimensionFilter = options?.dimensionFilter;\r\n    let processedCount = 0;\r\n\r\n    const chunkKeys = this.chunks.keys();\r\n\r\n    for (const dimIndex of chunkKeys) {\r\n      if (dimensionFilter !== undefined && dimIndex !== dimensionFilter) {\r\n        continue;\r\n      }\r\n\r\n      const dim = this.chunks.get(dimIndex);\r\n      if (!dim) {\r\n        continue;\r\n      }\r\n\r\n      const xKeys = dim.keys();\r\n      for (const chunkSliverIndex of xKeys) {\r\n        const chunkSliver = dim.get(chunkSliverIndex);\r\n        if (!chunkSliver) {\r\n          continue;\r\n        }\r\n\r\n        const zKeys = chunkSliver.keys();\r\n        for (const chunkZ of zKeys) {\r\n          const chunk = chunkSliver.get(chunkZ);\r\n          if (!chunk) {\r\n            continue;\r\n          }\r\n\r\n          await processor(chunk, chunkSliverIndex, chunkZ, dimIndex);\r\n          processedCount++;\r\n\r\n          // Clear data after processing based on options\r\n          if (clearAllAfterProcess) {\r\n            chunk.clearAllData();\r\n          } else if (clearCacheAfterProcess) {\r\n            chunk.clearCachedData();\r\n          }\r\n\r\n          // Report progress frequently enough for smooth UI updates (~100 updates total)\r\n          // Use dynamic interval based on total chunk count\r\n          const progressInterval = Math.max(100, Math.floor(this.chunkCount / 100));\r\n          if (options?.progressCallback && processedCount % progressInterval === 0) {\r\n            await options.progressCallback(processedCount, this.chunkCount);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clears parsed/cached data from all chunks to free memory while preserving the ability\r\n   * to re-parse chunks on demand. This is the recommended approach for memory optimization\r\n   * when you may need to access chunk data again (e.g., for map rendering).\r\n   */\r\n  clearAllChunkCaches() {\r\n    const chunkKeys = this.chunks.keys();\r\n\r\n    for (const dimIndex of chunkKeys) {\r\n      const dim = this.chunks.get(dimIndex);\r\n      if (!dim) {\r\n        continue;\r\n      }\r\n\r\n      const xKeys = dim.keys();\r\n      for (const x of xKeys) {\r\n        const xPlane = dim.get(x);\r\n        if (!xPlane) {\r\n          continue;\r\n        }\r\n\r\n        const zKeys = xPlane.keys();\r\n        for (const z of zKeys) {\r\n          const chunk = xPlane.get(z);\r\n          if (chunk) {\r\n            chunk.clearCachedData();\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clears the raw LevelDB data to free memory after world data has been processed.\r\n   * This can significantly reduce memory usage for large worlds.\r\n   * WARNING: After calling this, the world cannot be re-loaded from the LevelDb.\r\n   */\r\n  clearLevelDbData() {\r\n    if (this.levelDb) {\r\n      this.levelDb.keys.clear();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clears all world data to free memory.\r\n   * Use this when the world is no longer needed.\r\n   * WARNING: The world cannot be used after calling this without reloading.\r\n   */\r\n  clearAllData() {\r\n    // Clear chunk cache first\r\n    if (this._chunkCache) {\r\n      this._chunkCache.clear();\r\n    }\r\n\r\n    // Clear all chunk data\r\n    for (const dimIndex of this.chunks.keys()) {\r\n      const dim = this.chunks.get(dimIndex);\r\n      if (!dim) continue;\r\n\r\n      for (const x of dim.keys()) {\r\n        const xPlane = dim.get(x);\r\n        if (!xPlane) continue;\r\n\r\n        for (const z of xPlane.keys()) {\r\n          const chunk = xPlane.get(z);\r\n          if (chunk) {\r\n            chunk.clearAllData();\r\n          }\r\n        }\r\n        xPlane.clear();\r\n      }\r\n      dim.clear();\r\n    }\r\n    this.chunks.clear();\r\n\r\n    // Clear LevelDB data\r\n    this.clearLevelDbData();\r\n\r\n    // Clear actors\r\n    this.actorsById = {};\r\n\r\n    // Reset state\r\n    this._isDataLoaded = false;\r\n    this.chunkCount = 0;\r\n    this._minX = undefined;\r\n    this._maxX = undefined;\r\n    this._minZ = undefined;\r\n    this._maxZ = undefined;\r\n  }\r\n\r\n  /**\r\n   * Get statistics about memory usage for this world.\r\n   * Useful for debugging memory issues with large worlds.\r\n   */\r\n  getMemoryStats(): {\r\n    chunkCount: number;\r\n    levelDbKeyCount: number;\r\n    isLazyMode: boolean;\r\n    chunkCacheSize?: number;\r\n    chunkCacheMaxSize?: number;\r\n  } {\r\n    return {\r\n      chunkCount: this.chunkCount,\r\n      levelDbKeyCount: this.levelDb?.keys.size ?? 0,\r\n      isLazyMode: this._isLazyLoadMode,\r\n      chunkCacheSize: this._chunkCache?.size,\r\n      chunkCacheMaxSize: this._chunkCache?.maxChunks,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Clears all chunk data to free memory.\r\n   * WARNING: After calling this, chunk data cannot be accessed without reloading.\r\n   */\r\n  clearAllChunkData() {\r\n    const chunkKeys = this.chunks.keys();\r\n\r\n    for (const dimIndex of chunkKeys) {\r\n      const dim = this.chunks.get(dimIndex);\r\n      if (!dim) {\r\n        continue;\r\n      }\r\n\r\n      const xKeys = dim.keys();\r\n      for (const x of xKeys) {\r\n        const xPlane = dim.get(x);\r\n        if (!xPlane) {\r\n          continue;\r\n        }\r\n\r\n        const zKeys = xPlane.keys();\r\n        for (const z of zKeys) {\r\n          const chunk = xPlane.get(z);\r\n          if (chunk) {\r\n            chunk.clearAllData();\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getTopBlockY(x: number, z: number, dim?: number) {\r\n    const chunkX = Math.floor(x / CHUNK_X_SIZE);\r\n    const chunkZ = Math.floor(z / CHUNK_Z_SIZE);\r\n    const dimension = dim ?? 0;\r\n\r\n    // Quick check: if the chunk index has been built and this chunk isn't in it,\r\n    // skip creating an empty chunk object (avoids wasteful allocations on mouse hover)\r\n    if (this.hasChunkData(dimension, chunkX, chunkZ) === false) {\r\n      return undefined;\r\n    }\r\n\r\n    // Use getOrCreateChunk to support on-demand loading when skipFullProcessing is enabled\r\n    const chunk = this.getOrCreateChunk(dimension, chunkX, chunkZ);\r\n\r\n    if (chunk === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return chunk.getTopBlockY(x - chunkX * CHUNK_X_SIZE, z - chunkZ * CHUNK_Z_SIZE);\r\n  }\r\n\r\n  getTopBlock(x: number, z: number, dim?: number) {\r\n    const chunkX = Math.floor(x / CHUNK_X_SIZE);\r\n    const chunkZ = Math.floor(z / CHUNK_Z_SIZE);\r\n    const dimension = dim ?? 0;\r\n\r\n    // Quick check: if the chunk index has been built and this chunk isn't in it,\r\n    // skip creating an empty chunk object (avoids wasteful allocations on mouse hover)\r\n    if (this.hasChunkData(dimension, chunkX, chunkZ) === false) {\r\n      return undefined;\r\n    }\r\n\r\n    // Use getOrCreateChunk to support on-demand loading when skipFullProcessing is enabled\r\n    const chunk = this.getOrCreateChunk(dimension, chunkX, chunkZ);\r\n\r\n    if (chunk === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return chunk.getTopBlock(x - chunkX * CHUNK_X_SIZE, z - chunkZ * CHUNK_Z_SIZE);\r\n  }\r\n\r\n  spawnEntity(entityTypeId: string, location: BlockLocation) {\r\n    const e = new Entity();\r\n\r\n    return e;\r\n  }\r\n\r\n  getBlock(blockLocation: BlockLocation, dim?: number) {\r\n    const chunkX = Math.floor(blockLocation.x / CHUNK_X_SIZE);\r\n    const chunkZ = Math.floor(blockLocation.z / CHUNK_Z_SIZE);\r\n    const dimension = dim ?? 0;\r\n\r\n    // Use getOrCreateChunk to support on-demand loading when skipFullProcessing is enabled\r\n    const chunk = this.getOrCreateChunk(dimension, chunkX, chunkZ);\r\n\r\n    if (chunk === undefined) {\r\n      return new Block(\"air\");\r\n    }\r\n\r\n    let offsetX = blockLocation.x % 16;\r\n    let offsetZ = blockLocation.z % 16;\r\n\r\n    if (offsetX < 0) {\r\n      offsetX += 16;\r\n    }\r\n\r\n    if (offsetZ < 0) {\r\n      offsetZ += 16;\r\n    }\r\n\r\n    const block = chunk.getBlock(offsetX, blockLocation.y, offsetZ);\r\n\r\n    if (!block) {\r\n      return new Block(\"air\");\r\n    }\r\n\r\n    return block;\r\n  }\r\n\r\n  private async processWorldData(options?: IWorldProcessingOptions) {\r\n    if (!this.levelDb) {\r\n      return false;\r\n    }\r\n\r\n    this.chunks = new Map();\r\n    this.chunkCount = 0;\r\n    this._dimensionIdsInChunks = new Set();\r\n    this._dimensionNameIdTable = undefined;\r\n    this._hasDimensionNameIdTable = false;\r\n\r\n    const processOper = await this._project?.creatorTools.notifyOperationStarted(\r\n      \"Starting second-pass load of '\" + this.name + \"' world\",\r\n      StatusTopic.worldLoad\r\n    );\r\n\r\n    const levelDbKeysArray = Array.from(this.levelDb.keys.keys());\r\n    const totalKeys = levelDbKeysArray.length;\r\n    let processedKeys = 0;\r\n\r\n    // Whether to delete keys from LevelDb after processing to reduce memory\r\n    // Default is true for memory optimization\r\n    const clearKeysAfterProcess = options?.clearKeysAfterProcess !== false;\r\n\r\n    // Report progress frequently enough for smooth UI updates (~100 updates total)\r\n    const keyProgressInterval = Math.max(100, Math.floor(totalKeys / 100));\r\n\r\n    // Yield periodically to allow garbage collection and prevent memory pressure\r\n    const yieldInterval = 500;\r\n\r\n    for (const keyname of levelDbKeysArray) {\r\n      const keyValue = this.levelDb.keys.get(keyname);\r\n\r\n      processedKeys++;\r\n\r\n      // Report progress at dynamic intervals for smooth updates\r\n      if (processedKeys % keyProgressInterval === 0) {\r\n        const percent = totalKeys > 0 ? Math.round((processedKeys / totalKeys) * 100) : 0;\r\n        await this._project?.creatorTools.notifyStatusUpdate(\r\n          `Processing world records (2/2)... (${percent}%)`,\r\n          StatusTopic.worldLoad\r\n        );\r\n        if (options?.progressCallback) {\r\n          options.progressCallback(\"Processing world records (2/2)  \", processedKeys, totalKeys);\r\n        }\r\n\r\n        // Yield to event loop periodically to allow garbage collection\r\n        if (processedKeys % yieldInterval === 0) {\r\n          await new Promise((resolve) => setTimeout(resolve, 0));\r\n        }\r\n      }\r\n\r\n      if (options?.maxNumberOfRecordsToProcess && processedKeys > options.maxNumberOfRecordsToProcess) {\r\n        return false;\r\n      }\r\n\r\n      if (keyname.startsWith(\"AutonomousEntities\")) {\r\n      } else if (keyname.startsWith(\"schedulerWT\")) {\r\n      } else if (keyname.startsWith(\"Overworld\") && keyValue) {\r\n        const overworldBytes = keyValue.value;\r\n\r\n        if (overworldBytes) {\r\n          const overworld = new NbtBinary();\r\n\r\n          overworld.context = this.name + \" overworld\";\r\n\r\n          overworld.fromBinary(overworldBytes, true, false, 0, true);\r\n\r\n          this._overworldData = overworld;\r\n        }\r\n      } else if (keyname.startsWith(\"BiomeData\") && keyValue) {\r\n        const biomeDataBytes = keyValue.value;\r\n\r\n        if (biomeDataBytes) {\r\n          const biomeData = new NbtBinary();\r\n\r\n          biomeData.context = this.name + \" biome data\";\r\n\r\n          biomeData.fromBinary(biomeDataBytes, true, false, 0, true);\r\n\r\n          this._biomeData = biomeData;\r\n        }\r\n      } else if (keyname.startsWith(\"CustomProperties\")) {\r\n        this._hasCustomProps = true;\r\n      } else if (keyname.startsWith(\"DynamicProperties\") && keyValue) {\r\n        this._hasDynamicProps = true;\r\n        const dynamicPropertyBytes = keyValue.value;\r\n\r\n        if (dynamicPropertyBytes) {\r\n          const dynamicProps = new NbtBinary();\r\n\r\n          dynamicProps.context = this.name + \" dynamic props\";\r\n\r\n          dynamicProps.fromBinary(dynamicPropertyBytes, true, false, 0, true);\r\n\r\n          if (dynamicProps.singleRoot) {\r\n            const children = dynamicProps.singleRoot.getTagChildren();\r\n            this._dynamicProperties = {};\r\n\r\n            for (const child of children) {\r\n              if (child.name && Utilities.isValidUuid(child.name)) {\r\n                this._dynamicProperties[child.name] = {};\r\n\r\n                const bpChildren = child.getTagChildren();\r\n\r\n                for (const propChild of bpChildren) {\r\n                  if (\r\n                    propChild.name &&\r\n                    propChild.type === NbtTagType.string &&\r\n                    Utilities.isUsableAsObjectKey(child.name) &&\r\n                    Utilities.isUsableAsObjectKey(propChild.name)\r\n                  ) {\r\n                    this._dynamicProperties[child.name][propChild.name] = propChild.valueAsString;\r\n\r\n                    if (child.name === CREATOR_TOOLS_EDITOR_BPUUID) {\r\n                      this.loadAnchorsFromDynamicProperties();\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (keyname.startsWith(\"LevelChunkMetaDataDictionary\") && keyValue) {\r\n        const levelChunkMetaBytes = keyValue.value;\r\n\r\n        if (levelChunkMetaBytes) {\r\n          const levelChunkMeta = new NbtBinary();\r\n\r\n          levelChunkMeta.context = this.name + \" level chunk metadata\";\r\n\r\n          levelChunkMeta.fromBinary(levelChunkMetaBytes, true, false, 12, true);\r\n\r\n          this._levelChunkMetaData = levelChunkMeta;\r\n        }\r\n      } else if (keyname === \"DimensionNameIdTable\" && keyValue) {\r\n        if (keyValue.value) {\r\n          this._parseDimensionNameIdTable(keyValue.value);\r\n        } else {\r\n          this._hasDimensionNameIdTable = true;\r\n        }\r\n      } else if (keyname.startsWith(\"structuretemplate_\")) {\r\n      } else if (keyname.startsWith(\"digp\") && keyValue) {\r\n        const keyBytes = keyValue.keyBytes;\r\n\r\n        if (keyBytes) {\r\n          const x = DataUtilities.getSignedInteger(keyBytes[4], keyBytes[5], keyBytes[6], keyBytes[7], true);\r\n          const z = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n\r\n          Log.assert(\r\n            keyBytes.length === 16 ||\r\n              keyBytes.length === 24 ||\r\n              keyBytes.length === 20 ||\r\n              keyBytes.length === 14 ||\r\n              keyBytes.length === 13 ||\r\n              keyBytes.length === 12,\r\n            \"Unexpected digp key size (\" + keyBytes.length + \")\"\r\n          );\r\n\r\n          let dim = 0;\r\n\r\n          if (keyBytes.length >= 17) {\r\n            dim = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n\r\n            Log.assert(dim >= 0 && dim <= 2, \"Unexpected dimension index - digp (\" + dim + \")\");\r\n          }\r\n\r\n          let dimMap = this.chunks.get(dim);\r\n\r\n          if (!dimMap) {\r\n            dimMap = new Map();\r\n            this.chunks.set(dim, dimMap);\r\n          }\r\n\r\n          let xPlane = dimMap.get(x);\r\n\r\n          if (!xPlane) {\r\n            xPlane = new Map();\r\n            dimMap.set(x, xPlane);\r\n          }\r\n\r\n          let wc = xPlane.get(z);\r\n\r\n          if (wc === undefined) {\r\n            wc = new WorldChunk(this, x, z);\r\n            this.chunkCount++;\r\n\r\n            xPlane.set(z, wc);\r\n          }\r\n\r\n          if (keyValue.value !== undefined) {\r\n            const keyValueBytes = keyValue.value;\r\n            if (keyValueBytes.length > 0 && keyValueBytes.length % 8 === 0) {\r\n              let hexStr = \"\";\r\n\r\n              for (let bc = 0; bc < keyValueBytes.length; bc += 8) {\r\n                hexStr += Utilities.convertToHexString([\r\n                  keyValueBytes[bc + 0],\r\n                  keyValueBytes[bc + 1],\r\n                  keyValueBytes[bc + 2],\r\n                  keyValueBytes[bc + 3],\r\n                  keyValueBytes[bc + 4],\r\n                  keyValueBytes[bc + 5],\r\n                  keyValueBytes[bc + 6],\r\n                  keyValueBytes[bc + 7],\r\n                ]);\r\n              }\r\n\r\n              wc.addActorDigest(hexStr);\r\n            } else if (keyValueBytes.length !== 0) {\r\n              // Log.error(\"Unexpected actor digest length\", this.name);\r\n            }\r\n          }\r\n        }\r\n      } else if (keyname.startsWith(\"actorprefix\") && keyValue) {\r\n        const keyBytes = keyValue.keyBytes;\r\n\r\n        if (keyBytes && keyBytes.length === 19 && keyValue.value) {\r\n          const hexStr = Utilities.convertToHexString([\r\n            keyBytes[11],\r\n            keyBytes[12],\r\n            keyBytes[13],\r\n            keyBytes[14],\r\n            keyBytes[15],\r\n            keyBytes[16],\r\n            keyBytes[17],\r\n            keyBytes[18],\r\n          ]);\r\n\r\n          const actorItem = new ActorItem(hexStr, keyValue.value);\r\n          this.actorsById[hexStr] = actorItem;\r\n        } else if (keyBytes && keyBytes.length === 27 && keyValue.value) {\r\n          const hexStr = Utilities.convertToHexString([\r\n            keyBytes[11],\r\n            keyBytes[12],\r\n            keyBytes[13],\r\n            keyBytes[14],\r\n            keyBytes[15],\r\n            keyBytes[16],\r\n            keyBytes[17],\r\n            keyBytes[18],\r\n            keyBytes[19],\r\n            keyBytes[20],\r\n            keyBytes[21],\r\n            keyBytes[22],\r\n            keyBytes[23],\r\n            keyBytes[24],\r\n            keyBytes[25],\r\n            keyBytes[26],\r\n          ]);\r\n\r\n          const actorItem = new ActorItem(hexStr, keyValue.value);\r\n          this.actorsById[hexStr] = actorItem;\r\n        } else {\r\n          // Log.error(\"Unexpected actor prefix length - \" + keyname + \" (\" + keyBytes?.length + \")\", this.name);\r\n        }\r\n      } else if (keyname.startsWith(\"player\")) {\r\n      } else if (keyname.startsWith(\"portals\")) {\r\n      } else if (keyname.startsWith(\"LevelSpawnWasFixed\")) {\r\n      } else if (keyname.startsWith(\"VILLAGE_\")) {\r\n      } else if (keyname.startsWith(\"gametestinstance_\")) {\r\n      } else if (keyname.startsWith(\"tickingarea_\")) {\r\n      } else if (keyname.startsWith(\"map_\")) {\r\n      } else if (keyname.startsWith(\"scoreboard\")) {\r\n      } else if (keyname.startsWith(\"SavedEntity\")) {\r\n      } else if (keyname.startsWith(\"ServerMapRuntime\")) {\r\n      } else if (keyname.startsWith(\"VillageRuntime\")) {\r\n      } else if (keyname.startsWith(\"WorldFeatureRuntime\")) {\r\n      } else if (keyname.startsWith(\"WorldGenerationRuntime\")) {\r\n      } else if (keyname.startsWith(\"WorldStreamRuntime\")) {\r\n      } else if (keyname.startsWith(\"BSharpRuntime\")) {\r\n      } else if (keyname.startsWith(\"BadgerSynced\")) {\r\n      } else if (keyname.startsWith(\"CinematicsRuntime\")) {\r\n      } else if (keyname.startsWith(\"CustomGameOptions\")) {\r\n      } else if (keyname.startsWith(\"DeckRuntime\")) {\r\n      } else if (keyname.startsWith(\"EntityFactorySetup\")) {\r\n      } else if (keyname.startsWith(\"GeologyRuntime\")) {\r\n      } else if (keyname.startsWith(\"InvasionRuntime\")) {\r\n      } else if (keyname.startsWith(\"MapRevealRuntime\")) {\r\n      } else if (keyname.startsWith(\"~local_player\")) {\r\n      } else if (keyname.startsWith(\"RealmsStoriesData\")) {\r\n      } else if (keyname.startsWith(\"mobevents\")) {\r\n      } else if (keyname.startsWith(\"game_flatworldlayers\")) {\r\n      } else if (keyname.startsWith(\"dimension\")) {\r\n      } else if (keyname.startsWith(\"structureplacement\")) {\r\n      } else if (keyname.startsWith(\"chunk_loaded_request\")) {\r\n      } else if (keyname.startsWith(\"legacy_console_player\")) {\r\n      } else if (keyname.startsWith(\"PosTrackDB\")) {\r\n      } else if (keyname.startsWith(\"PositionTrackDB\")) {\r\n      } else if (keyname.startsWith(\"OwnedEntitiesLimbo\")) {\r\n      } else if (keyname.startsWith(\"MCeditMap\")) {\r\n      } else if (keyname.startsWith(\"EDU_CurrentCodingURL\")) {\r\n      } else if (keyname.startsWith(\"TheEnd\")) {\r\n      } else if (keyname.indexOf(\"WasPicked\") >= 0) {\r\n      } else if (keyname.indexOf(\"TextIg\") >= 0) {\r\n      } else if (keyname.startsWith(\"SST_SALOG\")) {\r\n      } else if (keyname.startsWith(\"SST_WORD\")) {\r\n      } else if (keyname.startsWith(\"SST_NAME\")) {\r\n      } else if (keyname.startsWith(\"SST_\")) {\r\n      } else if (keyname.startsWith(\"SUSP\")) {\r\n      } else if (keyname.startsWith(\"neteaseData\")) {\r\n      } else if (keyname.startsWith(\"scriptGid\")) {\r\n      } else if (keyname.startsWith(\"Nether\")) {\r\n      } else if (\r\n        keyValue &&\r\n        (keyname.length === 9 || keyname.length === 10 || keyname.length === 13 || keyname.length === 14)\r\n      ) {\r\n        const keyBytes = keyValue.keyBytes;\r\n        const hasDimensionParam = keyname.length >= 13;\r\n\r\n        Log.assertDefined(keyBytes);\r\n\r\n        if (keyBytes) {\r\n          const x = DataUtilities.getSignedInteger(keyBytes[0], keyBytes[1], keyBytes[2], keyBytes[3], true);\r\n          const z = DataUtilities.getSignedInteger(keyBytes[4], keyBytes[5], keyBytes[6], keyBytes[7], true);\r\n          let dim = 0;\r\n\r\n          if (hasDimensionParam) {\r\n            dim = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n\r\n            // Track all dimension IDs, including custom dimensions (>= 1000)\r\n            this._dimensionIdsInChunks.add(dim);\r\n\r\n            if (dim < 1 || dim > 2) {\r\n              // note overworld dimension = 0, but should be omitted so we should not see overworld = 0.\r\n              // Custom dimensions (>= 1000) are also skipped from chunk processing.\r\n              continue;\r\n            }\r\n          } else {\r\n            // 9/10-byte keys are overworld (dim 0)\r\n            this._dimensionIdsInChunks.add(0);\r\n          }\r\n\r\n          if (this._minX === undefined || x * 16 < this._minX) {\r\n            this._minX = x * 16;\r\n          }\r\n\r\n          if (this._maxX === undefined || (x + 1) * 16 > this._maxX) {\r\n            this._maxX = (x + 1) * 16;\r\n          }\r\n\r\n          if (this._minZ === undefined || z * 16 < this._minZ) {\r\n            this._minZ = z * 16;\r\n          }\r\n\r\n          if (this._maxZ === undefined || (z + 1) * 16 > this._maxZ) {\r\n            this._maxZ = (z + 1) * 16;\r\n          }\r\n\r\n          let didIncrement = false;\r\n          let dimMap = this.chunks.get(dim);\r\n\r\n          if (!dimMap) {\r\n            dimMap = new Map();\r\n            this.chunks.set(dim, dimMap);\r\n          }\r\n\r\n          let xPlane = dimMap.get(x);\r\n\r\n          if (!xPlane) {\r\n            xPlane = new Map();\r\n            dimMap.set(x, xPlane);\r\n          }\r\n\r\n          let wc = xPlane.get(z);\r\n\r\n          if (wc === undefined) {\r\n            wc = new WorldChunk(this, x, z);\r\n            this.chunkCount++;\r\n            didIncrement = true;\r\n            xPlane.set(z, wc);\r\n          }\r\n\r\n          wc.addKeyValue(keyValue);\r\n\r\n          if (this.chunkCount % 10000 === 0 && didIncrement) {\r\n            const chunkPercent = totalKeys > 0 ? Math.round((processedKeys / totalKeys) * 100) : 0;\r\n            await this._project?.creatorTools.notifyStatusUpdate(\r\n              `Initialized ${this.chunkCount / 1000}K chunks... (${chunkPercent}%)`,\r\n              StatusTopic.worldLoad\r\n            );\r\n          }\r\n        }\r\n      } else if (\r\n        keyValue === false &&\r\n        (keyname.length === 9 || keyname.length === 10 || keyname.length === 13 || keyname.length === 14)\r\n      ) {\r\n        // keyValue === false means this is a deleted marker\r\n        // We cannot reliably parse coordinates from keyname string (charCodeAt doesn't give raw bytes)\r\n        // Skip trying to clear the chunk data - the deleted data is inaccessible anyway\r\n      } else if (keyValue === false) {\r\n        // console.log(\"Nulling record '\" + keyname + \"'\");\r\n      } else if (keyValue !== undefined) {\r\n        // this._pushError(\"Unknown record type: '\" + keyname + \"'\", this.name);\r\n      } else {\r\n        // this._pushError(\"Unknown record.\", this.name);\r\n      }\r\n\r\n      // Clear the key from LevelDb to reduce memory usage\r\n      // The key data has been handed off to WorldChunks or is no longer needed\r\n      if (clearKeysAfterProcess) {\r\n        this.levelDb.keys.delete(keyname);\r\n      }\r\n    }\r\n\r\n    await this.notifyLoadEnded(processOper);\r\n\r\n    return true;\r\n  }\r\n\r\n  private async notifyLoadEnded(processOper?: number) {\r\n    if (processOper !== undefined) {\r\n      await this._project?.creatorTools.notifyOperationEnded(\r\n        processOper,\r\n        \"Completed second-pass load of '\" + this.name + \"' world.\",\r\n        StatusTopic.worldLoad\r\n      );\r\n    }\r\n  }\r\n\r\n  private async saveAutoGenItems() {\r\n    if (!this._project) {\r\n      return;\r\n    }\r\n\r\n    if (this._autogenTsFile === undefined) {\r\n      /*const newFileName = \"LocalWorld.ts\";\r\n\r\n      const genFolder = await this._project.ensureScriptGenFolder();\r\n\r\n      if (genFolder) {\r\n        this._autogenTsFile = genFolder.ensureFile(newFileName);\r\n\r\n        this._project.ensureItemByProjectPath(\r\n          this._autogenTsFile.storageRelativePath,\r\n          ProjectItemStorageType.singleFile,\r\n          this._autogenTsFile.name,\r\n          ProjectItemType.ts,\r\n          FolderContext.behaviorPack,\r\n          undefined,\r\n          ProjectItemCreationType.generated\r\n        );\r\n      }*/\r\n    }\r\n\r\n    if (this._autogenTsFile) {\r\n      const content = this.getAutoGenScript();\r\n\r\n      this._autogenTsFile.setContent(content);\r\n\r\n      await this._autogenTsFile.saveContent(false);\r\n    }\r\n  }\r\n\r\n  private getAutoGenScript() {\r\n    const content: string[] = [];\r\n\r\n    content.push(\"export const \" + MinecraftUtilities.makeNameScriptSafe(this.name) + \" = {\");\r\n    if (this.anchors) {\r\n      const anchorKeys = this.anchors.getKeys();\r\n\r\n      content.push(\"  anchors: {\");\r\n      for (const anchorKey of anchorKeys) {\r\n        const anchor = this.anchors.get(anchorKey);\r\n\r\n        if (anchor) {\r\n          content.push(\r\n            \"    \" +\r\n              MinecraftUtilities.makeNameScriptSafe(anchor.name) +\r\n              \": { from: { x: \" +\r\n              anchor.from.x +\r\n              \", y: \" +\r\n              anchor.from.y +\r\n              \", z:\" +\r\n              anchor.from.z +\r\n              \"}},\"\r\n          );\r\n        }\r\n      }\r\n\r\n      content.push(\"  }\");\r\n    }\r\n\r\n    content.push(\"}\");\r\n\r\n    return content.join(\"\\n\");\r\n  }\r\n\r\n  getCube(from: BlockLocation, to: BlockLocation, dim?: number) {\r\n    const bc = new BlockVolume();\r\n\r\n    let fromY = from.y;\r\n    if (fromY) {\r\n      if (fromY < this.chunkMinY) {\r\n        fromY = this.chunkMinY;\r\n      }\r\n    }\r\n\r\n    bc.setMaxDimensions(Math.abs(to.x - from.x), Math.abs(to.y - fromY), Math.abs(to.z - from.z));\r\n\r\n    const subChunkXStart = Math.floor(from.x / 16);\r\n    const subChunkXEnd = Math.floor(to.x / 16);\r\n\r\n    const subChunkZStart = Math.floor(from.z / 16);\r\n    const subChunkZEnd = Math.floor(to.z / 16);\r\n\r\n    let cubeX = 0;\r\n    let insetX = (from.x - subChunkXStart * 16) % 16;\r\n    let toGoX = Math.abs(to.x - from.x) + 1;\r\n\r\n    for (let iX = subChunkXStart; iX <= subChunkXEnd; iX++) {\r\n      const nextChunkToGoX = Math.min(toGoX, 16, 16 - insetX);\r\n\r\n      let cubeZ = 0;\r\n      let insetZ = (from.z - subChunkZStart * 16) % 16;\r\n      let toGoZ = Math.abs(to.z - from.z) + 1;\r\n\r\n      for (let iZ = subChunkZStart; iZ <= subChunkZEnd; iZ++) {\r\n        const chunkX = this.chunks.get(dim ? dim : 0)?.get(iX);\r\n\r\n        if (chunkX) {\r\n          const chunk = chunkX.get(iZ);\r\n          const nextChunkToGoZ = Math.min(toGoZ, 16, 16 - insetZ);\r\n\r\n          if (chunk) {\r\n            chunk.fillCube(\r\n              bc,\r\n              cubeX,\r\n              0,\r\n              cubeZ,\r\n              cubeX + nextChunkToGoX,\r\n              Math.abs(to.y - fromY),\r\n              cubeZ + nextChunkToGoZ,\r\n              insetX,\r\n              fromY,\r\n              insetZ\r\n            );\r\n          }\r\n        }\r\n\r\n        if (iZ === subChunkZStart) {\r\n          cubeZ += 16 - insetZ;\r\n          toGoZ -= 16 - insetZ;\r\n          insetZ = 0;\r\n        } else {\r\n          cubeZ += 16;\r\n          toGoZ -= 16;\r\n        }\r\n      }\r\n\r\n      if (iX === subChunkXStart) {\r\n        cubeX += 16 - insetX;\r\n        toGoX -= 16 - insetX;\r\n        insetX = 0;\r\n      } else {\r\n        cubeX += 16;\r\n        toGoX -= 16;\r\n      }\r\n    }\r\n\r\n    return bc;\r\n  }\r\n\r\n  getSubChunkCube(x: number, y: number, z: number, dim?: number) {\r\n    const xDim = this.chunks.get(dim ? dim : 0)?.get(Math.floor(x / 16));\r\n\r\n    if (!xDim) {\r\n      return undefined;\r\n    }\r\n\r\n    const zDim = xDim.get(Math.floor(z / 16));\r\n\r\n    if (zDim === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return zDim.getSubChunkCube(Math.floor(y / 16));\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport MCWorld from \"../minecraft/MCWorld\";\r\nimport Log from \"../core/Log\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\n\r\nexport enum WorldItemInfoGeneratorTest {\r\n  betaApisExperiment = 101,\r\n  dataDrivenItemsExperiment = 102,\r\n  deferredTechnicalPreviewExperiment = 103,\r\n  baseGameVersion = 107,\r\n  worldName = 108,\r\n  worldDescription = 109,\r\n}\r\n\r\n/**\r\n * Validates world items including experiments and base game version settings.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/world.form.json} for topic definitions\r\n */\r\nexport default class WorldItemInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"WORLD\";\r\n  title = \"World Validation\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.baseGameVersion = infoSet.getFirstStringValue(this.id, WorldItemInfoGeneratorTest.baseGameVersion);\r\n\r\n    info.minBaseGameVersionString = infoSet.getMinNumberArrayValueAsVersionString(\r\n      this.id,\r\n      WorldItemInfoGeneratorTest.baseGameVersion\r\n    );\r\n\r\n    info.minBaseGameVersion = MinecraftUtilities.getVersionNumber(info.minBaseGameVersionString);\r\n  }\r\n\r\n  async generate(projectItem: ProjectItem): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (\r\n      projectItem.itemType === ProjectItemType.MCWorld ||\r\n      projectItem.itemType === ProjectItemType.MCTemplate ||\r\n      projectItem.itemType === ProjectItemType.worldFolder\r\n    ) {\r\n      let mcworld: MCWorld | undefined = await MCWorld.ensureOnItem(projectItem);\r\n\r\n      if (!mcworld) {\r\n        Log.debugAlert(\"Could not find respective world.\");\r\n        return items;\r\n      }\r\n\r\n      await mcworld.loadMetaFiles(false);\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldItemInfoGeneratorTest.betaApisExperiment,\r\n          ProjectInfoUtilities.getTitleFromEnum(\r\n            WorldItemInfoGeneratorTest,\r\n            WorldItemInfoGeneratorTest.betaApisExperiment\r\n          ),\r\n          projectItem,\r\n          mcworld.betaApisExperiment,\r\n          mcworld.name\r\n        )\r\n      );\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldItemInfoGeneratorTest.dataDrivenItemsExperiment,\r\n          ProjectInfoUtilities.getTitleFromEnum(\r\n            WorldItemInfoGeneratorTest,\r\n            WorldItemInfoGeneratorTest.dataDrivenItemsExperiment\r\n          ),\r\n          projectItem,\r\n          mcworld.dataDrivenItemsExperiment,\r\n          mcworld.name\r\n        )\r\n      );\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldItemInfoGeneratorTest.deferredTechnicalPreviewExperiment,\r\n          ProjectInfoUtilities.getTitleFromEnum(\r\n            WorldItemInfoGeneratorTest,\r\n            WorldItemInfoGeneratorTest.deferredTechnicalPreviewExperiment\r\n          ),\r\n          projectItem,\r\n          mcworld.deferredTechnicalPreviewExperiment,\r\n          mcworld.name\r\n        )\r\n      );\r\n\r\n      if (mcworld.manifest && mcworld.manifest.header && mcworld.manifest.header.base_game_version) {\r\n        let val: any = mcworld.manifest.header.base_game_version;\r\n\r\n        if (val.join) {\r\n          val = val.join(\".\");\r\n        }\r\n\r\n        val = val.toString();\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            WorldItemInfoGeneratorTest.baseGameVersion,\r\n            \"Base game version\",\r\n            projectItem,\r\n            val,\r\n            mcworld.name\r\n          )\r\n        );\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            \"WORLD\",\r\n            WorldItemInfoGeneratorTest.worldName,\r\n            ProjectInfoUtilities.getTitleFromEnum(WorldItemInfoGeneratorTest, WorldItemInfoGeneratorTest.worldName),\r\n            projectItem,\r\n            mcworld.manifest.header.name,\r\n            mcworld.name\r\n          )\r\n        );\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            \"WORLD\",\r\n            WorldItemInfoGeneratorTest.worldDescription,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              WorldItemInfoGeneratorTest,\r\n              WorldItemInfoGeneratorTest.worldDescription\r\n            ),\r\n            projectItem,\r\n            mcworld.manifest.header.description,\r\n            mcworld.name\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IFile from \"../storage/IFile\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\n\r\nconst tagAllowList = [\"render_method\", \"min_difficulty\", \"cause\", \"effect_name\", \"entity_type\", \"event_name\"];\r\nconst numericAllowList: string[] = [\"max_stack_size\"];\r\nconst boolAllowList: string[] = [\"fire_immune\", \"burns_in_daylight\", \"hand_equipped\", \"stacked_by_data\"];\r\n\r\nconst inspectTagList: string[] = [\r\n  \"minecraft:behavior.follow_mob\",\r\n  \"minecraft:behavior.float_wander\",\r\n  \"minecraft:behavior.tempt\",\r\n];\r\n\r\nexport enum JsonFileTagsInfoGeneratorTest {\r\n  entityType = 101,\r\n  blockType = 102,\r\n  itemType = 103,\r\n  terrainTexture = 104,\r\n  itemTexture = 105,\r\n  soundDefinition = 106,\r\n  musicDefinition = 107,\r\n  sound = 108,\r\n  biomeBehaviorType = 109,\r\n  biomeClientType = 110,\r\n  particleType = 111,\r\n}\r\n\r\n/**\r\n * Extracts and aggregates content tags from JSON definition files.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/jsontags.form.json} for topic definitions\r\n */\r\nexport default class JsonFileTagsInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"JSONTAGS\";\r\n  title = \"JSON Tags\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (project.projectFolder) {\r\n      await this.generateFromFolder(project, project.projectFolder, items, contentIndex);\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    const entityTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.entityType);\r\n    const blockTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.blockType);\r\n    const itemTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.itemType);\r\n    const biomeBehaviorTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.biomeBehaviorType);\r\n    const biomeClientTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.biomeClientType);\r\n    const particleTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.particleType);\r\n\r\n    info.entityTypeComponents = [];\r\n    info.blockTypeComponents = [];\r\n    info.itemTypeComponents = [];\r\n    info.biomeBehaviorTypeComponents = [];\r\n    info.biomeClientTypeComponents = [];\r\n    info.particleEmitterTypeComponents = [];\r\n    info.particleTypeComponents = [];\r\n\r\n    for (const entityTypeComponent of entityTypeComponents) {\r\n      let entityComponentSets = entityTypeComponent.featureSets;\r\n\r\n      if (entityComponentSets) {\r\n        const ecInCg = entityComponentSets[\"componentsUsedInComponentGroups\"];\r\n\r\n        if (ecInCg) {\r\n          for (let cgId in ecInCg) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.entityTypeComponents.includes(cgId)) {\r\n              info.entityTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n        const defaultEcInCg = entityComponentSets[\"defaultComponents\"];\r\n\r\n        if (defaultEcInCg) {\r\n          for (let cgId in defaultEcInCg) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.entityTypeComponents.includes(cgId)) {\r\n              info.entityTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const blockTypeComponent of blockTypeComponents) {\r\n      let blockComponentSets = blockTypeComponent.featureSets;\r\n\r\n      if (blockComponentSets) {\r\n        const blockTypeComponents = blockComponentSets[\"blockDefaultComponents\"];\r\n\r\n        if (blockTypeComponents) {\r\n          for (let cgId in blockTypeComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.blockTypeComponents.includes(cgId)) {\r\n              info.blockTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n\r\n        const blockPermutationTypeComponents = blockComponentSets[\"blockPermutationComponents\"];\r\n\r\n        if (blockPermutationTypeComponents) {\r\n          for (let cgId in blockPermutationTypeComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.blockTypeComponents.includes(cgId)) {\r\n              info.blockTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const itemTypeComponent of itemTypeComponents) {\r\n      let itemComponentSets = itemTypeComponent.featureSets;\r\n\r\n      if (itemComponentSets) {\r\n        const itemTypeComponents = itemComponentSets[\"components\"];\r\n\r\n        if (itemTypeComponents) {\r\n          for (let cgId in itemTypeComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.itemTypeComponents.includes(cgId)) {\r\n              info.itemTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const biomeBehaviorTypeComponent of biomeBehaviorTypeComponents) {\r\n      let biomeComponentSets = biomeBehaviorTypeComponent.featureSets;\r\n\r\n      if (biomeComponentSets) {\r\n        const biomeComponents = biomeComponentSets[\"biomeComponents\"];\r\n\r\n        if (biomeComponents) {\r\n          for (let cgId in biomeComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.biomeBehaviorTypeComponents.includes(cgId)) {\r\n              info.biomeBehaviorTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const biomeClientTypeComponent of biomeClientTypeComponents) {\r\n      let biomeClientComponentSets = biomeClientTypeComponent.featureSets;\r\n\r\n      if (biomeClientComponentSets) {\r\n        const biomeClientComponents = biomeClientComponentSets[\"biomeClientComponents\"];\r\n\r\n        if (biomeClientComponents) {\r\n          for (let cgId in biomeClientComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.biomeClientTypeComponents.includes(cgId)) {\r\n              info.biomeClientTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const particleTypeComponent of particleTypeComponents) {\r\n      let particleComponentSets = particleTypeComponent.featureSets;\r\n\r\n      if (particleComponentSets) {\r\n        const emitterComponents = particleComponentSets[\"particleEmitterComponents\"];\r\n\r\n        if (emitterComponents) {\r\n          for (let cgId in emitterComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.particleEmitterTypeComponents.includes(cgId)) {\r\n              info.particleEmitterTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n\r\n        const particleComponents = particleComponentSets[\"particleComponents\"];\r\n\r\n        if (particleComponents) {\r\n          for (let cgId in particleComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.particleTypeComponents.includes(cgId)) {\r\n              info.particleTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    info.entityTypeComponents.sort();\r\n    info.itemTypeComponents.sort();\r\n    info.blockTypeComponents.sort();\r\n    info.biomeBehaviorTypeComponents.sort();\r\n    info.biomeClientTypeComponents.sort();\r\n    info.particleEmitterTypeComponents.sort();\r\n    info.particleTypeComponents.sort();\r\n  }\r\n\r\n  async generateFromFolder(project: Project, folder: IFolder, items: ProjectInfoItem[], index: ContentIndex) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const baseType = StorageUtilities.getTypeFromName(fileName);\r\n      const file = folder.files[fileName];\r\n\r\n      if (baseType === \"json\" && file) {\r\n        await this.generateFromFile(project, file, items, index);\r\n      } else if (StorageUtilities.isContainerFile(fileName) && file) {\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n\r\n        if (file.content && file.content instanceof Uint8Array) {\r\n          if (!file.fileContainerStorage) {\r\n            const zipStorage = new ZipStorage();\r\n\r\n            zipStorage.storagePath = file.storageRelativePath + \"#\";\r\n\r\n            await zipStorage.loadFromUint8Array(file.content, file.name);\r\n\r\n            file.fileContainerStorage = zipStorage;\r\n          }\r\n\r\n          if (file.fileContainerStorage) {\r\n            await this.generateFromFolder(project, file.fileContainerStorage.rootFolder, items, index);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const childFolder = folder.folders[folderName];\r\n\r\n      if (childFolder && !folder.errorStatus) {\r\n        await this.generateFromFolder(project, childFolder, items, index);\r\n      }\r\n    }\r\n  }\r\n\r\n  async generateFromFile(project: Project, file: IFile, items: ProjectInfoItem[], index: ContentIndex) {\r\n    const srPath = file.storageRelativePath.toLowerCase();\r\n\r\n    if (srPath.indexOf(\"/entities/\") >= 0 && !srPath.endsWith(\".entity.json\")) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.entityType,\r\n        \"Entity file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO !== undefined) {\r\n        const entityNode = jsonO[\"minecraft:entity\"];\r\n\r\n        if (entityNode) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"defaultComponents\",\r\n            index,\r\n            AnnotationCategory.entityComponentDependent,\r\n            entityNode[\"components\"]\r\n          );\r\n\r\n          const compGroupsNode = entityNode[\"component_groups\"];\r\n\r\n          if (compGroupsNode) {\r\n            for (const compNodeName in compGroupsNode) {\r\n              await this.addSubTags(\r\n                pi,\r\n                \"componentsUsedInComponentGroups\",\r\n                index,\r\n                AnnotationCategory.entityComponentDependentInGroup,\r\n                compGroupsNode[compNodeName]\r\n              );\r\n            }\r\n          }\r\n          const eventsNode = entityNode[\"events\"];\r\n\r\n          if (eventsNode) {\r\n            for (const evNodeName in eventsNode) {\r\n              await this.addSubTags(pi, \"entityEvents\", index, AnnotationCategory.entityEvent, eventsNode[evNodeName]);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    }\r\n\r\n    if (srPath.indexOf(\"/items/\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.itemType,\r\n        \"Item file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO !== undefined) {\r\n        const itemNode = jsonO[\"minecraft:item\"];\r\n\r\n        if (itemNode) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"components\",\r\n            index,\r\n            AnnotationCategory.itemComponentDependent,\r\n            itemNode[\"components\"]\r\n          );\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    }\r\n\r\n    if (srPath.indexOf(\"/blocks/\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.blockType,\r\n        \"Block file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO) {\r\n        const blockNode = jsonO[\"minecraft:block\"];\r\n\r\n        if (blockNode) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"blockDefaultComponents\",\r\n            index,\r\n            AnnotationCategory.blockComponentDependent,\r\n            blockNode[\"components\"]\r\n          );\r\n\r\n          const descriptionNode = blockNode[\"description\"];\r\n\r\n          if (descriptionNode) {\r\n            let stateNode = descriptionNode[\"states\"];\r\n\r\n            if (stateNode === undefined) {\r\n              stateNode = descriptionNode[\"properties\"];\r\n            }\r\n\r\n            let permutations = 0;\r\n\r\n            if (stateNode) {\r\n              for (const obj in stateNode) {\r\n                const val = stateNode[obj];\r\n\r\n                if (val && val.length) {\r\n                  if (permutations === 0) {\r\n                    permutations = val.length;\r\n                  } else {\r\n                    permutations *= val.length;\r\n                  }\r\n\r\n                  pi.maxFeature(\"Permutation\", \"values_per_property\", val.length);\r\n                }\r\n              }\r\n            }\r\n\r\n            let traitsNode = descriptionNode[\"traits\"];\r\n\r\n            if (traitsNode) {\r\n              if (traitsNode[\"minecraft:placement_direction\"]) {\r\n                const enabledStates = traitsNode[\"minecraft:placement_direction\"][\"enabled_states\"];\r\n\r\n                if (enabledStates && enabledStates.includes(\"minecraft:cardinal_direction\")) {\r\n                  if (permutations === 0) {\r\n                    permutations = 4;\r\n                  } else {\r\n                    permutations *= 4;\r\n                  }\r\n                }\r\n\r\n                if (enabledStates && enabledStates.includes(\"minecraft:facing_direction\")) {\r\n                  if (permutations === 0) {\r\n                    permutations = 6;\r\n                  } else {\r\n                    permutations *= 6;\r\n                  }\r\n                }\r\n              }\r\n\r\n              if (traitsNode[\"minecraft:placement_position\"]) {\r\n                const enabledStates = traitsNode[\"minecraft:placement_position\"][\"enabled_states\"];\r\n\r\n                if (enabledStates && enabledStates.includes(\"minecraft:block_face\")) {\r\n                  if (permutations === 0) {\r\n                    permutations = 6;\r\n                  } else {\r\n                    permutations *= 6;\r\n                  }\r\n                }\r\n\r\n                if (enabledStates && enabledStates.includes(\"minecraft:vertical_half\")) {\r\n                  if (permutations === 0) {\r\n                    permutations = 2;\r\n                  } else {\r\n                    permutations *= 2;\r\n                  }\r\n                }\r\n              }\r\n            }\r\n\r\n            if (stateNode || traitsNode) {\r\n              pi.maxFeature(\"Permutation\", \"Values per type\", permutations);\r\n              pi.incrementFeature(\"Permutation\", \"Values\", permutations);\r\n            }\r\n          }\r\n\r\n          const permsNode = blockNode[\"permutations\"];\r\n\r\n          if (permsNode) {\r\n            for (const permNode of permsNode) {\r\n              const permComponentsNode = permNode[\"components\"];\r\n\r\n              if (permComponentsNode) {\r\n                await this.addSubTags(\r\n                  pi,\r\n                  \"blockPermutationComponents\",\r\n                  index,\r\n                  AnnotationCategory.blockComponentDependentInPermutation,\r\n                  permComponentsNode\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    }\r\n\r\n    if (srPath.indexOf(\"/biomes/\") >= 0) {\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO) {\r\n        const biomeNode = jsonO[\"minecraft:biome\"];\r\n\r\n        if (biomeNode) {\r\n          const pi = new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            JsonFileTagsInfoGeneratorTest.biomeBehaviorType,\r\n            \"Biome behavior file\",\r\n            project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n            file.storageRelativePath\r\n          );\r\n\r\n          await this.addSubTags(\r\n            pi,\r\n            \"biomeComponents\",\r\n            index,\r\n            AnnotationCategory.biomeBehaviorComponentDependent,\r\n            biomeNode[\"components\"]\r\n          );\r\n\r\n          items.push(pi);\r\n        }\r\n\r\n        const clientBiomeNode = jsonO[\"minecraft:client_biome\"];\r\n\r\n        if (clientBiomeNode) {\r\n          const pi = new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            JsonFileTagsInfoGeneratorTest.biomeClientType,\r\n            \"Biome client file\",\r\n            project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n            file.storageRelativePath\r\n          );\r\n\r\n          await this.addSubTags(\r\n            pi,\r\n            \"biomeClientComponents\",\r\n            index,\r\n            AnnotationCategory.biomeClientComponentDependent,\r\n            clientBiomeNode[\"components\"]\r\n          );\r\n\r\n          items.push(pi);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (srPath.indexOf(\"/particles/\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.particleType,\r\n        \"Particle file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO !== undefined) {\r\n        const particleEffectNode = jsonO[\"particle_effect\"];\r\n\r\n        if (particleEffectNode) {\r\n          const componentsNode = particleEffectNode[\"components\"];\r\n\r\n          if (componentsNode) {\r\n            const emitterComponents: { [key: string]: any } = {};\r\n            const particleComponents: { [key: string]: any } = {};\r\n\r\n            for (const compName in componentsNode) {\r\n              if (compName.startsWith(\"minecraft:particle_\") || compName.startsWith(\"particle_\")) {\r\n                particleComponents[compName] = componentsNode[compName];\r\n              } else {\r\n                emitterComponents[compName] = componentsNode[compName];\r\n              }\r\n            }\r\n\r\n            await this.addSubTags(\r\n              pi,\r\n              \"particleEmitterComponents\",\r\n              index,\r\n              AnnotationCategory.particleEmitterComponentDependent,\r\n              emitterComponents\r\n            );\r\n\r\n            await this.addSubTags(\r\n              pi,\r\n              \"particleComponents\",\r\n              index,\r\n              AnnotationCategory.particleComponentDependent,\r\n              particleComponents\r\n            );\r\n          }\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    }\r\n\r\n    if (srPath.indexOf(\"/textures/terrain_texture.json\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.terrainTexture,\r\n        \"Terrrain texture file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO && jsonO.texture_data) {\r\n        await this.addSubTags(\r\n          pi,\r\n          \"terrain_texture_elements\",\r\n          index,\r\n          AnnotationCategory.terrainTextureSource,\r\n          jsonO.texture_data,\r\n          true\r\n        );\r\n      }\r\n\r\n      items.push(pi);\r\n    } else if (srPath.indexOf(\"/textures/item_texture.json\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.itemTexture,\r\n        \"Item texture file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      await file.loadContent(false);\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO && jsonO.texture_data) {\r\n        await this.addSubTags(\r\n          pi,\r\n          \"item_texture_elements\",\r\n          index,\r\n          AnnotationCategory.itemTextureSource,\r\n          jsonO.texture_data,\r\n          true\r\n        );\r\n      }\r\n\r\n      items.push(pi);\r\n    } else if (srPath.indexOf(\"/sounds/sound_definitions.json\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.soundDefinition,\r\n        \"Sound definitions file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO) {\r\n        const soundDef = jsonO[\"sound_definitions\"];\r\n\r\n        if (soundDef) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"sound_definition_elements\",\r\n            index,\r\n            AnnotationCategory.soundDefinitionSource,\r\n            soundDef,\r\n            true\r\n          );\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    } else if (srPath.indexOf(\"/sounds/music_definitions.json\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.musicDefinition,\r\n        \"Music definitions file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO) {\r\n        await this.addSubTags(\r\n          pi,\r\n          \"music_definition_elements\",\r\n          index,\r\n          AnnotationCategory.musicDefinitionSource,\r\n          jsonO,\r\n          true\r\n        );\r\n      }\r\n\r\n      items.push(pi);\r\n    } else if (srPath.indexOf(\"/sounds.json\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.sound,\r\n        \"Sounds file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO) {\r\n        const blockSounds = jsonO[\"block_sounds\"];\r\n        if (blockSounds) {\r\n          await this.addSubTags(pi, \"block_sounds\", index, AnnotationCategory.blockSounds, blockSounds, true);\r\n        }\r\n\r\n        const entitySounds = jsonO[\"entity_sounds\"];\r\n        if (entitySounds) {\r\n          await this.addSubTags(pi, \"entity_sounds\", index, AnnotationCategory.entitySounds, entitySounds, true);\r\n        }\r\n\r\n        const individualEventSounds = jsonO[\"individual_event_sounds\"];\r\n        if (individualEventSounds) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"individual_sounds\",\r\n            index,\r\n            AnnotationCategory.individualEventSoundsSource,\r\n            individualEventSounds\r\n          );\r\n        }\r\n\r\n        const interactiveSounds = jsonO[\"interactive_sounds\"];\r\n        if (interactiveSounds) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"interactive_sounds\",\r\n            index,\r\n            AnnotationCategory.interactiveSounds,\r\n            interactiveSounds,\r\n            true\r\n          );\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    }\r\n  }\r\n\r\n  async addSubTags(\r\n    pi: ProjectInfoItem,\r\n    prefix: string,\r\n    index: ContentIndex,\r\n    annotation: string,\r\n    rootTag?: any,\r\n    doNotIncrement?: boolean\r\n  ) {\r\n    if (!rootTag) {\r\n      return;\r\n    }\r\n\r\n    for (const childEltName in rootTag) {\r\n      if (childEltName) {\r\n        let colon = childEltName.indexOf(\":\");\r\n        const childObj: any = rootTag[childEltName];\r\n\r\n        if (colon <= 0 || childEltName.substring(0, colon) === \"minecraft\") {\r\n          if (!doNotIncrement) {\r\n            pi.incrementFeature(prefix, childEltName);\r\n          }\r\n\r\n          let bareTag = childEltName;\r\n\r\n          if (colon > 1 && colon < childEltName.length - 2) {\r\n            bareTag = childEltName.substring(colon + 1);\r\n          }\r\n\r\n          if (pi.projectItem && pi.projectItem.projectPath) {\r\n            let packRelativePath = await pi.projectItem.getPackRelativePath();\r\n\r\n            if (packRelativePath) {\r\n              packRelativePath = StorageUtilities.getBaseFromName(\r\n                StorageUtilities.ensureNotStartsWithDelimiter(packRelativePath)\r\n              );\r\n\r\n              index.insert(bareTag, packRelativePath, annotation);\r\n            }\r\n\r\n            index.insert(bareTag, pi.projectItem.projectPath, annotation);\r\n\r\n            if (typeof childObj === \"number\") {\r\n              if (numericAllowList.includes(bareTag)) {\r\n                index.insert(bareTag + \"==\" + Math.round(childObj), pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else if (typeof childObj === \"boolean\") {\r\n              if (boolAllowList.includes(bareTag)) {\r\n                index.insert(bareTag + \"==\" + (childObj ? \"t\" : \"f\"), pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else if (Array.isArray(childObj)) {\r\n              index.insert(bareTag + \"==a\", pi.projectItem.projectPath, annotation);\r\n              this.addSubTagsForArray(pi, bareTag, index, annotation, childObj);\r\n            } else if (typeof childObj === \"string\" && childObj.length > 0) {\r\n              if (tagAllowList.includes(bareTag)) {\r\n                index.insert(bareTag + \"==\" + childObj, pi.projectItem.projectPath, annotation);\r\n                index.insert(childObj, pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else {\r\n              if (childObj && !Array.isArray(childObj)) {\r\n                this.addDescendentSubTags(pi, bareTag, index, annotation, childObj, childEltName);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  addSubTagsForArray(pi: ProjectInfoItem, prefix: string, index: ContentIndex, annotation: string, rootArr?: any[]) {\r\n    if (!rootArr) {\r\n      return;\r\n    }\r\n\r\n    for (const childObj of rootArr) {\r\n      if (typeof childObj === \"string\" && childObj.length > 0) {\r\n        if (pi && pi.projectItem && pi.projectItem.projectPath) {\r\n          index.insert(prefix + \".\" + childObj, pi.projectItem.projectPath, annotation);\r\n          index.insert(childObj, pi.projectItem.projectPath, annotation);\r\n        }\r\n      } else {\r\n        if (childObj && typeof childObj !== \"number\" && typeof childObj !== \"boolean\" && !Array.isArray(childObj)) {\r\n          this.addDescendentSubTags(pi, prefix, index, annotation, childObj);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  addDescendentSubTags(\r\n    pi: ProjectInfoItem,\r\n    prefix: string,\r\n    index: ContentIndex,\r\n    annotation: string,\r\n    rootTag?: any,\r\n    parentName?: string\r\n  ) {\r\n    if (!rootTag) {\r\n      return;\r\n    }\r\n\r\n    for (const childEltName in rootTag) {\r\n      if (childEltName) {\r\n        const obj: any = rootTag[childEltName];\r\n\r\n        if (pi.projectItem && pi.projectItem.projectPath) {\r\n          if (childEltName === \"test\" && parentName === \"filters\" && typeof obj === \"string\") {\r\n            index.insert(obj, pi.projectItem?.projectPath, AnnotationCategory.entityFilter);\r\n          }\r\n\r\n          index.insert(prefix + \".\" + childEltName, pi.projectItem?.projectPath, annotation);\r\n\r\n          let bareTag = childEltName;\r\n          let colon = childEltName.indexOf(\":\");\r\n\r\n          if (colon <= 0 || childEltName.substring(0, colon) === \"minecraft\") {\r\n            if (colon > 1 && colon < childEltName.length - 2) {\r\n              bareTag = childEltName.substring(colon + 1);\r\n            }\r\n            const inspectTag = parentName && inspectTagList.includes(parentName);\r\n\r\n            if (typeof obj === \"number\") {\r\n              if (numericAllowList.includes(bareTag) || inspectTag) {\r\n                index.insert(prefix + \".\" + bareTag + \"==\" + Math.round(obj), pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else if (typeof obj === \"boolean\") {\r\n              if (boolAllowList.includes(bareTag) || inspectTag) {\r\n                index.insert(prefix + \".\" + bareTag + \"==\" + (obj ? \"t\" : \"f\"), pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else if (typeof obj === \"string\") {\r\n              if (tagAllowList.includes(bareTag) || inspectTag) {\r\n                index.insert(prefix + \".\" + bareTag + \"==\" + obj, pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else if (Array.isArray(obj)) {\r\n              this.addSubTagsForArray(pi, prefix + \".\" + bareTag, index, annotation, obj);\r\n            } else {\r\n              if (obj && !Array.isArray(obj)) {\r\n                this.addDescendentSubTags(pi, prefix + \".\" + bareTag, index, annotation, obj, childEltName);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class CommandStructure {\r\n  public fullName: string;\r\n  public commandArguments: string[];\r\n\r\n  constructor(commandFullName: string, commandArguments: string[]) {\r\n    this.fullName = commandFullName;\r\n    this.commandArguments = commandArguments;\r\n  }\r\n\r\n  get isNamespaced() {\r\n    const namespaceColon = this.fullName.indexOf(\":\");\r\n\r\n    return namespaceColon > 0;\r\n  }\r\n\r\n  get namespace() {\r\n    const namespaceColon = this.fullName.indexOf(\":\");\r\n\r\n    if (namespaceColon > 0) {\r\n      return this.fullName.substring(0, namespaceColon);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static parse(commandText: string) {\r\n    let commandName = undefined;\r\n\r\n    commandText = commandText.trim();\r\n\r\n    if (commandText.startsWith(\"/\")) {\r\n      commandText = commandText.substring(1, commandText.length);\r\n    }\r\n\r\n    const firstSpace = commandText.indexOf(\" \");\r\n\r\n    let parseArgs: string[] = [];\r\n\r\n    if (firstSpace < 0) {\r\n      commandName = commandText.toLowerCase();\r\n    } else {\r\n      commandName = commandText.substring(0, firstSpace).toLowerCase();\r\n\r\n      const argumentStr = commandText.substring(firstSpace + 1);\r\n\r\n      let nextSpace = argumentStr.indexOf(\" \");\r\n      let nextDoubleQuote = argumentStr.indexOf('\"');\r\n      let nextSingleQuote = argumentStr.indexOf(\"'\");\r\n      let startIndex = 0;\r\n\r\n      while (nextSpace >= 0 && startIndex < argumentStr.length) {\r\n        let processedNextSegment = false;\r\n\r\n        if (\r\n          nextDoubleQuote >= 0 &&\r\n          nextDoubleQuote < nextSpace &&\r\n          (nextSingleQuote < 0 || nextSingleQuote > nextDoubleQuote)\r\n        ) {\r\n          let nextNextDoubleQuote = argumentStr.indexOf('\"', nextDoubleQuote + 1);\r\n\r\n          if (nextNextDoubleQuote > nextDoubleQuote) {\r\n            parseArgs.push(argumentStr.substring(startIndex + 1, nextNextDoubleQuote));\r\n            startIndex = nextNextDoubleQuote + 1;\r\n\r\n            if (startIndex < argumentStr.length) {\r\n              nextSpace = argumentStr.indexOf(\" \", startIndex);\r\n              nextDoubleQuote = argumentStr.indexOf('\"', startIndex);\r\n              nextSingleQuote = argumentStr.indexOf(\"'\", startIndex);\r\n            }\r\n            processedNextSegment = true;\r\n          }\r\n        } else if (nextSingleQuote >= 0 && nextSingleQuote < nextSpace) {\r\n          const nextNextSingleQuote = argumentStr.indexOf(\"'\", nextSingleQuote + 1);\r\n\r\n          if (nextNextSingleQuote > nextSingleQuote) {\r\n            parseArgs.push(argumentStr.substring(startIndex + 1, nextNextSingleQuote));\r\n            startIndex = nextNextSingleQuote + 1;\r\n\r\n            if (startIndex < argumentStr.length) {\r\n              nextSpace = argumentStr.indexOf(\" \", startIndex);\r\n              nextDoubleQuote = argumentStr.indexOf('\"', startIndex);\r\n              nextSingleQuote = argumentStr.indexOf(\"'\", startIndex);\r\n            }\r\n            processedNextSegment = true;\r\n          }\r\n        }\r\n\r\n        // consider space as the next element\r\n        if (!processedNextSegment) {\r\n          parseArgs.push(argumentStr.substring(startIndex, nextSpace));\r\n\r\n          startIndex = nextSpace + 1;\r\n\r\n          if (startIndex < argumentStr.length) {\r\n            nextSpace = argumentStr.indexOf(\" \", startIndex);\r\n            nextDoubleQuote = argumentStr.indexOf('\"', startIndex);\r\n            nextSingleQuote = argumentStr.indexOf(\"'\", startIndex);\r\n          }\r\n        }\r\n      }\r\n\r\n      parseArgs.push(argumentStr.substring(startIndex));\r\n    }\r\n\r\n    // if the command is a comment, push the comment into args and identify this command\r\n    // consistently as a comment (\"#\").\r\n    if (commandName.indexOf(\"#\") >= 0) {\r\n      let newArgs = [];\r\n\r\n      newArgs.push(commandName);\r\n\r\n      for (let i = 0; i < parseArgs.length; i++) {\r\n        newArgs.push(parseArgs[i]);\r\n      }\r\n\r\n      parseArgs = newArgs;\r\n      commandName = \"#\";\r\n    }\r\n\r\n    return new CommandStructure(\r\n      commandName,\r\n      parseArgs // arguments is a keyword, so commandArguments here.\r\n    );\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport enum CommandStatus {\r\n  completed = 100,\r\n  invalidEnvironment = 2,\r\n  invalidArguments = 1,\r\n  fail = 0,\r\n}\r\n\r\nexport interface ICommandResult {\r\n  status: CommandStatus;\r\n  data?: any;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ToolCommand System - Unified command interface for MCT\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * ToolCommands provide a unified way to expose MCT functionality across multiple surfaces:\r\n * - CLI commands (via thin adapter to Commander.js)\r\n * - MCP tools (via auto-registration with Zod schemas)\r\n * - In-game edit bar (via SearchCommandEditor)\r\n * - Serve mode terminal (via stdin processing)\r\n * - Server management UI (via HTTP API)\r\n * - Home page command bar\r\n *\r\n * DESIGN PRINCIPLES:\r\n * 1. Commands exist in the same \"/\" namespace as Bedrock server commands\r\n * 2. The /help command is the only one we override from Bedrock (unified help)\r\n * 3. All other unrecognized commands pass through to Bedrock server\r\n * 4. Commands support tab-completion via autocomplete providers\r\n * 5. Commands use a flag syntax for optional parameters (--flag value)\r\n *\r\n * RELATIONSHIP TO CLI COMMANDS:\r\n * - CLI commands (ICommand in cli/core/) handle CLI-specific concerns (workers, etc.)\r\n * - ToolCommands use the same core libraries (ProjectItemCreateManager, etc.)\r\n * - CLI commands can delegate to ToolCommands for argument parsing\r\n * - New commands should prefer ToolCommand implementation\r\n *\r\n * RELATED FILES:\r\n * - IToolCommandArgument.ts: Argument/flag definitions\r\n * - IToolCommandContext.ts: Execution context\r\n * - ToolCommandRegistry.ts: Central registry\r\n * - ToolCommandParser.ts: Parsing and autocomplete\r\n * - cli/core/ToolCommandCliAdapter.ts: CLI integration\r\n */\r\n\r\nimport type { IToolCommandArgument, IToolCommandFlag } from \"./IToolCommandArgument\";\r\nimport type { IToolCommandContext } from \"./IToolCommandContext\";\r\n\r\n/**\r\n * Scopes where a ToolCommand can be invoked.\r\n * By default, commands are available in all scopes.\r\n */\r\nexport enum ToolCommandScope {\r\n  /** Available in web/Electron UI (SearchCommandEditor, Home page) */\r\n  ui = \"ui\",\r\n\r\n  /** Available as MCP tool */\r\n  mcp = \"mcp\",\r\n\r\n  /** Available in serve mode interactive terminal */\r\n  serveTerminal = \"serveTerminal\",\r\n\r\n  /** Available in server management HTTP API */\r\n  serverApi = \"serverApi\",\r\n\r\n  /** Available as CLI command (via adapter) */\r\n  cli = \"cli\",\r\n}\r\n\r\n/**\r\n * Standard exit codes for ToolCommands.\r\n * These align with Unix conventions and enable intelligent error handling in CI/CD scripts.\r\n */\r\nexport enum ToolCommandExitCode {\r\n  Success = 0,\r\n  GenericError = 1,\r\n  PortConflict = 2,\r\n  EulaNotAccepted = 3,\r\n  NetworkError = 4,\r\n  CrashOnStartup = 5,\r\n  Timeout = 6,\r\n  InvalidArguments = 7,\r\n  PermissionDenied = 8,\r\n}\r\n\r\n/**\r\n * Result of executing a ToolCommand.\r\n */\r\nexport interface IToolCommandResult {\r\n  /** Whether the command succeeded */\r\n  success: boolean;\r\n\r\n  /** Human-readable result message */\r\n  message?: string;\r\n\r\n  /** Structured data returned by the command */\r\n  data?: unknown;\r\n\r\n  /** Process exit code for CLI consumers */\r\n  exitCode?: ToolCommandExitCode;\r\n\r\n  /** Error information if success is false */\r\n  error?: {\r\n    code: string;\r\n    message: string;\r\n    details?: unknown;\r\n  };\r\n}\r\n\r\n/**\r\n * Category for grouping commands in help output.\r\n */\r\nexport type ToolCommandCategory = \"General\" | \"Project\" | \"Content\" | \"Server\" | \"Validation\" | \"World\" | \"Render\";\r\n\r\n/**\r\n * Metadata for a ToolCommand.\r\n * Mirrors ICommandMetadata from CLI but simplified for ToolCommand use.\r\n */\r\nexport interface IToolCommandMetadata {\r\n  /** Command name (e.g., 'create', 'add', 'help') - without leading slash */\r\n  name: string;\r\n\r\n  /** Short description for help text */\r\n  description: string;\r\n\r\n  /** Command aliases (e.g., ['c'] for 'create') */\r\n  aliases?: string[];\r\n\r\n  /** Category for grouping in help output */\r\n  category: ToolCommandCategory;\r\n\r\n  /** Positional arguments for this command */\r\n  arguments?: IToolCommandArgument[];\r\n\r\n  /** Named flags for this command (--flag value) */\r\n  flags?: IToolCommandFlag[];\r\n\r\n  /** Whether this command requires a project context */\r\n  requiresProject?: boolean;\r\n\r\n  /** Whether this command requires an active Minecraft server connection */\r\n  requiresMinecraft?: boolean;\r\n\r\n  /** Whether this command modifies content (vs read-only) */\r\n  isWriteCommand?: boolean;\r\n\r\n  /** Scopes where this command is available (default: all) */\r\n  scopes?: ToolCommandScope[];\r\n\r\n  /** Example usages for help text */\r\n  examples?: string[];\r\n}\r\n\r\n/**\r\n * IToolCommand is the interface all ToolCommands must implement.\r\n */\r\nexport interface IToolCommand {\r\n  /**\r\n   * Command metadata for registration and help.\r\n   */\r\n  readonly metadata: IToolCommandMetadata;\r\n\r\n  /**\r\n   * Execute the command with the provided context.\r\n   *\r\n   * @param context The execution context with project, server, and output access\r\n   * @param args Parsed positional arguments (in order of metadata.arguments)\r\n   * @param flags Parsed flag values (keyed by flag name without --)\r\n   * @returns Result indicating success/failure and any return data\r\n   */\r\n  execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult>;\r\n\r\n  /**\r\n   * Get autocomplete suggestions for a partial argument.\r\n   * Default implementation uses argument autocompleteProviders.\r\n   *\r\n   * @param context The execution context\r\n   * @param args Arguments provided so far\r\n   * @param partialArg The partial argument being typed\r\n   * @param argIndex Index of the argument being completed\r\n   * @returns Array of completion suggestions\r\n   */\r\n  getCompletions?(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]>;\r\n}\r\n\r\n/**\r\n * Base class for ToolCommands providing common functionality.\r\n */\r\nexport abstract class ToolCommandBase implements IToolCommand {\r\n  abstract readonly metadata: IToolCommandMetadata;\r\n\r\n  abstract execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult>;\r\n\r\n  /**\r\n   * Default completion implementation using argument autocompleteProviders.\r\n   */\r\n  async getCompletions(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    const argDef = this.metadata.arguments?.[argIndex];\r\n    if (!argDef?.autocompleteProvider) {\r\n      return [];\r\n    }\r\n\r\n    return argDef.autocompleteProvider(partialArg, context);\r\n  }\r\n\r\n  /**\r\n   * Helper to create a success result.\r\n   */\r\n  protected success(message?: string, data?: unknown): IToolCommandResult {\r\n    return { success: true, message, data };\r\n  }\r\n\r\n  /**\r\n   * Helper to create an error result.\r\n   */\r\n  protected error(code: string, message: string, details?: unknown): IToolCommandResult {\r\n    return {\r\n      success: false,\r\n      error: { code, message, details },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Helper to validate required arguments.\r\n   */\r\n  protected validateRequiredArgs(args: string[]): IToolCommandResult | undefined {\r\n    const requiredArgs = this.metadata.arguments?.filter((a) => a.required) ?? [];\r\n\r\n    for (let i = 0; i < requiredArgs.length; i++) {\r\n      if (!args[i] || args[i].trim() === \"\") {\r\n        return this.error(\"MISSING_ARGUMENT\", `Missing required argument: ${requiredArgs[i].name}`, {\r\n          argumentName: requiredArgs[i].name,\r\n          argumentIndex: i,\r\n        });\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport type Project from \"../Project\";\r\nimport type CreatorTools from \"../CreatorTools\";\r\nimport type IMinecraft from \"../IMinecraft\";\r\nimport type ServerManager from \"../../local/ServerManager\";\r\nimport Log from \"../../core/Log\";\r\n\r\n/**\r\n * Session context for ToolCommands that interact with Minecraft servers.\r\n * Maps to the MCP concept of \"session\" for managing server instances.\r\n */\r\nexport interface IToolCommandSession {\r\n  /**\r\n   * Session name - identifies this server instance.\r\n   * In MCP context, this is the sessionName parameter.\r\n   */\r\n  sessionName: string;\r\n\r\n  /**\r\n   * The ServerManager that owns this session.\r\n   */\r\n  serverManager?: ServerManager;\r\n\r\n  /**\r\n   * The slot ID where this server is running.\r\n   */\r\n  slot?: number;\r\n}\r\n\r\n/**\r\n * Output writer for ToolCommand messages.\r\n * Abstraction that works across different surfaces (terminal, UI, etc.)\r\n */\r\nexport interface IToolCommandOutput {\r\n  /** Write an informational message */\r\n  info(message: string): void;\r\n\r\n  /** Write a success message */\r\n  success(message: string): void;\r\n\r\n  /** Write a warning message */\r\n  warn(message: string): void;\r\n\r\n  /** Write an error message */\r\n  error(message: string): void;\r\n\r\n  /** Write a debug/verbose message */\r\n  debug(message: string): void;\r\n\r\n  /** Update progress (for long-running operations) */\r\n  progress(current: number, total: number, message?: string): void;\r\n}\r\n\r\n/**\r\n * Execution context for ToolCommands.\r\n *\r\n * Provides access to:\r\n * - Optional project context\r\n * - Optional Minecraft server connection\r\n * - CreatorTools instance for gallery, preferences, etc.\r\n * - Output writer for command feedback\r\n */\r\nexport interface IToolCommandContext {\r\n  /**\r\n   * The CreatorTools instance.\r\n   * Provides gallery, preferences, storage, etc.\r\n   * May be undefined in contexts where CreatorTools is not available (e.g., serve terminal).\r\n   */\r\n  creatorTools?: CreatorTools;\r\n\r\n  /**\r\n   * The active project, if one is loaded.\r\n   * Undefined when running commands from Home page or without project context.\r\n   */\r\n  project?: Project;\r\n\r\n  /**\r\n   * Active Minecraft server connection, if available.\r\n   * Used for commands that interact with Bedrock Dedicated Server.\r\n   */\r\n  minecraft?: IMinecraft;\r\n\r\n  /**\r\n   * Session context for server-based commands.\r\n   * Provides access to the server manager and session info.\r\n   */\r\n  session?: IToolCommandSession;\r\n\r\n  /**\r\n   * Output writer for command messages.\r\n   */\r\n  output: IToolCommandOutput;\r\n\r\n  /**\r\n   * The scope from which this command was invoked.\r\n   */\r\n  scope: \"ui\" | \"mcp\" | \"serveTerminal\" | \"serverApi\" | \"cli\";\r\n\r\n  /**\r\n   * Whether verbose/debug output is enabled.\r\n   */\r\n  verbose?: boolean;\r\n\r\n  /**\r\n   * Intermediate output messages collected during command execution.\r\n   * Used by command providers to capture output for the response.\r\n   */\r\n  messages?: string[];\r\n}\r\n\r\n/**\r\n * Factory to create ToolCommandContext from various sources.\r\n */\r\nexport class ToolCommandContextFactory {\r\n  /**\r\n   * Create a minimal context for commands that don't need a project.\r\n   */\r\n  static createMinimal(creatorTools: CreatorTools, output: IToolCommandOutput): IToolCommandContext {\r\n    return {\r\n      creatorTools,\r\n      output,\r\n      scope: \"ui\",\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create a context with a project.\r\n   */\r\n  static createWithProject(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    output: IToolCommandOutput\r\n  ): IToolCommandContext {\r\n    return {\r\n      creatorTools,\r\n      project,\r\n      output,\r\n      scope: \"ui\",\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create a context for serve mode with Minecraft connection.\r\n   */\r\n  static createServeContext(\r\n    creatorTools: CreatorTools,\r\n    project: Project | undefined,\r\n    minecraft: IMinecraft | undefined,\r\n    output: IToolCommandOutput\r\n  ): IToolCommandContext {\r\n    return {\r\n      creatorTools,\r\n      project,\r\n      minecraft,\r\n      output,\r\n      scope: \"serveTerminal\",\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create a context for MCP or HTTP API with session support.\r\n   */\r\n  static createSessionContext(\r\n    creatorTools: CreatorTools,\r\n    session: IToolCommandSession,\r\n    minecraft: IMinecraft | undefined,\r\n    output: IToolCommandOutput,\r\n    scope: \"mcp\" | \"serverApi\"\r\n  ): IToolCommandContext {\r\n    return {\r\n      creatorTools,\r\n      session,\r\n      minecraft,\r\n      output,\r\n      scope,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create a context with a ServerManager for BDS lifecycle operations.\r\n   * Used when the caller has a ServerManager (e.g., Electron app, serve mode, tests).\r\n   */\r\n  static createWithServer(\r\n    creatorTools: CreatorTools,\r\n    serverManager: ServerManager,\r\n    output: IToolCommandOutput,\r\n    scope: \"ui\" | \"serveTerminal\" | \"mcp\" | \"serverApi\" | \"cli\" = \"ui\",\r\n    options?: {\r\n      project?: Project;\r\n      sessionName?: string;\r\n      slot?: number;\r\n    }\r\n  ): IToolCommandContext {\r\n    return {\r\n      creatorTools,\r\n      project: options?.project,\r\n      session: {\r\n        sessionName: options?.sessionName || \"default\",\r\n        serverManager,\r\n        slot: options?.slot ?? 0,\r\n      },\r\n      output,\r\n      scope,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create a console-based output writer for terminal use.\r\n   */\r\n  static createConsoleOutput(): IToolCommandOutput {\r\n    return {\r\n      info: (msg) => Log.message(msg),\r\n      success: (msg) => Log.message(`\u2713 ${msg}`),\r\n      warn: (msg) => Log.debug(`\u26A0 ${msg}`),\r\n      error: (msg) => Log.error(msg),\r\n      debug: (msg) => Log.verbose(`  ${msg}`),\r\n      progress: (current, total, msg) => {\r\n        const pct = Math.round((current / total) * 100);\r\n        Log.message(`[${pct}%] ${msg || \"\"}`);\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ToolCommandParser - Parse and tokenize ToolCommand strings\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * Handles parsing of command strings in the format:\r\n *   /commandName arg1 arg2 --flag value --boolFlag\r\n *\r\n * PARSING RULES:\r\n * 1. Commands start with / (optional, stripped during parsing)\r\n * 2. Positional arguments are space-separated\r\n * 3. Flags start with -- or - (for short names)\r\n * 4. Boolean flags have no value\r\n * 5. String array flags use comma-separated values\r\n * 6. Quoted strings preserve spaces\r\n *\r\n * AUTOCOMPLETE:\r\n * The parser provides completion suggestions based on:\r\n * - Cursor position in the input\r\n * - Available commands in the registry\r\n * - Argument autocomplete providers\r\n * - Flag names and values\r\n */\r\n\r\nimport type { IToolCommand } from \"./IToolCommand\";\r\nimport { type ToolCommandScope } from \"./IToolCommand\";\r\nimport type { IToolCommandContext } from \"./IToolCommandContext\";\r\n\r\n/**\r\n * Result of parsing a command string.\r\n */\r\nexport interface ParsedToolCommand {\r\n  /** The command name (without leading /) */\r\n  commandName: string;\r\n\r\n  /** Positional arguments */\r\n  args: string[];\r\n\r\n  /** Flag values keyed by flag name (without --) */\r\n  flags: Record<string, string | boolean | string[]>;\r\n\r\n  /** The original input text */\r\n  originalText: string;\r\n}\r\n\r\n/**\r\n * Token from command parsing.\r\n */\r\ninterface CommandToken {\r\n  type: \"command\" | \"arg\" | \"flag\" | \"flagValue\";\r\n  value: string;\r\n  start: number;\r\n  end: number;\r\n}\r\n\r\n/**\r\n * Parser for ToolCommand strings.\r\n */\r\nexport class ToolCommandParser {\r\n  /**\r\n   * Parse a command string into structured parts.\r\n   * @param text The command string to parse\r\n   * @returns Parsed command, or undefined if invalid\r\n   */\r\n  static parse(text: string): ParsedToolCommand | undefined {\r\n    const trimmed = text.trim();\r\n    if (!trimmed) return undefined;\r\n\r\n    // Remove leading / if present\r\n    const commandText = trimmed.startsWith(\"/\") ? trimmed.slice(1) : trimmed;\r\n    if (!commandText) return undefined;\r\n\r\n    const tokens = this.tokenize(commandText);\r\n    if (tokens.length === 0) return undefined;\r\n\r\n    const commandName = tokens[0].value;\r\n    const args: string[] = [];\r\n    const flags: Record<string, string | boolean | string[]> = {};\r\n\r\n    let i = 1;\r\n    while (i < tokens.length) {\r\n      const token = tokens[i];\r\n\r\n      if (token.type === \"flag\") {\r\n        const flagName = token.value.replace(/^-+/, \"\");\r\n\r\n        // Check if next token is a value or another flag\r\n        if (i + 1 < tokens.length && tokens[i + 1].type === \"flagValue\") {\r\n          const valueToken = tokens[i + 1];\r\n          // Check for comma-separated values\r\n          if (valueToken.value.includes(\",\")) {\r\n            flags[flagName] = valueToken.value.split(\",\").map((v) => v.trim());\r\n          } else {\r\n            flags[flagName] = valueToken.value;\r\n          }\r\n          i += 2;\r\n        } else {\r\n          // Boolean flag\r\n          flags[flagName] = true;\r\n          i++;\r\n        }\r\n      } else if (token.type === \"arg\") {\r\n        args.push(token.value);\r\n        i++;\r\n      } else {\r\n        i++;\r\n      }\r\n    }\r\n\r\n    return {\r\n      commandName,\r\n      args,\r\n      flags,\r\n      originalText: text,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Tokenize a command string.\r\n   */\r\n  private static tokenize(text: string): CommandToken[] {\r\n    const tokens: CommandToken[] = [];\r\n    let i = 0;\r\n    let isFirstToken = true;\r\n    let expectingFlagValue = false;\r\n\r\n    while (i < text.length) {\r\n      // Skip whitespace\r\n      while (i < text.length && /\\s/.test(text[i])) {\r\n        i++;\r\n      }\r\n      if (i >= text.length) break;\r\n\r\n      const start = i;\r\n\r\n      // Check for quoted string\r\n      if (text[i] === '\"' || text[i] === \"'\") {\r\n        const quote = text[i];\r\n        i++;\r\n        while (i < text.length && text[i] !== quote) {\r\n          if (text[i] === \"\\\\\" && i + 1 < text.length) {\r\n            i += 2;\r\n          } else {\r\n            i++;\r\n          }\r\n        }\r\n        if (i < text.length) i++; // Skip closing quote\r\n\r\n        const value = text.slice(start + 1, i - 1).replace(/\\\\(.)/g, \"$1\");\r\n        tokens.push({\r\n          type: expectingFlagValue ? \"flagValue\" : isFirstToken ? \"command\" : \"arg\",\r\n          value,\r\n          start,\r\n          end: i,\r\n        });\r\n        expectingFlagValue = false;\r\n        isFirstToken = false;\r\n        continue;\r\n      }\r\n\r\n      // Check for flag\r\n      if (text[i] === \"-\") {\r\n        let flagEnd = i;\r\n        // Skip -- or -\r\n        while (flagEnd < text.length && text[flagEnd] === \"-\") {\r\n          flagEnd++;\r\n        }\r\n        // Read flag name\r\n        while (flagEnd < text.length && /[a-zA-Z0-9_-]/.test(text[flagEnd])) {\r\n          flagEnd++;\r\n        }\r\n\r\n        tokens.push({\r\n          type: \"flag\",\r\n          value: text.slice(i, flagEnd),\r\n          start,\r\n          end: flagEnd,\r\n        });\r\n        i = flagEnd;\r\n        expectingFlagValue = true;\r\n        isFirstToken = false;\r\n        continue;\r\n      }\r\n\r\n      // Regular token (command name, arg, or flag value)\r\n      while (i < text.length && !/\\s/.test(text[i])) {\r\n        i++;\r\n      }\r\n\r\n      const value = text.slice(start, i);\r\n      tokens.push({\r\n        type: expectingFlagValue ? \"flagValue\" : isFirstToken ? \"command\" : \"arg\",\r\n        value,\r\n        start,\r\n        end: i,\r\n      });\r\n      expectingFlagValue = false;\r\n      isFirstToken = false;\r\n    }\r\n\r\n    return tokens;\r\n  }\r\n\r\n  /**\r\n   * Get autocomplete suggestions for a partial command.\r\n   * @param text The partial command text\r\n   * @param cursorPos Cursor position in the text\r\n   * @param registry The command registry to search\r\n   * @param context Execution context\r\n   */\r\n  static async getCompletions(\r\n    text: string,\r\n    cursorPos: number,\r\n    registry: {\r\n      get: (name: string) => IToolCommand | undefined;\r\n      getCommandNames: (scope?: ToolCommandScope) => string[];\r\n      getAll: (scope?: ToolCommandScope) => IToolCommand[];\r\n    },\r\n    context: IToolCommandContext\r\n  ): Promise<string[]> {\r\n    const beforeCursor = text.slice(0, cursorPos);\r\n    const trimmed = beforeCursor.trim();\r\n\r\n    // Get available command names, filtering by scope and project availability\r\n    const getAvailableNames = (): string[] => {\r\n      const scope = context.scope as ToolCommandScope | undefined;\r\n      const all = registry.getAll(scope);\r\n      return all\r\n        .filter((c) => !c.metadata.requiresProject || context.project)\r\n        .map((c) => c.metadata.name);\r\n    };\r\n\r\n    // Handle empty or just /\r\n    if (!trimmed || trimmed === \"/\") {\r\n      return getAvailableNames().map((n) => \"/\" + n);\r\n    }\r\n\r\n    // Remove leading /\r\n    const commandText = trimmed.startsWith(\"/\") ? trimmed.slice(1) : trimmed;\r\n    const tokens = this.tokenize(commandText);\r\n\r\n    if (tokens.length === 0) {\r\n      return getAvailableNames().map((n) => \"/\" + n);\r\n    }\r\n\r\n    // Get current token at cursor\r\n    const lastToken = tokens[tokens.length - 1];\r\n    const isCompletingLastToken = cursorPos >= (trimmed.startsWith(\"/\") ? 1 : 0) + lastToken.start;\r\n\r\n    // If ending with a space, we're completing a new token (not the last one)\r\n    const isNewToken = beforeCursor.endsWith(\" \");\r\n\r\n    // If completing the command name (only one token AND not followed by a space)\r\n    if (tokens.length === 1 && isCompletingLastToken && !isNewToken) {\r\n      const partial = lastToken.value.toLowerCase();\r\n      return getAvailableNames()\r\n        .filter((n) => n.toLowerCase().startsWith(partial))\r\n        .map((n) => \"/\" + n);\r\n    }\r\n\r\n    // Get the command\r\n    const command = registry.get(tokens[0].value);\r\n    if (!command) {\r\n      return [];\r\n    }\r\n\r\n    // If completing a flag name\r\n    if (lastToken.type === \"flag\" && isCompletingLastToken && !isNewToken) {\r\n      const flagDefs = command.metadata.flags || [];\r\n      const partial = lastToken.value.replace(/^-+/, \"\").toLowerCase();\r\n      return flagDefs.filter((f) => f.name.toLowerCase().startsWith(partial)).map((f) => \"--\" + f.name);\r\n    }\r\n\r\n    // If we just typed a flag, suggest its values\r\n    if (lastToken.type === \"flag\" && isNewToken) {\r\n      const flagName = lastToken.value.replace(/^-+/, \"\");\r\n      const flagDef = command.metadata.flags?.find(\r\n        (f) => f.name.toLowerCase() === flagName.toLowerCase() || f.shortName === flagName\r\n      );\r\n      if (flagDef) {\r\n        if (flagDef.choices) {\r\n          return flagDef.choices;\r\n        }\r\n        if (flagDef.autocompleteProvider) {\r\n          return flagDef.autocompleteProvider(\"\", context);\r\n        }\r\n      }\r\n      return [];\r\n    }\r\n\r\n    // If completing a flag value\r\n    if (lastToken.type === \"flagValue\" && isCompletingLastToken) {\r\n      // Find the flag this value belongs to\r\n      const flagToken = tokens[tokens.length - 2];\r\n      if (flagToken?.type === \"flag\") {\r\n        const flagName = flagToken.value.replace(/^-+/, \"\");\r\n        const flagDef = command.metadata.flags?.find(\r\n          (f) => f.name.toLowerCase() === flagName.toLowerCase() || f.shortName === flagName\r\n        );\r\n        if (flagDef) {\r\n          if (flagDef.choices) {\r\n            return flagDef.choices.filter((c) => c.toLowerCase().startsWith(lastToken.value.toLowerCase()));\r\n          }\r\n          if (flagDef.autocompleteProvider) {\r\n            return flagDef.autocompleteProvider(lastToken.value, context);\r\n          }\r\n        }\r\n      }\r\n      return [];\r\n    }\r\n\r\n    // Completing a positional argument\r\n    const argTokens = tokens.filter((t) => t.type === \"arg\");\r\n    const argIndex = isNewToken ? argTokens.length : argTokens.length - 1;\r\n    const partial = isNewToken ? \"\" : lastToken.value;\r\n\r\n    // Use command's getCompletions if available\r\n    if (command.getCompletions) {\r\n      const argValues = argTokens.map((t) => t.value);\r\n      const completions = await command.getCompletions(context, argValues, partial, argIndex);\r\n      if (completions.length > 0) {\r\n        return completions;\r\n      }\r\n      // Fall through to argument metadata for hints\r\n    }\r\n\r\n    // Fall back to argument metadata\r\n    const argDef = command.metadata.arguments?.[argIndex];\r\n    if (argDef) {\r\n      if (argDef.choices) {\r\n        return argDef.choices.filter((c) => c.toLowerCase().startsWith(partial.toLowerCase()));\r\n      }\r\n      if (argDef.autocompleteProvider) {\r\n        return argDef.autocompleteProvider(partial, context);\r\n      }\r\n      // No specific completions \u2014 return a usage hint so the UI can show what's expected\r\n      if (!partial) {\r\n        return [`<${argDef.name}>`];\r\n      }\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  /**\r\n   * Format a command with arguments for display/execution.\r\n   */\r\n  static format(commandName: string, args: string[], flags: Record<string, string | boolean | string[]>): string {\r\n    const parts = [\"/\" + commandName];\r\n\r\n    for (const arg of args) {\r\n      parts.push(arg.includes(\" \") ? `\"${arg}\"` : arg);\r\n    }\r\n\r\n    for (const [key, value] of Object.entries(flags)) {\r\n      if (value === true) {\r\n        parts.push(`--${key}`);\r\n      } else if (Array.isArray(value)) {\r\n        parts.push(`--${key}`, value.join(\",\"));\r\n      } else if (value !== false) {\r\n        parts.push(`--${key}`, value.includes(\" \") ? `\"${value}\"` : value);\r\n      }\r\n    }\r\n\r\n    return parts.join(\" \");\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ToolCommandRegistry - Central registry for all ToolCommands\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * This registry is the central hub for ToolCommand management:\r\n *\r\n * RESPONSIBILITIES:\r\n * 1. Hold all registered IToolCommand instances\r\n * 2. Provide lookup by command name or alias\r\n * 3. Execute commands with parsed arguments\r\n * 4. Provide autocomplete suggestions\r\n * 5. Filter commands by scope\r\n * 6. Generate help documentation\r\n *\r\n * SINGLETON PATTERN:\r\n * Use ToolCommandRegistry.instance to access the global registry.\r\n * Commands are registered at module load time.\r\n *\r\n * RELATED FILES:\r\n * - IToolCommand.ts: Command interface\r\n * - IToolCommandContext.ts: Execution context\r\n * - ToolCommandParser.ts: Command line parsing\r\n * - commands/: Individual command implementations\r\n */\r\n\r\nimport type { IToolCommand, IToolCommandResult } from \"./IToolCommand\";\r\nimport { ToolCommandScope } from \"./IToolCommand\";\r\nimport type { IToolCommandContext } from \"./IToolCommandContext\";\r\nimport { ToolCommandParser } from \"./ToolCommandParser\";\r\n\r\n/**\r\n * Central registry for ToolCommands.\r\n */\r\nexport class ToolCommandRegistry {\r\n  private static _instance: ToolCommandRegistry | undefined;\r\n\r\n  private commands: Map<string, IToolCommand> = new Map();\r\n\r\n  /**\r\n   * Get the singleton instance.\r\n   */\r\n  static get instance(): ToolCommandRegistry {\r\n    if (!this._instance) {\r\n      this._instance = new ToolCommandRegistry();\r\n    }\r\n    return this._instance;\r\n  }\r\n\r\n  /**\r\n   * Register a ToolCommand.\r\n   * @param command The command to register\r\n   */\r\n  register(command: IToolCommand): void {\r\n    const { name, aliases } = command.metadata;\r\n\r\n    // Register by name (lowercase for case-insensitive lookup)\r\n    const lowerName = name.toLowerCase();\r\n    if (this.commands.has(lowerName)) {\r\n      throw new Error(`ToolCommand '${name}' is already registered`);\r\n    }\r\n    this.commands.set(lowerName, command);\r\n\r\n    // Register aliases\r\n    if (aliases) {\r\n      for (const alias of aliases) {\r\n        const lowerAlias = alias.toLowerCase();\r\n        if (this.commands.has(lowerAlias)) {\r\n          throw new Error(`ToolCommand alias '${alias}' conflicts with existing command`);\r\n        }\r\n        this.commands.set(lowerAlias, command);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Register multiple commands.\r\n   */\r\n  registerAll(commands: IToolCommand[]): void {\r\n    for (let i = 0; i < commands.length; i++) {\r\n      const command = commands[i];\r\n      if (!command) {\r\n        throw new Error(`ToolCommand at index ${i} is undefined or null (out of ${commands.length} commands)`);\r\n      }\r\n      this.register(command);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get a command by name or alias.\r\n   * @param name Command name or alias (case-insensitive)\r\n   */\r\n  get(name: string): IToolCommand | undefined {\r\n    return this.commands.get(name.toLowerCase());\r\n  }\r\n\r\n  /**\r\n   * Check if a command exists.\r\n   */\r\n  has(name: string): boolean {\r\n    return this.commands.has(name.toLowerCase());\r\n  }\r\n\r\n  /**\r\n   * Get all unique commands (excluding alias duplicates).\r\n   * Optionally filter by scope.\r\n   */\r\n  getAll(scope?: ToolCommandScope): IToolCommand[] {\r\n    const seen = new Set<IToolCommand>();\r\n    const result: IToolCommand[] = [];\r\n\r\n    for (const command of this.commands.values()) {\r\n      if (seen.has(command)) continue;\r\n      seen.add(command);\r\n\r\n      // Filter by scope if specified\r\n      if (scope) {\r\n        const scopes = command.metadata.scopes;\r\n        // If no scopes defined, command is available everywhere\r\n        if (scopes && !scopes.includes(scope)) {\r\n          continue;\r\n        }\r\n      }\r\n\r\n      result.push(command);\r\n    }\r\n\r\n    // Sort by category then name\r\n    result.sort((a, b) => {\r\n      const catCmp = a.metadata.category.localeCompare(b.metadata.category);\r\n      if (catCmp !== 0) return catCmp;\r\n      return a.metadata.name.localeCompare(b.metadata.name);\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Get all command names (for autocomplete).\r\n   */\r\n  getCommandNames(scope?: ToolCommandScope): string[] {\r\n    return this.getAll(scope).map((c) => c.metadata.name);\r\n  }\r\n\r\n  /**\r\n   * Execute a command from a command string.\r\n   * @param commandText Full command text (e.g., \"/create template myproject --traits mob\")\r\n   * @param context Execution context\r\n   * @returns Command result, or undefined if command not found\r\n   */\r\n  async execute(commandText: string, context: IToolCommandContext): Promise<IToolCommandResult | undefined> {\r\n    const parsed = ToolCommandParser.parse(commandText);\r\n\r\n    if (!parsed) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.executeCommand(parsed.commandName, parsed.args, parsed.flags, context);\r\n  }\r\n\r\n  /**\r\n   * Execute a command with pre-parsed arguments.\r\n   */\r\n  async executeCommand(\r\n    name: string,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>,\r\n    context: IToolCommandContext\r\n  ): Promise<IToolCommandResult | undefined> {\r\n    const command = this.get(name);\r\n\r\n    if (!command) {\r\n      return undefined;\r\n    }\r\n\r\n    // Check scope restrictions\r\n    const scopes = command.metadata.scopes;\r\n    if (scopes && !scopes.includes(context.scope as ToolCommandScope)) {\r\n      return {\r\n        success: false,\r\n        error: {\r\n          code: \"SCOPE_RESTRICTED\",\r\n          message: `Command '${name}' is not available in ${context.scope} context`,\r\n        },\r\n      };\r\n    }\r\n\r\n    // Check project requirement\r\n    if (command.metadata.requiresProject && !context.project) {\r\n      return {\r\n        success: false,\r\n        error: {\r\n          code: \"PROJECT_REQUIRED\",\r\n          message: `Command '${name}' requires an active project`,\r\n        },\r\n      };\r\n    }\r\n\r\n    // Check Minecraft requirement\r\n    if (command.metadata.requiresMinecraft && !context.minecraft) {\r\n      return {\r\n        success: false,\r\n        error: {\r\n          code: \"MINECRAFT_REQUIRED\",\r\n          message: `Command '${name}' requires an active Minecraft server connection`,\r\n        },\r\n      };\r\n    }\r\n\r\n    try {\r\n      return await command.execute(context, args, flags);\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return {\r\n        success: false,\r\n        error: {\r\n          code: \"EXECUTION_ERROR\",\r\n          message: `Error executing '${name}': ${message}`,\r\n        },\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get autocomplete suggestions for a partial command.\r\n   * @param text The partial command text being typed\r\n   * @param cursorPos The cursor position in the text\r\n   * @param context Execution context\r\n   */\r\n  async getCompletions(text: string, cursorPos: number, context: IToolCommandContext): Promise<string[]> {\r\n    return ToolCommandParser.getCompletions(text, cursorPos, this, context);\r\n  }\r\n\r\n  /**\r\n   * Clear all registered commands (for testing).\r\n   */\r\n  clear(): void {\r\n    this.commands.clear();\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport ILocalizable from \"../core/ILocalizable\";\r\n\r\nexport enum GalleryItemType {\r\n  project = 0,\r\n  chunk = 1,\r\n  blockType = 2,\r\n  codeSample = 3,\r\n  entityType = 4,\r\n  editorCodeSample = 5,\r\n  editorProject = 6,\r\n  itemType = 7,\r\n  actionSet = 8,\r\n  modelDesign = 9, // Model design template (IMcpModelDesign JSON)\r\n  spawnLootRecipes = 21,\r\n  worldGen = 22,\r\n  visuals = 23,\r\n  entityItemBlockSingleFiles = 41,\r\n  worldGenSingleFiles = 42,\r\n  visualSingleFiles = 43,\r\n  catalogSingleFiles = 44,\r\n}\r\n\r\nexport interface LogoLocation {\r\n  x: number;\r\n  y: number;\r\n  width: number;\r\n  height: number;\r\n  imageHeight: number;\r\n  imageWidth: number;\r\n}\r\n\r\nexport default interface IGalleryItem extends ILocalizable {\r\n  gitHubOwner: string;\r\n  gitHubRepoName: string;\r\n  gitHubFolder?: string;\r\n  gitHubBranch?: string;\r\n  thumbnailImage: string;\r\n  logoImage?: string;\r\n  localLogo?: string;\r\n  snapshotImage?: string;\r\n  sampleSet?: string;\r\n  topics?: string[];\r\n  logoLocation?: LogoLocation;\r\n  title: string;\r\n  targetType?: ProjectItemType;\r\n  description: string;\r\n  targetRuntimeIdentifier?: string;\r\n  containsStructures?: boolean;\r\n  containsGameTests?: boolean;\r\n  itemImages?: string[];\r\n  creationData?: object | any;\r\n  codeLineStart?: number;\r\n  fileList?: string[];\r\n  tags?: string[];\r\n  type: GalleryItemType;\r\n  nameReplacers?: string[];\r\n  id: string;\r\n  /** Difficulty level shown as a badge on template cards. */\r\n  difficulty?: \"beginner\" | \"intermediate\" | \"advanced\";\r\n  /** When true, this gallery item was synthesized from an existing ProjectItem, not from a gallery catalog. */\r\n  isProjectItem?: boolean;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * AutocompleteProviders - Built-in autocomplete providers for ToolCommands\r\n *\r\n * These providers supply suggestions for command arguments and flags.\r\n * They query CreatorTools, Project, and content wizard data to provide\r\n * context-aware completions.\r\n */\r\n\r\nimport type { AutocompleteProvider } from \"./IToolCommandArgument\";\r\nimport type { IToolCommandContext } from \"./IToolCommandContext\";\r\nimport { GalleryItemType } from \"../IGalleryItem\";\r\n\r\n// ============================================================================\r\n// TRAIT DEFINITIONS (from ContentWizard)\r\n// ============================================================================\r\n// MAINTENANCE: These trait lists are manually maintained and must be updated\r\n// when new traits are added to the ContentWizard / ContentIndexManager system.\r\n// Cross-reference with ContentWizard trait definitions to keep in sync.\r\n// ============================================================================\r\n\r\n/**\r\n * Entity traits available in the content wizard.\r\n */\r\nexport const ENTITY_TRAITS = [\r\n  \"humanoid\",\r\n  \"quadruped\",\r\n  \"flying\",\r\n  \"aquatic\",\r\n  \"hostile\",\r\n  \"passive\",\r\n  \"neutral\",\r\n  \"melee_attacker\",\r\n  \"ranged_attacker\",\r\n  \"exploder\",\r\n  \"tameable\",\r\n  \"rideable\",\r\n  \"breedable\",\r\n  \"undead\",\r\n  \"wanders\",\r\n  \"teleporter\",\r\n];\r\n\r\n/**\r\n * Block traits available in the content wizard.\r\n */\r\nexport const BLOCK_TRAITS = [\r\n  \"solid\",\r\n  \"transparent\",\r\n  \"slab\",\r\n  \"stairs\",\r\n  \"fence\",\r\n  \"door\",\r\n  \"container\",\r\n  \"light_source\",\r\n  \"gravity\",\r\n  \"redstone_signal\",\r\n];\r\n\r\n/**\r\n * Item traits available in the content wizard.\r\n */\r\nexport const ITEM_TRAITS = [\r\n  \"sword\",\r\n  \"pickaxe\",\r\n  \"axe\",\r\n  \"shovel\",\r\n  \"food\",\r\n  \"armor_helmet\",\r\n  \"armor_chestplate\",\r\n  \"armor_leggings\",\r\n  \"armor_boots\",\r\n  \"throwable\",\r\n];\r\n\r\n/**\r\n * All traits combined for general trait completion.\r\n */\r\nexport const ALL_TRAITS = [...ENTITY_TRAITS, ...BLOCK_TRAITS, ...ITEM_TRAITS];\r\n\r\n// ============================================================================\r\n// CONTENT TYPE NAMES\r\n// ============================================================================\r\n// MAINTENANCE: This list must be updated when new content types are added.\r\n// Cross-reference with GalleryItemType enum and CONTENT_TYPE_TO_GALLERY mapping.\r\n// ============================================================================\r\n\r\n/**\r\n * Content types that can be added via the /add command.\r\n */\r\nexport const CONTENT_TYPES = [\r\n  \"entity\",\r\n  \"block\",\r\n  \"item\",\r\n  \"script\",\r\n  \"function\",\r\n  \"spawn_rule\",\r\n  \"loot_table\",\r\n  \"trade_table\",\r\n  \"recipe\",\r\n  \"biome\",\r\n  \"feature\",\r\n  \"feature_rule\",\r\n  \"structure\",\r\n  \"animation\",\r\n  \"animation_controller\",\r\n  \"render_controller\",\r\n  \"model\",\r\n  \"texture\",\r\n  \"particle\",\r\n  \"fog\",\r\n  \"sound\",\r\n];\r\n\r\n/**\r\n * Map content type names to GalleryItemType for lookup.\r\n */\r\nexport const CONTENT_TYPE_TO_GALLERY: Record<string, GalleryItemType> = {\r\n  entity: GalleryItemType.entityType,\r\n  block: GalleryItemType.blockType,\r\n  item: GalleryItemType.itemType,\r\n  script: GalleryItemType.codeSample,\r\n  spawn_rule: GalleryItemType.spawnLootRecipes,\r\n  loot_table: GalleryItemType.spawnLootRecipes,\r\n  trade_table: GalleryItemType.spawnLootRecipes,\r\n  recipe: GalleryItemType.spawnLootRecipes,\r\n  biome: GalleryItemType.worldGen,\r\n  feature: GalleryItemType.worldGen,\r\n  feature_rule: GalleryItemType.worldGen,\r\n  structure: GalleryItemType.chunk,\r\n  animation: GalleryItemType.visuals,\r\n  animation_controller: GalleryItemType.visuals,\r\n  render_controller: GalleryItemType.visuals,\r\n  model: GalleryItemType.visuals,\r\n  texture: GalleryItemType.visuals,\r\n  particle: GalleryItemType.visuals,\r\n  fog: GalleryItemType.visuals,\r\n  sound: GalleryItemType.visuals,\r\n};\r\n\r\n// ============================================================================\r\n// PROJECT TEMPLATE NAMES\r\n// ============================================================================\r\n\r\n/**\r\n * Common project template identifiers.\r\n */\r\nexport const PROJECT_TEMPLATES = [\r\n  \"addonstarter\",\r\n  \"tsstarter\",\r\n  \"addonfull\",\r\n  \"scriptbox\",\r\n  \"dlstarter\",\r\n  \"editorscriptbox\",\r\n  \"editorbasics\",\r\n];\r\n\r\n// ============================================================================\r\n// AUTOCOMPLETE PROVIDER IMPLEMENTATIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Provides autocomplete for content type names (entity, block, item, etc.)\r\n */\r\nexport const contentTypeProvider: AutocompleteProvider = (partial: string, _context: IToolCommandContext) => {\r\n  const lower = partial.toLowerCase();\r\n  return CONTENT_TYPES.filter((t) => t.startsWith(lower));\r\n};\r\n\r\n/**\r\n * Provides autocomplete for traits based on the content type being created.\r\n * @param contentType The type of content (entity, block, item)\r\n */\r\nexport function createTraitProvider(contentType?: string): AutocompleteProvider {\r\n  return (partial: string, _context: IToolCommandContext) => {\r\n    const lower = partial.toLowerCase();\r\n\r\n    let traits: string[];\r\n    switch (contentType?.toLowerCase()) {\r\n      case \"entity\":\r\n        traits = ENTITY_TRAITS;\r\n        break;\r\n      case \"block\":\r\n        traits = BLOCK_TRAITS;\r\n        break;\r\n      case \"item\":\r\n        traits = ITEM_TRAITS;\r\n        break;\r\n      default:\r\n        traits = ALL_TRAITS;\r\n    }\r\n\r\n    return traits.filter((t) => t.startsWith(lower));\r\n  };\r\n}\r\n\r\n/**\r\n * Provides autocomplete for all traits (entity, block, and item).\r\n */\r\nexport const allTraitsProvider: AutocompleteProvider = (partial: string, _context: IToolCommandContext) => {\r\n  const lower = partial.toLowerCase();\r\n  return ALL_TRAITS.filter((t) => t.startsWith(lower));\r\n};\r\n\r\n/**\r\n * Provides autocomplete for project templates.\r\n */\r\nexport const projectTemplateProvider: AutocompleteProvider = async (partial: string, context: IToolCommandContext) => {\r\n  const lower = partial.toLowerCase();\r\n\r\n  if (!context.creatorTools) {\r\n    return PROJECT_TEMPLATES.filter((t) => t.startsWith(lower));\r\n  }\r\n\r\n  // Try to get templates from gallery\r\n  await context.creatorTools.loadGallery();\r\n  const projects = context.creatorTools.getGalleryProjectByType(GalleryItemType.project) || [];\r\n  const editorProjects = context.creatorTools.getGalleryProjectByType(GalleryItemType.editorProject) || [];\r\n\r\n  const allProjects = [...projects, ...editorProjects];\r\n\r\n  if (allProjects.length > 0) {\r\n    return allProjects.map((p) => p.id).filter((id) => id.toLowerCase().startsWith(lower));\r\n  }\r\n\r\n  // Fall back to static list\r\n  return PROJECT_TEMPLATES.filter((t) => t.startsWith(lower));\r\n};\r\n\r\n/**\r\n * Provides autocomplete for gallery items of a specific type.\r\n * @param itemType The gallery item type to filter by\r\n */\r\nexport function createGalleryItemProvider(itemType?: GalleryItemType): AutocompleteProvider {\r\n  return async (partial: string, context: IToolCommandContext) => {\r\n    const lower = partial.toLowerCase();\r\n\r\n    if (!context.creatorTools) {\r\n      return [];\r\n    }\r\n\r\n    await context.creatorTools.loadGallery();\r\n\r\n    let items;\r\n    if (itemType !== undefined) {\r\n      items = context.creatorTools.getGalleryProjectByType(itemType) || [];\r\n    } else {\r\n      // Return all gallery items\r\n      const gallery = context.creatorTools.gallery;\r\n      items = gallery?.items || [];\r\n    }\r\n\r\n    return items.map((item) => item.id).filter((id) => id.toLowerCase().startsWith(lower));\r\n  };\r\n}\r\n\r\n/**\r\n * Provides autocomplete for project items (files in the current project).\r\n */\r\n/**\r\n * Paths excluded from remove autocomplete to prevent accidental deletion of\r\n * config files, dotfiles, and other non-content project infrastructure.\r\n */\r\nconst REMOVE_EXCLUDED_PATTERNS = [\r\n  /(?:^|\\/)\\./, // dotfiles and dot-directories (e.g., .vscode/, .env)\r\n  /(?:^|\\/)package\\.json$/i,\r\n  /(?:^|\\/)package-lock\\.json$/i,\r\n  /(?:^|\\/)tsconfig\\.json$/i,\r\n  /\\.config\\./i, // e.g., vite.config.ts, jest.config.js\r\n  /(?:^|\\/)\\.env/i, // .env, .env.local, etc.\r\n];\r\n\r\nfunction isExcludedFromRemove(path: string): boolean {\r\n  return REMOVE_EXCLUDED_PATTERNS.some((pattern) => pattern.test(path));\r\n}\r\n\r\nexport const projectItemProvider: AutocompleteProvider = (partial: string, context: IToolCommandContext) => {\r\n  if (!context.project) {\r\n    return [];\r\n  }\r\n\r\n  const lower = partial.toLowerCase();\r\n  const items = context.project.items || [];\r\n\r\n  return items\r\n    .filter((item) => item.projectPath)\r\n    .map((item) => item.projectPath!)\r\n    .filter((path) => path.toLowerCase().includes(lower) && !isExcludedFromRemove(path));\r\n};\r\n\r\n/**\r\n * Provides autocomplete for project item names (display names).\r\n */\r\nexport const projectItemNameProvider: AutocompleteProvider = (partial: string, context: IToolCommandContext) => {\r\n  if (!context.project) {\r\n    return [];\r\n  }\r\n\r\n  const lower = partial.toLowerCase();\r\n  const items = context.project.items || [];\r\n\r\n  return items\r\n    .filter((item) => item.name)\r\n    .map((item) => item.name)\r\n    .filter((name) => name.toLowerCase().includes(lower));\r\n};\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * HelpCommand - Unified help for ToolCommands and Bedrock commands\r\n *\r\n * This is the ONE command that overrides Bedrock's built-in /help.\r\n * It provides unified documentation for both MCT ToolCommands and\r\n * Bedrock server commands.\r\n */\r\n\r\nimport type { IToolCommand, IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { ToolCommandRegistry } from \"../ToolCommandRegistry\";\r\n\r\n// Bedrock built-in commands for reference in help.\r\n// MAINTENANCE: This list is manually maintained and should be updated when\r\n// new slash commands are added to Minecraft Bedrock Edition.\r\n// Reference: https://learn.microsoft.com/en-us/minecraft/creator/commands/\r\nconst BEDROCK_COMMANDS = [\r\n  \"allowlist\",\r\n  \"alwaysday\",\r\n  \"camera\",\r\n  \"camerashake\",\r\n  \"clear\",\r\n  \"clearspawnpoint\",\r\n  \"clone\",\r\n  \"damage\",\r\n  \"daylock\",\r\n  \"deop\",\r\n  \"dialogue\",\r\n  \"difficulty\",\r\n  \"effect\",\r\n  \"enchant\",\r\n  \"event\",\r\n  \"execute\",\r\n  \"fill\",\r\n  \"fog\",\r\n  \"function\",\r\n  \"gamemode\",\r\n  \"gamerule\",\r\n  \"give\",\r\n  \"hud\",\r\n  \"inputpermission\",\r\n  \"kick\",\r\n  \"kill\",\r\n  \"list\",\r\n  \"locate\",\r\n  \"loot\",\r\n  \"me\",\r\n  \"mobevent\",\r\n  \"music\",\r\n  \"op\",\r\n  \"ops\",\r\n  \"particle\",\r\n  \"permission\",\r\n  \"place\",\r\n  \"playanimation\",\r\n  \"playsound\",\r\n  \"recipe\",\r\n  \"reload\",\r\n  \"replaceitem\",\r\n  \"ride\",\r\n  \"say\",\r\n  \"schedule\",\r\n  \"scoreboard\",\r\n  \"script\",\r\n  \"scriptevent\",\r\n  \"setblock\",\r\n  \"setmaxplayers\",\r\n  \"setworldspawn\",\r\n  \"spawnpoint\",\r\n  \"spreadplayers\",\r\n  \"stop\",\r\n  \"stopsound\",\r\n  \"structure\",\r\n  \"summon\",\r\n  \"tag\",\r\n  \"teleport\",\r\n  \"tell\",\r\n  \"tellraw\",\r\n  \"testfor\",\r\n  \"testforblock\",\r\n  \"testforblocks\",\r\n  \"tickingarea\",\r\n  \"time\",\r\n  \"title\",\r\n  \"titleraw\",\r\n  \"toggledownfall\",\r\n  \"tp\",\r\n  \"transfer\",\r\n  \"volumearea\",\r\n  \"weather\",\r\n  \"wsserver\",\r\n  \"xp\",\r\n];\r\n\r\nexport class HelpCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"help\",\r\n    description: \"Show help for ToolCommands and Bedrock server commands\",\r\n    aliases: [\"?\"],\r\n    category: \"General\",\r\n    arguments: [\r\n      {\r\n        name: \"command\",\r\n        description: \"Command name to get help for (optional)\",\r\n        type: \"string\",\r\n        required: false,\r\n      },\r\n    ],\r\n    examples: [\"/help\", \"/help create\", \"/help add\", \"/help summon\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const commandName = args[0];\r\n\r\n    if (commandName) {\r\n      return this.showCommandHelp(context, commandName);\r\n    }\r\n\r\n    return this.showAllHelp(context);\r\n  }\r\n\r\n  private showAllHelp(context: IToolCommandContext): IToolCommandResult {\r\n    const output = context.output;\r\n    const registry = ToolCommandRegistry.instance;\r\n\r\n    output.info(\"=== Minecraft Creator Tools Commands ===\");\r\n\r\n    // Group commands by category\r\n    const commands = registry.getAll();\r\n    const byCategory = new Map<string, IToolCommand[]>();\r\n\r\n    for (const cmd of commands) {\r\n      const category = cmd.metadata.category;\r\n      if (!byCategory.has(category)) {\r\n        byCategory.set(category, []);\r\n      }\r\n      byCategory.get(category)!.push(cmd);\r\n    }\r\n\r\n    // Output by category\r\n    for (const [category, cmds] of byCategory) {\r\n      output.info(`\\n${category}:`);\r\n      for (const cmd of cmds) {\r\n        const aliases = cmd.metadata.aliases ? ` (${cmd.metadata.aliases.join(\", \")})` : \"\";\r\n        output.info(`  /${cmd.metadata.name}${aliases} - ${cmd.metadata.description}`);\r\n      }\r\n    }\r\n\r\n    // Output Bedrock commands\r\n    output.info(\"\\n=== Bedrock Server Commands ===\\n\");\r\n    output.info(\"The following Minecraft commands are passed through to the server:\");\r\n    output.info(`  ${BEDROCK_COMMANDS.slice(0, 15).join(\", \")}, ...`);\r\n    output.info(\"  (Use /help <command> for details on specific Bedrock commands)\\n\");\r\n\r\n    output.info(\"Use /help <command> for detailed help on a specific command.\");\r\n\r\n    return this.success(\"Help displayed\");\r\n  }\r\n\r\n  private showCommandHelp(context: IToolCommandContext, commandName: string): IToolCommandResult {\r\n    const output = context.output;\r\n    const registry = ToolCommandRegistry.instance;\r\n\r\n    // Check if it's a ToolCommand\r\n    const command = registry.get(commandName);\r\n    if (command) {\r\n      return this.showToolCommandHelp(context, command);\r\n    }\r\n\r\n    // Check if it's a Bedrock command\r\n    if (BEDROCK_COMMANDS.includes(commandName.toLowerCase())) {\r\n      output.info(`/${commandName} is a Bedrock server command.`);\r\n      output.info(\"This command is passed through to the Minecraft server.\");\r\n      output.info(\"Run this command in-game or consult the Minecraft documentation for details.\");\r\n      return this.success(`Bedrock command: ${commandName}`);\r\n    }\r\n\r\n    return this.error(\"COMMAND_NOT_FOUND\", `Unknown command: ${commandName}`);\r\n  }\r\n\r\n  private showToolCommandHelp(context: IToolCommandContext, command: IToolCommand): IToolCommandResult {\r\n    const output = context.output;\r\n    const meta = command.metadata;\r\n\r\n    output.info(`=== /${meta.name} ===`);\r\n    output.info(meta.description);\r\n\r\n    if (meta.aliases && meta.aliases.length > 0) {\r\n      output.info(`\\nAliases: ${meta.aliases.map((a) => \"/\" + a).join(\", \")}`);\r\n    }\r\n\r\n    // Usage line\r\n    let usage = `/${meta.name}`;\r\n    if (meta.arguments) {\r\n      for (const arg of meta.arguments) {\r\n        usage += arg.required ? ` <${arg.name}>` : ` [${arg.name}]`;\r\n      }\r\n    }\r\n    if (meta.flags) {\r\n      for (const flag of meta.flags) {\r\n        const flagStr = flag.isBoolean ? `--${flag.name}` : `--${flag.name} <value>`;\r\n        usage += flag.required ? ` ${flagStr}` : ` [${flagStr}]`;\r\n      }\r\n    }\r\n    output.info(`\\nUsage: ${usage}`);\r\n\r\n    // Arguments\r\n    if (meta.arguments && meta.arguments.length > 0) {\r\n      output.info(\"\\nArguments:\");\r\n      for (const arg of meta.arguments) {\r\n        const required = arg.required ? \"(required)\" : \"(optional)\";\r\n        let line = `  ${arg.name} ${required} - ${arg.description}`;\r\n        if (arg.defaultValue) {\r\n          line += ` [default: ${arg.defaultValue}]`;\r\n        }\r\n        if (arg.choices) {\r\n          line += ` [choices: ${arg.choices.join(\", \")}]`;\r\n        }\r\n        output.info(line);\r\n      }\r\n    }\r\n\r\n    // Flags\r\n    if (meta.flags && meta.flags.length > 0) {\r\n      output.info(\"\\nFlags:\");\r\n      for (const flag of meta.flags) {\r\n        const shortName = flag.shortName ? `, -${flag.shortName}` : \"\";\r\n        let line = `  --${flag.name}${shortName} - ${flag.description}`;\r\n        if (flag.defaultValue !== undefined) {\r\n          line += ` [default: ${flag.defaultValue}]`;\r\n        }\r\n        if (flag.choices) {\r\n          line += ` [choices: ${flag.choices.join(\", \")}]`;\r\n        }\r\n        output.info(line);\r\n      }\r\n    }\r\n\r\n    // Examples\r\n    if (meta.examples && meta.examples.length > 0) {\r\n      output.info(\"\\nExamples:\");\r\n      for (const example of meta.examples) {\r\n        output.info(`  ${example}`);\r\n      }\r\n    }\r\n\r\n    // Requirements\r\n    const reqs: string[] = [];\r\n    if (meta.requiresProject) reqs.push(\"project\");\r\n    if (meta.requiresMinecraft) reqs.push(\"Minecraft server\");\r\n    if (reqs.length > 0) {\r\n      output.info(`\\nRequires: ${reqs.join(\", \")}`);\r\n    }\r\n\r\n    return this.success(`Help for ${meta.name}`);\r\n  }\r\n\r\n  /**\r\n   * Override getCompletions to provide command name suggestions.\r\n   */\r\n  async getCompletions(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    if (argIndex !== 0) return [];\r\n\r\n    const lower = partialArg.toLowerCase();\r\n    const registry = ToolCommandRegistry.instance;\r\n\r\n    // Combine ToolCommand names with Bedrock commands\r\n    const toolCommands = registry.getCommandNames();\r\n    const allCommands = [...toolCommands, ...BEDROCK_COMMANDS];\r\n\r\n    return allCommands.filter((name) => name.toLowerCase().startsWith(lower));\r\n  }\r\n}\r\n\r\nexport const helpCommand = new HelpCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport FileBase from \"../storage/FileBase\";\r\nimport GitHubFolder from \"./GitHubFolder\";\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport StorageUtilities, { EncodingType } from \"../storage/StorageUtilities\";\r\nimport GitHubStorage from \"./GitHubStorage\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport axios from \"axios\";\r\nimport Log from \"../core/Log\";\r\n\r\n// import { Endpoints } from '@octokit/types';\r\n// type getContentReposResponse = Endpoints[\"GET /repos/{owner}/{repo}/contents/{path}\"][\"response\"];\r\n\r\nexport default class GitHubFile extends FileBase implements IFile {\r\n  private _name: string;\r\n  private _parentFolder: GitHubFolder;\r\n\r\n  public sha: string | undefined;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get isContentLoaded() {\r\n    return this.lastLoadedOrSaved !== null;\r\n  }\r\n\r\n  get parentFolder(): GitHubFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._parentFolder.fullPath;\r\n\r\n    if (!path.endsWith(GitHubStorage.slashFolderDelimiter)) {\r\n      path += GitHubStorage.slashFolderDelimiter;\r\n    }\r\n\r\n    path += this._name;\r\n\r\n    return path;\r\n  }\r\n\r\n  constructor(parentFolder: GitHubFolder, folderName: string) {\r\n    super();\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = folderName;\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for GitHub storage\r\n  }\r\n\r\n  async loadContent(force?: boolean): Promise<Date> {\r\n    if (force || !this.lastLoadedOrSaved) {\r\n      this._content = null;\r\n\r\n      const storage = this._parentFolder.storage;\r\n\r\n      // on web sources, use GH APIs to retrieve content because that should work from a web/CORS/permissions perspective to retrieve binary files\r\n      // on non-web sources, just retrieve the binary directly from raw.githubusercontent.com\r\n      if (CreatorToolsHost.isWeb) {\r\n        const octo = storage.manager.octokit;\r\n\r\n        let fullPathMinusSlash = this.fullPath;\r\n\r\n        if (fullPathMinusSlash.startsWith(\"/\")) {\r\n          fullPathMinusSlash = fullPathMinusSlash.substring(1, fullPathMinusSlash.length);\r\n        }\r\n\r\n        let file = undefined;\r\n\r\n        try {\r\n          file = await octo.rest.repos.getContent({\r\n            owner: storage.ownerName,\r\n            repo: storage.repoName,\r\n            ref: storage.branch,\r\n            path: fullPathMinusSlash,\r\n          });\r\n        } catch (e: any) {\r\n          if (e.name && e.name === \"HttpError\" && e.message.indexOf(\"rate limit\") >= 0) {\r\n            throw new Error(e.message);\r\n          } else {\r\n            Log.debugAlert(\"Could not get content for GitHub file: '\" + e.toString() + \"'\");\r\n          }\r\n        }\r\n\r\n        if (file) {\r\n          const fileData = file.data as {\r\n            encoding?: string;\r\n            content?: string;\r\n          };\r\n\r\n          if (fileData.content !== undefined && fileData.encoding !== undefined) {\r\n            if (fileData.encoding === \"base64\") {\r\n              let contentA = fileData.content;\r\n\r\n              if (contentA && typeof contentA === \"string\") {\r\n                contentA = contentA.replace(/\\n/gi, \"\");\r\n              }\r\n\r\n              this._content = new Uint8Array(Utilities.base64ToArrayBuffer(contentA));\r\n\r\n              const preferredEncoding = StorageUtilities.getEncodingByFileName(this.name);\r\n\r\n              if (preferredEncoding === EncodingType.Utf8String) {\r\n                const result = Utilities.readStringUTF8(new DataView(this._content.buffer), 0, this._content.length);\r\n\r\n                this._content = result.str;\r\n              }\r\n            } else {\r\n              this._content = fileData.content;\r\n            }\r\n          }\r\n        }\r\n      } else {\r\n        this._content = null;\r\n\r\n        /*      if (this.fullPath.startsWith(\"/\")) {\r\n        path = this.fullPath.substring(1, this.fullPath.length);\r\n      }*/\r\n\r\n        const ghs = this._parentFolder.storage as GitHubStorage;\r\n        const path =\r\n          \"https://raw.githubusercontent.com/\" +\r\n          ghs.ownerName +\r\n          \"/\" +\r\n          ghs.repoName +\r\n          \"/\" +\r\n          (ghs.branch ? ghs.branch : \"main\") +\r\n          Utilities.ensureStartsWithSlash(this.fullPath);\r\n\r\n        if (StorageUtilities.getEncodingByFileName(this.name) === EncodingType.ByteBuffer) {\r\n          let response = undefined;\r\n\r\n          try {\r\n            response = await axios.get(path, {\r\n              responseType: \"arraybuffer\",\r\n              headers: {},\r\n            });\r\n          } catch (e: any) {\r\n            Log.error(\"Could not retrieve file '\" + this.fullPath + \"' from '\" + path + \"' - \" + e.toString());\r\n            this.lastLoadedOrSaved = new Date();\r\n            return this.lastLoadedOrSaved;\r\n          }\r\n\r\n          this._content = new Uint8Array(response.data);\r\n        } else {\r\n          let response = undefined;\r\n\r\n          try {\r\n            response = await axios.get(path, {\r\n              headers: {},\r\n            });\r\n          } catch (e: any) {\r\n            Log.error(\"Could not retrieve file '\" + this.fullPath + \"' - \" + e.toString(), path);\r\n\r\n            this.lastLoadedOrSaved = new Date();\r\n            return this.lastLoadedOrSaved;\r\n          }\r\n\r\n          let result = response.data;\r\n\r\n          if (typeof result === \"object\") {\r\n            try {\r\n              result = JSON.stringify(result, null, 2);\r\n            } catch (e) {\r\n              Log.fail(\"Could not convert file to JSON\");\r\n            }\r\n          }\r\n\r\n          if (response.status !== 200) {\r\n            Log.fail(\"Could not retrieve file from '\" + path + \"' - response code is \" + response.status);\r\n            Log.verbose(\"Could not retrieve file from '\" + path + \"' - response code is \" + response.status);\r\n          }\r\n\r\n          if (result === null || result === \"null\") {\r\n            Log.fail(\"Could not retrieve file from '\" + path + \"' - result is null.\");\r\n            Log.verbose(\"Could not retrieve file from '\" + path + \"' - result is null.\");\r\n          }\r\n\r\n          this._content = result;\r\n        }\r\n      }\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    const areEqual = StorageUtilities.contentsAreEqual(this._content, newContent);\r\n\r\n    if (areEqual) {\r\n      return false;\r\n    }\r\n\r\n    let oldContent = this._content;\r\n    this._content = newContent;\r\n\r\n    this.contentWasModified(oldContent, updateType, sourceId);\r\n\r\n    return true;\r\n  }\r\n\r\n  async saveContent(): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    this.lastLoadedOrSaved = new Date();\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IFile from \"../storage/IFile\";\r\nimport GitHubFile from \"./GitHubFile\";\r\nimport GitHubStorage from \"./GitHubStorage\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport FolderBase from \"../storage/FolderBase\";\r\nimport { Endpoints } from \"@octokit/types\";\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\ntype getContentReposResponse = Endpoints[\"GET /repos/{owner}/{repo}/contents/{path}\"][\"response\"];\r\n\r\nexport default class GitHubFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _parentPath: string;\r\n\r\n  public sha?: string;\r\n\r\n  folders: { [name: string]: GitHubFolder | undefined };\r\n  files: { [name: string]: GitHubFile | undefined };\r\n\r\n  private _storage: GitHubStorage;\r\n  private _parentFolder: GitHubFolder | null;\r\n\r\n  get storage(): GitHubStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): GitHubFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._parentPath;\r\n\r\n    if (!path.endsWith(GitHubStorage.slashFolderDelimiter)) {\r\n      path += GitHubStorage.slashFolderDelimiter;\r\n    }\r\n\r\n    path += this.name;\r\n\r\n    return path;\r\n  }\r\n\r\n  constructor(storage: GitHubStorage, parentFolder: GitHubFolder | null, parentPath: string, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._parentPath = parentPath;\r\n    this._name = folderName;\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async exists() {\r\n    return true;\r\n  }\r\n\r\n  async ensureExists() {\r\n    return true;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    throw new Error(\"Deletion of this folder \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for GitHub storage\r\n  }\r\n\r\n  ensureFile(name: string): GitHubFile {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      Log.unsupportedToken(nameCanon);\r\n      throw new Error();\r\n    }\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile == null) {\r\n      candFile = new GitHubFile(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  ensureFolder(name: string): GitHubFolder {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new GitHubFolder(this._storage, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async deleteFile(name: string): Promise<boolean> {\r\n    throw new Error(\"Deletion of files not supported\");\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    throw new Error(\"Creation of files not supported\");\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    const repos = this.storage.manager.octokit.rest.repos;\r\n    let pathMinusSlash = this.fullPath;\r\n\r\n    if (pathMinusSlash === \"/\") {\r\n      pathMinusSlash = \"\";\r\n    } else if (!pathMinusSlash.startsWith(\"/\")) {\r\n      pathMinusSlash = \"/\" + pathMinusSlash;\r\n    }\r\n\r\n    if (pathMinusSlash.endsWith(\"/\")) {\r\n      pathMinusSlash = pathMinusSlash.substring(0, pathMinusSlash.length - 1);\r\n    }\r\n\r\n    // Log.debug(\"Loading GH folder from '\" + pathMinusSlash + \"'\");\r\n\r\n    const options = {\r\n      owner: this.storage.ownerName,\r\n      repo: this.storage.repoName,\r\n      path: pathMinusSlash,\r\n    };\r\n\r\n    let contentListing = undefined;\r\n\r\n    try {\r\n      contentListing = await repos.getContent(options);\r\n    } catch (e) {\r\n      Log.debug(\"Error retrieving repo information: \" + this.storage.ownerName + \" \" + this.storage.repoName + \" \" + e);\r\n    }\r\n\r\n    if (contentListing === undefined) {\r\n      Log.debug(\"No data retrieved from repo: \" + this.storage.ownerName + \" \" + this.storage.repoName);\r\n\r\n      this.updateLastLoadedOrSaved();\r\n\r\n      return this.lastLoadedOrSaved as Date;\r\n    }\r\n\r\n    const response: getContentReposResponse = contentListing;\r\n\r\n    const fileObjects = response.data as {\r\n      type: string;\r\n      size: number;\r\n      name: string;\r\n      path: string;\r\n      content?: string | undefined;\r\n      sha: string;\r\n      url: string;\r\n      git_url: string | null;\r\n      html_url: string | null;\r\n      download_url: string | null;\r\n      //            _links: {};\r\n    }[];\r\n\r\n    // Log.debug(\"Retrieved '\" + fileObjects.length + \"' GitHub objects.\");\r\n\r\n    for (const i in fileObjects) {\r\n      const fso = fileObjects[i];\r\n\r\n      if (fso.type === \"dir\") {\r\n        const childFolder = this.ensureFolder(fso.name);\r\n        childFolder.sha = fso.sha;\r\n      } else if (fso.type === \"file\") {\r\n        if (StorageUtilities.isUsableFile(fso.name)) {\r\n          const childFile = this.ensureFile(fso.name);\r\n          childFile.sha = fso.sha;\r\n        }\r\n      }\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport GitHubFolder from \"./GitHubFolder\";\r\nimport StorageBase from \"../storage/StorageBase\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport GitHubManager from \"./GitHubManager\";\r\n\r\nexport default class GitHubStorage extends StorageBase implements IStorage {\r\n  rootFolder: GitHubFolder;\r\n  manager: GitHubManager;\r\n  repoName: string;\r\n  ownerName: string;\r\n  branch?: string;\r\n\r\n  subPath: string;\r\n\r\n  constructor(manager: GitHubManager, repoName: string, ownerName: string, branch?: string, subPath: string = \"\") {\r\n    super();\r\n\r\n    this.manager = manager;\r\n    this.repoName = repoName;\r\n    this.branch = branch;\r\n    this.ownerName = ownerName;\r\n\r\n    if (ownerName !== \"microsoft\" && ownerName !== \"mojang\") {\r\n      throw new Error(\"Unsupported GitHub action.\");\r\n    }\r\n\r\n    this.subPath = subPath;\r\n\r\n    this.rootFolder = new GitHubFolder(this, null, subPath, \"\");\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(GitHubStorage.slashFolderDelimiter)) {\r\n      fullPath += GitHubStorage.slashFolderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static getParentFolderPath(path: string) {\r\n    const lastDelim = path.lastIndexOf(this.slashFolderDelimiter);\r\n\r\n    if (lastDelim < 0) {\r\n      return path;\r\n    }\r\n\r\n    return path.substring(0, lastDelim);\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport FileBase from \"./FileBase\";\r\nimport HttpFolder from \"./HttpFolder\";\r\nimport IFile from \"./IFile\";\r\nimport StorageUtilities, { EncodingType } from \"./StorageUtilities\";\r\nimport axios from \"axios\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class HttpFile extends FileBase implements IFile {\r\n  private _name: string;\r\n  private _parentFolder: HttpFolder;\r\n\r\n  private _pendingLoadRequests: ((value: unknown) => void)[] = [];\r\n  private _isLoading = false;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get isContentLoaded() {\r\n    return this.lastLoadedOrSaved !== null;\r\n  }\r\n\r\n  get parentFolder(): HttpFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get fullPath() {\r\n    return this._parentFolder.fullPath + this.name;\r\n  }\r\n\r\n  constructor(parentFolder: HttpFolder, folderName: string) {\r\n    super();\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = folderName;\r\n  }\r\n\r\n  async exists() {\r\n    await this.loadContent(false);\r\n\r\n    return this._content !== null;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    await this.loadContent(true);\r\n  }\r\n\r\n  async loadContent(force?: boolean): Promise<Date> {\r\n    //        Log.assert(this.fullPath.startsWith(\"/\"), \"Expecting a full absolute path\");\r\n\r\n    if (force || this.lastLoadedOrSaved === null) {\r\n      if (this._isLoading) {\r\n        const pendingLoad = this._pendingLoadRequests;\r\n\r\n        const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n          pendingLoad.push(resolve);\r\n        };\r\n\r\n        await new Promise(prom);\r\n\r\n        if (this.lastLoadedOrSaved === null) {\r\n          throw new Error();\r\n        }\r\n\r\n        return this.lastLoadedOrSaved;\r\n      } else {\r\n        this._content = null;\r\n\r\n        const path = this.fullPath;\r\n\r\n        if (StorageUtilities.getEncodingByFileName(this.name) === EncodingType.ByteBuffer) {\r\n          try {\r\n            const headers: Record<string, string> = {};\r\n            if (this._parentFolder.storage.authToken) {\r\n              headers[\"Authorization\"] = `Bearer mctauth=${this._parentFolder.storage.authToken}`;\r\n            }\r\n            const response = await axios.get(path, {\r\n              responseType: \"arraybuffer\",\r\n              headers,\r\n            });\r\n\r\n            this._content = new Uint8Array(response.data);\r\n          } catch (e) {}\r\n        } else {\r\n          let result = null;\r\n\r\n          try {\r\n            const headers: Record<string, string> = {};\r\n            if (this._parentFolder.storage.authToken) {\r\n              headers[\"Authorization\"] = `Bearer mctauth=${this._parentFolder.storage.authToken}`;\r\n            }\r\n            const response = await axios.get(path, {\r\n              headers,\r\n            });\r\n\r\n            result = response.data;\r\n\r\n            if (typeof result === \"object\") {\r\n              try {\r\n                result = JSON.stringify(result, null, 2);\r\n              } catch (e) {\r\n                Log.fail(\"Could not convert file to JSON\");\r\n              }\r\n            }\r\n\r\n            if (response.status !== 200) {\r\n              Log.verbose(\"Could not retrieve file from '\" + path + \"' - response code is \" + response.status);\r\n            }\r\n\r\n            if (result === null || result === \"null\") {\r\n              Log.verbose(\"Could not retrieve file from '\" + path + \"' - result is null.\");\r\n            }\r\n          } catch (e) {\r\n            Log.verbose(\"Could not retrieve file from '\" + path + \"' - \" + e + \" - \" + (e as any)?.stack);\r\n          }\r\n\r\n          this._content = result;\r\n        }\r\n\r\n        this.lastLoadedOrSaved = new Date();\r\n\r\n        this._isLoading = false;\r\n\r\n        const pendingLoad = this._pendingLoadRequests;\r\n        this._pendingLoadRequests = [];\r\n\r\n        for (const prom of pendingLoad) {\r\n          prom(undefined);\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    if (this._parentFolder.storage.readOnly) {\r\n      throw new Error(\"HttpFile is read-only.\");\r\n    }\r\n\r\n    try {\r\n      const path = this.fullPath;\r\n      const headers: Record<string, string> = {};\r\n      if (this._parentFolder.storage.authToken) {\r\n        headers[\"Authorization\"] = `Bearer mctauth=${this._parentFolder.storage.authToken}`;\r\n      }\r\n\r\n      await axios.delete(path, { headers });\r\n\r\n      if (!skipRemoveFromParent) {\r\n        this._parentFolder.removeFile(this.name);\r\n      }\r\n\r\n      return true;\r\n    } catch (e) {\r\n      Log.debug(\"Failed to delete file: \" + e);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"HttpFile does not support move operations.\");\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null): boolean {\r\n    if (this._parentFolder.storage.readOnly) {\r\n      throw new Error(\"HttpFile is read-only.\");\r\n    }\r\n\r\n    this._content = newContent;\r\n    this.modified = new Date();\r\n    return true;\r\n  }\r\n\r\n  async saveContent(): Promise<Date> {\r\n    if (this._parentFolder.storage.readOnly) {\r\n      throw new Error(\"HttpFile is read-only.\");\r\n    }\r\n\r\n    if (this._content === null) {\r\n      throw new Error(\"Cannot save file with null content\");\r\n    }\r\n\r\n    try {\r\n      const path = this.fullPath;\r\n      const headers: Record<string, string> = {};\r\n      if (this._parentFolder.storage.authToken) {\r\n        headers[\"Authorization\"] = `Bearer mctauth=${this._parentFolder.storage.authToken}`;\r\n      }\r\n\r\n      // Determine content type based on file type\r\n      const encoding = StorageUtilities.getEncodingByFileName(this.name);\r\n      if (encoding === EncodingType.ByteBuffer) {\r\n        headers[\"Content-Type\"] = \"application/octet-stream\";\r\n      } else {\r\n        headers[\"Content-Type\"] = \"text/plain; charset=utf-8\";\r\n      }\r\n\r\n      await axios.put(path, this._content, { headers });\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.modified = null;\r\n\r\n      return this.lastLoadedOrSaved;\r\n    } catch (e) {\r\n      Log.debug(\"Failed to save file: \" + e);\r\n      throw new Error(\"Failed to save file: \" + e);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile from \"./IFile\";\r\nimport HttpFile from \"./HttpFile\";\r\nimport HttpStorage from \"./HttpStorage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport FolderBase from \"./FolderBase\";\r\nimport Log from \"../core/Log\";\r\nimport axios from \"axios\";\r\nimport IIndexJson from \"./IIndexJson\";\r\n\r\nexport default class HttpFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n\r\n  folders: { [name: string]: HttpFolder | undefined };\r\n  files: { [name: string]: HttpFile | undefined };\r\n\r\n  private _storage: HttpStorage;\r\n  private _parentFolder: HttpFolder | null;\r\n\r\n  private _pendingLoadRequests: ((value: unknown) => void)[] = [];\r\n  private _isLoading = false;\r\n\r\n  get storage(): HttpStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): HttpFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath(): string {\r\n    if (this._parentFolder === null) {\r\n      return this._storage.baseUrl;\r\n    }\r\n\r\n    return this._parentFolder.fullPath + this.name + HttpStorage.slashFolderDelimiter;\r\n  }\r\n\r\n  constructor(storage: HttpStorage, parentFolder: HttpFolder | null, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._name = folderName;\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    await this.load(true);\r\n  }\r\n\r\n  async exists() {\r\n    return true;\r\n  }\r\n\r\n  async ensureExists(): Promise<boolean> {\r\n    if (this._storage.readOnly) {\r\n      return true;\r\n    }\r\n\r\n    try {\r\n      const headers: Record<string, string> = {};\r\n      if (this._storage.authToken) {\r\n        headers[\"Authorization\"] = `Bearer mctauth=${this._storage.authToken}`;\r\n      }\r\n\r\n      // POST with action=mkdir to create the folder\r\n      await axios.post(this.fullPath + \"?action=mkdir\", null, { headers });\r\n      return true;\r\n    } catch (e) {\r\n      Log.debug(\"Failed to create folder: \" + e);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  ensureFile(name: string): HttpFile {\r\n    Log.assert(name.indexOf(\"/\") < 0, \"Unexpected to find / in file name: \" + name);\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile === undefined) {\r\n      candFile = new HttpFile(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  _removeFile(file: IFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    const candFile = this.files[nameCanon];\r\n\r\n    Log.assert(candFile === file, \"Files don't match.\");\r\n\r\n    this.files[nameCanon] = undefined;\r\n  }\r\n\r\n  _addExistingFile(file: HttpFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    this.files[nameCanon] = file;\r\n  }\r\n\r\n  ensureFolder(name: string): HttpFolder {\r\n    Log.assert(name.indexOf(\"/\") < 0, \"Unexpected to find / in folder name: \" + name);\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new HttpFolder(this._storage, this, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async deleteFile(name: string): Promise<boolean> {\r\n    if (this._storage.readOnly) {\r\n      throw new Error(\"Deletion of file not supported in read-only mode\");\r\n    }\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n    const file = this.files[nameCanon];\r\n\r\n    if (file) {\r\n      return await file.deleteThisFile();\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    const file = this.ensureFile(name);\r\n    return file;\r\n  }\r\n\r\n  /**\r\n   * Remove a file from the folder's file list (used after deletion).\r\n   */\r\n  removeFile(name: string): void {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n    this.files[nameCanon] = undefined;\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    throw new Error(\"Deletion of this folder \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    if (this._isLoading) {\r\n      const pendingLoad = this._pendingLoadRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n\r\n      if (this.lastLoadedOrSaved === null) {\r\n        throw new Error();\r\n      }\r\n\r\n      return this.lastLoadedOrSaved;\r\n    } else {\r\n      this._isLoading = true;\r\n      let response = undefined;\r\n\r\n      try {\r\n        // Include Authorization header if the storage has an auth token\r\n        const headers: Record<string, string> = {};\r\n        if (this._storage.authToken) {\r\n          headers[\"Authorization\"] = `Bearer mctauth=${this._storage.authToken}`;\r\n        }\r\n        const requestUrl = this.fullPath + \"index.json\";\r\n        response = await axios.get(requestUrl, {\r\n          headers,\r\n        });\r\n      } catch (e: any) {\r\n        Log.debug(\"HttpFolder: Could not load index for \" + this.fullPath + \" - \" + (e?.message || e));\r\n      }\r\n\r\n      if (response) {\r\n        const index: IIndexJson = response.data;\r\n\r\n        if (index.files !== null && index.files !== undefined) {\r\n          for (let i = 0; i < index.files.length; i++) {\r\n            const file = index.files[i];\r\n\r\n            if (StorageUtilities.isUsableFile(file)) {\r\n              this.ensureFile(file);\r\n            }\r\n          }\r\n        }\r\n\r\n        if (index.folders !== null && index.folders !== undefined) {\r\n          for (let i = 0; i < index.folders.length; i++) {\r\n            const folder = index.folders[i];\r\n\r\n            this.ensureFolder(folder);\r\n          }\r\n        }\r\n      }\r\n\r\n      this.updateLastLoadedOrSaved();\r\n\r\n      this._isLoading = false;\r\n\r\n      const pendingLoad = this._pendingLoadRequests;\r\n      this._pendingLoadRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * HttpStorage.ts\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * HttpStorage is a client-side storage implementation that fetches content\r\n * via HTTP and receives real-time updates via WebSocket notifications.\r\n *\r\n * REAL-TIME SYNCHRONIZATION:\r\n * --------------------------\r\n * 1. HttpStorage connects to /ws/notifications WebSocket endpoint\r\n * 2. Subscribes to file/folder change events for specific slots\r\n * 3. When notifications arrive, converts them to standard IStorage events\r\n * 4. Consumers (MCWorld, etc.) subscribe to these events\r\n *\r\n * DATA FLOW:\r\n * ----------\r\n * NodeStorage (fs.watch) -> HttpServer (broadcast) -> WebSocket ->\r\n *   HttpStorage (this) -> notifyFileAdded/Removed/Updated -> MCWorld -> WorldView\r\n *\r\n * WEBSOCKET PROTOCOL:\r\n * -------------------\r\n * - Connect: ws://host:port/ws/notifications?token=<authToken>\r\n * - Subscribe: { header: {..., messageType: \"subscriptionRequest\", messagePurpose: \"subscribe\" },\r\n *               body: { eventNames: [\"fileChanged\", \"fileAdded\", ...], slot: 0 } }\r\n * - Receive: IServerNotification messages with file/folder change details\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - IServerNotification.ts: WebSocket message format definitions\r\n * - IStorageWatcher.ts: INotificationReceiver interface\r\n * - HttpServer.ts: Server-side WebSocket broadcaster\r\n * - NodeStorage.ts: Server-side file watcher source\r\n *\r\n * USAGE:\r\n * ------\r\n * const storage = HttpStorage.get(\"http://localhost:6126/api/worldContent/0/\");\r\n * storage.authToken = \"encrypted-token\";\r\n * await storage.connectToNotifications();\r\n * storage.onFileAdded.subscribe((sender, file) => console.log(\"File added:\", file.name));\r\n */\r\n\r\nimport HttpFolder from \"./HttpFolder\";\r\nimport StorageBase from \"./StorageBase\";\r\nimport IStorage from \"./IStorage\";\r\nimport Log from \"../core/Log\";\r\nimport { INotificationReceiver } from \"./IStorageWatcher\";\r\nimport { FileUpdateType } from \"./IFile\";\r\nimport { EventDispatcher } from \"ste-events\";\r\n\r\n/**\r\n * Notification message structure from server.\r\n * Matches IServerNotification from IServerNotification.ts\r\n */\r\ninterface IServerNotificationMessage {\r\n  header: {\r\n    version: number;\r\n    requestId: string;\r\n    messageType: string;\r\n    messagePurpose: string;\r\n  };\r\n  body: {\r\n    eventName: string;\r\n    timestamp: number;\r\n    slot?: number;\r\n    category?: string;\r\n    path?: string;\r\n    [key: string]: any;\r\n  };\r\n}\r\n\r\nexport default class HttpStorage extends StorageBase implements IStorage, INotificationReceiver {\r\n  rootFolder: HttpFolder;\r\n\r\n  baseUrl: string;\r\n\r\n  /**\r\n   * Bearer token for Authorization header.\r\n   * When set, requests will include \"Authorization: Bearer <token>\" header.\r\n   * This is used for authenticated endpoints like /api/content.\r\n   */\r\n  authToken?: string;\r\n\r\n  /**\r\n   * When true (default), the storage is read-only and write operations will throw.\r\n   * Set to false to enable HTTP PUT/DELETE operations for editing content.\r\n   */\r\n  readOnly: boolean = true;\r\n\r\n  /** WebSocket connection for receiving notifications */\r\n  private _webSocket: WebSocket | null = null;\r\n\r\n  /** Currently subscribed event names */\r\n  private _subscribedEvents: Set<string> = new Set();\r\n\r\n  /** Server slot this storage is associated with (for filtering notifications) */\r\n  private _slot?: number;\r\n\r\n  /** Whether we're currently connected to the notification server */\r\n  private _isConnected: boolean = false;\r\n\r\n  /** Reconnection timer */\r\n  private _reconnectTimer?: any;\r\n\r\n  /** Whether auto-reconnect is enabled */\r\n  private _autoReconnect: boolean = true;\r\n\r\n  /**\r\n   * Event fired when the server sends a shutdown notification.\r\n   * This indicates the entire MCT server is shutting down (not just a BDS instance).\r\n   * Subscribers should show appropriate UI feedback and disable auto-reconnect.\r\n   * Args: (reason: string, graceful: boolean)\r\n   */\r\n  private _onServerShutdown = new EventDispatcher<HttpStorage, { reason: string; graceful: boolean }>();\r\n\r\n  /**\r\n   * Subscribe to server shutdown notifications.\r\n   * This is fired when the MCT server is about to shut down.\r\n   */\r\n  public get onServerShutdown() {\r\n    return this._onServerShutdown.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Static cache of HttpStorage instances by base URL.\r\n   * Used to avoid creating duplicate storage instances for the same URL.\r\n   */\r\n  private static _storageCache: Map<string, HttpStorage> = new Map();\r\n\r\n  /**\r\n   * Get or create an HttpStorage instance for the given base URL.\r\n   * Reuses cached instances to avoid creating duplicates.\r\n   * @param baseUrl The base URL for the storage\r\n   * @returns A cached or new HttpStorage instance\r\n   */\r\n  static get(baseUrl: string): HttpStorage {\r\n    // Normalize the URL to ensure consistent caching\r\n    let normalizedUrl = baseUrl;\r\n    if (!normalizedUrl.endsWith(StorageBase.slashFolderDelimiter)) {\r\n      normalizedUrl += StorageBase.slashFolderDelimiter;\r\n    }\r\n\r\n    let storage = HttpStorage._storageCache.get(normalizedUrl);\r\n    if (!storage) {\r\n      storage = new HttpStorage(baseUrl);\r\n      HttpStorage._storageCache.set(normalizedUrl, storage);\r\n    }\r\n    return storage;\r\n  }\r\n\r\n  /**\r\n   * Clear the storage cache. Useful for testing or when storage should be refreshed.\r\n   */\r\n  static clearCache() {\r\n    HttpStorage._storageCache.clear();\r\n  }\r\n\r\n  constructor(newUrl: string) {\r\n    super();\r\n\r\n    this.baseUrl = newUrl;\r\n\r\n    if (!this.baseUrl.endsWith(StorageBase.slashFolderDelimiter)) {\r\n      this.baseUrl += StorageBase.slashFolderDelimiter;\r\n    }\r\n\r\n    this.rootFolder = new HttpFolder(this, null, \"\");\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n\r\n  get isConnected(): boolean {\r\n    return this._isConnected;\r\n  }\r\n\r\n  /**\r\n   * Get the underlying WebSocket connection.\r\n   * Can be used to listen for raw notifications (e.g., debug stats).\r\n   */\r\n  get webSocket(): WebSocket | null {\r\n    return this._webSocket;\r\n  }\r\n\r\n  /**\r\n   * Set the slot number for filtering notifications.\r\n   */\r\n  set slot(value: number | undefined) {\r\n    this._slot = value;\r\n  }\r\n\r\n  get slot(): number | undefined {\r\n    return this._slot;\r\n  }\r\n\r\n  /**\r\n   * Connect to the WebSocket notification endpoint.\r\n   * The WebSocket URL is derived from the baseUrl.\r\n   *\r\n   * @param url Optional override URL for the WebSocket endpoint\r\n   * @param authToken Optional auth token (uses this.authToken if not provided)\r\n   */\r\n  async connect(url?: string, authToken?: string): Promise<void> {\r\n    if (this._isConnected) {\r\n      return;\r\n    }\r\n\r\n    const token = authToken || this.authToken;\r\n    if (!token) {\r\n      Log.debug(\"Cannot connect to notifications: no auth token\");\r\n      return;\r\n    }\r\n\r\n    // Derive WebSocket URL from baseUrl if not provided\r\n    let wsUrl = url;\r\n    if (!wsUrl) {\r\n      // Convert http(s)://host:port/api/... to ws(s)://host:port/ws/notifications\r\n      // Handle both absolute URLs and relative URLs (using window.location as base)\r\n      let urlObj: URL;\r\n      try {\r\n        // First try as absolute URL\r\n        urlObj = new URL(this.baseUrl);\r\n      } catch {\r\n        // If that fails, treat as relative URL and use current page location as base\r\n        // Use globalThis to safely access window in a cross-platform way\r\n        const globalWindow = globalThis as { location?: { origin?: string } };\r\n        if (globalWindow.location?.origin) {\r\n          urlObj = new URL(this.baseUrl, globalWindow.location.origin);\r\n        } else {\r\n          Log.message(\"[HttpStorage] Cannot derive WebSocket URL: no window.location available\");\r\n          return;\r\n        }\r\n      }\r\n      const wsProtocol = urlObj.protocol === \"https:\" ? \"wss:\" : \"ws:\";\r\n      wsUrl = `${wsProtocol}//${urlObj.host}/ws/notifications`;\r\n    }\r\n\r\n    // Add auth token as query parameter\r\n    wsUrl += `?token=${encodeURIComponent(token)}`;\r\n\r\n    try {\r\n      this._webSocket = new WebSocket(wsUrl);\r\n\r\n      // Set up event handlers\r\n      this._webSocket.onopen = () => {\r\n        this._isConnected = true;\r\n        Log.verbose(`[HttpStorage] WebSocket connected to ${wsUrl?.split(\"?\")[0]}`);\r\n\r\n        // Re-subscribe to any previously subscribed events\r\n        if (this._subscribedEvents.size > 0) {\r\n          this._sendSubscription(\"subscribe\", Array.from(this._subscribedEvents));\r\n        }\r\n      };\r\n\r\n      this._webSocket.onclose = () => {\r\n        this._isConnected = false;\r\n        Log.verbose(\"[HttpStorage] WebSocket connection closed\");\r\n\r\n        // Auto-reconnect after a delay\r\n        if (this._autoReconnect && !this._reconnectTimer) {\r\n          this._reconnectTimer = setTimeout(() => {\r\n            this._reconnectTimer = undefined;\r\n            this.connect(url, authToken).catch((err) => {\r\n              Log.debug(\"[HttpStorage] WebSocket reconnection failed: \" + err);\r\n            });\r\n          }, 5000);\r\n        }\r\n      };\r\n\r\n      this._webSocket.onerror = (error) => {\r\n        Log.message(\"[HttpStorage] WebSocket error: \" + error);\r\n      };\r\n\r\n      this._webSocket.onmessage = (event) => {\r\n        Log.debug(\"[HttpStorage] Received WebSocket message: \" + event.data.substring(0, 200));\r\n        this._handleNotification(event.data);\r\n      };\r\n\r\n      // Wait for connection to be established\r\n      await new Promise<void>((resolve, reject) => {\r\n        if (!this._webSocket) {\r\n          reject(new Error(\"WebSocket not created\"));\r\n          return;\r\n        }\r\n\r\n        const onOpen = () => {\r\n          this._webSocket?.removeEventListener(\"open\", onOpen);\r\n          this._webSocket?.removeEventListener(\"error\", onError);\r\n          resolve();\r\n        };\r\n\r\n        const onError = (e: Event) => {\r\n          this._webSocket?.removeEventListener(\"open\", onOpen);\r\n          this._webSocket?.removeEventListener(\"error\", onError);\r\n          reject(new Error(\"WebSocket connection failed\"));\r\n        };\r\n\r\n        if (this._webSocket.readyState === WebSocket.OPEN) {\r\n          resolve();\r\n        } else {\r\n          this._webSocket.addEventListener(\"open\", onOpen);\r\n          this._webSocket.addEventListener(\"error\", onError);\r\n        }\r\n      });\r\n    } catch (e) {\r\n      Log.debug(\"Failed to connect to notification server: \" + e);\r\n      throw e;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Disconnect from the WebSocket notification server.\r\n   */\r\n  disconnect(): void {\r\n    this._autoReconnect = false;\r\n\r\n    if (this._reconnectTimer) {\r\n      clearTimeout(this._reconnectTimer);\r\n      this._reconnectTimer = undefined;\r\n    }\r\n\r\n    if (this._webSocket) {\r\n      this._webSocket.close();\r\n      this._webSocket = null;\r\n    }\r\n\r\n    this._isConnected = false;\r\n  }\r\n\r\n  /**\r\n   * Subscribe to specific event types.\r\n   *\r\n   * @param eventNames Array of event names to subscribe to\r\n   * @param slot Optional slot number to filter events\r\n   */\r\n  async subscribe(eventNames: string[], slot?: number): Promise<void> {\r\n    for (const name of eventNames) {\r\n      this._subscribedEvents.add(name);\r\n    }\r\n\r\n    if (slot !== undefined) {\r\n      this._slot = slot;\r\n    }\r\n\r\n    if (this._isConnected) {\r\n      this._sendSubscription(\"subscribe\", eventNames);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Unsubscribe from specific event types.\r\n   */\r\n  async unsubscribe(eventNames: string[]): Promise<void> {\r\n    for (const name of eventNames) {\r\n      this._subscribedEvents.delete(name);\r\n    }\r\n\r\n    if (this._isConnected) {\r\n      this._sendSubscription(\"unsubscribe\", eventNames);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Send a subscription request to the server.\r\n   */\r\n  private _sendSubscription(purpose: \"subscribe\" | \"unsubscribe\", eventNames: string[]): void {\r\n    if (!this._webSocket || this._webSocket.readyState !== WebSocket.OPEN) {\r\n      return;\r\n    }\r\n\r\n    const request = {\r\n      header: {\r\n        version: 1,\r\n        requestId: crypto.randomUUID ? crypto.randomUUID() : `${Date.now()}-${Math.random()}`,\r\n        messageType: \"subscriptionRequest\",\r\n        messagePurpose: purpose,\r\n      },\r\n      body: {\r\n        eventNames: eventNames,\r\n        slot: this._slot,\r\n      },\r\n    };\r\n\r\n    Log.message(`[HttpStorage] Sending subscription request: ${JSON.stringify(request)}`);\r\n    this._webSocket.send(JSON.stringify(request));\r\n  }\r\n\r\n  /**\r\n   * Handle an incoming notification message.\r\n   */\r\n  private async _handleNotification(data: string): Promise<void> {\r\n    try {\r\n      const message: IServerNotificationMessage = JSON.parse(data);\r\n\r\n      Log.debug(\r\n        `[HttpStorage] _handleNotification: messageType=${message.header?.messageType}, eventName=${message.body?.eventName}, path=${message.body?.path}, category=${message.body?.category}`\r\n      );\r\n\r\n      if (message.header.messageType !== \"notification\") {\r\n        Log.debug(`[HttpStorage] Skipping non-notification message: ${message.header.messageType}`);\r\n        return;\r\n      }\r\n\r\n      const { eventName, path, category } = message.body;\r\n\r\n      // Handle server shutdown notification specially\r\n      if (eventName === \"serverShutdown\") {\r\n        const reason = message.body.reason || \"Server shutting down\";\r\n        const graceful = message.body.graceful !== false; // Default to true if not specified\r\n\r\n        Log.verbose(`[HttpStorage] Server shutdown notification received: ${reason}`);\r\n\r\n        // Disable auto-reconnect since the server is going away intentionally\r\n        this._autoReconnect = false;\r\n\r\n        // Dispatch the shutdown event to subscribers\r\n        this._onServerShutdown.dispatch(this, { reason, graceful });\r\n        return;\r\n      }\r\n\r\n      // Skip if not a file/folder event\r\n      if (!path) {\r\n        Log.debug(`[HttpStorage] Skipping notification without path: ${eventName}`);\r\n        return;\r\n      }\r\n\r\n      // The server sends paths relative to the category storage (e.g., /db/000040.ldb for world storage)\r\n      // We need to prepend the category to get the full path relative to worldContentStorage\r\n      // e.g., /world/db/000040.ldb for the world category\r\n      // Note: getFileFromRelativePath expects paths to start with /\r\n      let fullPath = path;\r\n      if (category && !path.startsWith(category + \"/\") && !path.startsWith(\"/\" + category + \"/\")) {\r\n        // Prepend category, handling leading slashes\r\n        const cleanPath = path.startsWith(\"/\") ? path.substring(1) : path;\r\n        fullPath = `/${category}/${cleanPath}`;\r\n      }\r\n      // Ensure fullPath starts with /\r\n      if (!fullPath.startsWith(\"/\")) {\r\n        fullPath = \"/\" + fullPath;\r\n      }\r\n\r\n      Log.message(`[HttpStorage] Processing ${eventName} for path: ${path} -> ${fullPath}`);\r\n\r\n      // Convert the notification to storage events\r\n      switch (eventName) {\r\n        case \"fileAdded\": {\r\n          // Ensure the file exists in our folder structure and notify\r\n          const file = await this.rootFolder.ensureFileFromRelativePath(fullPath);\r\n          Log.debug(`[HttpStorage] fileAdded: ensured file=${file?.fullPath}`);\r\n          if (file) {\r\n            this.notifyFileAdded(file);\r\n          }\r\n          break;\r\n        }\r\n\r\n        case \"fileRemoved\": {\r\n          this.notifyFileRemoved(fullPath);\r\n          Log.debug(`[HttpStorage] fileRemoved: notified for ${fullPath}`);\r\n          break;\r\n        }\r\n\r\n        case \"fileChanged\": {\r\n          // Reload the file content and notify\r\n          try {\r\n            const file = await this.rootFolder.getFileFromRelativePath(fullPath);\r\n            if (file) {\r\n              // Force reload content\r\n              await file.loadContent(true);\r\n              this.notifyFileContentsUpdated({\r\n                file: file,\r\n                updateType: FileUpdateType.externalChange,\r\n                sourceId: \"websocket\",\r\n              });\r\n            } else {\r\n              Log.debug(`[HttpStorage] fileChanged: file not found for path ${fullPath}`);\r\n            }\r\n          } catch (fileErr) {\r\n            Log.error(`[HttpStorage] fileChanged: error processing ${fullPath}: ${fileErr}`);\r\n          }\r\n          break;\r\n        }\r\n\r\n        case \"folderChanged\": {\r\n          // Reload the folder and notify\r\n          const folder = await this.rootFolder.getFolderFromRelativePath(fullPath);\r\n          Log.debug(`[HttpStorage] folderChanged: got folder=${folder?.fullPath}`);\r\n          if (folder) {\r\n            await folder.scanForChanges();\r\n            this.notifyFolderAdded(folder);\r\n          }\r\n          break;\r\n        }\r\n      }\r\n\r\n      Log.message(`[HttpStorage] Processed notification: ${eventName} ${fullPath}`);\r\n    } catch (e) {\r\n      Log.message(`[HttpStorage] Error handling notification: ` + e);\r\n    }\r\n  }\r\n}\r\n", "\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// lib/npm/node.ts\nvar node_exports = {};\n__export(node_exports, {\n  analyzeMetafile: () => analyzeMetafile,\n  analyzeMetafileSync: () => analyzeMetafileSync,\n  build: () => build,\n  buildSync: () => buildSync,\n  context: () => context,\n  default: () => node_default,\n  formatMessages: () => formatMessages,\n  formatMessagesSync: () => formatMessagesSync,\n  initialize: () => initialize,\n  stop: () => stop,\n  transform: () => transform,\n  transformSync: () => transformSync,\n  version: () => version\n});\nmodule.exports = __toCommonJS(node_exports);\n\n// lib/shared/stdio_protocol.ts\nfunction encodePacket(packet) {\n  let visit = (value) => {\n    if (value === null) {\n      bb.write8(0);\n    } else if (typeof value === \"boolean\") {\n      bb.write8(1);\n      bb.write8(+value);\n    } else if (typeof value === \"number\") {\n      bb.write8(2);\n      bb.write32(value | 0);\n    } else if (typeof value === \"string\") {\n      bb.write8(3);\n      bb.write(encodeUTF8(value));\n    } else if (value instanceof Uint8Array) {\n      bb.write8(4);\n      bb.write(value);\n    } else if (value instanceof Array) {\n      bb.write8(5);\n      bb.write32(value.length);\n      for (let item of value) {\n        visit(item);\n      }\n    } else {\n      let keys = Object.keys(value);\n      bb.write8(6);\n      bb.write32(keys.length);\n      for (let key of keys) {\n        bb.write(encodeUTF8(key));\n        visit(value[key]);\n      }\n    }\n  };\n  let bb = new ByteBuffer();\n  bb.write32(0);\n  bb.write32(packet.id << 1 | +!packet.isRequest);\n  visit(packet.value);\n  writeUInt32LE(bb.buf, bb.len - 4, 0);\n  return bb.buf.subarray(0, bb.len);\n}\nfunction decodePacket(bytes) {\n  let visit = () => {\n    switch (bb.read8()) {\n      case 0:\n        return null;\n      case 1:\n        return !!bb.read8();\n      case 2:\n        return bb.read32();\n      case 3:\n        return decodeUTF8(bb.read());\n      case 4:\n        return bb.read();\n      case 5: {\n        let count = bb.read32();\n        let value2 = [];\n        for (let i = 0; i < count; i++) {\n          value2.push(visit());\n        }\n        return value2;\n      }\n      case 6: {\n        let count = bb.read32();\n        let value2 = {};\n        for (let i = 0; i < count; i++) {\n          value2[decodeUTF8(bb.read())] = visit();\n        }\n        return value2;\n      }\n      default:\n        throw new Error(\"Invalid packet\");\n    }\n  };\n  let bb = new ByteBuffer(bytes);\n  let id = bb.read32();\n  let isRequest = (id & 1) === 0;\n  id >>>= 1;\n  let value = visit();\n  if (bb.ptr !== bytes.length) {\n    throw new Error(\"Invalid packet\");\n  }\n  return { id, isRequest, value };\n}\nvar ByteBuffer = class {\n  constructor(buf = new Uint8Array(1024)) {\n    this.buf = buf;\n    this.len = 0;\n    this.ptr = 0;\n  }\n  _write(delta) {\n    if (this.len + delta > this.buf.length) {\n      let clone = new Uint8Array((this.len + delta) * 2);\n      clone.set(this.buf);\n      this.buf = clone;\n    }\n    this.len += delta;\n    return this.len - delta;\n  }\n  write8(value) {\n    let offset = this._write(1);\n    this.buf[offset] = value;\n  }\n  write32(value) {\n    let offset = this._write(4);\n    writeUInt32LE(this.buf, value, offset);\n  }\n  write(bytes) {\n    let offset = this._write(4 + bytes.length);\n    writeUInt32LE(this.buf, bytes.length, offset);\n    this.buf.set(bytes, offset + 4);\n  }\n  _read(delta) {\n    if (this.ptr + delta > this.buf.length) {\n      throw new Error(\"Invalid packet\");\n    }\n    this.ptr += delta;\n    return this.ptr - delta;\n  }\n  read8() {\n    return this.buf[this._read(1)];\n  }\n  read32() {\n    return readUInt32LE(this.buf, this._read(4));\n  }\n  read() {\n    let length = this.read32();\n    let bytes = new Uint8Array(length);\n    let ptr = this._read(bytes.length);\n    bytes.set(this.buf.subarray(ptr, ptr + length));\n    return bytes;\n  }\n};\nvar encodeUTF8;\nvar decodeUTF8;\nvar encodeInvariant;\nif (typeof TextEncoder !== \"undefined\" && typeof TextDecoder !== \"undefined\") {\n  let encoder = new TextEncoder();\n  let decoder = new TextDecoder();\n  encodeUTF8 = (text) => encoder.encode(text);\n  decodeUTF8 = (bytes) => decoder.decode(bytes);\n  encodeInvariant = 'new TextEncoder().encode(\"\")';\n} else if (typeof Buffer !== \"undefined\") {\n  encodeUTF8 = (text) => Buffer.from(text);\n  decodeUTF8 = (bytes) => {\n    let { buffer, byteOffset, byteLength } = bytes;\n    return Buffer.from(buffer, byteOffset, byteLength).toString();\n  };\n  encodeInvariant = 'Buffer.from(\"\")';\n} else {\n  throw new Error(\"No UTF-8 codec found\");\n}\nif (!(encodeUTF8(\"\") instanceof Uint8Array))\n  throw new Error(`Invariant violation: \"${encodeInvariant} instanceof Uint8Array\" is incorrectly false\n\nThis indicates that your JavaScript environment is broken. You cannot use\nesbuild in this environment because esbuild relies on this invariant. This\nis not a problem with esbuild. You need to fix your environment instead.\n`);\nfunction readUInt32LE(buffer, offset) {\n  return buffer[offset++] | buffer[offset++] << 8 | buffer[offset++] << 16 | buffer[offset++] << 24;\n}\nfunction writeUInt32LE(buffer, value, offset) {\n  buffer[offset++] = value;\n  buffer[offset++] = value >> 8;\n  buffer[offset++] = value >> 16;\n  buffer[offset++] = value >> 24;\n}\n\n// lib/shared/common.ts\nvar quote = JSON.stringify;\nvar buildLogLevelDefault = \"warning\";\nvar transformLogLevelDefault = \"silent\";\nfunction validateAndJoinStringArray(values, what) {\n  const toJoin = [];\n  for (const value of values) {\n    validateStringValue(value, what);\n    if (value.indexOf(\",\") >= 0) throw new Error(`Invalid ${what}: ${value}`);\n    toJoin.push(value);\n  }\n  return toJoin.join(\",\");\n}\nvar canBeAnything = () => null;\nvar mustBeBoolean = (value) => typeof value === \"boolean\" ? null : \"a boolean\";\nvar mustBeString = (value) => typeof value === \"string\" ? null : \"a string\";\nvar mustBeRegExp = (value) => value instanceof RegExp ? null : \"a RegExp object\";\nvar mustBeInteger = (value) => typeof value === \"number\" && value === (value | 0) ? null : \"an integer\";\nvar mustBeValidPortNumber = (value) => typeof value === \"number\" && value === (value | 0) && value >= 0 && value <= 65535 ? null : \"a valid port number\";\nvar mustBeFunction = (value) => typeof value === \"function\" ? null : \"a function\";\nvar mustBeArray = (value) => Array.isArray(value) ? null : \"an array\";\nvar mustBeArrayOfStrings = (value) => Array.isArray(value) && value.every((x) => typeof x === \"string\") ? null : \"an array of strings\";\nvar mustBeObject = (value) => typeof value === \"object\" && value !== null && !Array.isArray(value) ? null : \"an object\";\nvar mustBeEntryPoints = (value) => typeof value === \"object\" && value !== null ? null : \"an array or an object\";\nvar mustBeWebAssemblyModule = (value) => value instanceof WebAssembly.Module ? null : \"a WebAssembly.Module\";\nvar mustBeObjectOrNull = (value) => typeof value === \"object\" && !Array.isArray(value) ? null : \"an object or null\";\nvar mustBeStringOrBoolean = (value) => typeof value === \"string\" || typeof value === \"boolean\" ? null : \"a string or a boolean\";\nvar mustBeStringOrObject = (value) => typeof value === \"string\" || typeof value === \"object\" && value !== null && !Array.isArray(value) ? null : \"a string or an object\";\nvar mustBeStringOrArrayOfStrings = (value) => typeof value === \"string\" || Array.isArray(value) && value.every((x) => typeof x === \"string\") ? null : \"a string or an array of strings\";\nvar mustBeStringOrUint8Array = (value) => typeof value === \"string\" || value instanceof Uint8Array ? null : \"a string or a Uint8Array\";\nvar mustBeStringOrURL = (value) => typeof value === \"string\" || value instanceof URL ? null : \"a string or a URL\";\nfunction getFlag(object, keys, key, mustBeFn) {\n  let value = object[key];\n  keys[key + \"\"] = true;\n  if (value === void 0) return void 0;\n  let mustBe = mustBeFn(value);\n  if (mustBe !== null) throw new Error(`${quote(key)} must be ${mustBe}`);\n  return value;\n}\nfunction checkForInvalidFlags(object, keys, where) {\n  for (let key in object) {\n    if (!(key in keys)) {\n      throw new Error(`Invalid option ${where}: ${quote(key)}`);\n    }\n  }\n}\nfunction validateInitializeOptions(options) {\n  let keys = /* @__PURE__ */ Object.create(null);\n  let wasmURL = getFlag(options, keys, \"wasmURL\", mustBeStringOrURL);\n  let wasmModule = getFlag(options, keys, \"wasmModule\", mustBeWebAssemblyModule);\n  let worker = getFlag(options, keys, \"worker\", mustBeBoolean);\n  checkForInvalidFlags(options, keys, \"in initialize() call\");\n  return {\n    wasmURL,\n    wasmModule,\n    worker\n  };\n}\nfunction validateMangleCache(mangleCache) {\n  let validated;\n  if (mangleCache !== void 0) {\n    validated = /* @__PURE__ */ Object.create(null);\n    for (let key in mangleCache) {\n      let value = mangleCache[key];\n      if (typeof value === \"string\" || value === false) {\n        validated[key] = value;\n      } else {\n        throw new Error(`Expected ${quote(key)} in mangle cache to map to either a string or false`);\n      }\n    }\n  }\n  return validated;\n}\nfunction pushLogFlags(flags, options, keys, isTTY2, logLevelDefault) {\n  let color = getFlag(options, keys, \"color\", mustBeBoolean);\n  let logLevel = getFlag(options, keys, \"logLevel\", mustBeString);\n  let logLimit = getFlag(options, keys, \"logLimit\", mustBeInteger);\n  if (color !== void 0) flags.push(`--color=${color}`);\n  else if (isTTY2) flags.push(`--color=true`);\n  flags.push(`--log-level=${logLevel || logLevelDefault}`);\n  flags.push(`--log-limit=${logLimit || 0}`);\n}\nfunction validateStringValue(value, what, key) {\n  if (typeof value !== \"string\") {\n    throw new Error(`Expected value for ${what}${key !== void 0 ? \" \" + quote(key) : \"\"} to be a string, got ${typeof value} instead`);\n  }\n  return value;\n}\nfunction pushCommonFlags(flags, options, keys) {\n  let legalComments = getFlag(options, keys, \"legalComments\", mustBeString);\n  let sourceRoot = getFlag(options, keys, \"sourceRoot\", mustBeString);\n  let sourcesContent = getFlag(options, keys, \"sourcesContent\", mustBeBoolean);\n  let target = getFlag(options, keys, \"target\", mustBeStringOrArrayOfStrings);\n  let format = getFlag(options, keys, \"format\", mustBeString);\n  let globalName = getFlag(options, keys, \"globalName\", mustBeString);\n  let mangleProps = getFlag(options, keys, \"mangleProps\", mustBeRegExp);\n  let reserveProps = getFlag(options, keys, \"reserveProps\", mustBeRegExp);\n  let mangleQuoted = getFlag(options, keys, \"mangleQuoted\", mustBeBoolean);\n  let minify = getFlag(options, keys, \"minify\", mustBeBoolean);\n  let minifySyntax = getFlag(options, keys, \"minifySyntax\", mustBeBoolean);\n  let minifyWhitespace = getFlag(options, keys, \"minifyWhitespace\", mustBeBoolean);\n  let minifyIdentifiers = getFlag(options, keys, \"minifyIdentifiers\", mustBeBoolean);\n  let lineLimit = getFlag(options, keys, \"lineLimit\", mustBeInteger);\n  let drop = getFlag(options, keys, \"drop\", mustBeArrayOfStrings);\n  let dropLabels = getFlag(options, keys, \"dropLabels\", mustBeArrayOfStrings);\n  let charset = getFlag(options, keys, \"charset\", mustBeString);\n  let treeShaking = getFlag(options, keys, \"treeShaking\", mustBeBoolean);\n  let ignoreAnnotations = getFlag(options, keys, \"ignoreAnnotations\", mustBeBoolean);\n  let jsx = getFlag(options, keys, \"jsx\", mustBeString);\n  let jsxFactory = getFlag(options, keys, \"jsxFactory\", mustBeString);\n  let jsxFragment = getFlag(options, keys, \"jsxFragment\", mustBeString);\n  let jsxImportSource = getFlag(options, keys, \"jsxImportSource\", mustBeString);\n  let jsxDev = getFlag(options, keys, \"jsxDev\", mustBeBoolean);\n  let jsxSideEffects = getFlag(options, keys, \"jsxSideEffects\", mustBeBoolean);\n  let define = getFlag(options, keys, \"define\", mustBeObject);\n  let logOverride = getFlag(options, keys, \"logOverride\", mustBeObject);\n  let supported = getFlag(options, keys, \"supported\", mustBeObject);\n  let pure = getFlag(options, keys, \"pure\", mustBeArrayOfStrings);\n  let keepNames = getFlag(options, keys, \"keepNames\", mustBeBoolean);\n  let platform = getFlag(options, keys, \"platform\", mustBeString);\n  let tsconfigRaw = getFlag(options, keys, \"tsconfigRaw\", mustBeStringOrObject);\n  let absPaths = getFlag(options, keys, \"absPaths\", mustBeArrayOfStrings);\n  if (legalComments) flags.push(`--legal-comments=${legalComments}`);\n  if (sourceRoot !== void 0) flags.push(`--source-root=${sourceRoot}`);\n  if (sourcesContent !== void 0) flags.push(`--sources-content=${sourcesContent}`);\n  if (target) flags.push(`--target=${validateAndJoinStringArray(Array.isArray(target) ? target : [target], \"target\")}`);\n  if (format) flags.push(`--format=${format}`);\n  if (globalName) flags.push(`--global-name=${globalName}`);\n  if (platform) flags.push(`--platform=${platform}`);\n  if (tsconfigRaw) flags.push(`--tsconfig-raw=${typeof tsconfigRaw === \"string\" ? tsconfigRaw : JSON.stringify(tsconfigRaw)}`);\n  if (minify) flags.push(\"--minify\");\n  if (minifySyntax) flags.push(\"--minify-syntax\");\n  if (minifyWhitespace) flags.push(\"--minify-whitespace\");\n  if (minifyIdentifiers) flags.push(\"--minify-identifiers\");\n  if (lineLimit) flags.push(`--line-limit=${lineLimit}`);\n  if (charset) flags.push(`--charset=${charset}`);\n  if (treeShaking !== void 0) flags.push(`--tree-shaking=${treeShaking}`);\n  if (ignoreAnnotations) flags.push(`--ignore-annotations`);\n  if (drop) for (let what of drop) flags.push(`--drop:${validateStringValue(what, \"drop\")}`);\n  if (dropLabels) flags.push(`--drop-labels=${validateAndJoinStringArray(dropLabels, \"drop label\")}`);\n  if (absPaths) flags.push(`--abs-paths=${validateAndJoinStringArray(absPaths, \"abs paths\")}`);\n  if (mangleProps) flags.push(`--mangle-props=${jsRegExpToGoRegExp(mangleProps)}`);\n  if (reserveProps) flags.push(`--reserve-props=${jsRegExpToGoRegExp(reserveProps)}`);\n  if (mangleQuoted !== void 0) flags.push(`--mangle-quoted=${mangleQuoted}`);\n  if (jsx) flags.push(`--jsx=${jsx}`);\n  if (jsxFactory) flags.push(`--jsx-factory=${jsxFactory}`);\n  if (jsxFragment) flags.push(`--jsx-fragment=${jsxFragment}`);\n  if (jsxImportSource) flags.push(`--jsx-import-source=${jsxImportSource}`);\n  if (jsxDev) flags.push(`--jsx-dev`);\n  if (jsxSideEffects) flags.push(`--jsx-side-effects`);\n  if (define) {\n    for (let key in define) {\n      if (key.indexOf(\"=\") >= 0) throw new Error(`Invalid define: ${key}`);\n      flags.push(`--define:${key}=${validateStringValue(define[key], \"define\", key)}`);\n    }\n  }\n  if (logOverride) {\n    for (let key in logOverride) {\n      if (key.indexOf(\"=\") >= 0) throw new Error(`Invalid log override: ${key}`);\n      flags.push(`--log-override:${key}=${validateStringValue(logOverride[key], \"log override\", key)}`);\n    }\n  }\n  if (supported) {\n    for (let key in supported) {\n      if (key.indexOf(\"=\") >= 0) throw new Error(`Invalid supported: ${key}`);\n      const value = supported[key];\n      if (typeof value !== \"boolean\") throw new Error(`Expected value for supported ${quote(key)} to be a boolean, got ${typeof value} instead`);\n      flags.push(`--supported:${key}=${value}`);\n    }\n  }\n  if (pure) for (let fn of pure) flags.push(`--pure:${validateStringValue(fn, \"pure\")}`);\n  if (keepNames) flags.push(`--keep-names`);\n}\nfunction flagsForBuildOptions(callName, options, isTTY2, logLevelDefault, writeDefault) {\n  var _a2;\n  let flags = [];\n  let entries = [];\n  let keys = /* @__PURE__ */ Object.create(null);\n  let stdinContents = null;\n  let stdinResolveDir = null;\n  pushLogFlags(flags, options, keys, isTTY2, logLevelDefault);\n  pushCommonFlags(flags, options, keys);\n  let sourcemap = getFlag(options, keys, \"sourcemap\", mustBeStringOrBoolean);\n  let bundle = getFlag(options, keys, \"bundle\", mustBeBoolean);\n  let splitting = getFlag(options, keys, \"splitting\", mustBeBoolean);\n  let preserveSymlinks = getFlag(options, keys, \"preserveSymlinks\", mustBeBoolean);\n  let metafile = getFlag(options, keys, \"metafile\", mustBeBoolean);\n  let outfile = getFlag(options, keys, \"outfile\", mustBeString);\n  let outdir = getFlag(options, keys, \"outdir\", mustBeString);\n  let outbase = getFlag(options, keys, \"outbase\", mustBeString);\n  let tsconfig = getFlag(options, keys, \"tsconfig\", mustBeString);\n  let resolveExtensions = getFlag(options, keys, \"resolveExtensions\", mustBeArrayOfStrings);\n  let nodePathsInput = getFlag(options, keys, \"nodePaths\", mustBeArrayOfStrings);\n  let mainFields = getFlag(options, keys, \"mainFields\", mustBeArrayOfStrings);\n  let conditions = getFlag(options, keys, \"conditions\", mustBeArrayOfStrings);\n  let external = getFlag(options, keys, \"external\", mustBeArrayOfStrings);\n  let packages = getFlag(options, keys, \"packages\", mustBeString);\n  let alias = getFlag(options, keys, \"alias\", mustBeObject);\n  let loader = getFlag(options, keys, \"loader\", mustBeObject);\n  let outExtension = getFlag(options, keys, \"outExtension\", mustBeObject);\n  let publicPath = getFlag(options, keys, \"publicPath\", mustBeString);\n  let entryNames = getFlag(options, keys, \"entryNames\", mustBeString);\n  let chunkNames = getFlag(options, keys, \"chunkNames\", mustBeString);\n  let assetNames = getFlag(options, keys, \"assetNames\", mustBeString);\n  let inject = getFlag(options, keys, \"inject\", mustBeArrayOfStrings);\n  let banner = getFlag(options, keys, \"banner\", mustBeObject);\n  let footer = getFlag(options, keys, \"footer\", mustBeObject);\n  let entryPoints = getFlag(options, keys, \"entryPoints\", mustBeEntryPoints);\n  let absWorkingDir = getFlag(options, keys, \"absWorkingDir\", mustBeString);\n  let stdin = getFlag(options, keys, \"stdin\", mustBeObject);\n  let write = (_a2 = getFlag(options, keys, \"write\", mustBeBoolean)) != null ? _a2 : writeDefault;\n  let allowOverwrite = getFlag(options, keys, \"allowOverwrite\", mustBeBoolean);\n  let mangleCache = getFlag(options, keys, \"mangleCache\", mustBeObject);\n  keys.plugins = true;\n  checkForInvalidFlags(options, keys, `in ${callName}() call`);\n  if (sourcemap) flags.push(`--sourcemap${sourcemap === true ? \"\" : `=${sourcemap}`}`);\n  if (bundle) flags.push(\"--bundle\");\n  if (allowOverwrite) flags.push(\"--allow-overwrite\");\n  if (splitting) flags.push(\"--splitting\");\n  if (preserveSymlinks) flags.push(\"--preserve-symlinks\");\n  if (metafile) flags.push(`--metafile`);\n  if (outfile) flags.push(`--outfile=${outfile}`);\n  if (outdir) flags.push(`--outdir=${outdir}`);\n  if (outbase) flags.push(`--outbase=${outbase}`);\n  if (tsconfig) flags.push(`--tsconfig=${tsconfig}`);\n  if (packages) flags.push(`--packages=${packages}`);\n  if (resolveExtensions) flags.push(`--resolve-extensions=${validateAndJoinStringArray(resolveExtensions, \"resolve extension\")}`);\n  if (publicPath) flags.push(`--public-path=${publicPath}`);\n  if (entryNames) flags.push(`--entry-names=${entryNames}`);\n  if (chunkNames) flags.push(`--chunk-names=${chunkNames}`);\n  if (assetNames) flags.push(`--asset-names=${assetNames}`);\n  if (mainFields) flags.push(`--main-fields=${validateAndJoinStringArray(mainFields, \"main field\")}`);\n  if (conditions) flags.push(`--conditions=${validateAndJoinStringArray(conditions, \"condition\")}`);\n  if (external) for (let name of external) flags.push(`--external:${validateStringValue(name, \"external\")}`);\n  if (alias) {\n    for (let old in alias) {\n      if (old.indexOf(\"=\") >= 0) throw new Error(`Invalid package name in alias: ${old}`);\n      flags.push(`--alias:${old}=${validateStringValue(alias[old], \"alias\", old)}`);\n    }\n  }\n  if (banner) {\n    for (let type in banner) {\n      if (type.indexOf(\"=\") >= 0) throw new Error(`Invalid banner file type: ${type}`);\n      flags.push(`--banner:${type}=${validateStringValue(banner[type], \"banner\", type)}`);\n    }\n  }\n  if (footer) {\n    for (let type in footer) {\n      if (type.indexOf(\"=\") >= 0) throw new Error(`Invalid footer file type: ${type}`);\n      flags.push(`--footer:${type}=${validateStringValue(footer[type], \"footer\", type)}`);\n    }\n  }\n  if (inject) for (let path3 of inject) flags.push(`--inject:${validateStringValue(path3, \"inject\")}`);\n  if (loader) {\n    for (let ext in loader) {\n      if (ext.indexOf(\"=\") >= 0) throw new Error(`Invalid loader extension: ${ext}`);\n      flags.push(`--loader:${ext}=${validateStringValue(loader[ext], \"loader\", ext)}`);\n    }\n  }\n  if (outExtension) {\n    for (let ext in outExtension) {\n      if (ext.indexOf(\"=\") >= 0) throw new Error(`Invalid out extension: ${ext}`);\n      flags.push(`--out-extension:${ext}=${validateStringValue(outExtension[ext], \"out extension\", ext)}`);\n    }\n  }\n  if (entryPoints) {\n    if (Array.isArray(entryPoints)) {\n      for (let i = 0, n = entryPoints.length; i < n; i++) {\n        let entryPoint = entryPoints[i];\n        if (typeof entryPoint === \"object\" && entryPoint !== null) {\n          let entryPointKeys = /* @__PURE__ */ Object.create(null);\n          let input = getFlag(entryPoint, entryPointKeys, \"in\", mustBeString);\n          let output = getFlag(entryPoint, entryPointKeys, \"out\", mustBeString);\n          checkForInvalidFlags(entryPoint, entryPointKeys, \"in entry point at index \" + i);\n          if (input === void 0) throw new Error('Missing property \"in\" for entry point at index ' + i);\n          if (output === void 0) throw new Error('Missing property \"out\" for entry point at index ' + i);\n          entries.push([output, input]);\n        } else {\n          entries.push([\"\", validateStringValue(entryPoint, \"entry point at index \" + i)]);\n        }\n      }\n    } else {\n      for (let key in entryPoints) {\n        entries.push([key, validateStringValue(entryPoints[key], \"entry point\", key)]);\n      }\n    }\n  }\n  if (stdin) {\n    let stdinKeys = /* @__PURE__ */ Object.create(null);\n    let contents = getFlag(stdin, stdinKeys, \"contents\", mustBeStringOrUint8Array);\n    let resolveDir = getFlag(stdin, stdinKeys, \"resolveDir\", mustBeString);\n    let sourcefile = getFlag(stdin, stdinKeys, \"sourcefile\", mustBeString);\n    let loader2 = getFlag(stdin, stdinKeys, \"loader\", mustBeString);\n    checkForInvalidFlags(stdin, stdinKeys, 'in \"stdin\" object');\n    if (sourcefile) flags.push(`--sourcefile=${sourcefile}`);\n    if (loader2) flags.push(`--loader=${loader2}`);\n    if (resolveDir) stdinResolveDir = resolveDir;\n    if (typeof contents === \"string\") stdinContents = encodeUTF8(contents);\n    else if (contents instanceof Uint8Array) stdinContents = contents;\n  }\n  let nodePaths = [];\n  if (nodePathsInput) {\n    for (let value of nodePathsInput) {\n      value += \"\";\n      nodePaths.push(value);\n    }\n  }\n  return {\n    entries,\n    flags,\n    write,\n    stdinContents,\n    stdinResolveDir,\n    absWorkingDir,\n    nodePaths,\n    mangleCache: validateMangleCache(mangleCache)\n  };\n}\nfunction flagsForTransformOptions(callName, options, isTTY2, logLevelDefault) {\n  let flags = [];\n  let keys = /* @__PURE__ */ Object.create(null);\n  pushLogFlags(flags, options, keys, isTTY2, logLevelDefault);\n  pushCommonFlags(flags, options, keys);\n  let sourcemap = getFlag(options, keys, \"sourcemap\", mustBeStringOrBoolean);\n  let sourcefile = getFlag(options, keys, \"sourcefile\", mustBeString);\n  let loader = getFlag(options, keys, \"loader\", mustBeString);\n  let banner = getFlag(options, keys, \"banner\", mustBeString);\n  let footer = getFlag(options, keys, \"footer\", mustBeString);\n  let mangleCache = getFlag(options, keys, \"mangleCache\", mustBeObject);\n  checkForInvalidFlags(options, keys, `in ${callName}() call`);\n  if (sourcemap) flags.push(`--sourcemap=${sourcemap === true ? \"external\" : sourcemap}`);\n  if (sourcefile) flags.push(`--sourcefile=${sourcefile}`);\n  if (loader) flags.push(`--loader=${loader}`);\n  if (banner) flags.push(`--banner=${banner}`);\n  if (footer) flags.push(`--footer=${footer}`);\n  return {\n    flags,\n    mangleCache: validateMangleCache(mangleCache)\n  };\n}\nfunction createChannel(streamIn) {\n  const requestCallbacksByKey = {};\n  const closeData = { didClose: false, reason: \"\" };\n  let responseCallbacks = {};\n  let nextRequestID = 0;\n  let nextBuildKey = 0;\n  let stdout = new Uint8Array(16 * 1024);\n  let stdoutUsed = 0;\n  let readFromStdout = (chunk) => {\n    let limit = stdoutUsed + chunk.length;\n    if (limit > stdout.length) {\n      let swap = new Uint8Array(limit * 2);\n      swap.set(stdout);\n      stdout = swap;\n    }\n    stdout.set(chunk, stdoutUsed);\n    stdoutUsed += chunk.length;\n    let offset = 0;\n    while (offset + 4 <= stdoutUsed) {\n      let length = readUInt32LE(stdout, offset);\n      if (offset + 4 + length > stdoutUsed) {\n        break;\n      }\n      offset += 4;\n      handleIncomingPacket(stdout.subarray(offset, offset + length));\n      offset += length;\n    }\n    if (offset > 0) {\n      stdout.copyWithin(0, offset, stdoutUsed);\n      stdoutUsed -= offset;\n    }\n  };\n  let afterClose = (error) => {\n    closeData.didClose = true;\n    if (error) closeData.reason = \": \" + (error.message || error);\n    const text = \"The service was stopped\" + closeData.reason;\n    for (let id in responseCallbacks) {\n      responseCallbacks[id](text, null);\n    }\n    responseCallbacks = {};\n  };\n  let sendRequest = (refs, value, callback) => {\n    if (closeData.didClose) return callback(\"The service is no longer running\" + closeData.reason, null);\n    let id = nextRequestID++;\n    responseCallbacks[id] = (error, response) => {\n      try {\n        callback(error, response);\n      } finally {\n        if (refs) refs.unref();\n      }\n    };\n    if (refs) refs.ref();\n    streamIn.writeToStdin(encodePacket({ id, isRequest: true, value }));\n  };\n  let sendResponse = (id, value) => {\n    if (closeData.didClose) throw new Error(\"The service is no longer running\" + closeData.reason);\n    streamIn.writeToStdin(encodePacket({ id, isRequest: false, value }));\n  };\n  let handleRequest = async (id, request) => {\n    try {\n      if (request.command === \"ping\") {\n        sendResponse(id, {});\n        return;\n      }\n      if (typeof request.key === \"number\") {\n        const requestCallbacks = requestCallbacksByKey[request.key];\n        if (!requestCallbacks) {\n          return;\n        }\n        const callback = requestCallbacks[request.command];\n        if (callback) {\n          await callback(id, request);\n          return;\n        }\n      }\n      throw new Error(`Invalid command: ` + request.command);\n    } catch (e) {\n      const errors = [extractErrorMessageV8(e, streamIn, null, void 0, \"\")];\n      try {\n        sendResponse(id, { errors });\n      } catch {\n      }\n    }\n  };\n  let isFirstPacket = true;\n  let handleIncomingPacket = (bytes) => {\n    if (isFirstPacket) {\n      isFirstPacket = false;\n      let binaryVersion = String.fromCharCode(...bytes);\n      if (binaryVersion !== \"0.27.0\") {\n        throw new Error(`Cannot start service: Host version \"${\"0.27.0\"}\" does not match binary version ${quote(binaryVersion)}`);\n      }\n      return;\n    }\n    let packet = decodePacket(bytes);\n    if (packet.isRequest) {\n      handleRequest(packet.id, packet.value);\n    } else {\n      let callback = responseCallbacks[packet.id];\n      delete responseCallbacks[packet.id];\n      if (packet.value.error) callback(packet.value.error, {});\n      else callback(null, packet.value);\n    }\n  };\n  let buildOrContext = ({ callName, refs, options, isTTY: isTTY2, defaultWD: defaultWD2, callback }) => {\n    let refCount = 0;\n    const buildKey = nextBuildKey++;\n    const requestCallbacks = {};\n    const buildRefs = {\n      ref() {\n        if (++refCount === 1) {\n          if (refs) refs.ref();\n        }\n      },\n      unref() {\n        if (--refCount === 0) {\n          delete requestCallbacksByKey[buildKey];\n          if (refs) refs.unref();\n        }\n      }\n    };\n    requestCallbacksByKey[buildKey] = requestCallbacks;\n    buildRefs.ref();\n    buildOrContextImpl(\n      callName,\n      buildKey,\n      sendRequest,\n      sendResponse,\n      buildRefs,\n      streamIn,\n      requestCallbacks,\n      options,\n      isTTY2,\n      defaultWD2,\n      (err, res) => {\n        try {\n          callback(err, res);\n        } finally {\n          buildRefs.unref();\n        }\n      }\n    );\n  };\n  let transform2 = ({ callName, refs, input, options, isTTY: isTTY2, fs: fs3, callback }) => {\n    const details = createObjectStash();\n    let start = (inputPath) => {\n      try {\n        if (typeof input !== \"string\" && !(input instanceof Uint8Array))\n          throw new Error('The input to \"transform\" must be a string or a Uint8Array');\n        let {\n          flags,\n          mangleCache\n        } = flagsForTransformOptions(callName, options, isTTY2, transformLogLevelDefault);\n        let request = {\n          command: \"transform\",\n          flags,\n          inputFS: inputPath !== null,\n          input: inputPath !== null ? encodeUTF8(inputPath) : typeof input === \"string\" ? encodeUTF8(input) : input\n        };\n        if (mangleCache) request.mangleCache = mangleCache;\n        sendRequest(refs, request, (error, response) => {\n          if (error) return callback(new Error(error), null);\n          let errors = replaceDetailsInMessages(response.errors, details);\n          let warnings = replaceDetailsInMessages(response.warnings, details);\n          let outstanding = 1;\n          let next = () => {\n            if (--outstanding === 0) {\n              let result = {\n                warnings,\n                code: response.code,\n                map: response.map,\n                mangleCache: void 0,\n                legalComments: void 0\n              };\n              if (\"legalComments\" in response) result.legalComments = response == null ? void 0 : response.legalComments;\n              if (response.mangleCache) result.mangleCache = response == null ? void 0 : response.mangleCache;\n              callback(null, result);\n            }\n          };\n          if (errors.length > 0) return callback(failureErrorWithLog(\"Transform failed\", errors, warnings), null);\n          if (response.codeFS) {\n            outstanding++;\n            fs3.readFile(response.code, (err, contents) => {\n              if (err !== null) {\n                callback(err, null);\n              } else {\n                response.code = contents;\n                next();\n              }\n            });\n          }\n          if (response.mapFS) {\n            outstanding++;\n            fs3.readFile(response.map, (err, contents) => {\n              if (err !== null) {\n                callback(err, null);\n              } else {\n                response.map = contents;\n                next();\n              }\n            });\n          }\n          next();\n        });\n      } catch (e) {\n        let flags = [];\n        try {\n          pushLogFlags(flags, options, {}, isTTY2, transformLogLevelDefault);\n        } catch {\n        }\n        const error = extractErrorMessageV8(e, streamIn, details, void 0, \"\");\n        sendRequest(refs, { command: \"error\", flags, error }, () => {\n          error.detail = details.load(error.detail);\n          callback(failureErrorWithLog(\"Transform failed\", [error], []), null);\n        });\n      }\n    };\n    if ((typeof input === \"string\" || input instanceof Uint8Array) && input.length > 1024 * 1024) {\n      let next = start;\n      start = () => fs3.writeFile(input, next);\n    }\n    start(null);\n  };\n  let formatMessages2 = ({ callName, refs, messages, options, callback }) => {\n    if (!options) throw new Error(`Missing second argument in ${callName}() call`);\n    let keys = {};\n    let kind = getFlag(options, keys, \"kind\", mustBeString);\n    let color = getFlag(options, keys, \"color\", mustBeBoolean);\n    let terminalWidth = getFlag(options, keys, \"terminalWidth\", mustBeInteger);\n    checkForInvalidFlags(options, keys, `in ${callName}() call`);\n    if (kind === void 0) throw new Error(`Missing \"kind\" in ${callName}() call`);\n    if (kind !== \"error\" && kind !== \"warning\") throw new Error(`Expected \"kind\" to be \"error\" or \"warning\" in ${callName}() call`);\n    let request = {\n      command: \"format-msgs\",\n      messages: sanitizeMessages(messages, \"messages\", null, \"\", terminalWidth),\n      isWarning: kind === \"warning\"\n    };\n    if (color !== void 0) request.color = color;\n    if (terminalWidth !== void 0) request.terminalWidth = terminalWidth;\n    sendRequest(refs, request, (error, response) => {\n      if (error) return callback(new Error(error), null);\n      callback(null, response.messages);\n    });\n  };\n  let analyzeMetafile2 = ({ callName, refs, metafile, options, callback }) => {\n    if (options === void 0) options = {};\n    let keys = {};\n    let color = getFlag(options, keys, \"color\", mustBeBoolean);\n    let verbose = getFlag(options, keys, \"verbose\", mustBeBoolean);\n    checkForInvalidFlags(options, keys, `in ${callName}() call`);\n    let request = {\n      command: \"analyze-metafile\",\n      metafile\n    };\n    if (color !== void 0) request.color = color;\n    if (verbose !== void 0) request.verbose = verbose;\n    sendRequest(refs, request, (error, response) => {\n      if (error) return callback(new Error(error), null);\n      callback(null, response.result);\n    });\n  };\n  return {\n    readFromStdout,\n    afterClose,\n    service: {\n      buildOrContext,\n      transform: transform2,\n      formatMessages: formatMessages2,\n      analyzeMetafile: analyzeMetafile2\n    }\n  };\n}\nfunction buildOrContextImpl(callName, buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, options, isTTY2, defaultWD2, callback) {\n  const details = createObjectStash();\n  const isContext = callName === \"context\";\n  const handleError = (e, pluginName) => {\n    const flags = [];\n    try {\n      pushLogFlags(flags, options, {}, isTTY2, buildLogLevelDefault);\n    } catch {\n    }\n    const message = extractErrorMessageV8(e, streamIn, details, void 0, pluginName);\n    sendRequest(refs, { command: \"error\", flags, error: message }, () => {\n      message.detail = details.load(message.detail);\n      callback(failureErrorWithLog(isContext ? \"Context failed\" : \"Build failed\", [message], []), null);\n    });\n  };\n  let plugins;\n  if (typeof options === \"object\") {\n    const value = options.plugins;\n    if (value !== void 0) {\n      if (!Array.isArray(value)) return handleError(new Error(`\"plugins\" must be an array`), \"\");\n      plugins = value;\n    }\n  }\n  if (plugins && plugins.length > 0) {\n    if (streamIn.isSync) return handleError(new Error(\"Cannot use plugins in synchronous API calls\"), \"\");\n    handlePlugins(\n      buildKey,\n      sendRequest,\n      sendResponse,\n      refs,\n      streamIn,\n      requestCallbacks,\n      options,\n      plugins,\n      details\n    ).then(\n      (result) => {\n        if (!result.ok) return handleError(result.error, result.pluginName);\n        try {\n          buildOrContextContinue(result.requestPlugins, result.runOnEndCallbacks, result.scheduleOnDisposeCallbacks);\n        } catch (e) {\n          handleError(e, \"\");\n        }\n      },\n      (e) => handleError(e, \"\")\n    );\n    return;\n  }\n  try {\n    buildOrContextContinue(null, (result, done) => done([], []), () => {\n    });\n  } catch (e) {\n    handleError(e, \"\");\n  }\n  function buildOrContextContinue(requestPlugins, runOnEndCallbacks, scheduleOnDisposeCallbacks) {\n    const writeDefault = streamIn.hasFS;\n    const {\n      entries,\n      flags,\n      write,\n      stdinContents,\n      stdinResolveDir,\n      absWorkingDir,\n      nodePaths,\n      mangleCache\n    } = flagsForBuildOptions(callName, options, isTTY2, buildLogLevelDefault, writeDefault);\n    if (write && !streamIn.hasFS) throw new Error(`The \"write\" option is unavailable in this environment`);\n    const request = {\n      command: \"build\",\n      key: buildKey,\n      entries,\n      flags,\n      write,\n      stdinContents,\n      stdinResolveDir,\n      absWorkingDir: absWorkingDir || defaultWD2,\n      nodePaths,\n      context: isContext\n    };\n    if (requestPlugins) request.plugins = requestPlugins;\n    if (mangleCache) request.mangleCache = mangleCache;\n    const buildResponseToResult = (response, callback2) => {\n      const result = {\n        errors: replaceDetailsInMessages(response.errors, details),\n        warnings: replaceDetailsInMessages(response.warnings, details),\n        outputFiles: void 0,\n        metafile: void 0,\n        mangleCache: void 0\n      };\n      const originalErrors = result.errors.slice();\n      const originalWarnings = result.warnings.slice();\n      if (response.outputFiles) result.outputFiles = response.outputFiles.map(convertOutputFiles);\n      if (response.metafile) result.metafile = JSON.parse(response.metafile);\n      if (response.mangleCache) result.mangleCache = response.mangleCache;\n      if (response.writeToStdout !== void 0) console.log(decodeUTF8(response.writeToStdout).replace(/\\n$/, \"\"));\n      runOnEndCallbacks(result, (onEndErrors, onEndWarnings) => {\n        if (originalErrors.length > 0 || onEndErrors.length > 0) {\n          const error = failureErrorWithLog(\"Build failed\", originalErrors.concat(onEndErrors), originalWarnings.concat(onEndWarnings));\n          return callback2(error, null, onEndErrors, onEndWarnings);\n        }\n        callback2(null, result, onEndErrors, onEndWarnings);\n      });\n    };\n    let latestResultPromise;\n    let provideLatestResult;\n    if (isContext)\n      requestCallbacks[\"on-end\"] = (id, request2) => new Promise((resolve) => {\n        buildResponseToResult(request2, (err, result, onEndErrors, onEndWarnings) => {\n          const response = {\n            errors: onEndErrors,\n            warnings: onEndWarnings\n          };\n          if (provideLatestResult) provideLatestResult(err, result);\n          latestResultPromise = void 0;\n          provideLatestResult = void 0;\n          sendResponse(id, response);\n          resolve();\n        });\n      });\n    sendRequest(refs, request, (error, response) => {\n      if (error) return callback(new Error(error), null);\n      if (!isContext) {\n        return buildResponseToResult(response, (err, res) => {\n          scheduleOnDisposeCallbacks();\n          return callback(err, res);\n        });\n      }\n      if (response.errors.length > 0) {\n        return callback(failureErrorWithLog(\"Context failed\", response.errors, response.warnings), null);\n      }\n      let didDispose = false;\n      const result = {\n        rebuild: () => {\n          if (!latestResultPromise) latestResultPromise = new Promise((resolve, reject) => {\n            let settlePromise;\n            provideLatestResult = (err, result2) => {\n              if (!settlePromise) settlePromise = () => err ? reject(err) : resolve(result2);\n            };\n            const triggerAnotherBuild = () => {\n              const request2 = {\n                command: \"rebuild\",\n                key: buildKey\n              };\n              sendRequest(refs, request2, (error2, response2) => {\n                if (error2) {\n                  reject(new Error(error2));\n                } else if (settlePromise) {\n                  settlePromise();\n                } else {\n                  triggerAnotherBuild();\n                }\n              });\n            };\n            triggerAnotherBuild();\n          });\n          return latestResultPromise;\n        },\n        watch: (options2 = {}) => new Promise((resolve, reject) => {\n          if (!streamIn.hasFS) throw new Error(`Cannot use the \"watch\" API in this environment`);\n          const keys = {};\n          const delay = getFlag(options2, keys, \"delay\", mustBeInteger);\n          checkForInvalidFlags(options2, keys, `in watch() call`);\n          const request2 = {\n            command: \"watch\",\n            key: buildKey\n          };\n          if (delay) request2.delay = delay;\n          sendRequest(refs, request2, (error2) => {\n            if (error2) reject(new Error(error2));\n            else resolve(void 0);\n          });\n        }),\n        serve: (options2 = {}) => new Promise((resolve, reject) => {\n          if (!streamIn.hasFS) throw new Error(`Cannot use the \"serve\" API in this environment`);\n          const keys = {};\n          const port = getFlag(options2, keys, \"port\", mustBeValidPortNumber);\n          const host = getFlag(options2, keys, \"host\", mustBeString);\n          const servedir = getFlag(options2, keys, \"servedir\", mustBeString);\n          const keyfile = getFlag(options2, keys, \"keyfile\", mustBeString);\n          const certfile = getFlag(options2, keys, \"certfile\", mustBeString);\n          const fallback = getFlag(options2, keys, \"fallback\", mustBeString);\n          const cors = getFlag(options2, keys, \"cors\", mustBeObject);\n          const onRequest = getFlag(options2, keys, \"onRequest\", mustBeFunction);\n          checkForInvalidFlags(options2, keys, `in serve() call`);\n          const request2 = {\n            command: \"serve\",\n            key: buildKey,\n            onRequest: !!onRequest\n          };\n          if (port !== void 0) request2.port = port;\n          if (host !== void 0) request2.host = host;\n          if (servedir !== void 0) request2.servedir = servedir;\n          if (keyfile !== void 0) request2.keyfile = keyfile;\n          if (certfile !== void 0) request2.certfile = certfile;\n          if (fallback !== void 0) request2.fallback = fallback;\n          if (cors) {\n            const corsKeys = {};\n            const origin = getFlag(cors, corsKeys, \"origin\", mustBeStringOrArrayOfStrings);\n            checkForInvalidFlags(cors, corsKeys, `on \"cors\" object`);\n            if (Array.isArray(origin)) request2.corsOrigin = origin;\n            else if (origin !== void 0) request2.corsOrigin = [origin];\n          }\n          sendRequest(refs, request2, (error2, response2) => {\n            if (error2) return reject(new Error(error2));\n            if (onRequest) {\n              requestCallbacks[\"serve-request\"] = (id, request3) => {\n                onRequest(request3.args);\n                sendResponse(id, {});\n              };\n            }\n            resolve(response2);\n          });\n        }),\n        cancel: () => new Promise((resolve) => {\n          if (didDispose) return resolve();\n          const request2 = {\n            command: \"cancel\",\n            key: buildKey\n          };\n          sendRequest(refs, request2, () => {\n            resolve();\n          });\n        }),\n        dispose: () => new Promise((resolve) => {\n          if (didDispose) return resolve();\n          didDispose = true;\n          const request2 = {\n            command: \"dispose\",\n            key: buildKey\n          };\n          sendRequest(refs, request2, () => {\n            resolve();\n            scheduleOnDisposeCallbacks();\n            refs.unref();\n          });\n        })\n      };\n      refs.ref();\n      callback(null, result);\n    });\n  }\n}\nvar handlePlugins = async (buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, initialOptions, plugins, details) => {\n  let onStartCallbacks = [];\n  let onEndCallbacks = [];\n  let onResolveCallbacks = {};\n  let onLoadCallbacks = {};\n  let onDisposeCallbacks = [];\n  let nextCallbackID = 0;\n  let i = 0;\n  let requestPlugins = [];\n  let isSetupDone = false;\n  plugins = [...plugins];\n  for (let item of plugins) {\n    let keys = {};\n    if (typeof item !== \"object\") throw new Error(`Plugin at index ${i} must be an object`);\n    const name = getFlag(item, keys, \"name\", mustBeString);\n    if (typeof name !== \"string\" || name === \"\") throw new Error(`Plugin at index ${i} is missing a name`);\n    try {\n      let setup = getFlag(item, keys, \"setup\", mustBeFunction);\n      if (typeof setup !== \"function\") throw new Error(`Plugin is missing a setup function`);\n      checkForInvalidFlags(item, keys, `on plugin ${quote(name)}`);\n      let plugin = {\n        name,\n        onStart: false,\n        onEnd: false,\n        onResolve: [],\n        onLoad: []\n      };\n      i++;\n      let resolve = (path3, options = {}) => {\n        if (!isSetupDone) throw new Error('Cannot call \"resolve\" before plugin setup has completed');\n        if (typeof path3 !== \"string\") throw new Error(`The path to resolve must be a string`);\n        let keys2 = /* @__PURE__ */ Object.create(null);\n        let pluginName = getFlag(options, keys2, \"pluginName\", mustBeString);\n        let importer = getFlag(options, keys2, \"importer\", mustBeString);\n        let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n        let resolveDir = getFlag(options, keys2, \"resolveDir\", mustBeString);\n        let kind = getFlag(options, keys2, \"kind\", mustBeString);\n        let pluginData = getFlag(options, keys2, \"pluginData\", canBeAnything);\n        let importAttributes = getFlag(options, keys2, \"with\", mustBeObject);\n        checkForInvalidFlags(options, keys2, \"in resolve() call\");\n        return new Promise((resolve2, reject) => {\n          const request = {\n            command: \"resolve\",\n            path: path3,\n            key: buildKey,\n            pluginName: name\n          };\n          if (pluginName != null) request.pluginName = pluginName;\n          if (importer != null) request.importer = importer;\n          if (namespace != null) request.namespace = namespace;\n          if (resolveDir != null) request.resolveDir = resolveDir;\n          if (kind != null) request.kind = kind;\n          else throw new Error(`Must specify \"kind\" when calling \"resolve\"`);\n          if (pluginData != null) request.pluginData = details.store(pluginData);\n          if (importAttributes != null) request.with = sanitizeStringMap(importAttributes, \"with\");\n          sendRequest(refs, request, (error, response) => {\n            if (error !== null) reject(new Error(error));\n            else resolve2({\n              errors: replaceDetailsInMessages(response.errors, details),\n              warnings: replaceDetailsInMessages(response.warnings, details),\n              path: response.path,\n              external: response.external,\n              sideEffects: response.sideEffects,\n              namespace: response.namespace,\n              suffix: response.suffix,\n              pluginData: details.load(response.pluginData)\n            });\n          });\n        });\n      };\n      let promise = setup({\n        initialOptions,\n        resolve,\n        onStart(callback) {\n          let registeredText = `This error came from the \"onStart\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onStart\");\n          onStartCallbacks.push({ name, callback, note: registeredNote });\n          plugin.onStart = true;\n        },\n        onEnd(callback) {\n          let registeredText = `This error came from the \"onEnd\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onEnd\");\n          onEndCallbacks.push({ name, callback, note: registeredNote });\n          plugin.onEnd = true;\n        },\n        onResolve(options, callback) {\n          let registeredText = `This error came from the \"onResolve\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onResolve\");\n          let keys2 = {};\n          let filter = getFlag(options, keys2, \"filter\", mustBeRegExp);\n          let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n          checkForInvalidFlags(options, keys2, `in onResolve() call for plugin ${quote(name)}`);\n          if (filter == null) throw new Error(`onResolve() call is missing a filter`);\n          let id = nextCallbackID++;\n          onResolveCallbacks[id] = { name, callback, note: registeredNote };\n          plugin.onResolve.push({ id, filter: jsRegExpToGoRegExp(filter), namespace: namespace || \"\" });\n        },\n        onLoad(options, callback) {\n          let registeredText = `This error came from the \"onLoad\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onLoad\");\n          let keys2 = {};\n          let filter = getFlag(options, keys2, \"filter\", mustBeRegExp);\n          let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n          checkForInvalidFlags(options, keys2, `in onLoad() call for plugin ${quote(name)}`);\n          if (filter == null) throw new Error(`onLoad() call is missing a filter`);\n          let id = nextCallbackID++;\n          onLoadCallbacks[id] = { name, callback, note: registeredNote };\n          plugin.onLoad.push({ id, filter: jsRegExpToGoRegExp(filter), namespace: namespace || \"\" });\n        },\n        onDispose(callback) {\n          onDisposeCallbacks.push(callback);\n        },\n        esbuild: streamIn.esbuild\n      });\n      if (promise) await promise;\n      requestPlugins.push(plugin);\n    } catch (e) {\n      return { ok: false, error: e, pluginName: name };\n    }\n  }\n  requestCallbacks[\"on-start\"] = async (id, request) => {\n    details.clear();\n    let response = { errors: [], warnings: [] };\n    await Promise.all(onStartCallbacks.map(async ({ name, callback, note }) => {\n      try {\n        let result = await callback();\n        if (result != null) {\n          if (typeof result !== \"object\") throw new Error(`Expected onStart() callback in plugin ${quote(name)} to return an object`);\n          let keys = {};\n          let errors = getFlag(result, keys, \"errors\", mustBeArray);\n          let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n          checkForInvalidFlags(result, keys, `from onStart() callback in plugin ${quote(name)}`);\n          if (errors != null) response.errors.push(...sanitizeMessages(errors, \"errors\", details, name, void 0));\n          if (warnings != null) response.warnings.push(...sanitizeMessages(warnings, \"warnings\", details, name, void 0));\n        }\n      } catch (e) {\n        response.errors.push(extractErrorMessageV8(e, streamIn, details, note && note(), name));\n      }\n    }));\n    sendResponse(id, response);\n  };\n  requestCallbacks[\"on-resolve\"] = async (id, request) => {\n    let response = {}, name = \"\", callback, note;\n    for (let id2 of request.ids) {\n      try {\n        ({ name, callback, note } = onResolveCallbacks[id2]);\n        let result = await callback({\n          path: request.path,\n          importer: request.importer,\n          namespace: request.namespace,\n          resolveDir: request.resolveDir,\n          kind: request.kind,\n          pluginData: details.load(request.pluginData),\n          with: request.with\n        });\n        if (result != null) {\n          if (typeof result !== \"object\") throw new Error(`Expected onResolve() callback in plugin ${quote(name)} to return an object`);\n          let keys = {};\n          let pluginName = getFlag(result, keys, \"pluginName\", mustBeString);\n          let path3 = getFlag(result, keys, \"path\", mustBeString);\n          let namespace = getFlag(result, keys, \"namespace\", mustBeString);\n          let suffix = getFlag(result, keys, \"suffix\", mustBeString);\n          let external = getFlag(result, keys, \"external\", mustBeBoolean);\n          let sideEffects = getFlag(result, keys, \"sideEffects\", mustBeBoolean);\n          let pluginData = getFlag(result, keys, \"pluginData\", canBeAnything);\n          let errors = getFlag(result, keys, \"errors\", mustBeArray);\n          let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n          let watchFiles = getFlag(result, keys, \"watchFiles\", mustBeArrayOfStrings);\n          let watchDirs = getFlag(result, keys, \"watchDirs\", mustBeArrayOfStrings);\n          checkForInvalidFlags(result, keys, `from onResolve() callback in plugin ${quote(name)}`);\n          response.id = id2;\n          if (pluginName != null) response.pluginName = pluginName;\n          if (path3 != null) response.path = path3;\n          if (namespace != null) response.namespace = namespace;\n          if (suffix != null) response.suffix = suffix;\n          if (external != null) response.external = external;\n          if (sideEffects != null) response.sideEffects = sideEffects;\n          if (pluginData != null) response.pluginData = details.store(pluginData);\n          if (errors != null) response.errors = sanitizeMessages(errors, \"errors\", details, name, void 0);\n          if (warnings != null) response.warnings = sanitizeMessages(warnings, \"warnings\", details, name, void 0);\n          if (watchFiles != null) response.watchFiles = sanitizeStringArray(watchFiles, \"watchFiles\");\n          if (watchDirs != null) response.watchDirs = sanitizeStringArray(watchDirs, \"watchDirs\");\n          break;\n        }\n      } catch (e) {\n        response = { id: id2, errors: [extractErrorMessageV8(e, streamIn, details, note && note(), name)] };\n        break;\n      }\n    }\n    sendResponse(id, response);\n  };\n  requestCallbacks[\"on-load\"] = async (id, request) => {\n    let response = {}, name = \"\", callback, note;\n    for (let id2 of request.ids) {\n      try {\n        ({ name, callback, note } = onLoadCallbacks[id2]);\n        let result = await callback({\n          path: request.path,\n          namespace: request.namespace,\n          suffix: request.suffix,\n          pluginData: details.load(request.pluginData),\n          with: request.with\n        });\n        if (result != null) {\n          if (typeof result !== \"object\") throw new Error(`Expected onLoad() callback in plugin ${quote(name)} to return an object`);\n          let keys = {};\n          let pluginName = getFlag(result, keys, \"pluginName\", mustBeString);\n          let contents = getFlag(result, keys, \"contents\", mustBeStringOrUint8Array);\n          let resolveDir = getFlag(result, keys, \"resolveDir\", mustBeString);\n          let pluginData = getFlag(result, keys, \"pluginData\", canBeAnything);\n          let loader = getFlag(result, keys, \"loader\", mustBeString);\n          let errors = getFlag(result, keys, \"errors\", mustBeArray);\n          let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n          let watchFiles = getFlag(result, keys, \"watchFiles\", mustBeArrayOfStrings);\n          let watchDirs = getFlag(result, keys, \"watchDirs\", mustBeArrayOfStrings);\n          checkForInvalidFlags(result, keys, `from onLoad() callback in plugin ${quote(name)}`);\n          response.id = id2;\n          if (pluginName != null) response.pluginName = pluginName;\n          if (contents instanceof Uint8Array) response.contents = contents;\n          else if (contents != null) response.contents = encodeUTF8(contents);\n          if (resolveDir != null) response.resolveDir = resolveDir;\n          if (pluginData != null) response.pluginData = details.store(pluginData);\n          if (loader != null) response.loader = loader;\n          if (errors != null) response.errors = sanitizeMessages(errors, \"errors\", details, name, void 0);\n          if (warnings != null) response.warnings = sanitizeMessages(warnings, \"warnings\", details, name, void 0);\n          if (watchFiles != null) response.watchFiles = sanitizeStringArray(watchFiles, \"watchFiles\");\n          if (watchDirs != null) response.watchDirs = sanitizeStringArray(watchDirs, \"watchDirs\");\n          break;\n        }\n      } catch (e) {\n        response = { id: id2, errors: [extractErrorMessageV8(e, streamIn, details, note && note(), name)] };\n        break;\n      }\n    }\n    sendResponse(id, response);\n  };\n  let runOnEndCallbacks = (result, done) => done([], []);\n  if (onEndCallbacks.length > 0) {\n    runOnEndCallbacks = (result, done) => {\n      (async () => {\n        const onEndErrors = [];\n        const onEndWarnings = [];\n        for (const { name, callback, note } of onEndCallbacks) {\n          let newErrors;\n          let newWarnings;\n          try {\n            const value = await callback(result);\n            if (value != null) {\n              if (typeof value !== \"object\") throw new Error(`Expected onEnd() callback in plugin ${quote(name)} to return an object`);\n              let keys = {};\n              let errors = getFlag(value, keys, \"errors\", mustBeArray);\n              let warnings = getFlag(value, keys, \"warnings\", mustBeArray);\n              checkForInvalidFlags(value, keys, `from onEnd() callback in plugin ${quote(name)}`);\n              if (errors != null) newErrors = sanitizeMessages(errors, \"errors\", details, name, void 0);\n              if (warnings != null) newWarnings = sanitizeMessages(warnings, \"warnings\", details, name, void 0);\n            }\n          } catch (e) {\n            newErrors = [extractErrorMessageV8(e, streamIn, details, note && note(), name)];\n          }\n          if (newErrors) {\n            onEndErrors.push(...newErrors);\n            try {\n              result.errors.push(...newErrors);\n            } catch {\n            }\n          }\n          if (newWarnings) {\n            onEndWarnings.push(...newWarnings);\n            try {\n              result.warnings.push(...newWarnings);\n            } catch {\n            }\n          }\n        }\n        done(onEndErrors, onEndWarnings);\n      })();\n    };\n  }\n  let scheduleOnDisposeCallbacks = () => {\n    for (const cb of onDisposeCallbacks) {\n      setTimeout(() => cb(), 0);\n    }\n  };\n  isSetupDone = true;\n  return {\n    ok: true,\n    requestPlugins,\n    runOnEndCallbacks,\n    scheduleOnDisposeCallbacks\n  };\n};\nfunction createObjectStash() {\n  const map = /* @__PURE__ */ new Map();\n  let nextID = 0;\n  return {\n    clear() {\n      map.clear();\n    },\n    load(id) {\n      return map.get(id);\n    },\n    store(value) {\n      if (value === void 0) return -1;\n      const id = nextID++;\n      map.set(id, value);\n      return id;\n    }\n  };\n}\nfunction extractCallerV8(e, streamIn, ident) {\n  let note;\n  let tried = false;\n  return () => {\n    if (tried) return note;\n    tried = true;\n    try {\n      let lines = (e.stack + \"\").split(\"\\n\");\n      lines.splice(1, 1);\n      let location = parseStackLinesV8(streamIn, lines, ident);\n      if (location) {\n        note = { text: e.message, location };\n        return note;\n      }\n    } catch {\n    }\n  };\n}\nfunction extractErrorMessageV8(e, streamIn, stash, note, pluginName) {\n  let text = \"Internal error\";\n  let location = null;\n  try {\n    text = (e && e.message || e) + \"\";\n  } catch {\n  }\n  try {\n    location = parseStackLinesV8(streamIn, (e.stack + \"\").split(\"\\n\"), \"\");\n  } catch {\n  }\n  return { id: \"\", pluginName, text, location, notes: note ? [note] : [], detail: stash ? stash.store(e) : -1 };\n}\nfunction parseStackLinesV8(streamIn, lines, ident) {\n  let at = \"    at \";\n  if (streamIn.readFileSync && !lines[0].startsWith(at) && lines[1].startsWith(at)) {\n    for (let i = 1; i < lines.length; i++) {\n      let line = lines[i];\n      if (!line.startsWith(at)) continue;\n      line = line.slice(at.length);\n      while (true) {\n        let match = /^(?:new |async )?\\S+ \\((.*)\\)$/.exec(line);\n        if (match) {\n          line = match[1];\n          continue;\n        }\n        match = /^eval at \\S+ \\((.*)\\)(?:, \\S+:\\d+:\\d+)?$/.exec(line);\n        if (match) {\n          line = match[1];\n          continue;\n        }\n        match = /^(\\S+):(\\d+):(\\d+)$/.exec(line);\n        if (match) {\n          let contents;\n          try {\n            contents = streamIn.readFileSync(match[1], \"utf8\");\n          } catch {\n            break;\n          }\n          let lineText = contents.split(/\\r\\n|\\r|\\n|\\u2028|\\u2029/)[+match[2] - 1] || \"\";\n          let column = +match[3] - 1;\n          let length = lineText.slice(column, column + ident.length) === ident ? ident.length : 0;\n          return {\n            file: match[1],\n            namespace: \"file\",\n            line: +match[2],\n            column: encodeUTF8(lineText.slice(0, column)).length,\n            length: encodeUTF8(lineText.slice(column, column + length)).length,\n            lineText: lineText + \"\\n\" + lines.slice(1).join(\"\\n\"),\n            suggestion: \"\"\n          };\n        }\n        break;\n      }\n    }\n  }\n  return null;\n}\nfunction failureErrorWithLog(text, errors, warnings) {\n  let limit = 5;\n  text += errors.length < 1 ? \"\" : ` with ${errors.length} error${errors.length < 2 ? \"\" : \"s\"}:` + errors.slice(0, limit + 1).map((e, i) => {\n    if (i === limit) return \"\\n...\";\n    if (!e.location) return `\nerror: ${e.text}`;\n    let { file, line, column } = e.location;\n    let pluginText = e.pluginName ? `[plugin: ${e.pluginName}] ` : \"\";\n    return `\n${file}:${line}:${column}: ERROR: ${pluginText}${e.text}`;\n  }).join(\"\");\n  let error = new Error(text);\n  for (const [key, value] of [[\"errors\", errors], [\"warnings\", warnings]]) {\n    Object.defineProperty(error, key, {\n      configurable: true,\n      enumerable: true,\n      get: () => value,\n      set: (value2) => Object.defineProperty(error, key, {\n        configurable: true,\n        enumerable: true,\n        value: value2\n      })\n    });\n  }\n  return error;\n}\nfunction replaceDetailsInMessages(messages, stash) {\n  for (const message of messages) {\n    message.detail = stash.load(message.detail);\n  }\n  return messages;\n}\nfunction sanitizeLocation(location, where, terminalWidth) {\n  if (location == null) return null;\n  let keys = {};\n  let file = getFlag(location, keys, \"file\", mustBeString);\n  let namespace = getFlag(location, keys, \"namespace\", mustBeString);\n  let line = getFlag(location, keys, \"line\", mustBeInteger);\n  let column = getFlag(location, keys, \"column\", mustBeInteger);\n  let length = getFlag(location, keys, \"length\", mustBeInteger);\n  let lineText = getFlag(location, keys, \"lineText\", mustBeString);\n  let suggestion = getFlag(location, keys, \"suggestion\", mustBeString);\n  checkForInvalidFlags(location, keys, where);\n  if (lineText) {\n    const relevantASCII = lineText.slice(\n      0,\n      (column && column > 0 ? column : 0) + (length && length > 0 ? length : 0) + (terminalWidth && terminalWidth > 0 ? terminalWidth : 80)\n    );\n    if (!/[\\x7F-\\uFFFF]/.test(relevantASCII) && !/\\n/.test(lineText)) {\n      lineText = relevantASCII;\n    }\n  }\n  return {\n    file: file || \"\",\n    namespace: namespace || \"\",\n    line: line || 0,\n    column: column || 0,\n    length: length || 0,\n    lineText: lineText || \"\",\n    suggestion: suggestion || \"\"\n  };\n}\nfunction sanitizeMessages(messages, property, stash, fallbackPluginName, terminalWidth) {\n  let messagesClone = [];\n  let index = 0;\n  for (const message of messages) {\n    let keys = {};\n    let id = getFlag(message, keys, \"id\", mustBeString);\n    let pluginName = getFlag(message, keys, \"pluginName\", mustBeString);\n    let text = getFlag(message, keys, \"text\", mustBeString);\n    let location = getFlag(message, keys, \"location\", mustBeObjectOrNull);\n    let notes = getFlag(message, keys, \"notes\", mustBeArray);\n    let detail = getFlag(message, keys, \"detail\", canBeAnything);\n    let where = `in element ${index} of \"${property}\"`;\n    checkForInvalidFlags(message, keys, where);\n    let notesClone = [];\n    if (notes) {\n      for (const note of notes) {\n        let noteKeys = {};\n        let noteText = getFlag(note, noteKeys, \"text\", mustBeString);\n        let noteLocation = getFlag(note, noteKeys, \"location\", mustBeObjectOrNull);\n        checkForInvalidFlags(note, noteKeys, where);\n        notesClone.push({\n          text: noteText || \"\",\n          location: sanitizeLocation(noteLocation, where, terminalWidth)\n        });\n      }\n    }\n    messagesClone.push({\n      id: id || \"\",\n      pluginName: pluginName || fallbackPluginName,\n      text: text || \"\",\n      location: sanitizeLocation(location, where, terminalWidth),\n      notes: notesClone,\n      detail: stash ? stash.store(detail) : -1\n    });\n    index++;\n  }\n  return messagesClone;\n}\nfunction sanitizeStringArray(values, property) {\n  const result = [];\n  for (const value of values) {\n    if (typeof value !== \"string\") throw new Error(`${quote(property)} must be an array of strings`);\n    result.push(value);\n  }\n  return result;\n}\nfunction sanitizeStringMap(map, property) {\n  const result = /* @__PURE__ */ Object.create(null);\n  for (const key in map) {\n    const value = map[key];\n    if (typeof value !== \"string\") throw new Error(`key ${quote(key)} in object ${quote(property)} must be a string`);\n    result[key] = value;\n  }\n  return result;\n}\nfunction convertOutputFiles({ path: path3, contents, hash }) {\n  let text = null;\n  return {\n    path: path3,\n    contents,\n    hash,\n    get text() {\n      const binary = this.contents;\n      if (text === null || binary !== contents) {\n        contents = binary;\n        text = decodeUTF8(binary);\n      }\n      return text;\n    }\n  };\n}\nfunction jsRegExpToGoRegExp(regexp) {\n  let result = regexp.source;\n  if (regexp.flags) result = `(?${regexp.flags})${result}`;\n  return result;\n}\n\n// lib/npm/node-platform.ts\nvar fs = require(\"fs\");\nvar os = require(\"os\");\nvar path = require(\"path\");\nvar ESBUILD_BINARY_PATH = process.env.ESBUILD_BINARY_PATH || ESBUILD_BINARY_PATH;\n\n// lib/npm/node.ts\nvar child_process = require(\"child_process\");\nvar crypto = require(\"crypto\");\nvar path2 = require(\"path\");\nvar fs2 = require(\"fs\");\nvar os2 = require(\"os\");\nvar tty = require(\"tty\");\nvar worker_threads;\nif (process.env.ESBUILD_WORKER_THREADS !== \"0\") {\n  try {\n    worker_threads = require(\"worker_threads\");\n  } catch {\n  }\n  let [major, minor] = process.versions.node.split(\".\");\n  if (\n    // <v12.17.0 does not work\n    +major < 12 || +major === 12 && +minor < 17 || +major === 13 && +minor < 13\n  ) {\n    worker_threads = void 0;\n  }\n}\nvar _a;\nvar isInternalWorkerThread = ((_a = worker_threads == null ? void 0 : worker_threads.workerData) == null ? void 0 : _a.esbuildVersion) === \"0.27.0\";\nvar esbuildCommandAndArgs = () => {\n  if ((!ESBUILD_BINARY_PATH || true) && (path2.basename(__filename) !== \"main.js\" || path2.basename(__dirname) !== \"lib\")) {\n    throw new Error(\n      `The esbuild JavaScript API cannot be bundled. Please mark the \"esbuild\" package as external so it's not included in the bundle.\n\nMore information: The file containing the code for esbuild's JavaScript API (${__filename}) does not appear to be inside the esbuild package on the file system, which usually means that the esbuild package was bundled into another file. This is problematic because the API needs to run a binary executable inside the esbuild package which is located using a relative path from the API code to the executable. If the esbuild package is bundled, the relative path will be incorrect and the executable won't be found.`\n    );\n  }\n  if (true) {\n    return [\"node\", [path2.join(__dirname, \"..\", \"bin\", \"esbuild\")]];\n  } else {\n    const { binPath, isWASM } = generateBinPath();\n    if (isWASM) {\n      return [\"node\", [binPath]];\n    } else {\n      return [binPath, []];\n    }\n  }\n};\nvar isTTY = () => tty.isatty(2);\nvar fsSync = {\n  readFile(tempFile, callback) {\n    try {\n      let contents = fs2.readFileSync(tempFile, \"utf8\");\n      try {\n        fs2.unlinkSync(tempFile);\n      } catch {\n      }\n      callback(null, contents);\n    } catch (err) {\n      callback(err, null);\n    }\n  },\n  writeFile(contents, callback) {\n    try {\n      let tempFile = randomFileName();\n      fs2.writeFileSync(tempFile, contents);\n      callback(tempFile);\n    } catch {\n      callback(null);\n    }\n  }\n};\nvar fsAsync = {\n  readFile(tempFile, callback) {\n    try {\n      fs2.readFile(tempFile, \"utf8\", (err, contents) => {\n        try {\n          fs2.unlink(tempFile, () => callback(err, contents));\n        } catch {\n          callback(err, contents);\n        }\n      });\n    } catch (err) {\n      callback(err, null);\n    }\n  },\n  writeFile(contents, callback) {\n    try {\n      let tempFile = randomFileName();\n      fs2.writeFile(tempFile, contents, (err) => err !== null ? callback(null) : callback(tempFile));\n    } catch {\n      callback(null);\n    }\n  }\n};\nvar version = \"0.27.0\";\nvar build = (options) => ensureServiceIsRunning().build(options);\nvar context = (buildOptions) => ensureServiceIsRunning().context(buildOptions);\nvar transform = (input, options) => ensureServiceIsRunning().transform(input, options);\nvar formatMessages = (messages, options) => ensureServiceIsRunning().formatMessages(messages, options);\nvar analyzeMetafile = (messages, options) => ensureServiceIsRunning().analyzeMetafile(messages, options);\nvar buildSync = (options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService) workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.buildSync(options);\n  }\n  let result;\n  runServiceSync((service) => service.buildOrContext({\n    callName: \"buildSync\",\n    refs: null,\n    options,\n    isTTY: isTTY(),\n    defaultWD,\n    callback: (err, res) => {\n      if (err) throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar transformSync = (input, options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService) workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.transformSync(input, options);\n  }\n  let result;\n  runServiceSync((service) => service.transform({\n    callName: \"transformSync\",\n    refs: null,\n    input,\n    options: options || {},\n    isTTY: isTTY(),\n    fs: fsSync,\n    callback: (err, res) => {\n      if (err) throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar formatMessagesSync = (messages, options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService) workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.formatMessagesSync(messages, options);\n  }\n  let result;\n  runServiceSync((service) => service.formatMessages({\n    callName: \"formatMessagesSync\",\n    refs: null,\n    messages,\n    options,\n    callback: (err, res) => {\n      if (err) throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar analyzeMetafileSync = (metafile, options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService) workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.analyzeMetafileSync(metafile, options);\n  }\n  let result;\n  runServiceSync((service) => service.analyzeMetafile({\n    callName: \"analyzeMetafileSync\",\n    refs: null,\n    metafile: typeof metafile === \"string\" ? metafile : JSON.stringify(metafile),\n    options,\n    callback: (err, res) => {\n      if (err) throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar stop = () => {\n  if (stopService) stopService();\n  if (workerThreadService) workerThreadService.stop();\n  return Promise.resolve();\n};\nvar initializeWasCalled = false;\nvar initialize = (options) => {\n  options = validateInitializeOptions(options || {});\n  if (options.wasmURL) throw new Error(`The \"wasmURL\" option only works in the browser`);\n  if (options.wasmModule) throw new Error(`The \"wasmModule\" option only works in the browser`);\n  if (options.worker) throw new Error(`The \"worker\" option only works in the browser`);\n  if (initializeWasCalled) throw new Error('Cannot call \"initialize\" more than once');\n  ensureServiceIsRunning();\n  initializeWasCalled = true;\n  return Promise.resolve();\n};\nvar defaultWD = process.cwd();\nvar longLivedService;\nvar stopService;\nvar ensureServiceIsRunning = () => {\n  if (longLivedService) return longLivedService;\n  let [command, args] = esbuildCommandAndArgs();\n  let child = child_process.spawn(command, args.concat(`--service=${\"0.27.0\"}`, \"--ping\"), {\n    windowsHide: true,\n    stdio: [\"pipe\", \"pipe\", \"inherit\"],\n    cwd: defaultWD\n  });\n  let { readFromStdout, afterClose, service } = createChannel({\n    writeToStdin(bytes) {\n      child.stdin.write(bytes, (err) => {\n        if (err) afterClose(err);\n      });\n    },\n    readFileSync: fs2.readFileSync,\n    isSync: false,\n    hasFS: true,\n    esbuild: node_exports\n  });\n  child.stdin.on(\"error\", afterClose);\n  child.on(\"error\", afterClose);\n  const stdin = child.stdin;\n  const stdout = child.stdout;\n  stdout.on(\"data\", readFromStdout);\n  stdout.on(\"end\", afterClose);\n  stopService = () => {\n    stdin.destroy();\n    stdout.destroy();\n    child.kill();\n    initializeWasCalled = false;\n    longLivedService = void 0;\n    stopService = void 0;\n  };\n  let refCount = 0;\n  child.unref();\n  if (stdin.unref) {\n    stdin.unref();\n  }\n  if (stdout.unref) {\n    stdout.unref();\n  }\n  const refs = {\n    ref() {\n      if (++refCount === 1) child.ref();\n    },\n    unref() {\n      if (--refCount === 0) child.unref();\n    }\n  };\n  longLivedService = {\n    build: (options) => new Promise((resolve, reject) => {\n      service.buildOrContext({\n        callName: \"build\",\n        refs,\n        options,\n        isTTY: isTTY(),\n        defaultWD,\n        callback: (err, res) => err ? reject(err) : resolve(res)\n      });\n    }),\n    context: (options) => new Promise((resolve, reject) => service.buildOrContext({\n      callName: \"context\",\n      refs,\n      options,\n      isTTY: isTTY(),\n      defaultWD,\n      callback: (err, res) => err ? reject(err) : resolve(res)\n    })),\n    transform: (input, options) => new Promise((resolve, reject) => service.transform({\n      callName: \"transform\",\n      refs,\n      input,\n      options: options || {},\n      isTTY: isTTY(),\n      fs: fsAsync,\n      callback: (err, res) => err ? reject(err) : resolve(res)\n    })),\n    formatMessages: (messages, options) => new Promise((resolve, reject) => service.formatMessages({\n      callName: \"formatMessages\",\n      refs,\n      messages,\n      options,\n      callback: (err, res) => err ? reject(err) : resolve(res)\n    })),\n    analyzeMetafile: (metafile, options) => new Promise((resolve, reject) => service.analyzeMetafile({\n      callName: \"analyzeMetafile\",\n      refs,\n      metafile: typeof metafile === \"string\" ? metafile : JSON.stringify(metafile),\n      options,\n      callback: (err, res) => err ? reject(err) : resolve(res)\n    }))\n  };\n  return longLivedService;\n};\nvar runServiceSync = (callback) => {\n  let [command, args] = esbuildCommandAndArgs();\n  let stdin = new Uint8Array();\n  let { readFromStdout, afterClose, service } = createChannel({\n    writeToStdin(bytes) {\n      if (stdin.length !== 0) throw new Error(\"Must run at most one command\");\n      stdin = bytes;\n    },\n    isSync: true,\n    hasFS: true,\n    esbuild: node_exports\n  });\n  callback(service);\n  let stdout = child_process.execFileSync(command, args.concat(`--service=${\"0.27.0\"}`), {\n    cwd: defaultWD,\n    windowsHide: true,\n    input: stdin,\n    // We don't know how large the output could be. If it's too large, the\n    // command will fail with ENOBUFS. Reserve 16mb for now since that feels\n    // like it should be enough. Also allow overriding this with an environment\n    // variable.\n    maxBuffer: +process.env.ESBUILD_MAX_BUFFER || 16 * 1024 * 1024\n  });\n  readFromStdout(stdout);\n  afterClose(null);\n};\nvar randomFileName = () => {\n  return path2.join(os2.tmpdir(), `esbuild-${crypto.randomBytes(32).toString(\"hex\")}`);\n};\nvar workerThreadService = null;\nvar startWorkerThreadService = (worker_threads2) => {\n  let { port1: mainPort, port2: workerPort } = new worker_threads2.MessageChannel();\n  let worker = new worker_threads2.Worker(__filename, {\n    workerData: { workerPort, defaultWD, esbuildVersion: \"0.27.0\" },\n    transferList: [workerPort],\n    // From node's documentation: https://nodejs.org/api/worker_threads.html\n    //\n    //   Take care when launching worker threads from preload scripts (scripts loaded\n    //   and run using the `-r` command line flag). Unless the `execArgv` option is\n    //   explicitly set, new Worker threads automatically inherit the command line flags\n    //   from the running process and will preload the same preload scripts as the main\n    //   thread. If the preload script unconditionally launches a worker thread, every\n    //   thread spawned will spawn another until the application crashes.\n    //\n    execArgv: []\n  });\n  let nextID = 0;\n  let fakeBuildError = (text) => {\n    let error = new Error(`Build failed with 1 error:\nerror: ${text}`);\n    let errors = [{ id: \"\", pluginName: \"\", text, location: null, notes: [], detail: void 0 }];\n    error.errors = errors;\n    error.warnings = [];\n    return error;\n  };\n  let validateBuildSyncOptions = (options) => {\n    if (!options) return;\n    let plugins = options.plugins;\n    if (plugins && plugins.length > 0) throw fakeBuildError(`Cannot use plugins in synchronous API calls`);\n  };\n  let applyProperties = (object, properties) => {\n    for (let key in properties) {\n      object[key] = properties[key];\n    }\n  };\n  let runCallSync = (command, args) => {\n    let id = nextID++;\n    let sharedBuffer = new SharedArrayBuffer(8);\n    let sharedBufferView = new Int32Array(sharedBuffer);\n    let msg = { sharedBuffer, id, command, args };\n    worker.postMessage(msg);\n    let status = Atomics.wait(sharedBufferView, 0, 0);\n    if (status !== \"ok\" && status !== \"not-equal\") throw new Error(\"Internal error: Atomics.wait() failed: \" + status);\n    let { message: { id: id2, resolve, reject, properties } } = worker_threads2.receiveMessageOnPort(mainPort);\n    if (id !== id2) throw new Error(`Internal error: Expected id ${id} but got id ${id2}`);\n    if (reject) {\n      applyProperties(reject, properties);\n      throw reject;\n    }\n    return resolve;\n  };\n  worker.unref();\n  return {\n    buildSync(options) {\n      validateBuildSyncOptions(options);\n      return runCallSync(\"build\", [options]);\n    },\n    transformSync(input, options) {\n      return runCallSync(\"transform\", [input, options]);\n    },\n    formatMessagesSync(messages, options) {\n      return runCallSync(\"formatMessages\", [messages, options]);\n    },\n    analyzeMetafileSync(metafile, options) {\n      return runCallSync(\"analyzeMetafile\", [metafile, options]);\n    },\n    stop() {\n      worker.terminate();\n      workerThreadService = null;\n    }\n  };\n};\nvar startSyncServiceWorker = () => {\n  let workerPort = worker_threads.workerData.workerPort;\n  let parentPort = worker_threads.parentPort;\n  let extractProperties = (object) => {\n    let properties = {};\n    if (object && typeof object === \"object\") {\n      for (let key in object) {\n        properties[key] = object[key];\n      }\n    }\n    return properties;\n  };\n  try {\n    let service = ensureServiceIsRunning();\n    defaultWD = worker_threads.workerData.defaultWD;\n    parentPort.on(\"message\", (msg) => {\n      (async () => {\n        let { sharedBuffer, id, command, args } = msg;\n        let sharedBufferView = new Int32Array(sharedBuffer);\n        try {\n          switch (command) {\n            case \"build\":\n              workerPort.postMessage({ id, resolve: await service.build(args[0]) });\n              break;\n            case \"transform\":\n              workerPort.postMessage({ id, resolve: await service.transform(args[0], args[1]) });\n              break;\n            case \"formatMessages\":\n              workerPort.postMessage({ id, resolve: await service.formatMessages(args[0], args[1]) });\n              break;\n            case \"analyzeMetafile\":\n              workerPort.postMessage({ id, resolve: await service.analyzeMetafile(args[0], args[1]) });\n              break;\n            default:\n              throw new Error(`Invalid command: ${command}`);\n          }\n        } catch (reject) {\n          workerPort.postMessage({ id, reject, properties: extractProperties(reject) });\n        }\n        Atomics.add(sharedBufferView, 0, 1);\n        Atomics.notify(sharedBufferView, 0, Infinity);\n      })();\n    });\n  } catch (reject) {\n    parentPort.on(\"message\", (msg) => {\n      let { sharedBuffer, id } = msg;\n      let sharedBufferView = new Int32Array(sharedBuffer);\n      workerPort.postMessage({ id, reject, properties: extractProperties(reject) });\n      Atomics.add(sharedBufferView, 0, 1);\n      Atomics.notify(sharedBufferView, 0, Infinity);\n    });\n  }\n};\nif (isInternalWorkerThread) {\n  startSyncServiceWorker();\n}\nvar node_default = node_exports;\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  analyzeMetafile,\n  analyzeMetafileSync,\n  build,\n  buildSync,\n  context,\n  formatMessages,\n  formatMessagesSync,\n  initialize,\n  stop,\n  transform,\n  transformSync,\n  version\n});\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"./Project\";\r\nimport * as esbuild from \"esbuild-wasm\";\r\nimport ITypeDefCatalog from \"../minecraft/ITypeDefCatalog\";\r\nimport { IErrorMessage, IErrorable } from \"../core/IErrorable\";\r\nimport { StatusTopic } from \"./Status\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport { FileUpdateType } from \"../storage/IFile\";\r\n\r\nexport default class ProjectBuild implements IErrorable {\r\n  private project: Project;\r\n  private mainScriptsFolder: IFolder | undefined = undefined;\r\n  private libs: ITypeDefCatalog | null = null;\r\n  private distScriptsFolder: IFolder | undefined = undefined;\r\n  private entry: string | undefined = undefined;\r\n\r\n  private static isInitialized = false;\r\n\r\n  constructor(projectIn: Project) {\r\n    this.project = projectIn;\r\n\r\n    this.loadFile = this.loadFile.bind(this);\r\n  }\r\n\r\n  isInErrorState?: boolean;\r\n  errorMessages?: IErrorMessage[];\r\n\r\n  resolveFile(resolve: esbuild.OnResolveArgs): esbuild.OnResolveResult {\r\n    if (Database.minecraftModuleNames.includes(resolve.path)) {\r\n      return {\r\n        external: true,\r\n        namespace: \"ct\",\r\n      };\r\n    }\r\n\r\n    return {\r\n      path: resolve.path,\r\n      namespace: \"ct\",\r\n    };\r\n  }\r\n\r\n  _pushError(message: string) {\r\n    this.isInErrorState = true;\r\n    if (!this.errorMessages) {\r\n      this.errorMessages = [];\r\n    }\r\n\r\n    this.errorMessages.push({ message: message });\r\n  }\r\n\r\n  _getErrorResponse(id: string, message: string) {\r\n    this._pushError(\"Project Build:\" + message);\r\n\r\n    return {\r\n      errors: [\r\n        {\r\n          id: id,\r\n          text: message,\r\n        },\r\n      ],\r\n    };\r\n  }\r\n\r\n  getTypeDefContentFor(name: string, isTs: boolean): esbuild.OnLoadResult {\r\n    if (!this.libs) {\r\n      return this._getErrorResponse(\"esb-typenotfound\", \"Could not find typedef '\" + name + \"'\");\r\n    }\r\n\r\n    for (const typeDef of this.libs.typeDefs) {\r\n      if (typeDef.name === name) {\r\n        return {\r\n          contents: typeDef.content.join(\"\\n\"),\r\n          loader: isTs ? \"ts\" : \"js\",\r\n        };\r\n      }\r\n    }\r\n\r\n    return this._getErrorResponse(\"esb-typenotfound\", \"Could not find typedef '\" + name + \"'\");\r\n  }\r\n\r\n  get isBuildable() {\r\n    return this.project && this.project.projectFolder !== undefined;\r\n  }\r\n\r\n  getHasBuildableElements() {\r\n    for (const projectItem of this.project.items) {\r\n      if (projectItem.itemType === ProjectItemType.ts) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async loadFile(build: esbuild.OnLoadArgs): Promise<esbuild.OnLoadResult> {\r\n    if (\r\n      !this.project ||\r\n      !this.project.projectFolder ||\r\n      !this.mainScriptsFolder ||\r\n      !this.distScriptsFolder ||\r\n      !this.libs\r\n    ) {\r\n      return this._getErrorResponse(\"esb-uninit\", \"Project does not have buildable elements.\");\r\n    }\r\n\r\n    if (build.path === \"@minecraft/vanilla-data\") {\r\n      return this.getTypeDefContentFor(\"@minecraft/vanilla-data\", true);\r\n    } else if (build.path === \"@minecraft/math\") {\r\n      return this.getTypeDefContentFor(\"@minecraft/math\", false);\r\n    }\r\n\r\n    let path = build.path;\r\n\r\n    if (path.startsWith(\"./\")) {\r\n      path = path.substring(1);\r\n    }\r\n\r\n    const ext = StorageUtilities.getTypeFromName(path);\r\n\r\n    if (ext === \"js\") {\r\n      path = path.substring(0, path.length - 3) + \".ts\";\r\n    } else if (ext === \"\") {\r\n      path = path + \".ts\";\r\n    }\r\n\r\n    if (!path.startsWith(\"/\")) {\r\n      return this._getErrorResponse(\"esb-importnotfound\", \"Could not find import '\" + path + \"'\");\r\n    }\r\n\r\n    let file = await this.mainScriptsFolder.ensureFileFromRelativePath(path);\r\n\r\n    // Use existing in-memory content if already loaded (it may have been modified by the editor)\r\n    // Only load from storage if not yet loaded\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent(true);\r\n    }\r\n\r\n    let content = file.content;\r\n\r\n    if (!content || typeof content !== \"string\") {\r\n      if (StorageUtilities.getTypeFromName(path) === \"ts\") {\r\n        path = path.substring(0, path.length - 3) + \".js\";\r\n\r\n        file = await this.mainScriptsFolder.ensureFileFromRelativePath(path);\r\n\r\n        // Use existing in-memory content if available\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent(true);\r\n        }\r\n        content = file.content;\r\n\r\n        if (!content || typeof content !== \"string\") {\r\n          content = \"\";\r\n        }\r\n      } else {\r\n        return this._getErrorResponse(\"esb-filenotfound\", \"Could not find file '\" + build.path + \"'\");\r\n      }\r\n    }\r\n\r\n    return {\r\n      contents: content,\r\n      loader: \"ts\",\r\n      resolveDir: StorageUtilities.getFolderPath(build.path),\r\n    };\r\n  }\r\n\r\n  async build() {\r\n    if (!this.isBuildable) {\r\n      return;\r\n    }\r\n\r\n    if (!this.getHasBuildableElements()) {\r\n      return;\r\n    }\r\n\r\n    const operId = await this.project.creatorTools.notifyOperationStarted(\r\n      \"Script building '\" + this.project.name + \"'\"\r\n    );\r\n\r\n    const defaultBehaviorPack = await this.project.getDefaultBehaviorPack();\r\n\r\n    if (defaultBehaviorPack === undefined) {\r\n      return;\r\n    }\r\n\r\n    const behaviorPackDefinition = await defaultBehaviorPack.ensureManifest();\r\n\r\n    if (!behaviorPackDefinition || !(behaviorPackDefinition instanceof BehaviorManifestDefinition)) {\r\n      return;\r\n    }\r\n\r\n    const scriptModule = behaviorPackDefinition.getScriptModule();\r\n    const libScriptsFolder = this.project.getLibScriptsFolder();\r\n    this.mainScriptsFolder = await this.project.getMainScriptsFolder();\r\n\r\n    if (scriptModule && scriptModule.entry && libScriptsFolder) {\r\n      this.libs = await Database.getLibs();\r\n\r\n      this.distScriptsFolder = await this.project.ensureDistBuildScriptsFolder();\r\n\r\n      if (this.libs) {\r\n        this.entry = scriptModule.entry;\r\n\r\n        if (this.entry.toLowerCase().startsWith(\"scripts/\")) {\r\n          this.entry = this.entry.substring(7);\r\n        }\r\n\r\n        if (!ProjectBuild.isInitialized) {\r\n          try {\r\n            // In Node.js, esbuild-wasm auto-locates its .wasm file from the\r\n            // package directory \u2014 no wasmURL needed. In browsers, wasmURL must\r\n            // point to the .wasm file served by the web server.\r\n            const isNodeJs = typeof process !== \"undefined\" && process.versions?.node;\r\n            if (isNodeJs) {\r\n              await esbuild.initialize({});\r\n            } else {\r\n              await esbuild.initialize({\r\n                wasmURL: \"./dist/esbuild-wasm/esbuild.wasm\",\r\n              });\r\n            }\r\n          } catch (e: any) {\r\n            this._pushError(\"Failed to initialize build system: \" + e.toString());\r\n            await this.project.creatorTools?.notifyOperationEnded(\r\n              operId,\r\n              \"Unable to continue script building '\" + this.project.name + \"'\",\r\n              StatusTopic.scriptBuild,\r\n              this.isInErrorState\r\n            );\r\n            return;\r\n          }\r\n\r\n          ProjectBuild.isInitialized = true;\r\n        }\r\n\r\n        const me = this;\r\n\r\n        try {\r\n          const result = await esbuild.build({\r\n            bundle: true,\r\n            entryPoints: [this.entry],\r\n            format: \"esm\",\r\n            external: Database.minecraftModuleNames,\r\n            plugins: [\r\n              {\r\n                name: \"ct\",\r\n                setup(build) {\r\n                  build.onResolve({ filter: /.*/ }, me.resolveFile);\r\n                  build.onLoad({ filter: /.*/, namespace: \"ct\" }, me.loadFile);\r\n                },\r\n              },\r\n            ],\r\n          });\r\n\r\n          if (result && result.outputFiles && result.outputFiles.length > 0) {\r\n            const mainJsFile = await this.distScriptsFolder.ensureFileFromRelativePath(this.entry);\r\n\r\n            mainJsFile.setContent(result.outputFiles[0].text, FileUpdateType.regularEdit);\r\n\r\n            await mainJsFile.saveContent();\r\n          }\r\n        } catch (e: any) {\r\n          if (!this.isInErrorState && e) {\r\n            this._pushError(e.toString());\r\n          }\r\n        }\r\n\r\n        await me.project.creatorTools?.notifyOperationEnded(\r\n          operId,\r\n          \"Completed script building '\" + this.project.name + \"'\",\r\n          StatusTopic.scriptBuild,\r\n          this.isInErrorState\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  async aggregateScripts(scriptFolder: IFolder) {\r\n    if (!scriptFolder.isLoaded) {\r\n      await scriptFolder.load();\r\n    }\r\n\r\n    let script = \"\";\r\n\r\n    for (const fileName in scriptFolder.files) {\r\n      const ext = StorageUtilities.getTypeFromName(fileName);\r\n\r\n      if (ext === \"js\") {\r\n        const scriptFile = scriptFolder.files[fileName];\r\n\r\n        if (scriptFile) {\r\n          if (!scriptFile.isContentLoaded) {\r\n            await scriptFile.loadContent();\r\n          }\r\n\r\n          if (scriptFile.content && typeof scriptFile.content === \"string\") {\r\n            script += \"// \" + fileName + \"\\n\" + scriptFile.content + \"\\n\";\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const folderName in scriptFolder.folders) {\r\n      const childFolder = scriptFolder.folders[folderName];\r\n\r\n      if (childFolder) {\r\n        const fileScript = await this.aggregateScripts(childFolder);\r\n\r\n        script += fileScript;\r\n      }\r\n    }\r\n\r\n    return script;\r\n  }\r\n\r\n  async syncToBehaviorPack(bpTargetFolder: IFolder) {\r\n    if (!this.getHasBuildableElements()) {\r\n      return;\r\n    }\r\n\r\n    const distScriptsFolder = await this.project.ensureDistBuildScriptsFolder();\r\n\r\n    const scriptsFolder = bpTargetFolder.ensureFolder(\"scripts\");\r\n\r\n    await StorageUtilities.syncFolderTo(distScriptsFolder, scriptsFolder, true, true, false, []);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../../core/Utilities\";\r\nimport CreatorToolsHost from \"../CreatorToolsHost\";\r\nimport IGalleryItem from \"../IGalleryItem\";\r\n\r\nexport default class GalleryReader {\r\n  /**\r\n   * Maps a GitHub repository name (e.g., \"minecraft-samples\") to the shortened\r\n   * local folder name used under res/samples/<owner>/. These must match the\r\n   * `replaceFirstFolderWith` values in app/reslist/*.resources.json.\r\n   *\r\n   * Falls back to the conventional `<repoName>-<branch>` pattern for unknown repos.\r\n   */\r\n  static readonly repoFolderMap: Record<string, string> = {\r\n    \"minecraft-samples\": \"samples\",\r\n    \"minecraft-scripting-samples\": \"script-samples\",\r\n    \"minecraft-gametests\": \"gametests\",\r\n  };\r\n\r\n  static getLocalRepoFolder(gitHubRepoName: string, gitHubBranch?: string): string {\r\n    return GalleryReader.repoFolderMap[gitHubRepoName] ?? gitHubRepoName + \"-\" + (gitHubBranch ?? \"main\");\r\n  }\r\n\r\n  constructor(private defaultProjectImage: string) {}\r\n\r\n  private getStandinImage() {\r\n    return this.defaultProjectImage;\r\n  }\r\n\r\n  public getGalleryImage(item: IGalleryItem) {\r\n    if (item.logoImage === undefined && item.localLogo === undefined) {\r\n      return this.getStandinImage();\r\n    }\r\n\r\n    let imagePath = item.logoImage;\r\n\r\n    if (imagePath === undefined) {\r\n      imagePath = CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/serve/resource_pack/textures/\" + item.localLogo;\r\n    }\r\n\r\n    if (item.logoImage === undefined) return imagePath;\r\n\r\n    if (item.gitHubRepoName === \"bedrock-samples\") {\r\n      imagePath = CreatorToolsHost.getVanillaContentRoot() + Utilities.ensureEndsWithSlash(\"res/latest/van/serve/\");\r\n    } else {\r\n      imagePath =\r\n        CreatorToolsHost.contentWebRoot +\r\n        \"res/samples/\" +\r\n        item.gitHubOwner +\r\n        \"/\" +\r\n        GalleryReader.getLocalRepoFolder(item.gitHubRepoName ?? \"\", item.gitHubBranch) +\r\n        \"/\";\r\n    }\r\n\r\n    imagePath += Utilities.ensureNotStartsWithSlash(item.logoImage);\r\n\r\n    return imagePath;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Project from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport MCWorld from \"./../minecraft/MCWorld\";\r\nimport StorageUtilities from \"./../storage/StorageUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./../minecraft/Database\";\r\nimport IFolder from \"./../storage/IFolder\";\r\nimport Log from \"../core/Log\";\r\nimport CreatorTools from \"./CreatorTools\";\r\nimport GitHubStorage from \"./../github/GitHubStorage\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"./../core/AppServiceProxy\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport { ProjectFocus } from \"../app/IProjectData\";\r\nimport { IWorldSettings } from \"../minecraft/IWorldSettings\";\r\nimport ProjectUpdateRunner from \"../updates/ProjectUpdateRunner\";\r\nimport CreatorToolsHost from \"./CreatorToolsHost\";\r\nimport HttpStorage from \"../storage/HttpStorage\";\r\nimport ProjectBuild from \"./ProjectBuild\";\r\nimport { Generator } from \"../minecraft/WorldLevelDat\";\r\nimport IConversionSettings from \"../core/IConversionSettings\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport ProjectUtilities from \"./ProjectUtilities\";\r\nimport telemetryService from \"../analytics/Telemetry\";\r\nimport { TelemetryEvents, TelemetryProperties, WorldDownloadProperties } from \"../analytics/TelemetryConstants\";\r\nimport GalleryReader from \"./gallery/GalleryReader\";\r\n\r\nexport const enum FolderDeploy {\r\n  retailFolders = 0,\r\n  developmentFolders = 1,\r\n  noFolders = 2,\r\n}\r\n\r\nexport const ProjectImportExclusions = [\r\n  \"build\",\r\n  \"node_modules\",\r\n  \"dist\",\r\n  \"lib\",\r\n  \".env\",\r\n  \"*/.*\",\r\n  \"out\",\r\n  \"*just.config*\",\r\n  \"*package-lock*\",\r\n  \"*.mjs*\",\r\n  \"index.json\",\r\n];\r\n\r\nexport default class ProjectExporter {\r\n  static async generateFlatBetaApisWorldWithPacksZipBytes(creatorTools: CreatorTools, project: Project, name: string) {\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null) {\r\n      Log.unexpectedNull();\r\n      return undefined;\r\n    }\r\n\r\n    const mcworld = await this.generateWorldWithPacksAndContent(project, name, undefined, {\r\n      generator: Generator.flat,\r\n      betaApisExperiment: true,\r\n    });\r\n\r\n    if (!mcworld) {\r\n      return undefined;\r\n    }\r\n\r\n    const newBytes = await mcworld.getBytes();\r\n\r\n    // Track pack info for flat world\r\n    const properties: WorldDownloadProperties = {};\r\n\r\n    const additionalPackCount = (mcworld.worldBehaviorPacks?.length || 0) + (mcworld.worldResourcePacks?.length || 0);\r\n    properties[TelemetryProperties.ADDITIONAL_PACKS_ADDED] = additionalPackCount > 0 ? additionalPackCount : undefined;\r\n\r\n    const behaviorPackUuids = mcworld.worldBehaviorPacks?.map((pack) => pack.pack_id)?.join(\";\");\r\n    properties[TelemetryProperties.BEHAVIOR_PACKS] = behaviorPackUuids || \"\";\r\n\r\n    const resourcePackUuids = mcworld.worldResourcePacks?.map((pack) => pack.pack_id)?.join(\";\");\r\n    properties[TelemetryProperties.RESOURCE_PACKS] = resourcePackUuids || \"\";\r\n\r\n    telemetryService.trackEvent({\r\n      name: TelemetryEvents.FLAT_WORLD_DOWNLOADED,\r\n      properties,\r\n    });\r\n\r\n    return newBytes;\r\n  }\r\n\r\n  static async syncProjectFromGitHub(\r\n    isNewProject: boolean,\r\n    creatorTools: CreatorTools,\r\n    gitHubRepoName: string,\r\n    gitHubOwner: string,\r\n    gitHubBranch: string | undefined,\r\n    gitHubFolder: string | undefined,\r\n    projName: string | undefined,\r\n    project: Project | undefined,\r\n    fileList: string[] | undefined,\r\n    messageUpdater?: (message: string) => Promise<void>,\r\n    dontOverwriteExistingFiles?: boolean\r\n  ) {\r\n    let gh = undefined;\r\n\r\n    // Use GalleryReader to map repo names to local folder names (e.g.,\r\n    // \"minecraft-scripting-samples\" \u2192 \"script-samples\") for bundled content.\r\n    const localRepoFolder = GalleryReader.getLocalRepoFolder(gitHubRepoName, gitHubBranch);\r\n    const localUrlExtension = \"res/samples/\" + gitHubOwner + \"/\" + localRepoFolder + \"/\" + gitHubFolder;\r\n\r\n    if (CreatorToolsHost.isWeb) {\r\n      gh = HttpStorage.get(Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) + localUrlExtension);\r\n    } else if (creatorTools.local) {\r\n      // In Node.js contexts (CLI, VS Code, Electron), use bundled samples from the\r\n      // local package instead of downloading from GitHub. This is faster, works offline,\r\n      // and avoids GitHub API rate limits for unauthenticated requests.\r\n      const localGh = creatorTools.local.createStorage(localUrlExtension);\r\n\r\n      if (localGh) {\r\n        try {\r\n          // Verify the local folder actually exists before committing to it\r\n          const exists = await localGh.rootFolder.exists();\r\n          if (exists) {\r\n            gh = localGh;\r\n          }\r\n        } catch {\r\n          // Local storage not available, will fall back to GitHub\r\n        }\r\n      }\r\n    }\r\n\r\n    // Fall back to GitHub if bundled samples aren't available\r\n    if (!gh) {\r\n      gh = new GitHubStorage(creatorTools.anonGitHub, gitHubRepoName, gitHubOwner, gitHubBranch, gitHubFolder);\r\n    }\r\n\r\n    if (!projName) {\r\n      projName = \"local \" + gitHubOwner + \" \" + gitHubRepoName;\r\n\r\n      if (gitHubFolder !== undefined) {\r\n        projName += \" \" + gitHubFolder.replace(/\\//gi, \" \");\r\n        projName = projName.replace(\" behavior_packs\", \"\");\r\n      }\r\n    }\r\n\r\n    const newProjectName = await creatorTools.getNewProjectName(projName);\r\n\r\n    if (!project) {\r\n      project = await creatorTools.createNewProject(\r\n        newProjectName,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        ProjectFocus.gameTests,\r\n        false\r\n      );\r\n    }\r\n\r\n    /*if (fileList) {\r\n      await gh.rootFolder.setStructureFromFileList(fileList);\r\n    } else {*/\r\n    await gh.rootFolder.load();\r\n    //}\r\n\r\n    const rootFolder = await project.ensureProjectFolder();\r\n\r\n    try {\r\n      await StorageUtilities.syncFolderTo(\r\n        gh.rootFolder,\r\n        rootFolder,\r\n        false,\r\n        false,\r\n        false,\r\n        ProjectImportExclusions,\r\n        undefined,\r\n        messageUpdater,\r\n        dontOverwriteExistingFiles\r\n      );\r\n    } catch (e) {\r\n      Log.error(\"Error synchronizing from GitHub:\" + (e as any).toString());\r\n    }\r\n\r\n    await rootFolder.saveAll();\r\n\r\n    if (isNewProject) {\r\n      await ProjectUtilities.renameDefaultFolders(project, projName);\r\n\r\n      project.originalGitHubOwner = gitHubOwner;\r\n      project.originalGitHubRepoName = gitHubRepoName;\r\n      project.originalGitHubBranch = gitHubBranch;\r\n      project.originalGitHubFolder = gitHubFolder;\r\n      project.originalFileList = fileList;\r\n    }\r\n\r\n    await project.inferProjectItemsFromFiles(true);\r\n\r\n    const pur = new ProjectUpdateRunner(project);\r\n\r\n    await pur.updateProject();\r\n\r\n    await project.save(true);\r\n\r\n    await creatorTools.save();\r\n\r\n    return project;\r\n  }\r\n\r\n  static async getPackFolder(folder: IFolder, seekingResource: boolean) {\r\n    await folder.load();\r\n\r\n    const manifest = folder.files[\"manifest.json\"];\r\n\r\n    if (manifest !== undefined) {\r\n      const parentFolder = folder.parentFolder;\r\n\r\n      let isResource = false;\r\n\r\n      if (parentFolder !== null) {\r\n        const name = StorageUtilities.canonicalizeName(parentFolder.name);\r\n\r\n        if (name.indexOf(\"resource\") >= 0) {\r\n          isResource = true;\r\n        }\r\n      }\r\n\r\n      if (seekingResource && isResource) {\r\n        return folder;\r\n      } else if (!seekingResource) {\r\n        return folder;\r\n      }\r\n    } else {\r\n      for (const folderName in folder.folders) {\r\n        const childFolder = folder.folders[folderName];\r\n\r\n        if (childFolder !== undefined && !childFolder.errorStatus) {\r\n          const result = (await ProjectExporter.getPackFolder(childFolder, seekingResource)) as IFolder | undefined;\r\n\r\n          if (result !== undefined) {\r\n            return result;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureWorldsFolder(rootMinecraftFolder: IFolder) {\r\n    let worldsFolder = await rootMinecraftFolder.getFolderFromRelativePath(\"/minecraftWorlds/\");\r\n\r\n    if (!worldsFolder) {\r\n      worldsFolder = await rootMinecraftFolder.getFolderFromRelativePath(\"/worlds/\");\r\n    }\r\n\r\n    if (!worldsFolder) {\r\n      worldsFolder = await rootMinecraftFolder.ensureFolderFromRelativePath(\"/minecraftWorlds/\");\r\n    }\r\n\r\n    if (!worldsFolder) {\r\n      Log.unexpectedUndefined(\"EWF\");\r\n      return undefined;\r\n    }\r\n\r\n    await worldsFolder.ensureExists();\r\n\r\n    return worldsFolder;\r\n  }\r\n\r\n  static async ensureMinecraftWorldsFolder(creatorTools: CreatorTools) {\r\n    if (!creatorTools.defaultDeploymentStorage) {\r\n      Log.unexpectedUndefined(\"EMWF\");\r\n      return undefined;\r\n    }\r\n\r\n    let isAvailable = creatorTools.defaultDeploymentStorage.available;\r\n\r\n    if (isAvailable === undefined) {\r\n      isAvailable = await creatorTools.defaultDeploymentStorage.getAvailable();\r\n    }\r\n\r\n    if (!isAvailable) {\r\n      return;\r\n    }\r\n\r\n    return await this.ensureWorldsFolder(creatorTools.defaultDeploymentStorage.rootFolder);\r\n  }\r\n\r\n  static async prepareProject(project: Project): Promise<ProjectBuild | undefined> {\r\n    await ProjectExporter.updateProjects(project);\r\n\r\n    await project.save();\r\n\r\n    const projectBuild = new ProjectBuild(project);\r\n\r\n    await projectBuild.build();\r\n\r\n    if (projectBuild.isInErrorState) {\r\n      project.appendErrors(projectBuild);\r\n      return undefined;\r\n    }\r\n\r\n    return projectBuild;\r\n  }\r\n\r\n  static async deployProject(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    deployTargetFolder: IFolder,\r\n    folderDeploy: FolderDeploy = FolderDeploy.developmentFolders\r\n  ) {\r\n    const ctProjectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (!ctProjectBuild) {\r\n      return false;\r\n    }\r\n\r\n    await ProjectExporter.deployProjectPacks(project, ctProjectBuild, deployTargetFolder, undefined, folderDeploy);\r\n\r\n    await deployTargetFolder.saveAll();\r\n\r\n    const rpFolderName =\r\n      folderDeploy === FolderDeploy.noFolders\r\n        ? undefined\r\n        : folderDeploy === FolderDeploy.developmentFolders\r\n          ? \"development_resource_packs\"\r\n          : \"resource_packs\";\r\n\r\n    if (rpFolderName) {\r\n      const targetResourcePacksFolder = deployTargetFolder.ensureFolder(rpFolderName);\r\n      const rpDeployFolderExists = await targetResourcePacksFolder.exists();\r\n\r\n      if (rpDeployFolderExists) {\r\n        await project.ensureProjectFolder();\r\n\r\n        const rpi = await project.getDefaultResourcePackFolder();\r\n\r\n        if (rpi) {\r\n          const deployProjectFolder = targetResourcePacksFolder.ensureFolder(project.name);\r\n\r\n          await deployProjectFolder.ensureExists();\r\n\r\n          await StorageUtilities.syncFolderTo(rpi, deployProjectFolder, true, true, true, [\r\n            \"/mcworlds\",\r\n            \"/minecraftWorlds\",\r\n          ]);\r\n        }\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static async deployProjectPacks(\r\n    project: Project,\r\n    projectBuild: ProjectBuild,\r\n    targetFolder: IFolder,\r\n    mcworld?: MCWorld,\r\n    useDeveloperFolders?: FolderDeploy\r\n  ) {\r\n    const bpGroupFolder =\r\n      useDeveloperFolders === FolderDeploy.noFolders\r\n        ? targetFolder\r\n        : targetFolder.ensureFolder(\r\n            useDeveloperFolders === FolderDeploy.developmentFolders ? \"development_behavior_packs\" : \"behavior_packs\"\r\n          );\r\n\r\n    await bpGroupFolder.ensureExists();\r\n\r\n    const activeBehaviorPackFolder = await project.getDefaultBehaviorPackFolder();\r\n    const scriptsFolder = await project.getMainScriptsFolder();\r\n\r\n    if (activeBehaviorPackFolder) {\r\n      const bpTargetFolder = bpGroupFolder.ensureFolder(\r\n        activeBehaviorPackFolder.ensuredName + (useDeveloperFolders === FolderDeploy.noFolders ? \"_bp\" : \"\")\r\n      );\r\n\r\n      await bpTargetFolder.ensureExists();\r\n\r\n      await StorageUtilities.syncFolderTo(activeBehaviorPackFolder, bpTargetFolder, true, true, false, [\r\n        \"mcworlds\",\r\n        \"db\",\r\n        \"level.dat\",\r\n        \"level.dat_old\",\r\n        \"levelname.txt\",\r\n        \"behavior_packs\",\r\n        \"resource_packs\",\r\n      ]);\r\n\r\n      await projectBuild.syncToBehaviorPack(bpTargetFolder);\r\n\r\n      if (scriptsFolder && scriptsFolder.parentFolder !== activeBehaviorPackFolder) {\r\n        const scriptsTargetFolder = bpTargetFolder.ensureFolder(\"scripts\");\r\n\r\n        await scriptsTargetFolder.ensureExists();\r\n\r\n        await StorageUtilities.syncFolderTo(scriptsFolder, scriptsTargetFolder, true, true, false, [\"*.ts\"]);\r\n      }\r\n\r\n      if (mcworld) {\r\n        mcworld.ensureBehaviorPack(\r\n          project.defaultBehaviorPackUniqueId,\r\n          project.defaultBehaviorPackVersion,\r\n          activeBehaviorPackFolder.name\r\n        );\r\n      }\r\n\r\n      await bpTargetFolder.saveAll();\r\n    }\r\n\r\n    const activeResourcePackFolder = await project.getDefaultResourcePackFolder();\r\n\r\n    if (activeResourcePackFolder) {\r\n      const rpGroupFolder =\r\n        useDeveloperFolders === FolderDeploy.noFolders\r\n          ? targetFolder\r\n          : targetFolder.ensureFolder(\r\n              useDeveloperFolders === FolderDeploy.developmentFolders ? \"development_resource_packs\" : \"resource_packs\"\r\n            );\r\n\r\n      await rpGroupFolder.ensureExists();\r\n\r\n      const rpTargetFolder = rpGroupFolder.ensureFolder(\r\n        activeResourcePackFolder.ensuredName + (useDeveloperFolders === FolderDeploy.noFolders ? \"_rp\" : \"\")\r\n      );\r\n\r\n      await rpTargetFolder.ensureExists();\r\n\r\n      await StorageUtilities.syncFolderTo(activeResourcePackFolder, rpTargetFolder, true, true, false, [\r\n        \"mcworlds\",\r\n        \"db\",\r\n        \"level.dat\",\r\n        \"level.dat_old\",\r\n        \"levelname.txt\",\r\n        \"behavior_packs\",\r\n        \"resource_packs\",\r\n      ]);\r\n\r\n      if (mcworld) {\r\n        mcworld.ensureResourcePack(\r\n          project.defaultResourcePackUniqueId,\r\n          project.defaultResourcePackVersion,\r\n          activeResourcePackFolder.name\r\n        );\r\n\r\n        await rpTargetFolder.saveAll();\r\n      }\r\n    }\r\n  }\r\n\r\n  static async deployAsWorldAndTestAssets(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    worldProjectItem: ProjectItem,\r\n    returnZipBytes: boolean,\r\n    deployFolder?: IFolder\r\n  ) {\r\n    let mcworld: MCWorld | undefined;\r\n\r\n    const operId = await creatorTools.notifyOperationStarted(\r\n      \"Deploying world '\" + worldProjectItem.name + \"' and test assets.\"\r\n    );\r\n\r\n    if (!worldProjectItem.isContentLoaded) {\r\n      await worldProjectItem.loadContent();\r\n    }\r\n\r\n    const itemFile = worldProjectItem.primaryFile;\r\n    if (!itemFile && !worldProjectItem.defaultFolder) {\r\n      Log.unexpectedUndefined(\"DAWATA\");\r\n      return;\r\n    }\r\n\r\n    if (worldProjectItem.defaultFolder) {\r\n      mcworld = await MCWorld.ensureMCWorldOnFolder(worldProjectItem.defaultFolder, project);\r\n    } else if (itemFile) {\r\n      mcworld = await MCWorld.ensureOnFile(itemFile, project);\r\n    }\r\n\r\n    if (!mcworld) {\r\n      Log.debugAlert(\"Could not find respective world.\");\r\n      return;\r\n    }\r\n\r\n    const projectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (!projectBuild) {\r\n      await creatorTools.notifyOperationEnded(operId, \"Packaging the world not be completed.\", undefined, true);\r\n      return;\r\n    }\r\n\r\n    const dateNow = new Date();\r\n\r\n    const title = mcworld.name + \" - \" + Utilities.getFriendlySummary(dateNow);\r\n\r\n    let targetFolder: IFolder | undefined;\r\n    let zipStorage: ZipStorage | undefined;\r\n\r\n    if (deployFolder) {\r\n      const worldsFolder = await ProjectExporter.ensureWorldsFolder(deployFolder);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DAWATAB\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(title);\r\n\r\n      await targetFolder.ensureExists();\r\n    } else if (returnZipBytes) {\r\n      zipStorage = new ZipStorage();\r\n\r\n      targetFolder = zipStorage.rootFolder;\r\n    } else {\r\n      const worldsFolder = await ProjectExporter.ensureMinecraftWorldsFolder(creatorTools);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DAWATAC\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(title);\r\n\r\n      await targetFolder.ensureExists();\r\n    }\r\n\r\n    await mcworld.syncFolderTo(targetFolder);\r\n\r\n    if (projectBuild) {\r\n      await ProjectExporter.deployProjectPacks(project, projectBuild, targetFolder, mcworld);\r\n    }\r\n\r\n    const creatorToolsProject = await Database.ensureCreatorToolsIngameProject();\r\n\r\n    if (creatorToolsProject) {\r\n      const ctProjectBuild = await ProjectExporter.prepareProject(creatorToolsProject);\r\n\r\n      if (ctProjectBuild) {\r\n        await ProjectExporter.deployProjectPacks(creatorToolsProject, ctProjectBuild, targetFolder, mcworld);\r\n      }\r\n\r\n      await mcworld.save();\r\n    }\r\n\r\n    await targetFolder.saveAll();\r\n\r\n    const newMcWorld = await MCWorld.ensureMCWorldOnFolder(targetFolder);\r\n\r\n    if (!newMcWorld) {\r\n      Log.debugAlert(\"Could not build new world.\");\r\n      return;\r\n    }\r\n\r\n    //    newMcWorld.betaApisExperiment = true;\r\n\r\n    await targetFolder.saveAll();\r\n\r\n    await newMcWorld.save();\r\n\r\n    await creatorTools.notifyOperationEnded(operId, \"World + local test assets deploy completed.\");\r\n\r\n    if (zipStorage) {\r\n      const zipBytes = await zipStorage.generateUint8ArrayAsync();\r\n\r\n      return zipBytes;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async deployAsWorld(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    worldProjectItem: ProjectItem,\r\n    returnZipBytes: boolean,\r\n    deployFolder?: IFolder\r\n  ) {\r\n    let mcworld: MCWorld | undefined;\r\n    const operId = await creatorTools.notifyOperationStarted(\"Deploying world '\" + worldProjectItem.name + \"'\");\r\n\r\n    if (!worldProjectItem.isContentLoaded) {\r\n      await worldProjectItem.loadContent();\r\n    }\r\n\r\n    if (!worldProjectItem.primaryFile && !worldProjectItem.defaultFolder) {\r\n      Log.unexpectedUndefined(\"DAWATA\");\r\n      return;\r\n    }\r\n\r\n    if (worldProjectItem.defaultFolder) {\r\n      mcworld = await MCWorld.ensureMCWorldOnFolder(worldProjectItem.defaultFolder, project);\r\n    } else if (worldProjectItem.primaryFile) {\r\n      mcworld = await MCWorld.ensureOnFile(worldProjectItem.primaryFile, project);\r\n    }\r\n\r\n    if (!mcworld) {\r\n      Log.debugAlert(\"Could not find respective world.\");\r\n      return;\r\n    }\r\n\r\n    const projectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (!projectBuild) {\r\n      await creatorTools.notifyOperationEnded(operId, \"Packaging the world not be completed.\", undefined, true);\r\n      return;\r\n    }\r\n\r\n    const dateNow = new Date();\r\n\r\n    const title = mcworld.name + \" - \" + Utilities.getFriendlySummary(dateNow);\r\n\r\n    let targetFolder: IFolder | undefined;\r\n    let zipStorage: ZipStorage | undefined;\r\n\r\n    if (deployFolder) {\r\n      const worldsFolder = await ProjectExporter.ensureWorldsFolder(deployFolder);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DAWATAB\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(title);\r\n\r\n      await targetFolder.ensureExists();\r\n    } else if (returnZipBytes) {\r\n      zipStorage = new ZipStorage();\r\n\r\n      targetFolder = zipStorage.rootFolder;\r\n    } else {\r\n      const worldsFolder = await ProjectExporter.ensureMinecraftWorldsFolder(creatorTools);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DAWATAC\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(title);\r\n\r\n      await targetFolder.ensureExists();\r\n    }\r\n\r\n    await mcworld.syncFolderTo(targetFolder);\r\n\r\n    await targetFolder.saveAll();\r\n\r\n    await creatorTools.notifyOperationEnded(operId, \"World + local assets deploy completed.\");\r\n\r\n    if (zipStorage) {\r\n      const zipBytes = await zipStorage.generateUint8ArrayAsync();\r\n\r\n      return zipBytes;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n  static async updateProjects(project: Project) {\r\n    const pur = new ProjectUpdateRunner(project);\r\n\r\n    await pur.updateProject([\"SCRIPTMODULE\"]);\r\n  }\r\n\r\n  static async generateWorldWithPacks(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    worldSettings: IWorldSettings,\r\n    targetFolder?: IFolder\r\n  ) {\r\n    const operId = await creatorTools.notifyOperationStarted(\"Generating world and packs for '\" + project.name + \"'.\");\r\n\r\n    const projectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (projectBuild === undefined) {\r\n      await creatorTools.notifyOperationEnded(operId);\r\n      return;\r\n    }\r\n\r\n    let mcworld = undefined;\r\n\r\n    if (targetFolder === undefined) {\r\n      mcworld = new MCWorld();\r\n\r\n      mcworld.ensureZipStorage();\r\n\r\n      targetFolder = mcworld.effectiveRootFolder;\r\n\r\n      if (targetFolder === undefined) {\r\n        Log.throwUnexpectedUndefined(\"PEPW\");\r\n        return;\r\n      }\r\n    } else {\r\n      mcworld = await MCWorld.ensureMCWorldOnFolder(targetFolder);\r\n    }\r\n\r\n    if (!mcworld) {\r\n      Log.debugAlert(\"Could not find respective world.\");\r\n      return;\r\n    }\r\n\r\n    await mcworld.loadMetaFiles(false);\r\n\r\n    await mcworld.applyWorldSettings(worldSettings);\r\n\r\n    await ProjectExporter.ensureExperimentsEnabledOnWorld(mcworld, project);\r\n\r\n    if (projectBuild) {\r\n      await ProjectExporter.deployProjectPacks(project, projectBuild, targetFolder, mcworld);\r\n    }\r\n\r\n    mcworld.name = project.name;\r\n\r\n    await targetFolder.saveAll();\r\n\r\n    await mcworld.save();\r\n\r\n    const properties: WorldDownloadProperties = {};\r\n\r\n    const additionalPackCount = (mcworld.worldBehaviorPacks?.length || 0) + (mcworld.worldResourcePacks?.length || 0);\r\n    properties[TelemetryProperties.ADDITIONAL_PACKS_ADDED] = additionalPackCount > 0 ? additionalPackCount : undefined;\r\n\r\n    const behaviorPackUuids = mcworld.worldBehaviorPacks?.map((pack) => pack.pack_id)?.join(\";\");\r\n    properties[TelemetryProperties.BEHAVIOR_PACKS] = behaviorPackUuids || \"\";\r\n\r\n    const resourcePackUuids = mcworld.worldResourcePacks?.map((pack) => pack.pack_id)?.join(\";\");\r\n    properties[TelemetryProperties.RESOURCE_PACKS] = resourcePackUuids || \"\";\r\n\r\n    const levelDat = mcworld.levelData;\r\n    if (levelDat) {\r\n      properties[TelemetryProperties.GAME_TYPE] = levelDat.gameType;\r\n      properties[TelemetryProperties.DIFFICULTY] = levelDat.difficulty;\r\n      properties[TelemetryProperties.MAP_STYLE] = levelDat.generator ?? (levelDat.flatWorldLayers ? \"flat\" : undefined);\r\n      properties[TelemetryProperties.SEED] = levelDat.randomSeed;\r\n    }\r\n\r\n    properties[TelemetryProperties.WORLD_TEMPLATE_USED] = worldSettings?.worldTemplateReferences?.length\r\n      ? true\r\n      : undefined;\r\n\r\n    telemetryService.trackEvent({\r\n      name: TelemetryEvents.CUSTOM_WORLD_DOWNLOADED,\r\n      properties,\r\n    });\r\n\r\n    await creatorTools.notifyOperationEnded(\r\n      operId,\r\n      \"World + local assets generation for '\" + targetFolder.fullPath + \"' completed.\"\r\n    );\r\n\r\n    return mcworld;\r\n  }\r\n\r\n  static async deployProjectAndGeneratedWorldTo(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    worldSettings: IWorldSettings,\r\n    deployFolder: IFolder\r\n  ) {\r\n    const operId = await creatorTools.notifyOperationStarted(\r\n      \"Deploying project '\" + project.name + \"' plus world and test assets.\"\r\n    );\r\n\r\n    await project.ensureLoadedProjectFolder();\r\n\r\n    const worldFolderName = project.deployWorldId;\r\n    const title = project.name + \" Test World\";\r\n\r\n    let targetFolder: IFolder | undefined;\r\n\r\n    if (deployFolder) {\r\n      const worldsFolder = await ProjectExporter.ensureWorldsFolder(deployFolder);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DPWATAD\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(worldFolderName);\r\n\r\n      await targetFolder.ensureExists();\r\n    } else {\r\n      const worldsFolder = await ProjectExporter.ensureMinecraftWorldsFolder(creatorTools);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DPWATAE\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(worldFolderName);\r\n\r\n      await targetFolder.ensureExists();\r\n    }\r\n\r\n    const mcworld = await ProjectExporter.generateWorldWithPacks(creatorTools, project, worldSettings, targetFolder);\r\n\r\n    if (mcworld) {\r\n      await targetFolder.saveAll();\r\n\r\n      await mcworld.save();\r\n    }\r\n\r\n    await project.save();\r\n\r\n    await creatorTools.notifyOperationEnded(\r\n      operId,\r\n      \"World + local assets deploy to '\" + targetFolder.fullPath + \"' completed.\"\r\n    );\r\n\r\n    return title;\r\n  }\r\n\r\n  static async deployAsFlatPackRefWorld(creatorTools: CreatorTools, project: Project) {\r\n    await creatorTools.notifyStatusUpdate(\"Saving...\");\r\n    await ProjectExporter.updateProjects(project);\r\n\r\n    await project.save();\r\n    await creatorTools.notifyStatusUpdate(\"Saved\");\r\n\r\n    let deployTarget = creatorTools.defaultDeploymentTarget;\r\n\r\n    // only do an explicit deploy here autodeployment is not turned on; otherwise, deployment should happen in the save() above.\r\n    if (\r\n      //  project.autoDeploymentMode !== ProjectAutoDeploymntMode.deployOnSave &&\r\n      deployTarget &&\r\n      deployTarget.deployBehaviorPacksFolder !== null &&\r\n      creatorTools.activeMinecraft\r\n    ) {\r\n      await creatorTools.notifyStatusUpdate(\"Deploying pack add-ons\");\r\n      creatorTools.activeMinecraft.syncWithDeployment();\r\n      await creatorTools.notifyStatusUpdate(\"Deployed\");\r\n    }\r\n\r\n    const hash = project.defaultBehaviorPackUniqueId + \"|\";\r\n\r\n    if (\r\n      (project.lastMapDeployedHash === undefined || project.lastMapDeployedHash !== hash) &&\r\n      creatorTools.workingStorage !== null\r\n    ) {\r\n      await ProjectExporter.generateAndInvokeFlatPackRefMCWorld(creatorTools, project);\r\n\r\n      project.lastMapDeployedHash = hash;\r\n      project.lastMapDeployedDate = new Date();\r\n    }\r\n  }\r\n\r\n  static async convertWorld(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    settings: IConversionSettings,\r\n    world?: MCWorld\r\n  ) {\r\n    if (!world) {\r\n      return;\r\n    }\r\n\r\n    if (creatorTools.workingStorage === null) {\r\n      Log.fail(\"Did not find expected working storage.\");\r\n      return;\r\n    }\r\n    const dtNow = new Date();\r\n    const tempWorkingPathName = \"WorldConvert\" + Utilities.getDateStr(dtNow);\r\n\r\n    const workingFolder = creatorTools.workingStorage.rootFolder.ensureFolder(tempWorkingPathName);\r\n\r\n    await workingFolder.ensureExists();\r\n\r\n    if (world) {\r\n      const inputFolder = workingFolder.ensureFolder(\"source-\" + settings.name);\r\n\r\n      await inputFolder.ensureExists();\r\n\r\n      await world.copyAsFolderTo(inputFolder);\r\n    }\r\n\r\n    const jsonContent = JSON.stringify(settings);\r\n\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.convertFile, jsonContent, true);\r\n\r\n    await workingFolder.load(true);\r\n\r\n    if (workingFolder.folderExists(settings.name)) {\r\n      const outputFolder = workingFolder.ensureFolder(settings.name);\r\n\r\n      const zs = new ZipStorage();\r\n\r\n      await StorageUtilities.syncFolderTo(outputFolder, zs.rootFolder, false, false, false);\r\n\r\n      const resultBytes = await zs.generateCompressedUint8ArrayAsync();\r\n\r\n      return resultBytes;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async syncFlatPackRefWorldTo(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    worldFolder: IFolder,\r\n    name: string\r\n  ) {\r\n    if (creatorTools.workingStorage === null) {\r\n      Log.fail(\"Did not find expected working storage.\");\r\n      return;\r\n    }\r\n\r\n    const mcworld = await ProjectExporter.generateFlatGameTestWorldWithPackRefs(project, name);\r\n\r\n    if (mcworld !== undefined) {\r\n      // Log.debugAlert(\"Synchronizing '\" + worldFolder.name + \"' with '\" + worldFolder.files.length + \"' files\");\r\n\r\n      await mcworld.syncFolderTo(worldFolder);\r\n    } else {\r\n      Log.fail(\"Could not retrieve flat game test world\");\r\n    }\r\n  }\r\n\r\n  static async generateAndInvokeFlatPackRefMCWorld(creatorTools: CreatorTools, project: Project) {\r\n    if (creatorTools.workingStorage === null) {\r\n      Log.fail(\"Did not find expected working storage.\");\r\n      return;\r\n    }\r\n\r\n    const fileName = project.name + \" flatpack.mcworld\";\r\n    const name = project.name + \" Flat\";\r\n\r\n    const mcworld = await ProjectExporter.generateFlatGameTestWorldWithPackRefs(project, name);\r\n\r\n    if (mcworld !== undefined) {\r\n      const newBytes = await mcworld.getBytes();\r\n\r\n      if (newBytes !== undefined) {\r\n        const file = creatorTools.workingStorage.rootFolder.ensureFile(fileName);\r\n\r\n        file.setContent(newBytes);\r\n\r\n        await file.saveContent();\r\n\r\n        if (AppServiceProxy.hasAppService) {\r\n          await AppServiceProxy.sendAsync(AppServiceProxyCommands.shellOpenPath, file.fullPath);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async generateFlatGameTestWorldWithPackRefs(project: Project, worldName: string) {\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    const file = Database.contentFolder.ensureFile(\"flatcreativegt.mcworld\");\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    if (file.content instanceof Uint8Array) {\r\n      const mcworld = await this.generateBetaApisWorldWithPackRefs(project, worldName, file.content);\r\n\r\n      return mcworld;\r\n    }\r\n\r\n    Log.fail(\"Unexpectedly could not find default content.\");\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async generateMCAddonAsZip(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    returnAsBlob: boolean\r\n  ): Promise<Blob | Uint8Array | undefined> {\r\n    const operId = await creatorTools.notifyOperationStarted(\"Exporting '\" + project.name + \"' as MCPack\");\r\n\r\n    const zipStorage = new ZipStorage();\r\n\r\n    const projectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (!projectBuild) {\r\n      return undefined;\r\n    }\r\n\r\n    await ProjectExporter.deployProjectPacks(\r\n      project,\r\n      projectBuild,\r\n      zipStorage.rootFolder,\r\n      undefined,\r\n      FolderDeploy.noFolders\r\n    );\r\n\r\n    await zipStorage.rootFolder.saveAll();\r\n\r\n    if (returnAsBlob) {\r\n      const zipBinary = await zipStorage.generateBlobAsync();\r\n\r\n      await creatorTools.notifyOperationEnded(\r\n        operId,\r\n        \"Export MCPack of '\" + project.name + \"' created; downloading...\"\r\n      );\r\n\r\n      return zipBinary;\r\n    } else {\r\n      const zipBytes = await zipStorage.generateUint8ArrayAsync();\r\n\r\n      return zipBytes;\r\n    }\r\n  }\r\n\r\n  static async generateWorldWithPacksAndContent(\r\n    project: Project,\r\n    worldName: string,\r\n    worldContent?: Uint8Array,\r\n    worldSettings?: IWorldSettings\r\n  ): Promise<MCWorld | undefined> {\r\n    await project.ensureLoadedProjectFolder();\r\n\r\n    const mcworld = new MCWorld();\r\n\r\n    if (worldContent) {\r\n      mcworld.loadFromBytes(worldContent);\r\n    } else if (!worldSettings) {\r\n      const levelDat = mcworld.ensureLevelData();\r\n      levelDat.ensureDefaults();\r\n    }\r\n\r\n    if (worldSettings) {\r\n      mcworld.applyWorldSettings(worldSettings);\r\n    }\r\n\r\n    mcworld.project = project;\r\n\r\n    const projectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (!projectBuild) {\r\n      return undefined;\r\n    }\r\n\r\n    await this.ensureExperimentsEnabledOnWorld(mcworld, project);\r\n\r\n    mcworld.name = worldName;\r\n\r\n    await ProjectExporter.deployProjectPacks(project, projectBuild, mcworld.storage.rootFolder, mcworld);\r\n\r\n    return mcworld;\r\n  }\r\n\r\n  static async ensureExperimentsEnabledOnWorld(mcworld: MCWorld, project: Project) {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        const itemFile = projectItem.primaryFile;\r\n\r\n        if (itemFile) {\r\n          if (!itemFile.isContentLoaded) {\r\n            await itemFile.loadContent();\r\n          }\r\n\r\n          let content = itemFile.content;\r\n\r\n          if (typeof content === \"string\" && content.indexOf(\"-beta\") >= 0) {\r\n            mcworld.betaApisExperiment = true;\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        const itemFile = projectItem.primaryFile;\r\n        if (itemFile) {\r\n          if (!itemFile.isContentLoaded) {\r\n            await itemFile.loadContent();\r\n          }\r\n\r\n          let content = itemFile.content;\r\n\r\n          if (typeof content === \"string\" && content.indexOf(\"pbr\") >= 0 && content.indexOf(\"capabilities\") >= 0) {\r\n            mcworld.deferredTechnicalPreviewExperiment = true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async generateBetaApisWorldWithPackRefs(\r\n    project: Project,\r\n    worldName: string,\r\n    worldContent: Uint8Array\r\n  ): Promise<MCWorld> {\r\n    const mcworld = new MCWorld();\r\n    mcworld.project = project;\r\n\r\n    await mcworld.loadFromBytes(worldContent);\r\n\r\n    const behaviorPackFolder = await project.getDefaultBehaviorPackFolder();\r\n\r\n    if (behaviorPackFolder !== null) {\r\n      mcworld.ensureBehaviorPack(project.defaultBehaviorPackUniqueId, project.defaultBehaviorPackVersion, project.name);\r\n    }\r\n\r\n    const resourcePackFolder = await project.getDefaultResourcePackFolder();\r\n    if (resourcePackFolder !== null) {\r\n      mcworld.ensureResourcePack(project.defaultResourcePackUniqueId, project.defaultResourcePackVersion, project.name);\r\n    }\r\n\r\n    mcworld.betaApisExperiment = true;\r\n    mcworld.name = worldName;\r\n\r\n    return mcworld;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * CreateCommand - Create a new Minecraft project\r\n *\r\n * This ToolCommand provides project creation capabilities across all surfaces.\r\n * It uses the same core libraries as the CLI CreateCommand but without\r\n * the interactive prompting logic.\r\n *\r\n * The command creates a project from a template, syncing content from GitHub.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { projectTemplateProvider } from \"../AutocompleteProviders\";\r\nimport { GalleryItemType } from \"../../IGalleryItem\";\r\nimport ProjectExporter from \"../../ProjectExporter\";\r\nimport ProjectUtilities from \"../../ProjectUtilities\";\r\nimport Project, { ProjectAutoDeploymentMode } from \"../../Project\";\r\nimport { ProjectFocus } from \"../../IProjectData\";\r\n\r\nexport class CreateCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"create\",\r\n    description: \"Create a new Minecraft project from a template\",\r\n    aliases: [\"c\", \"new\"],\r\n    category: \"Project\",\r\n    arguments: [\r\n      {\r\n        name: \"template\",\r\n        description: \"Template ID (e.g., addonstarter, tsstarter, addonfull)\",\r\n        type: \"choice\",\r\n        required: false,\r\n        defaultValue: \"addonstarter\",\r\n        autocompleteProvider: projectTemplateProvider,\r\n      },\r\n      {\r\n        name: \"name\",\r\n        description: \"Project name\",\r\n        type: \"string\",\r\n        required: false,\r\n        defaultValue: \"my-project\",\r\n      },\r\n    ],\r\n    flags: [\r\n      {\r\n        name: \"creator\",\r\n        shortName: \"c\",\r\n        description: \"Creator name for the project\",\r\n        type: \"string\",\r\n        defaultValue: \"Creator\",\r\n      },\r\n      {\r\n        name: \"description\",\r\n        shortName: \"d\",\r\n        description: \"Project description\",\r\n        type: \"string\",\r\n      },\r\n      {\r\n        name: \"output\",\r\n        shortName: \"o\",\r\n        description: \"Output folder path\",\r\n        type: \"path\",\r\n      },\r\n    ],\r\n    isWriteCommand: true,\r\n    examples: [\r\n      \"/create\",\r\n      \"/create addonstarter my-addon\",\r\n      \"/create tsstarter my-ts-project --creator MyName\",\r\n      '/create addonfull my-full-addon --description \"A complete addon\"',\r\n    ],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const templateId = args[0] || \"addonstarter\";\r\n    const projectName = args[1] || \"my-project\";\r\n    const creator = (flags.creator as string) || \"Creator\";\r\n    const description = (flags.description as string) || projectName;\r\n    const outputPath = flags.output as string | undefined;\r\n\r\n    if (!context.creatorTools) {\r\n      return this.error(\"NO_CREATOR_TOOLS\", \"No CreatorTools instance available.\");\r\n    }\r\n\r\n    const creatorTools = context.creatorTools;\r\n\r\n    // Load gallery to find template\r\n    await creatorTools.loadGallery();\r\n\r\n    if (!creatorTools.gallery) {\r\n      return this.error(\"GALLERY_ERROR\", \"Could not load project gallery\");\r\n    }\r\n\r\n    // Find the template\r\n    const galProject = await creatorTools.getGalleryProjectById(templateId);\r\n\r\n    if (!galProject) {\r\n      // List available templates\r\n      const projects = creatorTools.getGalleryProjectByType(GalleryItemType.project) || [];\r\n      const available = projects.map((p) => p.id).join(\", \");\r\n      return this.error(\"TEMPLATE_NOT_FOUND\", `Template '${templateId}' not found. Available: ${available}`);\r\n    }\r\n\r\n    context.output.info(`Creating project '${projectName}' from template '${galProject.title}'...`);\r\n\r\n    // Determine output location\r\n    let project: Project;\r\n\r\n    if (outputPath) {\r\n      // Use specified output path\r\n      project = new Project(creatorTools, projectName, null);\r\n      project.localFolderPath = outputPath;\r\n      project.autoDeploymentMode = ProjectAutoDeploymentMode.noAutoDeployment;\r\n    } else if (context.project) {\r\n      // Use current project folder if available\r\n      project = context.project;\r\n    } else {\r\n      // Create in projects storage\r\n      const newProjectName = await creatorTools.getNewProjectName(projectName);\r\n      project = await creatorTools.createNewProject(\r\n        newProjectName,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        ProjectFocus.general,\r\n        false,\r\n        undefined\r\n      );\r\n    }\r\n\r\n    if (!project) {\r\n      return this.error(\"PROJECT_ERROR\", \"Could not create project\");\r\n    }\r\n\r\n    try {\r\n      // Sync from GitHub\r\n      project = await ProjectExporter.syncProjectFromGitHub(\r\n        true,\r\n        creatorTools,\r\n        galProject.gitHubRepoName,\r\n        galProject.gitHubOwner,\r\n        galProject.gitHubBranch,\r\n        galProject.gitHubFolder,\r\n        projectName,\r\n        project,\r\n        galProject.fileList,\r\n        async (message: string) => {\r\n          context.output.debug(message);\r\n        },\r\n        true\r\n      );\r\n\r\n      // Apply customizations\r\n      if (creator) {\r\n        await ProjectUtilities.applyCreator(project, creator);\r\n      }\r\n\r\n      const suggestedShortName = ProjectUtilities.getSuggestedProjectShortName(creator, projectName);\r\n      await ProjectUtilities.processNewProject(project, projectName, description, suggestedShortName, false);\r\n\r\n      await project.save();\r\n\r\n      // Set context.project so the UI navigates into the newly created project\r\n      context.project = project;\r\n\r\n      const projectPath = project.projectFolder?.fullPath || project.localFolderPath || \"unknown location\";\r\n      context.output.success(`Project created at: ${projectPath}`);\r\n\r\n      return this.success(`Project '${projectName}' created successfully`, {\r\n        projectPath,\r\n        template: galProject.id,\r\n        name: projectName,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"CREATE_ERROR\", `Failed to create project: ${message}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Custom completions for template argument.\r\n   */\r\n  async getCompletions(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    if (argIndex === 0) {\r\n      // Complete template names\r\n      return projectTemplateProvider(partialArg, context);\r\n    }\r\n    return [];\r\n  }\r\n}\r\n\r\nexport const createCommand = new CreateCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ImageCodec from \"../core/ImageCodec\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\n/**\r\n * Pre-encoded placeholder PNG textures as base64.\r\n * These are small, simple solid-color textures that work in all environments.\r\n * Generated using MCP writeImageFileFromPixelArt tool.\r\n */\r\nconst PLACEHOLDER_TEXTURES = {\r\n  // 64x64 gray solid for entities\r\n  entity:\r\n    \"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAeElEQVR4AeXBAQEAMAyDMI7yOt+FkLxtR5jESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzEfbNUAv/+T/uYAAAAAElFTkSuQmCC\",\r\n\r\n  // 16x16 gray solid for blocks\r\n  block:\r\n    \"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAALElEQVR4AaXBAQEAMAyDMI7yOt9FkLxtRyCRRBJJJJFEEkkkkUQSSSSRRBJ9YpoCnyiF6V0AAAAASUVORK5CYII=\",\r\n\r\n  // 16x16 light gray solid for items\r\n  item: \"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAALUlEQVR4AaXBAQEAMAyDMI5/EXW6iyB5245AIokkkkgiiSSSSCKJJJJIIokk+ufpAv+MBfj8AAAAAElFTkSuQmCC\",\r\n};\r\n\r\nexport function parseHex(hex: string): { r: number; g: number; b: number } {\r\n  const h = hex.startsWith(\"#\") ? hex.slice(1) : hex;\r\n  return {\r\n    r: parseInt(h.slice(0, 2), 16) || 128,\r\n    g: parseInt(h.slice(2, 4), 16) || 128,\r\n    b: parseInt(h.slice(4, 6), 16) || 128,\r\n  };\r\n}\r\n\r\n/**\r\n * Generate checkerboard RGBA pixel data for two colors.\r\n */\r\nfunction generateCheckerboardPixels(\r\n  width: number,\r\n  height: number,\r\n  primaryHex: string,\r\n  secondaryHex: string,\r\n  cellSize: number\r\n): Uint8Array {\r\n  const pixels = new Uint8Array(width * height * 4);\r\n  const primary = parseHex(primaryHex);\r\n  const secondary = parseHex(secondaryHex);\r\n\r\n  for (let y = 0; y < height; y++) {\r\n    for (let x = 0; x < width; x++) {\r\n      const idx = (y * width + x) * 4;\r\n      const isSecondary = Math.floor(x / cellSize) % 2 === Math.floor(y / cellSize) % 2;\r\n      const color = isSecondary ? secondary : primary;\r\n\r\n      pixels[idx] = color.r;\r\n      pixels[idx + 1] = color.g;\r\n      pixels[idx + 2] = color.b;\r\n      pixels[idx + 3] = 255;\r\n    }\r\n  }\r\n\r\n  return pixels;\r\n}\r\n\r\n/**\r\n * Cross-platform PNG encoder that works in both browser and NodeJS environments.\r\n * Provides pre-encoded placeholder textures for reliable cross-platform use.\r\n */\r\nexport default class PngEncoder {\r\n  /**\r\n   * Create a simple solid-color texture.\r\n   *\r\n   * @param width Texture width\r\n   * @param height Texture height\r\n   * @param hexColor Hex color (e.g., \"#FF0000\")\r\n   * @returns PNG data as Uint8Array\r\n   */\r\n  static createSolidColorPng(width: number, height: number, hexColor: string): Uint8Array | undefined {\r\n    const { r, g, b } = parseHex(hexColor);\r\n\r\n    const decoded = ImageCodec.createSolidColor(width, height, r, g, b, 255);\r\n    return ImageCodec.encodeToPngSync(decoded.pixels, decoded.width, decoded.height);\r\n  }\r\n\r\n  /**\r\n   * Create a checkerboard pattern texture with two colors.\r\n   *\r\n   * @param width Texture width\r\n   * @param height Texture height\r\n   * @param primaryHex Primary color hex\r\n   * @param secondaryHex Secondary color hex\r\n   * @param cellSize Size of each checkerboard cell\r\n   * @returns PNG data as Uint8Array\r\n   */\r\n  static createCheckerboardPng(\r\n    width: number,\r\n    height: number,\r\n    primaryHex: string,\r\n    secondaryHex: string,\r\n    cellSize: number = 8\r\n  ): Uint8Array | undefined {\r\n    const pixels = generateCheckerboardPixels(width, height, primaryHex, secondaryHex, cellSize);\r\n\r\n    // Try runtime encoding first\r\n    const encoded = ImageCodec.encodeToPngSync(pixels, width, height);\r\n    if (encoded) {\r\n      return encoded;\r\n    }\r\n\r\n    // Fall back to pre-encoded placeholder for browser environments\r\n    if (width === 64 && height === 64) {\r\n      return PngEncoder.getPlaceholderTexture(\"entity\");\r\n    } else if (width === 16 && height === 16) {\r\n      return PngEncoder.getPlaceholderTexture(\"block\");\r\n    }\r\n\r\n    // Last resort: return entity placeholder scaled\r\n    return PngEncoder.getPlaceholderTexture(\"entity\");\r\n  }\r\n\r\n  /**\r\n   * Async version of createCheckerboardPng that works in browser environments.\r\n   * Falls back to sync encoding first, then tries browser Canvas API.\r\n   */\r\n  static async createCheckerboardPngAsync(\r\n    width: number,\r\n    height: number,\r\n    primaryHex: string,\r\n    secondaryHex: string,\r\n    cellSize: number = 8\r\n  ): Promise<Uint8Array | undefined> {\r\n    const pixels = generateCheckerboardPixels(width, height, primaryHex, secondaryHex, cellSize);\r\n\r\n    // Try sync encoding first (Node.js)\r\n    const encoded = ImageCodec.encodeToPngSync(pixels, width, height);\r\n    if (encoded) {\r\n      return encoded;\r\n    }\r\n\r\n    // Try async browser encoding (Canvas API)\r\n    const browserEncoded = await ImageCodec.encodeToPngBrowser(pixels, width, height);\r\n    if (browserEncoded) {\r\n      return browserEncoded;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get a pre-encoded placeholder texture.\r\n   * These work in all environments without requiring runtime PNG encoding.\r\n   *\r\n   * @param type Type of placeholder: \"entity\" (64x64), \"block\" (16x16), or \"item\" (16x16)\r\n   * @returns PNG data as Uint8Array\r\n   */\r\n  static getPlaceholderTexture(type: \"entity\" | \"block\" | \"item\"): Uint8Array {\r\n    let base64: string;\r\n    switch (type) {\r\n      case \"entity\":\r\n        base64 = PLACEHOLDER_TEXTURES.entity;\r\n        break;\r\n      case \"block\":\r\n        base64 = PLACEHOLDER_TEXTURES.block;\r\n        break;\r\n      case \"item\":\r\n        base64 = PLACEHOLDER_TEXTURES.item;\r\n        break;\r\n      default:\r\n        base64 = PLACEHOLDER_TEXTURES.entity;\r\n    }\r\n    return Utilities.base64ToUint8Array(base64);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ItemTextureTemplates - Template-based item texture generation.\r\n *\r\n * Stores 16x16 shape masks for each item type (sword, helmet, etc.) extracted\r\n * from the custom_items sample pack. Each pixel is encoded as a shade level:\r\n *   0 = transparent\r\n *   1 = dark (shadow)\r\n *   2 = mid (base color)\r\n *   3 = light (highlight)\r\n *\r\n * The recolor function applies a user-chosen color, producing darker/lighter\r\n * variants for depth, then encodes the result as RGBA pixels.\r\n */\r\n\r\nimport ImageCodec from \"../core/ImageCodec\";\r\nimport { parseHex } from \"./PngEncoder\";\r\n\r\n/**\r\n * 16x16 shape masks. Each string is 16 rows of 16 chars.\r\n * Chars: '0'=transparent, '1'=dark, '2'=mid, '3'=highlight\r\n */\r\nconst TEMPLATES: Record<string, string> = {\r\n  sword:\r\n    \"0000000000000111\" +\r\n    \"0000000000001331\" +\r\n    \"0000000000013231\" +\r\n    \"0000000000132310\" +\r\n    \"0000000001322100\" +\r\n    \"0000000013221000\" +\r\n    \"0011000122210000\" +\r\n    \"0011101222100000\" +\r\n    \"0001112121000000\" +\r\n    \"0001111210000000\" +\r\n    \"0000111100000000\" +\r\n    \"0001111110000000\" +\r\n    \"0012101111000000\" +\r\n    \"1111000011000000\" +\r\n    \"1110000000000000\" +\r\n    \"1110000000000000\",\r\n\r\n  tool:\r\n    \"0000000000000000\" +\r\n    \"0000000002300000\" +\r\n    \"0000000023300000\" +\r\n    \"0000000233000000\" +\r\n    \"0000000230000000\" +\r\n    \"0000000213000330\" +\r\n    \"0000000231203320\" +\r\n    \"0000000222133200\" +\r\n    \"0000002222222000\" +\r\n    \"0000022200000000\" +\r\n    \"0000232000000000\" +\r\n    \"0002320000000000\" +\r\n    \"0023200000000000\" +\r\n    \"0232000000000000\" +\r\n    \"2220000000000000\" +\r\n    \"2200000000000000\",\r\n\r\n  helmet:\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000011111100000\" +\r\n    \"0000122222210000\" +\r\n    \"0001233322221000\" +\r\n    \"0001233222221000\" +\r\n    \"0001221111221000\" +\r\n    \"0001211111121000\" +\r\n    \"0001211111121000\" +\r\n    \"0001211111121000\" +\r\n    \"0000110000110000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\",\r\n\r\n  chestplate:\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0111110000111110\" +\r\n    \"0133210000133210\" +\r\n    \"0132221001232210\" +\r\n    \"0122232112222210\" +\r\n    \"0122233332222210\" +\r\n    \"0112333222222110\" +\r\n    \"0001332222221000\" +\r\n    \"0001232222221000\" +\r\n    \"0001222222221000\" +\r\n    \"0001222222221000\" +\r\n    \"0001222222221000\" +\r\n    \"0000122222210000\" +\r\n    \"0000011111100000\" +\r\n    \"0000000000000000\",\r\n\r\n  leggings:\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000111111110000\" +\r\n    \"0001333332221000\" +\r\n    \"0001332222221000\" +\r\n    \"0001322222221000\" +\r\n    \"0001322112221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001111001111000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\",\r\n\r\n  boots:\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000111001110000\" +\r\n    \"0001331001331000\" +\r\n    \"0001331001321000\" +\r\n    \"0001321001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0012221001222100\" +\r\n    \"0122221001222210\" +\r\n    \"0122211001122210\" +\r\n    \"0111100000011110\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\",\r\n\r\n  food:\r\n    \"0000002200000000\" +\r\n    \"0000023320000000\" +\r\n    \"0000232232220000\" +\r\n    \"0002232332332000\" +\r\n    \"0023323323223200\" +\r\n    \"0232232223233200\" +\r\n    \"0232232222332200\" +\r\n    \"0223322223222000\" +\r\n    \"0022222223233200\" +\r\n    \"0002332332322200\" +\r\n    \"0023223222322200\" +\r\n    \"0023223233232000\" +\r\n    \"0002332322320000\" +\r\n    \"0000222322200000\" +\r\n    \"0000000220000000\" +\r\n    \"0000000000000000\",\r\n};\r\n\r\n/** Map item trait IDs to template names */\r\nconst TRAIT_TO_TEMPLATE: Record<string, string> = {\r\n  sword: \"sword\",\r\n  pickaxe: \"tool\",\r\n  axe: \"tool\",\r\n  shovel: \"tool\",\r\n  armor_helmet: \"helmet\",\r\n  armor_chestplate: \"chestplate\",\r\n  armor_leggings: \"leggings\",\r\n  armor_boots: \"boots\",\r\n  food: \"food\",\r\n};\r\n\r\nfunction clamp(v: number): number {\r\n  return Math.max(0, Math.min(255, Math.round(v)));\r\n}\r\n\r\n/**\r\n * Generate a recolored 16x16 RGBA pixel array from a template and a hex color.\r\n *\r\n * Shade levels map to color multipliers:\r\n *   1 (dark)      = color * 0.45\r\n *   2 (mid/base)  = color * 0.75\r\n *   3 (highlight) = color * 1.0 + 40 brightness boost\r\n */\r\nexport function recolorTemplate(\r\n  templateName: string,\r\n  hexColor: string\r\n): { pixels: Uint8Array; width: number; height: number } | undefined {\r\n  const template = TEMPLATES[templateName];\r\n  if (!template || template.length !== 256) {\r\n    return undefined;\r\n  }\r\n\r\n  const { r, g, b } = parseHex(hexColor);\r\n  const pixels = new Uint8Array(16 * 16 * 4);\r\n\r\n  for (let i = 0; i < 256; i++) {\r\n    const shade = template.charCodeAt(i) - 48; // '0'=0, '1'=1, '2'=2, '3'=3\r\n    const idx = i * 4;\r\n\r\n    if (shade === 0) {\r\n      // Transparent\r\n      pixels[idx] = 0;\r\n      pixels[idx + 1] = 0;\r\n      pixels[idx + 2] = 0;\r\n      pixels[idx + 3] = 0;\r\n    } else if (shade === 1) {\r\n      // Dark shadow\r\n      pixels[idx] = clamp(r * 0.45);\r\n      pixels[idx + 1] = clamp(g * 0.45);\r\n      pixels[idx + 2] = clamp(b * 0.45);\r\n      pixels[idx + 3] = 255;\r\n    } else if (shade === 2) {\r\n      // Mid tone (base)\r\n      pixels[idx] = clamp(r * 0.75);\r\n      pixels[idx + 1] = clamp(g * 0.75);\r\n      pixels[idx + 2] = clamp(b * 0.75);\r\n      pixels[idx + 3] = 255;\r\n    } else {\r\n      // Highlight\r\n      pixels[idx] = clamp(r + 40);\r\n      pixels[idx + 1] = clamp(g + 40);\r\n      pixels[idx + 2] = clamp(b + 40);\r\n      pixels[idx + 3] = 255;\r\n    }\r\n  }\r\n\r\n  return { pixels, width: 16, height: 16 };\r\n}\r\n\r\n/**\r\n * Get the template name for an item based on its traits.\r\n * Returns undefined if no matching template exists.\r\n */\r\nexport function getTemplateForTraits(traits: string[]): string | undefined {\r\n  if (!traits) return undefined;\r\n\r\n  for (const traitId of traits) {\r\n    const template = TRAIT_TO_TEMPLATE[traitId];\r\n    if (template) {\r\n      return template;\r\n    }\r\n  }\r\n\r\n  return undefined;\r\n}\r\n\r\n/**\r\n * Generate a recolored item texture PNG from traits and a color.\r\n * Returns PNG bytes, or undefined if no template matches or encoding fails.\r\n */\r\nexport async function generateItemTextureFromTemplate(\r\n  traits: string[],\r\n  hexColor: string\r\n): Promise<Uint8Array | undefined> {\r\n  const templateName = getTemplateForTraits(traits);\r\n  if (!templateName) {\r\n    return undefined;\r\n  }\r\n\r\n  const result = recolorTemplate(templateName, hexColor);\r\n  if (!result) {\r\n    return undefined;\r\n  }\r\n\r\n  // Try sync encoding (Node.js)\r\n  const syncEncoded = ImageCodec.encodeToPngSync(result.pixels, result.width, result.height);\r\n  if (syncEncoded) {\r\n    return syncEncoded;\r\n  }\r\n\r\n  // Try async browser encoding (Canvas API)\r\n  const browserEncoded = await ImageCodec.encodeToPngBrowser(result.pixels, result.width, result.height);\r\n  if (browserEncoded) {\r\n    return browserEncoded;\r\n  }\r\n\r\n  return undefined;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ContentTraits - Trait System for Content Generation\r\n *\r\n * This module defines the trait architecture for the Content Wizard meta-schema.\r\n * Traits are pre-packaged bundles of Minecraft components, states, and behaviors\r\n * that can be easily combined to create complex content.\r\n *\r\n * ARCHITECTURE:\r\n * - ITraitData: Base interface for all trait data\r\n * - IEntityTraitData: Entity-specific (has component groups, events)\r\n * - IBlockTraitData: Block-specific (has properties, permutations)\r\n * - IItemTraitData: Item-specific (has events, simpler structure)\r\n *\r\n * - ContentTrait: Abstract base class for trait implementations\r\n * - EntityContentTrait: Generates IEntityTraitData\r\n * - BlockContentTrait: Generates IBlockTraitData\r\n * - ItemContentTrait: Generates IItemTraitData\r\n *\r\n * Each ContentTrait implementation encapsulates the logic for a specific trait\r\n * and can accept parameters to customize the generated data.\r\n */\r\n\r\n// ============================================================================\r\n// BASE TRAIT DATA INTERFACES\r\n// ============================================================================\r\n\r\n/**\r\n * Base interface for all trait data.\r\n * Contains common metadata about a trait.\r\n */\r\nexport interface ITraitData {\r\n  /** Unique identifier for this trait */\r\n  id: string;\r\n\r\n  /** Human-readable display name */\r\n  displayName: string;\r\n\r\n  /** Description of what this trait provides */\r\n  description: string;\r\n\r\n  /** Category for UI grouping */\r\n  category: TraitCategory;\r\n\r\n  /** Other traits this requires */\r\n  requires?: string[];\r\n\r\n  /** Traits this conflicts with */\r\n  conflicts?: string[];\r\n\r\n  /** Base components that are always applied */\r\n  components: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Categories for organizing traits in the UI.\r\n */\r\nexport type TraitCategory =\r\n  | \"body_type\"\r\n  | \"behavior\"\r\n  | \"combat\"\r\n  | \"interaction\"\r\n  | \"special\"\r\n  | \"movement\"\r\n  | \"environment\"\r\n  | \"material\"\r\n  | \"shape\"\r\n  | \"tool\"\r\n  | \"armor\"\r\n  | \"consumable\"\r\n  | \"placement\"\r\n  | \"usable\"\r\n  | \"basic\"\r\n  | \"visual\"\r\n  | \"interactive\";\r\n\r\n// ============================================================================\r\n// ENTITY TRAIT DATA\r\n// ============================================================================\r\n\r\n/**\r\n * Entity-specific trait data.\r\n * Entities support component groups (states) and events (transitions).\r\n */\r\nexport interface IEntityTraitData extends ITraitData {\r\n  /**\r\n   * Component groups define different states the entity can be in.\r\n   * Each group is a set of components that are applied together.\r\n   * Example: \"wild\" vs \"tamed\" states for a wolf.\r\n   */\r\n  componentGroups?: Record<string, Record<string, any>>;\r\n\r\n  /**\r\n   * Events define transitions between states.\r\n   * They can add/remove component groups and trigger other events.\r\n   */\r\n  events?: Record<string, IEntityEvent>;\r\n\r\n  /**\r\n   * The spawn event is triggered when the entity first spawns.\r\n   * Use this to set initial state.\r\n   */\r\n  spawnEvent?: IEntityEvent;\r\n\r\n  /**\r\n   * Resource-related data (textures, animations, sounds).\r\n   */\r\n  resources?: {\r\n    textures?: Record<string, string>;\r\n    animations?: Record<string, string>;\r\n    sounds?: Record<string, string>;\r\n    particles?: string[];\r\n  };\r\n}\r\n\r\n/**\r\n * Entity event structure.\r\n */\r\nexport interface IEntityEvent {\r\n  /** Add component groups */\r\n  add?: {\r\n    component_groups: string[];\r\n  };\r\n\r\n  /** Remove component groups */\r\n  remove?: {\r\n    component_groups: string[];\r\n  };\r\n\r\n  /** Trigger another event */\r\n  trigger?: {\r\n    event: string;\r\n    target?: string;\r\n    filters?: any;\r\n  };\r\n\r\n  /** Queue a command */\r\n  queue_command?: {\r\n    command: string | string[];\r\n  };\r\n\r\n  /** Randomize between options */\r\n  randomize?: Array<{\r\n    weight: number;\r\n    add?: { component_groups: string[] };\r\n    remove?: { component_groups: string[] };\r\n    trigger?: { event: string; target?: string };\r\n  }>;\r\n\r\n  /** Sequence of events */\r\n  sequence?: IEntityEvent[];\r\n\r\n  /** Set property value */\r\n  set_property?: Record<string, any>;\r\n}\r\n\r\n// ============================================================================\r\n// BLOCK TRAIT DATA\r\n// ============================================================================\r\n\r\n/**\r\n * Block-specific trait data.\r\n * Blocks support properties (states) and permutations (conditional components).\r\n */\r\nexport interface IBlockTraitData extends ITraitData {\r\n  /** Block properties (states) - e.g., { \"custom:open\": [false, true] } */\r\n  properties?: Record<string, (string | number | boolean)[]>;\r\n\r\n  /** Conditional component application based on property values */\r\n  permutations?: IBlockPermutation[];\r\n\r\n  /** Block event triggers */\r\n  events?: Record<string, IBlockEvent>;\r\n\r\n  /** Geometry files to include in the resource pack (path \u2192 geo JSON content) */\r\n  geometryFiles?: { path: string; content: object }[];\r\n\r\n  /**\r\n   * Minecraft-native block traits to add to description.traits.\r\n   * These are built-in Minecraft traits like minecraft:placement_position\r\n   * and minecraft:connection that the engine handles automatically.\r\n   * Example: { \"minecraft:placement_position\": { enabled_states: [\"minecraft:vertical_half\"] } }\r\n   */\r\n  minecraftTraits?: Record<string, any>;\r\n\r\n  /** Tags for categorization (e.g., [\"stone\", \"pickaxe_mineable\"]) */\r\n  tags?: string[];\r\n\r\n  /** Menu category for creative inventory */\r\n  menuCategory?: {\r\n    category: string;\r\n    group?: string;\r\n  };\r\n}\r\n\r\n/**\r\n * Block permutation - applies components when condition is met.\r\n */\r\nexport interface IBlockPermutation {\r\n  /** Molang condition (e.g., \"q.block_property('custom:open') == true\") */\r\n  condition: string;\r\n\r\n  /** Components to apply when condition is true */\r\n  components: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Block event structure.\r\n */\r\nexport interface IBlockEvent {\r\n  /** Set block property values */\r\n  set_block_property?: Record<string, any>;\r\n\r\n  /** Trigger event on another block/entity */\r\n  trigger?: {\r\n    event: string;\r\n    target?: string;\r\n    conditions?: any;\r\n    delay?: number;\r\n  };\r\n\r\n  /** Run command */\r\n  run_command?: {\r\n    command: string | string[];\r\n  };\r\n\r\n  /** Spawn loot */\r\n  spawn_loot?: {\r\n    table: string;\r\n  };\r\n\r\n  /** Sequence of actions */\r\n  sequence?: IBlockEvent[];\r\n\r\n  /** Randomized actions */\r\n  randomize?: Array<\r\n    {\r\n      weight: number;\r\n    } & IBlockEvent\r\n  >;\r\n}\r\n\r\n// ============================================================================\r\n// ITEM TRAIT DATA\r\n// ============================================================================\r\n\r\n/**\r\n * Item-specific trait data.\r\n * Items have a simpler event system than entities.\r\n */\r\nexport interface IItemTraitData extends ITraitData {\r\n  /** Item events (on_use, on_consume, etc.) */\r\n  events?: Record<string, IItemEvent>;\r\n\r\n  /** Attachable definition for equipped rendering */\r\n  attachable?: IAttachableData;\r\n}\r\n\r\n/**\r\n * Item event structure.\r\n */\r\nexport interface IItemEvent {\r\n  /** Run command on use */\r\n  run_command?: {\r\n    command: string | string[];\r\n    target?: string;\r\n  };\r\n\r\n  /** Trigger entity event */\r\n  trigger?: {\r\n    event: string;\r\n    target?: string;\r\n  };\r\n\r\n  /** Damage item */\r\n  damage?: {\r\n    type: string;\r\n    amount: number;\r\n  };\r\n\r\n  /** Decrement stack */\r\n  decrement_stack?: {};\r\n\r\n  /** Swing animation */\r\n  swing?: boolean;\r\n\r\n  /** Shoot projectile */\r\n  shoot?: {\r\n    projectile: string;\r\n    launch_power?: number;\r\n  };\r\n\r\n  /** Sequence of events */\r\n  sequence?: IItemEvent[];\r\n}\r\n\r\n/**\r\n * Attachable definition for items that render when equipped.\r\n */\r\nexport interface IAttachableData {\r\n  /** Materials for rendering */\r\n  materials?: Record<string, string>;\r\n\r\n  /** Texture references */\r\n  textures?: Record<string, string>;\r\n\r\n  /** Geometry reference */\r\n  geometry?: Record<string, string>;\r\n\r\n  /** Animation references */\r\n  animations?: Record<string, string>;\r\n\r\n  /** Render controllers */\r\n  renderControllers?: string[];\r\n\r\n  /** Scripts for attachable */\r\n  scripts?: {\r\n    animate?: string[];\r\n  };\r\n}\r\n\r\n// ============================================================================\r\n// CONTENT TRAIT BASE CLASSES\r\n// ============================================================================\r\n\r\n/**\r\n * Configuration options that can be passed to traits.\r\n */\r\nexport interface ITraitConfig {\r\n  [key: string]: any;\r\n}\r\n\r\n/**\r\n * Abstract base class for entity content traits.\r\n */\r\nexport abstract class EntityContentTrait {\r\n  /** Unique identifier for this trait */\r\n  abstract get id(): string;\r\n\r\n  /**\r\n   * Generate the trait data with optional configuration.\r\n   * @param config - Optional parameters to customize the trait\r\n   */\r\n  abstract getData(config?: ITraitConfig): IEntityTraitData;\r\n}\r\n\r\n/**\r\n * Abstract base class for block content traits.\r\n */\r\nexport abstract class BlockContentTrait {\r\n  /** Unique identifier for this trait */\r\n  abstract get id(): string;\r\n\r\n  /**\r\n   * Generate the trait data with optional configuration.\r\n   * @param config - Optional parameters to customize the trait\r\n   */\r\n  abstract getData(config?: ITraitConfig): IBlockTraitData;\r\n}\r\n\r\n/**\r\n * Abstract base class for item content traits.\r\n */\r\nexport abstract class ItemContentTrait {\r\n  /** Unique identifier for this trait */\r\n  abstract get id(): string;\r\n\r\n  /**\r\n   * Generate the trait data with optional configuration.\r\n   * @param config - Optional parameters to customize the trait\r\n   */\r\n  abstract getData(config?: ITraitConfig): IItemTraitData;\r\n}\r\n\r\n// ============================================================================\r\n// TRAIT REGISTRY\r\n// ============================================================================\r\n\r\n/**\r\n * Registry for all trait implementations.\r\n * Allows lookup by trait ID.\r\n */\r\nexport class TraitRegistry {\r\n  private static entityTraits: Map<string, EntityContentTrait> = new Map();\r\n  private static blockTraits: Map<string, BlockContentTrait> = new Map();\r\n  private static itemTraits: Map<string, ItemContentTrait> = new Map();\r\n\r\n  static registerEntityTrait(trait: EntityContentTrait): void {\r\n    this.entityTraits.set(trait.id, trait);\r\n  }\r\n\r\n  static registerBlockTrait(trait: BlockContentTrait): void {\r\n    this.blockTraits.set(trait.id, trait);\r\n  }\r\n\r\n  static registerItemTrait(trait: ItemContentTrait): void {\r\n    this.itemTraits.set(trait.id, trait);\r\n  }\r\n\r\n  static getEntityTrait(id: string): EntityContentTrait | undefined {\r\n    return this.entityTraits.get(id);\r\n  }\r\n\r\n  static getBlockTrait(id: string): BlockContentTrait | undefined {\r\n    return this.blockTraits.get(id);\r\n  }\r\n\r\n  static getItemTrait(id: string): ItemContentTrait | undefined {\r\n    return this.itemTraits.get(id);\r\n  }\r\n\r\n  static getAllEntityTraits(): EntityContentTrait[] {\r\n    return Array.from(this.entityTraits.values());\r\n  }\r\n\r\n  static getAllBlockTraits(): BlockContentTrait[] {\r\n    return Array.from(this.blockTraits.values());\r\n  }\r\n\r\n  static getAllItemTraits(): ItemContentTrait[] {\r\n    return Array.from(this.itemTraits.values());\r\n  }\r\n\r\n  static getEntityTraitsByCategory(category: TraitCategory): EntityContentTrait[] {\r\n    return this.getAllEntityTraits().filter((t) => t.getData().category === category);\r\n  }\r\n\r\n  static getBlockTraitsByCategory(category: TraitCategory): BlockContentTrait[] {\r\n    return this.getAllBlockTraits().filter((t) => t.getData().category === category);\r\n  }\r\n\r\n  static getItemTraitsByCategory(category: TraitCategory): ItemContentTrait[] {\r\n    return this.getAllItemTraits().filter((t) => t.getData().category === category);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Humanoid body type - bipedal, can climb and jump.\r\n */\r\nexport class HumanoidEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"humanoid\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"humanoid\",\r\n      displayName: \"Humanoid\",\r\n      description: \"Bipedal humanoid body with arms and legs\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:can_climb\": {},\r\n        \"minecraft:jump.static\": {},\r\n        \"minecraft:movement.basic\": {},\r\n        \"minecraft:navigation.walk\": {\r\n          can_path_over_water: true,\r\n          avoid_damage_blocks: true,\r\n        },\r\n      },\r\n      resources: {\r\n        animations: {\r\n          walk: \"animation.humanoid.walk\",\r\n          idle: \"animation.humanoid.idle\",\r\n          attack: \"animation.humanoid.attack\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Quadruped body type - four-legged animal.\r\n */\r\nexport class QuadrupedEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"quadruped\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"quadruped\",\r\n      displayName: \"Quadruped\",\r\n      description: \"Four-legged animal body\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:can_climb\": {},\r\n        \"minecraft:jump.static\": {},\r\n        \"minecraft:movement.basic\": {},\r\n        \"minecraft:navigation.walk\": {\r\n          can_path_over_water: true,\r\n          avoid_damage_blocks: true,\r\n        },\r\n      },\r\n      resources: {\r\n        animations: {\r\n          walk: \"animation.quadruped.walk\",\r\n          idle: \"animation.quadruped.idle\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Small quadruped body type - rabbit, cat sized.\r\n */\r\nexport class QuadrupedSmallEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"quadruped_small\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"quadruped_small\",\r\n      displayName: \"Small Quadruped\",\r\n      description: \"Small four-legged animal (rabbit, cat size)\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:can_climb\": {},\r\n        \"minecraft:jump.static\": { jump_power: 0.6 },\r\n        \"minecraft:movement.basic\": {},\r\n        \"minecraft:navigation.walk\": {\r\n          can_path_over_water: true,\r\n          avoid_damage_blocks: true,\r\n        },\r\n        \"minecraft:scale\": { value: 0.5 },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Flying body type - bird, bat, phantom.\r\n */\r\nexport class FlyingEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"flying\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"flying\",\r\n      displayName: \"Flying\",\r\n      description: \"Can fly through the air\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:navigation.fly\": {\r\n          can_path_over_water: true,\r\n          can_path_over_lava: false,\r\n        },\r\n        \"minecraft:can_fly\": {},\r\n        \"minecraft:movement.fly\": {},\r\n      },\r\n      resources: {\r\n        animations: {\r\n          fly: \"animation.flying.fly\",\r\n          glide: \"animation.flying.glide\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Aquatic body type - fish, dolphin.\r\n */\r\nexport class AquaticEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"aquatic\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"aquatic\",\r\n      displayName: \"Aquatic\",\r\n      description: \"Lives in water, can swim\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:navigation.swim\": {\r\n          can_path_over_water: false,\r\n          can_swim: true,\r\n          avoid_damage_blocks: true,\r\n        },\r\n        \"minecraft:underwater_movement\": { value: 0.3 },\r\n        \"minecraft:movement.sway\": {\r\n          sway_amplitude: 0.0,\r\n        },\r\n        \"minecraft:breathable\": {\r\n          total_supply: 15,\r\n          suffocate_time: 0,\r\n          breathes_water: true,\r\n          breathes_air: false,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Arthropod body type - spider, silverfish.\r\n */\r\nexport class ArthropodEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"arthropod\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"arthropod\",\r\n      displayName: \"Arthropod\",\r\n      description: \"Insect or spider-like body\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:can_climb\": {},\r\n        \"minecraft:mark_variant\": { value: 0 },\r\n        \"minecraft:movement.basic\": {},\r\n        \"minecraft:navigation.walk\": {\r\n          can_path_over_water: true,\r\n          avoid_damage_blocks: true,\r\n          can_walk_in_lava: false,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Slime body type - bouncy cube.\r\n */\r\nexport class SlimeEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"slime\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"slime\",\r\n      displayName: \"Slime\",\r\n      description: \"Bouncy cube body\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:movement.sway\": { sway_amplitude: 0.0 },\r\n        \"minecraft:movement.jump\": {},\r\n        \"minecraft:jump.static\": {},\r\n        \"minecraft:navigation.walk\": {\r\n          avoid_damage_blocks: true,\r\n        },\r\n      },\r\n      resources: {\r\n        animations: {\r\n          move: \"animation.slime.move\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Hostile behavior - attacks players on sight.\r\n */\r\nexport class HostileEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"hostile\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const attackDamage = config?.attackDamage ?? 3;\r\n\r\n    return {\r\n      id: \"hostile\",\r\n      displayName: \"Hostile\",\r\n      description: \"Attacks players on sight\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:behavior.hurt_by_target\": { priority: 1 },\r\n        \"minecraft:attack\": { damage: attackDamage },\r\n      },\r\n      componentGroups: {\r\n        hostile_calm: {\r\n          \"minecraft:behavior.random_stroll\": { priority: 6, speed_multiplier: 1.0 },\r\n          \"minecraft:behavior.random_look_around\": { priority: 7 },\r\n        },\r\n        hostile_angry: {\r\n          \"minecraft:behavior.nearest_attackable_target\": {\r\n            priority: 2,\r\n            must_see: true,\r\n            reselect_targets: true,\r\n            entity_types: [\r\n              {\r\n                filters: { test: \"is_family\", subject: \"other\", value: \"player\" },\r\n                max_dist: 35,\r\n              },\r\n            ],\r\n          },\r\n        },\r\n      },\r\n      events: {\r\n        become_hostile: {\r\n          add: { component_groups: [\"hostile_angry\"] },\r\n        },\r\n        calm_down: {\r\n          remove: { component_groups: [\"hostile_angry\"] },\r\n          add: { component_groups: [\"hostile_calm\"] },\r\n        },\r\n      },\r\n      spawnEvent: {\r\n        add: { component_groups: [\"hostile_angry\"] },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Passive behavior - flees when hurt.\r\n */\r\nexport class PassiveEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"passive\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"passive\",\r\n      displayName: \"Passive\",\r\n      description: \"Flees when attacked, does not fight back\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:behavior.panic\": {\r\n          priority: 1,\r\n          speed_multiplier: 1.25,\r\n        },\r\n        \"minecraft:behavior.random_stroll\": { priority: 6, speed_multiplier: 1.0 },\r\n        \"minecraft:behavior.random_look_around\": { priority: 7 },\r\n        \"minecraft:behavior.look_at_player\": {\r\n          priority: 8,\r\n          look_distance: 6.0,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Neutral behavior - attacks only when provoked.\r\n */\r\nexport class NeutralEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"neutral\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"neutral\",\r\n      displayName: \"Neutral\",\r\n      description: \"Only attacks when provoked\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:behavior.random_stroll\": { priority: 6, speed_multiplier: 1.0 },\r\n        \"minecraft:behavior.random_look_around\": { priority: 7 },\r\n      },\r\n      componentGroups: {\r\n        neutral_calm: {},\r\n        neutral_angry: {\r\n          \"minecraft:behavior.hurt_by_target\": {\r\n            priority: 1,\r\n            alert_same_type: true,\r\n          },\r\n          \"minecraft:behavior.nearest_attackable_target\": {\r\n            priority: 2,\r\n            entity_types: [\r\n              {\r\n                filters: {\r\n                  all_of: [\r\n                    { test: \"is_family\", subject: \"other\", value: \"player\" },\r\n                    { test: \"has_component\", subject: \"self\", value: \"minecraft:angry\" },\r\n                  ],\r\n                },\r\n              },\r\n            ],\r\n          },\r\n          \"minecraft:angry\": {\r\n            duration: 25,\r\n            broadcast_anger: true,\r\n            broadcast_range: 20,\r\n            calm_event: { event: \"on_calm\" },\r\n          },\r\n        },\r\n      },\r\n      events: {\r\n        \"minecraft:on_hurt\": {\r\n          add: { component_groups: [\"neutral_angry\"] },\r\n        },\r\n        on_calm: {\r\n          remove: { component_groups: [\"neutral_angry\"] },\r\n          add: { component_groups: [\"neutral_calm\"] },\r\n        },\r\n      },\r\n      spawnEvent: {\r\n        add: { component_groups: [\"neutral_calm\"] },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Boss behavior - boss bar, phases, special abilities.\r\n */\r\nexport class BossEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"boss\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const bossName = config?.bossName ?? \"Boss\";\r\n    const phases = config?.phases ?? 3;\r\n\r\n    const componentGroups: Record<string, Record<string, any>> = {};\r\n    const events: Record<string, any> = {};\r\n\r\n    // Create phase component groups\r\n    for (let i = 1; i <= phases; i++) {\r\n      componentGroups[`phase_${i}`] = {\r\n        \"minecraft:scale\": { value: 1.0 + (i - 1) * 0.1 },\r\n        \"minecraft:movement\": { value: 0.25 + (i - 1) * 0.05 },\r\n      };\r\n\r\n      if (i < phases) {\r\n        events[`enter_phase_${i + 1}`] = {\r\n          remove: { component_groups: [`phase_${i}`] },\r\n          add: { component_groups: [`phase_${i + 1}`] },\r\n        };\r\n      }\r\n    }\r\n\r\n    return {\r\n      id: \"boss\",\r\n      displayName: \"Boss\",\r\n      description: \"Boss mob with health bar and phases\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:boss\": {\r\n          should_darken_sky: true,\r\n          hud_range: 55,\r\n          name: bossName,\r\n        },\r\n        \"minecraft:knockback_resistance\": { value: 1.0 },\r\n      },\r\n      componentGroups,\r\n      events,\r\n      spawnEvent: {\r\n        add: { component_groups: [\"phase_1\"] },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Wanders - randomly wanders around.\r\n */\r\nexport class WandersEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"wanders\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const wanderSpeed = config?.speed ?? 1.0;\r\n\r\n    return {\r\n      id: \"wanders\",\r\n      displayName: \"Wanders\",\r\n      description: \"Randomly wanders around\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:behavior.random_stroll\": {\r\n          priority: 6,\r\n          speed_multiplier: wanderSpeed,\r\n        },\r\n        \"minecraft:behavior.random_look_around\": {\r\n          priority: 8,\r\n        },\r\n        \"minecraft:behavior.look_at_player\": {\r\n          priority: 7,\r\n          look_distance: 6.0,\r\n          probability: 0.02,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * FleesDaylight - seeks shelter from sunlight.\r\n */\r\nexport class FleesDaylightEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"flees_daylight\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const fleeSpeed = config?.speed ?? 1.0;\r\n\r\n    return {\r\n      id: \"flees_daylight\",\r\n      displayName: \"Flees Daylight\",\r\n      description: \"Seeks shelter from sunlight\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:behavior.flee_sun\": {\r\n          priority: 2,\r\n          speed_multiplier: fleeSpeed,\r\n        },\r\n        \"minecraft:navigation.walk\": {\r\n          can_path_over_water: true,\r\n          avoid_sun: true,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Melee attacker - uses close-range attacks.\r\n */\r\nexport class MeleeAttackerEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"melee_attacker\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const damage = config?.damage ?? 3;\r\n    const attackSpeed = config?.attackSpeed ?? 1.2;\r\n\r\n    return {\r\n      id: \"melee_attacker\",\r\n      displayName: \"Melee Attacker\",\r\n      description: \"Attacks with close-range melee strikes\",\r\n      category: \"combat\",\r\n      components: {\r\n        \"minecraft:behavior.melee_attack\": {\r\n          priority: 3,\r\n          speed_multiplier: attackSpeed,\r\n          track_target: true,\r\n        },\r\n        \"minecraft:attack\": { damage },\r\n      },\r\n      resources: {\r\n        animations: {\r\n          attack: \"animation.humanoid.attack\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Ranged attacker - uses projectiles.\r\n */\r\nexport class RangedAttackerEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"ranged_attacker\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const projectile = config?.projectile ?? \"minecraft:arrow\";\r\n    const attackRadius = config?.attackRadius ?? 15.0;\r\n\r\n    return {\r\n      id: \"ranged_attacker\",\r\n      displayName: \"Ranged Attacker\",\r\n      description: \"Attacks with ranged projectiles\",\r\n      category: \"combat\",\r\n      components: {\r\n        \"minecraft:behavior.ranged_attack\": {\r\n          priority: 3,\r\n          attack_interval_min: 1.0,\r\n          attack_interval_max: 3.0,\r\n          attack_radius: attackRadius,\r\n        },\r\n        \"minecraft:shooter\": {\r\n          def: projectile,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Exploder - explodes when near target.\r\n */\r\nexport class ExploderEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"exploder\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const power = config?.power ?? 3;\r\n    const fuseTime = config?.fuseTime ?? 1.5;\r\n    const causesFire = config?.causesFire ?? false;\r\n\r\n    return {\r\n      id: \"exploder\",\r\n      displayName: \"Exploder\",\r\n      description: \"Explodes when near its target\",\r\n      category: \"combat\",\r\n      components: {},\r\n      componentGroups: {\r\n        exploder_idle: {\r\n          \"minecraft:behavior.nearest_attackable_target\": {\r\n            priority: 1,\r\n            entity_types: [\r\n              {\r\n                filters: { test: \"is_family\", subject: \"other\", value: \"player\" },\r\n                max_dist: 25,\r\n              },\r\n            ],\r\n          },\r\n        },\r\n        exploder_fuse_lit: {\r\n          \"minecraft:explode\": {\r\n            fuse_length: fuseTime,\r\n            fuse_lit: true,\r\n            power,\r\n            causes_fire: causesFire,\r\n          },\r\n          \"minecraft:behavior.melee_attack\": {\r\n            priority: 2,\r\n            speed_multiplier: 1.5,\r\n            track_target: true,\r\n            reach_multiplier: 0.0,\r\n          },\r\n        },\r\n      },\r\n      events: {\r\n        start_exploding: {\r\n          remove: { component_groups: [\"exploder_idle\"] },\r\n          add: { component_groups: [\"exploder_fuse_lit\"] },\r\n        },\r\n        stop_exploding: {\r\n          remove: { component_groups: [\"exploder_fuse_lit\"] },\r\n          add: { component_groups: [\"exploder_idle\"] },\r\n        },\r\n      },\r\n      spawnEvent: {\r\n        add: { component_groups: [\"exploder_idle\"] },\r\n      },\r\n      resources: {\r\n        sounds: {\r\n          fuse: \"mob.creeper.say\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Tameable - can be tamed by the player.\r\n */\r\nexport class TameableEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"tameable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const tameItems = config?.tameItems ?? [\"bone\"];\r\n    const tameChance = config?.tameChance ?? 0.33;\r\n\r\n    return {\r\n      id: \"tameable\",\r\n      displayName: \"Tameable\",\r\n      description: \"Can be tamed by the player with specific items\",\r\n      category: \"interaction\",\r\n      components: {\r\n        \"minecraft:tameable\": {\r\n          probability: tameChance,\r\n          tame_items: tameItems,\r\n          tame_event: { event: \"on_tame\", target: \"self\" },\r\n        },\r\n      },\r\n      componentGroups: {\r\n        wild: {\r\n          \"minecraft:behavior.avoid_mob_type\": {\r\n            priority: 4,\r\n            entity_types: [\r\n              {\r\n                filters: { test: \"is_family\", subject: \"other\", value: \"player\" },\r\n                max_dist: 8,\r\n                walk_speed_multiplier: 1.0,\r\n                sprint_speed_multiplier: 1.0,\r\n              },\r\n            ],\r\n          },\r\n        },\r\n        tamed: {\r\n          \"minecraft:is_tamed\": {},\r\n          \"minecraft:behavior.follow_owner\": {\r\n            priority: 4,\r\n            speed_multiplier: 1.0,\r\n            start_distance: 10,\r\n            stop_distance: 2,\r\n          },\r\n          \"minecraft:behavior.owner_hurt_by_target\": { priority: 1 },\r\n          \"minecraft:behavior.owner_hurt_target\": { priority: 2 },\r\n          \"minecraft:sittable\": {},\r\n          \"minecraft:behavior.stay_while_sitting\": { priority: 3 },\r\n        },\r\n      },\r\n      events: {\r\n        on_tame: {\r\n          remove: { component_groups: [\"wild\"] },\r\n          add: { component_groups: [\"tamed\"] },\r\n        },\r\n      },\r\n      spawnEvent: {\r\n        add: { component_groups: [\"wild\"] },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Rideable - can be ridden by the player.\r\n */\r\nexport class RideableEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"rideable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const seatCount = config?.seatCount ?? 1;\r\n    const controllable = config?.controllable ?? true;\r\n    const requiresSaddle = config?.requiresSaddle ?? true;\r\n\r\n    const baseComponents: Record<string, any> = {\r\n      \"minecraft:rideable\": {\r\n        seat_count: seatCount,\r\n        family_types: [\"player\"],\r\n        interact_text: \"action.interact.ride.horse\",\r\n        seats: [{ position: [0.0, 1.1, -0.2] }],\r\n      },\r\n    };\r\n\r\n    if (controllable) {\r\n      baseComponents[\"minecraft:input_ground_controlled\"] = {};\r\n    }\r\n\r\n    const componentGroups: Record<string, Record<string, any>> = {};\r\n    const events: Record<string, any> = {};\r\n\r\n    if (requiresSaddle) {\r\n      componentGroups[\"unsaddled\"] = {};\r\n      componentGroups[\"saddled\"] = {\r\n        \"minecraft:is_saddled\": {},\r\n        ...baseComponents,\r\n      };\r\n\r\n      events[\"on_saddle\"] = {\r\n        remove: { component_groups: [\"unsaddled\"] },\r\n        add: { component_groups: [\"saddled\"] },\r\n      };\r\n\r\n      return {\r\n        id: \"rideable\",\r\n        displayName: \"Rideable\",\r\n        description: \"Can be ridden by the player\",\r\n        category: \"interaction\",\r\n        components: {\r\n          \"minecraft:equippable\": {\r\n            slots: [\r\n              {\r\n                slot: 0,\r\n                item: \"saddle\",\r\n                accepted_items: [\"saddle\"],\r\n                on_equip: { event: \"on_saddle\" },\r\n              },\r\n            ],\r\n          },\r\n        },\r\n        componentGroups,\r\n        events,\r\n        spawnEvent: {\r\n          add: { component_groups: [\"unsaddled\"] },\r\n        },\r\n      };\r\n    }\r\n\r\n    return {\r\n      id: \"rideable\",\r\n      displayName: \"Rideable\",\r\n      description: \"Can be ridden by the player\",\r\n      category: \"interaction\",\r\n      components: baseComponents,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Breedable - can be bred to produce offspring.\r\n */\r\nexport class BreedableEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"breedable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const breedItems = config?.breedItems ?? [\"wheat\"];\r\n\r\n    return {\r\n      id: \"breedable\",\r\n      displayName: \"Breedable\",\r\n      description: \"Can be bred to produce offspring\",\r\n      category: \"interaction\",\r\n      components: {\r\n        \"minecraft:breedable\": {\r\n          require_tame: false,\r\n          breeds_with: {\r\n            mate_type: \"self\",\r\n            baby_type: \"self\",\r\n          },\r\n          breed_items: breedItems,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Leasable - can be leashed with a lead.\r\n */\r\nexport class LeasableEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"leasable\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"leasable\",\r\n      displayName: \"Leasable\",\r\n      description: \"Can be leashed with a lead\",\r\n      category: \"interaction\",\r\n      components: {\r\n        \"minecraft:leashable\": {\r\n          soft_distance: 4.0,\r\n          hard_distance: 6.0,\r\n          max_distance: 10.0,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Trader - can trade with the player.\r\n */\r\nexport class TraderEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"trader\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"trader\",\r\n      displayName: \"Trader\",\r\n      description: \"Can trade with the player\",\r\n      category: \"interaction\",\r\n      components: {\r\n        \"minecraft:trade_table\": {\r\n          display_name: \"entity.trader.name\",\r\n          table: \"trading/custom_trades.json\",\r\n        },\r\n        \"minecraft:economy_trade_table\": {\r\n          display_name: \"entity.trader.name\",\r\n          table: \"trading/custom_trades.json\",\r\n          new_screen: true,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Undead - takes damage from healing, heals from damage potions.\r\n */\r\nexport class UndeadEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"undead\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"undead\",\r\n      displayName: \"Undead\",\r\n      description: \"Takes damage from healing, heals from damage potions\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:type_family\": {\r\n          family: [\"undead\", \"monster\"],\r\n        },\r\n        \"minecraft:burns_in_daylight\": {},\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * BabyVariant - has baby/adult variants.\r\n */\r\nexport class BabyVariantEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"baby_variant\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const growUpTime = config?.growUpTime ?? 1200;\r\n\r\n    return {\r\n      id: \"baby_variant\",\r\n      displayName: \"Baby Variant\",\r\n      description: \"Has baby/adult variants\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:ageable\": {\r\n          duration: growUpTime,\r\n          grow_up: {\r\n            event: \"grow_up\",\r\n            target: \"self\",\r\n          },\r\n        },\r\n      },\r\n      componentGroups: {\r\n        baby: {\r\n          \"minecraft:is_baby\": {},\r\n          \"minecraft:scale\": {\r\n            value: 0.5,\r\n          },\r\n          \"minecraft:ageable\": {\r\n            duration: growUpTime,\r\n            grow_up: {\r\n              event: \"grow_up\",\r\n              target: \"self\",\r\n            },\r\n          },\r\n        },\r\n        adult: {\r\n          \"minecraft:scale\": {\r\n            value: 1.0,\r\n          },\r\n        },\r\n      },\r\n      events: {\r\n        grow_up: {\r\n          remove: { component_groups: [\"baby\"] },\r\n          add: { component_groups: [\"adult\"] },\r\n        },\r\n        spawn_baby: {\r\n          add: { component_groups: [\"baby\"] },\r\n        },\r\n      },\r\n      spawnEvent: {\r\n        randomize: [\r\n          { weight: 95, add: { component_groups: [\"adult\"] } },\r\n          { weight: 5, add: { component_groups: [\"baby\"] } },\r\n        ],\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Teleporter - can teleport.\r\n */\r\nexport class TeleporterEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"teleporter\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const teleportChance = config?.teleportChance ?? 0.01;\r\n\r\n    return {\r\n      id: \"teleporter\",\r\n      displayName: \"Teleporter\",\r\n      description: \"Can teleport\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:teleport\": {\r\n          random_teleports: true,\r\n          max_random_teleport_time: 30.0,\r\n          random_teleport_cube: [32, 16, 32],\r\n          target_distance: 16.0,\r\n          target_teleport_chance: teleportChance,\r\n          light_teleport_chance: 0.01,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Stone material - standard stone properties.\r\n */\r\nexport class StoneMaterialBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"stone_material\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const hardness = config?.hardness ?? 1.5;\r\n\r\n    return {\r\n      id: \"stone_material\",\r\n      displayName: \"Stone Material\",\r\n      description: \"Standard stone properties\",\r\n      category: \"material\",\r\n      components: {\r\n        \"minecraft:destructible_by_mining\": {\r\n          seconds_to_destroy: hardness,\r\n        },\r\n        \"minecraft:destructible_by_explosion\": {\r\n          explosion_resistance: 6.0,\r\n        },\r\n        \"minecraft:map_color\": \"#808080\",\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Wood material - standard wood properties.\r\n */\r\nexport class WoodMaterialBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"wood_material\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const hardness = config?.hardness ?? 2.0;\r\n\r\n    return {\r\n      id: \"wood_material\",\r\n      displayName: \"Wood Material\",\r\n      description: \"Standard wood properties\",\r\n      category: \"material\",\r\n      components: {\r\n        \"minecraft:destructible_by_mining\": {\r\n          seconds_to_destroy: hardness,\r\n        },\r\n        \"minecraft:destructible_by_explosion\": {\r\n          explosion_resistance: 3.0,\r\n        },\r\n        \"minecraft:flammable\": {\r\n          catch_chance_modifier: 5,\r\n          destroy_chance_modifier: 20,\r\n        },\r\n        \"minecraft:map_color\": \"#8B4513\",\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Metal material - strong and blast resistant.\r\n */\r\nexport class MetalMaterialBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"metal_material\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const hardness = config?.hardness ?? 5.0;\r\n\r\n    return {\r\n      id: \"metal_material\",\r\n      displayName: \"Metal Material\",\r\n      description: \"Strong and blast resistant\",\r\n      category: \"material\",\r\n      components: {\r\n        \"minecraft:destructible_by_mining\": {\r\n          seconds_to_destroy: hardness,\r\n        },\r\n        \"minecraft:destructible_by_explosion\": {\r\n          explosion_resistance: 6.0,\r\n        },\r\n        \"minecraft:map_color\": \"#C0C0C0\",\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Soft material - easily breakable.\r\n */\r\nexport class SoftMaterialBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"soft_material\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const hardness = config?.hardness ?? 0.5;\r\n\r\n    return {\r\n      id: \"soft_material\",\r\n      displayName: \"Soft Material\",\r\n      description: \"Easily breakable\",\r\n      category: \"material\",\r\n      components: {\r\n        \"minecraft:destructible_by_mining\": {\r\n          seconds_to_destroy: hardness,\r\n        },\r\n        \"minecraft:destructible_by_explosion\": {\r\n          explosion_resistance: 0.5,\r\n        },\r\n        \"minecraft:map_color\": \"#D2B48C\",\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Door - can be opened and closed.\r\n */\r\nexport class DoorBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"door\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"door\",\r\n      displayName: \"Door\",\r\n      description: \"Can be opened and closed\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:on_interact\": {\r\n          event: \"toggle_open\",\r\n        },\r\n        \"minecraft:geometry\": \"geometry.door\",\r\n        \"minecraft:collision_box\": {\r\n          origin: [-8, 0, -2],\r\n          size: [16, 32, 4],\r\n        },\r\n        \"minecraft:selection_box\": {\r\n          origin: [-8, 0, -2],\r\n          size: [16, 32, 4],\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Trapdoor - horizontal door.\r\n */\r\nexport class TrapdoorBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"trapdoor\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"trapdoor\",\r\n      displayName: \"Trapdoor\",\r\n      description: \"Horizontal door\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:on_interact\": {\r\n          event: \"toggle_open\",\r\n        },\r\n        \"minecraft:geometry\": \"geometry.trapdoor\",\r\n        \"minecraft:collision_box\": {\r\n          origin: [-8, 0, -8],\r\n          size: [16, 3, 16],\r\n        },\r\n        \"minecraft:selection_box\": {\r\n          origin: [-8, 0, -8],\r\n          size: [16, 3, 16],\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Button - momentary switch.\r\n */\r\nexport class ButtonBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"button\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"button\",\r\n      displayName: \"Button\",\r\n      description: \"Momentary switch\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:on_interact\": {\r\n          event: \"pressed\",\r\n        },\r\n        \"minecraft:geometry\": \"geometry.button\",\r\n        \"minecraft:collision_box\": false,\r\n        \"minecraft:selection_box\": {\r\n          origin: [-2, 0, -3],\r\n          size: [4, 2, 6],\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Lever - toggle switch.\r\n */\r\nexport class LeverBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"lever\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"lever\",\r\n      displayName: \"Lever\",\r\n      description: \"Toggle switch\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:on_interact\": {\r\n          event: \"toggle\",\r\n        },\r\n        \"minecraft:geometry\": \"geometry.lever\",\r\n        \"minecraft:collision_box\": false,\r\n        \"minecraft:selection_box\": {\r\n          origin: [-3, 0, -2],\r\n          size: [6, 10, 4],\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Crafting station - allows crafting.\r\n */\r\nexport class CraftingStationBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"crafting_station\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const craftingTags = config?.craftingTags ?? [\"crafting_table\"];\r\n\r\n    return {\r\n      id: \"crafting_station\",\r\n      displayName: \"Crafting Station\",\r\n      description: \"Allows crafting\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:crafting_table\": {\r\n          crafting_tags: craftingTags,\r\n          table_name: \"container.crafting\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Redstone producer - block emits a redstone signal.\r\n * Uses minecraft:redstone_producer to output power on all faces.\r\n */\r\nexport class RedstoneProducerBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"redstone_signal\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const power = config?.redstonePower ?? 15;\r\n\r\n    return {\r\n      id: \"redstone_signal\",\r\n      displayName: \"Redstone Signal\",\r\n      description: \"Outputs redstone power\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:redstone_producer\": {\r\n          power: power,\r\n          connected_faces: [\"down\", \"up\", \"north\", \"south\", \"east\", \"west\"],\r\n        },\r\n        \"minecraft:redstone_conductivity\": {\r\n          redstone_conductor: true,\r\n          allows_wire_to_step_down: true,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Rotatable horizontal - can be placed in 4 directions.\r\n */\r\nexport class RotatableHorizontalBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"rotatable_horizontal\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"rotatable_horizontal\",\r\n      displayName: \"Rotatable Horizontal\",\r\n      description: \"Can be placed in 4 directions\",\r\n      category: \"placement\",\r\n      components: {\r\n        \"minecraft:transformation\": {\r\n          rotation: [0, 0, 0],\r\n        },\r\n      },\r\n      properties: {\r\n        \"custom:direction\": [0, 1, 2, 3],\r\n      },\r\n      permutations: [\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 0\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 1\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 90, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 2\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 180, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 3\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 270, 0] } },\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Rotatable all - can be placed in 6 directions.\r\n */\r\nexport class RotatableAllBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"rotatable_all\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"rotatable_all\",\r\n      displayName: \"Rotatable All\",\r\n      description: \"Can be placed in 6 directions\",\r\n      category: \"placement\",\r\n      components: {\r\n        \"minecraft:transformation\": {\r\n          rotation: [0, 0, 0],\r\n        },\r\n      },\r\n      properties: {\r\n        \"custom:facing\": [\"up\", \"down\", \"north\", \"south\", \"east\", \"west\"],\r\n      },\r\n      permutations: [\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'up'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'down'\",\r\n          components: { \"minecraft:transformation\": { rotation: [180, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'north'\",\r\n          components: { \"minecraft:transformation\": { rotation: [90, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'south'\",\r\n          components: { \"minecraft:transformation\": { rotation: [-90, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'east'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 0, -90] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'west'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 0, 90] } },\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Slab geometry definition.\r\n * A single half-height cube (16\u00D78\u00D716 in pixel units).\r\n */\r\nconst SLAB_GEOMETRY = {\r\n  format_version: \"1.21.40\",\r\n  \"minecraft:geometry\": [\r\n    {\r\n      description: {\r\n        identifier: \"geometry.slab\",\r\n        texture_width: 16,\r\n        texture_height: 16,\r\n      },\r\n      bones: [\r\n        {\r\n          name: \"body\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-8, 0, -8],\r\n              size: [16, 8, 16],\r\n              uv: {\r\n                north: { uv: [0, 8], uv_size: [16, 8] },\r\n                south: { uv: [0, 8], uv_size: [16, 8] },\r\n                east: { uv: [0, 8], uv_size: [16, 8] },\r\n                west: { uv: [0, 8], uv_size: [16, 8] },\r\n                up: { uv: [0, 0], uv_size: [16, 16] },\r\n                down: { uv: [0, 0], uv_size: [16, 16] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n      ],\r\n    },\r\n  ],\r\n};\r\n\r\n/**\r\n * Slab - half-height block.\r\n * Uses the minecraft:placement_position trait with minecraft:vertical_half\r\n * to automatically handle top/bottom placement based on where the player clicks.\r\n */\r\nexport class SlabBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"slab\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"slab\",\r\n      displayName: \"Slab\",\r\n      description: \"Half-height block with top/bottom placement\",\r\n      category: \"placement\",\r\n      components: {\r\n        \"minecraft:geometry\": \"geometry.slab\",\r\n        \"minecraft:collision_box\": {\r\n          origin: [-8, 0, -8],\r\n          size: [16, 8, 16],\r\n        },\r\n        \"minecraft:selection_box\": {\r\n          origin: [-8, 0, -8],\r\n          size: [16, 8, 16],\r\n        },\r\n      },\r\n      minecraftTraits: {\r\n        \"minecraft:placement_position\": {\r\n          enabled_states: [\"minecraft:vertical_half\"],\r\n        },\r\n      },\r\n      geometryFiles: [\r\n        {\r\n          path: \"models/blocks/slab.geo.json\",\r\n          content: SLAB_GEOMETRY,\r\n        },\r\n      ],\r\n      permutations: [\r\n        {\r\n          condition: \"q.block_state('minecraft:vertical_half') == 'top'\",\r\n          components: {\r\n            \"minecraft:transformation\": {\r\n              translation: [0, 0.5, 0],\r\n            },\r\n          },\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Stairs geometry definition.\r\n * Two cubes: bottom half is a full slab, top half is half-depth to form the step.\r\n * Uses pixel units: 16\u00D716\u00D716 = one full block.\r\n */\r\nconst STAIRS_GEOMETRY = {\r\n  format_version: \"1.21.40\",\r\n  \"minecraft:geometry\": [\r\n    {\r\n      description: {\r\n        identifier: \"geometry.stairs\",\r\n        texture_width: 16,\r\n        texture_height: 16,\r\n      },\r\n      bones: [\r\n        {\r\n          name: \"body\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-8, 0, -8],\r\n              size: [16, 8, 16],\r\n              uv: {\r\n                north: { uv: [0, 8], uv_size: [16, 8] },\r\n                south: { uv: [0, 8], uv_size: [16, 8] },\r\n                east: { uv: [0, 8], uv_size: [16, 8] },\r\n                west: { uv: [0, 8], uv_size: [16, 8] },\r\n                up: { uv: [0, 0], uv_size: [16, 16] },\r\n                down: { uv: [0, 0], uv_size: [16, 16] },\r\n              },\r\n            },\r\n            {\r\n              origin: [-8, 8, 0],\r\n              size: [16, 8, 8],\r\n              uv: {\r\n                north: { uv: [0, 0], uv_size: [16, 8] },\r\n                south: { uv: [0, 0], uv_size: [16, 8] },\r\n                east: { uv: [8, 0], uv_size: [8, 8] },\r\n                west: { uv: [0, 0], uv_size: [8, 8] },\r\n                up: { uv: [0, 0], uv_size: [16, 8] },\r\n                down: { uv: [0, 0], uv_size: [16, 8] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n      ],\r\n    },\r\n  ],\r\n};\r\n\r\n/**\r\n * Stairs - stair-shaped block.\r\n * Uses minecraft:placement_position trait for vertical_half (upside-down placement)\r\n * and minecraft:connection trait for cardinal connections (connecting to adjacent stairs).\r\n * Requires format_version 1.21.130+ for the connection trait.\r\n */\r\nexport class StairsBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"stairs\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"stairs\",\r\n      displayName: \"Stairs\",\r\n      description: \"Stair-shaped block with directional placement and connections\",\r\n      category: \"placement\",\r\n      components: {\r\n        \"minecraft:geometry\": \"geometry.stairs\",\r\n        \"minecraft:transformation\": {\r\n          rotation: [0, 0, 0],\r\n        },\r\n      },\r\n      properties: {\r\n        \"custom:direction\": [0, 1, 2, 3],\r\n      },\r\n      minecraftTraits: {\r\n        \"minecraft:placement_position\": {\r\n          enabled_states: [\"minecraft:vertical_half\"],\r\n        },\r\n        \"minecraft:connection\": {\r\n          enabled_states: [\"minecraft:cardinal_connections\"],\r\n        },\r\n      },\r\n      geometryFiles: [\r\n        {\r\n          path: \"models/blocks/stairs.geo.json\",\r\n          content: STAIRS_GEOMETRY,\r\n        },\r\n      ],\r\n      permutations: [\r\n        // Normal stairs (bottom)\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 0 && q.block_state('minecraft:vertical_half') == 'bottom'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 1 && q.block_state('minecraft:vertical_half') == 'bottom'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 90, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 2 && q.block_state('minecraft:vertical_half') == 'bottom'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 180, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 3 && q.block_state('minecraft:vertical_half') == 'bottom'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 270, 0] } },\r\n        },\r\n        // Upside-down stairs (top)\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 0 && q.block_state('minecraft:vertical_half') == 'top'\",\r\n          components: { \"minecraft:transformation\": { rotation: [180, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 1 && q.block_state('minecraft:vertical_half') == 'top'\",\r\n          components: { \"minecraft:transformation\": { rotation: [180, 90, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 2 && q.block_state('minecraft:vertical_half') == 'top'\",\r\n          components: { \"minecraft:transformation\": { rotation: [180, 180, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 3 && q.block_state('minecraft:vertical_half') == 'top'\",\r\n          components: { \"minecraft:transformation\": { rotation: [180, 270, 0] } },\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Fence geometry definition.\r\n * Center post with 4 directional connection arms controlled by bone_visibility.\r\n * Uses minecraft:cardinal_connections states from the connection trait.\r\n */\r\nconst FENCE_GEOMETRY = {\r\n  format_version: \"1.21.40\",\r\n  \"minecraft:geometry\": [\r\n    {\r\n      description: {\r\n        identifier: \"geometry.fence\",\r\n        texture_width: 16,\r\n        texture_height: 16,\r\n      },\r\n      bones: [\r\n        {\r\n          name: \"post\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-2, 0, -2],\r\n              size: [4, 16, 4],\r\n              uv: {\r\n                north: { uv: [6, 0], uv_size: [4, 16] },\r\n                south: { uv: [6, 0], uv_size: [4, 16] },\r\n                east: { uv: [6, 0], uv_size: [4, 16] },\r\n                west: { uv: [6, 0], uv_size: [4, 16] },\r\n                up: { uv: [6, 6], uv_size: [4, 4] },\r\n                down: { uv: [6, 6], uv_size: [4, 4] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n        {\r\n          name: \"arm_north\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-1, 6, -8],\r\n              size: [2, 3, 6],\r\n              uv: {\r\n                north: { uv: [7, 0], uv_size: [2, 3] },\r\n                south: { uv: [7, 0], uv_size: [2, 3] },\r\n                east: { uv: [0, 0], uv_size: [6, 3] },\r\n                west: { uv: [0, 0], uv_size: [6, 3] },\r\n                up: { uv: [7, 0], uv_size: [2, 6] },\r\n                down: { uv: [7, 0], uv_size: [2, 6] },\r\n              },\r\n            },\r\n            {\r\n              origin: [-1, 12, -8],\r\n              size: [2, 3, 6],\r\n              uv: {\r\n                north: { uv: [7, 0], uv_size: [2, 3] },\r\n                south: { uv: [7, 0], uv_size: [2, 3] },\r\n                east: { uv: [0, 0], uv_size: [6, 3] },\r\n                west: { uv: [0, 0], uv_size: [6, 3] },\r\n                up: { uv: [7, 0], uv_size: [2, 6] },\r\n                down: { uv: [7, 0], uv_size: [2, 6] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n        {\r\n          name: \"arm_south\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-1, 6, 2],\r\n              size: [2, 3, 6],\r\n              uv: {\r\n                north: { uv: [7, 0], uv_size: [2, 3] },\r\n                south: { uv: [7, 0], uv_size: [2, 3] },\r\n                east: { uv: [0, 0], uv_size: [6, 3] },\r\n                west: { uv: [0, 0], uv_size: [6, 3] },\r\n                up: { uv: [7, 0], uv_size: [2, 6] },\r\n                down: { uv: [7, 0], uv_size: [2, 6] },\r\n              },\r\n            },\r\n            {\r\n              origin: [-1, 12, 2],\r\n              size: [2, 3, 6],\r\n              uv: {\r\n                north: { uv: [7, 0], uv_size: [2, 3] },\r\n                south: { uv: [7, 0], uv_size: [2, 3] },\r\n                east: { uv: [0, 0], uv_size: [6, 3] },\r\n                west: { uv: [0, 0], uv_size: [6, 3] },\r\n                up: { uv: [7, 0], uv_size: [2, 6] },\r\n                down: { uv: [7, 0], uv_size: [2, 6] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n        {\r\n          name: \"arm_east\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [2, 6, -1],\r\n              size: [6, 3, 2],\r\n              uv: {\r\n                north: { uv: [0, 0], uv_size: [6, 3] },\r\n                south: { uv: [0, 0], uv_size: [6, 3] },\r\n                east: { uv: [7, 0], uv_size: [2, 3] },\r\n                west: { uv: [7, 0], uv_size: [2, 3] },\r\n                up: { uv: [0, 7], uv_size: [6, 2] },\r\n                down: { uv: [0, 7], uv_size: [6, 2] },\r\n              },\r\n            },\r\n            {\r\n              origin: [2, 12, -1],\r\n              size: [6, 3, 2],\r\n              uv: {\r\n                north: { uv: [0, 0], uv_size: [6, 3] },\r\n                south: { uv: [0, 0], uv_size: [6, 3] },\r\n                east: { uv: [7, 0], uv_size: [2, 3] },\r\n                west: { uv: [7, 0], uv_size: [2, 3] },\r\n                up: { uv: [0, 7], uv_size: [6, 2] },\r\n                down: { uv: [0, 7], uv_size: [6, 2] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n        {\r\n          name: \"arm_west\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-8, 6, -1],\r\n              size: [6, 3, 2],\r\n              uv: {\r\n                north: { uv: [0, 0], uv_size: [6, 3] },\r\n                south: { uv: [0, 0], uv_size: [6, 3] },\r\n                east: { uv: [7, 0], uv_size: [2, 3] },\r\n                west: { uv: [7, 0], uv_size: [2, 3] },\r\n                up: { uv: [0, 7], uv_size: [6, 2] },\r\n                down: { uv: [0, 7], uv_size: [6, 2] },\r\n              },\r\n            },\r\n            {\r\n              origin: [-8, 12, -1],\r\n              size: [6, 3, 2],\r\n              uv: {\r\n                north: { uv: [0, 0], uv_size: [6, 3] },\r\n                south: { uv: [0, 0], uv_size: [6, 3] },\r\n                east: { uv: [7, 0], uv_size: [2, 3] },\r\n                west: { uv: [7, 0], uv_size: [2, 3] },\r\n                up: { uv: [0, 7], uv_size: [6, 2] },\r\n                down: { uv: [0, 7], uv_size: [6, 2] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n      ],\r\n    },\r\n  ],\r\n};\r\n\r\n/**\r\n * Fence - post-shaped block that connects to adjacent blocks.\r\n * Uses the minecraft:connection trait for automatic cardinal connection states,\r\n * minecraft:support shape \"fence\" for proper collision, and\r\n * bone_visibility in the geometry to show/hide connection arms.\r\n */\r\nexport class FenceBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"fence\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"fence\",\r\n      displayName: \"Fence\",\r\n      description: \"Fence post that connects to adjacent blocks\",\r\n      category: \"shape\",\r\n      components: {\r\n        \"minecraft:geometry\": {\r\n          identifier: \"geometry.fence\",\r\n          bone_visibility: {\r\n            arm_north: \"q.block_state('minecraft:north_connection') != 'none'\",\r\n            arm_south: \"q.block_state('minecraft:south_connection') != 'none'\",\r\n            arm_east: \"q.block_state('minecraft:east_connection') != 'none'\",\r\n            arm_west: \"q.block_state('minecraft:west_connection') != 'none'\",\r\n          },\r\n        },\r\n        \"minecraft:collision_box\": {\r\n          origin: [-2, 0, -2],\r\n          size: [4, 24, 4],\r\n        },\r\n        \"minecraft:selection_box\": {\r\n          origin: [-2, 0, -2],\r\n          size: [4, 16, 4],\r\n        },\r\n        \"minecraft:support\": {\r\n          shape: \"fence\",\r\n        },\r\n        \"minecraft:connection_rule\": {\r\n          accepts_connections_from: \"all\",\r\n          enabled_directions: [\"north\", \"south\", \"east\", \"west\"],\r\n        },\r\n      },\r\n      minecraftTraits: {\r\n        \"minecraft:connection\": {\r\n          enabled_states: [\"minecraft:cardinal_connections\"],\r\n        },\r\n      },\r\n      geometryFiles: [\r\n        {\r\n          path: \"models/blocks/fence.geo.json\",\r\n          content: FENCE_GEOMETRY,\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Light source - emits light.\r\n */\r\nexport class LightSourceBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"light_source\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const lightLevel = config?.lightLevel ?? 15;\r\n\r\n    return {\r\n      id: \"light_source\",\r\n      displayName: \"Light Source\",\r\n      description: \"Emits light\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:light_emission\": lightLevel,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Variable light - light level can change.\r\n */\r\nexport class VariableLightBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"variable_light\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const maxLightLevel = config?.maxLightLevel ?? 15;\r\n\r\n    return {\r\n      id: \"variable_light\",\r\n      displayName: \"Variable Light\",\r\n      description: \"Light level can change\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:light_emission\": 0,\r\n      },\r\n      properties: {\r\n        \"custom:light_level\": Array.from({ length: maxLightLevel + 1 }, (_, i) => i),\r\n      },\r\n      permutations: Array.from({ length: maxLightLevel + 1 }, (_, i) => ({\r\n        condition: `q.block_state('custom:light_level') == ${i}`,\r\n        components: { \"minecraft:light_emission\": i },\r\n      })),\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Passable - entities can walk through.\r\n */\r\nexport class PassableBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"passable\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"passable\",\r\n      displayName: \"Passable\",\r\n      description: \"Entities can walk through\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:collision_box\": false,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Transparent - allows light through.\r\n */\r\nexport class TransparentBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"transparent\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"transparent\",\r\n      displayName: \"Transparent\",\r\n      description: \"Allows light through\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:light_dampening\": 0,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Gravity affected - falls when unsupported.\r\n */\r\nexport class GravityAffectedBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"gravity_affected\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"gravity_affected\",\r\n      displayName: \"Gravity Affected\",\r\n      description: \"Falls when unsupported\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:on_placed\": {\r\n          event: \"check_fall\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Crop - can grow over time.\r\n */\r\nexport class CropBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"crop\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const growthStages = config?.growthStages ?? 7;\r\n\r\n    return {\r\n      id: \"crop\",\r\n      displayName: \"Crop\",\r\n      description: \"Can grow over time\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:collision_box\": false,\r\n        \"minecraft:tick\": {\r\n          interval_range: [10, 20],\r\n          looping: true,\r\n        },\r\n        \"minecraft:random_ticking\": {\r\n          on_tick: {\r\n            event: \"grow\",\r\n          },\r\n        },\r\n      },\r\n      properties: {\r\n        \"custom:growth_stage\": Array.from({ length: growthStages + 1 }, (_, i) => i),\r\n      },\r\n      permutations: Array.from({ length: growthStages + 1 }, (_, i) => ({\r\n        condition: `q.block_state('custom:growth_stage') == ${i}`,\r\n        components: {\r\n          \"minecraft:geometry\": `geometry.crop_stage_${i}`,\r\n        },\r\n      })),\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Flammable - block can catch fire and be destroyed by flames.\r\n */\r\nexport class FlammableBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"flammable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const catchChance = config?.catchChanceModifier ?? 5;\r\n    const destroyChance = config?.destroyChanceModifier ?? 20;\r\n\r\n    return {\r\n      id: \"flammable\",\r\n      displayName: \"Flammable\",\r\n      description: \"Can catch fire and burn\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:flammable\": {\r\n          catch_chance_modifier: catchChance,\r\n          destroy_chance_modifier: destroyChance,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Explosion resistant - block is highly resistant or immune to explosions.\r\n */\r\nexport class ExplosionResistantBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"explosion_resistant\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const resistance = config?.explosionResistance ?? 1200;\r\n\r\n    return {\r\n      id: \"explosion_resistant\",\r\n      displayName: \"Explosion Resistant\",\r\n      description: \"Highly resistant to explosions\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:destructible_by_explosion\": {\r\n          explosion_resistance: resistance,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Slippery - low-friction surface like ice.\r\n * Friction range is 0.0-0.9 where lower = more slippery.\r\n * Default block friction is 0.4; this uses 0.1 for a very slippery surface.\r\n */\r\nexport class SlipperyBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"slippery\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const friction = config?.friction ?? 0.1;\r\n\r\n    return {\r\n      id: \"slippery\",\r\n      displayName: \"Slippery\",\r\n      description: \"Low-friction surface, entities slide\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:friction\": friction,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Sword - melee weapon.\r\n */\r\nexport class SwordItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"sword\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const damage = config?.damage ?? 5;\r\n    const durability = config?.durability ?? 250;\r\n\r\n    return {\r\n      id: \"sword\",\r\n      displayName: \"Sword\",\r\n      description: \"Melee weapon\",\r\n      category: \"tool\",\r\n      components: {\r\n        \"minecraft:damage\": {\r\n          value: damage,\r\n        },\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:hand_equipped\": true,\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"sword\",\r\n        },\r\n        \"minecraft:can_destroy_in_creative\": false,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Pickaxe - mining tool.\r\n */\r\nexport class PickaxeItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"pickaxe\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const miningSpeed = config?.miningSpeed ?? 1.2;\r\n    const durability = config?.durability ?? 250;\r\n\r\n    return {\r\n      id: \"pickaxe\",\r\n      displayName: \"Pickaxe\",\r\n      description: \"Mining tool\",\r\n      category: \"tool\",\r\n      components: {\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:hand_equipped\": true,\r\n        \"minecraft:digger\": {\r\n          use_efficiency: true,\r\n          destroy_speeds: [\r\n            {\r\n              block: { tags: \"q.any_tag('stone', 'metal', 'diamond_pick_diggable')\" },\r\n              speed: miningSpeed,\r\n            },\r\n          ],\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"pickaxe\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Axe - chopping tool.\r\n */\r\nexport class AxeItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"axe\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const miningSpeed = config?.miningSpeed ?? 1.2;\r\n    const durability = config?.durability ?? 250;\r\n\r\n    return {\r\n      id: \"axe\",\r\n      displayName: \"Axe\",\r\n      description: \"Chopping tool\",\r\n      category: \"tool\",\r\n      components: {\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:hand_equipped\": true,\r\n        \"minecraft:digger\": {\r\n          use_efficiency: true,\r\n          destroy_speeds: [\r\n            {\r\n              block: { tags: \"q.any_tag('wood', 'log')\" },\r\n              speed: miningSpeed,\r\n            },\r\n          ],\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"axe\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Shovel - digging tool.\r\n */\r\nexport class ShovelItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"shovel\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const miningSpeed = config?.miningSpeed ?? 1.2;\r\n    const durability = config?.durability ?? 250;\r\n\r\n    return {\r\n      id: \"shovel\",\r\n      displayName: \"Shovel\",\r\n      description: \"Digging tool\",\r\n      category: \"tool\",\r\n      components: {\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:hand_equipped\": true,\r\n        \"minecraft:digger\": {\r\n          use_efficiency: true,\r\n          destroy_speeds: [\r\n            {\r\n              block: { tags: \"q.any_tag('dirt', 'sand', 'gravel', 'soul_sand', 'snow')\" },\r\n              speed: miningSpeed,\r\n            },\r\n          ],\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"shovel\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Hoe - farming tool.\r\n */\r\nexport class HoeItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"hoe\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const durability = config?.durability ?? 250;\r\n\r\n    return {\r\n      id: \"hoe\",\r\n      displayName: \"Hoe\",\r\n      description: \"Farming tool\",\r\n      category: \"tool\",\r\n      components: {\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:hand_equipped\": true,\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"hoe\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Helmet - head armor.\r\n */\r\nexport class HelmetItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"helmet\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const protection = config?.protection ?? 2;\r\n    const durability = config?.durability ?? 165;\r\n\r\n    return {\r\n      id: \"helmet\",\r\n      displayName: \"Helmet\",\r\n      description: \"Head armor\",\r\n      category: \"armor\",\r\n      components: {\r\n        \"minecraft:armor\": {\r\n          protection: protection,\r\n        },\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:wearable\": {\r\n          slot: \"slot.armor.head\",\r\n          dispensable: true,\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"armor_head\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Chestplate - chest armor.\r\n */\r\nexport class ChestplateItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"chestplate\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const protection = config?.protection ?? 6;\r\n    const durability = config?.durability ?? 240;\r\n\r\n    return {\r\n      id: \"chestplate\",\r\n      displayName: \"Chestplate\",\r\n      description: \"Chest armor\",\r\n      category: \"armor\",\r\n      components: {\r\n        \"minecraft:armor\": {\r\n          protection: protection,\r\n        },\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:wearable\": {\r\n          slot: \"slot.armor.chest\",\r\n          dispensable: true,\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"armor_torso\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Leggings - leg armor.\r\n */\r\nexport class LeggingsItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"leggings\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const protection = config?.protection ?? 5;\r\n    const durability = config?.durability ?? 225;\r\n\r\n    return {\r\n      id: \"leggings\",\r\n      displayName: \"Leggings\",\r\n      description: \"Leg armor\",\r\n      category: \"armor\",\r\n      components: {\r\n        \"minecraft:armor\": {\r\n          protection: protection,\r\n        },\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:wearable\": {\r\n          slot: \"slot.armor.legs\",\r\n          dispensable: true,\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"armor_legs\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Boots - foot armor.\r\n */\r\nexport class BootsItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"boots\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const protection = config?.protection ?? 2;\r\n    const durability = config?.durability ?? 195;\r\n\r\n    return {\r\n      id: \"boots\",\r\n      displayName: \"Boots\",\r\n      description: \"Foot armor\",\r\n      category: \"armor\",\r\n      components: {\r\n        \"minecraft:armor\": {\r\n          protection: protection,\r\n        },\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:wearable\": {\r\n          slot: \"slot.armor.feet\",\r\n          dispensable: true,\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"armor_feet\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Food - can be eaten.\r\n */\r\nexport class FoodItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"food\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const nutrition = config?.nutrition ?? 4;\r\n    const saturation = config?.saturation ?? 0.6;\r\n\r\n    return {\r\n      id: \"food\",\r\n      displayName: \"Food\",\r\n      description: \"Can be eaten\",\r\n      category: \"consumable\",\r\n      components: {\r\n        \"minecraft:food\": {\r\n          nutrition: nutrition,\r\n          saturation_modifier: saturation,\r\n          can_always_eat: false,\r\n        },\r\n        \"minecraft:use_modifiers\": {\r\n          use_duration: 1.6,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Drink - can be drunk.\r\n */\r\nexport class DrinkItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"drink\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const nutrition = config?.nutrition ?? 0;\r\n\r\n    return {\r\n      id: \"drink\",\r\n      displayName: \"Drink\",\r\n      description: \"Can be drunk\",\r\n      category: \"consumable\",\r\n      components: {\r\n        \"minecraft:food\": {\r\n          nutrition: nutrition,\r\n          saturation_modifier: 0,\r\n          can_always_eat: true,\r\n        },\r\n        \"minecraft:use_modifiers\": {\r\n          use_duration: 2.0,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Throwable - can be thrown.\r\n */\r\nexport class ThrowableItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"throwable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const launchPower = config?.launchPower ?? 1.0;\r\n\r\n    return {\r\n      id: \"throwable\",\r\n      displayName: \"Throwable\",\r\n      description: \"Can be thrown\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:throwable\": {\r\n          do_swing_animation: true,\r\n          launch_power_scale: launchPower,\r\n          max_launch_power: 1.5,\r\n        },\r\n        \"minecraft:projectile\": {\r\n          projectile_entity: \"minecraft:snowball\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Stackable - can stack to 64.\r\n */\r\nexport class StackableItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"stackable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const maxStackSize = config?.maxStackSize ?? 64;\r\n\r\n    return {\r\n      id: \"stackable\",\r\n      displayName: \"Stackable\",\r\n      description: \"Can stack to 64\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:max_stack_size\": maxStackSize,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Non-stackable - cannot stack.\r\n */\r\nexport class NonStackableItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"non_stackable\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IItemTraitData {\r\n    return {\r\n      id: \"non_stackable\",\r\n      displayName: \"Non-Stackable\",\r\n      description: \"Cannot stack\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:max_stack_size\": 1,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Fuel - can be used as fuel in a furnace.\r\n */\r\nexport class FuelItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"fuel\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const burnDuration = config?.burnDuration ?? 200;\r\n\r\n    return {\r\n      id: \"fuel\",\r\n      displayName: \"Fuel\",\r\n      description: \"Can be used as fuel in a furnace\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:fuel\": {\r\n          duration: burnDuration,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Glinting - has enchantment glint effect.\r\n */\r\nexport class GlintingItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"glinting\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IItemTraitData {\r\n    return {\r\n      id: \"glinting\",\r\n      displayName: \"Glinting\",\r\n      description: \"Has enchantment glint effect\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:glint\": true,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Repairable - can be repaired.\r\n */\r\nexport class RepairableItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"repairable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const repairItems = config?.repairItems ?? [\"minecraft:iron_ingot\"];\r\n\r\n    return {\r\n      id: \"repairable\",\r\n      displayName: \"Repairable\",\r\n      description: \"Can be repaired\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:repairable\": {\r\n          repair_items: repairItems.map((item: string) => ({\r\n            items: [item],\r\n            repair_amount: \"context.other->q.remaining_durability + 0.05 * context.other->q.max_durability\",\r\n          })),\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Cooldown - has a cooldown after use.\r\n */\r\nexport class CooldownItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"cooldown\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const cooldownDuration = config?.cooldownDuration ?? 1.0;\r\n    const cooldownCategory = config?.cooldownCategory ?? \"attack\";\r\n\r\n    return {\r\n      id: \"cooldown\",\r\n      displayName: \"Cooldown\",\r\n      description: \"Has a cooldown after use\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:cooldown\": {\r\n          category: cooldownCategory,\r\n          duration: cooldownDuration,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Music disc - can be played in a jukebox.\r\n */\r\nexport class MusicDiscItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"music_disc\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const soundEvent = config?.soundEvent ?? \"record.13\";\r\n\r\n    return {\r\n      id: \"music_disc\",\r\n      displayName: \"Music Disc\",\r\n      description: \"Can be played in a jukebox\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:record\": {\r\n          sound_event: soundEvent,\r\n          duration: 178.0,\r\n          comparator_signal: 1,\r\n        },\r\n        \"minecraft:max_stack_size\": 1,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Traits Index\r\n *\r\n * This module exports all content traits for Minecraft content generation.\r\n * Traits are organized by content type: Entity, Block, and Item.\r\n */\r\n\r\n// Base types and registry\r\nexport type {\r\n  ITraitData,\r\n  IEntityTraitData,\r\n  IBlockTraitData,\r\n  IItemTraitData,\r\n  ITraitConfig,\r\n  TraitCategory,\r\n} from \"./ContentTraits\";\r\n\r\nexport { EntityContentTrait, BlockContentTrait, ItemContentTrait, TraitRegistry } from \"./ContentTraits\";\r\n\r\n// ============================================================================\r\n// ENTITY TRAITS\r\n// ============================================================================\r\n\r\n// Body Types\r\nexport { HumanoidEntityTrait } from \"./HumanoidEntityTrait\";\r\nexport { QuadrupedEntityTrait } from \"./QuadrupedEntityTrait\";\r\nexport { QuadrupedSmallEntityTrait } from \"./QuadrupedSmallEntityTrait\";\r\nexport { FlyingEntityTrait } from \"./FlyingEntityTrait\";\r\nexport { AquaticEntityTrait } from \"./AquaticEntityTrait\";\r\nexport { ArthropodEntityTrait } from \"./ArthropodEntityTrait\";\r\nexport { SlimeEntityTrait } from \"./SlimeEntityTrait\";\r\n\r\n// Behaviors\r\nexport { HostileEntityTrait } from \"./HostileEntityTrait\";\r\nexport { PassiveEntityTrait } from \"./PassiveEntityTrait\";\r\nexport { NeutralEntityTrait } from \"./NeutralEntityTrait\";\r\nexport { BossEntityTrait } from \"./BossEntityTrait\";\r\nexport { WandersEntityTrait } from \"./WandersEntityTrait\";\r\nexport { FleesDaylightEntityTrait } from \"./FleesDaylightEntityTrait\";\r\n\r\n// Combat\r\nexport { MeleeAttackerEntityTrait } from \"./MeleeAttackerEntityTrait\";\r\nexport { RangedAttackerEntityTrait } from \"./RangedAttackerEntityTrait\";\r\nexport { ExploderEntityTrait } from \"./ExploderEntityTrait\";\r\n\r\n// Interaction\r\nexport { TameableEntityTrait } from \"./TameableEntityTrait\";\r\nexport { RideableEntityTrait } from \"./RideableEntityTrait\";\r\nexport { BreedableEntityTrait } from \"./BreedableEntityTrait\";\r\nexport { LeasableEntityTrait } from \"./LeasableEntityTrait\";\r\nexport { TraderEntityTrait } from \"./TraderEntityTrait\";\r\n\r\n// Special\r\nexport { UndeadEntityTrait } from \"./UndeadEntityTrait\";\r\nexport { BabyVariantEntityTrait } from \"./BabyVariantEntityTrait\";\r\nexport { TeleporterEntityTrait } from \"./TeleporterEntityTrait\";\r\n\r\n// ============================================================================\r\n// BLOCK TRAITS\r\n// ============================================================================\r\n\r\n// Materials\r\nexport { StoneMaterialBlockTrait } from \"./StoneMaterialBlockTrait\";\r\nexport { WoodMaterialBlockTrait } from \"./WoodMaterialBlockTrait\";\r\nexport { MetalMaterialBlockTrait } from \"./MetalMaterialBlockTrait\";\r\nexport { SoftMaterialBlockTrait } from \"./SoftMaterialBlockTrait\";\r\n\r\n// Interactive\r\nexport { DoorBlockTrait } from \"./DoorBlockTrait\";\r\nexport { TrapdoorBlockTrait } from \"./TrapdoorBlockTrait\";\r\nexport { ButtonBlockTrait } from \"./ButtonBlockTrait\";\r\nexport { LeverBlockTrait } from \"./LeverBlockTrait\";\r\nexport { CraftingStationBlockTrait } from \"./CraftingStationBlockTrait\";\r\nexport { RedstoneProducerBlockTrait } from \"./RedstoneProducerBlockTrait\";\r\n\r\n// Placement\r\nexport { RotatableHorizontalBlockTrait } from \"./RotatableHorizontalBlockTrait\";\r\nexport { RotatableAllBlockTrait } from \"./RotatableAllBlockTrait\";\r\nexport { SlabBlockTrait } from \"./SlabBlockTrait\";\r\nexport { StairsBlockTrait } from \"./StairsBlockTrait\";\r\nexport { FenceBlockTrait } from \"./FenceBlockTrait\";\r\n\r\n// Special\r\nexport { LightSourceBlockTrait } from \"./LightSourceBlockTrait\";\r\nexport { VariableLightBlockTrait } from \"./VariableLightBlockTrait\";\r\nexport { PassableBlockTrait } from \"./PassableBlockTrait\";\r\nexport { TransparentBlockTrait } from \"./TransparentBlockTrait\";\r\nexport { GravityAffectedBlockTrait } from \"./GravityAffectedBlockTrait\";\r\nexport { CropBlockTrait } from \"./CropBlockTrait\";\r\nexport { FlammableBlockTrait } from \"./FlammableBlockTrait\";\r\nexport { ExplosionResistantBlockTrait } from \"./ExplosionResistantBlockTrait\";\r\nexport { SlipperyBlockTrait } from \"./SlipperyBlockTrait\";\r\n\r\n// ============================================================================\r\n// ITEM TRAITS\r\n// ============================================================================\r\n\r\n// Tools\r\nexport { SwordItemTrait } from \"./SwordItemTrait\";\r\nexport { PickaxeItemTrait } from \"./PickaxeItemTrait\";\r\nexport { AxeItemTrait } from \"./AxeItemTrait\";\r\nexport { ShovelItemTrait } from \"./ShovelItemTrait\";\r\nexport { HoeItemTrait } from \"./HoeItemTrait\";\r\n\r\n// Armor\r\nexport { HelmetItemTrait } from \"./HelmetItemTrait\";\r\nexport { ChestplateItemTrait } from \"./ChestplateItemTrait\";\r\nexport { LeggingsItemTrait } from \"./LeggingsItemTrait\";\r\nexport { BootsItemTrait } from \"./BootsItemTrait\";\r\n\r\n// Consumables\r\nexport { FoodItemTrait } from \"./FoodItemTrait\";\r\nexport { DrinkItemTrait } from \"./DrinkItemTrait\";\r\n\r\n// Special\r\nexport { ThrowableItemTrait } from \"./ThrowableItemTrait\";\r\nexport { StackableItemTrait } from \"./StackableItemTrait\";\r\nexport { NonStackableItemTrait } from \"./NonStackableItemTrait\";\r\nexport { FuelItemTrait } from \"./FuelItemTrait\";\r\nexport { GlintingItemTrait } from \"./GlintingItemTrait\";\r\nexport { RepairableItemTrait } from \"./RepairableItemTrait\";\r\nexport { CooldownItemTrait } from \"./CooldownItemTrait\";\r\nexport { MusicDiscItemTrait } from \"./MusicDiscItemTrait\";\r\n\r\n// ============================================================================\r\n// TRAIT REGISTRATION FUNCTIONS\r\n// ============================================================================\r\n\r\nimport { TraitRegistry } from \"./ContentTraits\";\r\n\r\n// Entity traits\r\nimport { HumanoidEntityTrait } from \"./HumanoidEntityTrait\";\r\nimport { QuadrupedEntityTrait } from \"./QuadrupedEntityTrait\";\r\nimport { QuadrupedSmallEntityTrait } from \"./QuadrupedSmallEntityTrait\";\r\nimport { FlyingEntityTrait } from \"./FlyingEntityTrait\";\r\nimport { AquaticEntityTrait } from \"./AquaticEntityTrait\";\r\nimport { ArthropodEntityTrait } from \"./ArthropodEntityTrait\";\r\nimport { SlimeEntityTrait } from \"./SlimeEntityTrait\";\r\nimport { HostileEntityTrait } from \"./HostileEntityTrait\";\r\nimport { PassiveEntityTrait } from \"./PassiveEntityTrait\";\r\nimport { NeutralEntityTrait } from \"./NeutralEntityTrait\";\r\nimport { BossEntityTrait } from \"./BossEntityTrait\";\r\nimport { WandersEntityTrait } from \"./WandersEntityTrait\";\r\nimport { FleesDaylightEntityTrait } from \"./FleesDaylightEntityTrait\";\r\nimport { MeleeAttackerEntityTrait } from \"./MeleeAttackerEntityTrait\";\r\nimport { RangedAttackerEntityTrait } from \"./RangedAttackerEntityTrait\";\r\nimport { ExploderEntityTrait } from \"./ExploderEntityTrait\";\r\nimport { TameableEntityTrait } from \"./TameableEntityTrait\";\r\nimport { RideableEntityTrait } from \"./RideableEntityTrait\";\r\nimport { BreedableEntityTrait } from \"./BreedableEntityTrait\";\r\nimport { LeasableEntityTrait } from \"./LeasableEntityTrait\";\r\nimport { TraderEntityTrait } from \"./TraderEntityTrait\";\r\nimport { UndeadEntityTrait } from \"./UndeadEntityTrait\";\r\nimport { BabyVariantEntityTrait } from \"./BabyVariantEntityTrait\";\r\nimport { TeleporterEntityTrait } from \"./TeleporterEntityTrait\";\r\n\r\n// Block traits\r\nimport { StoneMaterialBlockTrait } from \"./StoneMaterialBlockTrait\";\r\nimport { WoodMaterialBlockTrait } from \"./WoodMaterialBlockTrait\";\r\nimport { MetalMaterialBlockTrait } from \"./MetalMaterialBlockTrait\";\r\nimport { SoftMaterialBlockTrait } from \"./SoftMaterialBlockTrait\";\r\nimport { DoorBlockTrait } from \"./DoorBlockTrait\";\r\nimport { TrapdoorBlockTrait } from \"./TrapdoorBlockTrait\";\r\nimport { ButtonBlockTrait } from \"./ButtonBlockTrait\";\r\nimport { LeverBlockTrait } from \"./LeverBlockTrait\";\r\nimport { CraftingStationBlockTrait } from \"./CraftingStationBlockTrait\";\r\nimport { RedstoneProducerBlockTrait } from \"./RedstoneProducerBlockTrait\";\r\nimport { RotatableHorizontalBlockTrait } from \"./RotatableHorizontalBlockTrait\";\r\nimport { RotatableAllBlockTrait } from \"./RotatableAllBlockTrait\";\r\nimport { SlabBlockTrait } from \"./SlabBlockTrait\";\r\nimport { StairsBlockTrait } from \"./StairsBlockTrait\";\r\nimport { FenceBlockTrait } from \"./FenceBlockTrait\";\r\nimport { LightSourceBlockTrait } from \"./LightSourceBlockTrait\";\r\nimport { VariableLightBlockTrait } from \"./VariableLightBlockTrait\";\r\nimport { PassableBlockTrait } from \"./PassableBlockTrait\";\r\nimport { TransparentBlockTrait } from \"./TransparentBlockTrait\";\r\nimport { GravityAffectedBlockTrait } from \"./GravityAffectedBlockTrait\";\r\nimport { CropBlockTrait } from \"./CropBlockTrait\";\r\nimport { FlammableBlockTrait } from \"./FlammableBlockTrait\";\r\nimport { ExplosionResistantBlockTrait } from \"./ExplosionResistantBlockTrait\";\r\nimport { SlipperyBlockTrait } from \"./SlipperyBlockTrait\";\r\n\r\n// Item traits\r\nimport { SwordItemTrait } from \"./SwordItemTrait\";\r\nimport { PickaxeItemTrait } from \"./PickaxeItemTrait\";\r\nimport { AxeItemTrait } from \"./AxeItemTrait\";\r\nimport { ShovelItemTrait } from \"./ShovelItemTrait\";\r\nimport { HoeItemTrait } from \"./HoeItemTrait\";\r\nimport { HelmetItemTrait } from \"./HelmetItemTrait\";\r\nimport { ChestplateItemTrait } from \"./ChestplateItemTrait\";\r\nimport { LeggingsItemTrait } from \"./LeggingsItemTrait\";\r\nimport { BootsItemTrait } from \"./BootsItemTrait\";\r\nimport { FoodItemTrait } from \"./FoodItemTrait\";\r\nimport { DrinkItemTrait } from \"./DrinkItemTrait\";\r\nimport { ThrowableItemTrait } from \"./ThrowableItemTrait\";\r\nimport { StackableItemTrait } from \"./StackableItemTrait\";\r\nimport { NonStackableItemTrait } from \"./NonStackableItemTrait\";\r\nimport { FuelItemTrait } from \"./FuelItemTrait\";\r\nimport { GlintingItemTrait } from \"./GlintingItemTrait\";\r\nimport { RepairableItemTrait } from \"./RepairableItemTrait\";\r\nimport { CooldownItemTrait } from \"./CooldownItemTrait\";\r\nimport { MusicDiscItemTrait } from \"./MusicDiscItemTrait\";\r\n\r\n/**\r\n * Registers all built-in entity traits with the TraitRegistry.\r\n */\r\nexport function registerAllEntityTraits(): void {\r\n  // Body types\r\n  TraitRegistry.registerEntityTrait(new HumanoidEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new QuadrupedEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new QuadrupedSmallEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new FlyingEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new AquaticEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new ArthropodEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new SlimeEntityTrait());\r\n\r\n  // Behaviors\r\n  TraitRegistry.registerEntityTrait(new HostileEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new PassiveEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new NeutralEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new BossEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new WandersEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new FleesDaylightEntityTrait());\r\n\r\n  // Combat\r\n  TraitRegistry.registerEntityTrait(new MeleeAttackerEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new RangedAttackerEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new ExploderEntityTrait());\r\n\r\n  // Interaction\r\n  TraitRegistry.registerEntityTrait(new TameableEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new RideableEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new BreedableEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new LeasableEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new TraderEntityTrait());\r\n\r\n  // Special\r\n  TraitRegistry.registerEntityTrait(new UndeadEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new BabyVariantEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new TeleporterEntityTrait());\r\n}\r\n\r\n/**\r\n * Registers all built-in block traits with the TraitRegistry.\r\n */\r\nexport function registerAllBlockTraits(): void {\r\n  // Materials\r\n  TraitRegistry.registerBlockTrait(new StoneMaterialBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new WoodMaterialBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new MetalMaterialBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new SoftMaterialBlockTrait());\r\n\r\n  // Interactive\r\n  TraitRegistry.registerBlockTrait(new DoorBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new TrapdoorBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new ButtonBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new LeverBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new CraftingStationBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new RedstoneProducerBlockTrait());\r\n\r\n  // Placement\r\n  TraitRegistry.registerBlockTrait(new RotatableHorizontalBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new RotatableAllBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new SlabBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new StairsBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new FenceBlockTrait());\r\n\r\n  // Special\r\n  TraitRegistry.registerBlockTrait(new LightSourceBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new VariableLightBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new PassableBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new TransparentBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new GravityAffectedBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new CropBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new FlammableBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new ExplosionResistantBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new SlipperyBlockTrait());\r\n}\r\n\r\n/**\r\n * Registers all built-in item traits with the TraitRegistry.\r\n */\r\nexport function registerAllItemTraits(): void {\r\n  // Tools\r\n  TraitRegistry.registerItemTrait(new SwordItemTrait());\r\n  TraitRegistry.registerItemTrait(new PickaxeItemTrait());\r\n  TraitRegistry.registerItemTrait(new AxeItemTrait());\r\n  TraitRegistry.registerItemTrait(new ShovelItemTrait());\r\n  TraitRegistry.registerItemTrait(new HoeItemTrait());\r\n\r\n  // Armor\r\n  TraitRegistry.registerItemTrait(new HelmetItemTrait());\r\n  TraitRegistry.registerItemTrait(new ChestplateItemTrait());\r\n  TraitRegistry.registerItemTrait(new LeggingsItemTrait());\r\n  TraitRegistry.registerItemTrait(new BootsItemTrait());\r\n\r\n  // Consumables\r\n  TraitRegistry.registerItemTrait(new FoodItemTrait());\r\n  TraitRegistry.registerItemTrait(new DrinkItemTrait());\r\n\r\n  // Special\r\n  TraitRegistry.registerItemTrait(new ThrowableItemTrait());\r\n  TraitRegistry.registerItemTrait(new StackableItemTrait());\r\n  TraitRegistry.registerItemTrait(new NonStackableItemTrait());\r\n  TraitRegistry.registerItemTrait(new FuelItemTrait());\r\n  TraitRegistry.registerItemTrait(new GlintingItemTrait());\r\n  TraitRegistry.registerItemTrait(new RepairableItemTrait());\r\n  TraitRegistry.registerItemTrait(new CooldownItemTrait());\r\n  TraitRegistry.registerItemTrait(new MusicDiscItemTrait());\r\n}\r\n\r\n/**\r\n * Registers all built-in traits with the TraitRegistry.\r\n */\r\nexport function registerAllTraits(): void {\r\n  registerAllEntityTraits();\r\n  registerAllBlockTraits();\r\n  registerAllItemTraits();\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * MCP Model Design Format\r\n *\r\n * This file defines the intermediary format for AI-assisted 3D model design.\r\n * It uses a per-face specification that is intuitive for AI reasoning while\r\n * being straightforward to convert to Minecraft's .geo.json format.\r\n *\r\n * Key design principles:\r\n * 1. Each bone contains cubes, each cube has 6 faces\r\n * 2. Faces can be colored with solid colors or SVG content\r\n * 3. SVG content is tiled into a texture atlas automatically\r\n * 4. UV coordinates are computed based on atlas layout\r\n */\r\n\r\n// Re-export effect types for convenient access\r\nexport type {\r\n  ITextureEffects,\r\n  ILightingEffect,\r\n  LightingPreset,\r\n  IBorderEffect,\r\n  IBorderSide,\r\n  BorderStyle,\r\n  IOverlayEffect,\r\n  OverlayPattern,\r\n  IColorVariationEffect,\r\n  ColorVariationMode,\r\n  ITilingEffect,\r\n  TilingPattern,\r\n} from \"./TextureEffects\";\r\n\r\n/**\r\n * A single color in RGBA format (0-255 for each channel)\r\n */\r\nexport interface IMcpColorRGBA {\r\n  r: number; // 0-255\r\n  g: number; // 0-255\r\n  b: number; // 0-255\r\n  a?: number; // 0-255, defaults to 255 (fully opaque)\r\n}\r\n\r\n/**\r\n * Textured rectangle fill type - defines how a rectangular area is filled with color/pattern.\r\n * This unified concept replaces separate \"color\" and \"noise\" properties for easier AI reasoning.\r\n */\r\nexport type TexturedRectangleType =\r\n  | \"none\" // No background fill - produces a fully transparent rectangle (useful for pixelArt-only textures)\r\n  | \"solid\" // Solid color fill - uses first color in colors array\r\n  | \"random_noise\" // Simple random noise - each pixel randomly picks from colors\r\n  | \"dither_noise\" // Ordered dithering using Bayer matrix - creates regular pattern\r\n  | \"perlin_noise\" // Perlin-like noise - smoother, organic-looking variation\r\n  | \"stipple_noise\" // Stipple pattern - dots/spots scattered on base color\r\n  | \"gradient\"; // Gradient - smooth transition between colors\r\n\r\n/**\r\n * @deprecated Use TexturedRectangleType instead. This alias is for backwards compatibility.\r\n */\r\nexport type NoisePatternType = \"random\" | \"dither\" | \"perlin\" | \"stipple\" | \"gradient\";\r\n\r\n/**\r\n * Textured rectangle configuration for procedural Minecraft-style textures.\r\n * A unified way to specify how a rectangular area should be filled.\r\n *\r\n * Examples:\r\n * - Solid red: { type: \"solid\", colors: [\"#FF0000\"] }\r\n * - Stone texture: { type: \"stipple_noise\", colors: [\"#8B8B8B\", \"#7A7A7A\"], seed: 123 }\r\n * - Wood grain: { type: \"dither_noise\", colors: [\"#8B4513\", \"#A0522D\"], seed: 456 }\r\n */\r\nexport interface IMcpTexturedRectangle {\r\n  /**\r\n   * The fill algorithm to use.\r\n   * - \"solid\": Solid color fill using the first color\r\n   * - \"random_noise\": Random pixel-by-pixel color selection\r\n   * - \"dither_noise\": Ordered dithering using Bayer matrix pattern\r\n   * - \"perlin_noise\": Smooth organic Perlin-like noise\r\n   * - \"stipple_noise\": Scattered dots/spots on base color (best for organic materials)\r\n   * - \"gradient\": Smooth transition between colors\r\n   */\r\n  type: TexturedRectangleType;\r\n\r\n  /**\r\n   * Array of colors to use. For \"solid\", only the first color is used.\r\n   * For noise types, provide 2+ colors for richer textures.\r\n   * Colors can be hex strings (\"#FF0000\") or rgb strings (\"rgb(255,0,0)\").\r\n   * For \"none\", colors are ignored and may be omitted (background is fully transparent).\r\n   */\r\n  colors: (string | IMcpColorRGBA)[];\r\n\r\n  /**\r\n   * Noise intensity/factor from 0 to 1. Default is 0.2.\r\n   * - 0: Minimal noise variation\r\n   * - 0.5: Balanced mix of colors\r\n   * - 1: Maximum noise variation\r\n   * Only applies to noise types, ignored for \"solid\".\r\n   */\r\n  factor?: number;\r\n\r\n  /**\r\n   * Random seed for deterministic noise generation.\r\n   * If not provided, a seed is generated from a hash of the texture context.\r\n   * Only applies to noise types, ignored for \"solid\".\r\n   */\r\n  seed?: number;\r\n\r\n  /**\r\n   * Pixel size for the noise pattern. Default is 1.\r\n   * Higher values create blockier/chunkier noise patterns.\r\n   * Only applies to noise types, ignored for \"solid\".\r\n   */\r\n  pixelSize?: number;\r\n\r\n  /**\r\n   * Scale factor for Perlin noise. Default is 4.\r\n   * Higher values create smaller/tighter noise patterns.\r\n   * Only applies to \"perlin_noise\" type.\r\n   */\r\n  scale?: number;\r\n\r\n  /**\r\n   * Post-processing effects to apply to the generated texture.\r\n   * Effects are applied in order: colorVariation -> lighting -> overlay -> border -> tiling.\r\n   *\r\n   * Example - weathered stone with inset lighting:\r\n   * ```json\r\n   * {\r\n   *   \"type\": \"stipple_noise\",\r\n   *   \"colors\": [\"#808080\", \"#707070\"],\r\n   *   \"effects\": {\r\n   *     \"lighting\": { \"preset\": \"inset\", \"intensity\": 0.3 },\r\n   *     \"overlay\": { \"pattern\": \"cracks\", \"density\": 0.2 }\r\n   *   }\r\n   * }\r\n   * ```\r\n   */\r\n  effects?: import(\"./TextureEffects\").ITextureEffects;\r\n}\r\n\r\n/**\r\n * @deprecated Use IMcpTexturedRectangle instead. This interface is for backwards compatibility.\r\n */\r\nexport interface IMcpNoiseConfig {\r\n  pattern?: NoisePatternType;\r\n  colors: (string | IMcpColorRGBA)[];\r\n  factor?: number;\r\n  seed?: number;\r\n  pixelSize?: number;\r\n  scale?: number;\r\n}\r\n\r\n/**\r\n * A single pixel color for pixel art.\r\n * Specify color using EITHER r/g/b values (0-255) OR hex string.\r\n */\r\nexport interface IMcpPixelColor {\r\n  /** Red channel (0-255) */\r\n  r?: number;\r\n  /** Green channel (0-255) */\r\n  g?: number;\r\n  /** Blue channel (0-255) */\r\n  b?: number;\r\n  /** Alpha channel (0-255, default 255 = opaque) */\r\n  a?: number;\r\n  /** Alternative: hex color string like \"#FF0000\" or \"#FF0000FF\" */\r\n  hex?: string;\r\n}\r\n\r\n/**\r\n * Pixel art overlay for face textures.\r\n *\r\n * Uses ASCII art patterns where each character maps to a color in the palette.\r\n * This format is optimized for AI readability - the pattern is visible in the text itself.\r\n *\r\n * Example - A creeper face:\r\n * ```json\r\n * {\r\n *   \"x\": 1, \"y\": 2,\r\n *   \"lines\": [\r\n *     \"B BB B\",\r\n *     \"B BB B\",\r\n *     \"  BB  \",\r\n *     \" BBBB \",\r\n *     \" B  B \"\r\n *   ],\r\n *   \"palette\": {\r\n *     \"B\": { \"r\": 0, \"g\": 0, \"b\": 0 }\r\n *   }\r\n * }\r\n * ```\r\n *\r\n * Rules:\r\n * - Space character (' ') is always transparent (not drawn)\r\n * - Lines can be different lengths - shorter lines are right-padded with transparent pixels\r\n * - Any printable ASCII character can be used as a palette key\r\n * - Palette colors support RGBA (0-255) or hex strings\r\n */\r\n/**\r\n * Scale mode for pixel art rendering.\r\n * - \"unit\": Each character represents 1 Minecraft unit, scaled by pixelsPerUnit (default)\r\n * - \"exact\": Each character is exactly 1 pixel, no scaling\r\n * - \"cover\": Pixel art is scaled to completely cover the face texture\r\n */\r\nexport type IMcpPixelArtScaleMode = \"unit\" | \"exact\" | \"cover\";\r\n\r\nexport interface IMcpPixelArt {\r\n  /**\r\n   * How to scale the pixel art relative to the face texture.\r\n   *\r\n   * - \"unit\" (default): Each character = 1 Minecraft unit. Scaled by pixelsPerUnit.\r\n   *   An 8\u00D710 character grid on an 8\u00D710 unit face fills it completely.\r\n   *   x/y offsets are in Minecraft units.\r\n   *\r\n   * - \"exact\": Each character = exactly 1 pixel. No scaling applied.\r\n   *   Use for precise pixel-level control.\r\n   *   x/y offsets are in pixels.\r\n   *\r\n   * - \"cover\": Pixel art is stretched to completely cover the face texture.\r\n   *   x/y offsets are ignored.\r\n   */\r\n  scaleMode?: IMcpPixelArtScaleMode;\r\n\r\n  /**\r\n   * X offset from the left edge of the face texture.\r\n   * Units depend on scaleMode:\r\n   * - \"unit\" (default): Minecraft units (scaled by pixelsPerUnit)\r\n   * - \"exact\": Pixels\r\n   * - \"cover\": Ignored\r\n   * Default: 0\r\n   */\r\n  x?: number;\r\n\r\n  /**\r\n   * Y offset from the top edge of the face texture.\r\n   * Units depend on scaleMode:\r\n   * - \"unit\" (default): Minecraft units (scaled by pixelsPerUnit)\r\n   * - \"exact\": Pixels\r\n   * - \"cover\": Ignored\r\n   * Default: 0\r\n   */\r\n  y?: number;\r\n\r\n  /**\r\n   * Array of strings representing rows of pixels from top to bottom.\r\n   * Each character is looked up in the palette.\r\n   * Space (' ') is always transparent.\r\n   *\r\n   * Example for a 5x3 pattern:\r\n   * [\"XXXXX\", \" XXX \", \"  X  \"]\r\n   */\r\n  lines: string[];\r\n\r\n  /**\r\n   * Color palette mapping characters to RGBA colors.\r\n   * Space (' ') should not be defined - it's always transparent.\r\n   *\r\n   * Example:\r\n   * {\r\n   *   \"X\": { \"r\": 255, \"g\": 0, \"b\": 0 },\r\n   *   \"O\": { \"hex\": \"#00FF00\" }\r\n   * }\r\n   */\r\n  palette: { [char: string]: IMcpPixelColor };\r\n}\r\n\r\n/**\r\n * Converts legacy IMcpNoiseConfig to IMcpTexturedRectangle.\r\n */\r\nexport function convertNoiseConfigToTexturedRectangle(noise: IMcpNoiseConfig): IMcpTexturedRectangle {\r\n  const patternToType: { [key: string]: TexturedRectangleType } = {\r\n    random: \"random_noise\",\r\n    dither: \"dither_noise\",\r\n    perlin: \"perlin_noise\",\r\n    stipple: \"stipple_noise\",\r\n    gradient: \"gradient\",\r\n  };\r\n  return {\r\n    type: patternToType[noise.pattern || \"random\"] || \"random_noise\",\r\n    colors: noise.colors,\r\n    factor: noise.factor,\r\n    seed: noise.seed,\r\n    pixelSize: noise.pixelSize,\r\n    scale: noise.scale,\r\n  };\r\n}\r\n\r\n/**\r\n * Converts a color string to a solid IMcpTexturedRectangle.\r\n */\r\nexport function colorToTexturedRectangle(color: string | IMcpColorRGBA): IMcpTexturedRectangle {\r\n  return {\r\n    type: \"solid\",\r\n    colors: [typeof color === \"string\" ? color : color],\r\n  };\r\n}\r\n\r\n/**\r\n * Texture definition for reuse across multiple faces.\r\n * Define textures once in the model's `textures` dictionary, then reference by ID.\r\n */\r\nexport interface IMcpTextureDefinition {\r\n  /**\r\n   * @deprecated Use `background` with type: \"solid\" instead.\r\n   * Solid color fill for this texture.\r\n   * Can be a hex string like \"#FF0000\" or \"rgb(255,0,0)\" or an object.\r\n   */\r\n  color?: string | IMcpColorRGBA;\r\n\r\n  /**\r\n   * SVG content for this texture. Rendered on top of background.\r\n   * The SVG should be a complete SVG document or fragment.\r\n   * The SVG viewBox determines the texture resolution.\r\n   *\r\n   * Example:\r\n   * \"<svg viewBox='0 0 16 16'><rect fill='#ff0000' width='16' height='16'/></svg>\"\r\n   */\r\n  svg?: string;\r\n\r\n  /**\r\n   * @deprecated Use `background` instead.\r\n   * Noise texture configuration for procedural Minecraft-style textures.\r\n   */\r\n  noise?: IMcpNoiseConfig;\r\n\r\n  /**\r\n   * Background fill for this texture using a textured rectangle.\r\n   * Supports solid colors and various noise patterns.\r\n   *\r\n   * Examples:\r\n   * - Solid: { type: \"solid\", colors: [\"#808080\"] }\r\n   * - Stone: { type: \"stipple_noise\", colors: [\"#8B8B8B\", \"#7A7A7A\"], seed: 123 }\r\n   *\r\n   * Priority: background -> svg (overlay) -> color (fallback for backwards compat)\r\n   */\r\n  background?: IMcpTexturedRectangle;\r\n\r\n  /**\r\n   * Pixel art overlays rendered on top of background and svg.\r\n   * Each pixel art layer is rendered in array order (first = bottom, last = top).\r\n   * Uses ASCII art patterns for AI-friendly specification.\r\n   *\r\n   * Example - simple eyes:\r\n   * ```json\r\n   * [{\r\n   *   \"x\": 2, \"y\": 2,\r\n   *   \"lines\": [\"O O\", \"   \", \" v \"],\r\n   *   \"palette\": { \"O\": { \"r\": 0, \"g\": 0, \"b\": 0 }, \"v\": { \"r\": 0, \"g\": 0, \"b\": 0 } }\r\n   * }]\r\n   * ```\r\n   */\r\n  pixelArt?: IMcpPixelArt[];\r\n\r\n  /**\r\n   * Post-processing effects to apply to this texture.\r\n   * Effects are applied after background, svg, and pixelArt rendering.\r\n   *\r\n   * Example:\r\n   * ```json\r\n   * {\r\n   *   \"background\": { \"type\": \"stipple_noise\", \"colors\": [\"#808080\", \"#707070\"] },\r\n   *   \"effects\": {\r\n   *     \"lighting\": { \"preset\": \"outset\", \"intensity\": 0.3 },\r\n   *     \"border\": { \"all\": { \"style\": \"highlight\", \"width\": 1 } }\r\n   *   }\r\n   * }\r\n   * ```\r\n   */\r\n  effects?: import(\"./TextureEffects\").ITextureEffects;\r\n}\r\n\r\n/**\r\n * Face content specification - reference a texture by ID, or specify inline content.\r\n * Priority: textureId > background+svg > svg > background > color\r\n */\r\nexport interface IMcpFaceContent {\r\n  /**\r\n   * Reference to a texture defined in the model's `textures` dictionary.\r\n   * If specified, the texture's background/svg will be used for this face.\r\n   * This is the preferred approach for textures used on multiple faces.\r\n   */\r\n  textureId?: string;\r\n\r\n  /**\r\n   * @deprecated Use `background` with type: \"solid\" instead.\r\n   * Solid color fill for this face.\r\n   */\r\n  color?: string | IMcpColorRGBA;\r\n\r\n  /**\r\n   * SVG content for this face. Rendered on top of background.\r\n   * The SVG should be a complete SVG document or fragment.\r\n   * The SVG viewBox determines the texture resolution for this face.\r\n   *\r\n   * Example:\r\n   * \"<svg viewBox='0 0 16 16'><rect fill='#ff0000' width='16' height='16'/></svg>\"\r\n   */\r\n  svg?: string;\r\n\r\n  /**\r\n   * @deprecated Use `background` instead.\r\n   * Noise texture configuration for procedural Minecraft-style textures.\r\n   */\r\n  noise?: IMcpNoiseConfig;\r\n\r\n  /**\r\n   * Background fill for this face using a textured rectangle.\r\n   * Supports solid colors and various noise patterns.\r\n   *\r\n   * Examples:\r\n   * - Solid: { type: \"solid\", colors: [\"#808080\"] }\r\n   * - Grass: { type: \"perlin_noise\", colors: [\"#228B22\", \"#32CD32\"], seed: 456 }\r\n   *\r\n   * Priority: textureId > background+svg > svg > background > color\r\n   */\r\n  background?: IMcpTexturedRectangle;\r\n\r\n  /**\r\n   * Pixel art overlays rendered on top of background and svg.\r\n   * Each pixel art layer is rendered in array order (first = bottom, last = top).\r\n   * Uses ASCII art patterns for AI-friendly specification.\r\n   *\r\n   * Example - simple face:\r\n   * ```json\r\n   * [{\r\n   *   \"x\": 1, \"y\": 1,\r\n   *   \"lines\": [\"O O\", \"   \", \" U \"],\r\n   *   \"palette\": { \"O\": { \"r\": 0, \"g\": 0, \"b\": 0 }, \"U\": { \"r\": 0, \"g\": 0, \"b\": 0 } }\r\n   * }]\r\n   * ```\r\n   */\r\n  pixelArt?: IMcpPixelArt[];\r\n\r\n  /**\r\n   * Post-processing effects to apply to this face.\r\n   * Effects are applied after background, svg, and pixelArt rendering.\r\n   * If textureId is used, effects are applied to the resolved texture.\r\n   *\r\n   * Example:\r\n   * ```json\r\n   * {\r\n   *   \"background\": { \"type\": \"solid\", \"colors\": [\"#404040\"] },\r\n   *   \"effects\": {\r\n   *     \"lighting\": { \"preset\": \"pillow\", \"intensity\": 0.4 }\r\n   *   }\r\n   * }\r\n   * ```\r\n   */\r\n  effects?: import(\"./TextureEffects\").ITextureEffects;\r\n\r\n  /**\r\n   * Optional rotation of the face content in degrees.\r\n   * Typically 0, 90, 180, or 270 degrees.\r\n   * Applied after the content is rendered.\r\n   */\r\n  rotation?: number;\r\n}\r\n\r\n/**\r\n * The six faces of a cube\r\n */\r\nexport interface IMcpCubeFaces {\r\n  north?: IMcpFaceContent;\r\n  south?: IMcpFaceContent;\r\n  east?: IMcpFaceContent;\r\n  west?: IMcpFaceContent;\r\n  up?: IMcpFaceContent;\r\n  down?: IMcpFaceContent;\r\n}\r\n\r\n/**\r\n * A cube within a bone, with position, size, and per-face content.\r\n *\r\n * ROTATION NOTE: Cubes do NOT have pivot/rotation properties in the MCP schema.\r\n * All rotation should be done at the BONE level. If you need a rotated cube,\r\n * place it in its own single-cube bone and rotate that bone. This simplifies\r\n * the model structure and avoids confusion about which rotation applies where.\r\n */\r\nexport interface IMcpDesignCube {\r\n  /**\r\n   * The origin (corner) of the cube in Minecraft coordinates.\r\n   * [x, y, z] where y is up.\r\n   */\r\n  origin: [number, number, number];\r\n\r\n  /**\r\n   * The size of the cube in [width, height, depth].\r\n   */\r\n  size: [number, number, number];\r\n\r\n  /**\r\n   * Per-face content specification.\r\n   * Faces not specified will be transparent.\r\n   */\r\n  faces: IMcpCubeFaces;\r\n\r\n  /**\r\n   * Optional inflation value (expands cube by this amount on all sides).\r\n   */\r\n  inflate?: number;\r\n\r\n  /**\r\n   * If true, mirror the UV coordinates for this cube.\r\n   */\r\n  mirror?: boolean;\r\n}\r\n\r\n/**\r\n * A bone in the model hierarchy, containing cubes and optional child bones.\r\n *\r\n * ROTATION: All rotation in MCP models is done at the BONE level, not cube level.\r\n * Use `pivot` to set the rotation point (e.g., shoulder for an arm) and `rotation`\r\n * to rotate the bone. Child bones and all cubes in the bone rotate together.\r\n */\r\nexport interface IMcpDesignBone {\r\n  /**\r\n   * Unique name for this bone within the model\r\n   */\r\n  name: string;\r\n\r\n  /**\r\n   * Optional parent bone name for hierarchical models.\r\n   * Child bones rotate with their parent.\r\n   */\r\n  parent?: string;\r\n\r\n  /**\r\n   * The pivot point for rotation of this bone and its children.\r\n   * [x, y, z] in Minecraft coordinates.\r\n   * Example: For an arm, set pivot at the shoulder joint.\r\n   */\r\n  pivot?: [number, number, number];\r\n\r\n  /**\r\n   * Rotation of the entire bone in degrees [x, y, z].\r\n   * The bone rotates around its pivot point.\r\n   * All cubes in the bone and child bones rotate together.\r\n   */\r\n  rotation?: [number, number, number];\r\n\r\n  /**\r\n   * The cubes that make up this bone's geometry\r\n   */\r\n  cubes: IMcpDesignCube[];\r\n\r\n  /**\r\n   * Whether to mirror texture UVs for this bone\r\n   */\r\n  mirror?: boolean;\r\n}\r\n\r\n/**\r\n * The complete model design input for MCP tools\r\n */\r\nexport interface IMcpModelDesign {\r\n  /**\r\n   * Format version for the design format. Currently \"1.0.0\".\r\n   */\r\n  formatVersion?: string;\r\n\r\n  /**\r\n   * The identifier for this model (e.g., \"geometry.custom_entity\").\r\n   * Will be prefixed with \"geometry.\" if not already.\r\n   */\r\n  identifier: string;\r\n\r\n  /**\r\n   * Optional description of the model\r\n   */\r\n  description?: string;\r\n\r\n  /**\r\n   * Texture resolution for the generated atlas.\r\n   * Default is [64, 64] for item-sized models.\r\n   * Use [64, 64], [128, 128], [256, 256] for increasing detail.\r\n   */\r\n  textureSize?: [number, number];\r\n\r\n  /**\r\n   * Pixels per Minecraft unit for texture generation.\r\n   * This controls texture resolution: pixelsPerUnit \u00D7 16 = pixels per block.\r\n   *\r\n   * Common values:\r\n   * - 1: 16 pixels per block (vanilla Minecraft resolution)\r\n   * - 2: 32 pixels per block (default, HD textures)\r\n   * - 4: 64 pixels per block (high-resolution textures)\r\n   *\r\n   * Default: 2 (32 pixels per block)\r\n   */\r\n  pixelsPerUnit?: number;\r\n\r\n  /**\r\n   * Named texture definitions that can be referenced by faces using textureId.\r\n   * This allows texture reuse across multiple faces, reducing token usage and\r\n   * enabling automatic atlas optimization (shared textures use the same UV region).\r\n   *\r\n   * Example:\r\n   * ```\r\n   * textures: {\r\n   *   \"wood_grain\": { svg: \"<svg>...</svg>\" },\r\n   *   \"bark\": { color: \"#4a3728\" }\r\n   * }\r\n   * ```\r\n   * Then reference in faces: `{ textureId: \"wood_grain\" }`\r\n   */\r\n  textures?: { [textureId: string]: IMcpTextureDefinition };\r\n\r\n  /**\r\n   * The visible bounding box of the model.\r\n   * [width, height] in Minecraft units.\r\n   * Used for culling and shadow calculations.\r\n   */\r\n  visibleBoundsSize?: [number, number, number];\r\n\r\n  /**\r\n   * Offset for the visible bounds from origin.\r\n   */\r\n  visibleBoundsOffset?: [number, number, number];\r\n\r\n  /**\r\n   * The bones that make up this model\r\n   */\r\n  bones: IMcpDesignBone[];\r\n}\r\n\r\n/**\r\n * Options for the previewModelDesign tool\r\n */\r\nexport interface IMcpModelPreviewOptions {\r\n  /**\r\n   * Width of the preview image in pixels. Default: 512\r\n   */\r\n  width?: number;\r\n\r\n  /**\r\n   * Height of the preview image in pixels. Default: 512\r\n   */\r\n  height?: number;\r\n\r\n  /**\r\n   * Camera distance from the model. Default: auto-calculated from model size\r\n   */\r\n  cameraDistance?: number;\r\n\r\n  /**\r\n   * Camera rotation angle (horizontal). Default: 0.8 radians\r\n   */\r\n  cameraAlpha?: number;\r\n\r\n  /**\r\n   * Camera rotation angle (vertical). Default: 1.0 radians\r\n   */\r\n  cameraBeta?: number;\r\n\r\n  /**\r\n   * Background color for the preview. Default: transparent\r\n   */\r\n  backgroundColor?: string | IMcpColorRGBA;\r\n\r\n  /**\r\n   * When true, renders the model from multiple angles in a side-by-side grid.\r\n   * Each view is labeled with its angle name.\r\n   * Default: false (single angle render)\r\n   */\r\n  multiAngle?: boolean;\r\n\r\n  /**\r\n   * Which angle presets to include in multi-angle mode.\r\n   * Default: [\"front-right\", \"back-left\"] for 2-view layout\r\n   * Available presets: \"front-right\", \"front-left\", \"back-right\", \"back-left\", \"top-down\", \"side-right\", \"side-left\"\r\n   */\r\n  anglePresets?: string[];\r\n}\r\n\r\n/**\r\n * Result from the previewModelDesign tool\r\n */\r\nexport interface IMcpModelPreviewResult {\r\n  /**\r\n   * Base64-encoded PNG image of the preview\r\n   */\r\n  previewImage?: string;\r\n\r\n  /**\r\n   * MIME type of the preview image (always \"image/png\")\r\n   */\r\n  mimeType?: string;\r\n\r\n  /**\r\n   * Generated geometry JSON (for debugging)\r\n   */\r\n  geometryJson?: object;\r\n\r\n  /**\r\n   * Any errors or warnings encountered\r\n   */\r\n  errors?: string[];\r\n  warnings?: string[];\r\n}\r\n\r\n/**\r\n * Options for the exportModelDesign tool\r\n */\r\nexport interface IMcpModelExportOptions {\r\n  /**\r\n   * Path to write the .geo.json file\r\n   */\r\n  geometryOutputPath: string;\r\n\r\n  /**\r\n   * Path to write the texture.png file\r\n   */\r\n  textureOutputPath: string;\r\n\r\n  /**\r\n   * If true, overwrite existing files. Default: false\r\n   */\r\n  overwrite?: boolean;\r\n\r\n  /**\r\n   * If true, also generate a preview image alongside the exported files\r\n   */\r\n  generatePreview?: boolean;\r\n\r\n  /**\r\n   * Path for the preview image if generatePreview is true\r\n   */\r\n  previewOutputPath?: string;\r\n}\r\n\r\n/**\r\n * Result from the exportModelDesign tool\r\n */\r\nexport interface IMcpModelExportResult {\r\n  /**\r\n   * Whether the export was successful\r\n   */\r\n  success: boolean;\r\n\r\n  /**\r\n   * Paths of files that were written\r\n   */\r\n  filesWritten: string[];\r\n\r\n  /**\r\n   * The generated geometry JSON\r\n   */\r\n  geometryJson?: object;\r\n\r\n  /**\r\n   * Any errors or warnings encountered\r\n   */\r\n  errors?: string[];\r\n  warnings?: string[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * NoiseGenerationUtilities\r\n *\r\n * Pure noise generation algorithms for procedural texture generation.\r\n * This module provides the core algorithms without any rendering/output concerns.\r\n *\r\n * Used by TexturedRectangleGenerator to create Minecraft-style pixel art textures.\r\n */\r\n\r\nimport { IMcpColorRGBA, NoisePatternType } from \"./IMcpModelDesign\";\r\nimport ModelDesignUtilities from \"./ModelDesignUtilities\";\r\n\r\n/**\r\n * Parsed color with r, g, b, a components\r\n */\r\nexport interface ParsedColor {\r\n  r: number;\r\n  g: number;\r\n  b: number;\r\n  a: number;\r\n}\r\n\r\n/**\r\n * Simple seeded pseudo-random number generator (Mulberry32).\r\n * Produces deterministic sequences for consistent noise generation.\r\n */\r\nexport class SeededRandom {\r\n  private state: number;\r\n\r\n  constructor(seed: number) {\r\n    this.state = seed;\r\n  }\r\n\r\n  /**\r\n   * Generate next random number in [0, 1)\r\n   */\r\n  next(): number {\r\n    let t = (this.state += 0x6d2b79f5);\r\n    t = Math.imul(t ^ (t >>> 15), t | 1);\r\n    t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\r\n    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\r\n  }\r\n\r\n  /**\r\n   * Generate random integer in [min, max] inclusive\r\n   */\r\n  nextInt(min: number, max: number): number {\r\n    return Math.floor(this.next() * (max - min + 1)) + min;\r\n  }\r\n}\r\n\r\n/**\r\n * 4x4 Bayer dithering matrix (normalized to 0-1 range)\r\n */\r\nconst BAYER_MATRIX_4X4 = [\r\n  [0 / 16, 8 / 16, 2 / 16, 10 / 16],\r\n  [12 / 16, 4 / 16, 14 / 16, 6 / 16],\r\n  [3 / 16, 11 / 16, 1 / 16, 9 / 16],\r\n  [15 / 16, 7 / 16, 13 / 16, 5 / 16],\r\n];\r\n\r\n/**\r\n * Noise generation utilities - pure algorithms for procedural noise patterns.\r\n */\r\nexport default class NoiseGenerationUtilities {\r\n  /**\r\n   * Hash function to generate seed from string (djb2 algorithm)\r\n   */\r\n  static hashString(str: string): number {\r\n    let hash = 5381;\r\n    for (let i = 0; i < str.length; i++) {\r\n      hash = (hash * 33) ^ str.charCodeAt(i);\r\n    }\r\n    return hash >>> 0; // Convert to unsigned 32-bit\r\n  }\r\n\r\n  /**\r\n   * Generate noise grid based on pattern type\r\n   */\r\n  static generateNoiseGrid(\r\n    pattern: NoisePatternType,\r\n    colors: ParsedColor[],\r\n    factor: number,\r\n    width: number,\r\n    height: number,\r\n    rng: SeededRandom,\r\n    scale: number\r\n  ): ParsedColor[][] {\r\n    switch (pattern) {\r\n      case \"dither\":\r\n        return this.generateDitherGrid(colors, factor, width, height);\r\n      case \"perlin\":\r\n        return this.generatePerlinGrid(colors, factor, width, height, rng, scale);\r\n      case \"stipple\":\r\n        return this.generateStippleGrid(colors, factor, width, height, rng);\r\n      case \"gradient\":\r\n        return this.generateGradientGrid(colors, width, height, rng);\r\n      case \"random\":\r\n      default:\r\n        return this.generateRandomGrid(colors, factor, width, height, rng);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Simple random noise - each pixel randomly picks from colors\r\n   */\r\n  static generateRandomGrid(\r\n    colors: ParsedColor[],\r\n    factor: number,\r\n    width: number,\r\n    height: number,\r\n    rng: SeededRandom\r\n  ): ParsedColor[][] {\r\n    const grid: ParsedColor[][] = [];\r\n    const baseColor = colors[0];\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      const row: ParsedColor[] = [];\r\n      for (let x = 0; x < width; x++) {\r\n        if (rng.next() < factor && colors.length > 1) {\r\n          // Pick a random color from the palette\r\n          const colorIndex = rng.nextInt(0, colors.length - 1);\r\n          row.push(colors[colorIndex]);\r\n        } else {\r\n          row.push(baseColor);\r\n        }\r\n      }\r\n      grid.push(row);\r\n    }\r\n\r\n    return grid;\r\n  }\r\n\r\n  /**\r\n   * Ordered dithering using Bayer matrix\r\n   */\r\n  static generateDitherGrid(colors: ParsedColor[], factor: number, width: number, height: number): ParsedColor[][] {\r\n    const grid: ParsedColor[][] = [];\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      const row: ParsedColor[] = [];\r\n      for (let x = 0; x < width; x++) {\r\n        // Get threshold from Bayer matrix\r\n        const threshold = BAYER_MATRIX_4X4[y % 4][x % 4];\r\n\r\n        // Determine which color to use based on threshold and factor\r\n        const colorIndex = threshold * factor * (colors.length - 1);\r\n        const index = Math.min(Math.floor(colorIndex), colors.length - 1);\r\n        row.push(colors[index]);\r\n      }\r\n      grid.push(row);\r\n    }\r\n\r\n    return grid;\r\n  }\r\n\r\n  /**\r\n   * Perlin-like noise for organic variation\r\n   * Uses simplified value noise with interpolation and smooth color blending\r\n   */\r\n  static generatePerlinGrid(\r\n    colors: ParsedColor[],\r\n    factor: number,\r\n    width: number,\r\n    height: number,\r\n    rng: SeededRandom,\r\n    scale: number\r\n  ): ParsedColor[][] {\r\n    // Generate base noise at lower resolution\r\n    const noiseWidth = Math.ceil(width / scale) + 2;\r\n    const noiseHeight = Math.ceil(height / scale) + 2;\r\n    const baseNoise: number[][] = [];\r\n\r\n    for (let y = 0; y < noiseHeight; y++) {\r\n      const row: number[] = [];\r\n      for (let x = 0; x < noiseWidth; x++) {\r\n        row.push(rng.next());\r\n      }\r\n      baseNoise.push(row);\r\n    }\r\n\r\n    // Interpolate to full resolution\r\n    const grid: ParsedColor[][] = [];\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      const row: ParsedColor[] = [];\r\n      for (let x = 0; x < width; x++) {\r\n        // Get interpolated noise value\r\n        const nx = x / scale;\r\n        const ny = y / scale;\r\n        const value = this.bilinearInterpolate(baseNoise, nx, ny);\r\n\r\n        // Apply factor to control spread (factor 1.0 = full range, lower = more subtle)\r\n        const adjustedValue = (value - 0.5) * factor + 0.5;\r\n        const clampedValue = Math.max(0, Math.min(1, adjustedValue));\r\n\r\n        // Blend between colors smoothly instead of hard quantization\r\n        // Map value to position in color array and interpolate\r\n        const colorPos = clampedValue * (colors.length - 1);\r\n        const colorIndex = Math.floor(colorPos);\r\n        const colorFrac = colorPos - colorIndex;\r\n\r\n        const color1 = colors[Math.min(colorIndex, colors.length - 1)];\r\n        const color2 = colors[Math.min(colorIndex + 1, colors.length - 1)];\r\n\r\n        // Linearly interpolate between adjacent colors\r\n        const blendedColor: ParsedColor = {\r\n          r: Math.round(color1.r * (1 - colorFrac) + color2.r * colorFrac),\r\n          g: Math.round(color1.g * (1 - colorFrac) + color2.g * colorFrac),\r\n          b: Math.round(color1.b * (1 - colorFrac) + color2.b * colorFrac),\r\n          a: Math.round(color1.a * (1 - colorFrac) + color2.a * colorFrac),\r\n        };\r\n        row.push(blendedColor);\r\n      }\r\n      grid.push(row);\r\n    }\r\n\r\n    return grid;\r\n  }\r\n\r\n  /**\r\n   * Bilinear interpolation for smooth noise\r\n   */\r\n  static bilinearInterpolate(grid: number[][], x: number, y: number): number {\r\n    const x0 = Math.floor(x);\r\n    const y0 = Math.floor(y);\r\n    const x1 = x0 + 1;\r\n    const y1 = y0 + 1;\r\n\r\n    const xFrac = x - x0;\r\n    const yFrac = y - y0;\r\n\r\n    // Get values at corners (with bounds checking)\r\n    const v00 = grid[Math.min(y0, grid.length - 1)]?.[Math.min(x0, grid[0].length - 1)] ?? 0;\r\n    const v10 = grid[Math.min(y0, grid.length - 1)]?.[Math.min(x1, grid[0].length - 1)] ?? 0;\r\n    const v01 = grid[Math.min(y1, grid.length - 1)]?.[Math.min(x0, grid[0].length - 1)] ?? 0;\r\n    const v11 = grid[Math.min(y1, grid.length - 1)]?.[Math.min(x1, grid[0].length - 1)] ?? 0;\r\n\r\n    // Interpolate\r\n    const top = v00 * (1 - xFrac) + v10 * xFrac;\r\n    const bottom = v01 * (1 - xFrac) + v11 * xFrac;\r\n    return top * (1 - yFrac) + bottom * yFrac;\r\n  }\r\n\r\n  /**\r\n   * Stipple pattern - scattered dots on base color\r\n   */\r\n  static generateStippleGrid(\r\n    colors: ParsedColor[],\r\n    factor: number,\r\n    width: number,\r\n    height: number,\r\n    rng: SeededRandom\r\n  ): ParsedColor[][] {\r\n    const grid: ParsedColor[][] = [];\r\n    const baseColor = colors[0];\r\n    const dotColors = colors.slice(1);\r\n\r\n    if (dotColors.length === 0) {\r\n      dotColors.push(baseColor);\r\n    }\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      const row: ParsedColor[] = [];\r\n      for (let x = 0; x < width; x++) {\r\n        // Stipple probability based on factor (factor of 0.5 = ~50% dots)\r\n        if (rng.next() < factor * 0.7) {\r\n          const dotIndex = rng.nextInt(0, dotColors.length - 1);\r\n          row.push(dotColors[dotIndex]);\r\n        } else {\r\n          row.push(baseColor);\r\n        }\r\n      }\r\n      grid.push(row);\r\n    }\r\n\r\n    return grid;\r\n  }\r\n\r\n  /**\r\n   * Gradient noise - smooth transition between colors\r\n   * Creates horizontal or vertical gradient with slight noise\r\n   */\r\n  static generateGradientGrid(\r\n    colors: ParsedColor[],\r\n    width: number,\r\n    height: number,\r\n    rng: SeededRandom\r\n  ): ParsedColor[][] {\r\n    const grid: ParsedColor[][] = [];\r\n    const isVertical = rng.next() > 0.5;\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      const row: ParsedColor[] = [];\r\n      for (let x = 0; x < width; x++) {\r\n        // Calculate position along gradient (0 to 1)\r\n        const t = isVertical ? y / Math.max(height - 1, 1) : x / Math.max(width - 1, 1);\r\n\r\n        // Add slight noise\r\n        const noiseT = t + (rng.next() - 0.5) * 0.1;\r\n        const clampedT = Math.max(0, Math.min(1, noiseT));\r\n\r\n        // Interpolate between colors\r\n        const colorPos = clampedT * (colors.length - 1);\r\n        const colorIndex = Math.floor(colorPos);\r\n        const colorFrac = colorPos - colorIndex;\r\n\r\n        const c1 = colors[Math.min(colorIndex, colors.length - 1)];\r\n        const c2 = colors[Math.min(colorIndex + 1, colors.length - 1)];\r\n\r\n        row.push(this.lerpColor(c1, c2, colorFrac));\r\n      }\r\n      grid.push(row);\r\n    }\r\n\r\n    return grid;\r\n  }\r\n\r\n  /**\r\n   * Linear interpolation between two colors\r\n   */\r\n  static lerpColor(c1: ParsedColor, c2: ParsedColor, t: number): ParsedColor {\r\n    return {\r\n      r: Math.round(c1.r * (1 - t) + c2.r * t),\r\n      g: Math.round(c1.g * (1 - t) + c2.g * t),\r\n      b: Math.round(c1.b * (1 - t) + c2.b * t),\r\n      a: Math.round(c1.a * (1 - t) + c2.a * t),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Check if two colors are equal\r\n   */\r\n  static colorsEqual(c1: ParsedColor, c2: ParsedColor): boolean {\r\n    return c1.r === c2.r && c1.g === c2.g && c1.b === c2.b && c1.a === c2.a;\r\n  }\r\n\r\n  /**\r\n   * Convert parsed color to hex string\r\n   */\r\n  static colorToHex(color: ParsedColor): string {\r\n    const r = color.r.toString(16).padStart(2, \"0\");\r\n    const g = color.g.toString(16).padStart(2, \"0\");\r\n    const b = color.b.toString(16).padStart(2, \"0\");\r\n\r\n    if (color.a < 255) {\r\n      const a = color.a.toString(16).padStart(2, \"0\");\r\n      return `#${r}${g}${b}${a}`;\r\n    }\r\n\r\n    return `#${r}${g}${b}`;\r\n  }\r\n\r\n  /**\r\n   * Parse color input (string or RGBA object) to ParsedColor\r\n   */\r\n  static parseColorInput(input: string | IMcpColorRGBA): ParsedColor {\r\n    if (typeof input === \"object\") {\r\n      return {\r\n        r: Math.max(0, Math.min(255, input.r)),\r\n        g: Math.max(0, Math.min(255, input.g)),\r\n        b: Math.max(0, Math.min(255, input.b)),\r\n        a: input.a !== undefined ? Math.max(0, Math.min(255, input.a)) : 255,\r\n      };\r\n    }\r\n\r\n    // Use ModelDesignUtilities.parseColor for string parsing\r\n    const parsed = ModelDesignUtilities.parseColor(input);\r\n    return {\r\n      r: parsed.r,\r\n      g: parsed.g,\r\n      b: parsed.b,\r\n      a: parsed.a ?? 255,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * TextureEffects\r\n *\r\n * A reusable library of pixel-level texture effects for Minecraft-style textures.\r\n * These effects operate directly on RGBA pixel buffers for maximum performance.\r\n *\r\n * ARCHITECTURE:\r\n * - All effects operate on Uint8Array RGBA pixel buffers (width * height * 4 bytes)\r\n * - Effects are pure functions that modify the pixel buffer in-place\r\n * - Effects can be composed/chained for complex visual results\r\n * - All coordinates use standard image coordinates (0,0 = top-left)\r\n *\r\n * EFFECT CATEGORIES:\r\n * 1. Lighting Effects - Add depth/dimension via light simulation (inset, outset, pillow, ambient_occlusion)\r\n * 2. Border Effects - Add edges/outlines with CSS-like syntax (solid, dashed, worn, highlight)\r\n * 3. Overlay Effects - Add weathering/detail patterns (cracks, scratches, moss, rust, sparkle, veins)\r\n * 4. Color Variation - Modify color distribution (hue_shift, saturation_jitter, value_jitter, palette_snap)\r\n * 5. Tiling Effects - Make textures seamless/patterned (seamless, brick, herringbone, basketweave)\r\n */\r\n\r\nimport { ParsedColor, SeededRandom } from \"./NoiseGenerationUtilities\";\r\nimport NoiseGenerationUtilities from \"./NoiseGenerationUtilities\";\r\n\r\n// ============================================================================\r\n// INTERFACES\r\n// ============================================================================\r\n\r\n/**\r\n * Lighting effect preset types.\r\n * These simulate light hitting a surface to add depth.\r\n */\r\nexport type LightingPreset = \"inset\" | \"outset\" | \"pillow\" | \"ambient_occlusion\";\r\n\r\n/**\r\n * Configuration for lighting effects.\r\n * Adds pseudo-3D depth to flat textures by simulating light direction.\r\n */\r\nexport interface ILightingEffect {\r\n  /**\r\n   * The lighting preset to apply:\r\n   * - 'inset': Darken top/left, lighten bottom/right (recessed panels, buttons)\r\n   * - 'outset': Lighten top/left, darken bottom/right (raised blocks, bricks)\r\n   * - 'pillow': Darken all edges toward center (rounded/soft look)\r\n   * - 'ambient_occlusion': Darken only corners/edges (realistic depth)\r\n   */\r\n  preset: LightingPreset;\r\n\r\n  /**\r\n   * Intensity of the effect (0.0 to 1.0). Default: 0.3\r\n   * - 0.0: No effect\r\n   * - 0.5: Medium effect\r\n   * - 1.0: Maximum effect\r\n   */\r\n  intensity?: number;\r\n\r\n  /**\r\n   * Light source angle in degrees (0-360). Default: 315 (top-left)\r\n   * - 0: Right\r\n   * - 90: Bottom\r\n   * - 180: Left\r\n   * - 270: Top\r\n   * - 315: Top-left (most common for pseudo-3D)\r\n   */\r\n  angle?: number;\r\n}\r\n\r\n/**\r\n * Border style types.\r\n */\r\nexport type BorderStyle = \"solid\" | \"dashed\" | \"worn\" | \"highlight\";\r\n\r\n/**\r\n * Configuration for a single border side (CSS-like).\r\n */\r\nexport interface IBorderSide {\r\n  /**\r\n   * Style of the border:\r\n   * - 'solid': Continuous line\r\n   * - 'dashed': Alternating on/off segments\r\n   * - 'worn': Irregular/weathered edge\r\n   * - 'highlight': Bright line (auto-lightened from base)\r\n   */\r\n  style: BorderStyle;\r\n\r\n  /**\r\n   * Width in pixels (1-8). Default: 1\r\n   */\r\n  width?: number;\r\n\r\n  /**\r\n   * Border color (hex string). If not specified:\r\n   * - For 'solid'/'dashed': Auto-darkens from texture\r\n   * - For 'highlight': Auto-lightens from texture\r\n   * - For 'worn': Uses texture color with variations\r\n   */\r\n  color?: string;\r\n}\r\n\r\n/**\r\n * Configuration for border effects (CSS-like syntax).\r\n * Supports individual side configuration or shorthand for all sides.\r\n */\r\nexport interface IBorderEffect {\r\n  /**\r\n   * Shorthand: Apply to all sides. Individual side properties override this.\r\n   */\r\n  all?: IBorderSide;\r\n\r\n  /**\r\n   * Top border configuration.\r\n   */\r\n  top?: IBorderSide;\r\n\r\n  /**\r\n   * Right border configuration.\r\n   */\r\n  right?: IBorderSide;\r\n\r\n  /**\r\n   * Bottom border configuration.\r\n   */\r\n  bottom?: IBorderSide;\r\n\r\n  /**\r\n   * Left border configuration.\r\n   */\r\n  left?: IBorderSide;\r\n\r\n  /**\r\n   * Random seed for 'worn' style. Enables deterministic weathering.\r\n   */\r\n  seed?: number;\r\n}\r\n\r\n/**\r\n * Overlay pattern types for weathering and detail.\r\n */\r\nexport type OverlayPattern = \"cracks\" | \"scratches\" | \"moss\" | \"rust\" | \"sparkle\" | \"veins\";\r\n\r\n/**\r\n * Configuration for overlay effects.\r\n * Adds surface detail without modifying the base texture structure.\r\n */\r\nexport interface IOverlayEffect {\r\n  /**\r\n   * The overlay pattern to apply:\r\n   * - 'cracks': Dark lines suggesting cracks/fractures\r\n   * - 'scratches': Light linear marks\r\n   * - 'moss': Green/organic patches\r\n   * - 'rust': Orange/brown oxidation spots\r\n   * - 'sparkle': Bright highlight dots\r\n   * - 'veins': Dark branching lines (for stone/marble)\r\n   */\r\n  pattern: OverlayPattern;\r\n\r\n  /**\r\n   * Coverage density (0.0 to 1.0). Default: 0.3\r\n   * - 0.0: Almost no overlay\r\n   * - 0.5: Medium coverage\r\n   * - 1.0: Heavy coverage\r\n   */\r\n  density?: number;\r\n\r\n  /**\r\n   * Override color for the overlay pattern (hex string).\r\n   * If not specified, uses pattern-appropriate defaults.\r\n   */\r\n  color?: string;\r\n\r\n  /**\r\n   * Random seed for deterministic pattern placement.\r\n   */\r\n  seed?: number;\r\n}\r\n\r\n/**\r\n * Color variation mode types.\r\n */\r\nexport type ColorVariationMode = \"hue_shift\" | \"saturation_jitter\" | \"value_jitter\" | \"palette_snap\";\r\n\r\n/**\r\n * Configuration for color variation effects.\r\n * Modifies the color distribution to reduce flatness.\r\n */\r\nexport interface IColorVariationEffect {\r\n  /**\r\n   * The color variation mode:\r\n   * - 'hue_shift': Randomly shift hue within range\r\n   * - 'saturation_jitter': Randomly vary saturation\r\n   * - 'value_jitter': Randomly vary brightness/value\r\n   * - 'palette_snap': Snap colors to nearest palette entry\r\n   */\r\n  mode: ColorVariationMode;\r\n\r\n  /**\r\n   * Amount of variation (0.0 to 1.0). Default: 0.1\r\n   * - 0.0: No change\r\n   * - 0.5: Medium variation\r\n   * - 1.0: Maximum variation\r\n   */\r\n  amount?: number;\r\n\r\n  /**\r\n   * For 'palette_snap': Array of colors to snap to (hex strings).\r\n   */\r\n  palette?: string[];\r\n\r\n  /**\r\n   * Random seed for deterministic variation.\r\n   */\r\n  seed?: number;\r\n}\r\n\r\n/**\r\n * Tiling pattern types for seamless/patterned textures.\r\n */\r\nexport type TilingPattern = \"brick\" | \"herringbone\" | \"basketweave\" | \"random\";\r\n\r\n/**\r\n * Configuration for tiling effects.\r\n * Helps create seamless textures or specific tiling patterns.\r\n */\r\nexport interface ITilingEffect {\r\n  /**\r\n   * Make edges seamless for repeating textures.\r\n   */\r\n  seamless?: boolean;\r\n\r\n  /**\r\n   * Tiling pattern for block arrangement:\r\n   * - 'brick': Offset rows by half\r\n   * - 'herringbone': Diagonal zigzag pattern\r\n   * - 'basketweave': Alternating horizontal/vertical groups\r\n   * - 'random': Randomized positions\r\n   */\r\n  pattern?: TilingPattern;\r\n\r\n  /**\r\n   * Offset amount for brick pattern (0.0 to 1.0). Default: 0.5\r\n   */\r\n  offset?: number;\r\n}\r\n\r\n/**\r\n * Combined effects configuration for a texture.\r\n * Multiple effects can be applied in a defined order.\r\n */\r\nexport interface ITextureEffects {\r\n  /**\r\n   * Lighting effect for pseudo-3D depth.\r\n   */\r\n  lighting?: ILightingEffect;\r\n\r\n  /**\r\n   * Border effect for edges/outlines (CSS-like syntax).\r\n   */\r\n  border?: IBorderEffect;\r\n\r\n  /**\r\n   * Overlay effects for surface detail. Applied in array order.\r\n   */\r\n  overlay?: IOverlayEffect | IOverlayEffect[];\r\n\r\n  /**\r\n   * Color variation effect.\r\n   */\r\n  colorVariation?: IColorVariationEffect;\r\n\r\n  /**\r\n   * Tiling effect for seamless/patterned textures.\r\n   */\r\n  tiling?: ITilingEffect;\r\n}\r\n\r\n// ============================================================================\r\n// UTILITY FUNCTIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Get pixel index in RGBA buffer.\r\n */\r\nfunction getPixelIndex(x: number, y: number, width: number): number {\r\n  return (y * width + x) * 4;\r\n}\r\n\r\n/**\r\n * Get pixel color from buffer.\r\n */\r\nfunction getPixel(pixels: Uint8Array, x: number, y: number, width: number): ParsedColor {\r\n  const idx = getPixelIndex(x, y, width);\r\n  return {\r\n    r: pixels[idx],\r\n    g: pixels[idx + 1],\r\n    b: pixels[idx + 2],\r\n    a: pixels[idx + 3],\r\n  };\r\n}\r\n\r\n/**\r\n * Set pixel color in buffer.\r\n */\r\nfunction setPixel(pixels: Uint8Array, x: number, y: number, width: number, color: ParsedColor): void {\r\n  const idx = getPixelIndex(x, y, width);\r\n  pixels[idx] = color.r;\r\n  pixels[idx + 1] = color.g;\r\n  pixels[idx + 2] = color.b;\r\n  pixels[idx + 3] = color.a;\r\n}\r\n\r\n/**\r\n * Blend source color over destination with alpha.\r\n */\r\nfunction blendOver(dst: ParsedColor, src: ParsedColor, opacity: number = 1): ParsedColor {\r\n  const srcAlpha = (src.a / 255) * opacity;\r\n  const dstAlpha = dst.a / 255;\r\n  const outAlpha = srcAlpha + dstAlpha * (1 - srcAlpha);\r\n\r\n  if (outAlpha === 0) {\r\n    return { r: 0, g: 0, b: 0, a: 0 };\r\n  }\r\n\r\n  return {\r\n    r: Math.round((src.r * srcAlpha + dst.r * dstAlpha * (1 - srcAlpha)) / outAlpha),\r\n    g: Math.round((src.g * srcAlpha + dst.g * dstAlpha * (1 - srcAlpha)) / outAlpha),\r\n    b: Math.round((src.b * srcAlpha + dst.b * dstAlpha * (1 - srcAlpha)) / outAlpha),\r\n    a: Math.round(outAlpha * 255),\r\n  };\r\n}\r\n\r\n/**\r\n * Lighten a color by a factor.\r\n */\r\nfunction lightenColor(color: ParsedColor, factor: number): ParsedColor {\r\n  return {\r\n    r: Math.min(255, Math.round(color.r + (255 - color.r) * factor)),\r\n    g: Math.min(255, Math.round(color.g + (255 - color.g) * factor)),\r\n    b: Math.min(255, Math.round(color.b + (255 - color.b) * factor)),\r\n    a: color.a,\r\n  };\r\n}\r\n\r\n/**\r\n * Darken a color by a factor.\r\n */\r\nfunction darkenColor(color: ParsedColor, factor: number): ParsedColor {\r\n  return {\r\n    r: Math.max(0, Math.round(color.r * (1 - factor))),\r\n    g: Math.max(0, Math.round(color.g * (1 - factor))),\r\n    b: Math.max(0, Math.round(color.b * (1 - factor))),\r\n    a: color.a,\r\n  };\r\n}\r\n\r\n/**\r\n * Convert RGB to HSV.\r\n */\r\nfunction rgbToHsv(color: ParsedColor): { h: number; s: number; v: number } {\r\n  const r = color.r / 255;\r\n  const g = color.g / 255;\r\n  const b = color.b / 255;\r\n\r\n  const max = Math.max(r, g, b);\r\n  const min = Math.min(r, g, b);\r\n  const d = max - min;\r\n\r\n  let h = 0;\r\n  const s = max === 0 ? 0 : d / max;\r\n  const v = max;\r\n\r\n  if (max !== min) {\r\n    switch (max) {\r\n      case r:\r\n        h = (g - b) / d + (g < b ? 6 : 0);\r\n        break;\r\n      case g:\r\n        h = (b - r) / d + 2;\r\n        break;\r\n      case b:\r\n        h = (r - g) / d + 4;\r\n        break;\r\n    }\r\n    h /= 6;\r\n  }\r\n\r\n  return { h, s, v };\r\n}\r\n\r\n/**\r\n * Convert HSV to RGB.\r\n */\r\nfunction hsvToRgb(h: number, s: number, v: number, a: number = 255): ParsedColor {\r\n  let r = 0,\r\n    g = 0,\r\n    b = 0;\r\n\r\n  const i = Math.floor(h * 6);\r\n  const f = h * 6 - i;\r\n  const p = v * (1 - s);\r\n  const q = v * (1 - f * s);\r\n  const t = v * (1 - (1 - f) * s);\r\n\r\n  switch (i % 6) {\r\n    case 0:\r\n      r = v;\r\n      g = t;\r\n      b = p;\r\n      break;\r\n    case 1:\r\n      r = q;\r\n      g = v;\r\n      b = p;\r\n      break;\r\n    case 2:\r\n      r = p;\r\n      g = v;\r\n      b = t;\r\n      break;\r\n    case 3:\r\n      r = p;\r\n      g = q;\r\n      b = v;\r\n      break;\r\n    case 4:\r\n      r = t;\r\n      g = p;\r\n      b = v;\r\n      break;\r\n    case 5:\r\n      r = v;\r\n      g = p;\r\n      b = q;\r\n      break;\r\n  }\r\n\r\n  return {\r\n    r: Math.round(r * 255),\r\n    g: Math.round(g * 255),\r\n    b: Math.round(b * 255),\r\n    a,\r\n  };\r\n}\r\n\r\n/**\r\n * Calculate color distance for palette snapping.\r\n */\r\nfunction colorDistance(c1: ParsedColor, c2: ParsedColor): number {\r\n  const dr = c1.r - c2.r;\r\n  const dg = c1.g - c2.g;\r\n  const db = c1.b - c2.b;\r\n  return dr * dr + dg * dg + db * db;\r\n}\r\n\r\n// ============================================================================\r\n// LIGHTING EFFECTS\r\n// ============================================================================\r\n\r\n/**\r\n * Apply lighting effect to pixel buffer.\r\n * Creates pseudo-3D depth by simulating light hitting a surface.\r\n */\r\nexport function applyLightingEffect(pixels: Uint8Array, width: number, height: number, effect: ILightingEffect): void {\r\n  const intensity = effect.intensity ?? 0.3;\r\n  const angle = effect.angle ?? 315; // Default: top-left\r\n\r\n  // Pre-calculate angle components\r\n  const angleRad = (angle * Math.PI) / 180;\r\n  const lightX = Math.cos(angleRad);\r\n  const lightY = -Math.sin(angleRad); // Negative because Y increases downward\r\n\r\n  for (let y = 0; y < height; y++) {\r\n    for (let x = 0; x < width; x++) {\r\n      const color = getPixel(pixels, x, y, width);\r\n      if (color.a === 0) continue; // Skip transparent pixels\r\n\r\n      let lightFactor = 0;\r\n\r\n      switch (effect.preset) {\r\n        case \"inset\":\r\n          // Inset: darken near light source, lighten away from it\r\n          {\r\n            const nx = (x / (width - 1)) * 2 - 1; // Normalize to -1 to 1\r\n            const ny = (y / (height - 1)) * 2 - 1;\r\n            lightFactor = -(nx * lightX + ny * lightY) * intensity;\r\n          }\r\n          break;\r\n\r\n        case \"outset\":\r\n          // Outset: lighten near light source, darken away from it\r\n          {\r\n            const nx = (x / (width - 1)) * 2 - 1;\r\n            const ny = (y / (height - 1)) * 2 - 1;\r\n            lightFactor = (nx * lightX + ny * lightY) * intensity;\r\n          }\r\n          break;\r\n\r\n        case \"pillow\":\r\n          // Pillow: darken edges, lighten center\r\n          {\r\n            const dx = Math.abs((x / (width - 1)) * 2 - 1);\r\n            const dy = Math.abs((y / (height - 1)) * 2 - 1);\r\n            const edgeDist = Math.max(dx, dy);\r\n            lightFactor = (1 - edgeDist * 2) * intensity;\r\n          }\r\n          break;\r\n\r\n        case \"ambient_occlusion\":\r\n          // Ambient occlusion: darken corners and edges\r\n          {\r\n            const dx = Math.min(x, width - 1 - x) / (width / 2);\r\n            const dy = Math.min(y, height - 1 - y) / (height / 2);\r\n            const cornerDist = Math.min(dx, dy);\r\n            lightFactor = (cornerDist - 0.5) * intensity * 2;\r\n          }\r\n          break;\r\n      }\r\n\r\n      // Apply lighting\r\n      let newColor: ParsedColor;\r\n      if (lightFactor > 0) {\r\n        newColor = lightenColor(color, lightFactor);\r\n      } else {\r\n        newColor = darkenColor(color, -lightFactor);\r\n      }\r\n\r\n      setPixel(pixels, x, y, width, newColor);\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// BORDER EFFECTS\r\n// ============================================================================\r\n\r\n/**\r\n * Apply border effect to pixel buffer.\r\n * Uses CSS-like syntax for specifying individual or all sides.\r\n */\r\nexport function applyBorderEffect(pixels: Uint8Array, width: number, height: number, effect: IBorderEffect): void {\r\n  const rng = new SeededRandom(effect.seed ?? 12345);\r\n\r\n  // Resolve each side's configuration\r\n  const sides = {\r\n    top: effect.top ?? effect.all,\r\n    right: effect.right ?? effect.all,\r\n    bottom: effect.bottom ?? effect.all,\r\n    left: effect.left ?? effect.all,\r\n  };\r\n\r\n  // Apply each side\r\n  if (sides.top) {\r\n    applyBorderSide(pixels, width, height, \"top\", sides.top, rng);\r\n  }\r\n  if (sides.right) {\r\n    applyBorderSide(pixels, width, height, \"right\", sides.right, rng);\r\n  }\r\n  if (sides.bottom) {\r\n    applyBorderSide(pixels, width, height, \"bottom\", sides.bottom, rng);\r\n  }\r\n  if (sides.left) {\r\n    applyBorderSide(pixels, width, height, \"left\", sides.left, rng);\r\n  }\r\n}\r\n\r\n/**\r\n * Apply a single border side.\r\n */\r\nfunction applyBorderSide(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  side: \"top\" | \"right\" | \"bottom\" | \"left\",\r\n  config: IBorderSide,\r\n  rng: SeededRandom\r\n): void {\r\n  const borderWidth = Math.min(config.width ?? 1, 8);\r\n  const style = config.style;\r\n\r\n  // Parse or auto-generate border color\r\n  let borderColor: ParsedColor;\r\n  if (config.color) {\r\n    borderColor = NoiseGenerationUtilities.parseColorInput(config.color);\r\n  } else {\r\n    // Sample center pixel and auto-adjust\r\n    const centerColor = getPixel(pixels, Math.floor(width / 2), Math.floor(height / 2), width);\r\n    if (style === \"highlight\") {\r\n      borderColor = lightenColor(centerColor, 0.4);\r\n    } else {\r\n      borderColor = darkenColor(centerColor, 0.3);\r\n    }\r\n  }\r\n\r\n  // Determine pixel ranges based on side\r\n  let xStart: number, xEnd: number, yStart: number, yEnd: number;\r\n\r\n  switch (side) {\r\n    case \"top\":\r\n      xStart = 0;\r\n      xEnd = width;\r\n      yStart = 0;\r\n      yEnd = borderWidth;\r\n      break;\r\n    case \"bottom\":\r\n      xStart = 0;\r\n      xEnd = width;\r\n      yStart = height - borderWidth;\r\n      yEnd = height;\r\n      break;\r\n    case \"left\":\r\n      xStart = 0;\r\n      xEnd = borderWidth;\r\n      yStart = 0;\r\n      yEnd = height;\r\n      break;\r\n    case \"right\":\r\n      xStart = width - borderWidth;\r\n      xEnd = width;\r\n      yStart = 0;\r\n      yEnd = height;\r\n      break;\r\n  }\r\n\r\n  // Apply border pixels\r\n  for (let y = yStart; y < yEnd; y++) {\r\n    for (let x = xStart; x < xEnd; x++) {\r\n      let shouldDraw = true;\r\n      let colorToUse = borderColor;\r\n\r\n      switch (style) {\r\n        case \"solid\":\r\n          // Always draw\r\n          break;\r\n\r\n        case \"dashed\":\r\n          // Draw every other 2-pixel segment\r\n          const pos = side === \"top\" || side === \"bottom\" ? x : y;\r\n          shouldDraw = Math.floor(pos / 2) % 2 === 0;\r\n          break;\r\n\r\n        case \"worn\":\r\n          // Irregular drawing with random gaps\r\n          shouldDraw = rng.next() > 0.2;\r\n          if (shouldDraw) {\r\n            // Add slight color variation\r\n            const variation = (rng.next() - 0.5) * 0.2;\r\n            if (variation > 0) {\r\n              colorToUse = lightenColor(borderColor, variation);\r\n            } else {\r\n              colorToUse = darkenColor(borderColor, -variation);\r\n            }\r\n          }\r\n          break;\r\n\r\n        case \"highlight\":\r\n          // Brighter border with slight gradient\r\n          {\r\n            const distFromEdge =\r\n              side === \"top\"\r\n                ? y - yStart\r\n                : side === \"bottom\"\r\n                ? yEnd - 1 - y\r\n                : side === \"left\"\r\n                ? x - xStart\r\n                : xEnd - 1 - x;\r\n            const gradient = 1 - distFromEdge / borderWidth;\r\n            colorToUse = lightenColor(borderColor, gradient * 0.2);\r\n          }\r\n          break;\r\n      }\r\n\r\n      if (shouldDraw) {\r\n        const existingColor = getPixel(pixels, x, y, width);\r\n        const blended = blendOver(existingColor, colorToUse, 0.8);\r\n        setPixel(pixels, x, y, width, blended);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// OVERLAY EFFECTS\r\n// ============================================================================\r\n\r\n/**\r\n * Apply overlay effect to pixel buffer.\r\n * Adds surface detail without modifying base structure.\r\n */\r\nexport function applyOverlayEffect(pixels: Uint8Array, width: number, height: number, effect: IOverlayEffect): void {\r\n  const density = effect.density ?? 0.3;\r\n  const rng = new SeededRandom(effect.seed ?? 54321);\r\n\r\n  // Get pattern-specific default color\r\n  let overlayColor: ParsedColor;\r\n  if (effect.color) {\r\n    overlayColor = NoiseGenerationUtilities.parseColorInput(effect.color);\r\n  } else {\r\n    switch (effect.pattern) {\r\n      case \"cracks\":\r\n        overlayColor = { r: 30, g: 30, b: 30, a: 180 };\r\n        break;\r\n      case \"scratches\":\r\n        overlayColor = { r: 200, g: 200, b: 200, a: 150 };\r\n        break;\r\n      case \"moss\":\r\n        overlayColor = { r: 60, g: 120, b: 40, a: 180 };\r\n        break;\r\n      case \"rust\":\r\n        overlayColor = { r: 180, g: 80, b: 30, a: 180 };\r\n        break;\r\n      case \"sparkle\":\r\n        overlayColor = { r: 255, g: 255, b: 255, a: 255 };\r\n        break;\r\n      case \"veins\":\r\n        overlayColor = { r: 50, g: 50, b: 60, a: 160 };\r\n        break;\r\n      default:\r\n        overlayColor = { r: 128, g: 128, b: 128, a: 128 };\r\n    }\r\n  }\r\n\r\n  switch (effect.pattern) {\r\n    case \"cracks\":\r\n      applyCracksOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n    case \"scratches\":\r\n      applyScratchesOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n    case \"moss\":\r\n      applyMossOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n    case \"rust\":\r\n      applyRustOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n    case \"sparkle\":\r\n      applySparkleOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n    case \"veins\":\r\n      applyVeinsOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n  }\r\n}\r\n\r\n/**\r\n * Apply cracks overlay - dark lines suggesting fractures.\r\n */\r\nfunction applyCracksOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numCracks = Math.floor(density * 5) + 1;\r\n\r\n  for (let i = 0; i < numCracks; i++) {\r\n    // Start point\r\n    let x = rng.nextInt(0, width - 1);\r\n    let y = rng.nextInt(0, height - 1);\r\n\r\n    // Crack length\r\n    const length = rng.nextInt(3, Math.max(width, height) / 2);\r\n\r\n    for (let j = 0; j < length; j++) {\r\n      if (x >= 0 && x < width && y >= 0 && y < height) {\r\n        const existingColor = getPixel(pixels, x, y, width);\r\n        const blended = blendOver(existingColor, color, 0.7);\r\n        setPixel(pixels, x, y, width, blended);\r\n      }\r\n\r\n      // Random walk with preference for downward/diagonal\r\n      const dir = rng.next();\r\n      if (dir < 0.4) {\r\n        y += 1;\r\n      } else if (dir < 0.6) {\r\n        x += rng.next() < 0.5 ? -1 : 1;\r\n      } else if (dir < 0.8) {\r\n        x += 1;\r\n        y += 1;\r\n      } else {\r\n        x -= 1;\r\n        y += 1;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Apply scratches overlay - light linear marks.\r\n */\r\nfunction applyScratchesOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numScratches = Math.floor(density * 8) + 1;\r\n\r\n  for (let i = 0; i < numScratches; i++) {\r\n    // Start point\r\n    const x1 = rng.nextInt(0, width - 1);\r\n    const y1 = rng.nextInt(0, height - 1);\r\n\r\n    // End point - mostly horizontal or diagonal scratches\r\n    const angle = (rng.next() - 0.5) * Math.PI * 0.5; // -45 to +45 degrees\r\n    const length = rng.nextInt(2, width / 3);\r\n    const x2 = Math.round(x1 + Math.cos(angle) * length);\r\n    const y2 = Math.round(y1 + Math.sin(angle) * length);\r\n\r\n    // Draw line using Bresenham's algorithm\r\n    drawLine(pixels, width, height, x1, y1, x2, y2, color, 0.5);\r\n  }\r\n}\r\n\r\n/**\r\n * Draw a line using Bresenham's algorithm.\r\n */\r\nfunction drawLine(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  x1: number,\r\n  y1: number,\r\n  x2: number,\r\n  y2: number,\r\n  color: ParsedColor,\r\n  opacity: number\r\n): void {\r\n  const dx = Math.abs(x2 - x1);\r\n  const dy = Math.abs(y2 - y1);\r\n  const sx = x1 < x2 ? 1 : -1;\r\n  const sy = y1 < y2 ? 1 : -1;\r\n  let err = dx - dy;\r\n\r\n  let x = x1;\r\n  let y = y1;\r\n\r\n  while (true) {\r\n    if (x >= 0 && x < width && y >= 0 && y < height) {\r\n      const existingColor = getPixel(pixels, x, y, width);\r\n      const blended = blendOver(existingColor, color, opacity);\r\n      setPixel(pixels, x, y, width, blended);\r\n    }\r\n\r\n    if (x === x2 && y === y2) break;\r\n\r\n    const e2 = 2 * err;\r\n    if (e2 > -dy) {\r\n      err -= dy;\r\n      x += sx;\r\n    }\r\n    if (e2 < dx) {\r\n      err += dx;\r\n      y += sy;\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Apply moss overlay - green organic patches.\r\n */\r\nfunction applyMossOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numPatches = Math.floor(density * 6) + 1;\r\n\r\n  for (let i = 0; i < numPatches; i++) {\r\n    const cx = rng.nextInt(0, width - 1);\r\n    const cy = rng.nextInt(0, height - 1);\r\n    const radius = rng.nextInt(1, 3);\r\n\r\n    for (let dy = -radius; dy <= radius; dy++) {\r\n      for (let dx = -radius; dx <= radius; dx++) {\r\n        const x = cx + dx;\r\n        const y = cy + dy;\r\n\r\n        if (x >= 0 && x < width && y >= 0 && y < height) {\r\n          // Irregular shape with random fill\r\n          if (rng.next() < 0.6 && dx * dx + dy * dy <= radius * radius) {\r\n            // Vary the green color slightly\r\n            const variedColor: ParsedColor = {\r\n              r: color.r + rng.nextInt(-10, 10),\r\n              g: Math.min(255, color.g + rng.nextInt(-20, 20)),\r\n              b: color.b + rng.nextInt(-10, 10),\r\n              a: color.a,\r\n            };\r\n            const existingColor = getPixel(pixels, x, y, width);\r\n            const blended = blendOver(existingColor, variedColor, 0.6);\r\n            setPixel(pixels, x, y, width, blended);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Apply rust overlay - orange/brown oxidation spots.\r\n */\r\nfunction applyRustOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numSpots = Math.floor(density * 10) + 2;\r\n\r\n  for (let i = 0; i < numSpots; i++) {\r\n    const cx = rng.nextInt(0, width - 1);\r\n    const cy = rng.nextInt(0, height - 1);\r\n    const size = rng.nextInt(1, 2);\r\n\r\n    for (let dy = -size; dy <= size; dy++) {\r\n      for (let dx = -size; dx <= size; dx++) {\r\n        const x = cx + dx;\r\n        const y = cy + dy;\r\n\r\n        if (x >= 0 && x < width && y >= 0 && y < height && rng.next() < 0.7) {\r\n          // Vary the rust color\r\n          const variedColor: ParsedColor = {\r\n            r: Math.min(255, color.r + rng.nextInt(-20, 20)),\r\n            g: Math.max(0, color.g + rng.nextInt(-20, 10)),\r\n            b: Math.max(0, color.b + rng.nextInt(-10, 10)),\r\n            a: color.a,\r\n          };\r\n          const existingColor = getPixel(pixels, x, y, width);\r\n          const blended = blendOver(existingColor, variedColor, 0.5);\r\n          setPixel(pixels, x, y, width, blended);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Apply sparkle overlay - bright highlight dots.\r\n */\r\nfunction applySparkleOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numSparkles = Math.floor(density * width * height * 0.02) + 1;\r\n\r\n  for (let i = 0; i < numSparkles; i++) {\r\n    const x = rng.nextInt(0, width - 1);\r\n    const y = rng.nextInt(0, height - 1);\r\n\r\n    // Bright sparkle with slight color variation\r\n    const brightness = 200 + rng.nextInt(0, 55);\r\n    const sparkleColor: ParsedColor = {\r\n      r: brightness,\r\n      g: brightness,\r\n      b: Math.min(255, brightness + rng.nextInt(-20, 20)),\r\n      a: 255,\r\n    };\r\n\r\n    const existingColor = getPixel(pixels, x, y, width);\r\n    const blended = blendOver(existingColor, sparkleColor, 0.8);\r\n    setPixel(pixels, x, y, width, blended);\r\n  }\r\n}\r\n\r\n/**\r\n * Apply veins overlay - dark branching lines.\r\n */\r\nfunction applyVeinsOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numVeins = Math.floor(density * 3) + 1;\r\n\r\n  for (let i = 0; i < numVeins; i++) {\r\n    // Start from edge\r\n    let x = rng.next() < 0.5 ? 0 : width - 1;\r\n    let y = rng.nextInt(0, height - 1);\r\n\r\n    const direction = x === 0 ? 1 : -1;\r\n    const length = rng.nextInt(width / 3, width);\r\n\r\n    for (let j = 0; j < length; j++) {\r\n      if (x >= 0 && x < width && y >= 0 && y < height) {\r\n        const existingColor = getPixel(pixels, x, y, width);\r\n        const blended = blendOver(existingColor, color, 0.6);\r\n        setPixel(pixels, x, y, width, blended);\r\n      }\r\n\r\n      // Move with branching tendency\r\n      x += direction;\r\n      if (rng.next() < 0.3) {\r\n        y += rng.next() < 0.5 ? -1 : 1;\r\n      }\r\n\r\n      // Occasional branch\r\n      if (rng.next() < 0.1) {\r\n        const branchY = y;\r\n        let branchX = x;\r\n        const branchDir = rng.next() < 0.5 ? -1 : 1;\r\n        for (let k = 0; k < rng.nextInt(2, 5); k++) {\r\n          const by = branchY + k * branchDir;\r\n          if (branchX >= 0 && branchX < width && by >= 0 && by < height) {\r\n            const existingColor = getPixel(pixels, branchX, by, width);\r\n            const blended = blendOver(existingColor, color, 0.4);\r\n            setPixel(pixels, branchX, by, width, blended);\r\n          }\r\n          branchX += direction;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// COLOR VARIATION EFFECTS\r\n// ============================================================================\r\n\r\n/**\r\n * Apply color variation effect to pixel buffer.\r\n */\r\nexport function applyColorVariationEffect(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  effect: IColorVariationEffect\r\n): void {\r\n  const amount = effect.amount ?? 0.1;\r\n  const rng = new SeededRandom(effect.seed ?? 98765);\r\n\r\n  // Parse palette colors if provided\r\n  let paletteColors: ParsedColor[] = [];\r\n  if (effect.palette) {\r\n    paletteColors = effect.palette.map((c) => NoiseGenerationUtilities.parseColorInput(c));\r\n  }\r\n\r\n  for (let y = 0; y < height; y++) {\r\n    for (let x = 0; x < width; x++) {\r\n      const color = getPixel(pixels, x, y, width);\r\n      if (color.a === 0) continue;\r\n\r\n      let newColor: ParsedColor;\r\n\r\n      switch (effect.mode) {\r\n        case \"hue_shift\":\r\n          {\r\n            const hsv = rgbToHsv(color);\r\n            hsv.h = (hsv.h + (rng.next() - 0.5) * amount) % 1;\r\n            if (hsv.h < 0) hsv.h += 1;\r\n            newColor = hsvToRgb(hsv.h, hsv.s, hsv.v, color.a);\r\n          }\r\n          break;\r\n\r\n        case \"saturation_jitter\":\r\n          {\r\n            const hsv = rgbToHsv(color);\r\n            hsv.s = Math.max(0, Math.min(1, hsv.s + (rng.next() - 0.5) * amount * 2));\r\n            newColor = hsvToRgb(hsv.h, hsv.s, hsv.v, color.a);\r\n          }\r\n          break;\r\n\r\n        case \"value_jitter\":\r\n          {\r\n            const hsv = rgbToHsv(color);\r\n            hsv.v = Math.max(0, Math.min(1, hsv.v + (rng.next() - 0.5) * amount * 2));\r\n            newColor = hsvToRgb(hsv.h, hsv.s, hsv.v, color.a);\r\n          }\r\n          break;\r\n\r\n        case \"palette_snap\":\r\n          if (paletteColors.length > 0) {\r\n            // Find nearest palette color\r\n            let nearest = paletteColors[0];\r\n            let nearestDist = colorDistance(color, nearest);\r\n\r\n            for (let i = 1; i < paletteColors.length; i++) {\r\n              const dist = colorDistance(color, paletteColors[i]);\r\n              if (dist < nearestDist) {\r\n                nearest = paletteColors[i];\r\n                nearestDist = dist;\r\n              }\r\n            }\r\n\r\n            newColor = { ...nearest, a: color.a };\r\n          } else {\r\n            newColor = color;\r\n          }\r\n          break;\r\n\r\n        default:\r\n          newColor = color;\r\n      }\r\n\r\n      setPixel(pixels, x, y, width, newColor);\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// TILING EFFECTS\r\n// ============================================================================\r\n\r\n/**\r\n * Apply tiling effect to pixel buffer.\r\n * Makes textures seamless or applies tiling patterns.\r\n */\r\nexport function applyTilingEffect(pixels: Uint8Array, width: number, height: number, effect: ITilingEffect): void {\r\n  // Apply seamless blending if requested\r\n  if (effect.seamless) {\r\n    makeSeamless(pixels, width, height);\r\n  }\r\n\r\n  // Note: Pattern tiling would typically be applied during texture generation\r\n  // rather than as a post-process. This could be expanded in the future.\r\n}\r\n\r\n/**\r\n * Make texture seamless by blending edges.\r\n */\r\nfunction makeSeamless(pixels: Uint8Array, width: number, height: number): void {\r\n  const blendWidth = Math.max(1, Math.floor(Math.min(width, height) / 4));\r\n\r\n  // Create a copy for reading while we write\r\n  const original = new Uint8Array(pixels);\r\n\r\n  // Blend horizontal seam (left-right)\r\n  for (let y = 0; y < height; y++) {\r\n    for (let i = 0; i < blendWidth; i++) {\r\n      const t = i / blendWidth;\r\n\r\n      // Left edge blends with right side\r\n      const leftIdx = getPixelIndex(i, y, width);\r\n      const rightMirrorIdx = getPixelIndex(width - 1 - i, y, width);\r\n\r\n      // Right edge blends with left side\r\n      const rightIdx = getPixelIndex(width - 1 - i, y, width);\r\n      const leftMirrorIdx = getPixelIndex(i, y, width);\r\n\r\n      // Blend colors\r\n      for (let c = 0; c < 4; c++) {\r\n        pixels[leftIdx + c] = Math.round(original[leftIdx + c] * t + original[rightMirrorIdx + c] * (1 - t));\r\n        pixels[rightIdx + c] = Math.round(original[rightIdx + c] * t + original[leftMirrorIdx + c] * (1 - t));\r\n      }\r\n    }\r\n  }\r\n\r\n  // Update original for vertical pass\r\n  original.set(pixels);\r\n\r\n  // Blend vertical seam (top-bottom)\r\n  for (let x = 0; x < width; x++) {\r\n    for (let i = 0; i < blendWidth; i++) {\r\n      const t = i / blendWidth;\r\n\r\n      // Top edge blends with bottom side\r\n      const topIdx = getPixelIndex(x, i, width);\r\n      const bottomMirrorIdx = getPixelIndex(x, height - 1 - i, width);\r\n\r\n      // Bottom edge blends with top side\r\n      const bottomIdx = getPixelIndex(x, height - 1 - i, width);\r\n      const topMirrorIdx = getPixelIndex(x, i, width);\r\n\r\n      // Blend colors\r\n      for (let c = 0; c < 4; c++) {\r\n        pixels[topIdx + c] = Math.round(original[topIdx + c] * t + original[bottomMirrorIdx + c] * (1 - t));\r\n        pixels[bottomIdx + c] = Math.round(original[bottomIdx + c] * t + original[topMirrorIdx + c] * (1 - t));\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// MAIN EFFECT APPLICATION\r\n// ============================================================================\r\n\r\n/**\r\n * Apply all texture effects to a pixel buffer in the correct order.\r\n *\r\n * Order of application:\r\n * 1. Color variation (modifies base colors)\r\n * 2. Lighting (adds depth based on position)\r\n * 3. Overlays (adds surface detail)\r\n * 4. Borders (adds edge definition)\r\n * 5. Tiling (makes seamless)\r\n *\r\n * @param pixels RGBA pixel buffer to modify in-place\r\n * @param width Buffer width\r\n * @param height Buffer height\r\n * @param effects Effects configuration\r\n */\r\nexport function applyTextureEffects(pixels: Uint8Array, width: number, height: number, effects: ITextureEffects): void {\r\n  // 1. Color variation first (affects base colors for other effects)\r\n  if (effects.colorVariation) {\r\n    applyColorVariationEffect(pixels, width, height, effects.colorVariation);\r\n  }\r\n\r\n  // 2. Lighting (position-based shading)\r\n  if (effects.lighting) {\r\n    applyLightingEffect(pixels, width, height, effects.lighting);\r\n  }\r\n\r\n  // 3. Overlays (surface detail)\r\n  if (effects.overlay) {\r\n    const overlays = Array.isArray(effects.overlay) ? effects.overlay : [effects.overlay];\r\n    for (const overlay of overlays) {\r\n      applyOverlayEffect(pixels, width, height, overlay);\r\n    }\r\n  }\r\n\r\n  // 4. Borders (edge definition) - after overlays so they're on top\r\n  if (effects.border) {\r\n    applyBorderEffect(pixels, width, height, effects.border);\r\n  }\r\n\r\n  // 5. Tiling (seamless edges) - last to blend everything\r\n  if (effects.tiling) {\r\n    applyTilingEffect(pixels, width, height, effects.tiling);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * TexturedRectangleGenerator\r\n *\r\n * Generates textured rectangles (filled areas) for Minecraft-style pixel art.\r\n * Produces SVG output with rect elements for blocky/pixelated aesthetics,\r\n * or direct RGBA pixel data for efficient texture generation.\r\n *\r\n * Uses NoiseGenerationUtilities for the core noise algorithms.\r\n *\r\n * Supports both the new IMcpTexturedRectangle format and legacy IMcpNoiseConfig for backwards compatibility.\r\n */\r\n\r\nimport {\r\n  IMcpNoiseConfig,\r\n  IMcpPixelArt,\r\n  IMcpPixelColor,\r\n  IMcpTexturedRectangle,\r\n  NoisePatternType,\r\n  TexturedRectangleType,\r\n} from \"./IMcpModelDesign\";\r\nimport NoiseGenerationUtilities, { SeededRandom } from \"./NoiseGenerationUtilities\";\r\nimport type { ParsedColor } from \"./NoiseGenerationUtilities\";\r\nimport { applyTextureEffects } from \"./TextureEffects\";\r\n\r\n/**\r\n * Textured rectangle generator for Minecraft-style procedural textures.\r\n */\r\nexport default class TexturedRectangleGenerator {\r\n  /**\r\n   * Maps new TexturedRectangleType to legacy NoisePatternType for internal processing.\r\n   */\r\n  private static texturedRectangleTypeToPattern(type: TexturedRectangleType): NoisePatternType | \"solid\" | \"none\" {\r\n    switch (type) {\r\n      case \"none\":\r\n        return \"none\";\r\n      case \"solid\":\r\n        return \"solid\";\r\n      case \"random_noise\":\r\n        return \"random\";\r\n      case \"dither_noise\":\r\n        return \"dither\";\r\n      case \"perlin_noise\":\r\n        return \"perlin\";\r\n      case \"stipple_noise\":\r\n        return \"stipple\";\r\n      case \"gradient\":\r\n        return \"gradient\";\r\n      default:\r\n        return \"random\";\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate an SVG string from a textured rectangle configuration.\r\n   * This is the primary API for the new unified texture format.\r\n   *\r\n   * @param config Textured rectangle configuration\r\n   * @param width Width of the texture in pixels\r\n   * @param height Height of the texture in pixels\r\n   * @param contextString Optional context string for seed generation\r\n   * @returns SVG string with the texture pattern\r\n   */\r\n  static generateTexturedRectangleSvg(\r\n    config: IMcpTexturedRectangle,\r\n    width: number,\r\n    height: number,\r\n    contextString?: string\r\n  ): string {\r\n    // Parse colors\r\n    const colors = (config.colors || []).map((c) => NoiseGenerationUtilities.parseColorInput(c));\r\n    if (colors.length === 0) {\r\n      // Default to white if no colors provided (ignored for \"none\")\r\n      colors.push({ r: 255, g: 255, b: 255, a: 255 });\r\n    }\r\n\r\n    const pattern = this.texturedRectangleTypeToPattern(config.type);\r\n\r\n    // Handle \"none\" - return an empty transparent SVG\r\n    if (pattern === \"none\") {\r\n      return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\"></svg>`;\r\n    }\r\n\r\n    // Handle solid color - just return a simple rect\r\n    if (pattern === \"solid\") {\r\n      const color = colors[0];\r\n      const colorStr =\r\n        color.a === 255\r\n          ? `rgb(${color.r},${color.g},${color.b})`\r\n          : `rgba(${color.r},${color.g},${color.b},${(color.a / 255).toFixed(3)})`;\r\n      return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\"><rect width=\"${width}\" height=\"${height}\" fill=\"${colorStr}\"/></svg>`;\r\n    }\r\n\r\n    // Determine seed\r\n    const seed = config.seed ?? NoiseGenerationUtilities.hashString(contextString || `texture-${Date.now()}`);\r\n    const rng = new SeededRandom(seed);\r\n\r\n    // Get parameters\r\n    const factor = Math.max(0, Math.min(1, config.factor ?? 0.2));\r\n    const pixelSize = Math.max(1, config.pixelSize ?? 1);\r\n    const scale = config.scale ?? 4;\r\n\r\n    // Calculate grid dimensions\r\n    const gridWidth = Math.ceil(width / pixelSize);\r\n    const gridHeight = Math.ceil(height / pixelSize);\r\n\r\n    // Generate the noise grid\r\n    const colorGrid = NoiseGenerationUtilities.generateNoiseGrid(\r\n      pattern as NoisePatternType,\r\n      colors,\r\n      factor,\r\n      gridWidth,\r\n      gridHeight,\r\n      rng,\r\n      scale\r\n    );\r\n\r\n    // Convert to SVG rects\r\n    return this.gridToSvg(colorGrid, width, height, pixelSize);\r\n  }\r\n\r\n  /**\r\n   * Generate an SVG string containing the noise texture.\r\n   * @deprecated Use generateTexturedRectangleSvg with IMcpTexturedRectangle instead.\r\n   *\r\n   * @param config Noise configuration with colors, pattern, and parameters\r\n   * @param width Width of the texture in pixels\r\n   * @param height Height of the texture in pixels\r\n   * @param contextString Optional context string for seed generation (e.g., \"textureId:wood\")\r\n   * @returns SVG string with rect elements forming the noise pattern\r\n   */\r\n  static generateNoiseSvg(config: IMcpNoiseConfig, width: number, height: number, contextString?: string): string {\r\n    // Parse colors\r\n    const colors = config.colors.map((c) => NoiseGenerationUtilities.parseColorInput(c));\r\n    if (colors.length === 0) {\r\n      // Default to white if no colors provided\r\n      colors.push({ r: 255, g: 255, b: 255, a: 255 });\r\n    }\r\n\r\n    // Determine seed\r\n    const seed = config.seed ?? NoiseGenerationUtilities.hashString(contextString || `noise-${Date.now()}`);\r\n    const rng = new SeededRandom(seed);\r\n\r\n    // Get parameters\r\n    const pattern = config.pattern || \"random\";\r\n    // Default factor of 0.2 provides subtle noise without being too grainy\r\n    const factor = Math.max(0, Math.min(1, config.factor ?? 0.2));\r\n    const pixelSize = Math.max(1, config.pixelSize ?? 1);\r\n    const scale = config.scale ?? 4;\r\n\r\n    // Calculate grid dimensions\r\n    const gridWidth = Math.ceil(width / pixelSize);\r\n    const gridHeight = Math.ceil(height / pixelSize);\r\n\r\n    // Generate the noise grid\r\n    const colorGrid = NoiseGenerationUtilities.generateNoiseGrid(\r\n      pattern,\r\n      colors,\r\n      factor,\r\n      gridWidth,\r\n      gridHeight,\r\n      rng,\r\n      scale\r\n    );\r\n\r\n    // Convert to SVG rects\r\n    return this.gridToSvg(colorGrid, width, height, pixelSize);\r\n  }\r\n\r\n  /**\r\n   * Convert color grid to SVG with rect elements\r\n   */\r\n  private static gridToSvg(grid: ParsedColor[][], width: number, height: number, pixelSize: number): string {\r\n    const rects: string[] = [];\r\n\r\n    // Optimize by grouping adjacent same-color pixels horizontally\r\n    for (let y = 0; y < grid.length; y++) {\r\n      const row = grid[y];\r\n      let runStart = 0;\r\n      let runColor = row[0];\r\n\r\n      for (let x = 1; x <= row.length; x++) {\r\n        const currentColor = x < row.length ? row[x] : null;\r\n\r\n        // Check if run ends\r\n        if (!currentColor || !NoiseGenerationUtilities.colorsEqual(currentColor, runColor)) {\r\n          // Output the run\r\n          const rectX = runStart * pixelSize;\r\n          const rectY = y * pixelSize;\r\n          const rectWidth = (x - runStart) * pixelSize;\r\n          const rectHeight = pixelSize;\r\n\r\n          // Clamp to texture bounds\r\n          const clampedWidth = Math.min(rectWidth, width - rectX);\r\n          const clampedHeight = Math.min(rectHeight, height - rectY);\r\n\r\n          if (clampedWidth > 0 && clampedHeight > 0) {\r\n            const colorStr = NoiseGenerationUtilities.colorToHex(runColor);\r\n            rects.push(\r\n              `<rect x=\"${rectX}\" y=\"${rectY}\" width=\"${clampedWidth}\" height=\"${clampedHeight}\" fill=\"${colorStr}\"/>`\r\n            );\r\n          }\r\n\r\n          // Start new run\r\n          if (currentColor) {\r\n            runStart = x;\r\n            runColor = currentColor;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">${rects.join(\"\")}</svg>`;\r\n  }\r\n\r\n  /**\r\n   * Combine noise SVG with optional overlay SVG.\r\n   * The noise forms the background, and the overlay is drawn on top.\r\n   *\r\n   * @param noiseSvg The noise pattern SVG\r\n   * @param overlaySvg Optional SVG to draw on top of the noise\r\n   * @param width Texture width\r\n   * @param height Texture height\r\n   * @returns Combined SVG string\r\n   */\r\n  static combineWithOverlay(noiseSvg: string, overlaySvg: string | undefined, width: number, height: number): string {\r\n    if (!overlaySvg) {\r\n      return noiseSvg;\r\n    }\r\n\r\n    // Extract inner content from both SVGs\r\n    const noiseInner = this.extractSvgInner(noiseSvg);\r\n    const overlayInner = this.extractSvgInner(overlaySvg);\r\n\r\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">${noiseInner}${overlayInner}</svg>`;\r\n  }\r\n\r\n  /**\r\n   * Extract inner content from SVG string (removing outer svg tags)\r\n   */\r\n  private static extractSvgInner(svg: string): string {\r\n    const match = svg.match(/<svg[^>]*>([\\s\\S]*)<\\/svg>/i);\r\n    return match ? match[1] : svg;\r\n  }\r\n\r\n  /**\r\n   * Generate noise texture as RGBA pixel data (Uint8Array).\r\n   * This bypasses SVG generation entirely for better performance.\r\n   * @deprecated Use generateTexturedRectanglePixels with IMcpTexturedRectangle instead.\r\n   *\r\n   * @param config Noise configuration with colors, pattern, and parameters\r\n   * @param width Width of the texture in pixels\r\n   * @param height Height of the texture in pixels\r\n   * @param contextString Optional context string for seed generation\r\n   * @returns RGBA pixel data as Uint8Array (width * height * 4 bytes)\r\n   */\r\n  static generateNoisePixels(\r\n    config: IMcpNoiseConfig,\r\n    width: number,\r\n    height: number,\r\n    contextString?: string\r\n  ): Uint8Array {\r\n    // Parse colors\r\n    const colors = config.colors.map((c) => NoiseGenerationUtilities.parseColorInput(c));\r\n    if (colors.length === 0) {\r\n      // Default to white if no colors provided\r\n      colors.push({ r: 255, g: 255, b: 255, a: 255 });\r\n    }\r\n\r\n    // Determine seed\r\n    const seed = config.seed ?? NoiseGenerationUtilities.hashString(contextString || `noise-${Date.now()}`);\r\n    const rng = new SeededRandom(seed);\r\n\r\n    // Get parameters\r\n    const pattern = config.pattern || \"random\";\r\n    const factor = Math.max(0, Math.min(1, config.factor ?? 0.2));\r\n    const pixelSize = Math.max(1, config.pixelSize ?? 1);\r\n    const scale = config.scale ?? 4;\r\n\r\n    // Calculate grid dimensions\r\n    const gridWidth = Math.ceil(width / pixelSize);\r\n    const gridHeight = Math.ceil(height / pixelSize);\r\n\r\n    // Generate the noise grid\r\n    const colorGrid = NoiseGenerationUtilities.generateNoiseGrid(\r\n      pattern,\r\n      colors,\r\n      factor,\r\n      gridWidth,\r\n      gridHeight,\r\n      rng,\r\n      scale\r\n    );\r\n\r\n    // Convert grid to RGBA pixel data\r\n    return this.gridToPixels(colorGrid, width, height, pixelSize);\r\n  }\r\n\r\n  /**\r\n   * Generate RGBA pixel data from a textured rectangle configuration.\r\n   * This is the primary API for the new unified texture format.\r\n   *\r\n   * @param config Textured rectangle configuration\r\n   * @param width Width of the texture in pixels\r\n   * @param height Height of the texture in pixels\r\n   * @param contextString Optional context string for seed generation\r\n   * @returns RGBA pixel data as Uint8Array (width * height * 4 bytes)\r\n   */\r\n  static generatePixels(\r\n    config: IMcpTexturedRectangle,\r\n    width: number,\r\n    height: number,\r\n    contextString?: string\r\n  ): Uint8Array {\r\n    // Parse colors\r\n    const colors = (config.colors || []).map((c) => NoiseGenerationUtilities.parseColorInput(c));\r\n    if (colors.length === 0) {\r\n      // Default to white if no colors provided (ignored for \"none\")\r\n      colors.push({ r: 255, g: 255, b: 255, a: 255 });\r\n    }\r\n\r\n    const pattern = this.texturedRectangleTypeToPattern(config.type);\r\n    let pixels: Uint8Array;\r\n\r\n    if (pattern === \"none\") {\r\n      // Fully transparent background. Uint8Array defaults to zero, so every RGBA\r\n      // byte \u2014 including the alpha channel \u2014 is 0, producing a fully transparent image.\r\n      pixels = new Uint8Array(width * height * 4);\r\n    } else if (pattern === \"solid\") {\r\n      // Handle solid color - fill with first color\r\n      pixels = new Uint8Array(width * height * 4);\r\n      const color = colors[0];\r\n      for (let i = 0; i < width * height; i++) {\r\n        const idx = i * 4;\r\n        pixels[idx] = color.r;\r\n        pixels[idx + 1] = color.g;\r\n        pixels[idx + 2] = color.b;\r\n        pixels[idx + 3] = color.a;\r\n      }\r\n    } else {\r\n      // Determine seed\r\n      const seed = config.seed ?? NoiseGenerationUtilities.hashString(contextString || `texture-${Date.now()}`);\r\n      const rng = new SeededRandom(seed);\r\n\r\n      // Get parameters\r\n      const factor = Math.max(0, Math.min(1, config.factor ?? 0.2));\r\n      const pixelSize = Math.max(1, config.pixelSize ?? 1);\r\n      const scale = config.scale ?? 4;\r\n\r\n      // Calculate grid dimensions\r\n      const gridWidth = Math.ceil(width / pixelSize);\r\n      const gridHeight = Math.ceil(height / pixelSize);\r\n\r\n      // Generate the noise grid\r\n      const colorGrid = NoiseGenerationUtilities.generateNoiseGrid(\r\n        pattern as NoisePatternType,\r\n        colors,\r\n        factor,\r\n        gridWidth,\r\n        gridHeight,\r\n        rng,\r\n        scale\r\n      );\r\n\r\n      // Convert grid to RGBA pixel data\r\n      pixels = this.gridToPixels(colorGrid, width, height, pixelSize);\r\n    }\r\n\r\n    // Apply post-processing effects if specified\r\n    if (config.effects) {\r\n      applyTextureEffects(pixels, width, height, config.effects);\r\n    }\r\n\r\n    return pixels;\r\n  }\r\n\r\n  /**\r\n   * Convert color grid to RGBA pixel data\r\n   */\r\n  private static gridToPixels(grid: ParsedColor[][], width: number, height: number, pixelSize: number): Uint8Array {\r\n    const gridWidth = grid[0]?.length || 0;\r\n    const gridHeight = grid.length;\r\n    const pixels = new Uint8Array(width * height * 4);\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      for (let x = 0; x < width; x++) {\r\n        // Map pixel to grid cell\r\n        const gridX = Math.min(Math.floor(x / pixelSize), gridWidth - 1);\r\n        const gridY = Math.min(Math.floor(y / pixelSize), gridHeight - 1);\r\n        const color = grid[gridY][gridX];\r\n\r\n        // Write RGBA values\r\n        const idx = (y * width + x) * 4;\r\n        pixels[idx] = color.r;\r\n        pixels[idx + 1] = color.g;\r\n        pixels[idx + 2] = color.b;\r\n        pixels[idx + 3] = color.a;\r\n      }\r\n    }\r\n\r\n    return pixels;\r\n  }\r\n\r\n  /**\r\n   * Parse an IMcpPixelColor to a ParsedColor (RGBA 0-255).\r\n   */\r\n  static parsePixelColor(color: IMcpPixelColor): ParsedColor {\r\n    // If hex is provided, parse it\r\n    if (color.hex) {\r\n      return NoiseGenerationUtilities.parseColorInput(color.hex);\r\n    }\r\n    // Otherwise use RGBA values\r\n    return {\r\n      r: Math.max(0, Math.min(255, color.r || 0)),\r\n      g: Math.max(0, Math.min(255, color.g || 0)),\r\n      b: Math.max(0, Math.min(255, color.b || 0)),\r\n      a: color.a !== undefined ? Math.max(0, Math.min(255, color.a)) : 255,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Apply pixel art overlay to an existing RGBA pixel buffer.\r\n   * This is the core pixel art rendering method - operates directly on pixel data\r\n   * for maximum performance (no SVG generation).\r\n   *\r\n   * @param pixels Existing RGBA pixel buffer to modify in-place\r\n   * @param width Width of the pixel buffer (face texture width in pixels)\r\n   * @param height Height of the pixel buffer (face texture height in pixels)\r\n   * @param pixelArt Pixel art configuration to apply\r\n   * @param pixelsPerUnit Pixels per Minecraft unit (for \"unit\" scaleMode). Default: 2\r\n   */\r\n  static applyPixelArt(\r\n    pixels: Uint8Array,\r\n    width: number,\r\n    height: number,\r\n    pixelArt: IMcpPixelArt,\r\n    pixelsPerUnit: number = 2\r\n  ): void {\r\n    const scaleMode = pixelArt.scaleMode || \"unit\";\r\n    const lines = pixelArt.lines;\r\n    const palette = pixelArt.palette;\r\n\r\n    // Calculate pixel art dimensions\r\n    const artHeight = lines.length;\r\n    let artWidth = 0;\r\n    for (const line of lines) {\r\n      artWidth = Math.max(artWidth, line.length);\r\n    }\r\n\r\n    if (artWidth === 0 || artHeight === 0) {\r\n      return; // Empty pixel art\r\n    }\r\n\r\n    // Pre-parse palette colors for performance\r\n    const parsedPalette: { [char: string]: ParsedColor } = {};\r\n    for (const char in palette) {\r\n      parsedPalette[char] = this.parsePixelColor(palette[char]);\r\n    }\r\n\r\n    // Calculate scale factor and offset based on scaleMode\r\n    let scale: number;\r\n    let offsetX: number;\r\n    let offsetY: number;\r\n\r\n    switch (scaleMode) {\r\n      case \"exact\":\r\n        // Each character = 1 pixel, x/y in pixels\r\n        scale = 1;\r\n        offsetX = pixelArt.x || 0;\r\n        offsetY = pixelArt.y || 0;\r\n        break;\r\n\r\n      case \"cover\":\r\n        // Scale to fill the entire texture, ignoring x/y\r\n        const scaleX = width / artWidth;\r\n        const scaleY = height / artHeight;\r\n        scale = Math.min(scaleX, scaleY); // Use min to maintain aspect ratio and cover\r\n        // For true cover, we'd use max, but min prevents overflow\r\n        // Center the art if it doesn't fill completely\r\n        offsetX = Math.floor((width - artWidth * scale) / 2);\r\n        offsetY = Math.floor((height - artHeight * scale) / 2);\r\n        break;\r\n\r\n      case \"unit\":\r\n      default:\r\n        // Each character = 1 Minecraft unit = pixelsPerUnit pixels\r\n        // x/y in Minecraft units\r\n        scale = pixelsPerUnit;\r\n        offsetX = (pixelArt.x || 0) * pixelsPerUnit;\r\n        offsetY = (pixelArt.y || 0) * pixelsPerUnit;\r\n        break;\r\n    }\r\n\r\n    // Process each character in the pixel art\r\n    for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\r\n      const line = lines[lineIdx];\r\n\r\n      for (let charIdx = 0; charIdx < line.length; charIdx++) {\r\n        const char = line[charIdx];\r\n\r\n        // Space is always transparent (skip drawing)\r\n        if (char === \" \") continue;\r\n\r\n        // Look up color in palette\r\n        const color = parsedPalette[char];\r\n        if (!color) {\r\n          // Character not in palette - skip silently\r\n          continue;\r\n        }\r\n\r\n        // Calculate the pixel region for this character\r\n        const startX = Math.floor(offsetX + charIdx * scale);\r\n        const startY = Math.floor(offsetY + lineIdx * scale);\r\n        const endX = Math.floor(offsetX + (charIdx + 1) * scale);\r\n        const endY = Math.floor(offsetY + (lineIdx + 1) * scale);\r\n\r\n        // Fill the scaled pixel region\r\n        for (let pixelY = startY; pixelY < endY; pixelY++) {\r\n          // Skip if outside texture bounds\r\n          if (pixelY < 0 || pixelY >= height) continue;\r\n\r\n          for (let pixelX = startX; pixelX < endX; pixelX++) {\r\n            // Skip if outside texture bounds\r\n            if (pixelX < 0 || pixelX >= width) continue;\r\n\r\n            // Calculate pixel index in buffer\r\n            const idx = (pixelY * width + pixelX) * 4;\r\n\r\n            // Alpha blend the pixel\r\n            if (color.a === 255) {\r\n              // Fully opaque - direct write\r\n              pixels[idx] = color.r;\r\n              pixels[idx + 1] = color.g;\r\n              pixels[idx + 2] = color.b;\r\n              pixels[idx + 3] = 255;\r\n            } else if (color.a > 0) {\r\n              // Partial transparency - alpha blend\r\n              const srcAlpha = color.a / 255;\r\n              const dstAlpha = pixels[idx + 3] / 255;\r\n              const outAlpha = srcAlpha + dstAlpha * (1 - srcAlpha);\r\n\r\n              if (outAlpha > 0) {\r\n                pixels[idx] = Math.round((color.r * srcAlpha + pixels[idx] * dstAlpha * (1 - srcAlpha)) / outAlpha);\r\n                pixels[idx + 1] = Math.round(\r\n                  (color.g * srcAlpha + pixels[idx + 1] * dstAlpha * (1 - srcAlpha)) / outAlpha\r\n                );\r\n                pixels[idx + 2] = Math.round(\r\n                  (color.b * srcAlpha + pixels[idx + 2] * dstAlpha * (1 - srcAlpha)) / outAlpha\r\n                );\r\n                pixels[idx + 3] = Math.round(outAlpha * 255);\r\n              }\r\n            }\r\n            // If alpha is 0, don't draw anything\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Apply multiple pixel art overlays in order.\r\n   * Each layer is rendered on top of the previous.\r\n   *\r\n   * @param pixels Existing RGBA pixel buffer to modify in-place\r\n   * @param width Width of the pixel buffer\r\n   * @param height Height of the pixel buffer\r\n   * @param pixelArtLayers Array of pixel art configurations to apply\r\n   * @param pixelsPerUnit Pixels per Minecraft unit (for \"unit\" scaleMode). Default: 2\r\n   */\r\n  static applyPixelArtLayers(\r\n    pixels: Uint8Array,\r\n    width: number,\r\n    height: number,\r\n    pixelArtLayers: IMcpPixelArt[],\r\n    pixelsPerUnit: number = 2\r\n  ): void {\r\n    for (const layer of pixelArtLayers) {\r\n      this.applyPixelArt(pixels, width, height, layer, pixelsPerUnit);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate pixel art as standalone RGBA pixel data.\r\n   * Creates a transparent buffer and applies the pixel art to it.\r\n   *\r\n   * @param pixelArt Pixel art configuration\r\n   * @returns Object with pixels (RGBA Uint8Array), width, and height\r\n   */\r\n  static generatePixelArtPixels(pixelArt: IMcpPixelArt): { pixels: Uint8Array; width: number; height: number } {\r\n    // Calculate dimensions from lines\r\n    const height = pixelArt.lines.length;\r\n    let width = 0;\r\n    for (const line of pixelArt.lines) {\r\n      width = Math.max(width, line.length);\r\n    }\r\n\r\n    // Handle empty pixel art\r\n    if (width === 0 || height === 0) {\r\n      return { pixels: new Uint8Array(0), width: 0, height: 0 };\r\n    }\r\n\r\n    // Create transparent buffer\r\n    const pixels = new Uint8Array(width * height * 4);\r\n    // Buffer is already zeroed (fully transparent)\r\n\r\n    // Apply the pixel art\r\n    this.applyPixelArt(pixels, width, height, pixelArt);\r\n\r\n    return { pixels, width, height };\r\n  }\r\n}\r\n\r\n// Re-export for backwards compatibility\r\nexport { NoiseGenerationUtilities, SeededRandom, ParsedColor };\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ModelDesignUtilities\r\n *\r\n * Converts MCP model design format to Minecraft .geo.json format\r\n * and generates texture atlases from per-face SVG/color specifications.\r\n */\r\n\r\nimport {\r\n  IMcpModelDesign,\r\n  IMcpFaceContent,\r\n  IMcpColorRGBA,\r\n  IMcpTextureDefinition,\r\n  IMcpNoiseConfig,\r\n  IMcpTexturedRectangle,\r\n  IMcpPixelArt,\r\n  convertNoiseConfigToTexturedRectangle,\r\n  colorToTexturedRectangle,\r\n} from \"./IMcpModelDesign\";\r\nimport IModelGeometry, { IGeometry, IGeometryBone, IGeometryBoneCube, IGeometryUVFaces } from \"./IModelGeometry\";\r\nimport TexturedRectangleGenerator from \"./TexturedRectangleGenerator\";\r\n\r\n/**\r\n * Represents a region in the texture atlas for a cube face\r\n */\r\nexport interface IAtlasRegion {\r\n  x: number;\r\n  y: number;\r\n  width: number;\r\n  height: number;\r\n  content: IMcpFaceContent;\r\n  faceName: string;\r\n  cubeIndex: number;\r\n  boneIndex: number;\r\n  /** Context string for deterministic noise seeding (e.g., \"bone0:cube1:north\") */\r\n  contextString?: string;\r\n  /** If true, this region shares atlas space with another region and should not be rendered */\r\n  isDuplicate?: boolean;\r\n}\r\n\r\n/**\r\n * Result from converting an MCP design to geometry\r\n */\r\nexport interface IModelDesignConversionResult {\r\n  /**\r\n   * The converted Minecraft geometry JSON\r\n   */\r\n  geometry: IModelGeometry;\r\n\r\n  /**\r\n   * Atlas regions for generating the texture\r\n   */\r\n  atlasRegions: IAtlasRegion[];\r\n\r\n  /**\r\n   * Total texture size [width, height]\r\n   */\r\n  textureSize: [number, number];\r\n\r\n  /**\r\n   * Pixels per Minecraft unit used for texture generation.\r\n   * Needed by pixel art renderer to scale properly.\r\n   */\r\n  pixelsPerUnit: number;\r\n\r\n  /**\r\n   * Any warnings during conversion\r\n   */\r\n  warnings: string[];\r\n\r\n  /**\r\n   * Map from content hash to atlas region index, for texture deduplication\r\n   */\r\n  textureDeduplicationMap?: Map<string, number>;\r\n}\r\n\r\n/**\r\n * Resolved face content after texture ID lookup.\r\n * Contains the actual svg/color/background to render (textureId is resolved away).\r\n */\r\nexport interface IResolvedFaceContent {\r\n  /** @deprecated Use background with type:'solid' instead */\r\n  color?: string | IMcpColorRGBA;\r\n  svg?: string;\r\n  /** @deprecated Use background instead */\r\n  noise?: IMcpNoiseConfig;\r\n  /** Background fill using a textured rectangle (unified color/noise format) */\r\n  background?: IMcpTexturedRectangle;\r\n  /** Pixel art overlays to render on top of background and svg */\r\n  pixelArt?: IMcpPixelArt[];\r\n  /** Post-processing effects to apply to the face texture */\r\n  effects?: import(\"./TextureEffects\").ITextureEffects;\r\n  rotation?: number;\r\n  /** The original textureId if this was resolved from a reference */\r\n  sourceTextureId?: string;\r\n}\r\n\r\n/**\r\n * Default pixels per Minecraft unit.\r\n * Standard Minecraft textures use 1 pixel per unit (16x16 texture for a 16-unit cube).\r\n * We default to 2 pixels per unit (32x32 texture per block) for HD quality.\r\n */\r\nconst DEFAULT_PIXELS_PER_UNIT = 2;\r\n\r\n/**\r\n * Bounding box for a model design\r\n */\r\nexport interface IModelBounds {\r\n  minX: number;\r\n  minY: number;\r\n  minZ: number;\r\n  maxX: number;\r\n  maxY: number;\r\n  maxZ: number;\r\n  /** Maximum dimension (width, height, or depth) */\r\n  maxDimension: number;\r\n  /** Center point of the bounding box */\r\n  center: { x: number; y: number; z: number };\r\n}\r\n\r\n/**\r\n * Utility class for working with MCP model designs\r\n */\r\nexport default class ModelDesignUtilities {\r\n  /**\r\n   * Calculate the bounding box of a model design.\r\n   * Iterates through all bones and cubes to find the min/max extents.\r\n   */\r\n  static calculateModelBounds(design: IMcpModelDesign): IModelBounds {\r\n    let minX = Infinity;\r\n    let minY = Infinity;\r\n    let minZ = Infinity;\r\n    let maxX = -Infinity;\r\n    let maxY = -Infinity;\r\n    let maxZ = -Infinity;\r\n\r\n    for (const bone of design.bones) {\r\n      for (const cube of bone.cubes) {\r\n        const [ox, oy, oz] = cube.origin;\r\n        const [sx, sy, sz] = cube.size;\r\n\r\n        // Cube extends from origin to origin + size\r\n        minX = Math.min(minX, ox);\r\n        minY = Math.min(minY, oy);\r\n        minZ = Math.min(minZ, oz);\r\n        maxX = Math.max(maxX, ox + sx);\r\n        maxY = Math.max(maxY, oy + sy);\r\n        maxZ = Math.max(maxZ, oz + sz);\r\n      }\r\n    }\r\n\r\n    // Handle empty models\r\n    if (minX === Infinity) {\r\n      minX = minY = minZ = 0;\r\n      maxX = maxY = maxZ = 1;\r\n    }\r\n\r\n    const width = maxX - minX;\r\n    const height = maxY - minY;\r\n    const depth = maxZ - minZ;\r\n    const maxDimension = Math.max(width, height, depth);\r\n\r\n    return {\r\n      minX,\r\n      minY,\r\n      minZ,\r\n      maxX,\r\n      maxY,\r\n      maxZ,\r\n      maxDimension,\r\n      center: {\r\n        x: (minX + maxX) / 2,\r\n        y: (minY + maxY) / 2,\r\n        z: (minZ + maxZ) / 2,\r\n      },\r\n    };\r\n  }\r\n  /**\r\n   * Parse a color string or object to RGBA values (0-255)\r\n   */\r\n  static parseColor(color: string | IMcpColorRGBA | undefined): IMcpColorRGBA {\r\n    if (!color) {\r\n      return { r: 255, g: 255, b: 255, a: 255 };\r\n    }\r\n\r\n    if (typeof color === \"object\") {\r\n      return {\r\n        r: Math.max(0, Math.min(255, Math.round(color.r))),\r\n        g: Math.max(0, Math.min(255, Math.round(color.g))),\r\n        b: Math.max(0, Math.min(255, Math.round(color.b))),\r\n        a: color.a !== undefined ? Math.max(0, Math.min(255, Math.round(color.a))) : 255,\r\n      };\r\n    }\r\n\r\n    // Parse hex color\r\n    if (color.startsWith(\"#\")) {\r\n      const hex = color.slice(1);\r\n      if (hex.length === 3) {\r\n        // Short form #RGB\r\n        return {\r\n          r: parseInt(hex[0] + hex[0], 16),\r\n          g: parseInt(hex[1] + hex[1], 16),\r\n          b: parseInt(hex[2] + hex[2], 16),\r\n          a: 255,\r\n        };\r\n      } else if (hex.length === 6) {\r\n        // Full form #RRGGBB\r\n        return {\r\n          r: parseInt(hex.slice(0, 2), 16),\r\n          g: parseInt(hex.slice(2, 4), 16),\r\n          b: parseInt(hex.slice(4, 6), 16),\r\n          a: 255,\r\n        };\r\n      } else if (hex.length === 8) {\r\n        // With alpha #RRGGBBAA\r\n        return {\r\n          r: parseInt(hex.slice(0, 2), 16),\r\n          g: parseInt(hex.slice(2, 4), 16),\r\n          b: parseInt(hex.slice(4, 6), 16),\r\n          a: parseInt(hex.slice(6, 8), 16),\r\n        };\r\n      }\r\n    }\r\n\r\n    // Parse rgb/rgba format\r\n    const rgbaMatch = color.match(/rgba?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d.]+))?\\s*\\)/i);\r\n    if (rgbaMatch) {\r\n      return {\r\n        r: parseInt(rgbaMatch[1], 10),\r\n        g: parseInt(rgbaMatch[2], 10),\r\n        b: parseInt(rgbaMatch[3], 10),\r\n        a: rgbaMatch[4] ? Math.round(parseFloat(rgbaMatch[4]) * 255) : 255,\r\n      };\r\n    }\r\n\r\n    // Default to white if parsing fails\r\n    return { r: 255, g: 255, b: 255, a: 255 };\r\n  }\r\n\r\n  /**\r\n   * Convert color to hex string\r\n   */\r\n  static colorToHex(color: IMcpColorRGBA): string {\r\n    const r = color.r.toString(16).padStart(2, \"0\");\r\n    const g = color.g.toString(16).padStart(2, \"0\");\r\n    const b = color.b.toString(16).padStart(2, \"0\");\r\n    return `#${r}${g}${b}`;\r\n  }\r\n\r\n  /**\r\n   * Resolve face content by looking up textureId references.\r\n   * Returns the actual svg/color content to render.\r\n   * Priority: textureId > svg > color\r\n   *\r\n   * @param faceContent The face content which may contain a textureId reference\r\n   * @param textures The texture dictionary from the model design\r\n   * @param warnings Array to collect any warnings (e.g., missing texture references)\r\n   * @returns Resolved content with svg/color, or undefined if face should be transparent\r\n   */\r\n  static resolveFaceContent(\r\n    faceContent: IMcpFaceContent | undefined,\r\n    textures: { [textureId: string]: IMcpTextureDefinition } | undefined,\r\n    warnings: string[]\r\n  ): IResolvedFaceContent | undefined {\r\n    if (!faceContent) {\r\n      return undefined;\r\n    }\r\n\r\n    // If textureId is specified, look it up\r\n    if (faceContent.textureId) {\r\n      if (!textures) {\r\n        warnings.push(\r\n          `Face references textureId \"${faceContent.textureId}\" but no textures dictionary is defined in the model.`\r\n        );\r\n        // Fall through to check for inline content\r\n      } else {\r\n        const texture = textures[faceContent.textureId];\r\n        if (!texture) {\r\n          warnings.push(\r\n            `Face references textureId \"${faceContent.textureId}\" which is not defined in the textures dictionary.`\r\n          );\r\n          // Fall through to check for inline content\r\n        } else {\r\n          // Successfully resolved texture reference\r\n          // Priority: background > noise > color (face overrides texture)\r\n          const resolvedBackground = faceContent.background || texture.background;\r\n          const resolvedNoise = faceContent.noise || texture.noise;\r\n          const resolvedColor = texture.color;\r\n          // Merge pixelArt: face pixelArt comes after texture pixelArt (renders on top)\r\n          const resolvedPixelArt = [...(texture.pixelArt || []), ...(faceContent.pixelArt || [])];\r\n          // Merge effects: face effects override texture effects per-property\r\n          const resolvedEffects =\r\n            texture.effects || faceContent.effects\r\n              ? {\r\n                  ...texture.effects,\r\n                  ...faceContent.effects,\r\n                }\r\n              : undefined;\r\n\r\n          // Normalize to background if possible (for consistent handling downstream)\r\n          let normalizedBackground = resolvedBackground;\r\n          if (!normalizedBackground && resolvedNoise) {\r\n            normalizedBackground = convertNoiseConfigToTexturedRectangle(resolvedNoise);\r\n          } else if (!normalizedBackground && resolvedColor) {\r\n            normalizedBackground = colorToTexturedRectangle(resolvedColor);\r\n          }\r\n\r\n          return {\r\n            color: resolvedColor,\r\n            svg: texture.svg,\r\n            noise: resolvedNoise,\r\n            background: normalizedBackground,\r\n            pixelArt: resolvedPixelArt.length > 0 ? resolvedPixelArt : undefined,\r\n            effects: resolvedEffects,\r\n            rotation: faceContent.rotation,\r\n            sourceTextureId: faceContent.textureId,\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    // No textureId or failed lookup - use inline content\r\n    // Priority: background > noise > color\r\n    if (\r\n      faceContent.svg ||\r\n      faceContent.color ||\r\n      faceContent.noise ||\r\n      faceContent.background ||\r\n      faceContent.pixelArt ||\r\n      faceContent.effects\r\n    ) {\r\n      // Normalize to background if possible\r\n      let normalizedBackground = faceContent.background;\r\n      if (!normalizedBackground && faceContent.noise) {\r\n        normalizedBackground = convertNoiseConfigToTexturedRectangle(faceContent.noise);\r\n      } else if (!normalizedBackground && faceContent.color) {\r\n        normalizedBackground = colorToTexturedRectangle(faceContent.color);\r\n      }\r\n\r\n      return {\r\n        color: faceContent.color,\r\n        svg: faceContent.svg,\r\n        noise: faceContent.noise,\r\n        background: normalizedBackground,\r\n        pixelArt: faceContent.pixelArt,\r\n        effects: faceContent.effects,\r\n        rotation: faceContent.rotation,\r\n      };\r\n    }\r\n\r\n    // No content at all\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Generate a content hash for a resolved face content.\r\n   * Used for texture deduplication - faces with identical content can share atlas regions.\r\n   * Note: rotation is NOT included in hash since it's applied at UV time, not texture time.\r\n   * Note: backgrounds with undefined/random seed create unique textures per face (not deduplicated).\r\n   */\r\n  static getContentHash(content: IResolvedFaceContent): string {\r\n    // If there's a sourceTextureId and no face-specific overrides, use that as a quick hash\r\n    if (content.sourceTextureId && !content.noise && !content.background) {\r\n      return `texref:${content.sourceTextureId}`;\r\n    }\r\n\r\n    // Build hash from all content components\r\n    const parts: string[] = [];\r\n\r\n    // Prefer background over legacy noise/color for hashing\r\n    if (content.background) {\r\n      // Solid fills are deterministic - they don't need seed for deduplication\r\n      // Noise-based fills need a seed - if not provided, use random to ensure unique textures per face\r\n      const isSolid = content.background.type === \"solid\";\r\n      const bgHashParts = [`type:${content.background.type}`, `colors:${JSON.stringify(content.background.colors)}`];\r\n      // Only include noise-related params for non-solid types\r\n      if (!isSolid) {\r\n        bgHashParts.push(`factor:${content.background.factor ?? 0.2}`);\r\n        bgHashParts.push(`pixelSize:${content.background.pixelSize ?? 1}`);\r\n        bgHashParts.push(`scale:${content.background.scale ?? 4}`);\r\n        // For noise types: explicit seed means deterministic (can deduplicate), no seed means unique per face\r\n        bgHashParts.push(\r\n          content.background.seed !== undefined ? `seed:${content.background.seed}` : `seed:${Math.random()}`\r\n        );\r\n      }\r\n      parts.push(`bg:{${bgHashParts.join(\",\")}}`);\r\n    } else if (content.noise) {\r\n      // Legacy noise support\r\n      const noiseHash = [\r\n        `pattern:${content.noise.pattern || \"random\"}`,\r\n        `colors:${JSON.stringify(content.noise.colors)}`,\r\n        `factor:${content.noise.factor ?? 0.5}`,\r\n        `pixelSize:${content.noise.pixelSize ?? 1}`,\r\n        `scale:${content.noise.scale ?? 4}`,\r\n        content.noise.seed !== undefined ? `seed:${content.noise.seed}` : `seed:${Math.random()}`,\r\n      ].join(\",\");\r\n      parts.push(`noise:{${noiseHash}}`);\r\n    }\r\n\r\n    if (content.svg) {\r\n      parts.push(`svg:${content.svg}`);\r\n    }\r\n\r\n    if (content.color && !content.background) {\r\n      // Only include color if no background (for legacy support)\r\n      if (typeof content.color === \"string\") {\r\n        parts.push(`color:${content.color}`);\r\n      } else {\r\n        parts.push(`color:rgba(${content.color.r},${content.color.g},${content.color.b},${content.color.a ?? 255})`);\r\n      }\r\n    }\r\n\r\n    // Pixel art is deterministic - include in hash for deduplication\r\n    if (content.pixelArt && content.pixelArt.length > 0) {\r\n      // Create a stable hash of the pixel art configuration\r\n      const pixelArtHash = content.pixelArt\r\n        .map((pa, i) => {\r\n          const lines = pa.lines.join(\"|\");\r\n          const palette = Object.entries(pa.palette || {})\r\n            .sort(([a], [b]) => a.localeCompare(b))\r\n            .map(([k, v]) => `${k}:${v.hex || `${v.r},${v.g},${v.b},${v.a ?? 255}`}`)\r\n            .join(\";\");\r\n          return `[${i}:x${pa.x || 0}y${pa.y || 0}:${lines}:${palette}]`;\r\n        })\r\n        .join(\"\");\r\n      parts.push(`pixelArt:${pixelArtHash}`);\r\n    }\r\n\r\n    if (content.sourceTextureId) {\r\n      parts.push(`texref:${content.sourceTextureId}`);\r\n    }\r\n\r\n    return parts.length > 0 ? parts.join(\"|\") : \"empty\";\r\n  }\r\n\r\n  /**\r\n   * Get the effective pixels per unit for a design.\r\n   * Returns the design's pixelsPerUnit if specified, otherwise DEFAULT_PIXELS_PER_UNIT.\r\n   */\r\n  static getPixelsPerUnit(design: IMcpModelDesign): number {\r\n    return design.pixelsPerUnit ?? DEFAULT_PIXELS_PER_UNIT;\r\n  }\r\n\r\n  /**\r\n   * Calculate the texture size needed for a face based on cube dimensions.\r\n   * @param cubeSize The cube dimensions [width, height, depth] in Minecraft units\r\n   * @param faceName The face to calculate texture size for\r\n   * @param pixelsPerUnit Pixels per Minecraft unit (default: DEFAULT_PIXELS_PER_UNIT)\r\n   */\r\n  static getFaceTextureSize(\r\n    cubeSize: [number, number, number],\r\n    faceName: string,\r\n    pixelsPerUnit: number = DEFAULT_PIXELS_PER_UNIT\r\n  ): { width: number; height: number } {\r\n    // Face dimensions based on cube size\r\n    // Pixels = units \u00D7 pixelsPerUnit\r\n    // north/south: width x height\r\n    // east/west: depth x height\r\n    // up/down: width x depth\r\n    const [width, height, depth] = cubeSize;\r\n\r\n    switch (faceName) {\r\n      case \"north\":\r\n      case \"south\":\r\n        return {\r\n          width: Math.max(1, Math.round(width * pixelsPerUnit)),\r\n          height: Math.max(1, Math.round(height * pixelsPerUnit)),\r\n        };\r\n      case \"east\":\r\n      case \"west\":\r\n        return {\r\n          width: Math.max(1, Math.round(depth * pixelsPerUnit)),\r\n          height: Math.max(1, Math.round(height * pixelsPerUnit)),\r\n        };\r\n      case \"up\":\r\n      case \"down\":\r\n        return {\r\n          width: Math.max(1, Math.round(width * pixelsPerUnit)),\r\n          height: Math.max(1, Math.round(depth * pixelsPerUnit)),\r\n        };\r\n      default:\r\n        return { width: 1, height: 1 };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if a texture size is sufficient for a design by doing a dry-run pack.\r\n   * Returns true if the texture needs to be larger.\r\n   * Takes into account texture deduplication - identical textures at same size share atlas space.\r\n   */\r\n  private static _checkNeedsLargerTexture(design: IMcpModelDesign, textureSize: [number, number]): boolean {\r\n    let currentX = 0;\r\n    let currentY = 0;\r\n    let rowHeight = 0;\r\n    const dummyWarnings: string[] = [];\r\n    const pixelsPerUnit = this.getPixelsPerUnit(design);\r\n\r\n    // Track already-packed textures for deduplication\r\n    const packedTextures = new Set<string>();\r\n\r\n    for (const bone of design.bones) {\r\n      for (const cube of bone.cubes) {\r\n        for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n          const faceContent = cube.faces[faceName];\r\n          if (!faceContent) {\r\n            continue;\r\n          }\r\n\r\n          // Resolve texture references\r\n          const resolvedContent = this.resolveFaceContent(faceContent, design.textures, dummyWarnings);\r\n          if (!resolvedContent) {\r\n            continue;\r\n          }\r\n\r\n          const faceSize = this.getFaceTextureSize(cube.size, faceName, pixelsPerUnit);\r\n\r\n          // Check for deduplication - if we've already packed this exact content at this size, skip\r\n          const contentHash = this.getContentHash(resolvedContent);\r\n          const dedupeKey = `${contentHash}|${faceSize.width}x${faceSize.height}`;\r\n          if (packedTextures.has(dedupeKey)) {\r\n            continue; // This texture will be reused, no new space needed\r\n          }\r\n          packedTextures.add(dedupeKey);\r\n\r\n          // Check if we need to wrap to next row\r\n          if (currentX + faceSize.width > textureSize[0]) {\r\n            currentX = 0;\r\n            currentY += rowHeight;\r\n            rowHeight = 0;\r\n          }\r\n\r\n          // Check if we're out of vertical space\r\n          if (currentY + faceSize.height > textureSize[1]) {\r\n            return true; // Texture is too small\r\n          }\r\n\r\n          currentX += faceSize.width;\r\n          rowHeight = Math.max(rowHeight, faceSize.height);\r\n        }\r\n      }\r\n    }\r\n\r\n    return false; // Texture size is sufficient\r\n  }\r\n\r\n  /**\r\n   * Convert an MCP model design to Minecraft geometry JSON format\r\n   */\r\n  static convertToGeometry(design: IMcpModelDesign): IModelDesignConversionResult {\r\n    const warnings: string[] = [];\r\n    const atlasRegions: IAtlasRegion[] = [];\r\n\r\n    // Ensure identifier has geometry. prefix\r\n    let identifier = design.identifier;\r\n    if (!identifier.startsWith(\"geometry.\")) {\r\n      identifier = `geometry.${identifier}`;\r\n    }\r\n\r\n    // First pass: calculate the required texture size by measuring unique faces\r\n    // (accounting for deduplication - identical content at same size only counts once)\r\n    let maxFaceWidth = 0;\r\n    let maxFaceHeight = 0;\r\n    const uniqueFaces = new Set<string>();\r\n    const pixelsPerUnit = this.getPixelsPerUnit(design);\r\n\r\n    for (const bone of design.bones) {\r\n      for (const cube of bone.cubes) {\r\n        for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n          const faceContent = cube.faces[faceName];\r\n          if (faceContent) {\r\n            const resolvedContent = this.resolveFaceContent(faceContent, design.textures, warnings);\r\n            if (!resolvedContent) {\r\n              continue;\r\n            }\r\n\r\n            const faceSize = this.getFaceTextureSize(cube.size, faceName, pixelsPerUnit);\r\n\r\n            // Check for deduplication\r\n            const contentHash = this.getContentHash(resolvedContent);\r\n            const dedupeKey = `${contentHash}|${faceSize.width}x${faceSize.height}`;\r\n\r\n            if (!uniqueFaces.has(dedupeKey)) {\r\n              uniqueFaces.add(dedupeKey);\r\n              maxFaceWidth = Math.max(maxFaceWidth, faceSize.width);\r\n              maxFaceHeight = Math.max(maxFaceHeight, faceSize.height);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Calculate optimal texture size based on actual content\r\n    // Start with the minimum power of 2 that can fit the largest single face\r\n    const minDimension = Math.max(maxFaceWidth, maxFaceHeight);\r\n    let optimalSize = Math.pow(2, Math.ceil(Math.log2(Math.max(16, minDimension))));\r\n\r\n    // Verify optimal size fits all faces, expand if needed\r\n    while (this._checkNeedsLargerTexture(design, [optimalSize, optimalSize]) && optimalSize < 4096) {\r\n      optimalSize = optimalSize * 2;\r\n    }\r\n\r\n    // Use optimal size if no textureSize specified, or if specified size is larger than optimal\r\n    // Only expand beyond optimal if the specified size is too small\r\n    let textureSize: [number, number];\r\n    if (design.textureSize) {\r\n      // If specified size is too small, expand to fit\r\n      if (this._checkNeedsLargerTexture(design, design.textureSize)) {\r\n        textureSize = [optimalSize, optimalSize];\r\n        warnings.push(\r\n          `Specified texture size ${design.textureSize[0]}x${design.textureSize[1]} was too small. ` +\r\n            `Auto-expanded to ${textureSize[0]}x${textureSize[1]}.`\r\n        );\r\n      } else {\r\n        // Use optimal size (smaller is better for efficiency, but respect user minimum)\r\n        textureSize = [\r\n          Math.min(design.textureSize[0], optimalSize) as number,\r\n          Math.min(design.textureSize[1], optimalSize) as number,\r\n        ] as [number, number];\r\n        // Re-verify the shrunk size works\r\n        while (this._checkNeedsLargerTexture(design, textureSize) && textureSize[0] < 4096) {\r\n          textureSize = [textureSize[0] * 2, textureSize[1] * 2];\r\n        }\r\n      }\r\n    } else {\r\n      textureSize = [optimalSize, optimalSize];\r\n    }\r\n\r\n    // Collect all face regions and calculate atlas layout\r\n    let currentX = 0;\r\n    let currentY = 0;\r\n    let rowHeight = 0;\r\n    const padding = 0; // No padding between faces for clean tiling\r\n\r\n    // Map for texture deduplication: contentHash+size -> atlas region index\r\n    // Only faces with identical content AND identical size can share a region\r\n    const textureDeduplicationMap = new Map<string, number>();\r\n\r\n    for (let boneIndex = 0; boneIndex < design.bones.length; boneIndex++) {\r\n      const bone = design.bones[boneIndex];\r\n      for (let cubeIndex = 0; cubeIndex < bone.cubes.length; cubeIndex++) {\r\n        const cube = bone.cubes[cubeIndex];\r\n        const faces = cube.faces;\r\n\r\n        for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n          const faceContent = faces[faceName];\r\n          if (!faceContent) {\r\n            continue; // Skip undefined faces\r\n          }\r\n\r\n          // Resolve texture references\r\n          const resolvedContent = this.resolveFaceContent(faceContent, design.textures, warnings);\r\n          if (!resolvedContent) {\r\n            continue; // No content to render\r\n          }\r\n\r\n          const faceSize = this.getFaceTextureSize(cube.size, faceName, pixelsPerUnit);\r\n\r\n          // Check for deduplication opportunity:\r\n          // Faces with identical content AND identical size can share a texture region\r\n          const contentHash = this.getContentHash(resolvedContent);\r\n          const dedupeKey = `${contentHash}|${faceSize.width}x${faceSize.height}`;\r\n          const existingRegionIndex = textureDeduplicationMap.get(dedupeKey);\r\n\r\n          // Generate context string for deterministic noise seeding\r\n          const contextString = `${bone.name}:cube${cubeIndex}:${faceName}`;\r\n\r\n          if (existingRegionIndex !== undefined) {\r\n            // Reuse existing atlas region - create a new region entry that points to same UV coordinates\r\n            const existingRegion = atlasRegions[existingRegionIndex];\r\n            atlasRegions.push({\r\n              x: existingRegion.x,\r\n              y: existingRegion.y,\r\n              width: faceSize.width,\r\n              height: faceSize.height,\r\n              content: {\r\n                // Store resolved content\r\n                color: resolvedContent.color,\r\n                svg: resolvedContent.svg,\r\n                noise: resolvedContent.noise,\r\n                background: resolvedContent.background,\r\n                pixelArt: resolvedContent.pixelArt,\r\n                effects: resolvedContent.effects,\r\n                rotation: resolvedContent.rotation,\r\n              },\r\n              faceName,\r\n              cubeIndex,\r\n              boneIndex,\r\n              contextString: existingRegion.contextString, // Reuse original context for consistent noise\r\n              isDuplicate: true, // Mark as duplicate to skip rendering in atlas SVG\r\n            });\r\n            continue;\r\n          }\r\n\r\n          // Check if we need to wrap to next row\r\n          if (currentX + faceSize.width > textureSize[0]) {\r\n            currentX = 0;\r\n            currentY += rowHeight + padding;\r\n            rowHeight = 0;\r\n          }\r\n\r\n          // Check if we're out of vertical space\r\n          if (currentY + faceSize.height > textureSize[1]) {\r\n            warnings.push(\r\n              `Texture atlas overflow: face ${faceName} of cube ${cubeIndex} in bone ${bone.name} ` +\r\n                `doesn't fit in ${textureSize[0]}x${textureSize[1]} texture. Consider increasing textureSize.`\r\n            );\r\n            continue;\r\n          }\r\n\r\n          // Store the region index for potential reuse\r\n          const regionIndex = atlasRegions.length;\r\n          textureDeduplicationMap.set(dedupeKey, regionIndex);\r\n\r\n          atlasRegions.push({\r\n            x: currentX,\r\n            y: currentY,\r\n            width: faceSize.width,\r\n            height: faceSize.height,\r\n            content: {\r\n              // Store resolved content (textureId has been looked up)\r\n              color: resolvedContent.color,\r\n              svg: resolvedContent.svg,\r\n              noise: resolvedContent.noise,\r\n              background: resolvedContent.background,\r\n              pixelArt: resolvedContent.pixelArt,\r\n              effects: resolvedContent.effects,\r\n              rotation: resolvedContent.rotation,\r\n            },\r\n            faceName,\r\n            cubeIndex,\r\n            boneIndex,\r\n            contextString,\r\n          });\r\n\r\n          currentX += faceSize.width + padding;\r\n          rowHeight = Math.max(rowHeight, faceSize.height);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Crop texture height to actual used content\r\n    // Width stays power-of-2 for compatibility, but height is cropped to save space\r\n    const actualUsedHeight = currentY + rowHeight;\r\n    if (actualUsedHeight > 0 && actualUsedHeight < textureSize[1]) {\r\n      textureSize = [textureSize[0], actualUsedHeight];\r\n    }\r\n\r\n    // Convert bones to geometry format\r\n    const geoBones: IGeometryBone[] = design.bones.map((bone, boneIndex) => {\r\n      const cubes: IGeometryBoneCube[] = bone.cubes.map((cube, cubeIndex) => {\r\n        // Build per-face UV from atlas regions\r\n        const uvFaces: IGeometryUVFaces = {};\r\n\r\n        for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n          const region = atlasRegions.find(\r\n            (r) => r.boneIndex === boneIndex && r.cubeIndex === cubeIndex && r.faceName === faceName\r\n          );\r\n\r\n          if (region) {\r\n            uvFaces[faceName] = {\r\n              uv: [region.x, region.y],\r\n              uv_size: [region.width, region.height],\r\n            };\r\n          }\r\n        }\r\n\r\n        const geoCube: IGeometryBoneCube = {\r\n          origin: cube.origin,\r\n          size: cube.size,\r\n          uv: uvFaces,\r\n        };\r\n\r\n        // Note: Cube-level pivot/rotation is NOT supported in the MCP schema.\r\n        // All rotation is done at the bone level for simplicity.\r\n        if (cube.inflate !== undefined) {\r\n          geoCube.inflate = cube.inflate;\r\n        }\r\n        if (cube.mirror !== undefined) {\r\n          geoCube.mirror = cube.mirror;\r\n        }\r\n\r\n        return geoCube;\r\n      });\r\n\r\n      const geoBone: IGeometryBone = {\r\n        name: bone.name,\r\n        pivot: bone.pivot || [0, 0, 0],\r\n        cubes,\r\n      };\r\n\r\n      if (bone.parent) {\r\n        geoBone.parent = bone.parent;\r\n      }\r\n      if (bone.rotation) {\r\n        geoBone.rotation = bone.rotation;\r\n      }\r\n\r\n      return geoBone;\r\n    });\r\n\r\n    // Auto-compute visible bounds from cube extents when not explicitly provided.\r\n    // The renderer uses visible_bounds_* to decide whether to draw the entity;\r\n    // a default of 1\u00D71 culls any model larger than ~1 block, making it invisible.\r\n    // Bedrock units are 16 per block, so we convert max(|extent|)/16 \u2192 blocks\r\n    // and add a small margin. This was a recurring \"invisible entity\" cause.\r\n    let computedBoundsWidth: number | undefined;\r\n    let computedBoundsHeight: number | undefined;\r\n    let computedBoundsOffsetY: number | undefined;\r\n    if (!design.visibleBoundsSize) {\r\n      let minX = Infinity,\r\n        maxX = -Infinity,\r\n        minY = Infinity,\r\n        maxY = -Infinity,\r\n        minZ = Infinity,\r\n        maxZ = -Infinity;\r\n      for (const bone of design.bones) {\r\n        for (const cube of bone.cubes) {\r\n          const [ox, oy, oz] = cube.origin;\r\n          const [sx, sy, sz] = cube.size;\r\n          minX = Math.min(minX, ox);\r\n          maxX = Math.max(maxX, ox + sx);\r\n          minY = Math.min(minY, oy);\r\n          maxY = Math.max(maxY, oy + sy);\r\n          minZ = Math.min(minZ, oz);\r\n          maxZ = Math.max(maxZ, oz + sz);\r\n        }\r\n      }\r\n      if (Number.isFinite(minX) && Number.isFinite(maxX)) {\r\n        const widthUnits = Math.max(maxX - minX, maxZ - minZ);\r\n        const heightUnits = maxY - minY;\r\n        // Convert from units (16 per block) to blocks; add 25% margin; round up to >=1.\r\n        computedBoundsWidth = Math.max(1, Math.ceil((widthUnits / 16) * 1.25));\r\n        computedBoundsHeight = Math.max(1, Math.ceil((heightUnits / 16) * 1.25));\r\n        computedBoundsOffsetY = (minY + maxY) / 2 / 16;\r\n      }\r\n    }\r\n\r\n    // Build the geometry object\r\n    const geometry: IGeometry = {\r\n      description: {\r\n        identifier,\r\n        texture_width: textureSize[0],\r\n        texture_height: textureSize[1],\r\n        visible_bounds_width: design.visibleBoundsSize ? design.visibleBoundsSize[0] : (computedBoundsWidth ?? 1),\r\n        visible_bounds_height: design.visibleBoundsSize ? design.visibleBoundsSize[1] : (computedBoundsHeight ?? 1),\r\n        visible_bounds_offset:\r\n          design.visibleBoundsOffset ||\r\n          (computedBoundsOffsetY !== undefined ? [0, computedBoundsOffsetY, 0] : [0, 0.5, 0]),\r\n      },\r\n      bones: geoBones,\r\n    };\r\n\r\n    const modelGeometry: IModelGeometry = {\r\n      format_version: \"1.12.0\",\r\n      \"minecraft:geometry\": [geometry],\r\n    };\r\n\r\n    return {\r\n      geometry: modelGeometry,\r\n      atlasRegions,\r\n      textureSize,\r\n      pixelsPerUnit,\r\n      warnings,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Generate SVG for a solid color face\r\n   */\r\n  static generateColorSvg(color: IMcpColorRGBA, width: number, height: number): string {\r\n    const hex = this.colorToHex(color);\r\n    const opacity = color.a !== undefined ? (color.a / 255).toFixed(2) : \"1\";\r\n\r\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">\r\n      <rect x=\"0\" y=\"0\" width=\"${width}\" height=\"${height}\" fill=\"${hex}\" fill-opacity=\"${opacity}\"/>\r\n    </svg>`;\r\n  }\r\n\r\n  /**\r\n   * Get the SVG content for a face, either from explicit SVG, noise, or generating from color.\r\n   *\r\n   * Priority order:\r\n   * 1. If noise is specified, generate noise background\r\n   * 2. If svg is specified, overlay it on top of noise (or use as primary if no noise)\r\n   * 3. If only color is specified, generate solid color\r\n   *\r\n   * @param content Face content configuration\r\n   * @param width Texture width in pixels\r\n   * @param height Texture height in pixels\r\n   * @param contextString Optional context for deterministic noise seeding\r\n   */\r\n  static getFaceSvg(content: IMcpFaceContent, width: number, height: number, contextString?: string): string {\r\n    // Handle modern background property first (takes priority)\r\n    if (content.background) {\r\n      const bgSvg = TexturedRectangleGenerator.generateTexturedRectangleSvg(\r\n        content.background,\r\n        width,\r\n        height,\r\n        contextString\r\n      );\r\n\r\n      // If there's also an SVG overlay, combine them\r\n      if (content.svg) {\r\n        let overlaySvg = content.svg;\r\n        if (!overlaySvg.includes(\"viewBox\")) {\r\n          overlaySvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">${overlaySvg}</svg>`;\r\n        }\r\n        return TexturedRectangleGenerator.combineWithOverlay(bgSvg, overlaySvg, width, height);\r\n      }\r\n\r\n      return bgSvg;\r\n    }\r\n\r\n    // Handle legacy noise texture\r\n    if (content.noise) {\r\n      const noiseSvg = TexturedRectangleGenerator.generateNoiseSvg(content.noise, width, height, contextString);\r\n\r\n      // If there's also an SVG overlay, combine them\r\n      if (content.svg) {\r\n        let overlaySvg = content.svg;\r\n        if (!overlaySvg.includes(\"viewBox\")) {\r\n          overlaySvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">${overlaySvg}</svg>`;\r\n        }\r\n        return TexturedRectangleGenerator.combineWithOverlay(noiseSvg, overlaySvg, width, height);\r\n      }\r\n\r\n      return noiseSvg;\r\n    }\r\n\r\n    // Handle explicit SVG\r\n    if (content.svg) {\r\n      // Return SVG as-is - generateAtlasSvg will handle scaling\r\n      return content.svg;\r\n    }\r\n\r\n    // Generate from color (legacy fallback)\r\n    const color = this.parseColor(content.color);\r\n    return this.generateColorSvg(color, width, height);\r\n  }\r\n\r\n  /**\r\n   * Generate a complete SVG document representing the texture atlas\r\n   * This can be rasterized to PNG using a rendering engine\r\n   */\r\n  static generateAtlasSvg(atlasRegions: IAtlasRegion[], textureSize: [number, number]): string {\r\n    const [width, height] = textureSize;\r\n\r\n    let svgContent = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" width=\"${width}\" height=\"${height}\">\r\n`;\r\n\r\n    for (const region of atlasRegions) {\r\n      // Skip duplicate regions - they share atlas space with another region\r\n      if (region.isDuplicate) {\r\n        continue;\r\n      }\r\n\r\n      // Pass context string for deterministic noise seeding\r\n      const faceSvg = this.getFaceSvg(region.content, region.width, region.height, region.contextString);\r\n\r\n      // Extract the original SVG's dimensions and content\r\n      const viewBoxMatch = faceSvg.match(/viewBox\\s*=\\s*[\"']([^\"']+)[\"']/i);\r\n      const widthMatch = faceSvg.match(/<svg[^>]*width\\s*=\\s*[\"']?(\\d+)/i);\r\n      const heightMatch = faceSvg.match(/<svg[^>]*height\\s*=\\s*[\"']?(\\d+)/i);\r\n\r\n      let originalWidth = region.width;\r\n      let originalHeight = region.height;\r\n\r\n      if (viewBoxMatch) {\r\n        const parts = viewBoxMatch[1].trim().split(/\\s+/);\r\n        if (parts.length >= 4) {\r\n          originalWidth = parseFloat(parts[2]) || region.width;\r\n          originalHeight = parseFloat(parts[3]) || region.height;\r\n        }\r\n      } else if (widthMatch && heightMatch) {\r\n        originalWidth = parseInt(widthMatch[1], 10) || region.width;\r\n        originalHeight = parseInt(heightMatch[1], 10) || region.height;\r\n      }\r\n\r\n      // Extract the inner content of the SVG (skip the outer svg tags)\r\n      let innerContent = faceSvg;\r\n      const svgMatch = faceSvg.match(/<svg[^>]*>([\\s\\S]*)<\\/svg>/i);\r\n      if (svgMatch) {\r\n        innerContent = svgMatch[1];\r\n      }\r\n\r\n      // Calculate scale factors to fit content into region\r\n      const scaleX = region.width / originalWidth;\r\n      const scaleY = region.height / originalHeight;\r\n\r\n      // Build transform: translate to position, then scale content to fit\r\n      let transform = `translate(${region.x}, ${region.y})`;\r\n      if (scaleX !== 1 || scaleY !== 1) {\r\n        transform += ` scale(${scaleX}, ${scaleY})`;\r\n      }\r\n\r\n      // Apply rotation if specified - rotation happens around the center of the original content\r\n      if (region.content.rotation) {\r\n        const cx = originalWidth / 2;\r\n        const cy = originalHeight / 2;\r\n        transform += ` rotate(${region.content.rotation}, ${cx}, ${cy})`;\r\n      }\r\n\r\n      // Use <g> with transform to position and scale the content directly\r\n      // This avoids nested <svg> elements which can have viewport issues\r\n      svgContent += `  <g transform=\"${transform}\">${innerContent}</g>\r\n`;\r\n    }\r\n\r\n    svgContent += `</svg>`;\r\n    return svgContent;\r\n  }\r\n\r\n  /**\r\n   * Check if an SVG string contains non-rect elements that are not Minecraft-style\r\n   * Returns array of warning messages about non-Minecraft-style SVG elements\r\n   */\r\n  private static validateSvgStyle(svg: string, context: string): string[] {\r\n    const warnings: string[] = [];\r\n\r\n    // Non-blocky elements that don't fit Minecraft's pixel art style\r\n    const nonBlockyPatterns = [\r\n      { pattern: /<circle/gi, name: \"circle\" },\r\n      { pattern: /<ellipse/gi, name: \"ellipse\" },\r\n      { pattern: /<path/gi, name: \"path\" },\r\n      { pattern: /<polygon/gi, name: \"polygon\" },\r\n      { pattern: /<polyline/gi, name: \"polyline\" },\r\n      { pattern: /<line[^a-z]/gi, name: \"line\" },\r\n      { pattern: /linearGradient/gi, name: \"linearGradient\" },\r\n      { pattern: /radialGradient/gi, name: \"radialGradient\" },\r\n      { pattern: /border-radius/gi, name: \"border-radius style\" },\r\n      { pattern: /rx\\s*=/gi, name: \"rounded corners (rx attribute)\" },\r\n      { pattern: /ry\\s*=/gi, name: \"rounded corners (ry attribute)\" },\r\n    ];\r\n\r\n    for (const { pattern, name } of nonBlockyPatterns) {\r\n      if (pattern.test(svg)) {\r\n        warnings.push(\r\n          `WARNING: ${context} uses <${name}> which creates non-blocky shapes. ` +\r\n            `For authentic Minecraft style, use only <rect> elements to create pixel-art textures.`\r\n        );\r\n      }\r\n    }\r\n\r\n    return warnings;\r\n  }\r\n\r\n  /**\r\n   * Validate pixel art configuration and return any errors or warnings.\r\n   * Returns array of error/warning messages about invalid pixel art\r\n   */\r\n  private static validatePixelArt(pixelArtLayers: IMcpPixelArt[], context: string): string[] {\r\n    const errors: string[] = [];\r\n\r\n    for (let i = 0; i < pixelArtLayers.length; i++) {\r\n      const layer = pixelArtLayers[i];\r\n      const layerContext = pixelArtLayers.length > 1 ? `${context} pixelArt[${i}]` : `${context} pixelArt`;\r\n\r\n      // Validate lines\r\n      if (!layer.lines || !Array.isArray(layer.lines)) {\r\n        errors.push(`${layerContext} must have a 'lines' array`);\r\n        continue;\r\n      }\r\n\r\n      if (layer.lines.length === 0) {\r\n        errors.push(`${layerContext} has empty 'lines' array`);\r\n        continue;\r\n      }\r\n\r\n      // Validate palette\r\n      if (!layer.palette || typeof layer.palette !== \"object\") {\r\n        errors.push(`${layerContext} must have a 'palette' object`);\r\n        continue;\r\n      }\r\n\r\n      // Check for space in palette (reserved for transparent)\r\n      if (\" \" in layer.palette) {\r\n        errors.push(`${layerContext} palette should not define ' ' (space) - it is reserved for transparency`);\r\n      }\r\n\r\n      // Collect all characters used in lines\r\n      const usedChars = new Set<string>();\r\n      for (const line of layer.lines) {\r\n        if (typeof line !== \"string\") {\r\n          errors.push(`${layerContext} has non-string line: ${JSON.stringify(line)}`);\r\n          continue;\r\n        }\r\n        for (const char of line) {\r\n          if (char !== \" \") {\r\n            usedChars.add(char);\r\n          }\r\n        }\r\n      }\r\n\r\n      // Check for missing palette entries\r\n      const missingChars: string[] = [];\r\n      for (const char of usedChars) {\r\n        if (!(char in layer.palette)) {\r\n          missingChars.push(char);\r\n        }\r\n      }\r\n      if (missingChars.length > 0) {\r\n        errors.push(`${layerContext} uses characters not in palette: \"${missingChars.join('\", \"')}\"`);\r\n      }\r\n\r\n      // Warn about unused palette entries\r\n      const paletteKeys = Object.keys(layer.palette).filter((k) => k !== \" \");\r\n      const unusedChars = paletteKeys.filter((k) => !usedChars.has(k));\r\n      if (unusedChars.length > 0) {\r\n        errors.push(`WARNING: ${layerContext} palette has unused colors: \"${unusedChars.join('\", \"')}\"`);\r\n      }\r\n\r\n      // Validate color values\r\n      for (const [char, color] of Object.entries(layer.palette)) {\r\n        if (char === \" \") continue;\r\n\r\n        if (!color || typeof color !== \"object\") {\r\n          errors.push(`${layerContext} palette entry \"${char}\" must be a color object`);\r\n          continue;\r\n        }\r\n\r\n        // Check hex or rgb values\r\n        if (!color.hex && (color.r === undefined || color.g === undefined || color.b === undefined)) {\r\n          errors.push(`${layerContext} palette entry \"${char}\" must have either 'hex' or 'r', 'g', 'b' values`);\r\n        }\r\n\r\n        // Validate RGB ranges\r\n        if (color.r !== undefined && (color.r < 0 || color.r > 255)) {\r\n          errors.push(`${layerContext} palette entry \"${char}\" has invalid 'r' value (must be 0-255)`);\r\n        }\r\n        if (color.g !== undefined && (color.g < 0 || color.g > 255)) {\r\n          errors.push(`${layerContext} palette entry \"${char}\" has invalid 'g' value (must be 0-255)`);\r\n        }\r\n        if (color.b !== undefined && (color.b < 0 || color.b > 255)) {\r\n          errors.push(`${layerContext} palette entry \"${char}\" has invalid 'b' value (must be 0-255)`);\r\n        }\r\n        if (color.a !== undefined && (color.a < 0 || color.a > 255)) {\r\n          errors.push(`${layerContext} palette entry \"${char}\" has invalid 'a' value (must be 0-255)`);\r\n        }\r\n      }\r\n    }\r\n\r\n    return errors;\r\n  }\r\n\r\n  /**\r\n   * Validate an MCP model design and return any errors or warnings.\r\n   * Errors are blocking issues that prevent model generation.\r\n   * Warnings (prefixed with \"WARNING:\") are style suggestions for better Minecraft compatibility.\r\n   */\r\n  static validateDesign(design: IMcpModelDesign): string[] {\r\n    const errors: string[] = [];\r\n\r\n    if (!design.identifier) {\r\n      errors.push(\"Model design must have an identifier\");\r\n    }\r\n\r\n    if (!design.bones || design.bones.length === 0) {\r\n      errors.push(\"Model design must have at least one bone\");\r\n    }\r\n\r\n    for (let i = 0; i < (design.bones || []).length; i++) {\r\n      const bone = design.bones[i];\r\n      if (!bone.name) {\r\n        errors.push(`Bone at index ${i} must have a name`);\r\n      }\r\n      // Note: Empty cubes arrays are allowed - bones can serve as parent/pivot bones\r\n      // for hierarchy organization without having geometry themselves\r\n\r\n      for (let j = 0; j < (bone.cubes || []).length; j++) {\r\n        const cube = bone.cubes[j];\r\n        if (!cube.origin || cube.origin.length !== 3) {\r\n          errors.push(`Cube ${j} in bone \"${bone.name}\" must have a valid origin [x, y, z]`);\r\n        }\r\n        if (!cube.size || cube.size.length !== 3) {\r\n          errors.push(`Cube ${j} in bone \"${bone.name}\" must have a valid size [w, h, d]`);\r\n        }\r\n        if (!cube.faces) {\r\n          errors.push(`Cube ${j} in bone \"${bone.name}\" must have a faces object`);\r\n        }\r\n\r\n        // Validate texture references and check SVG style\r\n        if (cube.faces) {\r\n          for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n            const face = cube.faces[faceName];\r\n            if (face?.textureId) {\r\n              if (!design.textures) {\r\n                errors.push(\r\n                  `Face \"${faceName}\" on cube ${j} in bone \"${bone.name}\" references textureId \"${face.textureId}\" ` +\r\n                    `but no textures dictionary is defined in the model.`\r\n                );\r\n              } else if (!design.textures[face.textureId]) {\r\n                errors.push(\r\n                  `Face \"${faceName}\" on cube ${j} in bone \"${bone.name}\" references textureId \"${face.textureId}\" ` +\r\n                    `which is not defined in the textures dictionary.`\r\n                );\r\n              }\r\n            }\r\n            // Check inline SVG for non-Minecraft style elements\r\n            if (face?.svg) {\r\n              const svgWarnings = this.validateSvgStyle(\r\n                face.svg,\r\n                `Face \"${faceName}\" on cube ${j} in bone \"${bone.name}\"`\r\n              );\r\n              errors.push(...svgWarnings);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Validate texture definitions and check SVG style\r\n    if (design.textures) {\r\n      for (const [textureId, textureDef] of Object.entries(design.textures)) {\r\n        if (\r\n          !textureDef.svg &&\r\n          !textureDef.color &&\r\n          !textureDef.noise &&\r\n          !textureDef.background &&\r\n          !textureDef.pixelArt\r\n        ) {\r\n          errors.push(`Texture \"${textureId}\" must have either a background, noise, svg, color, or pixelArt property.`);\r\n        }\r\n        // Check texture SVG for non-Minecraft style elements\r\n        if (textureDef.svg) {\r\n          const svgWarnings = this.validateSvgStyle(textureDef.svg, `Texture \"${textureId}\"`);\r\n          errors.push(...svgWarnings);\r\n        }\r\n        // Validate pixel art\r\n        if (textureDef.pixelArt) {\r\n          const pixelArtErrors = this.validatePixelArt(textureDef.pixelArt, `Texture \"${textureId}\"`);\r\n          errors.push(...pixelArtErrors);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Validate inline pixelArt on faces\r\n    for (let i = 0; i < (design.bones || []).length; i++) {\r\n      const bone = design.bones[i];\r\n      for (let j = 0; j < (bone.cubes || []).length; j++) {\r\n        const cube = bone.cubes[j];\r\n        if (cube.faces) {\r\n          for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n            const face = cube.faces[faceName];\r\n            if (face?.pixelArt) {\r\n              const pixelArtErrors = this.validatePixelArt(\r\n                face.pixelArt,\r\n                `Face \"${faceName}\" on cube ${j} in bone \"${bone.name}\"`\r\n              );\r\n              errors.push(...pixelArtErrors);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Validate model size - warn if too small or too large for Minecraft\r\n    if (design.bones && design.bones.length > 0) {\r\n      const bounds = this.calculateModelBounds(design);\r\n      const height = bounds.maxY - bounds.minY;\r\n      const width = bounds.maxX - bounds.minX;\r\n      const depth = bounds.maxZ - bounds.minZ;\r\n\r\n      if (bounds.maxDimension < 0.5) {\r\n        errors.push(\r\n          `WARNING: Model is very small (max dimension: ${bounds.maxDimension.toFixed(2)} units). ` +\r\n            `Most Minecraft entities are 16-48 units tall (1-3 blocks). Consider scaling up for visibility.`\r\n        );\r\n      } else if (bounds.maxDimension > 800) {\r\n        errors.push(\r\n          `WARNING: Model is very large (max dimension: ${bounds.maxDimension.toFixed(2)} units, ~${(bounds.maxDimension / 16).toFixed(1)} blocks). ` +\r\n            `This exceeds Minecraft's typical entity rendering limits. Consider scaling down unless creating a mega-structure.`\r\n        );\r\n      }\r\n\r\n      // Warn about flat models that might not render well\r\n      if (height < 0.1 && (width > 1 || depth > 1)) {\r\n        errors.push(\r\n          `WARNING: Model appears very flat (height: ${height.toFixed(2)} units). ` +\r\n            `Minecraft mobs typically have 3D volume. Consider adding height.`\r\n        );\r\n      }\r\n    }\r\n\r\n    return errors;\r\n  }\r\n\r\n  /**\r\n   * Create a simple unit cube model design (for testing)\r\n   */\r\n  static createUnitCubeDesign(\r\n    identifier: string,\r\n    faceColors: {\r\n      north?: string;\r\n      south?: string;\r\n      east?: string;\r\n      west?: string;\r\n      up?: string;\r\n      down?: string;\r\n    }\r\n  ): IMcpModelDesign {\r\n    return {\r\n      formatVersion: \"1.0.0\",\r\n      identifier,\r\n      textureSize: [64, 64],\r\n      bones: [\r\n        {\r\n          name: \"body\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-8, 0, -8],\r\n              size: [16, 16, 16],\r\n              faces: {\r\n                north: faceColors.north ? { color: faceColors.north } : undefined,\r\n                south: faceColors.south ? { color: faceColors.south } : undefined,\r\n                east: faceColors.east ? { color: faceColors.east } : undefined,\r\n                west: faceColors.west ? { color: faceColors.west } : undefined,\r\n                up: faceColors.up ? { color: faceColors.up } : undefined,\r\n                down: faceColors.down ? { color: faceColors.down } : undefined,\r\n              },\r\n            },\r\n          ],\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ModelDesignTemplates\r\n *\r\n * Provides starter model templates for common Minecraft entity types.\r\n * These templates use Minecraft's native coordinate system: 16 units = 1 block.\r\n * All origin, size, and pivot values are in Minecraft pixel units.\r\n *\r\n * ARCHITECTURE:\r\n * - Templates are stored as JSON files in `public/data/model_templates/`\r\n * - Use `getModelTemplateAsync()` to load templates dynamically (required)\r\n * - Templates are cached after first load for performance\r\n *\r\n * REFACTORING NOTE (2024):\r\n * Templates were moved from bundled TypeScript to external JSON files to reduce\r\n * bundle size (~4000 lines / 170KB removed). All consumers should use async loading.\r\n * The JSON files are located in `public/data/model_templates/{type}.model.json`.\r\n */\r\n\r\nimport { IMcpModelDesign } from \"./IMcpModelDesign\";\r\nimport Database from \"./Database\";\r\n\r\n/**\r\n * Available model template types. These correspond to JSON files in\r\n * `public/data/model_templates/{type}.model.json`\r\n */\r\nexport type ModelTemplateType =\r\n  | \"humanoid\"\r\n  | \"small_animal\"\r\n  | \"large_animal\"\r\n  | \"vehicle\"\r\n  | \"block\"\r\n  | \"item\"\r\n  | \"bird\"\r\n  | \"insect\"\r\n  | \"flying\"\r\n  | \"fish\"\r\n  | \"slime\"\r\n  | \"wizard\"\r\n  | \"golem\"\r\n  | \"fox\"\r\n  | \"crystal\"\r\n  | \"enchanted_sword\"\r\n  | \"tropical_fish\"\r\n  | \"ghost\"\r\n  | \"robot\"\r\n  | \"mushroom_creature\"\r\n  | \"treasure_chest\"\r\n  // Block templates\r\n  | \"stone_brick\"\r\n  | \"wooden_crate\"\r\n  | \"glowing_ore\"\r\n  | \"mossy_stone\"\r\n  | \"crystal_block\"\r\n  | \"tech_block\"\r\n  // Item templates\r\n  | \"potion_bottle\"\r\n  | \"magic_wand\"\r\n  | \"ornate_key\"\r\n  | \"gemstone\"\r\n  | \"apple\"\r\n  | \"pickaxe\";\r\n\r\n/**\r\n * List of all available template types for iteration and validation.\r\n */\r\nconst ALL_TEMPLATE_TYPES: ModelTemplateType[] = [\r\n  \"humanoid\",\r\n  \"small_animal\",\r\n  \"large_animal\",\r\n  \"vehicle\",\r\n  \"block\",\r\n  \"item\",\r\n  \"bird\",\r\n  \"insect\",\r\n  \"flying\",\r\n  \"fish\",\r\n  \"slime\",\r\n  \"wizard\",\r\n  \"golem\",\r\n  \"fox\",\r\n  \"crystal\",\r\n  \"enchanted_sword\",\r\n  \"tropical_fish\",\r\n  \"ghost\",\r\n  \"robot\",\r\n  \"mushroom_creature\",\r\n  \"treasure_chest\",\r\n  \"stone_brick\",\r\n  \"wooden_crate\",\r\n  \"glowing_ore\",\r\n  \"mossy_stone\",\r\n  \"crystal_block\",\r\n  \"tech_block\",\r\n  \"potion_bottle\",\r\n  \"magic_wand\",\r\n  \"ornate_key\",\r\n  \"gemstone\",\r\n  \"apple\",\r\n  \"pickaxe\",\r\n];\r\n\r\n/**\r\n * Runtime cache for templates loaded from JSON files.\r\n * Populated lazily as templates are requested via getModelTemplateAsync().\r\n * @internal\r\n */\r\nconst templateCache: Record<string, IMcpModelDesign> = {};\r\n\r\n/**\r\n * Get a model template by type (async, loads from JSON file)\r\n * This is the preferred method for loading templates.\r\n * Templates are cached after first load.\r\n *\r\n * @param templateType The type of template to retrieve\r\n * @returns Promise resolving to the template design, or undefined if not found\r\n */\r\nexport async function getModelTemplateAsync(templateType: ModelTemplateType): Promise<IMcpModelDesign | undefined> {\r\n  // Check cache first\r\n  if (templateCache[templateType]) {\r\n    return templateCache[templateType];\r\n  }\r\n\r\n  // Load from JSON file\r\n  const loaded = await Database.ensureModelTemplateLoaded(templateType);\r\n  if (loaded) {\r\n    // Cache for future access\r\n    templateCache[templateType] = loaded as IMcpModelDesign;\r\n    return loaded as IMcpModelDesign;\r\n  }\r\n\r\n  return undefined;\r\n}\r\n\r\n/**\r\n * Get a model template by type (synchronous, uses cached templates only)\r\n * NOTE: This only returns templates that have already been loaded via getModelTemplateAsync().\r\n * For reliable access, use getModelTemplateAsync() instead.\r\n *\r\n * @deprecated Prefer getModelTemplateAsync() for reliable template access\r\n * @param templateType The type of template to retrieve\r\n * @returns The template design if cached, or undefined if not loaded yet\r\n */\r\nexport function getModelTemplate(templateType: ModelTemplateType): IMcpModelDesign | undefined {\r\n  return templateCache[templateType];\r\n}\r\n\r\n/**\r\n * Get all available template types (synchronous)\r\n * @returns Array of available template type names\r\n */\r\nexport function getAvailableTemplateTypes(): ModelTemplateType[] {\r\n  return [...ALL_TEMPLATE_TYPES];\r\n}\r\n\r\n/**\r\n * Get all available template types from JSON files (async)\r\n * This queries the actual JSON files available in the data folder.\r\n * @returns Promise resolving to array of available template type names\r\n */\r\nexport async function getAvailableTemplateTypesAsync(): Promise<string[]> {\r\n  return await Database.getModelTemplateNames();\r\n}\r\n\r\n/**\r\n * Check if a template type is valid\r\n * @param templateType The template type to check\r\n * @returns True if the template type is valid\r\n */\r\nexport function isValidTemplateType(templateType: string): templateType is ModelTemplateType {\r\n  return ALL_TEMPLATE_TYPES.includes(templateType as ModelTemplateType);\r\n}\r\n\r\n/**\r\n * Preload all templates into cache (async)\r\n * Call this once at startup if you need synchronous access to all templates later.\r\n * @returns Promise resolving when all templates are loaded\r\n */\r\nexport async function preloadAllTemplates(): Promise<void> {\r\n  const loadPromises = ALL_TEMPLATE_TYPES.map((type) => getModelTemplateAsync(type));\r\n  await Promise.all(loadPromises);\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ContentGenerator - Generates native Minecraft Bedrock content from meta-schema definitions.\r\n *\r\n * This module converts simplified IMinecraftContentDefinition objects into the full\r\n * set of Minecraft files (behavior pack JSONs, resource pack JSONs, textures, etc.).\r\n *\r\n * Key responsibilities:\r\n * 1. Expand traits into native components\r\n * 2. Generate placeholder textures using IMcpTexturedRectangle\r\n * 3. Create proper file structure with format_version\r\n * 4. Handle cross-references between files\r\n * 5. Generate loot tables from drops definitions\r\n *\r\n * @see IContentMetaSchema.ts for type definitions\r\n * @see ContentMetaSchemaZod.ts for validation schemas\r\n */\r\n\r\nimport {\r\n  IMinecraftContentDefinition,\r\n  IEntityTypeDefinition,\r\n  IBlockTypeDefinition,\r\n  IItemTypeDefinition,\r\n  IStructureDefinition,\r\n  IFeatureDefinition,\r\n  ILootTableDefinition,\r\n  IRecipeDefinition,\r\n  ISpawnRuleDefinition,\r\n  EntityTraitId,\r\n  BlockTraitId,\r\n  ItemTraitId,\r\n  IDropDefinition,\r\n  ISpawnConfig,\r\n  EntityBehaviorPreset,\r\n  IGenerationOptions,\r\n  ITextureSpec,\r\n  IBlockTexture,\r\n} from \"./IContentMetaSchema\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport ImageCodec from \"../core/ImageCodec\";\r\nimport PngEncoder from \"./PngEncoder\";\r\nimport { generateItemTextureFromTemplate } from \"./ItemTextureTemplates\";\r\nimport { TraitRegistry, registerAllEntityTraits, registerAllBlockTraits, registerAllItemTraits } from \"./traits\";\r\nimport ModelDesignUtilities from \"./ModelDesignUtilities\";\r\nimport TexturedRectangleGenerator from \"./TexturedRectangleGenerator\";\r\nimport { applyTextureEffects } from \"./TextureEffects\";\r\nimport { getModelTemplateAsync, ModelTemplateType } from \"./ModelDesignTemplates\";\r\nimport { IMcpModelDesign, IMcpTextureDefinition } from \"./IMcpModelDesign\";\r\n\r\n// Initialize trait registry on module load\r\nlet traitsInitialized = false;\r\nfunction ensureTraitsInitialized(): void {\r\n  if (!traitsInitialized) {\r\n    registerAllEntityTraits();\r\n    registerAllBlockTraits();\r\n    registerAllItemTraits();\r\n    traitsInitialized = true;\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// GENERATED FILE TYPES\r\n// ============================================================================\r\n\r\ninterface ILootFunction {\r\n  function: string;\r\n  count: number | { min: number; max: number };\r\n}\r\n\r\ninterface ILootCondition {\r\n  condition: string;\r\n  chance?: number;\r\n}\r\n\r\n/**\r\n * Result of content generation - all files to be created.\r\n */\r\nexport interface IGeneratedContent {\r\n  /** Manifest for behavior pack */\r\n  behaviorPackManifest?: IGeneratedFile;\r\n\r\n  /** Manifest for resource pack */\r\n  resourcePackManifest?: IGeneratedFile;\r\n\r\n  /** Entity behavior files (behavior_packs/entities/) */\r\n  entityBehaviors: IGeneratedFile[];\r\n\r\n  /** Entity resource files (resource_packs/entity/) */\r\n  entityResources: IGeneratedFile[];\r\n\r\n  /** Block behavior files */\r\n  blockBehaviors: IGeneratedFile[];\r\n\r\n  /** Block resource files */\r\n  blockResources: IGeneratedFile[];\r\n\r\n  /** Item behavior files */\r\n  itemBehaviors: IGeneratedFile[];\r\n\r\n  /** Item resource files */\r\n  itemResources: IGeneratedFile[];\r\n\r\n  /** Structure files (.mcstructure) */\r\n  structures: IGeneratedFile[];\r\n\r\n  /** Feature files */\r\n  features: IGeneratedFile[];\r\n\r\n  /** Feature rule files */\r\n  featureRules: IGeneratedFile[];\r\n\r\n  /** Loot table files */\r\n  lootTables: IGeneratedFile[];\r\n\r\n  /** Recipe files */\r\n  recipes: IGeneratedFile[];\r\n\r\n  /** Spawn rule files */\r\n  spawnRules: IGeneratedFile[];\r\n\r\n  /** Texture files (as base64 PNG) */\r\n  textures: IGeneratedFile[];\r\n\r\n  /** Geometry files */\r\n  geometries: IGeneratedFile[];\r\n\r\n  /** Render controller files */\r\n  renderControllers: IGeneratedFile[];\r\n\r\n  /** Sound definition files */\r\n  sounds: IGeneratedFile[];\r\n\r\n  /** terrain_texture.json entries */\r\n  terrainTextures?: IGeneratedFile;\r\n\r\n  /** item_texture.json entries */\r\n  itemTextures?: IGeneratedFile;\r\n\r\n  /** blocks.json resource pack catalog (singleton, should be merged across calls) */\r\n  blocksCatalog?: IGeneratedFile;\r\n\r\n  /** sound_definitions.json (singleton, should be merged across calls) */\r\n  soundDefinitions?: IGeneratedFile;\r\n\r\n  /** music_definitions.json (singleton, should be merged across calls) */\r\n  musicDefinitions?: IGeneratedFile;\r\n\r\n  /** Summary of what was generated */\r\n  summary: IGenerationSummary;\r\n}\r\n\r\n/**\r\n * A single generated file.\r\n */\r\nexport interface IGeneratedFile {\r\n  /** Relative path within the pack (e.g., \"entities/orc.json\") */\r\n  path: string;\r\n\r\n  /** Content - JSON object, string for text, or Uint8Array for binary */\r\n  content: object | string | Uint8Array;\r\n\r\n  /** Content type */\r\n  type: \"json\" | \"png\" | \"mcstructure\" | \"text\";\r\n\r\n  /** Which pack this belongs to */\r\n  pack: \"behavior\" | \"resource\" | \"world\" | \"none\";\r\n}\r\n\r\n/**\r\n * Summary of generation results.\r\n */\r\nexport interface IGenerationSummary {\r\n  namespace: string;\r\n  entityCount: number;\r\n  blockCount: number;\r\n  itemCount: number;\r\n  structureCount: number;\r\n  featureCount: number;\r\n  lootTableCount: number;\r\n  recipeCount: number;\r\n  spawnRuleCount: number;\r\n  textureCount: number;\r\n  warnings: string[];\r\n  errors: string[];\r\n}\r\n\r\n// ============================================================================\r\n// TRAIT EXPANSION\r\n// ============================================================================\r\n\r\n/**\r\n * Trait definitions - maps trait IDs to native Minecraft components.\r\n */\r\nconst ENTITY_TRAIT_COMPONENTS: Record<EntityTraitId, Record<string, any>> = {\r\n  // Body types (primarily affect geometry/animation, but also some components)\r\n  humanoid: {\r\n    \"minecraft:can_climb\": {},\r\n    \"minecraft:jump.static\": {},\r\n  },\r\n  quadruped: {\r\n    \"minecraft:can_climb\": {},\r\n    \"minecraft:jump.static\": {},\r\n  },\r\n  quadruped_small: {\r\n    \"minecraft:can_climb\": {},\r\n    \"minecraft:jump.static\": {},\r\n  },\r\n  flying: {\r\n    \"minecraft:navigation.fly\": {\r\n      can_path_over_water: true,\r\n      can_path_over_lava: false,\r\n    },\r\n    \"minecraft:can_fly\": {},\r\n  },\r\n  aquatic: {\r\n    \"minecraft:navigation.swim\": {\r\n      can_path_over_water: false,\r\n      can_swim: true,\r\n    },\r\n    \"minecraft:underwater_movement\": { value: 0.3 },\r\n    \"minecraft:breathable\": {\r\n      total_supply: 15,\r\n      suffocate_time: 0,\r\n      breathes_water: true,\r\n      breathes_air: false,\r\n    },\r\n  },\r\n  arthropod: {\r\n    \"minecraft:can_climb\": {},\r\n    \"minecraft:mark_variant\": { value: 0 },\r\n  },\r\n  slime: {\r\n    \"minecraft:movement.sway\": { sway_amplitude: 0.0 },\r\n  },\r\n\r\n  // Behavior archetypes\r\n  hostile: {\r\n    \"minecraft:behavior.hurt_by_target\": { priority: 1 },\r\n    \"minecraft:behavior.nearest_attackable_target\": {\r\n      priority: 2,\r\n      entity_types: [{ filters: { test: \"is_family\", subject: \"other\", value: \"player\" } }],\r\n    },\r\n    \"minecraft:attack\": { damage: 3 },\r\n  },\r\n  passive: {\r\n    \"minecraft:behavior.panic\": {\r\n      priority: 1,\r\n      speed_multiplier: 1.25,\r\n    },\r\n  },\r\n  neutral: {\r\n    \"minecraft:behavior.hurt_by_target\": {\r\n      priority: 1,\r\n      alert_same_type: true,\r\n    },\r\n  },\r\n  boss: {\r\n    \"minecraft:boss\": {\r\n      should_darken_sky: true,\r\n      hud_range: 55,\r\n    },\r\n  },\r\n\r\n  // Combat styles\r\n  melee_attacker: {\r\n    \"minecraft:behavior.melee_attack\": {\r\n      priority: 3,\r\n      speed_multiplier: 1.2,\r\n      track_target: true,\r\n    },\r\n    \"minecraft:attack\": { damage: 3 },\r\n  },\r\n  ranged_attacker: {\r\n    \"minecraft:behavior.ranged_attack\": {\r\n      priority: 3,\r\n      attack_interval_min: 1.0,\r\n      attack_interval_max: 3.0,\r\n      attack_radius: 15.0,\r\n    },\r\n    \"minecraft:shooter\": {\r\n      def: \"minecraft:arrow\",\r\n    },\r\n  },\r\n  exploder: {\r\n    \"minecraft:explode\": {\r\n      fuse_length: 1.5,\r\n      fuse_lit: false,\r\n      power: 3,\r\n      causes_fire: false,\r\n    },\r\n  },\r\n\r\n  // Interaction\r\n  trader: {\r\n    \"minecraft:trade_table\": {},\r\n    \"minecraft:behavior.trade_with_player\": { priority: 1 },\r\n  },\r\n  tameable: {\r\n    \"minecraft:tameable\": {\r\n      probability: 0.33,\r\n      tame_items: [\"bone\"],\r\n    },\r\n    \"minecraft:is_tamed\": {},\r\n  },\r\n  rideable: {\r\n    \"minecraft:rideable\": {\r\n      seat_count: 1,\r\n      family_types: [\"player\"],\r\n      interact_text: \"action.interact.ride.horse\",\r\n      seats: [{ position: [0.0, 1.1, -0.2] }],\r\n    },\r\n    \"minecraft:input_ground_controlled\": {},\r\n  },\r\n  breedable: {\r\n    \"minecraft:breedable\": {\r\n      require_tame: false,\r\n      breed_items: [\"wheat\"],\r\n      breeds_with: { mate_type: \"self\", baby_type: \"self\" },\r\n    },\r\n    \"minecraft:behavior.breed\": { priority: 3, speed_multiplier: 1.0 },\r\n  },\r\n  leasable: {\r\n    \"minecraft:leashable\": {\r\n      soft_distance: 4.0,\r\n      hard_distance: 6.0,\r\n      max_distance: 10.0,\r\n    },\r\n  },\r\n\r\n  // Special traits\r\n  undead: {\r\n    \"minecraft:burns_in_daylight\": {},\r\n    \"minecraft:type_family\": { family: [\"undead\", \"monster\"] },\r\n  },\r\n  illager: {\r\n    \"minecraft:type_family\": { family: [\"illager\", \"monster\"] },\r\n    \"minecraft:behavior.raid_garden\": { priority: 5 },\r\n  },\r\n  aquatic_only: {\r\n    \"minecraft:breathable\": {\r\n      total_supply: 15,\r\n      suffocate_time: -1,\r\n      breathes_water: true,\r\n      breathes_air: false,\r\n      generates_bubbles: false,\r\n    },\r\n  },\r\n  baby_variant: {\r\n    \"minecraft:is_baby\": {},\r\n    \"minecraft:scale\": { value: 0.5 },\r\n    \"minecraft:ageable\": {\r\n      duration: 1200,\r\n      grow_up: { event: \"minecraft:ageable_grow_up\" },\r\n    },\r\n  },\r\n  wanders: {\r\n    \"minecraft:behavior.random_stroll\": { priority: 6, speed_multiplier: 1.0 },\r\n    \"minecraft:behavior.random_look_around\": { priority: 7 },\r\n  },\r\n  patrols: {\r\n    \"minecraft:behavior.move_to_poi\": { priority: 3, speed_multiplier: 0.6 },\r\n  },\r\n  guards: {\r\n    \"minecraft:behavior.defend_village_target\": { priority: 1 },\r\n  },\r\n  flees_daylight: {\r\n    \"minecraft:behavior.flee_sun\": { priority: 2, speed_multiplier: 1.0 },\r\n  },\r\n  teleporter: {\r\n    \"minecraft:teleport\": {\r\n      random_teleports: true,\r\n      max_random_teleport_time: 30,\r\n      random_teleport_cube: [32, 16, 32],\r\n      target_distance: 16,\r\n      target_teleport_chance: 0.05,\r\n    },\r\n  },\r\n};\r\n\r\n/**\r\n * Block trait components.\r\n */\r\nconst BLOCK_TRAIT_COMPONENTS: Record<BlockTraitId, Record<string, any>> = {\r\n  solid: {},\r\n  transparent: {\r\n    \"minecraft:material_instances\": {\r\n      \"*\": { render_method: \"blend\" },\r\n    },\r\n  },\r\n  leaves: {\r\n    \"minecraft:material_instances\": {\r\n      \"*\": { render_method: \"alpha_test\" },\r\n    },\r\n    \"minecraft:destructible_by_mining\": { seconds_to_destroy: 0.2 },\r\n  },\r\n  log: {\r\n    \"minecraft:destructible_by_mining\": { seconds_to_destroy: 2.0 },\r\n    \"minecraft:flammable\": { catch_chance_modifier: 5, destroy_chance_modifier: 5 },\r\n  },\r\n  slab: {\r\n    \"minecraft:geometry\": \"minecraft:geometry.slab\",\r\n  },\r\n  stairs: {\r\n    \"minecraft:geometry\": \"minecraft:geometry.stairs\",\r\n  },\r\n  fence: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.fence\" },\r\n  },\r\n  wall: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.wall\" },\r\n  },\r\n  door: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.door\" },\r\n    \"minecraft:on_interact\": {\r\n      event: \"toggle_open\",\r\n    },\r\n  },\r\n  trapdoor: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.trapdoor\" },\r\n    \"minecraft:on_interact\": {\r\n      event: \"toggle_open\",\r\n    },\r\n  },\r\n  workstation: {},\r\n  light_source: {\r\n    \"minecraft:light_emission\": 15,\r\n  },\r\n  gravity: {\r\n    \"minecraft:gravity\": {},\r\n  },\r\n  liquid: {\r\n    \"minecraft:material_instances\": {\r\n      \"*\": { render_method: \"blend\" },\r\n    },\r\n  },\r\n  redstone_signal: {\r\n    \"minecraft:redstone_conductivity\": {\r\n      redstone_conductor: true,\r\n      allows_wire_to_step_down: true,\r\n    },\r\n  },\r\n  redstone_receiver: {\r\n    \"minecraft:redstone_conductivity\": {\r\n      redstone_conductor: true,\r\n    },\r\n  },\r\n  button: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.button\" },\r\n  },\r\n  lever: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.lever\" },\r\n  },\r\n  pressure_plate: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.pressure_plate\" },\r\n  },\r\n  flammable: {\r\n    \"minecraft:flammable\": { catch_chance_modifier: 5, destroy_chance_modifier: 20 },\r\n  },\r\n  explosion_resistant: {\r\n    \"minecraft:destructible_by_explosion\": { explosion_resistance: 1200 },\r\n  },\r\n  slippery: {\r\n    \"minecraft:friction\": 0.1,\r\n  },\r\n};\r\n\r\n/**\r\n * Item trait components.\r\n */\r\nconst ITEM_TRAIT_COMPONENTS: Record<ItemTraitId, Record<string, any>> = {\r\n  sword: {\r\n    \"minecraft:hand_equipped\": true,\r\n    \"minecraft:damage\": 4,\r\n    \"minecraft:enchantable\": { slot: \"sword\", value: 10 },\r\n  },\r\n  pickaxe: {\r\n    \"minecraft:hand_equipped\": true,\r\n    \"minecraft:digger\": {\r\n      use_efficiency: true,\r\n      destroy_speeds: [{ block: { tags: \"q.any_tag('stone', 'metal')\" }, speed: 4 }],\r\n    },\r\n    \"minecraft:enchantable\": { slot: \"pickaxe\", value: 10 },\r\n  },\r\n  axe: {\r\n    \"minecraft:hand_equipped\": true,\r\n    \"minecraft:digger\": {\r\n      use_efficiency: true,\r\n      destroy_speeds: [{ block: { tags: \"q.any_tag('wood', 'pumpkin')\" }, speed: 4 }],\r\n    },\r\n    \"minecraft:enchantable\": { slot: \"axe\", value: 10 },\r\n  },\r\n  shovel: {\r\n    \"minecraft:hand_equipped\": true,\r\n    \"minecraft:digger\": {\r\n      use_efficiency: true,\r\n      destroy_speeds: [{ block: { tags: \"q.any_tag('dirt', 'sand', 'gravel')\" }, speed: 4 }],\r\n    },\r\n    \"minecraft:enchantable\": { slot: \"shovel\", value: 10 },\r\n  },\r\n  hoe: {\r\n    \"minecraft:hand_equipped\": true,\r\n    \"minecraft:enchantable\": { slot: \"hoe\", value: 10 },\r\n  },\r\n  bow: {\r\n    \"minecraft:use_duration\": 72000,\r\n    \"minecraft:enchantable\": { slot: \"bow\", value: 1 },\r\n  },\r\n  crossbow: {\r\n    \"minecraft:use_duration\": 72000,\r\n    \"minecraft:enchantable\": { slot: \"crossbow\", value: 1 },\r\n  },\r\n  food: {\r\n    \"minecraft:food\": {\r\n      nutrition: 4,\r\n      saturation_modifier: \"normal\",\r\n      can_always_eat: false,\r\n    },\r\n    \"minecraft:use_duration\": 32,\r\n  },\r\n  armor_helmet: {\r\n    \"minecraft:wearable\": { slot: \"slot.armor.head\" },\r\n    \"minecraft:enchantable\": { slot: \"armor_head\", value: 10 },\r\n  },\r\n  armor_chestplate: {\r\n    \"minecraft:wearable\": { slot: \"slot.armor.chest\" },\r\n    \"minecraft:enchantable\": { slot: \"armor_torso\", value: 10 },\r\n  },\r\n  armor_leggings: {\r\n    \"minecraft:wearable\": { slot: \"slot.armor.legs\" },\r\n    \"minecraft:enchantable\": { slot: \"armor_legs\", value: 10 },\r\n  },\r\n  armor_boots: {\r\n    \"minecraft:wearable\": { slot: \"slot.armor.feet\" },\r\n    \"minecraft:enchantable\": { slot: \"armor_feet\", value: 10 },\r\n  },\r\n  throwable: {\r\n    \"minecraft:throwable\": {\r\n      do_swing_animation: true,\r\n      launch_power_scale: 1.0,\r\n      max_launch_power: 1.0,\r\n    },\r\n    \"minecraft:projectile\": {\r\n      projectile_entity: \"minecraft:snowball\",\r\n    },\r\n  },\r\n  placeable: {\r\n    \"minecraft:block_placer\": {\r\n      block: \"minecraft:stone\",\r\n    },\r\n  },\r\n};\r\n\r\n// ============================================================================\r\n// BEHAVIOR PRESET EXPANSION\r\n// ============================================================================\r\n\r\n/**\r\n * Maps behavior presets to AI goal components.\r\n */\r\nconst BEHAVIOR_PRESET_COMPONENTS: Record<EntityBehaviorPreset, Record<string, any>> = {\r\n  // Movement\r\n  wander: {\r\n    \"minecraft:behavior.random_stroll\": { priority: 6, speed_multiplier: 1.0 },\r\n  },\r\n  swim: {\r\n    \"minecraft:behavior.random_swim\": { priority: 4, speed_multiplier: 1.0 },\r\n  },\r\n  fly_around: {\r\n    \"minecraft:behavior.random_fly\": { priority: 6, xz_dist: 4, y_dist: 2 },\r\n  },\r\n  float: {\r\n    \"minecraft:behavior.float\": { priority: 0 },\r\n  },\r\n  climb: {\r\n    \"minecraft:can_climb\": {},\r\n  },\r\n\r\n  // Combat\r\n  melee_attack: {\r\n    \"minecraft:behavior.melee_attack\": { priority: 3, speed_multiplier: 1.0 },\r\n    \"minecraft:attack\": { damage: 3 },\r\n  },\r\n  ranged_attack: {\r\n    \"minecraft:behavior.ranged_attack\": { priority: 3, attack_radius: 15.0 },\r\n  },\r\n  target_players: {\r\n    \"minecraft:behavior.nearest_attackable_target\": {\r\n      priority: 2,\r\n      entity_types: [{ filters: { test: \"is_family\", subject: \"other\", value: \"player\" } }],\r\n    },\r\n  },\r\n  target_monsters: {\r\n    \"minecraft:behavior.nearest_attackable_target\": {\r\n      priority: 2,\r\n      entity_types: [{ filters: { test: \"is_family\", subject: \"other\", value: \"monster\" } }],\r\n    },\r\n  },\r\n  flee_when_hurt: {\r\n    \"minecraft:behavior.panic\": { priority: 1, speed_multiplier: 1.25 },\r\n  },\r\n  retaliate: {\r\n    \"minecraft:behavior.hurt_by_target\": { priority: 1 },\r\n  },\r\n\r\n  // Social\r\n  follow_owner: {\r\n    \"minecraft:behavior.follow_owner\": {\r\n      priority: 4,\r\n      speed_multiplier: 1.0,\r\n      start_distance: 10,\r\n      stop_distance: 2,\r\n    },\r\n  },\r\n  follow_parent: {\r\n    \"minecraft:behavior.follow_parent\": { priority: 5, speed_multiplier: 1.0 },\r\n  },\r\n  herd: {\r\n    \"minecraft:behavior.move_towards_dwelling_restriction\": { priority: 4 },\r\n  },\r\n  avoid_players: {\r\n    \"minecraft:behavior.avoid_mob_type\": {\r\n      priority: 1,\r\n      entity_types: [{ filters: { test: \"is_family\", subject: \"other\", value: \"player\" } }],\r\n      max_dist: 10,\r\n      walk_speed_multiplier: 0.8,\r\n      sprint_speed_multiplier: 1.2,\r\n    },\r\n  },\r\n\r\n  // Interaction\r\n  look_at_player: {\r\n    \"minecraft:behavior.look_at_player\": {\r\n      priority: 7,\r\n      look_distance: 6.0,\r\n      probability: 0.02,\r\n    },\r\n  },\r\n  beg: {\r\n    \"minecraft:behavior.beg\": {\r\n      priority: 8,\r\n      look_distance: 8.0,\r\n      items: [\"bone\"],\r\n    },\r\n  },\r\n  tempt: {\r\n    \"minecraft:behavior.tempt\": {\r\n      priority: 4,\r\n      speed_multiplier: 1.0,\r\n      items: [\"wheat\"],\r\n    },\r\n  },\r\n  sit_command: {\r\n    \"minecraft:behavior.sit\": { priority: 2 },\r\n    \"minecraft:sittable\": {},\r\n  },\r\n\r\n  // Actions\r\n  eat_grass: {\r\n    \"minecraft:behavior.eat_block\": {\r\n      priority: 6,\r\n      time_until_eat: 1.8,\r\n      eat_and_replace_block_pairs: [{ eat_block: \"grass\", replace_block: \"dirt\" }],\r\n    },\r\n  },\r\n  break_doors: {\r\n    \"minecraft:behavior.break_door\": { priority: 1 },\r\n  },\r\n  open_doors: {\r\n    \"minecraft:behavior.open_door\": { priority: 6, close_door_after: true },\r\n  },\r\n  pick_up_items: {\r\n    \"minecraft:behavior.pickup_items\": { priority: 7, max_dist: 3 },\r\n  },\r\n  sleep_in_bed: {\r\n    \"minecraft:behavior.sleep\": { priority: 3, speed_multiplier: 1.2 },\r\n  },\r\n\r\n  // Environment\r\n  hide_from_sun: {\r\n    \"minecraft:behavior.flee_sun\": { priority: 2, speed_multiplier: 1.0 },\r\n  },\r\n  go_home_at_night: {\r\n    \"minecraft:behavior.go_home\": { priority: 4, speed_multiplier: 1.0, goal_radius: 1.5 },\r\n  },\r\n  seek_water: {\r\n    \"minecraft:behavior.go_and_give_items_to_noteblock\": { priority: 5 },\r\n  },\r\n  seek_land: {\r\n    \"minecraft:behavior.move_to_land\": { priority: 1, search_range: 16 },\r\n  },\r\n};\r\n\r\n// ============================================================================\r\n// MAIN GENERATOR CLASS\r\n// ============================================================================\r\n\r\n/**\r\n * Generates native Minecraft content from meta-schema definitions.\r\n */\r\nexport class ContentGenerator {\r\n  private _definition: IMinecraftContentDefinition;\r\n  private _options: IGenerationOptions;\r\n  private _namespace: string;\r\n  private _warnings: string[] = [];\r\n  private _errors: string[] = [];\r\n\r\n  /**\r\n   * Sanitizes an ID for safe use in file paths.\r\n   * Strips path separators and traversal sequences to prevent directory escape.\r\n   */\r\n  private static _sanitizeIdForPath(id: string): string {\r\n    // Remove null bytes, path separators, and traversal sequences\r\n    return id.replace(/\\0/g, \"\").replace(/\\.\\./g, \"\").replace(/[/\\\\]/g, \"_\").replace(/:/g, \"_\");\r\n  }\r\n\r\n  constructor(definition: IMinecraftContentDefinition) {\r\n    this._definition = definition;\r\n    this._options = definition.options || {};\r\n    this._namespace = definition.namespace || \"custom\";\r\n  }\r\n\r\n  // ============================================================================\r\n  // TRAIT VALIDATION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Validates trait combinations for entities, blocks, and items.\r\n   * Checks for conflicting traits and adds warnings to the result.\r\n   *\r\n   * @param result - The generation result to add warnings to\r\n   */\r\n  private _validateTraitCombinations(): void {\r\n    // Validate entity traits\r\n    if (this._definition.entityTypes) {\r\n      for (const entity of this._definition.entityTypes) {\r\n        if (entity.traits && entity.traits.length > 1) {\r\n          this._validateEntityTraits(entity.id, entity.traits);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Validate block traits\r\n    if (this._definition.blockTypes) {\r\n      for (const block of this._definition.blockTypes) {\r\n        if (block.traits && block.traits.length > 1) {\r\n          this._validateBlockTraits(block.id, block.traits);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Validate item traits\r\n    if (this._definition.itemTypes) {\r\n      for (const item of this._definition.itemTypes) {\r\n        if (item.traits && item.traits.length > 1) {\r\n          this._validateItemTraits(item.id, item.traits);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates entity trait combinations for conflicts.\r\n   */\r\n  private _validateEntityTraits(entityId: string, traits: EntityTraitId[]): void {\r\n    const traitSet = new Set(traits);\r\n\r\n    for (const traitId of traits) {\r\n      const trait = TraitRegistry.getEntityTrait(traitId);\r\n      if (trait) {\r\n        const traitData = trait.getData();\r\n\r\n        // Check for conflicts\r\n        if (traitData.conflicts) {\r\n          for (const conflictId of traitData.conflicts) {\r\n            if (traitSet.has(conflictId as EntityTraitId)) {\r\n              this._warnings.push(\r\n                `Entity '${entityId}': Trait '${traitId}' conflicts with '${conflictId}'. ` +\r\n                  `These traits may produce unexpected behavior when combined.`\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check common known conflicts not defined in trait data\r\n    this._checkKnownEntityConflicts(entityId, traitSet);\r\n  }\r\n\r\n  /**\r\n   * Validates block trait combinations for conflicts.\r\n   */\r\n  private _validateBlockTraits(blockId: string, traits: BlockTraitId[]): void {\r\n    const traitSet = new Set(traits);\r\n\r\n    for (const traitId of traits) {\r\n      const trait = TraitRegistry.getBlockTrait(traitId);\r\n      if (trait) {\r\n        const traitData = trait.getData();\r\n\r\n        // Check for conflicts\r\n        if (traitData.conflicts) {\r\n          for (const conflictId of traitData.conflicts) {\r\n            if (traitSet.has(conflictId as BlockTraitId)) {\r\n              this._warnings.push(\r\n                `Block '${blockId}': Trait '${traitId}' conflicts with '${conflictId}'. ` +\r\n                  `These traits may produce unexpected behavior when combined.`\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check common known conflicts\r\n    this._checkKnownBlockConflicts(blockId, traitSet);\r\n  }\r\n\r\n  /**\r\n   * Validates item trait combinations for conflicts.\r\n   */\r\n  private _validateItemTraits(itemId: string, traits: ItemTraitId[]): void {\r\n    const traitSet = new Set(traits);\r\n\r\n    for (const traitId of traits) {\r\n      const trait = TraitRegistry.getItemTrait(traitId);\r\n      if (trait) {\r\n        const traitData = trait.getData();\r\n\r\n        // Check for conflicts\r\n        if (traitData.conflicts) {\r\n          for (const conflictId of traitData.conflicts) {\r\n            if (traitSet.has(conflictId as ItemTraitId)) {\r\n              this._warnings.push(\r\n                `Item '${itemId}': Trait '${traitId}' conflicts with '${conflictId}'. ` +\r\n                  `These traits may produce unexpected behavior when combined.`\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check common known conflicts\r\n    this._checkKnownItemConflicts(itemId, traitSet);\r\n  }\r\n\r\n  /**\r\n   * Checks for common entity trait conflicts that may not be defined in trait data.\r\n   */\r\n  private _checkKnownEntityConflicts(entityId: string, traits: Set<EntityTraitId>): void {\r\n    // Behavior conflicts: hostile, passive, neutral are mutually exclusive\r\n    const behaviorTraits = [\"hostile\", \"passive\", \"neutral\"].filter((t) => traits.has(t as EntityTraitId));\r\n    if (behaviorTraits.length > 1) {\r\n      this._warnings.push(\r\n        `Entity '${entityId}': Multiple behavior traits (${behaviorTraits.join(\", \")}) are mutually exclusive. ` +\r\n          `Only one behavior archetype should be used.`\r\n      );\r\n    }\r\n\r\n    // Body type conflicts: only one body type should be selected\r\n    const bodyTypeTraits = [\r\n      \"humanoid\",\r\n      \"quadruped\",\r\n      \"quadruped_small\",\r\n      \"flying\",\r\n      \"aquatic\",\r\n      \"arthropod\",\r\n      \"slime\",\r\n    ].filter((t) => traits.has(t as EntityTraitId));\r\n    if (bodyTypeTraits.length > 1) {\r\n      this._warnings.push(\r\n        `Entity '${entityId}': Multiple body types (${bodyTypeTraits.join(\", \")}) specified. ` +\r\n          `Only one body type should be selected.`\r\n      );\r\n    }\r\n\r\n    // aquatic and flying don't mix well\r\n    if (traits.has(\"aquatic\" as EntityTraitId) && traits.has(\"flying\" as EntityTraitId)) {\r\n      this._warnings.push(\r\n        `Entity '${entityId}': 'aquatic' and 'flying' traits may conflict. ` +\r\n          `Consider using one or the other for cleaner behavior.`\r\n      );\r\n    }\r\n\r\n    // undead with passive is unusual\r\n    if (traits.has(\"undead\" as EntityTraitId) && traits.has(\"passive\" as EntityTraitId)) {\r\n      this._warnings.push(\r\n        `Entity '${entityId}': 'undead' trait is typically used with hostile entities, not passive ones.`\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Checks for common block trait conflicts.\r\n   */\r\n  private _checkKnownBlockConflicts(blockId: string, traits: Set<BlockTraitId>): void {\r\n    // Shape conflicts: only one shape should be selected\r\n    const shapeTraits = [\"slab\", \"stairs\", \"fence\", \"wall\", \"door\", \"trapdoor\", \"button\", \"lever\"].filter((t) =>\r\n      traits.has(t as BlockTraitId)\r\n    );\r\n    if (shapeTraits.length > 1) {\r\n      this._warnings.push(\r\n        `Block '${blockId}': Multiple shape traits (${shapeTraits.join(\", \")}) specified. ` +\r\n          `Only one shape type should be selected.`\r\n      );\r\n    }\r\n\r\n    // transparent and solid are typically mutually exclusive\r\n    if (traits.has(\"transparent\" as BlockTraitId) && traits.has(\"solid\" as BlockTraitId)) {\r\n      this._warnings.push(\r\n        `Block '${blockId}': 'transparent' and 'solid' traits may be redundant. ` +\r\n          `Consider which visual style you want.`\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Checks for common item trait conflicts.\r\n   */\r\n  private _checkKnownItemConflicts(itemId: string, traits: Set<ItemTraitId>): void {\r\n    // Tool conflicts: items should typically be one tool type\r\n    const toolTraits = [\"sword\", \"pickaxe\", \"axe\", \"shovel\", \"hoe\"].filter((t) => traits.has(t as ItemTraitId));\r\n    if (toolTraits.length > 1) {\r\n      this._warnings.push(\r\n        `Item '${itemId}': Multiple tool traits (${toolTraits.join(\", \")}) specified. ` +\r\n          `Items are typically one tool type.`\r\n      );\r\n    }\r\n\r\n    // Armor conflicts: items should be one armor slot\r\n    const armorTraits = [\"armor_helmet\", \"armor_chestplate\", \"armor_leggings\", \"armor_boots\"].filter((t) =>\r\n      traits.has(t as ItemTraitId)\r\n    );\r\n    if (armorTraits.length > 1) {\r\n      this._warnings.push(\r\n        `Item '${itemId}': Multiple armor slot traits (${armorTraits.join(\", \")}) specified. ` +\r\n          `Items can only occupy one armor slot.`\r\n      );\r\n    }\r\n\r\n    // Food with weapon is unusual\r\n    if (traits.has(\"food\" as ItemTraitId) && toolTraits.length > 0) {\r\n      this._warnings.push(\r\n        `Item '${itemId}': 'food' trait combined with tool trait (${toolTraits.join(\", \")}). ` +\r\n          `This is unusual - consider if this is intentional.`\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate all content from the definition.\r\n   */\r\n  async generate(): Promise<IGeneratedContent> {\r\n    // Ensure trait registry is initialized\r\n    ensureTraitsInitialized();\r\n\r\n    // Validate trait combinations before generation\r\n    this._validateTraitCombinations();\r\n\r\n    const result: IGeneratedContent = {\r\n      entityBehaviors: [],\r\n      entityResources: [],\r\n      blockBehaviors: [],\r\n      blockResources: [],\r\n      itemBehaviors: [],\r\n      itemResources: [],\r\n      structures: [],\r\n      features: [],\r\n      featureRules: [],\r\n      lootTables: [],\r\n      recipes: [],\r\n      spawnRules: [],\r\n      textures: [],\r\n      geometries: [],\r\n      renderControllers: [],\r\n      sounds: [],\r\n      summary: {\r\n        namespace: this._namespace,\r\n        entityCount: 0,\r\n        blockCount: 0,\r\n        itemCount: 0,\r\n        structureCount: 0,\r\n        featureCount: 0,\r\n        lootTableCount: 0,\r\n        recipeCount: 0,\r\n        spawnRuleCount: 0,\r\n        textureCount: 0,\r\n        warnings: [],\r\n        errors: [],\r\n      },\r\n    };\r\n\r\n    // Generate manifests. Resource pack first so the behavior pack can declare\r\n    // a dependency on it \u2014 without this link, Bedrock will not load the RP at\r\n    // runtime and entities/blocks/items render invisible.\r\n    result.resourcePackManifest = this._generateResourceManifest();\r\n    const rpHeaderUuid = (result.resourcePackManifest.content as any)?.header?.uuid;\r\n    result.behaviorPackManifest = this._generateBehaviorManifest(rpHeaderUuid);\r\n\r\n    // Generate entities\r\n    if (this._definition.entityTypes) {\r\n      for (const entity of this._definition.entityTypes) {\r\n        await this._generateEntity(entity, result);\r\n      }\r\n      result.summary.entityCount = this._definition.entityTypes.length;\r\n    }\r\n\r\n    // Generate blocks\r\n    if (this._definition.blockTypes) {\r\n      for (const block of this._definition.blockTypes) {\r\n        await this._generateBlock(block, result);\r\n      }\r\n      result.summary.blockCount = this._definition.blockTypes.length;\r\n    }\r\n\r\n    // Generate items\r\n    if (this._definition.itemTypes) {\r\n      for (const item of this._definition.itemTypes) {\r\n        await this._generateItem(item, result);\r\n      }\r\n      result.summary.itemCount = this._definition.itemTypes.length;\r\n    }\r\n\r\n    // Generate loot tables\r\n    if (this._definition.lootTables) {\r\n      for (const lootTable of this._definition.lootTables) {\r\n        this._generateLootTable(lootTable, result);\r\n      }\r\n      result.summary.lootTableCount = this._definition.lootTables.length;\r\n    }\r\n\r\n    // Generate recipes\r\n    if (this._definition.recipes) {\r\n      for (const recipe of this._definition.recipes) {\r\n        this._generateRecipe(recipe, result);\r\n      }\r\n      result.summary.recipeCount = this._definition.recipes.length;\r\n    }\r\n\r\n    // Generate spawn rules\r\n    if (this._definition.spawnRules) {\r\n      for (const spawnRule of this._definition.spawnRules) {\r\n        this._generateSpawnRule(spawnRule, result);\r\n      }\r\n      result.summary.spawnRuleCount = this._definition.spawnRules.length;\r\n    }\r\n\r\n    // Generate features\r\n    if (this._definition.features) {\r\n      for (const feature of this._definition.features) {\r\n        this._generateFeature(feature, result);\r\n      }\r\n      result.summary.featureCount = this._definition.features.length;\r\n    }\r\n\r\n    // Generate structures\r\n    if (this._definition.structures) {\r\n      for (const structure of this._definition.structures) {\r\n        await this._generateStructure(structure, result);\r\n      }\r\n      result.summary.structureCount = this._definition.structures.length;\r\n    }\r\n\r\n    // Generate terrain_texture.json for blocks\r\n    if (this._definition.blockTypes && this._definition.blockTypes.length > 0) {\r\n      result.terrainTextures = this._generateTerrainTextures(this._definition.blockTypes);\r\n      result.blocksCatalog = this._generateBlocksCatalog(this._definition.blockTypes);\r\n    }\r\n\r\n    // Generate item_texture.json for items\r\n    if (this._definition.itemTypes && this._definition.itemTypes.length > 0) {\r\n      result.itemTextures = this._generateItemTextures(this._definition.itemTypes);\r\n    }\r\n\r\n    result.summary.textureCount = result.textures.length;\r\n    result.summary.warnings = this._warnings;\r\n    result.summary.errors = this._errors;\r\n\r\n    return result;\r\n  }\r\n\r\n  // ============================================================================\r\n  // MANIFEST GENERATION\r\n  // ============================================================================\r\n\r\n  private _generateBehaviorManifest(resourcePackHeaderUuid?: string): IGeneratedFile {\r\n    const uuid1 = this._generateUuid();\r\n    const uuid2 = this._generateUuid();\r\n\r\n    const content: any = {\r\n      format_version: 2,\r\n      header: {\r\n        name: this._definition.displayName || `${this._namespace} Behavior Pack`,\r\n        description: this._definition.description || `Generated content for ${this._namespace}`,\r\n        uuid: uuid1,\r\n        version: [1, 0, 0],\r\n        min_engine_version: [1, 21, 0],\r\n      },\r\n      modules: [\r\n        {\r\n          type: \"data\",\r\n          uuid: uuid2,\r\n          version: [1, 0, 0],\r\n        },\r\n      ],\r\n    };\r\n\r\n    // BP must declare a dependency on its sibling RP, otherwise Bedrock won't\r\n    // load the RP and all entities/blocks render invisible. This was a recurring\r\n    // root-cause bug that historically required many server restarts to identify.\r\n    if (resourcePackHeaderUuid) {\r\n      content.dependencies = [\r\n        {\r\n          uuid: resourcePackHeaderUuid,\r\n          version: [1, 0, 0],\r\n        },\r\n      ];\r\n    }\r\n\r\n    return {\r\n      path: \"manifest.json\",\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content,\r\n    };\r\n  }\r\n\r\n  private _generateResourceManifest(): IGeneratedFile {\r\n    const uuid1 = this._generateUuid();\r\n    const uuid2 = this._generateUuid();\r\n\r\n    return {\r\n      path: \"manifest.json\",\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: {\r\n        format_version: 2,\r\n        header: {\r\n          name: this._definition.displayName || `${this._namespace} Resource Pack`,\r\n          description: this._definition.description || `Resources for ${this._namespace}`,\r\n          uuid: uuid1,\r\n          version: [1, 0, 0],\r\n          min_engine_version: [1, 21, 0],\r\n        },\r\n        modules: [\r\n          {\r\n            type: \"resources\",\r\n            uuid: uuid2,\r\n            version: [1, 0, 0],\r\n          },\r\n        ],\r\n      },\r\n    };\r\n  }\r\n\r\n  // ============================================================================\r\n  // ENTITY GENERATION\r\n  // ============================================================================\r\n\r\n  private async _generateEntity(entity: IEntityTypeDefinition, result: IGeneratedContent): Promise<void> {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(entity.id);\r\n    const fullId = `${this._namespace}:${entity.id}`;\r\n\r\n    // Build components from traits first\r\n    let components: Record<string, any> = {\r\n      \"minecraft:type_family\": { family: entity.families || [entity.id] },\r\n      \"minecraft:collision_box\": {\r\n        width: entity.collisionWidth || 0.6,\r\n        height: entity.collisionHeight || 1.8,\r\n      },\r\n      \"minecraft:physics\": {},\r\n      \"minecraft:pushable\": { is_pushable: true, is_pushable_by_piston: true },\r\n      \"minecraft:movement\": { value: entity.movementSpeed || 0.25 },\r\n      \"minecraft:movement.basic\": {},\r\n      \"minecraft:navigation.walk\": {\r\n        can_path_over_water: true,\r\n        avoid_damage_blocks: true,\r\n      },\r\n    };\r\n\r\n    // Collect component groups and events from traits\r\n    let componentGroups: Record<string, Record<string, any>> = {};\r\n    let events: Record<string, any> = {};\r\n    let spawnEvent: any = undefined;\r\n\r\n    // Apply traits using the new trait system\r\n    if (entity.traits) {\r\n      for (const traitId of entity.traits) {\r\n        // First try the new registry-based traits\r\n        const trait = TraitRegistry.getEntityTrait(traitId);\r\n        if (trait) {\r\n          const traitData = trait.getData({\r\n            attackDamage: entity.attackDamage,\r\n            tameItems: (entity as any).tameItems,\r\n            tameChance: (entity as any).tameChance,\r\n          });\r\n\r\n          // Merge components\r\n          if (traitData.components) {\r\n            components = { ...components, ...traitData.components };\r\n          }\r\n\r\n          // Merge component groups\r\n          if (traitData.componentGroups) {\r\n            componentGroups = { ...componentGroups, ...traitData.componentGroups };\r\n          }\r\n\r\n          // Merge events\r\n          if (traitData.events) {\r\n            events = { ...events, ...traitData.events };\r\n          }\r\n\r\n          // Collect spawn events (last one wins if multiple)\r\n          if (traitData.spawnEvent) {\r\n            if (!spawnEvent) {\r\n              spawnEvent = traitData.spawnEvent;\r\n            } else {\r\n              // Merge spawn events - combine component groups to add\r\n              if (spawnEvent.add?.component_groups && traitData.spawnEvent.add?.component_groups) {\r\n                spawnEvent.add.component_groups = [\r\n                  ...spawnEvent.add.component_groups,\r\n                  ...traitData.spawnEvent.add.component_groups,\r\n                ];\r\n              }\r\n            }\r\n          }\r\n        } else {\r\n          // Fall back to legacy ENTITY_TRAIT_COMPONENTS lookup\r\n          const traitComponents = ENTITY_TRAIT_COMPONENTS[traitId];\r\n          if (traitComponents) {\r\n            components = { ...components, ...traitComponents };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Apply behavior presets\r\n    if (entity.behaviors) {\r\n      for (const behavior of entity.behaviors) {\r\n        const behaviorComponents = BEHAVIOR_PRESET_COMPONENTS[behavior];\r\n        if (behaviorComponents) {\r\n          components = { ...components, ...behaviorComponents };\r\n        }\r\n      }\r\n    }\r\n\r\n    // Deduplicate movement controllers. Bedrock allows only ONE\r\n    // `minecraft:movement.*` component per entity; having both `movement.basic`\r\n    // (added as default above) and a trait-provided controller like\r\n    // `movement.sway` triggers a \"Mobs can only have 1 Move Control Component\"\r\n    // error at runtime. If a trait supplied a more specific movement.* the\r\n    // default basic controller must be dropped.\r\n    const movementKeys = Object.keys(components).filter((k) => k.startsWith(\"minecraft:movement.\"));\r\n    if (movementKeys.length > 1 && components[\"minecraft:movement.basic\"] !== undefined) {\r\n      delete components[\"minecraft:movement.basic\"];\r\n    }\r\n\r\n    // Apply simplified properties\r\n    if (entity.health !== undefined) {\r\n      components[\"minecraft:health\"] = { value: entity.health, max: entity.health };\r\n    }\r\n    if (entity.attackDamage !== undefined) {\r\n      components[\"minecraft:attack\"] = { damage: entity.attackDamage };\r\n    }\r\n    if (entity.followRange !== undefined) {\r\n      components[\"minecraft:follow_range\"] = { value: entity.followRange };\r\n    }\r\n    if (entity.knockbackResistance !== undefined) {\r\n      components[\"minecraft:knockback_resistance\"] = { value: entity.knockbackResistance };\r\n    }\r\n    if (entity.scale !== undefined) {\r\n      components[\"minecraft:scale\"] = { value: entity.scale };\r\n    }\r\n    // appearance.scale overrides entity.scale if both are set (documented in schema).\r\n    if (entity.appearance?.scale !== undefined) {\r\n      components[\"minecraft:scale\"] = { value: entity.appearance.scale };\r\n    }\r\n\r\n    // Apply native components (override everything)\r\n    if (entity.components) {\r\n      components = { ...components, ...entity.components };\r\n    }\r\n\r\n    // Generate behavior pack entity\r\n    const behaviorEntity: any = {\r\n      format_version: \"1.21.0\",\r\n      \"minecraft:entity\": {\r\n        description: {\r\n          identifier: fullId,\r\n          is_spawnable: true,\r\n          is_summonable: true,\r\n          is_experimental: false,\r\n        },\r\n        components,\r\n      },\r\n    };\r\n\r\n    // Merge component groups from traits with those specified directly\r\n    const mergedComponentGroups = { ...componentGroups };\r\n    if (entity.componentGroups) {\r\n      for (const [key, value] of Object.entries(entity.componentGroups)) {\r\n        mergedComponentGroups[key] = value;\r\n      }\r\n    }\r\n    if (Object.keys(mergedComponentGroups).length > 0) {\r\n      behaviorEntity[\"minecraft:entity\"].component_groups = mergedComponentGroups;\r\n    }\r\n\r\n    // Merge events from traits with those specified directly\r\n    const mergedEvents = { ...events };\r\n    if (entity.events) {\r\n      for (const [key, value] of Object.entries(entity.events)) {\r\n        mergedEvents[key] = value;\r\n      }\r\n    }\r\n    // Add spawn event if we have one\r\n    if (spawnEvent) {\r\n      mergedEvents[\"minecraft:entity_spawned\"] = spawnEvent;\r\n    }\r\n    if (Object.keys(mergedEvents).length > 0) {\r\n      behaviorEntity[\"minecraft:entity\"].events = mergedEvents;\r\n    }\r\n\r\n    result.entityBehaviors.push({\r\n      path: `entities/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: behaviorEntity,\r\n    });\r\n\r\n    // Generate resource pack entity\r\n    const resourceEntity = this._generateEntityResource(entity, fullId);\r\n    result.entityResources.push({\r\n      path: `entity/${safeId}.entity.json`,\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: resourceEntity,\r\n    });\r\n\r\n    // Try model-design-based generation for geometry + texture\r\n    const designResult = await this._generateEntityFromModelDesign(entity);\r\n    if (designResult) {\r\n      result.geometries.push({\r\n        path: `models/entity/${safeId}.geo.json`,\r\n        pack: \"resource\",\r\n        type: \"json\",\r\n        content: designResult.geometry,\r\n      });\r\n      if (designResult.texture) {\r\n        result.textures.push({\r\n          path: `textures/entity/${safeId}.png`,\r\n          pack: \"resource\",\r\n          type: \"png\",\r\n          content: designResult.texture,\r\n        });\r\n      }\r\n    } else {\r\n      // Fallback: use legacy geometry + placeholder texture\r\n      const geometry = this._generateEntityGeometry(entity);\r\n      result.geometries.push({\r\n        path: `models/entity/${safeId}.geo.json`,\r\n        pack: \"resource\",\r\n        type: \"json\",\r\n        content: geometry,\r\n      });\r\n      const texture = await this._generateEntityTexturePlaceholder(entity);\r\n      if (texture) {\r\n        result.textures.push({\r\n          path: `textures/entity/${safeId}.png`,\r\n          pack: \"resource\",\r\n          type: \"png\",\r\n          content: texture,\r\n        });\r\n      }\r\n    }\r\n\r\n    // Generate render controller for the entity\r\n    const renderController = this._generateEntityRenderController(entity);\r\n    result.renderControllers.push({\r\n      path: `render_controllers/${safeId}.render_controllers.json`,\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: renderController,\r\n    });\r\n\r\n    // Generate loot table from drops if specified\r\n    if (entity.drops && entity.drops.length > 0) {\r\n      const lootTable = this._generateLootTableFromDrops(entity.id, entity.drops);\r\n      result.lootTables.push(lootTable);\r\n\r\n      // Update entity to reference loot table\r\n      behaviorEntity[\"minecraft:entity\"].components[\"minecraft:loot\"] = {\r\n        table: `loot_tables/entities/${entity.id}.json`,\r\n      };\r\n    }\r\n\r\n    // Generate spawn rule if specified\r\n    if (entity.spawning) {\r\n      const spawnRule = this._generateSpawnRuleFromConfig(entity.id, fullId, entity.spawning);\r\n      result.spawnRules.push(spawnRule);\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // MODEL-DESIGN-BASED ENTITY GENERATION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Maps a content meta-schema bodyType to a model template type.\r\n   */\r\n  private _bodyTypeToTemplateType(bodyType: string): ModelTemplateType {\r\n    switch (bodyType) {\r\n      case \"quadruped\":\r\n        return \"large_animal\";\r\n      case \"quadruped_small\":\r\n        return \"small_animal\";\r\n      default:\r\n        return bodyType as ModelTemplateType;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Maps an appearance.textureStyle value to the corresponding TexturedRectangleType\r\n   * used in model-design textures. Falls back to the template's existing background type\r\n   * (or 'stipple_noise') when no textureStyle is specified.\r\n   */\r\n  private _textureStyleToType(\r\n    textureStyle: \"solid\" | \"spotted\" | \"striped\" | \"gradient\" | \"organic\" | \"armored\" | undefined,\r\n    fallback: string | undefined\r\n  ): any {\r\n    if (!textureStyle) {\r\n      return fallback || \"stipple_noise\";\r\n    }\r\n    switch (textureStyle) {\r\n      case \"solid\":\r\n        return \"solid\";\r\n      case \"spotted\":\r\n        return \"stipple_noise\";\r\n      case \"striped\":\r\n        return \"dither_noise\";\r\n      case \"gradient\":\r\n        return \"gradient\";\r\n      case \"organic\":\r\n        return \"perlin_noise\";\r\n      case \"armored\":\r\n        // Stippled base + an outset lighting effect is applied by the caller.\r\n        return \"stipple_noise\";\r\n      default:\r\n        return fallback || \"stipple_noise\";\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Creates a recolored copy of a model design template using the user's primary/secondary colors.\r\n   * Each named texture in the template gets a distinct color derived from the user's choices,\r\n   * producing visually distinct faces that make it obvious how to customize the mob.\r\n   */\r\n  private _recolorModelDesign(\r\n    template: IMcpModelDesign,\r\n    primaryColor: string,\r\n    secondaryColor: string,\r\n    entityId: string,\r\n    textureStyle?: \"solid\" | \"spotted\" | \"striped\" | \"gradient\" | \"organic\" | \"armored\"\r\n  ): IMcpModelDesign {\r\n    const parseHex = (hex: string): { r: number; g: number; b: number } => {\r\n      const h = hex.startsWith(\"#\") ? hex.slice(1) : hex;\r\n      return {\r\n        r: parseInt(h.slice(0, 2), 16) || 128,\r\n        g: parseInt(h.slice(2, 4), 16) || 128,\r\n        b: parseInt(h.slice(4, 6), 16) || 128,\r\n      };\r\n    };\r\n\r\n    const toHex = (c: { r: number; g: number; b: number }): string => {\r\n      const cl = (v: number) => Math.max(0, Math.min(255, Math.round(v)));\r\n      return `#${cl(c.r).toString(16).padStart(2, \"0\")}${cl(c.g).toString(16).padStart(2, \"0\")}${cl(c.b).toString(16).padStart(2, \"0\")}`;\r\n    };\r\n\r\n    const primary = parseHex(primaryColor);\r\n    const secondary = parseHex(secondaryColor);\r\n\r\n    // Generate a palette of distinct colors derived from primary/secondary\r\n    const colorVariants: { r: number; g: number; b: number }[] = [\r\n      primary, // variant 0: primary as-is\r\n      secondary, // variant 1: secondary as-is\r\n      { r: Math.min(255, primary.r + 40), g: Math.max(0, primary.g - 15), b: Math.max(0, primary.b - 25) }, // variant 2: warmer/brighter\r\n      { r: Math.max(0, secondary.r - 20), g: Math.max(0, secondary.g - 20), b: Math.min(255, secondary.b + 30) }, // variant 3: cooler/darker\r\n      {\r\n        r: Math.min(255, Math.round((primary.r + secondary.r) / 2 + 30)), // variant 4: midtone lighter\r\n        g: Math.min(255, Math.round((primary.g + secondary.g) / 2 + 30)),\r\n        b: Math.min(255, Math.round((primary.b + secondary.b) / 2 + 30)),\r\n      },\r\n      {\r\n        r: Math.max(0, Math.round(primary.r * 0.6)), // variant 5: darkened primary\r\n        g: Math.max(0, Math.round(primary.g * 0.6)),\r\n        b: Math.max(0, Math.round(primary.b * 0.6)),\r\n      },\r\n    ];\r\n\r\n    // Build new textures dict with recolored versions\r\n    const newTextures: { [id: string]: IMcpTextureDefinition } = {};\r\n    const textureNames = template.textures ? Object.keys(template.textures) : [];\r\n\r\n    for (let i = 0; i < textureNames.length; i++) {\r\n      const name = textureNames[i];\r\n      const original = template.textures![name];\r\n      const variant = colorVariants[i % colorVariants.length];\r\n\r\n      // Create three color variants for noise textures (base, slightly lighter, slightly darker)\r\n      const c1 = toHex(variant);\r\n      const c2 = toHex({\r\n        r: Math.min(255, variant.r + 15),\r\n        g: Math.min(255, variant.g + 15),\r\n        b: Math.min(255, variant.b + 15),\r\n      });\r\n      const c3 = toHex({\r\n        r: Math.max(0, variant.r - 15),\r\n        g: Math.max(0, variant.g - 15),\r\n        b: Math.max(0, variant.b - 15),\r\n      });\r\n\r\n      newTextures[name] = {\r\n        background: {\r\n          type: this._textureStyleToType(textureStyle, original.background?.type),\r\n          colors: [c1, c2, c3],\r\n          seed: (original.background?.seed || 1000) + i,\r\n        },\r\n        effects:\r\n          textureStyle === \"armored\"\r\n            ? { ...(original.effects || {}), lighting: { preset: \"outset\", intensity: 0.4 } }\r\n            : original.effects,\r\n        pixelArt: original.pixelArt,\r\n      };\r\n    }\r\n\r\n    // Deep clone the design and replace textures\r\n    const cloned: IMcpModelDesign = JSON.parse(JSON.stringify(template));\r\n    cloned.textures = newTextures;\r\n    cloned.identifier = `${this._namespace}_${entityId}`;\r\n\r\n    return cloned;\r\n  }\r\n\r\n  /**\r\n   * Generates entity geometry and texture using the model design pipeline.\r\n   * Uses model templates with per-face textured rectangles for high-quality output.\r\n   * Returns null if template loading fails, in which case the caller should use legacy generation.\r\n   */\r\n  private async _generateEntityFromModelDesign(\r\n    entity: IEntityTypeDefinition\r\n  ): Promise<{ geometry: object; texture: Uint8Array | null } | null> {\r\n    const appearance = entity.appearance || {};\r\n    const bodyType = appearance.bodyType || \"humanoid\";\r\n    const primaryColor = appearance.primaryColor || \"#5B8C3E\";\r\n    const secondaryColor = appearance.secondaryColor || \"#3D6B2E\";\r\n\r\n    // Map bodyType to template type and load template\r\n    const templateType = this._bodyTypeToTemplateType(bodyType);\r\n    let template: IMcpModelDesign | undefined;\r\n\r\n    try {\r\n      template = await getModelTemplateAsync(templateType);\r\n    } catch {\r\n      // Template not available - fall back to legacy\r\n      return null;\r\n    }\r\n\r\n    if (!template) {\r\n      return null;\r\n    }\r\n\r\n    // Recolor the template with the user's colors\r\n    const design = this._recolorModelDesign(template, primaryColor, secondaryColor, entity.id, appearance.textureStyle);\r\n\r\n    // Convert model design to geometry + atlas regions\r\n    const conversionResult = ModelDesignUtilities.convertToGeometry(design);\r\n\r\n    // Override the geometry identifier to use our namespace\r\n    const geometryId = `geometry.${this._namespace}.${entity.id}`;\r\n    const geoData = conversionResult.geometry as {\r\n      \"minecraft:geometry\": { description: { identifier: string } }[];\r\n    };\r\n    if (geoData[\"minecraft:geometry\"] && geoData[\"minecraft:geometry\"][0]) {\r\n      geoData[\"minecraft:geometry\"][0].description.identifier = geometryId;\r\n    }\r\n\r\n    // Render atlas regions into a pixel buffer (same approach as ImageGenerationUtilities)\r\n    const [texWidth, texHeight] = conversionResult.textureSize;\r\n    const pixels = new Uint8Array(texWidth * texHeight * 4);\r\n\r\n    // Initialize with transparent\r\n    for (let i = 0; i < pixels.length; i += 4) {\r\n      pixels[i + 3] = 0;\r\n    }\r\n\r\n    // Render each atlas region\r\n    for (const region of conversionResult.atlasRegions) {\r\n      if (region.isDuplicate) {\r\n        continue; // Duplicate regions share UV space, already rendered\r\n      }\r\n\r\n      if (region.content.background) {\r\n        const bgPixels = TexturedRectangleGenerator.generatePixels(\r\n          region.content.background,\r\n          region.width,\r\n          region.height,\r\n          region.contextString || `region-${region.x}-${region.y}`\r\n        );\r\n\r\n        // Copy pixels to atlas\r\n        for (let dy = 0; dy < region.height && region.y + dy < texHeight; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < texWidth; dx++) {\r\n            const srcIdx = (dy * region.width + dx) * 4;\r\n            const dstIdx = ((region.y + dy) * texWidth + (region.x + dx)) * 4;\r\n            pixels[dstIdx] = bgPixels[srcIdx];\r\n            pixels[dstIdx + 1] = bgPixels[srcIdx + 1];\r\n            pixels[dstIdx + 2] = bgPixels[srcIdx + 2];\r\n            pixels[dstIdx + 3] = bgPixels[srcIdx + 3];\r\n          }\r\n        }\r\n      } else if (region.content.color) {\r\n        // Solid color fill\r\n        const parsed = ModelDesignUtilities.parseColor(region.content.color);\r\n        for (let y = region.y; y < region.y + region.height && y < texHeight; y++) {\r\n          for (let x = region.x; x < region.x + region.width && x < texWidth; x++) {\r\n            const idx = (y * texWidth + x) * 4;\r\n            pixels[idx] = parsed.r;\r\n            pixels[idx + 1] = parsed.g;\r\n            pixels[idx + 2] = parsed.b;\r\n            pixels[idx + 3] = parsed.a ?? 255;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Apply pixel art overlays\r\n      if (region.content.pixelArt && region.content.pixelArt.length > 0) {\r\n        const regionPixels = new Uint8Array(region.width * region.height * 4);\r\n        for (let dy = 0; dy < region.height && region.y + dy < texHeight; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < texWidth; dx++) {\r\n            const srcIdx = ((region.y + dy) * texWidth + (region.x + dx)) * 4;\r\n            const dstIdx = (dy * region.width + dx) * 4;\r\n            regionPixels[dstIdx] = pixels[srcIdx];\r\n            regionPixels[dstIdx + 1] = pixels[srcIdx + 1];\r\n            regionPixels[dstIdx + 2] = pixels[srcIdx + 2];\r\n            regionPixels[dstIdx + 3] = pixels[srcIdx + 3];\r\n          }\r\n        }\r\n\r\n        TexturedRectangleGenerator.applyPixelArtLayers(\r\n          regionPixels,\r\n          region.width,\r\n          region.height,\r\n          region.content.pixelArt,\r\n          conversionResult.pixelsPerUnit\r\n        );\r\n\r\n        for (let dy = 0; dy < region.height && region.y + dy < texHeight; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < texWidth; dx++) {\r\n            const srcIdx = (dy * region.width + dx) * 4;\r\n            const dstIdx = ((region.y + dy) * texWidth + (region.x + dx)) * 4;\r\n            pixels[dstIdx] = regionPixels[srcIdx];\r\n            pixels[dstIdx + 1] = regionPixels[srcIdx + 1];\r\n            pixels[dstIdx + 2] = regionPixels[srcIdx + 2];\r\n            pixels[dstIdx + 3] = regionPixels[srcIdx + 3];\r\n          }\r\n        }\r\n      }\r\n\r\n      // Apply post-processing effects\r\n      if (region.content.effects) {\r\n        const regionPixels = new Uint8Array(region.width * region.height * 4);\r\n        for (let dy = 0; dy < region.height && region.y + dy < texHeight; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < texWidth; dx++) {\r\n            const srcIdx = ((region.y + dy) * texWidth + (region.x + dx)) * 4;\r\n            const dstIdx = (dy * region.width + dx) * 4;\r\n            regionPixels[dstIdx] = pixels[srcIdx];\r\n            regionPixels[dstIdx + 1] = pixels[srcIdx + 1];\r\n            regionPixels[dstIdx + 2] = pixels[srcIdx + 2];\r\n            regionPixels[dstIdx + 3] = pixels[srcIdx + 3];\r\n          }\r\n        }\r\n\r\n        applyTextureEffects(regionPixels, region.width, region.height, region.content.effects);\r\n\r\n        for (let dy = 0; dy < region.height && region.y + dy < texHeight; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < texWidth; dx++) {\r\n            const srcIdx = (dy * region.width + dx) * 4;\r\n            const dstIdx = ((region.y + dy) * texWidth + (region.x + dx)) * 4;\r\n            pixels[dstIdx] = regionPixels[srcIdx];\r\n            pixels[dstIdx + 1] = regionPixels[srcIdx + 1];\r\n            pixels[dstIdx + 2] = regionPixels[srcIdx + 2];\r\n            pixels[dstIdx + 3] = regionPixels[srcIdx + 3];\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Encode to PNG \u2013 try sync (Node.js), then async browser Canvas, then placeholder\r\n    let pngData = ImageCodec.encodeToPngSync(pixels, texWidth, texHeight);\r\n    if (!pngData) {\r\n      pngData = await ImageCodec.encodeToPngBrowser(pixels, texWidth, texHeight);\r\n    }\r\n    return {\r\n      geometry: conversionResult.geometry,\r\n      texture: pngData || PngEncoder.getPlaceholderTexture(\"entity\"),\r\n    };\r\n  }\r\n\r\n  private _generateEntityResource(entity: IEntityTypeDefinition, fullId: string): object {\r\n    const appearance = entity.appearance || {};\r\n    const geometryId = `geometry.${this._namespace}.${entity.id}`;\r\n    const textureId = `textures/entity/${entity.id}`;\r\n    const renderControllerId = `controller.render.${this._namespace}.${entity.id}`;\r\n\r\n    // Eye style controls the material selection. 'glowing' and 'red' use an emissive\r\n    // material so the entity glows in low light; 'normal'/'none' use the default alphatest.\r\n    const eyes = appearance.eyes;\r\n    const material = eyes === \"glowing\" || eyes === \"red\" ? \"entity_emissive\" : \"entity_alphatest\";\r\n\r\n    const description: any = {\r\n      identifier: fullId,\r\n      materials: {\r\n        default: material,\r\n      },\r\n      textures: {\r\n        default: textureId,\r\n      },\r\n      geometry: {\r\n        default: geometryId,\r\n      },\r\n      render_controllers: [renderControllerId],\r\n      spawn_egg: {\r\n        base_color: appearance.primaryColor || \"#5B8C3E\",\r\n        overlay_color: appearance.secondaryColor || \"#3D6B2E\",\r\n      },\r\n    };\r\n\r\n    // Ambient particle effects (flames, smoke, etc.). These are referenced by an\r\n    // animation/emitter controller. We emit the particle_effects map so the agent's\r\n    // chosen effects are at least declared and addressable; a full emitter controller\r\n    // can be layered on top by raw components if needed.\r\n    if (appearance.particles && appearance.particles.length > 0) {\r\n      const particleMap: { [key: string]: string } = {\r\n        flames: \"minecraft:mobflame_emitter\",\r\n        smoke: \"minecraft:mobspell_emitter\",\r\n        drip: \"minecraft:water_drip_particle\",\r\n        sparkle: \"minecraft:villager_happy\",\r\n        hearts: \"minecraft:heart_particle\",\r\n      };\r\n      const particle_effects: { [key: string]: string } = {};\r\n      for (const p of appearance.particles) {\r\n        const mapped = particleMap[p];\r\n        if (mapped) {\r\n          particle_effects[p] = mapped;\r\n        }\r\n      }\r\n      if (Object.keys(particle_effects).length > 0) {\r\n        description.particle_effects = particle_effects;\r\n      }\r\n    }\r\n\r\n    return {\r\n      format_version: \"1.10.0\",\r\n      \"minecraft:client_entity\": {\r\n        description,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Generate a render controller for an entity.\r\n   * This creates a simple render controller that references the entity's geometry and texture.\r\n   */\r\n  private _generateEntityRenderController(entity: IEntityTypeDefinition): object {\r\n    const renderControllerId = `controller.render.${this._namespace}.${entity.id}`;\r\n\r\n    return {\r\n      format_version: \"1.8.0\",\r\n      render_controllers: {\r\n        [renderControllerId]: {\r\n          geometry: \"Geometry.default\",\r\n          materials: [{ \"*\": \"Material.default\" }],\r\n          textures: [\"Texture.default\"],\r\n        },\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Generate a simple geometry for an entity based on its bodyType.\r\n   * Returns a Minecraft geometry JSON structure.\r\n   */\r\n  private _generateEntityGeometry(entity: IEntityTypeDefinition): object {\r\n    const appearance = entity.appearance || {};\r\n    const bodyType = appearance.bodyType || \"humanoid\";\r\n    const geometryId = `geometry.${this._namespace}.${entity.id}`;\r\n\r\n    // Get template geometry based on bodyType\r\n    const bones = this._getGeometryBonesForBodyType(bodyType);\r\n\r\n    return {\r\n      format_version: \"1.12.0\",\r\n      \"minecraft:geometry\": [\r\n        {\r\n          description: {\r\n            identifier: geometryId,\r\n            texture_width: 64,\r\n            texture_height: 64,\r\n            visible_bounds_width: 2,\r\n            visible_bounds_height: 2.5,\r\n            visible_bounds_offset: [0, 0.75, 0],\r\n          },\r\n          bones,\r\n        },\r\n      ],\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Get bone structure for different body types.\r\n   */\r\n  private _getGeometryBonesForBodyType(bodyType: string): object[] {\r\n    switch (bodyType) {\r\n      case \"humanoid\":\r\n        return [\r\n          {\r\n            name: \"root\",\r\n            pivot: [0, 0, 0],\r\n          },\r\n          {\r\n            name: \"body\",\r\n            parent: \"root\",\r\n            pivot: [0, 24, 0],\r\n            cubes: [{ origin: [-4, 12, -2], size: [8, 12, 4], uv: [16, 16] }],\r\n          },\r\n          {\r\n            name: \"head\",\r\n            parent: \"body\",\r\n            pivot: [0, 24, 0],\r\n            cubes: [{ origin: [-4, 24, -4], size: [8, 8, 8], uv: [0, 0] }],\r\n          },\r\n          {\r\n            name: \"left_arm\",\r\n            parent: \"body\",\r\n            pivot: [5, 22, 0],\r\n            cubes: [{ origin: [4, 12, -2], size: [4, 12, 4], uv: [40, 16] }],\r\n          },\r\n          {\r\n            name: \"right_arm\",\r\n            parent: \"body\",\r\n            pivot: [-5, 22, 0],\r\n            cubes: [{ origin: [-8, 12, -2], size: [4, 12, 4], uv: [32, 48] }],\r\n          },\r\n          {\r\n            name: \"left_leg\",\r\n            parent: \"root\",\r\n            pivot: [2, 12, 0],\r\n            cubes: [{ origin: [0, 0, -2], size: [4, 12, 4], uv: [0, 16] }],\r\n          },\r\n          {\r\n            name: \"right_leg\",\r\n            parent: \"root\",\r\n            pivot: [-2, 12, 0],\r\n            cubes: [{ origin: [-4, 0, -2], size: [4, 12, 4], uv: [16, 48] }],\r\n          },\r\n        ];\r\n\r\n      case \"quadruped\":\r\n        return [\r\n          {\r\n            name: \"root\",\r\n            pivot: [0, 0, 0],\r\n          },\r\n          {\r\n            name: \"body\",\r\n            parent: \"root\",\r\n            pivot: [0, 13, 0],\r\n            cubes: [{ origin: [-5, 8, -8], size: [10, 10, 16], uv: [0, 0] }],\r\n          },\r\n          {\r\n            name: \"head\",\r\n            parent: \"body\",\r\n            pivot: [0, 14, -8],\r\n            cubes: [{ origin: [-4, 10, -14], size: [8, 8, 6], uv: [0, 26] }],\r\n          },\r\n          {\r\n            name: \"leg0\",\r\n            parent: \"root\",\r\n            pivot: [-3, 8, 6],\r\n            cubes: [{ origin: [-5, 0, 4], size: [4, 8, 4], uv: [0, 40] }],\r\n          },\r\n          {\r\n            name: \"leg1\",\r\n            parent: \"root\",\r\n            pivot: [3, 8, 6],\r\n            cubes: [{ origin: [1, 0, 4], size: [4, 8, 4], uv: [0, 40] }],\r\n          },\r\n          {\r\n            name: \"leg2\",\r\n            parent: \"root\",\r\n            pivot: [-3, 8, -6],\r\n            cubes: [{ origin: [-5, 0, -8], size: [4, 8, 4], uv: [0, 40] }],\r\n          },\r\n          {\r\n            name: \"leg3\",\r\n            parent: \"root\",\r\n            pivot: [3, 8, -6],\r\n            cubes: [{ origin: [1, 0, -8], size: [4, 8, 4], uv: [0, 40] }],\r\n          },\r\n        ];\r\n\r\n      case \"slime\":\r\n        return [\r\n          {\r\n            name: \"root\",\r\n            pivot: [0, 0, 0],\r\n          },\r\n          {\r\n            name: \"body\",\r\n            parent: \"root\",\r\n            pivot: [0, 8, 0],\r\n            cubes: [{ origin: [-4, 0, -4], size: [8, 8, 8], uv: [0, 0] }],\r\n          },\r\n        ];\r\n\r\n      default:\r\n        // Simple cube for unknown types\r\n        return [\r\n          {\r\n            name: \"root\",\r\n            pivot: [0, 0, 0],\r\n          },\r\n          {\r\n            name: \"body\",\r\n            parent: \"root\",\r\n            pivot: [0, 8, 0],\r\n            cubes: [{ origin: [-4, 0, -4], size: [8, 16, 8], uv: [0, 0] }],\r\n          },\r\n        ];\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate an entity placeholder texture PNG with distinct colors per body part.\r\n   * Creates a 64x64 texture where each UV region (head, body, arms, legs) gets a\r\n   * unique color derived from the entity's primary/secondary colors, with subtle\r\n   * noise for visual interest.\r\n   * Returns Uint8Array PNG data.\r\n   */\r\n  private async _generateEntityTexturePlaceholder(entity: IEntityTypeDefinition): Promise<Uint8Array> {\r\n    const appearance = entity.appearance || {};\r\n    const bodyType = appearance.bodyType || \"humanoid\";\r\n    const primaryColor = appearance.primaryColor || \"#5B8C3E\";\r\n    const secondaryColor = appearance.secondaryColor || \"#3D6B2E\";\r\n\r\n    const width = 64;\r\n    const height = 64;\r\n    const pixels = new Uint8Array(width * height * 4);\r\n\r\n    const parseHex = (hex: string): { r: number; g: number; b: number } => {\r\n      const h = hex.startsWith(\"#\") ? hex.slice(1) : hex;\r\n      return {\r\n        r: parseInt(h.slice(0, 2), 16) || 128,\r\n        g: parseInt(h.slice(2, 4), 16) || 128,\r\n        b: parseInt(h.slice(4, 6), 16) || 128,\r\n      };\r\n    };\r\n\r\n    const primary = parseHex(primaryColor);\r\n    const secondary = parseHex(secondaryColor);\r\n\r\n    // Derive a palette of distinct body-part colors from primary/secondary\r\n    const shiftColor = (\r\n      base: { r: number; g: number; b: number },\r\n      hShift: number,\r\n      brightnessShift: number\r\n    ): { r: number; g: number; b: number } => {\r\n      // Simple hue rotation and brightness adjustment\r\n      const r = Math.max(0, Math.min(255, Math.round(base.r * (1 + brightnessShift) + hShift)));\r\n      const g = Math.max(0, Math.min(255, Math.round(base.g * (1 + brightnessShift) - hShift * 0.5)));\r\n      const b = Math.max(0, Math.min(255, Math.round(base.b * (1 + brightnessShift) + hShift * 0.3)));\r\n      return { r, g, b };\r\n    };\r\n\r\n    // Body part color palette\r\n    const headColor = shiftColor(primary, 10, 0.15); // Slightly brighter\r\n    const bodyColor = primary;\r\n    const armColor = shiftColor(secondary, -5, 0.05);\r\n    const legColor = secondary;\r\n    const bellyColor = shiftColor(primary, 5, 0.25); // Lighter for undersides\r\n\r\n    // Simple seeded noise for texture variation\r\n    const noise = (x: number, y: number, seed: number): number => {\r\n      const n = Math.sin(x * 127.1 + y * 311.7 + seed * 113.5) * 43758.5453;\r\n      return n - Math.floor(n);\r\n    };\r\n\r\n    // Fill a rectangular region with a color + subtle noise\r\n    const fillRegion = (\r\n      rx: number,\r\n      ry: number,\r\n      rw: number,\r\n      rh: number,\r\n      color: { r: number; g: number; b: number },\r\n      noiseAmount: number = 12,\r\n      seed: number = 0\r\n    ) => {\r\n      for (let y = ry; y < ry + rh && y < height; y++) {\r\n        for (let x = rx; x < rx + rw && x < width; x++) {\r\n          const idx = (y * width + x) * 4;\r\n          const n = (noise(x, y, seed) - 0.5) * noiseAmount;\r\n          pixels[idx] = Math.max(0, Math.min(255, Math.round(color.r + n)));\r\n          pixels[idx + 1] = Math.max(0, Math.min(255, Math.round(color.g + n)));\r\n          pixels[idx + 2] = Math.max(0, Math.min(255, Math.round(color.b + n)));\r\n          pixels[idx + 3] = 255;\r\n        }\r\n      }\r\n    };\r\n\r\n    // Fill the entire texture with a transparent/dark base first\r\n    const bgColor = shiftColor(secondary, 0, -0.3);\r\n    fillRegion(0, 0, width, height, bgColor, 6, 99);\r\n\r\n    // Paint UV regions based on body type\r\n    if (bodyType === \"humanoid\") {\r\n      // Classic Minecraft skin UV layout (64x64)\r\n      // Head (uv 0,0): top/bottom at (8,0)-(15,7), front at (8,8)-(15,15), sides around\r\n      fillRegion(0, 0, 32, 16, headColor, 10, 1); // Head area\r\n      // Eyes region - slightly darker strip across front face of head\r\n      const eyeColor = shiftColor({ r: 20, g: 20, b: 20 }, 0, 0);\r\n      fillRegion(10, 12, 4, 2, eyeColor, 3, 50); // Simple eye dots on front face\r\n\r\n      // Body (uv 16,16): torso\r\n      fillRegion(16, 16, 24, 16, bodyColor, 10, 2);\r\n      // Lighter belly area on front face of body\r\n      fillRegion(20, 20, 8, 12, bellyColor, 8, 3);\r\n\r\n      // Left leg (uv 0,16)\r\n      fillRegion(0, 16, 16, 16, legColor, 10, 4);\r\n      // Right leg (uv 16,48)\r\n      fillRegion(16, 48, 16, 16, legColor, 10, 5);\r\n\r\n      // Left arm (uv 40,16)\r\n      fillRegion(40, 16, 16, 16, armColor, 10, 6);\r\n      // Right arm (uv 32,48)\r\n      fillRegion(32, 48, 16, 16, armColor, 10, 7);\r\n    } else if (bodyType === \"quadruped\" || bodyType === \"quadruped_small\") {\r\n      // Quadruped UV layout\r\n      // Body (uv 0,0): large body\r\n      fillRegion(0, 0, 36, 26, bodyColor, 10, 1);\r\n      // Lighter belly\r\n      fillRegion(10, 10, 10, 10, bellyColor, 8, 2);\r\n\r\n      // Head (uv 0,26)\r\n      fillRegion(0, 26, 22, 14, headColor, 10, 3);\r\n      // Snout/nose darker area\r\n      const noseColor = shiftColor(secondary, 0, -0.15);\r\n      fillRegion(6, 34, 4, 3, noseColor, 5, 40);\r\n\r\n      // Legs (uv 0,40) - all four legs share UV\r\n      fillRegion(0, 40, 16, 16, legColor, 10, 4);\r\n    } else if (bodyType === \"slime\") {\r\n      // Slime: single cube body\r\n      fillRegion(0, 0, 32, 16, bodyColor, 15, 1);\r\n      // Slight translucent/lighter center\r\n      fillRegion(8, 8, 8, 8, bellyColor, 10, 2);\r\n    } else if (bodyType === \"insect\") {\r\n      // Spider-like: body + head + legs\r\n      fillRegion(0, 0, 32, 16, bodyColor, 10, 1);\r\n      fillRegion(0, 16, 24, 12, headColor, 10, 2);\r\n      // Legs\r\n      fillRegion(24, 16, 16, 16, legColor, 10, 3);\r\n      // Eyes\r\n      const eyeColor2 = { r: 200, g: 20, b: 20 };\r\n      fillRegion(8, 22, 3, 2, eyeColor2, 5, 50);\r\n      fillRegion(14, 22, 3, 2, eyeColor2, 5, 51);\r\n    } else if (bodyType === \"flying\" || bodyType === \"bird\") {\r\n      // Flying creature\r\n      fillRegion(0, 0, 32, 16, bodyColor, 10, 1);\r\n      fillRegion(0, 16, 24, 16, headColor, 10, 2);\r\n      // Wings\r\n      const wingColor = shiftColor(primary, 15, 0.1);\r\n      fillRegion(24, 16, 24, 16, wingColor, 12, 3);\r\n      fillRegion(0, 32, 32, 16, wingColor, 12, 4);\r\n    } else if (bodyType === \"fish\") {\r\n      // Fish: body + fins\r\n      fillRegion(0, 0, 24, 16, bodyColor, 10, 1);\r\n      // Lighter belly stripe\r\n      fillRegion(6, 8, 12, 4, bellyColor, 8, 2);\r\n      // Fins\r\n      const finColor = shiftColor(primary, 20, 0.15);\r\n      fillRegion(24, 0, 16, 16, finColor, 10, 3);\r\n      fillRegion(0, 16, 20, 16, finColor, 10, 4);\r\n    } else {\r\n      // Generic fallback - paint body-sized regions in distinct colors\r\n      fillRegion(0, 0, 32, 16, headColor, 10, 1);\r\n      fillRegion(0, 16, 32, 16, bodyColor, 10, 2);\r\n      fillRegion(32, 0, 32, 32, armColor, 10, 3);\r\n      fillRegion(0, 32, 32, 32, legColor, 10, 4);\r\n      fillRegion(32, 32, 32, 32, bellyColor, 8, 5);\r\n    }\r\n\r\n    // Try runtime encoding \u2013 sync first, then async browser Canvas, fall back to pre-encoded placeholder\r\n    let encoded = ImageCodec.encodeToPngSync(pixels, width, height);\r\n    if (!encoded) {\r\n      encoded = await ImageCodec.encodeToPngBrowser(pixels, width, height);\r\n    }\r\n    return encoded || PngEncoder.getPlaceholderTexture(\"entity\");\r\n  }\r\n\r\n  /**\r\n   * Render an ITextureSpec to PNG bytes.\r\n   *\r\n   * Precedence:\r\n   *   1. If `spec` is a string or `spec.file` is set, the caller should use that file reference\r\n   *      directly \u2014 this helper returns `undefined` so no placeholder PNG is emitted.\r\n   *   2. If `spec.generate` and/or `spec.pixelArt` is set, build the PNG procedurally.\r\n   *      - `generate` controls the background (use type: \"none\" for a transparent background).\r\n   *      - `pixelArt` layers are drawn on top.\r\n   *      - `spec.effects` are applied last.\r\n   *   3. Returns `undefined` if the spec has nothing renderable.\r\n   */\r\n  private async _renderTextureSpecToPng(\r\n    spec: string | ITextureSpec | undefined,\r\n    width: number,\r\n    height: number,\r\n    contextString: string\r\n  ): Promise<Uint8Array | undefined> {\r\n    if (!spec) {\r\n      return undefined;\r\n    }\r\n\r\n    // String shorthand = file reference; caller should skip placeholder.\r\n    if (typeof spec === \"string\") {\r\n      return undefined;\r\n    }\r\n\r\n    // Explicit file reference = skip placeholder.\r\n    if (spec.file) {\r\n      return undefined;\r\n    }\r\n\r\n    const hasGenerate = !!spec.generate;\r\n    const hasPixelArt = spec.pixelArt && spec.pixelArt.length > 0;\r\n\r\n    if (!hasGenerate && !hasPixelArt && !spec.effects) {\r\n      return undefined;\r\n    }\r\n\r\n    // Build background. Default is transparent when only pixelArt is specified.\r\n    let pixels: Uint8Array;\r\n    if (hasGenerate) {\r\n      pixels = TexturedRectangleGenerator.generatePixels(spec.generate!, width, height, contextString);\r\n    } else {\r\n      pixels = new Uint8Array(width * height * 4); // transparent\r\n    }\r\n\r\n    // Overlay pixel art layers.\r\n    if (hasPixelArt) {\r\n      TexturedRectangleGenerator.applyPixelArtLayers(pixels, width, height, spec.pixelArt!);\r\n    }\r\n\r\n    // Apply post-processing effects.\r\n    if (spec.effects) {\r\n      applyTextureEffects(pixels, width, height, spec.effects);\r\n    }\r\n\r\n    // Encode. Try sync first, then async (browser).\r\n    let encoded = ImageCodec.encodeToPngSync(pixels, width, height);\r\n    if (!encoded) {\r\n      encoded = await ImageCodec.encodeToPngBrowser(pixels, width, height);\r\n    }\r\n    return encoded || undefined;\r\n  }\r\n\r\n  /**\r\n   * Pick the most representative face from an IBlockTexture to drive the single-PNG\r\n   * placeholder we currently emit per block. Preference order: all, side, up, north,\r\n   * south, east, west, down.\r\n   */\r\n  private _pickBlockFaceTexture(texture: IBlockTexture | undefined): string | ITextureSpec | undefined {\r\n    if (!texture) {\r\n      return undefined;\r\n    }\r\n    return (\r\n      texture.all ??\r\n      texture.side ??\r\n      texture.up ??\r\n      texture.north ??\r\n      texture.south ??\r\n      texture.east ??\r\n      texture.west ??\r\n      texture.down\r\n    );\r\n  }\r\n\r\n  // ============================================================================\r\n  // BLOCK GENERATION\r\n  // ============================================================================\r\n\r\n  private async _generateBlock(block: IBlockTypeDefinition, result: IGeneratedContent): Promise<void> {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(block.id);\r\n    const fullId = `${this._namespace}:${block.id}`;\r\n\r\n    let components: Record<string, any> = {};\r\n    let properties: Record<string, any[]> = {};\r\n    let permutations: any[] = [];\r\n    let blockEvents: Record<string, any> = {};\r\n    let minecraftTraits: Record<string, any> = {};\r\n\r\n    // Apply traits using the new trait system\r\n    if (block.traits) {\r\n      for (const traitId of block.traits) {\r\n        // First try the new registry-based traits\r\n        const trait = TraitRegistry.getBlockTrait(traitId);\r\n        if (trait) {\r\n          const traitData = trait.getData({\r\n            hardness: block.destroyTime,\r\n            lightLevel: block.lightEmission,\r\n          });\r\n\r\n          // Merge components\r\n          if (traitData.components) {\r\n            components = { ...components, ...traitData.components };\r\n          }\r\n\r\n          // Merge properties\r\n          if (traitData.properties) {\r\n            properties = { ...properties, ...traitData.properties };\r\n          }\r\n\r\n          // Merge permutations\r\n          if (traitData.permutations) {\r\n            permutations = [...permutations, ...traitData.permutations];\r\n          }\r\n\r\n          // Merge events\r\n          if (traitData.events) {\r\n            blockEvents = { ...blockEvents, ...traitData.events };\r\n          }\r\n\r\n          // Merge Minecraft-native traits (e.g., minecraft:placement_position, minecraft:connection)\r\n          if (traitData.minecraftTraits) {\r\n            minecraftTraits = { ...minecraftTraits, ...traitData.minecraftTraits };\r\n          }\r\n\r\n          // Add geometry files to resource pack\r\n          if (traitData.geometryFiles) {\r\n            for (const geoFile of traitData.geometryFiles) {\r\n              result.geometries.push({\r\n                path: geoFile.path,\r\n                pack: \"resource\",\r\n                type: \"json\",\r\n                content: geoFile.content,\r\n              });\r\n            }\r\n          }\r\n        } else {\r\n          // Fall back to legacy BLOCK_TRAIT_COMPONENTS lookup\r\n          const traitComponents = BLOCK_TRAIT_COMPONENTS[traitId];\r\n          if (traitComponents) {\r\n            components = { ...components, ...traitComponents };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Apply simplified properties\r\n    if (block.destroyTime !== undefined) {\r\n      components[\"minecraft:destructible_by_mining\"] = { seconds_to_destroy: block.destroyTime };\r\n    }\r\n    if (block.explosionResistance !== undefined) {\r\n      components[\"minecraft:destructible_by_explosion\"] = { explosion_resistance: block.explosionResistance };\r\n    }\r\n    if (block.friction !== undefined) {\r\n      components[\"minecraft:friction\"] = block.friction;\r\n    }\r\n    if (block.lightEmission !== undefined) {\r\n      components[\"minecraft:light_emission\"] = block.lightEmission;\r\n    }\r\n    if (block.lightDampening !== undefined) {\r\n      components[\"minecraft:light_dampening\"] = block.lightDampening;\r\n    }\r\n    if (block.mapColor !== undefined) {\r\n      components[\"minecraft:map_color\"] = block.mapColor;\r\n    }\r\n\r\n    // Flammability\r\n    if (block.flammable) {\r\n      if (typeof block.flammable === \"boolean\") {\r\n        components[\"minecraft:flammable\"] = { catch_chance_modifier: 5, destroy_chance_modifier: 20 };\r\n      } else {\r\n        components[\"minecraft:flammable\"] = {\r\n          catch_chance_modifier: Math.floor(block.flammable.catchChance * 100),\r\n          destroy_chance_modifier: Math.floor(block.flammable.destroyChance * 100),\r\n        };\r\n      }\r\n    }\r\n\r\n    // Add geometry for blocks that don't already have one (solid cubes need minecraft:geometry.full_block)\r\n    if (!components[\"minecraft:geometry\"]) {\r\n      components[\"minecraft:geometry\"] = \"minecraft:geometry.full_block\";\r\n    }\r\n\r\n    // Add material_instances to reference our generated texture\r\n    const textureKey = `${this._namespace}_${block.id}`;\r\n    if (!components[\"minecraft:material_instances\"]) {\r\n      components[\"minecraft:material_instances\"] = {\r\n        \"*\": {\r\n          texture: textureKey,\r\n          render_method: \"opaque\",\r\n        },\r\n      };\r\n    }\r\n\r\n    // Apply native components\r\n    if (block.components) {\r\n      components = { ...components, ...block.components };\r\n    }\r\n\r\n    // Use 1.26.0 if connection trait is used (requires that version), otherwise 1.21.40\r\n    const blockFormatVersion = minecraftTraits[\"minecraft:connection\"] ? \"1.26.0\" : \"1.21.40\";\r\n\r\n    const behaviorBlock: any = {\r\n      format_version: blockFormatVersion,\r\n      \"minecraft:block\": {\r\n        description: {\r\n          identifier: fullId,\r\n          menu_category: {\r\n            category: \"construction\",\r\n          },\r\n        },\r\n        components,\r\n      },\r\n    };\r\n\r\n    // Merge properties/states from traits with those specified directly\r\n    const mergedProperties = { ...properties };\r\n    if (block.states) {\r\n      for (const [key, value] of Object.entries(block.states)) {\r\n        mergedProperties[key] = value;\r\n      }\r\n    }\r\n    if (Object.keys(mergedProperties).length > 0) {\r\n      behaviorBlock[\"minecraft:block\"].description.states = mergedProperties;\r\n    }\r\n\r\n    // Add Minecraft-native traits to description\r\n    if (Object.keys(minecraftTraits).length > 0) {\r\n      behaviorBlock[\"minecraft:block\"].description.traits = minecraftTraits;\r\n    }\r\n\r\n    // Merge permutations from traits with those specified directly\r\n    const mergedPermutations = [...permutations];\r\n    if (block.permutations) {\r\n      mergedPermutations.push(...block.permutations);\r\n    }\r\n    if (mergedPermutations.length > 0) {\r\n      behaviorBlock[\"minecraft:block\"].permutations = mergedPermutations;\r\n    }\r\n\r\n    // Add events if we have any from traits\r\n    if (Object.keys(blockEvents).length > 0) {\r\n      behaviorBlock[\"minecraft:block\"].events = blockEvents;\r\n    }\r\n\r\n    result.blockBehaviors.push({\r\n      path: `blocks/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: behaviorBlock,\r\n    });\r\n\r\n    // Generate placeholder texture for the block\r\n    const texture = await this._generateBlockTexturePlaceholder(block);\r\n    if (texture) {\r\n      result.textures.push({\r\n        path: `textures/blocks/${safeId}.png`,\r\n        pack: \"resource\",\r\n        type: \"png\",\r\n        content: texture,\r\n      });\r\n    }\r\n\r\n    // Generate loot table from drops\r\n    if (block.drops && block.drops.length > 0) {\r\n      const lootTable = this._generateLootTableFromDrops(block.id, block.drops, \"blocks\");\r\n      result.lootTables.push(lootTable);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate a placeholder texture for a block.\r\n   *\r\n   * Precedence:\r\n   *   1. `block.texture` (ITextureSpec) \u2014 rendered via _renderTextureSpecToPng.\r\n   *   2. `block.mapColor` \u2014 checkerboard fallback.\r\n   *\r\n   * Returns undefined if block.texture is a string/file reference (no placeholder needed).\r\n   */\r\n  private async _generateBlockTexturePlaceholder(block: IBlockTypeDefinition): Promise<Uint8Array | undefined> {\r\n    // 1. Honor block.texture if it specifies inline generate/pixelArt content.\r\n    const faceSpec = this._pickBlockFaceTexture(block.texture);\r\n    if (faceSpec) {\r\n      const rendered = await this._renderTextureSpecToPng(faceSpec, 16, 16, `block-${block.id}`);\r\n      if (rendered) {\r\n        return rendered;\r\n      }\r\n      // String or { file: ... } means \"use an existing file\" \u2014 don't emit a placeholder.\r\n      if (typeof faceSpec === \"string\" || faceSpec.file) {\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    // 2. Fallback: checkerboard from mapColor.\r\n    const primaryColor = block.mapColor || \"#808080\";\r\n    const secondaryColor = this._darkenColor(primaryColor, 0.15);\r\n\r\n    const custom = await PngEncoder.createCheckerboardPngAsync(16, 16, primaryColor, secondaryColor, 4);\r\n    return custom || PngEncoder.getPlaceholderTexture(\"block\");\r\n  }\r\n\r\n  /**\r\n   * Darken a hex color by a percentage.\r\n   */\r\n  private _darkenColor(hex: string, percent: number): string {\r\n    // Parse hex color\r\n    let r = parseInt(hex.slice(1, 3), 16);\r\n    let g = parseInt(hex.slice(3, 5), 16);\r\n    let b = parseInt(hex.slice(5, 7), 16);\r\n\r\n    // Darken\r\n    r = Math.max(0, Math.floor(r * (1 - percent)));\r\n    g = Math.max(0, Math.floor(g * (1 - percent)));\r\n    b = Math.max(0, Math.floor(b * (1 - percent)));\r\n\r\n    // Convert back to hex\r\n    return `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\r\n  }\r\n\r\n  // ============================================================================\r\n  // ITEM GENERATION\r\n  // ============================================================================\r\n\r\n  private async _generateItem(item: IItemTypeDefinition, result: IGeneratedContent): Promise<void> {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(item.id);\r\n    const fullId = `${this._namespace}:${item.id}`;\r\n\r\n    let components: Record<string, any> = {};\r\n    let itemEvents: Record<string, any> = {};\r\n    let attachableData: any = undefined;\r\n\r\n    // Apply traits using the new trait system\r\n    if (item.traits) {\r\n      for (const traitId of item.traits) {\r\n        // First try the new registry-based traits\r\n        const trait = TraitRegistry.getItemTrait(traitId);\r\n        if (trait) {\r\n          const traitData = trait.getData({\r\n            damage: item.weapon?.damage,\r\n            durability: item.durability,\r\n            protection: item.armor?.defense,\r\n            nutrition: item.food?.nutrition,\r\n            saturation: item.food?.saturation,\r\n          });\r\n\r\n          // Merge components\r\n          if (traitData.components) {\r\n            components = { ...components, ...traitData.components };\r\n          }\r\n\r\n          // Merge events\r\n          if (traitData.events) {\r\n            itemEvents = { ...itemEvents, ...traitData.events };\r\n          }\r\n\r\n          // Collect attachable data\r\n          if (traitData.attachable && !attachableData) {\r\n            attachableData = traitData.attachable;\r\n          }\r\n        } else {\r\n          // Fall back to legacy ITEM_TRAIT_COMPONENTS lookup\r\n          const traitComponents = ITEM_TRAIT_COMPONENTS[traitId];\r\n          if (traitComponents) {\r\n            components = { ...components, ...traitComponents };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Apply simplified properties\r\n    if (item.maxStackSize !== undefined) {\r\n      components[\"minecraft:max_stack_size\"] = item.maxStackSize;\r\n    }\r\n    if (item.durability !== undefined) {\r\n      components[\"minecraft:durability\"] = { max_durability: item.durability };\r\n    }\r\n    if (item.glint) {\r\n      components[\"minecraft:glint\"] = true;\r\n    }\r\n    if (item.fuel !== undefined) {\r\n      components[\"minecraft:fuel\"] = { duration: item.fuel / 20 }; // Convert ticks to seconds\r\n    }\r\n\r\n    // Food properties\r\n    if (item.food) {\r\n      components[\"minecraft:food\"] = {\r\n        nutrition: item.food.nutrition,\r\n        saturation_modifier: item.food.saturation !== undefined ? \"custom\" : \"normal\",\r\n        can_always_eat: item.food.canAlwaysEat || false,\r\n      };\r\n      if (item.food.effects) {\r\n        components[\"minecraft:food\"].effects = item.food.effects.map((e) => ({\r\n          name: e.name,\r\n          duration: e.duration,\r\n          amplifier: e.amplifier || 0,\r\n          chance: e.chance || 1.0,\r\n        }));\r\n      }\r\n    }\r\n\r\n    // Weapon properties\r\n    if (item.weapon) {\r\n      components[\"minecraft:damage\"] = item.weapon.damage;\r\n      if (item.weapon.durability) {\r\n        components[\"minecraft:durability\"] = { max_durability: item.weapon.durability };\r\n      }\r\n    }\r\n\r\n    // Armor properties\r\n    if (item.armor) {\r\n      const slotMap: Record<string, string> = {\r\n        helmet: \"slot.armor.head\",\r\n        chestplate: \"slot.armor.chest\",\r\n        leggings: \"slot.armor.legs\",\r\n        boots: \"slot.armor.feet\",\r\n      };\r\n      components[\"minecraft:wearable\"] = {\r\n        slot: slotMap[item.armor.slot] || \"slot.armor.chest\",\r\n      };\r\n      components[\"minecraft:armor\"] = { protection: item.armor.defense };\r\n      components[\"minecraft:durability\"] = { max_durability: item.armor.durability };\r\n    }\r\n\r\n    // Tool properties\r\n    if (item.tool) {\r\n      components[\"minecraft:durability\"] = { max_durability: item.tool.durability };\r\n    }\r\n\r\n    // Projectile properties (bow/crossbow-style chargeable shooters, or throwables like snowballs).\r\n    if (item.projectile) {\r\n      const projectileEntityId = item.projectile.projectile.includes(\":\")\r\n        ? item.projectile.projectile\r\n        : `minecraft:${item.projectile.projectile}`;\r\n      const launchPower = item.projectile.launchPower ?? 1.0;\r\n\r\n      if (item.projectile.chargeable) {\r\n        // Bow/crossbow: charge-while-held + release-to-shoot.\r\n        components[\"minecraft:shooter\"] = {\r\n          projectiles: [\r\n            {\r\n              projectile: projectileEntityId,\r\n              launch_power_scale: launchPower,\r\n            },\r\n          ],\r\n        };\r\n        components[\"minecraft:chargeable\"] = { movement_modifier: 0.5 };\r\n        components[\"minecraft:use_modifiers\"] = { use_duration: 999999, movement_modifier: 0.5 };\r\n      } else {\r\n        // Throwable (snowball/egg style): single-use, no charge.\r\n        components[\"minecraft:throwable\"] = {\r\n          do_swing_animation: true,\r\n          launch_power_scale: launchPower,\r\n          max_draw_duration: 0,\r\n          max_launch_power: launchPower,\r\n          min_draw_duration: 0,\r\n          scale_power_by_draw_duration: false,\r\n        };\r\n        components[\"minecraft:projectile\"] = {\r\n          projectile_entity: projectileEntityId,\r\n        };\r\n      }\r\n    }\r\n\r\n    // Add icon component using string shorthand (1.21.70+ format)\r\n    const textureKey = `${this._namespace}:${item.id}`;\r\n    if (!components[\"minecraft:icon\"]) {\r\n      components[\"minecraft:icon\"] = textureKey;\r\n    }\r\n\r\n    // Apply native components\r\n    if (item.components) {\r\n      components = { ...components, ...item.components };\r\n    }\r\n\r\n    const behaviorItem: any = {\r\n      format_version: \"1.21.70\",\r\n      \"minecraft:item\": {\r\n        description: {\r\n          identifier: fullId,\r\n          menu_category: {\r\n            category: item.category || \"items\",\r\n          },\r\n        },\r\n        components,\r\n      },\r\n    };\r\n\r\n    result.itemBehaviors.push({\r\n      path: `items/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: behaviorItem,\r\n    });\r\n\r\n    // Generate placeholder texture for the item\r\n    const texture = await this._generateItemTexturePlaceholder(item);\r\n    if (texture) {\r\n      result.textures.push({\r\n        path: `textures/items/${safeId}.png`,\r\n        pack: \"resource\",\r\n        type: \"png\",\r\n        content: texture,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate a placeholder texture for an item.\r\n   *\r\n   * Precedence:\r\n   *   1. `item.icon` (ITextureSpec) \u2014 rendered via _renderTextureSpecToPng. If it's a\r\n   *      string/file reference, no placeholder is emitted (caller should skip).\r\n   *   2. `item.traits` \u2014 shaped template (sword/pickaxe/etc.) recolored with item.color.\r\n   *   3. Fallback \u2014 checkerboard with item.color.\r\n   */\r\n  private async _generateItemTexturePlaceholder(item: IItemTypeDefinition): Promise<Uint8Array | undefined> {\r\n    // 1. Honor item.icon if it specifies inline generate/pixelArt content.\r\n    if (item.icon !== undefined) {\r\n      const rendered = await this._renderTextureSpecToPng(item.icon, 16, 16, `item-${item.id}`);\r\n      if (rendered) {\r\n        return rendered;\r\n      }\r\n      // String or { file: ... } means \"use an existing file\" \u2014 don't emit a placeholder.\r\n      if (typeof item.icon === \"string\" || item.icon.file) {\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    const color = item.color || \"#808080\";\r\n\r\n    // 2. Try template-based generation (shaped icons recolored to user's color).\r\n    if (item.traits) {\r\n      const templateTexture = await generateItemTextureFromTemplate(item.traits, color);\r\n      if (templateTexture) {\r\n        return templateTexture;\r\n      }\r\n    }\r\n\r\n    // 3. Fallback: checkerboard with the user's color.\r\n    const secondaryColor = this._darkenColor(color, 0.2);\r\n    const custom = await PngEncoder.createCheckerboardPngAsync(16, 16, color, secondaryColor, 4);\r\n    return custom || PngEncoder.getPlaceholderTexture(\"item\");\r\n  }\r\n\r\n  /**\r\n   * Generate terrain_texture.json content for all blocks.\r\n   */\r\n  private _generateTerrainTextures(blocks: IBlockTypeDefinition[]): IGeneratedFile {\r\n    const textureData: Record<string, { textures: string }> = {};\r\n\r\n    for (const block of blocks) {\r\n      const textureKey = `${this._namespace}_${block.id}`;\r\n      textureData[textureKey] = {\r\n        textures: `textures/blocks/${block.id}`,\r\n      };\r\n    }\r\n\r\n    return {\r\n      path: \"textures/terrain_texture.json\",\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: {\r\n        resource_pack_name: this._namespace,\r\n        texture_name: \"atlas.terrain\",\r\n        padding: 8,\r\n        num_mip_levels: 4,\r\n        texture_data: textureData,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Generate item_texture.json content for all items.\r\n   */\r\n  private _generateItemTextures(items: IItemTypeDefinition[]): IGeneratedFile {\r\n    const textureData: Record<string, { textures: string }> = {};\r\n\r\n    for (const item of items) {\r\n      const textureKey = `${this._namespace}:${item.id}`;\r\n      textureData[textureKey] = {\r\n        textures: `textures/items/${item.id}`,\r\n      };\r\n    }\r\n\r\n    return {\r\n      path: \"textures/item_texture.json\",\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: {\r\n        resource_pack_name: this._namespace,\r\n        texture_name: \"atlas.items\",\r\n        texture_data: textureData,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Generate blocks.json catalog for the resource pack.\r\n   * This maps block identifiers to their texture and sound references.\r\n   */\r\n  private _generateBlocksCatalog(blocks: IBlockTypeDefinition[]): IGeneratedFile {\r\n    const blockEntries: Record<string, any> = {};\r\n\r\n    for (const block of blocks) {\r\n      const fullId = `${this._namespace}:${block.id}`;\r\n      const textureKey = `${this._namespace}_${block.id}`;\r\n      const entry: any = {\r\n        textures: textureKey,\r\n      };\r\n\r\n      if (block.sounds) {\r\n        entry.sound = block.sounds;\r\n      }\r\n\r\n      blockEntries[fullId] = entry;\r\n    }\r\n\r\n    return {\r\n      path: \"blocks.json\",\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: blockEntries,\r\n    };\r\n  }\r\n\r\n  // ============================================================================\r\n  // LOOT TABLE GENERATION\r\n  // ============================================================================\r\n\r\n  private _generateLootTable(lootTable: ILootTableDefinition, result: IGeneratedContent): void {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(lootTable.id);\r\n    const nativeLootTable: any = {\r\n      pools: lootTable.pools.map((pool) => ({\r\n        rolls: pool.rolls,\r\n        entries: pool.entries.map((entry) => ({\r\n          type: \"item\",\r\n          name: entry.item.includes(\":\") ? entry.item : `minecraft:${entry.item}`,\r\n          weight: entry.weight || 1,\r\n          functions: this._buildLootFunctions(entry),\r\n        })),\r\n        conditions: pool.conditions?.map((c) => this._buildLootCondition(c)),\r\n      })),\r\n    };\r\n\r\n    result.lootTables.push({\r\n      path: `loot_tables/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: nativeLootTable,\r\n    });\r\n  }\r\n\r\n  private _generateLootTableFromDrops(\r\n    id: string,\r\n    drops: IDropDefinition[],\r\n    folder: string = \"entities\"\r\n  ): IGeneratedFile {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(id);\r\n    const safeFolder = ContentGenerator._sanitizeIdForPath(folder);\r\n    const entries = drops.map((drop) => ({\r\n      type: \"item\",\r\n      name: drop.item.includes(\":\") ? drop.item : `minecraft:${drop.item}`,\r\n      weight: 1,\r\n      functions: this._buildLootFunctions({\r\n        count: drop.count,\r\n        lootingBonus: drop.lootingBonus,\r\n      }),\r\n    }));\r\n\r\n    return {\r\n      path: `loot_tables/${safeFolder}/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: {\r\n        pools: [\r\n          {\r\n            rolls: 1,\r\n            entries,\r\n          },\r\n        ],\r\n      },\r\n    };\r\n  }\r\n\r\n  private _buildLootFunctions(entry: {\r\n    count?: number | { min: number; max: number };\r\n    lootingBonus?: number;\r\n  }): ILootFunction[] | undefined {\r\n    const functions: ILootFunction[] = [];\r\n\r\n    if (entry.count) {\r\n      if (typeof entry.count === \"number\") {\r\n        functions.push({ function: \"set_count\", count: entry.count });\r\n      } else {\r\n        functions.push({\r\n          function: \"set_count\",\r\n          count: { min: entry.count.min, max: entry.count.max },\r\n        });\r\n      }\r\n    }\r\n\r\n    if (entry.lootingBonus) {\r\n      functions.push({\r\n        function: \"looting_enchant\",\r\n        count: { min: 0, max: entry.lootingBonus },\r\n      });\r\n    }\r\n\r\n    return functions.length > 0 ? functions : undefined;\r\n  }\r\n\r\n  private _buildLootCondition(condition: { type: string; chance?: number }): ILootCondition {\r\n    switch (condition.type) {\r\n      case \"killed_by_player\":\r\n        return { condition: \"killed_by_player\" };\r\n      case \"random_chance\":\r\n        return { condition: \"random_chance\", chance: condition.chance };\r\n      default:\r\n        return { condition: condition.type };\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // RECIPE GENERATION\r\n  // ============================================================================\r\n\r\n  private _generateRecipe(recipe: IRecipeDefinition, result: IGeneratedContent): void {\r\n    let nativeRecipe: any;\r\n\r\n    const resultItem =\r\n      typeof recipe.result === \"string\"\r\n        ? { item: recipe.result, count: 1 }\r\n        : { item: recipe.result.item, count: recipe.result.count };\r\n\r\n    switch (recipe.type) {\r\n      case \"shaped\":\r\n        nativeRecipe = {\r\n          format_version: \"1.21.0\",\r\n          \"minecraft:recipe_shaped\": {\r\n            description: { identifier: `${this._namespace}:${recipe.id}` },\r\n            tags: [\"crafting_table\"],\r\n            pattern: recipe.pattern,\r\n            key: Object.fromEntries(\r\n              Object.entries(recipe.key || {}).map(([k, v]) => [k, { item: v.includes(\":\") ? v : `minecraft:${v}` }])\r\n            ),\r\n            result: {\r\n              item: resultItem.item.includes(\":\") ? resultItem.item : `${this._namespace}:${resultItem.item}`,\r\n              count: resultItem.count,\r\n            },\r\n          },\r\n        };\r\n        break;\r\n\r\n      case \"shapeless\":\r\n        nativeRecipe = {\r\n          format_version: \"1.21.0\",\r\n          \"minecraft:recipe_shapeless\": {\r\n            description: { identifier: `${this._namespace}:${recipe.id}` },\r\n            tags: [\"crafting_table\"],\r\n            ingredients: (recipe.ingredients || []).map((i) => ({\r\n              item: i.includes(\":\") ? i : `minecraft:${i}`,\r\n            })),\r\n            result: {\r\n              item: resultItem.item.includes(\":\") ? resultItem.item : `${this._namespace}:${resultItem.item}`,\r\n              count: resultItem.count,\r\n            },\r\n          },\r\n        };\r\n        break;\r\n\r\n      case \"furnace\":\r\n        nativeRecipe = {\r\n          format_version: \"1.21.0\",\r\n          \"minecraft:recipe_furnace\": {\r\n            description: { identifier: `${this._namespace}:${recipe.id}` },\r\n            tags: [\"furnace\"],\r\n            input: recipe.input?.includes(\":\") ? recipe.input : `minecraft:${recipe.input}`,\r\n            output: resultItem.item.includes(\":\") ? resultItem.item : `${this._namespace}:${resultItem.item}`,\r\n          },\r\n        };\r\n        break;\r\n\r\n      default:\r\n        this._warnings.push(`Unsupported recipe type: ${recipe.type}`);\r\n        return;\r\n    }\r\n\r\n    result.recipes.push({\r\n      path: `recipes/${ContentGenerator._sanitizeIdForPath(recipe.id)}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: nativeRecipe,\r\n    });\r\n  }\r\n\r\n  // ============================================================================\r\n  // SPAWN RULE GENERATION\r\n  // ============================================================================\r\n\r\n  private _generateSpawnRule(spawnRule: ISpawnRuleDefinition, result: IGeneratedContent): void {\r\n    const entityId = spawnRule.entity.includes(\":\") ? spawnRule.entity : `${this._namespace}:${spawnRule.entity}`;\r\n\r\n    const nativeSpawnRule: any = {\r\n      format_version: \"1.8.0\",\r\n      \"minecraft:spawn_rules\": {\r\n        description: {\r\n          identifier: entityId,\r\n          population_control: \"animal\",\r\n        },\r\n        conditions: [this._buildSpawnConditions(spawnRule)],\r\n      },\r\n    };\r\n\r\n    result.spawnRules.push({\r\n      path: `spawn_rules/${ContentGenerator._sanitizeIdForPath(spawnRule.entity.replace(\":\", \"_\"))}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: nativeSpawnRule,\r\n    });\r\n  }\r\n\r\n  private _generateSpawnRuleFromConfig(id: string, fullId: string, config: ISpawnConfig): IGeneratedFile {\r\n    const nativeSpawnRule: any = {\r\n      format_version: \"1.8.0\",\r\n      \"minecraft:spawn_rules\": {\r\n        description: {\r\n          identifier: fullId,\r\n          population_control: \"animal\",\r\n        },\r\n        conditions: [this._buildSpawnConditions(config as any)],\r\n      },\r\n    };\r\n\r\n    return {\r\n      path: `spawn_rules/${ContentGenerator._sanitizeIdForPath(id)}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: nativeSpawnRule,\r\n    };\r\n  }\r\n\r\n  private _buildSpawnConditions(config: ISpawnRuleDefinition | ISpawnConfig): any {\r\n    const conditions: any = {\r\n      \"minecraft:spawns_on_surface\": {},\r\n      \"minecraft:weight\": { default: (config as any).weight || 10 },\r\n    };\r\n\r\n    if ((config as any).biomes) {\r\n      conditions[\"minecraft:biome_filter\"] = {\r\n        any_of: (config as any).biomes.map((b: string) => ({\r\n          test: \"has_biome_tag\",\r\n          value: b,\r\n        })),\r\n      };\r\n    }\r\n\r\n    if ((config as any).groupSize) {\r\n      conditions[\"minecraft:herd\"] = {\r\n        min_size: (config as any).groupSize.min,\r\n        max_size: (config as any).groupSize.max,\r\n      };\r\n    }\r\n\r\n    if ((config as any).lightLevel) {\r\n      conditions[\"minecraft:brightness_filter\"] = {\r\n        min: (config as any).lightLevel.min || 0,\r\n        max: (config as any).lightLevel.max || 15,\r\n        adjust_for_weather: true,\r\n      };\r\n    }\r\n\r\n    if ((config as any).heightRange) {\r\n      conditions[\"minecraft:height_filter\"] = {\r\n        min: (config as any).heightRange.min,\r\n        max: (config as any).heightRange.max,\r\n      };\r\n    }\r\n\r\n    return conditions;\r\n  }\r\n\r\n  // ============================================================================\r\n  // FEATURE GENERATION\r\n  // ============================================================================\r\n\r\n  private _generateFeature(feature: IFeatureDefinition, result: IGeneratedContent): void {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(feature.id);\r\n    if (feature.spread) {\r\n      // Generate from spread definition\r\n      this._generateFeatureFromSpread(feature, result);\r\n    } else if (feature.nativeFeature) {\r\n      // Use native feature directly\r\n      result.features.push({\r\n        path: `features/${safeId}.json`,\r\n        pack: \"behavior\",\r\n        type: \"json\",\r\n        content: feature.nativeFeature,\r\n      });\r\n\r\n      if (feature.nativeFeatureRule) {\r\n        result.featureRules.push({\r\n          path: `feature_rules/${safeId}.json`,\r\n          pack: \"behavior\",\r\n          type: \"json\",\r\n          content: feature.nativeFeatureRule,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  private _generateFeatureFromSpread(feature: IFeatureDefinition, result: IGeneratedContent): void {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(feature.id);\r\n    const spread = feature.spread!;\r\n    const featureId = `${this._namespace}:${feature.id}`;\r\n\r\n    // Create scatter feature for placement\r\n    const scatterFeature: any = {\r\n      format_version: \"1.13.0\",\r\n      \"minecraft:scatter_feature\": {\r\n        description: { identifier: featureId },\r\n        iterations: typeof spread.count === \"number\" ? spread.count : spread.count?.max || 1,\r\n        scatter_chance: spread.rarity ? { numerator: 1, denominator: spread.rarity } : 100.0,\r\n        x: { distribution: \"uniform\", extent: [0, 16] },\r\n        z: { distribution: \"uniform\", extent: [0, 16] },\r\n        y: this._buildHeightPlacement(spread.heightPlacement),\r\n        places_feature: `${this._namespace}:${feature.id}_placed`,\r\n      },\r\n    };\r\n\r\n    result.features.push({\r\n      path: `features/${safeId}_scatter.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: scatterFeature,\r\n    });\r\n\r\n    // Create the actual placement feature(s)\r\n    for (const placement of spread.places) {\r\n      if (placement.type === \"ore\") {\r\n        const oreFeature: any = {\r\n          format_version: \"1.13.0\",\r\n          \"minecraft:ore_feature\": {\r\n            description: { identifier: `${this._namespace}:${feature.id}_placed` },\r\n            count: typeof placement.count === \"number\" ? placement.count : placement.count?.max || 8,\r\n            replace_rules: [\r\n              {\r\n                places_block: placement.id.includes(\":\") ? placement.id : `${this._namespace}:${placement.id}`,\r\n                may_replace: (placement.replacesBlocks || [\"stone\"]).map((b) =>\r\n                  b.includes(\":\") ? b : `minecraft:${b}`\r\n                ),\r\n              },\r\n            ],\r\n          },\r\n        };\r\n\r\n        result.features.push({\r\n          path: `features/${safeId}_placed.json`,\r\n          pack: \"behavior\",\r\n          type: \"json\",\r\n          content: oreFeature,\r\n        });\r\n      }\r\n    }\r\n\r\n    // Create feature rule\r\n    const featureRule: any = {\r\n      format_version: \"1.13.0\",\r\n      \"minecraft:feature_rules\": {\r\n        description: { identifier: `${this._namespace}:${feature.id}_rule`, places_feature: featureId },\r\n        conditions: {\r\n          placement_pass: \"underground_pass\",\r\n          \"minecraft:biome_filter\": spread.biomes\r\n            ? { any_of: spread.biomes.map((b) => ({ test: \"has_biome_tag\", value: b })) }\r\n            : { test: \"has_biome_tag\", value: \"overworld\" },\r\n        },\r\n        distribution: {\r\n          iterations: 1,\r\n          x: 0,\r\n          y: 0,\r\n          z: 0,\r\n        },\r\n      },\r\n    };\r\n\r\n    result.featureRules.push({\r\n      path: `feature_rules/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: featureRule,\r\n    });\r\n  }\r\n\r\n  private _buildHeightPlacement(placement?: { type: string; y?: number; min?: number; max?: number }): any {\r\n    if (!placement) {\r\n      return { distribution: \"uniform\", extent: [0, 64] };\r\n    }\r\n\r\n    switch (placement.type) {\r\n      case \"fixed\":\r\n        return placement.y || 64;\r\n      case \"surface\":\r\n        return \"q.heightmap(v.worldx, v.worldz)\";\r\n      case \"underground\":\r\n        return { distribution: \"uniform\", extent: [placement.min || 0, placement.max || 64] };\r\n      case \"range\":\r\n        return { distribution: \"uniform\", extent: [placement.min || 0, placement.max || 256] };\r\n      default:\r\n        return { distribution: \"uniform\", extent: [0, 64] };\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // STRUCTURE GENERATION\r\n  // ============================================================================\r\n\r\n  private async _generateStructure(structure: IStructureDefinition, result: IGeneratedContent): Promise<void> {\r\n    // For now, just track structure references\r\n    // Full .mcstructure generation would use StructureUtilities\r\n    if (structure.type === \"simple\" && structure.blocks) {\r\n      this._warnings.push(`Structure ${structure.id}: Inline block generation not yet implemented`);\r\n    }\r\n\r\n    if (structure.type === \"jigsaw\" && structure.jigsaw) {\r\n      this._warnings.push(`Structure ${structure.id}: Jigsaw generation not yet implemented`);\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // UTILITY METHODS\r\n  // ============================================================================\r\n\r\n  private _generateUuid(): string {\r\n    return CreatorToolsHost.generateUuid();\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// CONVENIENCE FUNCTION\r\n// ============================================================================\r\n\r\n/**\r\n * Generate Minecraft content from a meta-schema definition.\r\n */\r\nexport async function generateContent(definition: IMinecraftContentDefinition): Promise<IGeneratedContent> {\r\n  const generator = new ContentGenerator(definition);\r\n  return generator.generate();\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ContentWriter - Writes IGeneratedContent files to a Minecraft project's packs.\r\n *\r\n * Shared utility used by both the web Content Wizard (ProjectAddButton) and the\r\n * CLI \"add\" command. Extracts the file-writing logic so it doesn't live in a\r\n * React component.\r\n *\r\n * Key behavior:\r\n * - Writes behavior pack files (entities, blocks, items, loot tables, recipes, spawn rules)\r\n * - Writes resource pack files (entity resources, geometries, textures, render controllers)\r\n * - Deep-merges singleton JSON files (terrain_texture.json, item_texture.json, blocks.json,\r\n *   sound_definitions.json, music_definitions.json) so that multiple generation passes\r\n *   accumulate entries rather than overwriting previous content\r\n * - Skips regular files that already exist (prevents accidental overwrites)\r\n *\r\n * @see ContentGenerator.ts for generating IGeneratedContent\r\n * @see ProjectAddButton.tsx for web UI integration\r\n * @see AddCommand.ts for CLI integration\r\n */\r\n\r\nimport type IFolder from \"../storage/IFolder\";\r\nimport type { IGeneratedContent, IGeneratedFile } from \"./ContentGenerator\";\r\nimport type Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\n/**\r\n * Extract the filename from a relative path like \"entities/orc.json\" \u2192 \"orc.json\".\r\n */\r\nfunction getFilename(filePath: string): string {\r\n  const parts = filePath.split(\"/\");\r\n  return parts[parts.length - 1];\r\n}\r\n\r\n/**\r\n * Serialize a generated file's content to a string or Uint8Array suitable for writing.\r\n */\r\nfunction serializeContent(generatedFile: IGeneratedFile): string | Uint8Array {\r\n  if (generatedFile.content instanceof Uint8Array) {\r\n    return generatedFile.content;\r\n  }\r\n  if (typeof generatedFile.content === \"string\") {\r\n    return generatedFile.content;\r\n  }\r\n  return JSON.stringify(generatedFile.content, null, 2);\r\n}\r\n\r\n/**\r\n * Write a list of generated files to a specific subfolder within a pack folder.\r\n */\r\nfunction writeFilesToSubfolder(packFolder: IFolder, subfolderName: string, files: IGeneratedFile[]): void {\r\n  if (files.length === 0) return;\r\n  const subfolder = packFolder.ensureFolder(subfolderName);\r\n  for (const file of files) {\r\n    StorageUtilities.writeFileIfNew(subfolder, getFilename(file.path), serializeContent(file));\r\n  }\r\n}\r\n\r\n/**\r\n * Write a singleton JSON file (terrain_texture.json, item_texture.json, blocks.json, etc.)\r\n * by deep-merging with any existing content so that previously-added entries are preserved.\r\n */\r\nfunction writeSingletonJsonMerging(folder: IFolder, fileName: string, newContent: object): void {\r\n  const file = folder.ensureFile(fileName);\r\n\r\n  if (file.isContentLoaded || folder.fileExists(fileName)) {\r\n    const existing = StorageUtilities.getJsonObject(file);\r\n    if (existing && typeof existing === \"object\") {\r\n      const merged = StorageUtilities.deepMergeJsonObjects(existing, newContent);\r\n      file.setContent(JSON.stringify(merged, null, 2));\r\n      return;\r\n    }\r\n  }\r\n\r\n  file.setContent(JSON.stringify(newContent, null, 2));\r\n}\r\n\r\nexport class ContentWriter {\r\n  /**\r\n   * Write all generated content files to a project's behavior pack and resource pack folders.\r\n   *\r\n   * @param project The project to write content into.\r\n   * @param content The generated content from ContentGenerator.generate().\r\n   */\r\n  static async writeGeneratedContent(project: Project, content: IGeneratedContent): Promise<void> {\r\n    const bpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n    const rpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    // === Behavior Pack ===\r\n    if (bpFolder) {\r\n      writeFilesToSubfolder(bpFolder, \"entities\", content.entityBehaviors);\r\n      writeFilesToSubfolder(bpFolder, \"blocks\", content.blockBehaviors);\r\n      writeFilesToSubfolder(bpFolder, \"items\", content.itemBehaviors);\r\n      writeFilesToSubfolder(bpFolder, \"loot_tables\", content.lootTables);\r\n      writeFilesToSubfolder(bpFolder, \"recipes\", content.recipes);\r\n      writeFilesToSubfolder(bpFolder, \"spawn_rules\", content.spawnRules);\r\n    }\r\n\r\n    // === Resource Pack ===\r\n    if (rpFolder) {\r\n      writeFilesToSubfolder(rpFolder, \"entity\", content.entityResources);\r\n\r\n      // Render controllers\r\n      writeFilesToSubfolder(rpFolder, \"render_controllers\", content.renderControllers);\r\n\r\n      // Geometries \u2014 determine subfolder from path (e.g., \"models/blocks/slab.geo.json\" \u2192 \"blocks\")\r\n      for (const geometryFile of content.geometries) {\r\n        const pathParts = geometryFile.path.split(\"/\");\r\n        const subfolderName = pathParts.length >= 2 ? pathParts[pathParts.length - 2] : \"entity\";\r\n        const modelsFolder = rpFolder.ensureFolder(\"models\");\r\n        const subFolder = modelsFolder.ensureFolder(subfolderName);\r\n        StorageUtilities.writeFileIfNew(subFolder, getFilename(geometryFile.path), serializeContent(geometryFile));\r\n      }\r\n\r\n      // Textures \u2014 determine subfolder from path and handle binary content\r\n      for (const textureFile of content.textures) {\r\n        const pathParts = textureFile.path.split(\"/\");\r\n        const subfolderName = pathParts.length >= 2 ? pathParts[pathParts.length - 2] : \"entity\";\r\n\r\n        const texturesFolder = rpFolder.ensureFolder(\"textures\");\r\n        const subFolder = texturesFolder.ensureFolder(subfolderName);\r\n        const fileName = getFilename(textureFile.path);\r\n\r\n        if (subFolder.fileExists(fileName)) {\r\n          Log.debug(`Skipping texture \"${fileName}\" \u2014 file already exists`);\r\n          continue;\r\n        }\r\n\r\n        const file = subFolder.ensureFile(fileName);\r\n        if (textureFile.content instanceof Uint8Array) {\r\n          file.setContent(textureFile.content);\r\n        } else if (Array.isArray(textureFile.content)) {\r\n          file.setContent(new Uint8Array(textureFile.content as number[]));\r\n        } else if (typeof textureFile.content === \"string\") {\r\n          file.setContent(textureFile.content);\r\n        } else {\r\n          Log.debug(`WARNING: Texture content is object, will serialize as JSON`);\r\n          file.setContent(JSON.stringify(textureFile.content, null, 2));\r\n        }\r\n      }\r\n\r\n      // terrain_texture.json \u2014 block texture atlas (merge with existing)\r\n      if (content.terrainTextures) {\r\n        const texturesFolder = rpFolder.ensureFolder(\"textures\");\r\n        writeSingletonJsonMerging(texturesFolder, \"terrain_texture.json\", content.terrainTextures.content as object);\r\n      }\r\n\r\n      // item_texture.json \u2014 item texture atlas (merge with existing)\r\n      if (content.itemTextures) {\r\n        const texturesFolder = rpFolder.ensureFolder(\"textures\");\r\n        writeSingletonJsonMerging(texturesFolder, \"item_texture.json\", content.itemTextures.content as object);\r\n      }\r\n\r\n      // blocks.json \u2014 block resource catalog (merge with existing)\r\n      if (content.blocksCatalog) {\r\n        writeSingletonJsonMerging(\r\n          rpFolder,\r\n          getFilename(content.blocksCatalog.path),\r\n          content.blocksCatalog.content as object\r\n        );\r\n      }\r\n\r\n      // sound_definitions.json (merge with existing)\r\n      if (content.soundDefinitions) {\r\n        writeSingletonJsonMerging(\r\n          rpFolder,\r\n          getFilename(content.soundDefinitions.path),\r\n          content.soundDefinitions.content as object\r\n        );\r\n      }\r\n\r\n      // music_definitions.json (merge with existing)\r\n      if (content.musicDefinitions) {\r\n        writeSingletonJsonMerging(\r\n          rpFolder,\r\n          getFilename(content.musicDefinitions.path),\r\n          content.musicDefinitions.content as object\r\n        );\r\n      }\r\n\r\n      // Additional sounds (singleton files that should be merged)\r\n      for (const soundFile of content.sounds) {\r\n        const pathParts = soundFile.path.split(\"/\");\r\n        const targetFolder = pathParts.length >= 2 ? rpFolder.ensureFolder(pathParts.slice(0, -1).join(\"/\")) : rpFolder;\r\n        writeSingletonJsonMerging(targetFolder, getFilename(soundFile.path), soundFile.content as object);\r\n      }\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * AddCommand - Add content to a Minecraft project\r\n *\r\n * This ToolCommand provides content addition capabilities across all surfaces.\r\n *\r\n * Two modes of operation:\r\n * 1. **Gallery mode** (default): Adds from pre-built gallery templates.\r\n *    Example: `/add entity my_mob`\r\n * 2. **Wizard mode**: Uses ContentGenerator to procedurally create content from\r\n *    traits and properties \u2014 the same engine powering the web Content Wizard.\r\n *    Activated when `--traits` or any wizard flag is provided.\r\n *    Example: `/add entity my_orc --traits hostile,melee_attacker,humanoid --health 30`\r\n *\r\n * @see ContentGenerator.ts for the procedural generation engine\r\n * @see ContentWriter.ts for writing generated files to a project\r\n * @see ContentWizard.tsx for the web UI equivalent\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport {\r\n  contentTypeProvider,\r\n  createGalleryItemProvider,\r\n  allTraitsProvider,\r\n  CONTENT_TYPE_TO_GALLERY,\r\n  ENTITY_TRAITS,\r\n  BLOCK_TRAITS,\r\n  ITEM_TRAITS,\r\n} from \"../AutocompleteProviders\";\r\nimport ProjectItemCreateManager from \"../../ProjectItemCreateManager\";\r\nimport { ProjectFocus } from \"../../IProjectData\";\r\nimport { ProjectItemType } from \"../../IProjectItemData\";\r\nimport type {\r\n  IMinecraftContentDefinition,\r\n  EntityTraitId,\r\n  BlockTraitId,\r\n  ItemTraitId,\r\n} from \"../../../minecraft/IContentMetaSchema\";\r\n\r\n// ============================================================================\r\n// CONSTANTS\r\n// ============================================================================\r\n\r\n/** Content types that support wizard-mode generation (traits + properties). */\r\nconst WIZARD_CONTENT_TYPES = [\"entity\", \"block\", \"item\"];\r\n\r\n/** Entity body-type trait IDs (exclusive \u2014 at most one). */\r\nconst ENTITY_BODY_TYPES = [\"humanoid\", \"quadruped\", \"quadruped_small\", \"flying\", \"aquatic\", \"arthropod\", \"slime\"];\r\n\r\n/**\r\n * Maps content type names to their preferred ProjectItemType for template matching.\r\n */\r\nconst CONTENT_TYPE_TO_ITEM_TYPE: Record<string, ProjectItemType> = {\r\n  spawn_rule: ProjectItemType.spawnRuleBehavior,\r\n  loot_table: ProjectItemType.lootTableBehavior,\r\n  trade_table: ProjectItemType.tradingBehaviorJson,\r\n};\r\n\r\n// ============================================================================\r\n// AUTOCOMPLETE PROVIDERS FOR WIZARD FLAGS\r\n// ============================================================================\r\n\r\nconst bodyTypeProvider = (partial: string) => {\r\n  const lower = partial.toLowerCase();\r\n  return ENTITY_BODY_TYPES.filter((t) => t.startsWith(lower));\r\n};\r\n\r\n// ============================================================================\r\n// VALIDATION\r\n// ============================================================================\r\n\r\ninterface IValidationError {\r\n  flag: string;\r\n  message: string;\r\n}\r\n\r\n/**\r\n * Validate wizard flag values and return any errors.\r\n */\r\n/** Union of all possible flag value types from the command parser. */\r\nexport type WizardFlagValue = string | boolean | number | string[];\r\n\r\nexport function validateWizardFlags(contentType: string, flags: Record<string, WizardFlagValue>): IValidationError[] {\r\n  const errors: IValidationError[] = [];\r\n  const lowerType = contentType.toLowerCase();\r\n\r\n  const checkRange = (name: string, min: number, max: number) => {\r\n    const val = flags[name];\r\n    if (val !== undefined) {\r\n      const n = Number(val);\r\n      if (isNaN(n) || n < min || n > max) {\r\n        errors.push({ flag: name, message: `--${name} must be between ${min} and ${max} (got ${val})` });\r\n      }\r\n    }\r\n  };\r\n\r\n  const checkColor = (name: string) => {\r\n    const val = flags[name] as string | undefined;\r\n    if (val !== undefined && !/^#[0-9a-fA-F]{6}$/.test(val)) {\r\n      errors.push({ flag: name, message: `--${name} must be a hex color like #FF0000 (got ${val})` });\r\n    }\r\n  };\r\n\r\n  // Type-specific validation ranges\r\n  if (lowerType === \"entity\") {\r\n    checkRange(\"health\", 1, 100);\r\n    checkRange(\"damage\", 0, 20);\r\n    checkRange(\"speed\", 0.1, 1.0);\r\n  } else if (lowerType === \"block\") {\r\n    checkRange(\"destroy-time\", 0, 10);\r\n    checkRange(\"light-emission\", 0, 15);\r\n  } else if (lowerType === \"item\") {\r\n    checkRange(\"max-stack\", 1, 64);\r\n    checkRange(\"durability\", 0, 2000);\r\n  }\r\n\r\n  checkColor(\"color\");\r\n  checkColor(\"secondary-color\");\r\n\r\n  // Validate traits belong to the correct content type\r\n  const traits = flags.traits as string[] | undefined;\r\n  if (traits && traits.length > 0) {\r\n    let validTraits: string[];\r\n    switch (lowerType) {\r\n      case \"entity\":\r\n        validTraits = ENTITY_TRAITS;\r\n        break;\r\n      case \"block\":\r\n        validTraits = BLOCK_TRAITS;\r\n        break;\r\n      case \"item\":\r\n        validTraits = ITEM_TRAITS;\r\n        break;\r\n      default:\r\n        validTraits = [];\r\n    }\r\n    for (const trait of traits) {\r\n      if (!validTraits.includes(trait)) {\r\n        errors.push({ flag: \"traits\", message: `Trait \"${trait}\" is not valid for ${contentType} type` });\r\n      }\r\n    }\r\n\r\n    // Check body-type exclusivity for entities\r\n    if (lowerType === \"entity\") {\r\n      const bodyTraits = traits.filter((t) => ENTITY_BODY_TYPES.includes(t));\r\n      if (bodyTraits.length > 1) {\r\n        errors.push({\r\n          flag: \"traits\",\r\n          message: `Only one body type trait allowed, got: ${bodyTraits.join(\", \")}`,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  return errors;\r\n}\r\n\r\n// ============================================================================\r\n// DEFINITION BUILDER\r\n// ============================================================================\r\n\r\n/** Flags specific to wizard mode that trigger the content generator path. */\r\nconst WIZARD_FLAG_NAMES = [\r\n  \"health\",\r\n  \"damage\",\r\n  \"speed\",\r\n  \"body-type\",\r\n  \"color\",\r\n  \"secondary-color\",\r\n  \"destroy-time\",\r\n  \"light-emission\",\r\n  \"max-stack\",\r\n  \"durability\",\r\n  \"display-name\",\r\n  \"namespace\",\r\n];\r\n\r\n/**\r\n * Determine whether wizard-mode generation should be used instead of gallery mode.\r\n * Returns true if traits or any wizard-specific flag is provided.\r\n */\r\nexport function shouldUseWizardMode(\r\n  contentType: string,\r\n  traits: string[] | undefined,\r\n  flags: Record<string, WizardFlagValue>\r\n): boolean {\r\n  if (!WIZARD_CONTENT_TYPES.includes(contentType.toLowerCase())) {\r\n    return false;\r\n  }\r\n  if (traits && traits.length > 0) {\r\n    return true;\r\n  }\r\n  return WIZARD_FLAG_NAMES.some((name) => flags[name] !== undefined);\r\n}\r\n\r\n/**\r\n * Build an IMinecraftContentDefinition from CLI args and flags.\r\n * Mirrors the _buildDefinition() logic in ContentWizard.tsx.\r\n */\r\nexport function buildDefinitionFromFlags(\r\n  contentType: string,\r\n  name: string,\r\n  traits: string[] | undefined,\r\n  flags: Record<string, WizardFlagValue>\r\n): IMinecraftContentDefinition {\r\n  const namespace = (flags.namespace as string) || \"custom\";\r\n  const displayName =\r\n    (flags[\"display-name\"] as string) || name.replace(/_/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\r\n\r\n  const definition: IMinecraftContentDefinition = {\r\n    schemaVersion: \"1.0.0\",\r\n    namespace,\r\n  };\r\n\r\n  const lowerType = contentType.toLowerCase();\r\n\r\n  if (lowerType === \"entity\") {\r\n    let entityTraits = [...(traits || [])] as EntityTraitId[];\r\n\r\n    // If --body-type flag is provided, ensure it's the only body type in the traits list\r\n    const bodyType = flags[\"body-type\"] as string | undefined;\r\n    if (bodyType) {\r\n      // Remove any existing body type traits (flag takes priority)\r\n      entityTraits = entityTraits.filter((t) => !ENTITY_BODY_TYPES.includes(t)) as EntityTraitId[];\r\n      if (!entityTraits.includes(bodyType as EntityTraitId)) {\r\n        entityTraits.push(bodyType as EntityTraitId);\r\n      }\r\n    }\r\n\r\n    definition.entityTypes = [\r\n      {\r\n        id: name,\r\n        displayName,\r\n        traits: entityTraits.length > 0 ? entityTraits : undefined,\r\n        health: flags.health !== undefined ? Number(flags.health) : 20,\r\n        attackDamage: flags.damage !== undefined ? Number(flags.damage) : 3,\r\n        movementSpeed: flags.speed !== undefined ? Number(flags.speed) : 0.25,\r\n        appearance: {\r\n          bodyType: bodyType || (entityTraits.find((t) => ENTITY_BODY_TYPES.includes(t)) as any) || \"humanoid\",\r\n          primaryColor: (flags.color as string) || \"#4A7BA5\",\r\n          secondaryColor: (flags[\"secondary-color\"] as string) || \"#2D4F6B\",\r\n        },\r\n      },\r\n    ];\r\n  } else if (lowerType === \"block\") {\r\n    definition.blockTypes = [\r\n      {\r\n        id: name,\r\n        displayName,\r\n        traits: traits && traits.length > 0 ? (traits as BlockTraitId[]) : undefined,\r\n        destroyTime: flags[\"destroy-time\"] !== undefined ? Number(flags[\"destroy-time\"]) : 3,\r\n        lightEmission: flags[\"light-emission\"] !== undefined ? Number(flags[\"light-emission\"]) : 0,\r\n        mapColor: (flags.color as string) || undefined,\r\n      },\r\n    ];\r\n  } else if (lowerType === \"item\") {\r\n    const itemTraits = (traits || []).filter((t) => t !== \"custom\") as ItemTraitId[];\r\n\r\n    definition.itemTypes = [\r\n      {\r\n        id: name,\r\n        displayName,\r\n        traits: itemTraits.length > 0 ? itemTraits : undefined,\r\n        maxStackSize: flags[\"max-stack\"] !== undefined ? Number(flags[\"max-stack\"]) : 64,\r\n        durability: flags.durability !== undefined ? Number(flags.durability) : undefined,\r\n        color: (flags.color as string) || undefined,\r\n      },\r\n    ];\r\n  }\r\n\r\n  return definition;\r\n}\r\n\r\n// ============================================================================\r\n// ADD COMMAND\r\n// ============================================================================\r\n\r\nexport class AddCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"add\",\r\n    description: \"Add new content to the current project\",\r\n    aliases: [\"a\"],\r\n    category: \"Content\",\r\n    arguments: [\r\n      {\r\n        name: \"type\",\r\n        description: \"Type of content to add (entity, block, item, script, etc.) or gallery template ID\",\r\n        type: \"string\",\r\n        required: true,\r\n        autocompleteProvider: contentTypeProvider,\r\n      },\r\n      {\r\n        name: \"name\",\r\n        description: \"Name for the new content item\",\r\n        type: \"identifier\",\r\n        required: true,\r\n      },\r\n    ],\r\n    flags: [\r\n      // --- Shared flags ---\r\n      {\r\n        name: \"traits\",\r\n        shortName: \"t\",\r\n        description: \"Comma-separated list of traits to apply (e.g., hostile,melee_attacker)\",\r\n        type: \"stringArray\",\r\n        autocompleteProvider: allTraitsProvider,\r\n      },\r\n      {\r\n        name: \"template\",\r\n        description: \"Specific gallery template ID to use (gallery mode only)\",\r\n        type: \"string\",\r\n        autocompleteProvider: createGalleryItemProvider(),\r\n      },\r\n      {\r\n        name: \"display-name\",\r\n        description: \"Display name shown in-game (defaults to formatted version of name)\",\r\n        type: \"string\",\r\n      },\r\n      {\r\n        name: \"namespace\",\r\n        shortName: \"n\",\r\n        description: \"Namespace for the content (defaults to 'custom')\",\r\n        type: \"string\",\r\n      },\r\n      {\r\n        name: \"color\",\r\n        description: \"Primary color as hex (e.g., #FF0000)\",\r\n        type: \"string\",\r\n      },\r\n      // --- Entity-specific flags ---\r\n      {\r\n        name: \"health\",\r\n        description: \"Entity health points (1-100, default 20)\",\r\n        type: \"number\",\r\n      },\r\n      {\r\n        name: \"damage\",\r\n        description: \"Entity attack damage (0-20, default 3)\",\r\n        type: \"number\",\r\n      },\r\n      {\r\n        name: \"speed\",\r\n        description: \"Entity movement speed (0.1-1.0, default 0.25)\",\r\n        type: \"number\",\r\n      },\r\n      {\r\n        name: \"body-type\",\r\n        description: \"Entity body type (humanoid, quadruped, flying, aquatic, etc.)\",\r\n        type: \"string\",\r\n        autocompleteProvider: bodyTypeProvider,\r\n      },\r\n      {\r\n        name: \"secondary-color\",\r\n        description: \"Entity secondary/accent color as hex (e.g., #00FF00)\",\r\n        type: \"string\",\r\n      },\r\n      // --- Block-specific flags ---\r\n      {\r\n        name: \"destroy-time\",\r\n        description: \"Block mining time in seconds (0-10, default 3)\",\r\n        type: \"number\",\r\n      },\r\n      {\r\n        name: \"light-emission\",\r\n        description: \"Block light emission level (0-15, default 0)\",\r\n        type: \"number\",\r\n      },\r\n      // --- Item-specific flags ---\r\n      {\r\n        name: \"max-stack\",\r\n        description: \"Item max stack size (1-64, default 64)\",\r\n        type: \"number\",\r\n      },\r\n      {\r\n        name: \"durability\",\r\n        description: \"Item durability (0-2000)\",\r\n        type: \"number\",\r\n      },\r\n    ],\r\n    isWriteCommand: true,\r\n    examples: [\r\n      \"/add entity my_mob\",\r\n      \"/add entity my_orc --traits hostile,melee_attacker,humanoid --health 30 --damage 5\",\r\n      \"/add block my_brick --traits solid --destroy-time 3\",\r\n      \"/add item my_sword --traits sword --durability 500 --max-stack 1\",\r\n      \"/add script my_behavior\",\r\n      \"/add allay custom_allay\",\r\n    ],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const validationError = this.validateRequiredArgs(args);\r\n    if (validationError) {\r\n      return validationError;\r\n    }\r\n\r\n    const typeOrTemplate = args[0];\r\n    const name = args[1];\r\n    const traits = flags.traits as string[] | undefined;\r\n    const explicitTemplate = flags.template as string | undefined;\r\n\r\n    if (!context.creatorTools) {\r\n      return this.error(\"NO_CREATOR_TOOLS\", \"No CreatorTools instance available.\");\r\n    }\r\n\r\n    const creatorTools = context.creatorTools;\r\n\r\n    // If no project is open, auto-create an addon starter project first\r\n    if (!context.project) {\r\n      context.output.info(\"No project open. Creating a new Add-On Starter project...\");\r\n\r\n      await creatorTools.loadGallery();\r\n\r\n      const starterTemplate = await creatorTools.getGalleryProjectById(\"addonstarter\");\r\n      if (!starterTemplate) {\r\n        return this.error(\"TEMPLATE_NOT_FOUND\", \"Could not find the Add-On Starter template.\");\r\n      }\r\n\r\n      const newProjectName = await creatorTools.getNewProjectName(\"my-project\");\r\n      let project = await creatorTools.createNewProject(\r\n        newProjectName,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        ProjectFocus.general,\r\n        false,\r\n        undefined\r\n      );\r\n\r\n      if (!project) {\r\n        return this.error(\"PROJECT_ERROR\", \"Could not create project.\");\r\n      }\r\n\r\n      const ProjectExporter = (await import(\"../../ProjectExporter\")).default;\r\n\r\n      project = await ProjectExporter.syncProjectFromGitHub(\r\n        true,\r\n        creatorTools,\r\n        starterTemplate.gitHubRepoName,\r\n        starterTemplate.gitHubOwner,\r\n        starterTemplate.gitHubBranch,\r\n        starterTemplate.gitHubFolder,\r\n        newProjectName,\r\n        project,\r\n        starterTemplate.fileList,\r\n        async (message: string) => {\r\n          context.output.debug(message);\r\n        },\r\n        true\r\n      );\r\n\r\n      await project.save();\r\n\r\n      context.project = project;\r\n      context.output.info(`Created project '${newProjectName}'.`);\r\n    }\r\n\r\n    // ================================================================\r\n    // WIZARD MODE \u2014 procedural generation via ContentGenerator\r\n    // ================================================================\r\n    if (shouldUseWizardMode(typeOrTemplate, traits, flags)) {\r\n      return this._executeWizardMode(context, typeOrTemplate, name, traits, flags);\r\n    }\r\n\r\n    // ================================================================\r\n    // GALLERY MODE \u2014 add from pre-built templates\r\n    // ================================================================\r\n    return this._executeGalleryMode(context, typeOrTemplate, name, explicitTemplate, flags);\r\n  }\r\n\r\n  /**\r\n   * Wizard mode: build an IMinecraftContentDefinition \u2192 ContentGenerator \u2192 ContentWriter.\r\n   */\r\n  private async _executeWizardMode(\r\n    context: IToolCommandContext,\r\n    contentType: string,\r\n    name: string,\r\n    traits: string[] | undefined,\r\n    flags: Record<string, WizardFlagValue>\r\n  ): Promise<IToolCommandResult> {\r\n    // Validate inputs\r\n    const validationErrors = validateWizardFlags(contentType, flags);\r\n    if (validationErrors.length > 0) {\r\n      const messages = validationErrors.map((e) => e.message).join(\"; \");\r\n      return this.error(\"VALIDATION_ERROR\", messages);\r\n    }\r\n\r\n    // Build the content definition\r\n    const definition = buildDefinitionFromFlags(contentType, name, traits, flags);\r\n\r\n    // Generate content\r\n    const { ContentGenerator } = await import(\"../../../minecraft/ContentGenerator\");\r\n    const { ContentWriter } = await import(\"../../../minecraft/ContentWriter\");\r\n\r\n    const generator = new ContentGenerator(definition);\r\n    const content = await generator.generate();\r\n\r\n    // Check for generation errors\r\n    if (content.summary.errors.length > 0) {\r\n      return this.error(\"GENERATION_ERROR\", `Content generation failed: ${content.summary.errors.join(\"; \")}`);\r\n    }\r\n\r\n    // Write to project\r\n    await ContentWriter.writeGeneratedContent(context.project!, content);\r\n\r\n    // Re-infer project items so the new files are tracked\r\n    await context.project!.inferProjectItemsFromFiles(true);\r\n\r\n    // Report warnings\r\n    for (const warning of content.summary.warnings) {\r\n      context.output.warn(warning);\r\n    }\r\n\r\n    // Build summary\r\n    const parts: string[] = [];\r\n    if (content.summary.entityCount > 0) parts.push(`${content.summary.entityCount} entity`);\r\n    if (content.summary.blockCount > 0) parts.push(`${content.summary.blockCount} block`);\r\n    if (content.summary.itemCount > 0) parts.push(`${content.summary.itemCount} item`);\r\n    if (content.summary.textureCount > 0) parts.push(`${content.summary.textureCount} texture(s)`);\r\n\r\n    const summaryText = `Generated ${parts.join(\", \")} for '${name}'`;\r\n    context.output.success(summaryText);\r\n\r\n    return this.success(summaryText, {\r\n      name,\r\n      type: contentType,\r\n      traits: traits || [],\r\n      mode: \"wizard\",\r\n      generated: {\r\n        entities: content.summary.entityCount,\r\n        blocks: content.summary.blockCount,\r\n        items: content.summary.itemCount,\r\n        textures: content.summary.textureCount,\r\n      },\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Gallery mode: add from a pre-built gallery template.\r\n   */\r\n  private async _executeGalleryMode(\r\n    context: IToolCommandContext,\r\n    typeOrTemplate: string,\r\n    name: string,\r\n    explicitTemplate: string | undefined,\r\n    flags: Record<string, WizardFlagValue>\r\n  ): Promise<IToolCommandResult> {\r\n    const creatorTools = context.creatorTools!;\r\n\r\n    // Load gallery\r\n    await creatorTools.loadGallery();\r\n\r\n    if (!creatorTools.gallery) {\r\n      return this.error(\"GALLERY_ERROR\", \"Could not load project gallery\");\r\n    }\r\n\r\n    // Try to find as direct gallery item first\r\n    let galleryItem = await creatorTools.getGalleryProjectById(explicitTemplate || typeOrTemplate);\r\n\r\n    // If not found, map content type to gallery type and find default template\r\n    if (!galleryItem) {\r\n      const galleryType = CONTENT_TYPE_TO_GALLERY[typeOrTemplate.toLowerCase()];\r\n\r\n      if (galleryType !== undefined) {\r\n        const items = creatorTools.getGalleryProjectByType(galleryType);\r\n\r\n        if (items && items.length > 0) {\r\n          const preferredItemType = CONTENT_TYPE_TO_ITEM_TYPE[typeOrTemplate.toLowerCase()];\r\n          if (preferredItemType) {\r\n            const match = items.find(\r\n              (item) => item.targetType === preferredItemType || item.id === typeOrTemplate.toLowerCase()\r\n            );\r\n            if (match) {\r\n              galleryItem = match;\r\n              context.output.debug(`Using matched template '${match.id}' for type '${typeOrTemplate}'`);\r\n            }\r\n          }\r\n\r\n          if (!galleryItem) {\r\n            galleryItem = items[0];\r\n            context.output.debug(`Using template '${galleryItem.id}' for type '${typeOrTemplate}'`);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!galleryItem) {\r\n      const gallery = creatorTools.gallery;\r\n      const types = Object.keys(CONTENT_TYPE_TO_GALLERY).join(\", \");\r\n      const templates = gallery.items\r\n        .slice(0, 10)\r\n        .map((i) => i.id)\r\n        .join(\", \");\r\n      return this.error(\r\n        \"TYPE_NOT_FOUND\",\r\n        `Unknown type or template '${typeOrTemplate}'. Valid types: ${types}. Example templates: ${templates}...`\r\n      );\r\n    }\r\n\r\n    context.output.info(`Adding '${name}' from template '${galleryItem.title}'...`);\r\n\r\n    try {\r\n      await ProjectItemCreateManager.addFromGallery(context.project!, name, galleryItem);\r\n\r\n      await context.project!.save();\r\n\r\n      context.output.success(`Added '${name}' to project`);\r\n\r\n      return this.success(`Added ${name}`, {\r\n        name,\r\n        template: galleryItem.id,\r\n        type: typeOrTemplate,\r\n        mode: \"gallery\",\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"ADD_ERROR\", `Failed to add content: ${message}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Custom completions based on argument position and type context.\r\n   */\r\n  async getCompletions(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    const lower = partialArg.toLowerCase();\r\n\r\n    if (argIndex === 0) {\r\n      const types = Object.keys(CONTENT_TYPE_TO_GALLERY).filter((t) => t.startsWith(lower));\r\n\r\n      if (context.creatorTools) {\r\n        await context.creatorTools.loadGallery();\r\n        const gallery = context.creatorTools.gallery;\r\n        const templateIds = gallery?.items.filter((i) => i.id.toLowerCase().startsWith(lower)).map((i) => i.id) || [];\r\n        return [...types, ...templateIds];\r\n      }\r\n\r\n      return types;\r\n    }\r\n\r\n    return [];\r\n  }\r\n}\r\n\r\nexport const addCommand = new AddCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * RemoveCommand - Remove content from a Minecraft project\r\n *\r\n * Removes a project item by path or name.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { projectItemProvider } from \"../AutocompleteProviders\";\r\n\r\nexport class RemoveCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"remove\",\r\n    description: \"Remove content from the current project\",\r\n    aliases: [\"rm\", \"delete\"],\r\n    category: \"Content\",\r\n    requiresProject: true,\r\n    arguments: [\r\n      {\r\n        name: \"path\",\r\n        description: \"Path or name of the item to remove\",\r\n        type: \"path\",\r\n        required: true,\r\n        autocompleteProvider: projectItemProvider,\r\n      },\r\n    ],\r\n    flags: [\r\n      {\r\n        name: \"force\",\r\n        shortName: \"f\",\r\n        description: \"Skip confirmation\",\r\n        type: \"boolean\",\r\n        isBoolean: true,\r\n      },\r\n    ],\r\n    isWriteCommand: true,\r\n    examples: [\"/remove entities/my_entity.json\", \"/remove my_entity\", \"/remove --force old_script.ts\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const validationError = this.validateRequiredArgs(args);\r\n    if (validationError) {\r\n      return validationError;\r\n    }\r\n\r\n    const pathOrName = args[0];\r\n    const force = flags.force as boolean;\r\n\r\n    if (!context.project) {\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    // Find the item by path or name\r\n    const items = context.project.items || [];\r\n    let itemToRemove = items.find(\r\n      (item) => item.projectPath === pathOrName || item.projectPath?.endsWith(\"/\" + pathOrName)\r\n    );\r\n\r\n    // Also try by name\r\n    if (!itemToRemove) {\r\n      itemToRemove = items.find((item) => item.name.toLowerCase() === pathOrName.toLowerCase());\r\n    }\r\n\r\n    if (!itemToRemove) {\r\n      return this.error(\"ITEM_NOT_FOUND\", `Item '${pathOrName}' not found in project`);\r\n    }\r\n\r\n    // When --force is not specified, log that the item is being removed.\r\n    // Future: add interactive confirmation prompt when not forced.\r\n    if (!force) {\r\n      context.output.info(`Removing '${itemToRemove.projectPath || itemToRemove.name}'...`);\r\n    }\r\n\r\n    try {\r\n      context.project.removeItem(itemToRemove);\r\n      await context.project.save();\r\n\r\n      context.output.success(`Removed '${itemToRemove.name}'`);\r\n      return this.success(`Removed ${itemToRemove.name}`);\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"REMOVE_ERROR\", `Failed to remove item: ${message}`);\r\n    }\r\n  }\r\n}\r\n\r\nexport const removeCommand = new RemoveCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * RenameCommand - Rename content in a Minecraft project\r\n *\r\n * Renames a project item, updating the identifier inside its JSON\r\n * and cascading the rename to related files:\r\n *   - Entity behavior \u2192 resource entity, spawn rules\r\n *   - Entity resource \u2192 (file + identifier only)\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { projectItemNameProvider } from \"../AutocompleteProviders\";\r\nimport { ProjectItemType } from \"../../IProjectItemData\";\r\nimport EntityTypeDefinition from \"../../../minecraft/EntityTypeDefinition\";\r\nimport EntityTypeResourceDefinition from \"../../../minecraft/EntityTypeResourceDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"../../../minecraft/SpawnRulesBehaviorDefinition\";\r\nimport type Project from \"../../Project\";\r\nimport type ProjectItem from \"../../ProjectItem\";\r\n\r\nexport class RenameCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"rename\",\r\n    description: \"Rename a content item in the project\",\r\n    aliases: [\"mv\", \"move\"],\r\n    category: \"Content\",\r\n    requiresProject: true,\r\n    arguments: [\r\n      {\r\n        name: \"oldName\",\r\n        description: \"Current name or path of the item\",\r\n        type: \"string\",\r\n        required: true,\r\n        autocompleteProvider: projectItemNameProvider,\r\n      },\r\n      {\r\n        name: \"newName\",\r\n        description: \"New name for the item\",\r\n        type: \"string\",\r\n        required: true,\r\n      },\r\n    ],\r\n    isWriteCommand: true,\r\n    examples: [\"/rename my_old_entity my_new_entity\", \"/rename old_block cool_block\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const oldName = args[0];\r\n    const newName = args[1];\r\n\r\n    if (!context.project) {\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    // Validate required args\r\n    const validationError = this.validateRequiredArgs(args);\r\n    if (validationError) return validationError;\r\n\r\n    // Find the item\r\n    const items = context.project.items || [];\r\n    let item = items.find((i) => i.name.toLowerCase() === oldName.toLowerCase() || i.projectPath?.includes(oldName));\r\n\r\n    if (!item) {\r\n      return this.error(\"ITEM_NOT_FOUND\", `Item '${oldName}' not found in project`);\r\n    }\r\n\r\n    const originalName = item.name;\r\n\r\n    try {\r\n      const renamedFiles: string[] = [originalName];\r\n\r\n      if (item.itemType === ProjectItemType.entityTypeBehavior) {\r\n        await this._cascadeEntityBehaviorRename(context.project, item, newName, renamedFiles);\r\n      } else if (item.itemType === ProjectItemType.entityTypeResource) {\r\n        await this._cascadeEntityResourceRename(item, newName);\r\n      }\r\n\r\n      // Rename the primary item's file\r\n      await item.rename(newName);\r\n\r\n      await context.project.save();\r\n\r\n      if (renamedFiles.length > 1) {\r\n        context.output.success(\r\n          `Renamed '${originalName}' to '${newName}' (also updated: ${renamedFiles.slice(1).join(\", \")})`\r\n        );\r\n      } else {\r\n        context.output.success(`Renamed '${originalName}' to '${newName}'`);\r\n      }\r\n      return this.success(`Renamed ${originalName} to ${newName}`, {\r\n        oldName: originalName,\r\n        newName,\r\n        renamedFiles,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"RENAME_ERROR\", `Failed to rename item: ${message}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Builds a new entity identifier by replacing the short name portion.\r\n   * E.g., \"myns:old_mob\" + \"new_mob\" \u2192 \"myns:new_mob\"\r\n   */\r\n  private _buildNewEntityId(oldId: string, newShortName: string): string {\r\n    const colonIndex = oldId.indexOf(\":\");\r\n    if (colonIndex >= 0) {\r\n      return oldId.substring(0, colonIndex + 1) + newShortName;\r\n    }\r\n    return newShortName;\r\n  }\r\n\r\n  /**\r\n   * Cascades a rename from an entity behavior item to its resource entity\r\n   * and spawn rules. Updates identifiers in JSON and renames related files.\r\n   */\r\n  private async _cascadeEntityBehaviorRename(\r\n    project: Project,\r\n    behaviorItem: ProjectItem,\r\n    newName: string,\r\n    renamedFiles: string[]\r\n  ) {\r\n    // Load the behavior definition with comment preservation for safe editing\r\n    if (!behaviorItem.isContentLoaded) {\r\n      await behaviorItem.loadContent();\r\n    }\r\n\r\n    const primaryFile = behaviorItem.primaryFile;\r\n    if (!primaryFile) {\r\n      return;\r\n    }\r\n\r\n    const etd = await EntityTypeDefinition.ensureOnFile(primaryFile, undefined, true);\r\n    if (!etd || !etd.id) {\r\n      return;\r\n    }\r\n\r\n    const oldEntityId = etd.id;\r\n    const newEntityId = this._buildNewEntityId(oldEntityId, newName);\r\n\r\n    // Update the behavior entity's identifier\r\n    etd.id = newEntityId;\r\n    etd.persist();\r\n\r\n    // Find and update matching resource entities\r\n    const resourceItems = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n    for (const resItem of resourceItems) {\r\n      if (!resItem.isContentLoaded) {\r\n        await resItem.loadContent();\r\n      }\r\n\r\n      if (resItem.primaryFile) {\r\n        const etrd = await EntityTypeResourceDefinition.ensureOnFile(resItem.primaryFile);\r\n        if (etrd && etrd.id === oldEntityId) {\r\n          const oldResName = resItem.name;\r\n          // Re-load with comment preservation for editing\r\n          await etrd.load(true);\r\n          etrd.id = newEntityId;\r\n          etrd.persist();\r\n          await resItem.rename(newName);\r\n          renamedFiles.push(oldResName);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Find and update matching spawn rules\r\n    const spawnRuleItems = project.getItemsByType(ProjectItemType.spawnRuleBehavior);\r\n    for (const srItem of spawnRuleItems) {\r\n      if (!srItem.isContentLoaded) {\r\n        await srItem.loadContent();\r\n      }\r\n\r\n      if (srItem.primaryFile) {\r\n        const srb = await SpawnRulesBehaviorDefinition.ensureOnFile(srItem.primaryFile);\r\n        if (srb && srb.id === oldEntityId) {\r\n          const oldSrName = srItem.name;\r\n          // Re-load with comment preservation for editing\r\n          await srb.load(true);\r\n          srb.id = newEntityId;\r\n          srb.persist();\r\n          await srItem.rename(newName);\r\n          renamedFiles.push(oldSrName);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates the identifier inside an entity resource definition when\r\n   * the resource item itself is being renamed directly.\r\n   */\r\n  private async _cascadeEntityResourceRename(resourceItem: ProjectItem, newName: string) {\r\n    if (!resourceItem.isContentLoaded) {\r\n      await resourceItem.loadContent();\r\n    }\r\n\r\n    const primaryFile = resourceItem.primaryFile;\r\n    if (!primaryFile) {\r\n      return;\r\n    }\r\n\r\n    const etrd = await EntityTypeResourceDefinition.ensureOnFile(primaryFile);\r\n    if (!etrd || !etrd.id) {\r\n      return;\r\n    }\r\n\r\n    const newEntityId = this._buildNewEntityId(etrd.id, newName);\r\n    await etrd.load(true);\r\n    etrd.id = newEntityId;\r\n    etrd.persist();\r\n  }\r\n}\r\n\r\nexport const renameCommand = new RenameCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ScriptCommand - Run JavaScript or send messages via Bedrock Dedicated Server\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * Executes code or commands on an active Bedrock server connection.\r\n * This is useful for testing and debugging script behavior.\r\n *\r\n * EXECUTION PATHWAYS:\r\n *\r\n * 1. **Action Set pathway (default, reliable)**:\r\n *    Uses the `mct:runactions` protocol which has a complete round-trip:\r\n *    - Sends an action set to the in-game creator_tools_ingame addon\r\n *    - The addon parses the action set, executes it, and returns results\r\n *    - Actions include: world_send_message, test_simulated_player_spawn, etc.\r\n *    - This is the same pathway used by the MCP server's runActionSetInMinecraft\r\n *\r\n * 2. **Direct command pathway (--raw flag)**:\r\n *    Sends a raw Bedrock server command (e.g., `/say Hello`, `/tp @s 0 64 0`)\r\n *    via DedicatedServer.writeToServer(). No response parsing.\r\n *\r\n * 3. **Eval pathway (--eval flag)**:\r\n *    Evaluates arbitrary JavaScript code in the in-game scripting context.\r\n *    Uses the `mct:eval` scriptevent protocol with token-based response:\r\n *    - Encodes code: replaces `\"` with `|` for transport\r\n *    - Sends: `/scriptevent mct:eval \"token|encodedCode\"`\r\n *    - Addon receives via scriptEventReceive, reverses encoding\r\n *    - Addon evaluates code with `new Function(\"world\", \"system\", \"dimension\", code)`\r\n *    - Addon responds: `console.log(\"evl|\" + token + \"|\" + result)`\r\n *    - ScriptCommand parses the `evl|token|result` response line\r\n *    The eval function receives `world`, `system`, and `dimension` (overworld)\r\n *    as available variables. Example: `/script --eval return world.getAllPlayers().length`\r\n *\r\n * TRANSPORT ENCODING:\r\n * The scriptevent transport cannot carry JSON double-quotes directly, so all\r\n * quotes in the payload are replaced with `|` before sending and reversed on\r\n * receipt. Response prefixes: `ras|` for actionset, `evl|` for eval, `gs|` for getState.\r\n *\r\n * RELATED FILES:\r\n * - src/local/DedicatedServer.ts \u2014 writeToServer(), runCommandImmediate()\r\n * - src/local/MinecraftMcpServer.ts \u2014 _runActionSet() with token-based responses\r\n * - src/actions/IActionSetData.ts \u2014 Action set data structures\r\n * - mc/scripts/creator_tools/CreatorTools.ts \u2014 In-game handler (outside workspace)\r\n *   Handles mct:actionset, mct:eval, and mct:state scriptevents + CustomCommands.\r\n *\r\n * In MCP context, requires a session to be created first via createMinecraftSessionWithContent.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase, ToolCommandScope } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport Utilities from \"../../../core/Utilities\";\r\n\r\nexport class ScriptCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"script\",\r\n    description: \"Run a command or send a message on the Bedrock server\",\r\n    aliases: [\"js\", \"eval\"],\r\n    category: \"Server\",\r\n    arguments: [\r\n      {\r\n        name: \"code\",\r\n        description: \"Command or message to send to the server\",\r\n        type: \"string\",\r\n        required: true,\r\n      },\r\n    ],\r\n    flags: [\r\n      {\r\n        name: \"session\",\r\n        shortName: \"s\",\r\n        description: \"Session name to run on (required for MCP/API)\",\r\n        type: \"string\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"raw\",\r\n        shortName: \"r\",\r\n        description: \"Send as a raw server command (e.g., /say, /tp, /give)\",\r\n        type: \"boolean\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"eval\",\r\n        shortName: \"e\",\r\n        description: \"Evaluate JavaScript code in the server's scripting context (world, system, dimension available)\",\r\n        type: \"boolean\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"timeout\",\r\n        shortName: \"t\",\r\n        description: \"Timeout in seconds for --eval response (default: 5)\",\r\n        type: \"string\",\r\n        required: false,\r\n      },\r\n    ],\r\n    scopes: [ToolCommandScope.serveTerminal, ToolCommandScope.ui, ToolCommandScope.serverApi, ToolCommandScope.mcp],\r\n    examples: [\r\n      \"/script say Hello from MCT!\",\r\n      \"/script --raw tp @s 0 64 0\",\r\n      \"/script --eval return world.getAllPlayers().length\",\r\n      \"/script --eval --timeout 30 return world.getDimension('overworld').getEntities().length\",\r\n      \"/script --session mySession --eval return world.getDimension('overworld').id\",\r\n    ],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const code = args.join(\" \");\r\n    const sessionName = flags.session as string | undefined;\r\n    const isRaw = flags.raw === true;\r\n    const isEval = flags.eval === true;\r\n\r\n    // In MCP or serverApi context, we need session info\r\n    if ((context.scope === \"mcp\" || context.scope === \"serverApi\") && !sessionName && !context.session) {\r\n      return this.error(\"NO_SESSION\", \"Session name required in MCP/API context. Use --session <name>\");\r\n    }\r\n\r\n    if (!code || code.trim() === \"\") {\r\n      return this.error(\"NO_CODE\", \"No command or message provided\");\r\n    }\r\n\r\n    context.output.info(`Executing: ${code}`);\r\n\r\n    try {\r\n      // Eval pathway: send code to the in-game addon for evaluation via scriptevent\r\n      if (isEval) {\r\n        return await this._executeEval(context, code, sessionName, flags);\r\n      }\r\n\r\n      // Determine the command to send\r\n      let command: string;\r\n\r\n      if (isRaw) {\r\n        // Raw mode: send the command as-is (prefix with / if needed)\r\n        command = code.startsWith(\"/\") ? code : \"/\" + code;\r\n      } else {\r\n        // Default mode: treat as a server command\r\n        // If it looks like a slash command already, send as-is\r\n        // Otherwise, wrap as a /say command for message delivery\r\n        if (code.startsWith(\"/\")) {\r\n          command = code;\r\n        } else {\r\n          command = \"/say \" + code;\r\n        }\r\n      }\r\n\r\n      // Try to run via IMinecraft (serve mode, Electron with server connection)\r\n      if (context.minecraft) {\r\n        const result = await context.minecraft.runCommand(command);\r\n        context.output.success(\"Command executed\");\r\n        return this.success(\"Command executed\", {\r\n          result,\r\n          command,\r\n          sessionName: sessionName || context.session?.sessionName,\r\n        });\r\n      }\r\n\r\n      // Fall back to session's serverManager (MCP/API contexts)\r\n      if (context.session?.serverManager) {\r\n        const server = context.session.serverManager.getActiveServer(context.session.slot || 0);\r\n        if (server) {\r\n          const result = await server.runCommandImmediate(command);\r\n          context.output.success(\"Command executed\");\r\n          return this.success(\"Command executed\", {\r\n            result,\r\n            command,\r\n            sessionName: sessionName || context.session?.sessionName,\r\n          });\r\n        }\r\n      }\r\n\r\n      return this.error(\"NO_SERVER\", \"No active Minecraft server connection\");\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"SCRIPT_ERROR\", `Command execution failed: ${message}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Evaluates JavaScript code in the in-game scripting context via the mct:eval\r\n   * scriptevent protocol with token-based response parsing.\r\n   *\r\n   * Protocol:\r\n   * 1. Encode: replace all `\"` with `|` in the code\r\n   * 2. Send: `/scriptevent mct:eval \"token|encodedCode\"`\r\n   * 3. Wait for stdout line containing the token\r\n   * 4. Parse `evl|token|result` from the response\r\n   */\r\n  private async _executeEval(\r\n    context: IToolCommandContext,\r\n    code: string,\r\n    sessionName: string | undefined,\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    // Encode the code for transport: replace double quotes with pipes\r\n    const encodedCode = code.replace(/\"/g, \"|\");\r\n    const token = Utilities.createRandomLowerId(6);\r\n\r\n    // Build the scriptevent command\r\n    const command = 'scriptevent mct:eval \"' + token + \"|\" + encodedCode + '\"';\r\n\r\n    let result: string | undefined;\r\n\r\n    const timeoutSec = parseInt(flags.timeout as string, 10) || 5;\r\n    const maxWaitMs = timeoutSec * 1000;\r\n\r\n    // Eval requires token-based response parsing via runCommandImmediate.\r\n    // The session.serverManager pathway supports this; the IMinecraft pathway\r\n    // (serve mode) does not currently support token-based waiting.\r\n    if (context.session?.serverManager) {\r\n      const server = context.session.serverManager.getActiveServer(context.session.slot || 0);\r\n      if (server) {\r\n        result = await server.runCommandImmediate(command, token + \"|\", maxWaitMs);\r\n      }\r\n    } else if (context.minecraft) {\r\n      // IMinecraft.runCommand doesn't support token-based waiting, so the result\r\n      // may not contain the eval response. Best-effort approach.\r\n      result = await context.minecraft.runCommand(command);\r\n    }\r\n\r\n    if (result === undefined) {\r\n      return this.error(\"NO_SERVER\", \"No active Minecraft server connection or eval timed out\");\r\n    }\r\n\r\n    // Parse the evl|token|result response\r\n    const evlIndex = result.indexOf(\"evl|\");\r\n    if (evlIndex >= 0) {\r\n      // Find the token after \"evl|\"\r\n      const afterEvl = result.substring(evlIndex + 4);\r\n      const pipeIndex = afterEvl.indexOf(\"|\");\r\n\r\n      if (pipeIndex >= 0) {\r\n        const evalResult = afterEvl.substring(pipeIndex + 1);\r\n\r\n        if (evalResult.startsWith(\"Error: \")) {\r\n          return this.error(\"EVAL_ERROR\", evalResult);\r\n        }\r\n\r\n        context.output.success(`Eval result: ${evalResult}`);\r\n        return this.success(\"Eval completed\", {\r\n          result: evalResult,\r\n          code,\r\n          sessionName: sessionName || context.session?.sessionName,\r\n        });\r\n      }\r\n    }\r\n\r\n    // If we got a result but couldn't parse it as evl| format, return raw\r\n    context.output.success(`Result: ${result}`);\r\n    return this.success(\"Eval completed\", {\r\n      result,\r\n      code,\r\n      sessionName: sessionName || context.session?.sessionName,\r\n    });\r\n  }\r\n}\r\n\r\nexport const scriptCommand = new ScriptCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * OpenSampleCommand - Open a built-in sample project\r\n *\r\n * Loads vanilla Minecraft content from the web server's /res/ folder\r\n * directly into the editor as a read-only project. This is useful for:\r\n * - Testing with large real-world content (2000+ files)\r\n * - Exploring vanilla Minecraft definitions\r\n * - Performance testing and benchmarking\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport HttpStorage from \"../../../storage/HttpStorage\";\r\nimport Project from \"../../Project\";\r\n\r\nconst SAMPLES: Record<string, { path: string; title: string; description: string }> = {\r\n  vanilla: {\r\n    path: \"/res/latest/van/serve/\",\r\n    title: \"Vanilla Minecraft\",\r\n    description: \"The complete vanilla Minecraft behavior pack + resource pack (2000+ files)\",\r\n  },\r\n  \"vanilla-bp\": {\r\n    path: \"/res/latest/van/serve/behavior_pack/\",\r\n    title: \"Vanilla Behavior Pack\",\r\n    description: \"Vanilla entities, items, recipes, loot tables, spawn rules, and biomes\",\r\n  },\r\n  \"vanilla-rp\": {\r\n    path: \"/res/latest/van/serve/resource_pack/\",\r\n    title: \"Vanilla Resource Pack\",\r\n    description: \"Vanilla textures, models, animations, and sounds\",\r\n  },\r\n};\r\n\r\nexport class OpenSampleCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"open-sample\",\r\n    description: \"Open a built-in sample project (e.g., vanilla Minecraft content)\",\r\n    aliases: [\"sample\", \"vanilla\"],\r\n    category: \"Project\",\r\n    arguments: [\r\n      {\r\n        name: \"sample\",\r\n        description: \"Sample to open: vanilla, vanilla-bp, vanilla-rp\",\r\n        type: \"choice\",\r\n        required: false,\r\n        defaultValue: \"vanilla-bp\",\r\n      },\r\n    ],\r\n    flags: [],\r\n    isWriteCommand: false,\r\n    examples: [\r\n      \"/open-sample\",\r\n      \"/open-sample vanilla-bp\",\r\n      \"/open-sample vanilla\",\r\n      \"/open-sample vanilla-rp\",\r\n    ],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const sampleId = (args[0] || \"vanilla-bp\").toLowerCase();\r\n    const sample = SAMPLES[sampleId];\r\n\r\n    if (!sample) {\r\n      const available = Object.keys(SAMPLES).join(\", \");\r\n      return this.error(\"SAMPLE_NOT_FOUND\", `Sample '${sampleId}' not found. Available: ${available}`);\r\n    }\r\n\r\n    if (!context.creatorTools) {\r\n      return this.error(\"NO_CREATOR_TOOLS\", \"No CreatorTools instance available.\");\r\n    }\r\n\r\n    context.output.info(`Loading ${sample.title}...`);\r\n\r\n    try {\r\n      const contentStorage = HttpStorage.get(sample.path);\r\n      await contentStorage.rootFolder.load();\r\n\r\n      const newProject = new Project(context.creatorTools, sample.title, null);\r\n      newProject.setProjectFolder(contentStorage.rootFolder);\r\n      newProject.readOnlySafety = true;\r\n\r\n      await newProject.attemptToLoadPreferences();\r\n      await newProject.inferProjectItemsFromFiles(true);\r\n\r\n      context.project = newProject;\r\n\r\n      const itemCount = newProject.items.length;\r\n      context.output.success(`Loaded ${sample.title} with ${itemCount} items`);\r\n\r\n      return this.success(`Loaded ${sample.title}`, {\r\n        sampleId,\r\n        itemCount,\r\n        title: sample.title,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"LOAD_ERROR\", `Failed to load sample: ${message}`);\r\n    }\r\n  }\r\n\r\n  async getCompletions(\r\n    _context: IToolCommandContext,\r\n    _args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    if (argIndex === 0) {\r\n      const all = Object.keys(SAMPLES);\r\n      if (!partialArg) return all;\r\n      return all.filter((s) => s.startsWith(partialArg.toLowerCase()));\r\n    }\r\n    return [];\r\n  }\r\n}\r\n\r\nexport const openSampleCommand = new OpenSampleCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ValidateCommand - Run inspector validation on the current project\r\n *\r\n * Builds a `ProjectInfoSet` for the active project using the\r\n * `defaultInDevelopment` suite and reports a one-line summary of\r\n * errors, warnings, and recommendations. Useful as a quick\r\n * \"is my project healthy?\" check from the slash bar.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { ProjectInfoSuite } from \"../../../info/IProjectInfoData\";\r\nimport { InfoItemType } from \"../../../info/IInfoItemData\";\r\nimport ProjectInfoSet from \"../../../info/ProjectInfoSet\";\r\n\r\nexport class ValidateCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"validate\",\r\n    description: \"Run inspector validation on the current project and print a summary\",\r\n    aliases: [\"val\"],\r\n    category: \"Validation\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/validate\", \"/val\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /validate.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const project = context.project;\r\n\r\n    try {\r\n      context.output.info(`Validating project '${project.name}'...`);\r\n\r\n      const infoSet = new ProjectInfoSet(project, ProjectInfoSuite.defaultInDevelopment);\r\n      await infoSet.generateForProject();\r\n\r\n      const errors = infoSet.getCountByType(InfoItemType.error);\r\n      const warnings = infoSet.getCountByType(InfoItemType.warning);\r\n      const recommendations = infoSet.getCountByType(InfoItemType.recommendation);\r\n      const internal = infoSet.getCountByType(InfoItemType.internalProcessingError);\r\n\r\n      const summary = `errors=${errors} warnings=${warnings} recommendations=${recommendations}`;\r\n\r\n      if (errors > 0 || internal > 0) {\r\n        context.output.error(`Validation: ${summary}`);\r\n      } else if (warnings > 0) {\r\n        context.output.warn(`Validation: ${summary}`);\r\n      } else {\r\n        context.output.success(`Validation: ${summary}`);\r\n      }\r\n\r\n      return this.success(summary, {\r\n        errors,\r\n        warnings,\r\n        recommendations,\r\n        internalProcessingErrors: internal,\r\n        projectName: project.name,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      context.output.error(`Validation failed: ${message}`);\r\n      return this.error(\"VALIDATE_ERROR\", `Failed to validate project: ${message}`);\r\n    }\r\n  }\r\n}\r\n\r\nexport const validateCommand = new ValidateCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * InfoCommand - Display project metadata\r\n *\r\n * Prints a short summary of the active project: name, total item\r\n * count, the number of behavior-pack vs resource-pack items, and\r\n * the manifest format_version when discoverable. Read-only.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { ProjectItemType } from \"../../IProjectItemData\";\r\nimport ProjectItemUtilities from \"../../ProjectItemUtilities\";\r\n\r\nexport class InfoCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"info\",\r\n    description: \"Display metadata about the current project (name, item counts, pack info)\",\r\n    aliases: [\"i\"],\r\n    category: \"Project\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/info\", \"/i\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /info.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const project = context.project;\r\n    const items = project.items || [];\r\n\r\n    let bpItemCount = 0;\r\n    let rpItemCount = 0;\r\n    let bpManifestCount = 0;\r\n    let rpManifestCount = 0;\r\n\r\n    for (const item of items) {\r\n      if (ProjectItemUtilities.isBehaviorRelated(item.itemType)) {\r\n        bpItemCount++;\r\n      } else if (ProjectItemUtilities.isResourceRelated(item.itemType)) {\r\n        rpItemCount++;\r\n      }\r\n\r\n      if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        bpManifestCount++;\r\n      } else if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        rpManifestCount++;\r\n      }\r\n    }\r\n\r\n    const title = project.title || project.name;\r\n    context.output.info(`Project: ${title}`);\r\n    if (project.description) {\r\n      context.output.info(`Description: ${project.description}`);\r\n    }\r\n    context.output.info(`Total items: ${items.length}`);\r\n    context.output.info(\r\n      `Behavior pack: ${bpItemCount} item(s) (${bpManifestCount} manifest${bpManifestCount === 1 ? \"\" : \"s\"})`\r\n    );\r\n    context.output.info(\r\n      `Resource pack: ${rpItemCount} item(s) (${rpManifestCount} manifest${rpManifestCount === 1 ? \"\" : \"s\"})`\r\n    );\r\n\r\n    if (project.defaultBehaviorPackUniqueId) {\r\n      context.output.info(`Default BP uuid: ${project.defaultBehaviorPackUniqueId}`);\r\n    }\r\n    if (project.defaultResourcePackUniqueId) {\r\n      context.output.info(`Default RP uuid: ${project.defaultResourcePackUniqueId}`);\r\n    }\r\n\r\n    const summary = `${items.length} items (BP=${bpItemCount}, RP=${rpItemCount})`;\r\n    context.output.success(summary);\r\n\r\n    return this.success(summary, {\r\n      name: project.name,\r\n      title,\r\n      description: project.description || \"\",\r\n      itemCount: items.length,\r\n      behaviorPackItems: bpItemCount,\r\n      resourcePackItems: rpItemCount,\r\n      behaviorPackManifests: bpManifestCount,\r\n      resourcePackManifests: rpManifestCount,\r\n      defaultBehaviorPackUniqueId: project.defaultBehaviorPackUniqueId,\r\n      defaultResourcePackUniqueId: project.defaultResourcePackUniqueId,\r\n    });\r\n  }\r\n}\r\n\r\nexport const infoCommand = new InfoCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ExportCommand - Hint for exporting the current project as a .mcaddon\r\n *\r\n * The slash-bar version is intentionally informational \u2014 actual\r\n * .mcaddon packaging is best driven from the Project Actions\r\n * \"Export\" dropdown (which orchestrates dialogs, file pickers,\r\n * and pack selection). This command tells the user where to go.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\n\r\nexport class ExportCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"export\",\r\n    description: \"Show how to export the current project as a .mcaddon\",\r\n    aliases: [\"exportaddon\"],\r\n    category: \"Project\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/export\", \"/exportaddon\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /export.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const project = context.project;\r\n    const message =\r\n      `To export '${project.name}' as a .mcaddon, open the project's ` +\r\n      `Actions panel and use the \"Export\" dropdown. The dropdown lets you ` +\r\n      `select packs, choose an output folder, and produce .mcaddon / .mcpack files.`;\r\n\r\n    context.output.info(message);\r\n    context.output.info(\"Tip: from the CLI you can also run `npx mct exportaddon -i <project-folder>`.\");\r\n\r\n    return this.success(\"Displayed export instructions\", {\r\n      projectName: project.name,\r\n      hint: \"Use Project Actions \u2192 Export dropdown\",\r\n    });\r\n  }\r\n}\r\n\r\nexport const exportCommand = new ExportCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * DeployCommand - Hint for deploying the current project\r\n *\r\n * Real deployment requires filesystem access (e.g. com.mojang\r\n * folder on Windows) and is only available in the Electron host\r\n * or via the CLI. The slash-bar version is informational \u2014 it\r\n * directs the user to the Project Actions \"Deploy\" dropdown.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport CreatorToolsHost, { HostType } from \"../../CreatorToolsHost\";\r\n\r\nexport class DeployCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"deploy\",\r\n    description: \"Show how to deploy the current project to a Minecraft instance\",\r\n    aliases: [\"dp\"],\r\n    category: \"Project\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/deploy\", \"/dp\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /deploy.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const isWebOnly =\r\n      CreatorToolsHost.hostType === HostType.web || CreatorToolsHost.hostType === HostType.webPlusServices;\r\n\r\n    if (isWebOnly) {\r\n      context.output.warn(\r\n        \"Web builds cannot deploy to your Minecraft installation \u2014 deployment requires filesystem access.\"\r\n      );\r\n      context.output.info(\r\n        \"Open this project in the Electron desktop app, the VS Code extension, or run the CLI \" +\r\n          \"(`npx mct deploy`) to push packs to com.mojang.\"\r\n      );\r\n    } else {\r\n      context.output.info(\r\n        `To deploy '${context.project.name}', open the project's Actions panel and use the ` +\r\n          `\"Deploy\" dropdown to push to your local Minecraft installation, a dedicated server, ` +\r\n          `or another configured target.`\r\n      );\r\n      context.output.info(\"Tip: from the CLI you can also run `npx mct deploy -i <project-folder>`.\");\r\n    }\r\n\r\n    return this.success(\"Displayed deploy instructions\", {\r\n      projectName: context.project.name,\r\n      hostType: CreatorToolsHost.hostType,\r\n      hint: \"Use Project Actions \u2192 Deploy dropdown\",\r\n    });\r\n  }\r\n}\r\n\r\nexport const deployCommand = new DeployCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * SwitchModeCommand - Switch the global edit-preference mode\r\n *\r\n * Updates `creatorTools.editPreference` to one of the three\r\n * built-in modes:\r\n *   - focused \u2192 CreatorToolsEditPreference.summarized\r\n *   - full    \u2192 CreatorToolsEditPreference.editors\r\n *   - raw     \u2192 CreatorToolsEditPreference.raw\r\n *\r\n * The new preference is persisted via creatorTools.save() so the\r\n * choice survives a reload.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { CreatorToolsEditPreference } from \"../../ICreatorToolsData\";\r\n\r\nconst MODE_CHOICES = [\"focused\", \"full\", \"raw\"] as const;\r\ntype ModeChoice = (typeof MODE_CHOICES)[number];\r\n\r\nconst MODE_TO_PREFERENCE: Record<ModeChoice, CreatorToolsEditPreference> = {\r\n  focused: CreatorToolsEditPreference.summarized,\r\n  full: CreatorToolsEditPreference.editors,\r\n  raw: CreatorToolsEditPreference.raw,\r\n};\r\n\r\nconst MODE_DESCRIPTIONS: Record<ModeChoice, string> = {\r\n  focused: \"Focused mode \u2014 simplified, summary-first editing surface.\",\r\n  full: \"Full mode \u2014 complete file access with visual form-based editors.\",\r\n  raw: \"Raw mode \u2014 direct JSON / text editing of every file in the project.\",\r\n};\r\n\r\nexport class SwitchModeCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"mode\",\r\n    description: \"Switch the editor mode (focused | full | raw)\",\r\n    aliases: [\"setmode\"],\r\n    category: \"General\",\r\n    arguments: [\r\n      {\r\n        name: \"mode\",\r\n        description: \"Edit-preference mode to switch to\",\r\n        type: \"choice\",\r\n        required: true,\r\n        choices: [...MODE_CHOICES],\r\n      },\r\n    ],\r\n    isWriteCommand: false,\r\n    examples: [\"/mode focused\", \"/mode full\", \"/mode raw\", \"/setmode raw\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const validationError = this.validateRequiredArgs(args);\r\n    if (validationError) return validationError;\r\n\r\n    if (!context.creatorTools) {\r\n      context.output.error(\"No CreatorTools instance available \u2014 cannot change edit preference.\");\r\n      return this.error(\"NO_CREATOR_TOOLS\", \"No CreatorTools instance available.\");\r\n    }\r\n\r\n    const requested = (args[0] || \"\").toLowerCase() as ModeChoice;\r\n    if (!MODE_CHOICES.includes(requested)) {\r\n      const message = `Unknown mode '${args[0]}'. Choose one of: ${MODE_CHOICES.join(\", \")}.`;\r\n      context.output.error(message);\r\n      return this.error(\"INVALID_MODE\", message);\r\n    }\r\n\r\n    const preference = MODE_TO_PREFERENCE[requested];\r\n\r\n    try {\r\n      context.creatorTools.editPreference = preference;\r\n      await context.creatorTools.save();\r\n\r\n      context.output.success(`Edit mode set to '${requested}'.`);\r\n      context.output.info(MODE_DESCRIPTIONS[requested]);\r\n\r\n      return this.success(`Edit mode set to '${requested}'`, {\r\n        mode: requested,\r\n        preference,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      context.output.error(`Failed to switch mode: ${message}`);\r\n      return this.error(\"MODE_SWITCH_ERROR\", `Failed to switch mode: ${message}`);\r\n    }\r\n  }\r\n\r\n  async getCompletions(\r\n    _context: IToolCommandContext,\r\n    _args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    if (argIndex !== 0) return [];\r\n    const lower = partialArg.toLowerCase();\r\n    return MODE_CHOICES.filter((m) => m.startsWith(lower));\r\n  }\r\n}\r\n\r\nexport const switchModeCommand = new SwitchModeCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ToggleInspectorCommand - Hint for opening the project Inspector tab\r\n *\r\n * The Inspector is a UI surface owned by `ProjectEditor`/`App`\r\n * (ProjectEditorMode.inspector); there is no global toggle on\r\n * `Project` or `CreatorTools` that can flip it from outside the\r\n * React tree. This command emits a hint pointing the user at the\r\n * Inspector tab so they can open it manually.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\n\r\nexport class ToggleInspectorCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"inspector\",\r\n    description: \"Show how to open the project Inspector view\",\r\n    aliases: [\"ti\"],\r\n    category: \"Validation\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/inspector\", \"/ti\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /inspector.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    context.output.info(\r\n      \"Open the Inspector by clicking the Inspector tab in the project navigation pane \" +\r\n        \"(or selecting Inspector from the Actions panel). Use /validate (alias /val) for a \" +\r\n        \"quick error/warning/recommendation summary directly from this command bar.\"\r\n    );\r\n\r\n    return this.success(\"Displayed Inspector hint\", {\r\n      projectName: context.project.name,\r\n      hint: \"Click Inspector tab in project navigation\",\r\n    });\r\n  }\r\n}\r\n\r\nexport const toggleInspectorCommand = new ToggleInspectorCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ReloadProjectCommand - Re-scan the current project's files\r\n *\r\n * Re-runs `project.inferProjectItemsFromFiles(true)` so any files\r\n * that were added, removed, or modified outside the editor are\r\n * picked up. Reports the new total item count.\r\n *\r\n * NOTE: this shadows Bedrock's in-game `/reload` command for the\r\n * MCT slash bar. Inside a Bedrock console you can still reach\r\n * Bedrock's reload via the dedicated server console.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\n\r\nexport class ReloadProjectCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"reload\",\r\n    description: \"Re-scan project files and refresh the item list\",\r\n    category: \"Project\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/reload\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /reload.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const project = context.project;\r\n    const before = project.items.length;\r\n\r\n    try {\r\n      context.output.info(`Reloading project '${project.name}'...`);\r\n      await project.inferProjectItemsFromFiles(true);\r\n      const after = project.items.length;\r\n      const delta = after - before;\r\n      const deltaStr = delta === 0 ? \"no change\" : delta > 0 ? `+${delta}` : `${delta}`;\r\n\r\n      context.output.success(`Reloaded '${project.name}': ${after} item(s) (${deltaStr}).`);\r\n\r\n      return this.success(`Reloaded ${after} items`, {\r\n        projectName: project.name,\r\n        itemCountBefore: before,\r\n        itemCountAfter: after,\r\n        delta,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      context.output.error(`Reload failed: ${message}`);\r\n      return this.error(\"RELOAD_ERROR\", `Failed to reload project: ${message}`);\r\n    }\r\n  }\r\n}\r\n\r\nexport const reloadProjectCommand = new ReloadProjectCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * OpenFileCommand - Locate a project item by name or path (slash command: `/find`)\r\n *\r\n * Search-only: takes a filename / path fragment, finds the matching project\r\n * item (by name or by `projectPath` substring), and prints its full project\r\n * path. Intentionally NOT named `/open` \u2014 actual \"open in editor\" navigation\r\n * depends on UI integration outside the ToolCommand layer, and a `/open`\r\n * that doesn't open is more surprising than helpful. Reserve `/open` for\r\n * when navigation is wired through `onActiveProjectItemChangeRequested`\r\n * (see ProjectAddButton for the existing pattern).\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { projectItemNameProvider } from \"../AutocompleteProviders\";\r\n\r\nexport class OpenFileCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"find\",\r\n    description: \"Find a project item by name or path and print its location\",\r\n    aliases: [\"locate\", \"f\"],\r\n    category: \"Project\",\r\n    requiresProject: true,\r\n    arguments: [\r\n      {\r\n        name: \"filename\",\r\n        description: \"Name or path fragment of the item to locate\",\r\n        type: \"string\",\r\n        required: true,\r\n        autocompleteProvider: projectItemNameProvider,\r\n      },\r\n    ],\r\n    isWriteCommand: false,\r\n    examples: [\"/find my_entity\", \"/locate behavior_pack/entities/sheep.json\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /find.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const validationError = this.validateRequiredArgs(args);\r\n    if (validationError) return validationError;\r\n\r\n    const query = args[0];\r\n    const lower = query.toLowerCase();\r\n    const items = context.project.items || [];\r\n\r\n    const matches = items.filter((item) => {\r\n      const name = (item.name || \"\").toLowerCase();\r\n      const path = (item.projectPath || \"\").toLowerCase();\r\n      return name === lower || name.includes(lower) || path.includes(lower);\r\n    });\r\n\r\n    if (matches.length === 0) {\r\n      const message = `No project item matches '${query}'.`;\r\n      context.output.warn(message);\r\n      return this.error(\"ITEM_NOT_FOUND\", message);\r\n    }\r\n\r\n    const exact = matches.find((item) => (item.name || \"\").toLowerCase() === lower);\r\n    const primary = exact || matches[0];\r\n\r\n    context.output.success(`Found: ${primary.name}`);\r\n    if (primary.projectPath) {\r\n      context.output.info(`Path: ${primary.projectPath}`);\r\n    }\r\n\r\n    if (matches.length > 1) {\r\n      context.output.info(`(${matches.length - 1} other match${matches.length - 1 === 1 ? \"\" : \"es\"})`);\r\n      const limit = Math.min(matches.length, 6);\r\n      for (let i = 0; i < limit; i++) {\r\n        const m = matches[i];\r\n        if (m === primary) continue;\r\n        context.output.info(`  \u2022 ${m.name} \u2014 ${m.projectPath || \"(no path)\"}`);\r\n      }\r\n    }\r\n\r\n    return this.success(`Located ${primary.name}`, {\r\n      query,\r\n      match: {\r\n        name: primary.name,\r\n        projectPath: primary.projectPath,\r\n        itemType: primary.itemType,\r\n      },\r\n      totalMatches: matches.length,\r\n    });\r\n  }\r\n}\r\n\r\nexport const openFileCommand = new OpenFileCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * FormatDocumentCommand - Hint about format-on-save behavior\r\n *\r\n * Informational only. Explains that format-on-save is now off by\r\n * default, that switching back to a visual editor mode reformats\r\n * the document automatically, and how to re-enable\r\n * `formatBeforeSave` from the Settings panel.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\n\r\nexport class FormatDocumentCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"format\",\r\n    description: \"Explain how document formatting works and how to enable format-on-save\",\r\n    aliases: [\"fmt\"],\r\n    category: \"General\",\r\n    isWriteCommand: false,\r\n    examples: [\"/format\", \"/fmt\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const lines = [\r\n      \"Format-on-save is OFF by default \u2014 your raw JSON / TS files are saved exactly as you typed them.\",\r\n      \"Switching from Raw mode back to a visual editor (Focused or Full) will reformat the document automatically.\",\r\n      \"To re-enable format-on-save for ALL saves: open the Settings panel and toggle 'Format documents before saving' ON.\",\r\n    ];\r\n\r\n    let formatBeforeSave: boolean | undefined;\r\n    if (context.creatorTools) {\r\n      try {\r\n        formatBeforeSave = context.creatorTools.formatBeforeSave;\r\n        lines.push(`Current setting: formatBeforeSave = ${formatBeforeSave ? \"on\" : \"off\"}.`);\r\n      } catch {\r\n        // ignore \u2014 settings access is best-effort here\r\n      }\r\n    }\r\n\r\n    for (const line of lines) {\r\n      context.output.info(line);\r\n    }\r\n\r\n    return this.success(\"Displayed formatting guidance\", {\r\n      formatBeforeSave,\r\n      hint: \"Settings panel \u2192 Format documents before saving\",\r\n    });\r\n  }\r\n}\r\n\r\nexport const formatDocumentCommand = new FormatDocumentCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * OpenSettingsCommand - Pointer to the Settings panel\r\n *\r\n * Informational only. Tells the user where to find the Settings\r\n * panel (CreatorToolsSettingsPanel) so they can adjust theme,\r\n * mode, format-on-save, and other preferences. The slash bar\r\n * does not navigate the UI directly.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\n\r\nexport class OpenSettingsCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"settings\",\r\n    description: \"Show how to open the Settings panel\",\r\n    aliases: [\"prefs\"],\r\n    category: \"General\",\r\n    isWriteCommand: false,\r\n    examples: [\"/settings\", \"/prefs\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const lines = [\r\n      \"Settings live on the Home screen \u2014 click the gear / 'Settings' button on the home page to open the Settings panel.\",\r\n      \"From there you can change theme, edit mode (Focused / Full / Raw), format-on-save, and other preferences.\",\r\n      \"Quick alternatives: use /mode <focused|full|raw> to switch edit mode, or /format for formatting guidance.\",\r\n    ];\r\n\r\n    for (const line of lines) {\r\n      context.output.info(line);\r\n    }\r\n\r\n    return this.success(\"Displayed Settings guidance\", {\r\n      hint: \"Home page \u2192 Settings panel\",\r\n    });\r\n  }\r\n}\r\n\r\nexport const openSettingsCommand = new OpenSettingsCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Command index - exports all ToolCommands\r\n *\r\n * NOTE: ServerCommand is NOT exported here because it imports Node.js-only\r\n * modules (net, child_process, os, timers) via DedicatedServer.ts.\r\n * Use registerNodeOnlyCommands() to register it in Node.js entry points.\r\n */\r\n\r\nexport { helpCommand, HelpCommand } from \"./HelpCommand\";\r\nexport { createCommand, CreateCommand } from \"./CreateCommand\";\r\nexport { addCommand, AddCommand } from \"./AddCommand\";\r\nexport { removeCommand, RemoveCommand } from \"./RemoveCommand\";\r\nexport { renameCommand, RenameCommand } from \"./RenameCommand\";\r\nexport { scriptCommand, ScriptCommand } from \"./ScriptCommand\";\r\nexport { openSampleCommand, OpenSampleCommand } from \"./OpenSampleCommand\";\r\nexport { validateCommand, ValidateCommand } from \"./ValidateCommand\";\r\nexport { infoCommand, InfoCommand } from \"./InfoCommand\";\r\nexport { exportCommand, ExportCommand } from \"./ExportCommand\";\r\nexport { deployCommand, DeployCommand } from \"./DeployCommand\";\r\nexport { switchModeCommand, SwitchModeCommand } from \"./SwitchModeCommand\";\r\nexport { toggleInspectorCommand, ToggleInspectorCommand } from \"./ToggleInspectorCommand\";\r\nexport { reloadProjectCommand, ReloadProjectCommand } from \"./ReloadProjectCommand\";\r\nexport { openFileCommand, OpenFileCommand } from \"./OpenFileCommand\";\r\nexport { formatDocumentCommand, FormatDocumentCommand } from \"./FormatDocumentCommand\";\r\nexport { openSettingsCommand, OpenSettingsCommand } from \"./OpenSettingsCommand\";\r\n\r\nimport { helpCommand } from \"./HelpCommand\";\r\nimport { createCommand } from \"./CreateCommand\";\r\nimport { addCommand } from \"./AddCommand\";\r\nimport { removeCommand } from \"./RemoveCommand\";\r\nimport { renameCommand } from \"./RenameCommand\";\r\nimport { scriptCommand } from \"./ScriptCommand\";\r\nimport { openSampleCommand } from \"./OpenSampleCommand\";\r\nimport { validateCommand } from \"./ValidateCommand\";\r\nimport { infoCommand } from \"./InfoCommand\";\r\nimport { exportCommand } from \"./ExportCommand\";\r\nimport { deployCommand } from \"./DeployCommand\";\r\nimport { switchModeCommand } from \"./SwitchModeCommand\";\r\nimport { toggleInspectorCommand } from \"./ToggleInspectorCommand\";\r\nimport { reloadProjectCommand } from \"./ReloadProjectCommand\";\r\nimport { openFileCommand } from \"./OpenFileCommand\";\r\nimport { formatDocumentCommand } from \"./FormatDocumentCommand\";\r\nimport { openSettingsCommand } from \"./OpenSettingsCommand\";\r\nimport type { IToolCommand } from \"../IToolCommand\";\r\nimport { ToolCommandRegistry } from \"../ToolCommandRegistry\";\r\n\r\n/**\r\n * All built-in ToolCommands that are safe for all build targets (web, Node.js, Electron).\r\n * ServerCommand is excluded because it transitively imports Node.js-only modules.\r\n */\r\nexport const allToolCommands: IToolCommand[] = [\r\n  helpCommand,\r\n  createCommand,\r\n  addCommand,\r\n  removeCommand,\r\n  renameCommand,\r\n  scriptCommand,\r\n  openSampleCommand,\r\n  validateCommand,\r\n  infoCommand,\r\n  exportCommand,\r\n  deployCommand,\r\n  switchModeCommand,\r\n  toggleInspectorCommand,\r\n  reloadProjectCommand,\r\n  openFileCommand,\r\n  formatDocumentCommand,\r\n  openSettingsCommand,\r\n];\r\n\r\n/**\r\n * Register all platform-safe built-in commands with the registry.\r\n */\r\nexport function registerAllToolCommands(): void {\r\n  ToolCommandRegistry.instance.registerAll(allToolCommands);\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ToolCommands - Unified command system for Minecraft Creator Tools\r\n *\r\n * This module provides a unified way to register and invoke commands across:\r\n * - CLI (via thin adapter)\r\n * - MCP tools\r\n * - In-game edit bar (SearchCommandEditor)\r\n * - Serve mode interactive terminal\r\n * - Server management UI\r\n * - Home page command bar\r\n *\r\n * USAGE:\r\n * ```typescript\r\n * import { ToolCommandRegistry, initializeToolCommands } from \"./toolcommands\";\r\n *\r\n * // Initialize (registers all built-in commands)\r\n * initializeToolCommands();\r\n *\r\n * // Execute a command\r\n * const result = await ToolCommandRegistry.instance.execute(\"/help\", context);\r\n *\r\n * // Get autocomplete suggestions\r\n * const completions = await ToolCommandRegistry.instance.getCompletions(\"/cr\", 3, context);\r\n * ```\r\n */\r\n\r\n// Core interfaces\r\nexport type { IToolCommand, IToolCommandMetadata, IToolCommandResult } from \"./IToolCommand\";\r\nexport { ToolCommandBase, ToolCommandScope } from \"./IToolCommand\";\r\nexport type { IToolCommandArgument, IToolCommandFlag, AutocompleteProvider } from \"./IToolCommandArgument\";\r\nexport type { IToolCommandContext, IToolCommandOutput, IToolCommandSession } from \"./IToolCommandContext\";\r\nexport { ToolCommandContextFactory } from \"./IToolCommandContext\";\r\n\r\n// Registry and parser\r\nexport { ToolCommandRegistry } from \"./ToolCommandRegistry\";\r\nexport { ToolCommandParser } from \"./ToolCommandParser\";\r\nexport type { ParsedToolCommand } from \"./ToolCommandParser\";\r\n\r\n\r\n\r\n// Autocomplete providers\r\nexport * from \"./AutocompleteProviders\";\r\n\r\n// Commands\r\nexport * from \"./commands\";\r\n\r\nimport { registerAllToolCommands } from \"./commands\";\r\n\r\nlet _initialized = false;\r\n\r\n/**\r\n * Initialize the ToolCommand system by registering all built-in commands.\r\n * Safe to call multiple times (only initializes once).\r\n *\r\n * NOTE: This registers only platform-safe commands. For Node.js-only commands\r\n * (e.g., ServerCommand), call registerNodeOnlyCommands() from\r\n * \"./registerNodeCommands\" in your Node.js entry point.\r\n */\r\nexport function initializeToolCommands(): void {\r\n  if (_initialized) return;\r\n  _initialized = true;\r\n  registerAllToolCommands();\r\n}\r\n\r\n/**\r\n * Check if ToolCommands have been initialized.\r\n */\r\nexport function isToolCommandsInitialized(): boolean {\r\n  return _initialized;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport CommandStructure from \"./CommandStructure\";\r\nimport { CommandStatus, ICommandResult } from \"./ICommand\";\r\nimport IContext from \"./IContext\";\r\nimport { ToolCommandRegistry, initializeToolCommands } from \"./toolcommands\";\r\nimport type { IToolCommandContext, IToolCommandOutput } from \"./toolcommands\";\r\n\r\nexport enum CommandScope {\r\n  any = 1,\r\n  project = 2,\r\n  minecraft = 3,\r\n  carto = 4,\r\n  host = 5,\r\n\r\n  debug = 10,\r\n  debugProject = 11,\r\n  debugMinecraft = 12,\r\n  debugHost = 14,\r\n}\r\n\r\nconst MinecraftCommands = [\r\n  \"aimassist\",\r\n  \"allowlist\",\r\n  \"alwaysday\",\r\n  \"camera\",\r\n  \"camerashake\",\r\n  \"changesetting\",\r\n  \"clear\",\r\n  \"clearspawnpoint\",\r\n  \"clone\",\r\n  \"commandbuilder\",\r\n  \"connect\",\r\n  \"controlscheme\",\r\n  \"damage\",\r\n  \"daylock\",\r\n  \"deop\",\r\n  \"dialogue\",\r\n  \"difficulty\",\r\n  \"effect\",\r\n  \"enchant\",\r\n  \"event\",\r\n  \"execute\",\r\n  \"fill\",\r\n  \"fog\",\r\n  \"function\",\r\n  \"gamemode\",\r\n  \"gamerule\",\r\n  \"gametest\",\r\n  \"give\",\r\n  \"help\",\r\n  \"hud\",\r\n  \"inputpermission\",\r\n  \"kick\",\r\n  \"kill\",\r\n  \"list\",\r\n  \"locate\",\r\n  \"loot\",\r\n  \"me\",\r\n  \"msg\",\r\n  \"mobevent\",\r\n  \"music\",\r\n  \"op\",\r\n  \"ops\",\r\n  \"particle\",\r\n  \"permission\",\r\n  \"place\",\r\n  \"playanimation\",\r\n  \"playsound\",\r\n  \"project\",\r\n  \"recipe\",\r\n  \"reload\",\r\n  \"reloadconfig\",\r\n  \"reloadpacketlimitconfig\",\r\n  \"replaceitem\",\r\n  \"ride\",\r\n  \"save\",\r\n  \"say\",\r\n  \"schedule\",\r\n  \"scoreboard\",\r\n  \"script\",\r\n  \"scriptevent\",\r\n  \"sendshowstoreoffer\",\r\n  \"setblock\",\r\n  \"setmaxplayers\",\r\n  \"setworldspawn\",\r\n  \"simulationtype\",\r\n  \"spawnpoint\",\r\n  \"spreadplayers\",\r\n  \"stop\",\r\n  \"stopsound\",\r\n  \"structure\",\r\n  \"summon\",\r\n  \"tag\",\r\n  \"teleport\",\r\n  \"tell\",\r\n  \"tellraw\",\r\n  \"testfor\",\r\n  \"testforblock\",\r\n  \"testforblocks\",\r\n  \"tickingarea\",\r\n  \"tp\",\r\n  \"time\",\r\n  \"title\",\r\n  \"titleraw\",\r\n  \"toggledownfall\",\r\n  \"transfer\",\r\n  \"volumearea\",\r\n  \"weather\",\r\n  \"wsserver\",\r\n  \"whitelist\",\r\n  \"?\",\r\n  \"w\",\r\n  \"xp\",\r\n];\r\n\r\nconst MinecraftAddOnBlockedCommands = [\r\n  \"allowlist\",\r\n  \"alwaysday\",\r\n  \"changesetting\",\r\n  \"connect\",\r\n  \"daylock\",\r\n  \"deop\",\r\n  \"difficulty\",\r\n  \"gamemode\",\r\n  \"gamerule\",\r\n  \"gametest\",\r\n  \"help\",\r\n  \"kick\",\r\n  \"list\",\r\n  \"locate\",\r\n  \"op\",\r\n  \"ops\",\r\n  \"permission\",\r\n  \"project\",\r\n  \"reload\",\r\n  \"reloadconfig\",\r\n  \"save\",\r\n  \"script\",\r\n  \"setmaxplayers\",\r\n  \"setworldspawn\",\r\n  \"simulationtype\",\r\n  \"stop\",\r\n  \"tickingarea\",\r\n  \"time\",\r\n  \"transfer\",\r\n  \"wsserver\",\r\n  \"whitelist\",\r\n  \"?\",\r\n];\r\n\r\nexport default class CommandRegistry {\r\n  private static _registry?: CommandRegistry;\r\n\r\n  private _commandsByName: {\r\n    [name: string]: (context: IContext, name: string, argumentCollection: string[]) => Promise<ICommandResult>;\r\n  } = {};\r\n  private _commandsByScope: { [name: string]: CommandScope } = {};\r\n\r\n  public static get main() {\r\n    if (!this._registry) {\r\n      this._registry = new CommandRegistry();\r\n\r\n      this._registry.registerCommand(\r\n        \"sleep\",\r\n        CommandScope.any,\r\n        async (context: IContext, name: string, args: string[]): Promise<ICommandResult> => {\r\n          if (args.length === 1) {\r\n            let delay = 0;\r\n            try {\r\n              delay = parseInt(args[0]);\r\n            } catch (e) {}\r\n\r\n            if (delay > 0) {\r\n              context.creatorTools.notifyStatusUpdate(\"(Delaying commands for \" + delay + \"ms).\");\r\n\r\n              await Utilities.sleep(delay);\r\n            }\r\n          }\r\n\r\n          return { status: CommandStatus.completed };\r\n        }\r\n      );\r\n    }\r\n\r\n    return this._registry;\r\n  }\r\n\r\n  registerCommand(\r\n    commandName: string,\r\n    commandScope: CommandScope,\r\n    command: (context: IContext, name: string, argumentCollection: string[]) => Promise<ICommandResult>\r\n  ) {\r\n    commandName = commandName.toLowerCase();\r\n\r\n    if (Utilities.isUsableAsObjectKey(commandName)) {\r\n      this._commandsByName[commandName] = command;\r\n      this._commandsByScope[commandName] = commandScope;\r\n    } else {\r\n      Log.unsupportedToken(commandName);\r\n    }\r\n  }\r\n\r\n  logHelp() {\r\n    let commandArr = [];\r\n\r\n    for (const commandName in this._commandsByName) {\r\n      commandArr.push(commandName);\r\n    }\r\n\r\n    commandArr = commandArr.sort();\r\n\r\n    Log.message(\"Use help <command name> for more detailed help on a command.\");\r\n\r\n    for (let i = 0; i < commandArr.length; i++) {\r\n      Log.message(commandArr[i]);\r\n    }\r\n  }\r\n\r\n  static isMinecraftBuiltInCommand(name: string) {\r\n    return MinecraftCommands.includes(name) || name === \"#\";\r\n  }\r\n\r\n  static isAddOnBlockedCommand(name: string) {\r\n    return MinecraftAddOnBlockedCommands.includes(name);\r\n  }\r\n\r\n  /**\r\n   * Create an IToolCommandOutput from IContext for ToolCommand execution.\r\n   */\r\n  private createToolCommandOutput(context: IContext): IToolCommandOutput {\r\n    return {\r\n      info: (msg) => {\r\n        Log.message(msg);\r\n        context.creatorTools.notifyStatusUpdate(msg);\r\n      },\r\n      success: (msg) => {\r\n        Log.message(\"\u2713 \" + msg);\r\n        context.creatorTools.notifyStatusUpdate(msg);\r\n      },\r\n      warn: (msg) => Log.debug(msg),\r\n      error: (msg) => Log.error(msg),\r\n      debug: (msg) => Log.verbose(msg),\r\n      progress: (current, total, msg) => {\r\n        const pct = Math.round((current / total) * 100);\r\n        context.creatorTools.notifyStatusUpdate(`[${pct}%] ${msg || \"\"}`);\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create an IToolCommandContext from the app's IContext.\r\n   */\r\n  private createToolCommandContext(context: IContext): IToolCommandContext {\r\n    return {\r\n      creatorTools: context.creatorTools,\r\n      project: context.project,\r\n      minecraft: context.minecraft,\r\n      output: this.createToolCommandOutput(context),\r\n      scope: \"ui\",\r\n    };\r\n  }\r\n\r\n  async runCommand(context: IContext, commandText: string): Promise<ICommandResult | undefined> {\r\n    const command = CommandStructure.parse(commandText);\r\n\r\n    if (!command || !command.fullName || !command.commandArguments) {\r\n      return undefined;\r\n    }\r\n\r\n    // Initialize ToolCommands if not already done\r\n    initializeToolCommands();\r\n\r\n    // Check ToolCommandRegistry first (except for Minecraft built-in commands other than \"help\")\r\n    // The \"help\" command is special - we want our unified help to handle it\r\n    const toolRegistry = ToolCommandRegistry.instance;\r\n\r\n    if (command.fullName === \"help\" || !CommandRegistry.isMinecraftBuiltInCommand(command.fullName)) {\r\n      if (toolRegistry.has(command.fullName)) {\r\n        const toolContext = this.createToolCommandContext(context);\r\n        const result = await toolRegistry.execute(commandText, toolContext);\r\n\r\n        if (result) {\r\n          if (result.success) {\r\n            return { status: CommandStatus.completed, data: result.data };\r\n          } else {\r\n            Log.error(result.error?.message || \"Command failed\");\r\n            return { status: CommandStatus.invalidArguments };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const scope = this._commandsByScope[command.fullName];\r\n    const commandName = this._commandsByName[command.fullName];\r\n\r\n    // Pass through Minecraft built-in commands (except \"help\" which is handled above)\r\n    if (\r\n      CommandRegistry.isMinecraftBuiltInCommand(command.fullName) &&\r\n      command.fullName !== \"help\" &&\r\n      context.minecraft\r\n    ) {\r\n      Log.debug(\"Sending '\" + commandText + \"' to Minecraft.\");\r\n\r\n      let result = await context.minecraft.runCommand(commandText);\r\n\r\n      return {\r\n        data: result,\r\n        status: CommandStatus.completed,\r\n      };\r\n    } else if (scope && commandName) {\r\n      if (\r\n        (scope === CommandScope.debug ||\r\n          scope === CommandScope.debugProject ||\r\n          scope === CommandScope.debugMinecraft) &&\r\n        !Utilities.isDebug\r\n      ) {\r\n        return undefined;\r\n      }\r\n\r\n      if ((scope === CommandScope.project || scope === CommandScope.debugProject) && !context.project) {\r\n        Log.message(\"Could not run command '\" + command.fullName + \"'; no active project.\");\r\n        return undefined;\r\n      }\r\n\r\n      if ((scope === CommandScope.minecraft || scope === CommandScope.debugMinecraft) && !context.minecraft) {\r\n        Log.message(\"Could not run command '\" + command.fullName + \"'; no active Minecraft deploy target was set.\");\r\n        return undefined;\r\n      }\r\n\r\n      if ((scope === CommandScope.host || scope === CommandScope.debugHost) && !context.host) {\r\n        Log.message(\"Could not run command '\" + command.fullName + \"'; no host was set.\");\r\n        return undefined;\r\n      }\r\n\r\n      const result = await commandName(context, command.fullName, command.commandArguments);\r\n\r\n      if (result.status === CommandStatus.invalidEnvironment) {\r\n        Log.error(\"'\" + command.fullName + \"' was not set up properly.\");\r\n      } else if (result.status === CommandStatus.invalidArguments) {\r\n        Log.error(\"'\" + command.fullName + \"' command arguments were not set up.\");\r\n      }\r\n\r\n      return result;\r\n    }\r\n\r\n    context.creatorTools.notifyStatusUpdate(\"Could not find a command '\" + command.fullName + \"'.\");\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IDialogueWrapper, { IDialogueSceneButton } from \"./IDialogue\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class Dialogue {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IDialogueWrapper;\r\n\r\n  private _onLoaded = new EventDispatcher<Dialogue, Dialogue>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<Dialogue, Dialogue>) {\r\n    let dia: Dialogue | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dia = new Dialogue();\r\n\r\n      dia.file = file;\r\n\r\n      file.manager = dia;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof Dialogue) {\r\n      dia = file.manager as Dialogue;\r\n\r\n      if (!dia.isLoaded) {\r\n        if (loadHandler) {\r\n          dia.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await dia.load();\r\n      }\r\n    }\r\n\r\n    return dia;\r\n  }\r\n\r\n  getAllButtons() {\r\n    const buttons: IDialogueSceneButton[] = [];\r\n\r\n    if (\r\n      this.definition &&\r\n      this.definition[\"minecraft:npc_dialogue\"] &&\r\n      Array.isArray(this.definition[\"minecraft:npc_dialogue\"].scenes)\r\n    ) {\r\n      for (const scene of this.definition[\"minecraft:npc_dialogue\"].scenes) {\r\n        if (scene && scene.buttons && Array.isArray(scene.buttons)) {\r\n          for (const button of scene.buttons) {\r\n            buttons.push(button);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return buttons;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"DGUEP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: \"1.12.0\",\r\n        \"minecraft:npc_dialogue\": {\r\n          scenes: [],\r\n        },\r\n      };\r\n    }\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport MCWorld from \"../minecraft/MCWorld\";\r\nimport Log from \"../core/Log\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport CommandBlockActor from \"../minecraft/blockActors/CommandBlockActor\";\r\nimport { StatusTopic } from \"../app/Status\";\r\nimport CommandStructure from \"../app/CommandStructure\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport CommandRegistry from \"../app/CommandRegistry\";\r\nimport Dialogue from \"../minecraft/Dialogue\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport { NbtTagType } from \"../minecraft/NbtBinaryTag\";\r\nimport AnimationControllerBehaviorDefinition from \"../minecraft/AnimationControllerBehaviorDefinition\";\r\nimport AnimationBehaviorDefinition from \"../minecraft/AnimationBehaviorDefinition\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\nimport { GameType } from \"../minecraft/WorldLevelDat\";\r\n\r\nimport { IGeneratorOptions, ResourceConsumptionConstraint } from \"./ProjectInfoSet\";\r\n\r\nexport const MaxWorldRecordsToProcess = 3000000; // very crudely, this equates to about 100K chunks\r\n\r\n/**\r\n * Validates and aggregates world data including command blocks and level.dat information.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/worlddata.form.json} for topic definitions\r\n */\r\nexport enum WorldDataInfoGeneratorTest {\r\n  unexpectedCommandInMCFunction = 101,\r\n  unexpectedCommandInCommandBlock = 102,\r\n  minX = 103,\r\n  minZ = 104,\r\n  maxX = 105,\r\n  maxZ = 106,\r\n  containsWorldImpactingCommand = 112,\r\n  blocks = 121,\r\n  blockData = 122,\r\n  command = 123,\r\n  executeSubCommand = 124,\r\n  levelDat = 125,\r\n  levelDatExperiments = 126,\r\n  subchunklessChunks = 127,\r\n  chunks = 128,\r\n  commandIsFromOlderMinecraftVersion = 212,\r\n  couldNotProcessWorld = 216,\r\n  errorProcessingWorld = 400,\r\n  unexpectedError = 401,\r\n}\r\n\r\nexport default class WorldDataInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"WORLDDATA\";\r\n  title = \"World Data Validation\";\r\n\r\n  modernCommandVersion = 33; // corresponds to 1.20.0 versions of Minecraft.\r\n\r\n  performAddOnValidations = false;\r\n  performPlatformVersionValidations: boolean = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.chunkCount = infoSet.getSummedDataValue(\"WORLDDATA\", WorldDataInfoGeneratorTest.chunks);\r\n\r\n    info.subchunkLessChunkCount = infoSet.getSummedDataValue(\r\n      \"WORLDDATA\",\r\n      WorldDataInfoGeneratorTest.subchunklessChunks\r\n    );\r\n\r\n    info.completedWorldDataProcessing =\r\n      infoSet.getCount(\"WORLDDATA\", WorldDataInfoGeneratorTest.couldNotProcessWorld) === 0;\r\n\r\n    info.worldLoadErrors = infoSet.getCount(\"WORLDDATA\", WorldDataInfoGeneratorTest.errorProcessingWorld);\r\n\r\n    const levelItems = infoSet.getItems(this.id, WorldDataInfoGeneratorTest.levelDat);\r\n    const capabilitiesSet = new Set(info.capabilities);\r\n\r\n    for (const levelItem of levelItems) {\r\n      if (levelItem && levelItem.featureSets) {\r\n        const gameType = levelItem.featureSets.GameType;\r\n\r\n        if (gameType !== undefined) {\r\n          if (gameType[GameType.adventure] !== undefined && gameType[GameType.adventure] > 0) {\r\n            if (!capabilitiesSet.has(\"adventure\")) {\r\n              info.capabilities.push(\"adventure\");\r\n              capabilitiesSet.add(\"adventure\");\r\n            }\r\n          }\r\n          if (gameType[GameType.survival] !== undefined && gameType[GameType.survival] > 0) {\r\n            if (!capabilitiesSet.has(\"survival\")) {\r\n              info.capabilities.push(\"survival\");\r\n              capabilitiesSet.add(\"survival\");\r\n            }\r\n          }\r\n          if (gameType[GameType.creative] !== undefined && gameType[GameType.creative] > 0) {\r\n            if (!capabilitiesSet.has(\"creative\")) {\r\n              info.capabilities.push(\"creative\");\r\n              capabilitiesSet.add(\"creative\");\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    info.commands = [];\r\n    const commandsSet = new Set<string>();\r\n\r\n    const commandItems = infoSet.getItems(this.id, WorldDataInfoGeneratorTest.command);\r\n    const subCommandItems = infoSet.getItems(this.id, WorldDataInfoGeneratorTest.executeSubCommand);\r\n\r\n    for (const commandItem of commandItems) {\r\n      let commandNames = commandItem.featureSets;\r\n\r\n      if (commandNames) {\r\n        for (const commandName in commandNames) {\r\n          if (!commandsSet.has(commandName)) {\r\n            info.commands.push(commandName);\r\n            commandsSet.add(commandName);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const commandItem of subCommandItems) {\r\n      let commandNames = commandItem.featureSets;\r\n\r\n      if (commandNames) {\r\n        for (const commandName in commandNames) {\r\n          if (!commandsSet.has(commandName)) {\r\n            info.commands.push(commandName);\r\n            commandsSet.add(commandName);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    info.commands.sort();\r\n  }\r\n\r\n  processListOfCommands(\r\n    commandList: string[],\r\n    items: ProjectInfoItem[],\r\n    projectItem: ProjectItem,\r\n    commandsPi: ProjectInfoItem,\r\n    subCommandsPi: ProjectInfoItem,\r\n    checkForSlash: boolean\r\n  ) {\r\n    for (let i = 0; i < commandList.length; i++) {\r\n      if (commandList[i].trim().length > 0 && (!checkForSlash || commandList[i].startsWith(\"/\"))) {\r\n        const command = CommandStructure.parse(commandList[i]);\r\n\r\n        if (command.fullName.length === 0) {\r\n          continue;\r\n        }\r\n\r\n        if (CommandRegistry.isMinecraftBuiltInCommand(command.fullName)) {\r\n          if (this.performAddOnValidations && CommandRegistry.isAddOnBlockedCommand(command.fullName)) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.warning,\r\n                this.id,\r\n                WorldDataInfoGeneratorTest.containsWorldImpactingCommand,\r\n                \"Contains command '\" +\r\n                  command.fullName +\r\n                  \"' which is impacts the state of the entire world, and generally shouldn't be used in an add-on\",\r\n                projectItem,\r\n                command.fullName,\r\n                undefined,\r\n                commandList[i]\r\n              )\r\n            );\r\n          }\r\n          commandsPi.incrementFeature(command.fullName);\r\n\r\n          if (command.fullName === \"execute\") {\r\n            let foundRun = false;\r\n            for (const arg of command.commandArguments) {\r\n              if (arg === \"run\") {\r\n                foundRun = true;\r\n              } else if (foundRun && CommandRegistry.isMinecraftBuiltInCommand(arg)) {\r\n                subCommandsPi.incrementFeature(arg);\r\n                break;\r\n              }\r\n            }\r\n          }\r\n        } else if (!this.performPlatformVersionValidations && !this.performAddOnValidations) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              WorldDataInfoGeneratorTest.unexpectedCommandInCommandBlock,\r\n              \"Unexpected command '\" + command.fullName + \"'\",\r\n              projectItem,\r\n              command.fullName,\r\n              undefined,\r\n              commandList[i]\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async generate(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    options?: IGeneratorOptions\r\n  ): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const performAggressiveCleanup = options?.performAggressiveCleanup ?? false;\r\n    const onProgress = options?.onProgress;\r\n\r\n    if (\r\n      projectItem.itemType !== ProjectItemType.MCWorld &&\r\n      projectItem.itemType !== ProjectItemType.MCTemplate &&\r\n      projectItem.itemType !== ProjectItemType.worldFolder &&\r\n      projectItem.itemType !== ProjectItemType.dialogueBehaviorJson &&\r\n      projectItem.itemType !== ProjectItemType.animationControllerBehaviorJson &&\r\n      projectItem.itemType !== ProjectItemType.animationBehaviorJson &&\r\n      projectItem.itemType !== ProjectItemType.MCFunction\r\n    ) {\r\n      return items;\r\n    }\r\n\r\n    // Determine if this is a world-type item (needs all aggregates) or just command-related\r\n    const isWorldType =\r\n      projectItem.itemType === ProjectItemType.MCWorld ||\r\n      projectItem.itemType === ProjectItemType.MCTemplate ||\r\n      projectItem.itemType === ProjectItemType.worldFolder;\r\n\r\n    // World-specific aggregates - only create for world items\r\n    let blocksPi: ProjectInfoItem | undefined;\r\n    let blockActorsPi: ProjectInfoItem | undefined;\r\n    let nbtPi: ProjectInfoItem | undefined;\r\n    let nbtExperimentsPi: ProjectInfoItem | undefined;\r\n\r\n    if (isWorldType) {\r\n      blocksPi = new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        WorldDataInfoGeneratorTest.blocks,\r\n        ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.blocks),\r\n        projectItem\r\n      );\r\n      items.push(blocksPi);\r\n\r\n      blockActorsPi = new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        WorldDataInfoGeneratorTest.blockData,\r\n        ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.blockData),\r\n        projectItem\r\n      );\r\n      items.push(blockActorsPi);\r\n\r\n      nbtPi = new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        WorldDataInfoGeneratorTest.levelDat,\r\n        ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.levelDat),\r\n        projectItem\r\n      );\r\n      items.push(nbtPi);\r\n\r\n      nbtExperimentsPi = new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        WorldDataInfoGeneratorTest.levelDatExperiments,\r\n        ProjectInfoUtilities.getTitleFromEnum(\r\n          WorldDataInfoGeneratorTest,\r\n          WorldDataInfoGeneratorTest.levelDatExperiments\r\n        ),\r\n        projectItem\r\n      );\r\n      items.push(nbtExperimentsPi);\r\n    }\r\n\r\n    // Command aggregates - used by all supported item types\r\n    const commandsPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      WorldDataInfoGeneratorTest.command,\r\n      ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.command),\r\n      projectItem\r\n    );\r\n    items.push(commandsPi);\r\n\r\n    const subCommandsPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      WorldDataInfoGeneratorTest.executeSubCommand,\r\n      ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.executeSubCommand),\r\n      projectItem\r\n    );\r\n    items.push(subCommandsPi);\r\n\r\n    if (projectItem.itemType === ProjectItemType.dialogueBehaviorJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const diaManifest = await Dialogue.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (diaManifest && diaManifest.definition && diaManifest.definition[\"minecraft:npc_dialogue\"]) {\r\n          let scenes = diaManifest.definition[\"minecraft:npc_dialogue\"].scenes;\r\n\r\n          for (const scene of scenes) {\r\n            if (scene.on_open_commands) {\r\n              this.processListOfCommands(scene.on_open_commands, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n            if (scene.on_close_commands) {\r\n              this.processListOfCommands(scene.on_close_commands, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n          }\r\n          let buttons = diaManifest.getAllButtons();\r\n\r\n          for (const button of buttons) {\r\n            if (button.commands) {\r\n              this.processListOfCommands(button.commands, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationControllerBehaviorJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const acManifest = await AnimationControllerBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (acManifest && acManifest.data && acManifest.data.animation_controllers) {\r\n          let states = acManifest.getAllStates();\r\n\r\n          for (const state of states) {\r\n            if (state.state.on_entry) {\r\n              this.processListOfCommands(state.state.on_entry, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n\r\n            if (state.state.on_exit) {\r\n              this.processListOfCommands(state.state.on_exit, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationBehaviorJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const animManifest = await AnimationBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (animManifest && animManifest.data && animManifest.data.animations) {\r\n          let timelines = animManifest.getAllTimeline();\r\n\r\n          for (const timeline of timelines) {\r\n            if (timeline.timeline) {\r\n              this.processListOfCommands(timeline.timeline, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.MCFunction) {\r\n      let content = await projectItem.getStringContent();\r\n\r\n      if (content !== undefined) {\r\n        let contentLines = content.split(\"\\n\");\r\n\r\n        this.processListOfCommands(contentLines, items, projectItem, commandsPi, subCommandsPi, false);\r\n      }\r\n    }\r\n\r\n    if (\r\n      projectItem.itemType === ProjectItemType.MCWorld ||\r\n      projectItem.itemType === ProjectItemType.MCTemplate ||\r\n      projectItem.itemType === ProjectItemType.worldFolder\r\n    ) {\r\n      let mcworld: MCWorld | undefined = await MCWorld.ensureOnItem(projectItem);\r\n\r\n      if (!mcworld) {\r\n        Log.debugAlert(\"Could not find respective world.\");\r\n        return items;\r\n      }\r\n\r\n      await mcworld.loadMetaFiles(false);\r\n\r\n      // Determine whether to apply record processing limits based on resource consumption constraint\r\n      const constrainResources = options?.constrainResourceConsumption !== ResourceConsumptionConstraint.none;\r\n      const maxRecordsToProcess = constrainResources ? MaxWorldRecordsToProcess : undefined;\r\n\r\n      let didProcessWorldData = await mcworld.loadLevelDb(false, {\r\n        maxNumberOfRecordsToProcess: maxRecordsToProcess,\r\n      });\r\n\r\n      if (\r\n        mcworld.isInErrorState &&\r\n        mcworld.errorMessages &&\r\n        !this.performAddOnValidations &&\r\n        !this.performPlatformVersionValidations\r\n      ) {\r\n        for (const err of mcworld.errorMessages) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              WorldDataInfoGeneratorTest.errorProcessingWorld,\r\n              ProjectInfoUtilities.getTitleFromEnum(\r\n                WorldDataInfoGeneratorTest,\r\n                WorldDataInfoGeneratorTest.errorProcessingWorld\r\n              ),\r\n              projectItem,\r\n              err.message + (err.context ? \" - \" + err.context : \"\"),\r\n              mcworld.name\r\n            )\r\n          );\r\n        }\r\n\r\n        didProcessWorldData = false;\r\n      }\r\n\r\n      if (!didProcessWorldData) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            WorldDataInfoGeneratorTest.couldNotProcessWorld,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              WorldDataInfoGeneratorTest,\r\n              WorldDataInfoGeneratorTest.couldNotProcessWorld\r\n            ),\r\n            projectItem,\r\n            mcworld.name\r\n          )\r\n        );\r\n      }\r\n\r\n      if (\r\n        projectItem.projectPath &&\r\n        contentIndex &&\r\n        mcworld.levelData &&\r\n        mcworld.levelData.nbt &&\r\n        mcworld.levelData.nbt.singleRoot\r\n      ) {\r\n        const children = mcworld.levelData.nbt.singleRoot.getTagChildren();\r\n\r\n        for (const child of children) {\r\n          if (child.name === \"experiments\") {\r\n            for (const experimentChild of child.getTagChildren()) {\r\n              if (\r\n                experimentChild.type === NbtTagType.int ||\r\n                experimentChild.type === NbtTagType.byte ||\r\n                experimentChild.type === NbtTagType.string\r\n              ) {\r\n                nbtExperimentsPi?.incrementFeature(experimentChild.name, experimentChild.valueAsString);\r\n\r\n                contentIndex.insert(\r\n                  experimentChild.name + \"==\" + experimentChild.valueAsString,\r\n                  projectItem.projectPath,\r\n                  AnnotationCategory.experiment\r\n                );\r\n              }\r\n            }\r\n          } else if (\r\n            child.type === NbtTagType.int ||\r\n            child.type === NbtTagType.byte ||\r\n            child.type === NbtTagType.string\r\n          ) {\r\n            if (\r\n              child.name !== \"LevelName\" &&\r\n              child.name !== \"FlatWorldLayers\" &&\r\n              child.name !== \"lightningTime\" &&\r\n              child.name !== \"EducationOid\" &&\r\n              child.name !== \"EducationProductId\" &&\r\n              child.name !== \"rainTime\" &&\r\n              child.name !== \"worldTemplateUUID\" &&\r\n              !child.name.startsWith(\"LimitedWorld\") &&\r\n              !child.name.startsWith(\"SpawnX\") &&\r\n              !child.name.startsWith(\"SpawnY\") &&\r\n              !child.name.startsWith(\"SpawnZ\")\r\n            ) {\r\n              if (child.name.indexOf(\"ersion\") >= 0 && !child.valueAsString.startsWith(\"1.\")) {\r\n                nbtPi?.incrementFeature(child.name, \"(unknown version)\");\r\n              } else {\r\n                nbtPi?.incrementFeature(child.name, child.valueAsString);\r\n              }\r\n\r\n              contentIndex.insert(\r\n                child.name + \"==\" + child.valueAsString,\r\n                projectItem.projectPath,\r\n                AnnotationCategory.worldProperty\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldDataInfoGeneratorTest.chunks,\r\n          ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.chunks),\r\n          projectItem,\r\n          mcworld.chunkCount,\r\n          mcworld.name\r\n        )\r\n      );\r\n\r\n      if (didProcessWorldData) {\r\n        let blockCount = 0;\r\n        let chunkCount = 0;\r\n        let subchunkLessChunkCount = 0;\r\n\r\n        // Use the memory-efficient chunk iterator with aggressive data clearing\r\n        // This prevents heap exhaustion on large worlds by clearing chunk data after processing\r\n        await mcworld.forEachChunk(\r\n          async (chunk, x, z, dimIndex) => {\r\n            chunkCount++;\r\n\r\n            if (chunk.subChunks.length <= 0) {\r\n              subchunkLessChunkCount++;\r\n            }\r\n\r\n            const blockActors = chunk.blockActors;\r\n\r\n            for (let i = 0; i < blockActors.length; i++) {\r\n              const blockActor = blockActors[i];\r\n\r\n              if (blockActor.id) {\r\n                blockActorsPi?.incrementFeature(blockActor.id);\r\n              }\r\n\r\n              if (blockActor instanceof CommandBlockActor) {\r\n                let cba = blockActor as CommandBlockActor;\r\n                if (cba.version) {\r\n                  blockActorsPi?.spectrumIntFeature(\"Command Version\", cba.version);\r\n                }\r\n\r\n                if (cba.version && cba.version < this.modernCommandVersion) {\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.recommendation,\r\n                      this.id,\r\n                      WorldDataInfoGeneratorTest.commandIsFromOlderMinecraftVersion,\r\n                      \"Command '\" + cba.command + \"' is from an older Minecraft version (\" + cba.version + \") \",\r\n                      projectItem,\r\n                      \"(Command at location \" + cba.x + \", \" + cba.y + \", \" + cba.z + \")\",\r\n                      undefined,\r\n                      cba.command\r\n                    )\r\n                  );\r\n                }\r\n\r\n                if (cba.command && cba.command.trim().length > 0) {\r\n                  let command = CommandStructure.parse(cba.command);\r\n\r\n                  if (command.fullName.length === 0) {\r\n                    // Skip empty command names (e.g., command block containing just \"/\")\r\n                  } else if (CommandRegistry.isMinecraftBuiltInCommand(command.fullName)) {\r\n                    if (this.performAddOnValidations && CommandRegistry.isAddOnBlockedCommand(command.fullName)) {\r\n                      items.push(\r\n                        new ProjectInfoItem(\r\n                          InfoItemType.warning,\r\n                          this.id,\r\n                          WorldDataInfoGeneratorTest.containsWorldImpactingCommand,\r\n                          \"Contains command '\" +\r\n                            command.fullName +\r\n                            \"' which is impacts the state of the entire world, and generally shouldn't be used in an add-on\",\r\n                          projectItem,\r\n                          command.fullName,\r\n                          undefined,\r\n                          cba.command\r\n                        )\r\n                      );\r\n                    }\r\n\r\n                    commandsPi.incrementFeature(command.fullName);\r\n\r\n                    if (command.fullName === \"execute\") {\r\n                      let foundRun = false;\r\n                      for (const arg of command.commandArguments) {\r\n                        if (arg === \"run\") {\r\n                          foundRun = true;\r\n                        } else if (foundRun && CommandRegistry.isMinecraftBuiltInCommand(arg)) {\r\n                          subCommandsPi.incrementFeature(arg);\r\n                          break;\r\n                        }\r\n                      }\r\n                    }\r\n                  } else if (!this.performAddOnValidations && !this.performPlatformVersionValidations) {\r\n                    items.push(\r\n                      new ProjectInfoItem(\r\n                        InfoItemType.error,\r\n                        this.id,\r\n                        WorldDataInfoGeneratorTest.unexpectedCommandInCommandBlock,\r\n                        \"Unexpected command '\" + command.fullName + \"'\",\r\n                        projectItem,\r\n                        command.fullName,\r\n                        undefined,\r\n                        cba.command\r\n                      )\r\n                    );\r\n                  }\r\n                }\r\n              }\r\n            }\r\n\r\n            // Use memory-efficient block type counting instead of getBlockList()\r\n            // This avoids allocating massive arrays of Block objects\r\n            const blockTypeCounts = chunk.countBlockTypes();\r\n\r\n            for (const [typeName, count] of blockTypeCounts) {\r\n              blockCount += count;\r\n\r\n              let type = typeName;\r\n              if (type.indexOf(\":\") >= 0 && type.indexOf(\"minecraft:\") < 0) {\r\n                type = \"(custom)\";\r\n              }\r\n\r\n              blocksPi?.incrementFeature(type, \"count\", count);\r\n            }\r\n          },\r\n          {\r\n            // Always clear parsed/cached data after processing each chunk to prevent OOM.\r\n            // This is non-destructive - raw LevelKeyValue bytes are preserved, so chunks\r\n            // can be re-parsed on demand (e.g., when the world map needs them).\r\n            clearCacheAfterProcess: true,\r\n            // Only clear raw LevelKeyValue data when in aggressive cleanup mode (CLI validation).\r\n            // In browser contexts, we preserve raw data so the world map can re-parse chunks.\r\n            clearAllAfterProcess: performAggressiveCleanup,\r\n            progressCallback: async (processed, total) => {\r\n              // Use worldName captured from outside closure to avoid TypeScript null check issue\r\n              const worldName = mcworld?.name ?? \"unknown\";\r\n              const chunkPercent = total > 0 ? Math.floor((processed / total) * 100) : 0;\r\n              let mess =\r\n                \"World validation: scanned \" +\r\n                Math.floor(processed / 1000) +\r\n                \"K of \" +\r\n                Math.floor(total / 1000) +\r\n                \"K chunks in \" +\r\n                worldName;\r\n\r\n              // Report granular progress via onProgress callback if available\r\n              // Map chunk progress (0-100%) to the 30-80% range of overall validation\r\n              if (onProgress) {\r\n                const overallPercent = Math.floor(30 + chunkPercent * 0.5); // 30-80%\r\n                onProgress(mess, overallPercent);\r\n              }\r\n\r\n              await projectItem.project.creatorTools.notifyStatusUpdate(mess, StatusTopic.validation);\r\n            },\r\n          }\r\n        );\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            WorldDataInfoGeneratorTest.subchunklessChunks,\r\n            \"Subchunkless Chunks\",\r\n            projectItem,\r\n            subchunkLessChunkCount,\r\n            mcworld.name\r\n          )\r\n        );\r\n\r\n        if (blocksPi) {\r\n          blocksPi.data = blockCount;\r\n        }\r\n      }\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldDataInfoGeneratorTest.minX,\r\n          ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.minX),\r\n          projectItem,\r\n          mcworld.minX,\r\n          mcworld.name\r\n        )\r\n      );\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldDataInfoGeneratorTest.minZ,\r\n          ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.minZ),\r\n          projectItem,\r\n          mcworld.minZ,\r\n          mcworld.name\r\n        )\r\n      );\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldDataInfoGeneratorTest.maxX,\r\n          ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.maxX),\r\n          projectItem,\r\n          mcworld.maxX,\r\n          mcworld.name\r\n        )\r\n      );\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldDataInfoGeneratorTest.maxZ,\r\n          ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.maxZ),\r\n          projectItem,\r\n          mcworld.maxZ,\r\n          mcworld.name\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IJsonUIControl, IJsonUIScreen } from \"./IJsonUIScreen\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\n\r\nexport default class JsonUIResourceDefinition {\r\n  public jsonUIScreen?: IJsonUIScreen;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<JsonUIResourceDefinition, JsonUIResourceDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get namespaceId() {\r\n    if (!this.jsonUIScreen || !this.jsonUIScreen[\"namespace\"]) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.jsonUIScreen[\"namespace\"];\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<JsonUIResourceDefinition, JsonUIResourceDefinition>\r\n  ) {\r\n    let et: JsonUIResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new JsonUIResourceDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JsonUIResourceDefinition) {\r\n      et = file.manager as JsonUIResourceDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.jsonUIScreen) {\r\n      Log.unexpectedUndefined(\"ITRDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.jsonUIScreen);\r\n  }\r\n\r\n  getControlRefs() {\r\n    const namespaceId = this.namespaceId;\r\n    const jsonUITextureRefs: string[] = [];\r\n\r\n    if (namespaceId && this.jsonUIScreen) {\r\n      for (const jsonControlId in this.jsonUIScreen) {\r\n        const jsonControl = this.jsonUIScreen[jsonControlId] as IJsonUIControl;\r\n\r\n        if (jsonControlId !== \"namespace\" && jsonControl && jsonControl.texture) {\r\n          if (!jsonUITextureRefs.includes(jsonControlId)) {\r\n            jsonUITextureRefs.push(jsonControlId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return jsonUITextureRefs;\r\n  }\r\n\r\n  getTexturePaths() {\r\n    const texturePaths: string[] = [];\r\n\r\n    if (this.jsonUIScreen) {\r\n      this.addTexturesFromArrayOfKeyPaths([this.jsonUIScreen], texturePaths);\r\n    }\r\n\r\n    return texturePaths;\r\n  }\r\n\r\n  addTexturesFromArrayOfKeyPaths(controlSets: { [name: string]: IJsonUIControl | string }[], texturePaths: string[]) {\r\n    if (!Array.isArray(controlSets)) {\r\n      return;\r\n    }\r\n\r\n    for (const controlSet of controlSets) {\r\n      for (const key in controlSet) {\r\n        const control = controlSet[key];\r\n\r\n        if (key !== \"namespace\" && key !== \"controls\") {\r\n          if (typeof control === \"string\") {\r\n            texturePaths.push(control);\r\n          } else {\r\n            if (control.texture) {\r\n              const tex = TextureDefinition.canonicalizeTexturePath(control.texture);\r\n\r\n              if (tex) {\r\n                texturePaths.push(tex);\r\n              }\r\n            }\r\n            if (control.controls) {\r\n              this.addTexturesFromArrayOfKeyPaths(control.controls, texturePaths);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"PERPF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this.jsonUIScreen = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"ui\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n    const uiTextureItems = project.getItemsByType(ProjectItemType.uiTexture);\r\n    const allTextureItems = [...textureItems, ...uiTextureItems];\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let textureList = this.getTexturePaths();\r\n\r\n    if (textureList.length > 0) {\r\n      for (const candItem of allTextureItems) {\r\n        if (packRootFolder && textureList) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n              StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n            );\r\n\r\n            if (relativePath) {\r\n              if (textureList && textureList.includes(relativePath)) {\r\n                item.addChildItem(candItem);\r\n\r\n                textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (textureList) {\r\n        for (const texturePath of textureList) {\r\n          if (!texturePath.startsWith(\"$\")) {\r\n            const isVanilla = await Database.isVanillaToken(texturePath);\r\n            item.addUnfulfilledRelationship(texturePath, ProjectItemType.texture, isVanilla);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport EntityTypeResourceDefinition from \"../minecraft/EntityTypeResourceDefinition\";\r\nimport BlocksCatalogDefinition from \"../minecraft/BlocksCatalogDefinition\";\r\nimport TerrainTextureCatalogDefinition from \"../minecraft/TerrainTextureCatalogDefinition\";\r\nimport ParticleEffectResourceDefinition from \"../minecraft/ParticleEffectResourceDefinition\";\r\nimport ItemTextureCatalogDefinition from \"../minecraft/ItemTextureCatalogDefinition\";\r\nimport AttachableResourceDefinition from \"../minecraft/AttachableResourceDefinition\";\r\nimport FlipbookTextureCatalogDefinition from \"../minecraft/FlipbookTextureCatalogDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport JsonUIResourceDefinition from \"../minecraft/JsonUIResourceDefinition\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport TextureDefinition from \"../minecraft/TextureDefinition\";\r\n\r\nexport enum TextureInfoGeneratorTest {\r\n  tooManyTextureHandles = 100,\r\n  textures = 101,\r\n}\r\n\r\n/**\r\n * Validates texture references and aggregates texture usage information.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/texture.form.json} for topic definitions\r\n */\r\nexport default class TextureInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"TEXTURE\";\r\n  title = \"Texture Validation\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.textureCount = infoSet.getSummedDataValue(\"TEXTURE\", TextureInfoGeneratorTest.textures);\r\n  }\r\n\r\n  /**\r\n   * Cache for Database.matchesVanillaPath() results across calls.\r\n   * The same texture paths are checked many times; caching eliminates redundant folder I/O.\r\n   */\r\n  private _vanillaPathCache: Map<string, boolean> = new Map();\r\n\r\n  /**\r\n   * Cached version of Database.matchesVanillaPath() that avoids repeated folder I/O\r\n   * for the same texture path.\r\n   */\r\n  private async _matchesVanillaPathCached(path: string): Promise<boolean> {\r\n    const cached = this._vanillaPathCache.get(path);\r\n    if (cached !== undefined) {\r\n      return cached;\r\n    }\r\n    const result = await Database.matchesVanillaPath(path);\r\n    this._vanillaPathCache.set(path, result);\r\n    return result;\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const textureHandles = new Set<string>();\r\n    const allTexturePaths = new Set<string>();\r\n    const blockTextureRefs = new Set<string>();\r\n    const blockTexturePaths = new Set<string>();\r\n    const entityTexturePaths = new Set<string>();\r\n    const entityVanillaTexturePaths = new Set<string>();\r\n    const attachableTextureRefs = new Set<string>();\r\n    const particleTextureRefs = new Set<string>();\r\n    const particleTexturePaths = new Set<string>();\r\n    const particleVanillaTexturePaths = new Set<string>();\r\n    const jsonUITextureRefs = new Set<string>();\r\n    const jsonUITexturePaths = new Set<string>();\r\n    const jsonUIVanillaTexturePaths = new Set<string>();\r\n\r\n    const terrainTextureRefs = new Set<string>();\r\n    const terrainTexturePaths = new Set<string>();\r\n    const flipbookTextureRefs = new Set<string>();\r\n    const flipbookTexturePaths = new Set<string>();\r\n    const itemTexturePaths = new Set<string>();\r\n    const itemTextureVanillaPaths = new Set<string>();\r\n    const entitySpawnEggTextures = new Set<string>();\r\n    const textureCountPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      TextureInfoGeneratorTest.textures,\r\n      \"Textures\"\r\n    );\r\n    items.push(textureCountPi);\r\n\r\n    // Process each item type separately using getItemsByType() for efficiency,\r\n    // instead of iterating all 15K items and filtering by type.\r\n    const blocksCatalogItems = project.getItemsByType(ProjectItemType.blocksCatalogResourceJson);\r\n    const particleItems = project.getItemsByType(ProjectItemType.particleJson);\r\n    const uiItems = project.getItemsByType(ProjectItemType.uiJson);\r\n    const terrainTexItems = project.getItemsByType(ProjectItemType.terrainTextureCatalogResourceJson);\r\n    const flipbookItems = project.getItemsByType(ProjectItemType.flipbookTexturesJson);\r\n    const itemTexItems = project.getItemsByType(ProjectItemType.itemTextureJson);\r\n    const entityResItems = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n    const attachableItems = project.getItemsByType(ProjectItemType.attachableResourceJson);\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n    const uiTextureItems = project.getItemsByType(ProjectItemType.uiTexture);\r\n\r\n    for (const projectItem of blocksCatalogItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const blockCat = await BlocksCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!blockCat?.blocksCatalog) {\r\n        continue;\r\n      }\r\n\r\n      for (const resourceId in blockCat.blocksCatalog) {\r\n        const resource = blockCat.blocksCatalog[resourceId];\r\n\r\n        if (!resource?.textures) {\r\n          continue;\r\n        }\r\n\r\n        textureCountPi.incrementFeature(\"Block Resource Count\");\r\n        blockTextureRefs.add(resourceId);\r\n\r\n        if (typeof resource.textures === \"string\") {\r\n          allTexturePaths.add(resource.textures);\r\n          blockTexturePaths.add(resource.textures);\r\n        } else {\r\n          for (const texturePathKey in resource.textures) {\r\n            const textureVal = (resource.textures as any)[texturePathKey];\r\n            allTexturePaths.add(textureVal);\r\n            blockTexturePaths.add(textureVal);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const projectItem of particleItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const particleEffect = await ParticleEffectResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      const desc = particleEffect?.data?.particle_effect?.description;\r\n\r\n      if (!desc?.identifier || !desc.basic_render_parameters?.texture) {\r\n        continue;\r\n      }\r\n\r\n      const texturePath = desc.basic_render_parameters.texture;\r\n      const matchesVP = await this._matchesVanillaPathCached(desc.basic_render_parameters.texture);\r\n\r\n      if (!matchesVP) {\r\n        textureHandles.add(texturePath);\r\n        particleTextureRefs.add(desc.identifier);\r\n        allTexturePaths.add(texturePath);\r\n        particleTexturePaths.add(texturePath);\r\n      } else {\r\n        particleVanillaTexturePaths.add(texturePath);\r\n      }\r\n    }\r\n\r\n    for (const projectItem of uiItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const jsonUI = await JsonUIResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!jsonUI) {\r\n        continue;\r\n      }\r\n\r\n      for (const ref of jsonUI.getControlRefs()) {\r\n        jsonUITextureRefs.add(ref);\r\n      }\r\n\r\n      const texturePaths = jsonUI.getTexturePaths();\r\n\r\n      for (const texturePath of texturePaths) {\r\n        const matchesVP = await this._matchesVanillaPathCached(texturePath);\r\n\r\n        if (!matchesVP) {\r\n          textureHandles.add(texturePath);\r\n          allTexturePaths.add(texturePath);\r\n          jsonUITexturePaths.add(texturePath);\r\n        } else {\r\n          jsonUIVanillaTexturePaths.add(texturePath);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const projectItem of terrainTexItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const terrainTextureCat = await TerrainTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!terrainTextureCat?.data?.texture_data) {\r\n        continue;\r\n      }\r\n\r\n      for (const terrainTextureId in terrainTextureCat.data.texture_data) {\r\n        const terrainTexture = terrainTextureCat.data.texture_data[terrainTextureId];\r\n\r\n        if (!terrainTexture?.textures) {\r\n          continue;\r\n        }\r\n\r\n        textureCountPi.incrementFeature(\"Terrain Texture Resource Count\");\r\n        terrainTextureRefs.add(terrainTextureId);\r\n\r\n        if (typeof terrainTexture.textures === \"string\") {\r\n          terrainTexturePaths.add(terrainTexture.textures);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const projectItem of flipbookItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const flipbookTexturesCat = await FlipbookTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!flipbookTexturesCat?.data || !Array.isArray(flipbookTexturesCat.data)) {\r\n        continue;\r\n      }\r\n\r\n      const pathId = projectItem.primaryFile.storageRelativePath + \"_flipbooktextures\";\r\n      allTexturePaths.add(pathId);\r\n\r\n      for (const flipbookTexture of flipbookTexturesCat.data) {\r\n        if (!flipbookTexture?.flipbook_texture) {\r\n          continue;\r\n        }\r\n\r\n        textureCountPi.incrementFeature(\"Flipbook Texture Resource Count\");\r\n        textureHandles.add(flipbookTexture.flipbook_texture);\r\n        flipbookTextureRefs.add(flipbookTexture.atlas_tile);\r\n        flipbookTexturePaths.add(flipbookTexture.flipbook_texture);\r\n      }\r\n    }\r\n\r\n    for (const projectItem of itemTexItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const itemTextureCat = await ItemTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!itemTextureCat) {\r\n        continue;\r\n      }\r\n\r\n      const texturePaths = itemTextureCat.getTexturePathList();\r\n\r\n      if (!texturePaths) {\r\n        continue;\r\n      }\r\n\r\n      textureCountPi.incrementFeature(\"Item Texture Resource Count\");\r\n\r\n      for (const str of texturePaths) {\r\n        const matchesVP = await this._matchesVanillaPathCached(str);\r\n\r\n        if (!matchesVP) {\r\n          itemTexturePaths.add(str);\r\n        } else {\r\n          itemTextureVanillaPaths.add(str);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const projectItem of entityResItems) {\r\n      textureCountPi.incrementFeature(\"Entity Resource Count\");\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const entityTypeResourceDef = await EntityTypeResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      const textures = entityTypeResourceDef?.data?.textures;\r\n\r\n      if (!textures) {\r\n        continue;\r\n      }\r\n\r\n      let textureCount = 0;\r\n\r\n      for (const texture in textures) {\r\n        const texturePath = textures[texture];\r\n\r\n        if (texturePath) {\r\n          const matchesVP = await this._matchesVanillaPathCached(texturePath);\r\n\r\n          if (!matchesVP) {\r\n            textureHandles.add(texturePath);\r\n            entityTexturePaths.add(texturePath);\r\n            allTexturePaths.add(texturePath);\r\n          } else {\r\n            entityVanillaTexturePaths.add(texturePath);\r\n          }\r\n        }\r\n        textureCount++;\r\n      }\r\n\r\n      textureCountPi.incrementFeature(\"Texture References\", \"Count\", textureCount);\r\n      textureCountPi.incrementFeature(\"Entity References\", \"Count\", textureCount);\r\n    }\r\n\r\n    for (const projectItem of attachableItems) {\r\n      textureCountPi.incrementFeature(\"Attachable Resource Count\");\r\n\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const attachableResourceDef = await AttachableResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      const textures = attachableResourceDef?.data?.textures;\r\n\r\n      if (!textures) {\r\n        continue;\r\n      }\r\n\r\n      let textureCount = 0;\r\n\r\n      for (const texture in textures) {\r\n        const texturePath = textures[texture];\r\n\r\n        if (texturePath) {\r\n          textureHandles.add(texturePath);\r\n          attachableTextureRefs.add(texturePath);\r\n          allTexturePaths.add(texturePath);\r\n          textureCount++;\r\n        }\r\n      }\r\n\r\n      textureCountPi.incrementFeature(\"Texture References\", \"Count\", textureCount);\r\n      textureCountPi.incrementFeature(\"Attachable References\", \"Count\", textureCount);\r\n    }\r\n\r\n    // Process texture and UI texture items\r\n    const allTextureSourceItems = [...textureItems, ...uiTextureItems];\r\n    for (const projectItem of allTextureSourceItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      textureCountPi.incrementFeature(\"File Count\");\r\n\r\n      const textureResourceDef = await TextureDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!textureResourceDef?.data) {\r\n        continue;\r\n      }\r\n\r\n      const texturePath = textureResourceDef.getReferencePath();\r\n\r\n      if (texturePath && projectItem.projectPath) {\r\n        contentIndex.insert(texturePath, projectItem.projectPath, AnnotationCategory.textureFile);\r\n      }\r\n    }\r\n\r\n    if (textureHandles.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Texture Handles (estimated)\", \"Count\", textureHandles.size);\r\n    }\r\n    if (allTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Texture Paths\", \"Count\", allTexturePaths.size);\r\n    }\r\n\r\n    if (particleTextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Particle Texture References\", \"Count\", particleTextureRefs.size);\r\n    }\r\n    if (particleTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Particle Texture Paths\", \"Count\", particleTexturePaths.size);\r\n    }\r\n\r\n    if (particleVanillaTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\r\n        \"Unique Particle Texture Vanilla Paths\",\r\n        \"Count\",\r\n        particleVanillaTexturePaths.size\r\n      );\r\n    }\r\n\r\n    if (jsonUITextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique JSON UI Texture References\", \"Count\", jsonUITextureRefs.size);\r\n    }\r\n\r\n    if (jsonUITexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique JSON UI Texture Paths\", \"Count\", jsonUITexturePaths.size);\r\n    }\r\n    if (jsonUIVanillaTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\r\n        \"Unique JSON UI Texture Vanilla Paths\",\r\n        \"Count\",\r\n        jsonUIVanillaTexturePaths.size\r\n      );\r\n    }\r\n\r\n    if (entityTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Entity Texture Paths\", \"Count\", entityTexturePaths.size);\r\n    }\r\n\r\n    if (entityVanillaTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Entity Texture Vanilla Paths\", \"Count\", entityVanillaTexturePaths.size);\r\n    }\r\n\r\n    if (attachableTextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Attachable Texture References\", \"Count\", attachableTextureRefs.size);\r\n    }\r\n\r\n    if (terrainTextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Terrain Texture References\", \"Count\", terrainTextureRefs.size);\r\n    }\r\n\r\n    if (terrainTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Terrain Texture Paths\", \"Count\", terrainTexturePaths.size);\r\n    }\r\n\r\n    if (itemTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Item Texture Paths\", \"Count\", itemTexturePaths.size);\r\n    }\r\n\r\n    if (flipbookTextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Flipbook Texture References\", \"Count\", flipbookTextureRefs.size);\r\n    }\r\n\r\n    if (flipbookTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Flipbook Texture Paths\", \"Count\", flipbookTexturePaths.size);\r\n    }\r\n\r\n    if (blockTextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Block Texture References\", \"Count\", blockTextureRefs.size);\r\n    }\r\n\r\n    if (blockTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Block Texture Paths\", \"Count\", blockTexturePaths.size);\r\n    }\r\n\r\n    if (entitySpawnEggTextures.size > 0) {\r\n      textureCountPi.incrementFeature(\r\n        \"Unique Entity Spawn Egg Texture References\",\r\n        \"Count\",\r\n        entitySpawnEggTextures.size\r\n      );\r\n    }\r\n\r\n    if (this.performAddOnValidations && textureHandles.size > 800) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          TextureInfoGeneratorTest.tooManyTextureHandles,\r\n          \"Uses more than 800 texture handles, which could impact overall Minecraft usage\",\r\n          undefined,\r\n          textureHandles.size\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\n\r\nexport enum PackSizeInfoGeneratorTest {\r\n  overallSize = 101,\r\n  fileCount = 102,\r\n  folderCount = 103,\r\n  contentSize = 104,\r\n  contentFileCount = 105,\r\n  contentFolderCount = 106,\r\n  exceedsRecommendedAddonSize = 401,\r\n  exceedsRecommendedPackageSize = 402,\r\n\r\n  zipFileCouldNotBeProcessed = 410,\r\n}\r\n\r\nexport interface IPackSizeInfoGeneratorResults {\r\n  size: number;\r\n  fileCounts: number;\r\n  folderCounts: number;\r\n  contentSize: number;\r\n  contentFileCounts: number;\r\n  contentFolderCounts: number;\r\n}\r\n\r\n/**\r\n * Calculates and validates pack size information including file and folder counts.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/packsize.form.json} for topic definitions\r\n */\r\nexport default class PackSizeInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"PACKSIZE\";\r\n  title = \"Pack Size Information\";\r\n  canAlwaysProcess = true;\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.overallSize = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.overallSize);\r\n    info.fileCounts = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.fileCount);\r\n    info.folderCounts = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.folderCount);\r\n    info.contentSize = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.contentSize);\r\n    info.contentFileCounts = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.contentFileCount);\r\n    info.contentFolderCounts = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.contentFolderCount);\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const genItems: ProjectInfoItem[] = [];\r\n    const results: IPackSizeInfoGeneratorResults = {\r\n      size: 0,\r\n      fileCounts: 0,\r\n      folderCounts: 0,\r\n      contentSize: 0,\r\n      contentFileCounts: 0,\r\n      contentFolderCounts: 0,\r\n    };\r\n\r\n    await this.processFolder(project, await project.ensureProjectFolder(), genItems, contentIndex, results, 0, false);\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.overallSize,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.overallSize),\r\n        undefined,\r\n        results.size\r\n      )\r\n    );\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.fileCount,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.fileCount),\r\n        undefined,\r\n        results.fileCounts\r\n      )\r\n    );\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.folderCount,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.folderCount),\r\n        undefined,\r\n        results.folderCounts\r\n      )\r\n    );\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.contentSize,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.contentSize),\r\n        undefined,\r\n        results.contentSize\r\n      )\r\n    );\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.contentFileCount,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.contentFileCount),\r\n        undefined,\r\n        results.contentFileCounts\r\n      )\r\n    );\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.contentFolderCount,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.contentFolderCount),\r\n        undefined,\r\n        results.contentFolderCounts\r\n      )\r\n    );\r\n\r\n    if (this.performAddOnValidations && results.contentSize > 25000000) {\r\n      genItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          PackSizeInfoGeneratorTest.exceedsRecommendedAddonSize,\r\n          ProjectInfoUtilities.getTitleFromEnum(\r\n            PackSizeInfoGeneratorTest,\r\n            PackSizeInfoGeneratorTest.exceedsRecommendedAddonSize\r\n          ),\r\n          undefined,\r\n          results.contentSize\r\n        )\r\n      );\r\n    } else if (!this.performAddOnValidations && results.contentSize > 250000000) {\r\n      genItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          PackSizeInfoGeneratorTest.exceedsRecommendedPackageSize,\r\n          ProjectInfoUtilities.getTitleFromEnum(\r\n            PackSizeInfoGeneratorTest,\r\n            PackSizeInfoGeneratorTest.exceedsRecommendedPackageSize\r\n          ),\r\n          undefined,\r\n          results.contentSize\r\n        )\r\n      );\r\n    }\r\n\r\n    return genItems;\r\n  }\r\n\r\n  async processFolder(\r\n    project: Project,\r\n    folder: IFolder,\r\n    genItems: ProjectInfoItem[],\r\n    genContentIndex: ContentIndex,\r\n    results: IPackSizeInfoGeneratorResults,\r\n    depth: number,\r\n    isInContent: boolean\r\n  ) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    if (!isInContent && folder.files[\"manifest.json\"]) {\r\n      isInContent = true;\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file) {\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n\r\n        results.fileCounts++;\r\n\r\n        if (StorageUtilities.isContainerFile(file.fullPath)) {\r\n          let storageFolder = undefined;\r\n\r\n          storageFolder = await StorageUtilities.getFileStorageFolder(file);\r\n\r\n          if (storageFolder && typeof storageFolder !== \"string\") {\r\n            await this.processFolder(\r\n              project,\r\n              storageFolder,\r\n              genItems,\r\n              genContentIndex,\r\n              results,\r\n              depth + 1,\r\n              isInContent\r\n            );\r\n          } else if (typeof storageFolder === \"string\") {\r\n            genItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                PackSizeInfoGeneratorTest.zipFileCouldNotBeProcessed,\r\n                ProjectInfoUtilities.getTitleFromEnum(\r\n                  PackSizeInfoGeneratorTest,\r\n                  PackSizeInfoGeneratorTest.exceedsRecommendedPackageSize\r\n                ),\r\n                undefined,\r\n                file.errorStateMessage\r\n              )\r\n            );\r\n          }\r\n        } else {\r\n          if (isInContent) {\r\n            results.contentFileCounts++;\r\n\r\n            results.contentSize += file.coreContentLength;\r\n          }\r\n\r\n          results.size += file.coreContentLength;\r\n        }\r\n      }\r\n    }\r\n\r\n    if ((isInContent && depth < 15) || (!isInContent && depth < 8)) {\r\n      for (const folderName in folder.folders) {\r\n        const childFolder = folder.folders[folderName];\r\n\r\n        if (childFolder && !childFolder.errorStatus && childFolder.name) {\r\n          results.folderCounts++;\r\n\r\n          if (isInContent) {\r\n            results.contentFolderCounts++;\r\n          }\r\n\r\n          await this.processFolder(project, childFolder, genItems, genContentIndex, results, depth + 1, isInContent);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport Database from \"../minecraft/Database\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport TextureDefinition from \"../minecraft/TextureDefinition\";\r\nimport ProjectUtilities, { ProjectMetaCategory } from \"../app/ProjectUtilities\";\r\nimport ProjectItemVariant from \"../app/ProjectItemVariant\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { PackType } from \"../minecraft/Pack\";\r\n\r\nexport enum TextureImageInfoGeneratorTest {\r\n  textureImages = 101,\r\n  textureImagesTier0 = 200,\r\n  textureImagesTier1 = 201,\r\n  textureImagesTier2 = 202,\r\n  textureImagesTier3 = 203,\r\n  textureImagesTier4 = 204,\r\n  textureImagesTier5 = 205,\r\n  pngJpgImageProcessingError = 401,\r\n  individualTextureMemoryExceedsBudget = 402,\r\n  totalTextureMemoryExceedsBudget = 403,\r\n  tgaImageProcessingError = 404,\r\n  individualAtlasTextureMemoryExceedsBudget = 405,\r\n  totalAtlasTextureMemoryExceedsBudgetWarn = 406,\r\n  totalAtlasTextureMemoryExceedsBudgetError = 407,\r\n  pngJpgImageProcessingNoResults = 408,\r\n  invalidTieringConfiguration = 409,\r\n  invalidTieringForVibrantVisuals = 410,\r\n\r\n  totalTextureMemoryExceedsBudgetErrorBase = 420,\r\n  totalTextureMemoryExceedsBudgetWarningBase = 440,\r\n  texturePackDoesntOverrideVanillaGameTexture = 460,\r\n  texturePackDoesntOverrideMostTextures = 461,\r\n  mashupPackDoesntOverrideMostTextures = 462,\r\n}\r\n\r\nexport const TexturePerformanceTierCount = 6;\r\n\r\nconst TextureTiersBase = 200;\r\n\r\nconst MashupResourcePackThresholdErrorPercent = 0.6; // for a global resource pack in content that also has a world (i.e., a mashup), return an error if it doesn't override at least 60% of vanilla game textures.\r\nconst TextureOverrideThresholdPercent = 0.7; // if you override at least 70% of vanilla game textures, we assume you're trying to create a \"texture pack\" and should warn when you're not \"covering\" a vanilla texture.\r\nconst TextureOverrideThresholdErrorPercent = 0.95; // if you override at least 95% of vanilla game textures, we assume you're trying to create a \"texture pack\" and should error if you don't have 95% coverage.\r\n\r\nconst ExemptVanillaOverridePaths = [\r\n  \"/entity/npc/\",\r\n  \"/entity/banner/\",\r\n  \"/entity/horse/\",\r\n  \"/entity/horse/armor/\",\r\n  \"/entity/zombie_villager/\",\r\n  \"/entity/villager/\",\r\n  \"/entity/zombie_villager2/professions/\",\r\n  \"/colormap/\",\r\n  \"/particle/\",\r\n  \"/misc/\",\r\n  \"/persona_thumbnails/\",\r\n  \"/ui/\",\r\n  \"/gui/\",\r\n  \"/entity/shield_patterns/\",\r\n  \"/textures/trims/\",\r\n  // Blocks\r\n  \"/blocks/glowing_obsidian\",\r\n  \"/blocks/missing_tile\",\r\n  \"/blocks/camera_back\",\r\n  \"/blocks/camera_front\",\r\n  \"/blocks/camera_side\",\r\n  \"/blocks/camera_top\",\r\n  \"/blocks/reactor_core_stage_0\",\r\n  \"/blocks/reactor_core_stage_1\",\r\n  \"/blocks/reactor_core_stage_2\",\r\n  \"/blocks/bed_feet_end\",\r\n  \"/blocks/bed_feet_side\",\r\n  \"/blocks/bed_feet_top\",\r\n  \"/blocks/bed_head_end\",\r\n  \"/blocks/bed_head_side\",\r\n  \"/blocks/bed_head_top\",\r\n  \"/blocks/flower_rose_blue\",\r\n  \"/blocks/flower_paeonia\",\r\n  \"/blocks/llama\",\r\n  \"/blocks/border\",\r\n  \"/blocks/build_allow\",\r\n  \"/blocks/build_deny\",\r\n  \"/blocks/smithing_table_top\",\r\n  \"/blocks/end_gateway\",\r\n  \"/blocks/end_portal\",\r\n  \"/blocks/water_flow\",\r\n  \"/blocks/water_still\",\r\n  \"/blocks/carrots_stage3\",\r\n  \"/blocks/bell_side\",\r\n  \"/blocks/bell_top\",\r\n\r\n  // Entity\r\n  \"/entity/agent\",\r\n  \"/entity/alex\",\r\n  \"/entity/camera_tripod\",\r\n  \"/entity/char\",\r\n  \"/entity/dummy\",\r\n  \"/entity/screenshot_frame\",\r\n  \"/entity/enchanting_table_book_shadow\",\r\n  \"/entity/loyalty_rope\",\r\n  \"/entity/egg_null\",\r\n  \"/entity/egg_template\",\r\n  \"/entity/dragon_exploding\",\r\n  \"/entity/dragon_eyes\",\r\n  \"/entity/llama\",\r\n  \"/entity/pigzombie\",\r\n  \"/entity/steve\",\r\n  \"/entity/cape_invisible\",\r\n\r\n  // Entity subcategories\r\n  \"/entity/cat/blackcat\",\r\n  \"/entity/cat/graytabby_tame\",\r\n  \"/entity/cat/red\",\r\n  \"/entity/cat/siamese\",\r\n  \"/entity/fish/clownfish\",\r\n  \"/entity/fish/fish\",\r\n  \"/entity/villager2/professions/unskilled\",\r\n  \"/entity/horse2/horse_markings_none\",\r\n  \"/entity/horse2/armor/horse_armor_none\",\r\n  \"/entity/llama/decor/decor_none\",\r\n  \"/entity/llama/spit\",\r\n  \"/entity/iron_golem/cracked_none\",\r\n  \"/entity/wolf/wolf_armor_cracked_none\",\r\n\r\n  // Items\r\n  \"/items/camera\",\r\n  \"/items/chalkboard_large\",\r\n  \"/items/chalkboard_medium\",\r\n  \"/items/chalkboard_small\",\r\n  \"/items/egg_agent\",\r\n  \"/items/egg_npc\",\r\n  \"/items/quiver\",\r\n  \"/items/ruby\",\r\n  \"/items/spawn_egg_overlay\",\r\n  \"/items/book_portfolio\",\r\n  \"/items/boat\",\r\n  \"/items/tipped_arrow_base\",\r\n  \"/items/tipped_arrow_head\",\r\n  \"/items/tipped_arrow_luck\",\r\n  \"/items/potion_bottle_saturation\",\r\n  \"/items/potion_overlay\",\r\n  \"/items/egg_template\",\r\n  \"/items/egg_mask\",\r\n  \"/items/spawn_egg\",\r\n  \"/items/hoglin_meat_cooked\",\r\n  \"/items/hoglin_meat_raw\",\r\n  \"/items/egg_fish\",\r\n  \"/items/boat_dark_oak\",\r\n  \"/items/light_block_0\",\r\n  \"/items/light_block_1\",\r\n  \"/items/light_block_10\",\r\n  \"/items/light_block_11\",\r\n  \"/items/light_block_12\",\r\n  \"/items/light_block_13\",\r\n  \"/items/light_block_14\",\r\n  \"/items/light_block_15\",\r\n  \"/items/light_block_2\",\r\n  \"/items/light_block_3\",\r\n  \"/items/light_block_4\",\r\n  \"/items/light_block_5\",\r\n  \"/items/light_block_6\",\r\n  \"/items/light_block_7\",\r\n  \"/items/light_block_8\",\r\n  \"/items/light_block_9\",\r\n\r\n  // Models\r\n  \"models/armor/cloth_1\",\r\n  \"models/armor/cloth_2\",\r\n\r\n  // Map\r\n  \"map/player_icon_background\",\r\n  \"map/jungle_temple\",\r\n  \"map/swamp_hut\",\r\n  \"map/village_desert\",\r\n  \"map/village_plains\",\r\n  \"map/village_savanna\",\r\n  \"map/village_snowy\",\r\n  \"map/village_taiga\",\r\n  \"map/trial_chambers\",\r\n\r\n  // Root level\r\n  \"forcefield_atlas\",\r\n];\r\n\r\n/*\r\nexport enum ProjectMetaCategory {\r\n  mix = 0,\r\n  worldTemplate = 1,\r\n  texturePack = 2,\r\n  addOn = 3,\r\n  skinPack = 4,\r\n  persona = 5,\r\n}*/\r\n\r\nconst TextureMemoryLimitsByTier: { [category: number]: { [tier: number]: number } } = {\r\n  0 /*mix*/: { 0: 750, 1: 750, 2: 1000, 3: 1500, 4: 3000, 5: 4000 },\r\n  1 /*world template*/: { 0: 750, 1: 750, 2: 1000, 3: 1500, 4: 3000, 5: 4000 },\r\n  2 /*texture pack*/: { 0: 350, 1: 350, 2: 500, 3: 650, 4: 1250, 5: 1650 }, // added 50mb as a \"discount\" assuming texture packs override vanilla textures, and therefore save the 50mb of vanilla texture overhead\r\n  3 /*add-on*/: { 0: 150, 1: 150, 2: 225, 3: 300, 4: 600, 5: 800 },\r\n  4 /*skin pack*/: { 0: 150, 1: 150, 2: 225, 3: 300, 4: 600, 5: 800 },\r\n  5 /*persona*/: { 0: 150, 1: 150, 2: 225, 3: 300, 4: 600, 5: 800 },\r\n};\r\n\r\n/**\r\n * Validates texture images for size, format, and memory budget compliance.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/textureimage.form.json} for topic definitions\r\n */\r\nexport default class TextureImageInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"TEXTUREIMAGE\";\r\n  title = \"Texture Image Validation\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  private _vanillaPathCache: Map<string, boolean> = new Map();\r\n\r\n  private async _matchesVanillaPathCached(path: string): Promise<boolean> {\r\n    const cached = this._vanillaPathCache.get(path);\r\n    if (cached !== undefined) {\r\n      return cached;\r\n    }\r\n    const result = await Database.matchesVanillaPath(path);\r\n    this._vanillaPathCache.set(path, result);\r\n    return result;\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.textureCount = infoSet.getSummedFeatureValue(\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"texels\",\r\n      \"instanceCount\"\r\n    );\r\n\r\n    info.textureTexelSize = infoSet.getSummedFeatureValue(\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"nonVanillaTexels\",\r\n      \"total\"\r\n    );\r\n\r\n    info.vanillaGameTextureCoverage = infoSet.getAverageFeatureValue(\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"vanillaGameTextureCoverage\",\r\n      \"percent\"\r\n    );\r\n\r\n    info.vanillaGameTextureCount = infoSet.getAverageFeatureValue(\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"vanillaGameTextureCoverage\",\r\n      \"overrideCount\"\r\n    );\r\n\r\n    let minimumSupportablePerformanceTier = 0;\r\n\r\n    for (let i = 0; i < TexturePerformanceTierCount; i++) {\r\n      const overBudgetTierErrors = infoSet.getCount(\r\n        this.id,\r\n        TextureImageInfoGeneratorTest.totalTextureMemoryExceedsBudgetWarningBase + i\r\n      );\r\n\r\n      if (overBudgetTierErrors > 0) {\r\n        minimumSupportablePerformanceTier = i + 1;\r\n      }\r\n    }\r\n\r\n    // If the project uses subpacks, the minimum tier is at least the lowest tier\r\n    // any subpack targets \u2014 Minecraft never loads a resource pack with subpacks\r\n    // without one of them applied.\r\n    const minSubpackTier = infoSet.getSummedFeatureValue(\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"subpackTiering\",\r\n      \"minimumEffectiveTier\"\r\n    );\r\n\r\n    if (minSubpackTier > 0) {\r\n      minimumSupportablePerformanceTier = Math.max(minimumSupportablePerformanceTier, minSubpackTier);\r\n    }\r\n\r\n    info.minimumSupportablePerformanceTier = minimumSupportablePerformanceTier;\r\n  }\r\n\r\n  static isGameTexturePath(path: string) {\r\n    path = path.toLowerCase();\r\n\r\n    let result =\r\n      path.startsWith(\"/resource_pack/textures/\") &&\r\n      (path.endsWith(\".png\") || path.endsWith(\".tga\") || path.indexOf(\".\") < 0) &&\r\n      path.indexOf(\"_mers.\") < 0 &&\r\n      path.indexOf(\"_mer.\") < 0 &&\r\n      path.indexOf(\"_normal.\") < 0 &&\r\n      path.indexOf(\"_mipmap.\") < 0 &&\r\n      (path.indexOf(\"/textures/blocks\") >= 0 ||\r\n        path.indexOf(\"/textures/entity\") >= 0 ||\r\n        path.indexOf(\"/textures/items\") >= 0);\r\n\r\n    if (!result) {\r\n      return false;\r\n    }\r\n\r\n    for (let exemptPath of ExemptVanillaOverridePaths) {\r\n      if (path.toLowerCase().indexOf(exemptPath) >= 0) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const textureImagePi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"Texture Images\"\r\n    );\r\n\r\n    items.push(textureImagePi);\r\n\r\n    const vanillaPathList = await Database.getVanillaPathList();\r\n\r\n    const nonVanillaTextureMemoryByTier: { [path: string]: number }[] = [];\r\n    const totalTextureMemoryByTier: { [path: string]: number }[] = [];\r\n    const itemAtlasTextureMemoryByTier: { [path: string]: number }[] = [];\r\n    const blockAtlasTextureMemoryByTier: { [path: string]: number }[] = [];\r\n    const textureTierImagePi: ProjectInfoItem[] = [];\r\n    const hasSupportForTier: boolean[] = [];\r\n    const tierTotalMemorySizes: number[] = [];\r\n    let isExplicitlyTargetingTiers = false;\r\n\r\n    const vanillaTexturePathNonMers: { [path: string]: boolean } = {};\r\n    let vanillaTexturePathNonMersCount = 0;\r\n\r\n    if (vanillaPathList) {\r\n      for (const path of vanillaPathList) {\r\n        if (TextureImageInfoGenerator.isGameTexturePath(path)) {\r\n          vanillaTexturePathNonMersCount++;\r\n          let extensionlessPath = StorageUtilities.stripExtension(path);\r\n\r\n          vanillaTexturePathNonMers[extensionlessPath] = false;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < TexturePerformanceTierCount; i++) {\r\n      hasSupportForTier[i] = false;\r\n      nonVanillaTextureMemoryByTier.push({});\r\n      totalTextureMemoryByTier.push({});\r\n\r\n      itemAtlasTextureMemoryByTier.push({});\r\n      blockAtlasTextureMemoryByTier.push({});\r\n\r\n      textureTierImagePi[i] = new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        TextureTiersBase + i,\r\n        \"Texture Images Tier \" + i\r\n      );\r\n\r\n      items.push(textureTierImagePi[i]);\r\n    }\r\n\r\n    for (const projectVariant in project.variants) {\r\n      const variant = project.variants[projectVariant];\r\n\r\n      if (!variant.isDefault && variant.effectiveUnifiedTier !== undefined) {\r\n        hasSupportForTier[variant.effectiveUnifiedTier] = true;\r\n        isExplicitlyTargetingTiers = true;\r\n      }\r\n    }\r\n\r\n    // When a resource pack uses subpacks, Minecraft never loads the pack without\r\n    // one of the subpacks applied.  The lowest tier among all subpacks is therefore\r\n    // the de-facto minimum device tier the creator supports, regardless of texture\r\n    // budgets.  Record it so that summarize() can incorporate it into\r\n    // minimumSupportablePerformanceTier.\r\n    if (isExplicitlyTargetingTiers) {\r\n      let minSubpackTier = TexturePerformanceTierCount; // start above max, will be reduced\r\n\r\n      for (const projectVariant in project.variants) {\r\n        const variant = project.variants[projectVariant];\r\n\r\n        if (!variant.isDefault && variant.effectiveUnifiedTier !== undefined) {\r\n          minSubpackTier = Math.min(minSubpackTier, variant.effectiveUnifiedTier);\r\n        }\r\n      }\r\n\r\n      if (minSubpackTier < TexturePerformanceTierCount) {\r\n        textureImagePi.setFeature(\"Subpack Tiering\", \"Minimum Effective Tier\", minSubpackTier);\r\n      }\r\n    }\r\n\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    for (const projectItem of textureItems) {\r\n      if (\r\n        projectItem.projectPath &&\r\n        !projectItem.projectPath.endsWith(\".hdr\") // ignore HDR files\r\n      ) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        const variantList = projectItem.getVariantList();\r\n\r\n        // we assume that the default (base) variant, with a label of \"\", must go\r\n        // first.\r\n        variantList.sort((a: ProjectItemVariant, b: ProjectItemVariant) => {\r\n          return a.label.localeCompare(b.label);\r\n        });\r\n\r\n        for (const variant of variantList) {\r\n          const variantFile = variant.file;\r\n\r\n          if (variantFile) {\r\n            let nonVanillaTextureMemoryByTierToUpdate: { [path: string]: number }[] = [];\r\n            let totalTextureMemoryByTierToUpdate: { [path: string]: number }[] = [];\r\n            let itemAtlasTextureMemoryByTierToUpdate: { [path: string]: number }[] = [];\r\n            let blockAtlasTextureMemoryByTierToUpdate: { [path: string]: number }[] = [];\r\n            let textureTierItem: ProjectInfoItem | undefined = undefined;\r\n\r\n            if (variant.projectVariant) {\r\n              if (variant.projectVariant.isDefault) {\r\n                // if this is the default, set texture sizes by path for all tiers\r\n                nonVanillaTextureMemoryByTierToUpdate = nonVanillaTextureMemoryByTier;\r\n                totalTextureMemoryByTierToUpdate = totalTextureMemoryByTier;\r\n                itemAtlasTextureMemoryByTierToUpdate = itemAtlasTextureMemoryByTier;\r\n                blockAtlasTextureMemoryByTierToUpdate = blockAtlasTextureMemoryByTier;\r\n              } else if (variant.projectVariant.effectiveUnifiedTier !== undefined) {\r\n                // otherwise, set the texture sizes by path for the effective tier\r\n                textureTierItem = textureTierImagePi[variant.projectVariant.effectiveUnifiedTier];\r\n                nonVanillaTextureMemoryByTierToUpdate.push(\r\n                  nonVanillaTextureMemoryByTier[variant.projectVariant.effectiveUnifiedTier]\r\n                );\r\n                totalTextureMemoryByTierToUpdate.push(\r\n                  totalTextureMemoryByTier[variant.projectVariant.effectiveUnifiedTier]\r\n                );\r\n                itemAtlasTextureMemoryByTierToUpdate.push(\r\n                  itemAtlasTextureMemoryByTier[variant.projectVariant.effectiveUnifiedTier]\r\n                );\r\n                blockAtlasTextureMemoryByTierToUpdate.push(\r\n                  blockAtlasTextureMemoryByTier[variant.projectVariant.effectiveUnifiedTier]\r\n                );\r\n              }\r\n            }\r\n\r\n            let pathInRp = await projectItem.getPackRelativePath();\r\n            let isVanilla = false;\r\n\r\n            // Log.assertDefined(pathInRp, \"TIIGGP\");\r\n\r\n            if (pathInRp) {\r\n              pathInRp = StorageUtilities.getBaseFromName(StorageUtilities.ensureNotStartsWithDelimiter(pathInRp));\r\n\r\n              const vanillaRpPath = \"/resource_pack/\" + pathInRp;\r\n\r\n              if (vanillaTexturePathNonMers[vanillaRpPath] === false) {\r\n                vanillaTexturePathNonMers[vanillaRpPath] = true;\r\n              }\r\n\r\n              if (await this._matchesVanillaPathCached(pathInRp)) {\r\n                textureImagePi.incrementFeature(\"Vanilla Override Texture\");\r\n\r\n                if (textureTierItem) {\r\n                  textureTierItem.incrementFeature(\"Vanilla Override Texture\");\r\n                }\r\n\r\n                isVanilla = true;\r\n              } else {\r\n                textureImagePi.incrementFeature(\"Custom Texture\");\r\n\r\n                if (textureTierItem) {\r\n                  textureTierItem.incrementFeature(\"Custom Texture\");\r\n                }\r\n              }\r\n            } else {\r\n              textureImagePi.incrementFeature(\"Custom Texture\");\r\n            }\r\n\r\n            let imageWidth = -1;\r\n            let imageHeight = -1;\r\n\r\n            if (variantFile.content && variantFile.content instanceof Uint8Array) {\r\n              const textureDefinition = await TextureDefinition.ensureOnFile(variantFile);\r\n\r\n              if (textureDefinition) {\r\n                await textureDefinition.processContent();\r\n\r\n                if (textureDefinition.errorProcessing) {\r\n                  if (variantFile.type === \"tga\") {\r\n                    items.push(\r\n                      new ProjectInfoItem(\r\n                        InfoItemType.internalProcessingError,\r\n                        this.id,\r\n                        TextureImageInfoGeneratorTest.tgaImageProcessingError,\r\n                        `Error processing TGA image`,\r\n                        projectItem,\r\n                        textureDefinition.errorMessage\r\n                      )\r\n                    );\r\n                  } else {\r\n                    items.push(\r\n                      new ProjectInfoItem(\r\n                        InfoItemType.warning,\r\n                        this.id,\r\n                        TextureImageInfoGeneratorTest.pngJpgImageProcessingNoResults,\r\n                        `Could not extract metadata from PNG/JPG/TIF/HEIC image`,\r\n                        projectItem,\r\n                        textureDefinition.errorMessage\r\n                      )\r\n                    );\r\n                  }\r\n                } else if (textureDefinition.width !== undefined && textureDefinition.height !== undefined) {\r\n                  imageWidth = textureDefinition.width;\r\n                  imageHeight = textureDefinition.height;\r\n\r\n                  const textureMem = imageWidth * imageHeight * 4;\r\n\r\n                  if (variantFile.type === \"tga\") {\r\n                    textureImagePi.spectrumIntFeature(\"TGA Width\", imageWidth);\r\n                    textureImagePi.spectrumIntFeature(\"TGA Height\", imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"TGA Texels\", imageWidth * imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"TGA Texture Memory\", textureMem);\r\n                  } else {\r\n                    textureImagePi.spectrumIntFeature(\"PNGJPG Width\", imageWidth);\r\n                    textureImagePi.spectrumIntFeature(\"PNGJPG Height\", imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"PNGJPG Texels\", imageWidth * imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"PNGJPG Texture Memory\", textureMem);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n\r\n            if (imageWidth >= 0 && imageHeight >= 0) {\r\n              const textureMem = imageWidth * imageHeight * 4;\r\n              let isAtlasTexture = false;\r\n\r\n              textureImagePi.spectrumIntFeature(\"Width\", imageWidth);\r\n              textureImagePi.spectrumIntFeature(\"Height\", imageHeight);\r\n              textureImagePi.spectrumIntFeature(\"Texels\", imageWidth * imageHeight);\r\n              textureImagePi.spectrumIntFeature(\"Texture Memory\", textureMem);\r\n\r\n              if (pathInRp) {\r\n                for (const totalTextureMemoryByTier of totalTextureMemoryByTierToUpdate) {\r\n                  totalTextureMemoryByTier[pathInRp] = textureMem;\r\n                }\r\n              }\r\n\r\n              if (!isVanilla) {\r\n                textureImagePi.spectrumIntFeature(\"Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Non-Vanilla Texture Memory\", textureMem);\r\n\r\n                if (pathInRp) {\r\n                  for (const nonVanillaTextureMemoryByTier of nonVanillaTextureMemoryByTierToUpdate) {\r\n                    nonVanillaTextureMemoryByTier[pathInRp] = textureMem;\r\n                  }\r\n                }\r\n              }\r\n\r\n              let relations = 0;\r\n              if (ProjectItemUtilities.isUIRelated(projectItem)) {\r\n                textureImagePi.spectrumIntFeature(\"UI Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"UI Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"UI Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"UI Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"UI Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"UI Non-Vanilla Texture Memory\", textureMem);\r\n                }\r\n\r\n                relations++;\r\n              }\r\n\r\n              if (ProjectItemUtilities.isBlockRelated(projectItem)) {\r\n                textureImagePi.spectrumIntFeature(\"Block Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"Block Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Block Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Block Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"Block Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"Block Non-Vanilla Texture Memory\", textureMem);\r\n\r\n                  if (pathInRp) {\r\n                    for (const blockAtlasMemoryByTier of blockAtlasTextureMemoryByTierToUpdate) {\r\n                      blockAtlasMemoryByTier[pathInRp] = textureMem;\r\n                    }\r\n                  }\r\n                }\r\n\r\n                relations++;\r\n\r\n                isAtlasTexture = true;\r\n              }\r\n\r\n              if (ProjectItemUtilities.isEntityRelated(projectItem)) {\r\n                textureImagePi.spectrumIntFeature(\"Entity Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"Entity Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Entity Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Entity Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"Entity Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"Entity Non-Vanilla Texture Memory\", textureMem);\r\n                }\r\n\r\n                relations++;\r\n              }\r\n\r\n              if (ProjectItemUtilities.isItemRelated(projectItem)) {\r\n                textureImagePi.spectrumIntFeature(\"Item Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"Item Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Item Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Item Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"Item Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"Item Non-Vanilla Texture Memory\", textureMem);\r\n\r\n                  if (pathInRp) {\r\n                    for (const itemAtlasMemoryByTier of itemAtlasTextureMemoryByTierToUpdate) {\r\n                      itemAtlasMemoryByTier[pathInRp] = textureMem;\r\n                    }\r\n                  }\r\n                }\r\n\r\n                relations++;\r\n\r\n                isAtlasTexture = true;\r\n              }\r\n\r\n              if (ProjectItemUtilities.isParticleRelated(projectItem)) {\r\n                textureImagePi.spectrumIntFeature(\"Particle Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"Particle Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Particle Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Particle Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"Particle Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"Particle Non-Vanilla Texture Memory\", textureMem);\r\n                }\r\n\r\n                relations++;\r\n              }\r\n\r\n              if (relations === 0 && projectItem.projectPath) {\r\n                const texturePath = TextureDefinition.getTexturePath(projectItem.projectPath);\r\n\r\n                if (texturePath) {\r\n                  const isVanillaEx = await this._matchesVanillaPathCached(texturePath);\r\n\r\n                  if (isVanillaEx) {\r\n                    textureImagePi.spectrumIntFeature(\"Vanilla Override Width\", imageWidth);\r\n                    textureImagePi.spectrumIntFeature(\"Vanilla Override Height\", imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"Vanilla Override Texels\", imageWidth * imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"Vanilla Override Texture Memory\", textureMem);\r\n                  } else {\r\n                    textureImagePi.spectrumIntFeature(\"Non-tied Width\", imageWidth);\r\n                    textureImagePi.spectrumIntFeature(\"Non-tied Height\", imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"Non-tied Texels\", imageWidth * imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"Non-tied Texture Memory\", textureMem);\r\n\r\n                    if (!isVanilla) {\r\n                      textureImagePi.spectrumIntFeature(\"Non-tied Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                      textureImagePi.spectrumIntFeature(\"Non-tied Non-Vanilla Texture Memory\", textureMem);\r\n                    }\r\n                  }\r\n                }\r\n              } else if (relations > 1) {\r\n                textureImagePi.spectrumIntFeature(\"Multi-tied Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"Multi-tied Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Multi-tied Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Multi-tied Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"Multi-tied Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"Multi-tied Non-Vanilla Texture Memory\", textureMem);\r\n                }\r\n              }\r\n\r\n              let individualMemoryBudget = 2048 * 2048 * 4;\r\n\r\n              if (isAtlasTexture) {\r\n                individualMemoryBudget = 256 * 256 * 4;\r\n                if (textureMem > individualMemoryBudget) {\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.warning,\r\n                      this.id,\r\n                      TextureImageInfoGeneratorTest.individualAtlasTextureMemoryExceedsBudget,\r\n                      `Individual atlassed texture memory exceeds budget of ${individualMemoryBudget} bytes. Memory used`,\r\n                      projectItem,\r\n                      textureMem\r\n                    )\r\n                  );\r\n                }\r\n              } else {\r\n                if (textureMem > individualMemoryBudget) {\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.warning,\r\n                      this.id,\r\n                      TextureImageInfoGeneratorTest.individualTextureMemoryExceedsBudget,\r\n                      `Individual loose texture memory exceeds budget of ${individualMemoryBudget} bytes. Memory used`,\r\n                      projectItem,\r\n                      textureMem\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    let maxTotalTextureMemory = 0;\r\n    let maxNonVanillaTextureMemory = 0;\r\n    let maxBlockAtlasTextureMemory = 0;\r\n    let maxItemAtlasTextureMemory = 0;\r\n\r\n    const category = await ProjectUtilities.getMetaCategory(project);\r\n\r\n    for (let curTier = 0; curTier < TexturePerformanceTierCount; curTier++) {\r\n      let tierNonVanillaTextureMemory = 0;\r\n      let tierTotalTextureMemory = 0;\r\n      let tierTotalBlockAtlasTextureMemory = 0;\r\n      let tierTotalItemAtlasTextureMemory = 0;\r\n\r\n      for (const texturePath in nonVanillaTextureMemoryByTier[curTier]) {\r\n        tierNonVanillaTextureMemory += nonVanillaTextureMemoryByTier[curTier][texturePath];\r\n      }\r\n\r\n      for (const texturePath in totalTextureMemoryByTier[curTier]) {\r\n        tierTotalTextureMemory += totalTextureMemoryByTier[curTier][texturePath];\r\n      }\r\n\r\n      for (const texturePath in blockAtlasTextureMemoryByTier[curTier]) {\r\n        tierTotalBlockAtlasTextureMemory += blockAtlasTextureMemoryByTier[curTier][texturePath];\r\n      }\r\n\r\n      for (const texturePath in itemAtlasTextureMemoryByTier[curTier]) {\r\n        tierTotalItemAtlasTextureMemory += itemAtlasTextureMemoryByTier[curTier][texturePath];\r\n      }\r\n\r\n      if (curTier > 0 && !hasSupportForTier[curTier]) {\r\n        textureTierImagePi[curTier].spectrumIntFeature(\"Non-Vanilla Texture Memory Tier\", maxNonVanillaTextureMemory);\r\n        textureTierImagePi[curTier].spectrumIntFeature(\"Total Texture Memory Tier\", maxTotalTextureMemory);\r\n      } else {\r\n        maxItemAtlasTextureMemory = Math.max(maxItemAtlasTextureMemory, tierTotalItemAtlasTextureMemory);\r\n        maxBlockAtlasTextureMemory = Math.max(maxBlockAtlasTextureMemory, tierTotalBlockAtlasTextureMemory);\r\n        maxNonVanillaTextureMemory = Math.max(maxNonVanillaTextureMemory, tierNonVanillaTextureMemory);\r\n        maxTotalTextureMemory = Math.max(maxTotalTextureMemory, tierTotalTextureMemory);\r\n        textureTierImagePi[curTier].spectrumIntFeature(\"Non-Vanilla Texture Memory Tier\", tierNonVanillaTextureMemory);\r\n        textureTierImagePi[curTier].spectrumIntFeature(\"Total Texture Memory Tier\", tierTotalTextureMemory);\r\n      }\r\n\r\n      // Expand atlases to power of 2\r\n      tierTotalBlockAtlasTextureMemory = Math.pow(2, Math.ceil(Math.log2(tierTotalBlockAtlasTextureMemory)));\r\n      tierTotalItemAtlasTextureMemory = Math.pow(2, Math.ceil(Math.log2(tierTotalItemAtlasTextureMemory)));\r\n\r\n      textureTierImagePi[curTier].spectrumIntFeature(\r\n        \"Block Atlas Texture Memory Tier\",\r\n        tierTotalBlockAtlasTextureMemory\r\n      );\r\n      textureTierImagePi[curTier].spectrumIntFeature(\"Item Atlas Texture Memory Tier\", tierTotalItemAtlasTextureMemory);\r\n\r\n      // 4K limit for warn, 8K as hard limit\r\n      const totalAtlasTextureMemoryBudgetWarn = 4096 * 4096 * 4;\r\n      const totalAtlasTextureMemoryBudgetError = totalAtlasTextureMemoryBudgetWarn * 4;\r\n\r\n      if (tierTotalBlockAtlasTextureMemory > totalAtlasTextureMemoryBudgetError) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            TextureImageInfoGeneratorTest.totalAtlasTextureMemoryExceedsBudgetError,\r\n            `Texture memory of block atlas exceeds hard limit of ${Utilities.addCommasToNumber(\r\n              totalAtlasTextureMemoryBudgetError\r\n            )} bytes. Total memory used`,\r\n            undefined,\r\n            tierTotalBlockAtlasTextureMemory\r\n          )\r\n        );\r\n      } else if (tierTotalBlockAtlasTextureMemory > totalAtlasTextureMemoryBudgetWarn) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            TextureImageInfoGeneratorTest.totalAtlasTextureMemoryExceedsBudgetWarn,\r\n            `Texture memory of block atlas exceeds budget of ${Utilities.addCommasToNumber(\r\n              totalAtlasTextureMemoryBudgetWarn\r\n            )} bytes. Total memory used`,\r\n            undefined,\r\n            tierTotalBlockAtlasTextureMemory\r\n          )\r\n        );\r\n      }\r\n\r\n      if (tierTotalItemAtlasTextureMemory > totalAtlasTextureMemoryBudgetError) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            TextureImageInfoGeneratorTest.totalAtlasTextureMemoryExceedsBudgetError,\r\n            `Texture memory of item atlas exceeds hard limit of ${Utilities.addCommasToNumber(\r\n              totalAtlasTextureMemoryBudgetError\r\n            )} bytes. Total memory used`,\r\n            undefined,\r\n            tierTotalItemAtlasTextureMemory\r\n          )\r\n        );\r\n      } else if (tierTotalItemAtlasTextureMemory > totalAtlasTextureMemoryBudgetWarn) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            TextureImageInfoGeneratorTest.totalAtlasTextureMemoryExceedsBudgetWarn,\r\n            `Texture memory of item atlas exceeds budget of ${Utilities.addCommasToNumber(\r\n              totalAtlasTextureMemoryBudgetWarn\r\n            )} bytes. Total memory used`,\r\n            undefined,\r\n            tierTotalItemAtlasTextureMemory\r\n          )\r\n        );\r\n      }\r\n\r\n      tierNonVanillaTextureMemory += tierTotalBlockAtlasTextureMemory + tierTotalItemAtlasTextureMemory;\r\n      tierTotalTextureMemory += tierTotalBlockAtlasTextureMemory + tierTotalItemAtlasTextureMemory;\r\n\r\n      let curMemoryUsedInTier = tierTotalTextureMemory;\r\n\r\n      if (curMemoryUsedInTier <= 0) {\r\n        curMemoryUsedInTier = maxTotalTextureMemory;\r\n      }\r\n\r\n      if (curTier > 0 && !hasSupportForTier[curTier]) {\r\n        curMemoryUsedInTier = maxTotalTextureMemory;\r\n      }\r\n\r\n      tierTotalMemorySizes[curTier] = curMemoryUsedInTier;\r\n\r\n      // check for non linear tier scaling (e.g., tier 2 occupies more memory than tier 3)\r\n      if (hasSupportForTier[curTier]) {\r\n        for (let prevTier = 0; prevTier < curTier; prevTier++) {\r\n          if (tierTotalMemorySizes[prevTier] && tierTotalMemorySizes[prevTier] > curMemoryUsedInTier) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                TextureImageInfoGeneratorTest.invalidTieringConfiguration,\r\n                `Lower tier ${prevTier} has a higher memory requirement (${Utilities.addCommasToNumber(\r\n                  tierTotalMemorySizes[prevTier]\r\n                )}) than tier ${curTier}`,\r\n                undefined,\r\n                curMemoryUsedInTier\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n\r\n      const tierTotalTextureMemoryBudget = 1024 * 1024 * TextureMemoryLimitsByTier[category][curTier];\r\n\r\n      if (curMemoryUsedInTier > tierTotalTextureMemoryBudget) {\r\n        let warningMessage = `Total texture memory exceeds budget of ${Utilities.addCommasToNumber(\r\n          tierTotalTextureMemoryBudget\r\n        )} bytes for items of type ${ProjectUtilities.getMetaCategoryDescription(category)} at tier ${curTier}.`;\r\n\r\n        warningMessage += \" Total texture memory used\";\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            TextureImageInfoGeneratorTest.totalTextureMemoryExceedsBudgetWarningBase + curTier,\r\n            warningMessage,\r\n            undefined,\r\n            curMemoryUsedInTier\r\n          )\r\n        );\r\n\r\n        for (const pvLabel in project.variants) {\r\n          const pv = project.variants[pvLabel];\r\n\r\n          if (pv && pv.effectiveUnifiedTier === curTier) {\r\n            warningMessage += \" Because this project specifically targets this tier, it is an error.\";\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                TextureImageInfoGeneratorTest.totalTextureMemoryExceedsBudgetErrorBase + curTier,\r\n                warningMessage,\r\n                undefined,\r\n                curMemoryUsedInTier\r\n              )\r\n            );\r\n\r\n            break;\r\n          }\r\n        }\r\n\r\n        // vibrant visuals content must support tier 2 memory limits.\r\n        if (curTier === 2) {\r\n          const isVibrantVisualsCompatible = await ProjectUtilities.isVibrantVisualsCompatible(project);\r\n\r\n          if (isVibrantVisualsCompatible) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                TextureImageInfoGeneratorTest.invalidTieringForVibrantVisuals,\r\n                `Project is marked to support vibrant visuals, but does not support texture limits at tiers ${curTier}. Texture memory`,\r\n                undefined,\r\n                curMemoryUsedInTier\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // if add-on content is not managing its texture memory across tiers and is exceeding a base limit, throw an error\r\n    if (\r\n      !isExplicitlyTargetingTiers &&\r\n      category === ProjectMetaCategory.addOn &&\r\n      maxTotalTextureMemory > TextureMemoryLimitsByTier[category][0] * 1024 * 1024\r\n    ) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          TextureImageInfoGeneratorTest.totalTextureMemoryExceedsBudget,\r\n          `Total texture memory exceeds base budget of ${Utilities.addCommasToNumber(\r\n            TextureMemoryLimitsByTier[category][0] * 1024 * 1024\r\n          )} bytes and is not using subpacks to target specific tiers. Total memory used`,\r\n          undefined,\r\n          maxTotalTextureMemory\r\n        )\r\n      );\r\n    }\r\n\r\n    const totalTextureMemoryBudget = 1024 * 1024 * TextureMemoryLimitsByTier[category][5];\r\n    // if content exceeds absolute limits, throw an error\r\n    if (maxTotalTextureMemory > totalTextureMemoryBudget) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          TextureImageInfoGeneratorTest.totalTextureMemoryExceedsBudget,\r\n          `Total texture memory exceeds absolute budget of ${Utilities.addCommasToNumber(\r\n            totalTextureMemoryBudget\r\n          )} bytes. Total memory used`,\r\n          undefined,\r\n          maxTotalTextureMemory\r\n        )\r\n      );\r\n    }\r\n\r\n    if (vanillaTexturePathNonMersCount > 0) {\r\n      let vanillaOverrideTextureCount = 0;\r\n\r\n      for (const path in vanillaTexturePathNonMers) {\r\n        if (vanillaTexturePathNonMers[path] === true) {\r\n          vanillaOverrideTextureCount++;\r\n        }\r\n      }\r\n\r\n      textureImagePi.setFeature(\"Vanilla Game Texture Coverage\", \"Override Count\", vanillaOverrideTextureCount);\r\n      textureImagePi.setFeature(\r\n        \"Vanilla Game Texture Coverage\",\r\n        \"Vanilla Texture Count\",\r\n        vanillaTexturePathNonMersCount\r\n      );\r\n      textureImagePi.setFeature(\r\n        \"Vanilla Game Texture Coverage\",\r\n        \"Percent\",\r\n        vanillaOverrideTextureCount / vanillaTexturePathNonMersCount\r\n      );\r\n\r\n      const actualOverridePercent = vanillaOverrideTextureCount / vanillaTexturePathNonMersCount;\r\n      if (actualOverridePercent < MashupResourcePackThresholdErrorPercent) {\r\n        let hasGlobalResourcePack = false;\r\n        for (const pack of project.packs) {\r\n          if (pack.packType === PackType.resource && !pack.isInWorld) {\r\n            hasGlobalResourcePack = true;\r\n          }\r\n        }\r\n\r\n        const worldCount = project.getItemsByType(ProjectItemType.worldFolder).length;\r\n\r\n        if (hasGlobalResourcePack && worldCount > 0) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              TextureImageInfoGeneratorTest.mashupPackDoesntOverrideMostTextures,\r\n              `Content seems like a mashup pack, but the resource pack does not override >60% of vanilla textures.`,\r\n              undefined,\r\n              actualOverridePercent\r\n            )\r\n          );\r\n        }\r\n      }\r\n\r\n      if (actualOverridePercent >= TextureOverrideThresholdPercent) {\r\n        if (actualOverridePercent < TextureOverrideThresholdErrorPercent) {\r\n          const nonRpItemCount =\r\n            project.getItemsByType(ProjectItemType.behaviorPackManifestJson).length +\r\n            project.getItemsByType(ProjectItemType.worldFolder).length;\r\n\r\n          if (nonRpItemCount === 0) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                TextureImageInfoGeneratorTest.texturePackDoesntOverrideMostTextures,\r\n                `Content seems like a texture pack (overrides >70% of textures), but does not override the vast majority of textures. This pack should override at least 95% of vanilla textures.`,\r\n                undefined,\r\n                actualOverridePercent\r\n              )\r\n            );\r\n          }\r\n        }\r\n\r\n        for (const path in vanillaTexturePathNonMers) {\r\n          if (vanillaTexturePathNonMers[path] === false) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.warning,\r\n                this.id,\r\n                TextureImageInfoGeneratorTest.texturePackDoesntOverrideVanillaGameTexture,\r\n                `Content seems like a texture pack, but does not override vanilla texture`,\r\n                undefined,\r\n                path\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\nimport RecipeBehaviorDefinition from \"../minecraft/RecipeBehaviorDefinition\";\r\nimport AnimationControllerBehaviorDefinition from \"../minecraft/AnimationBehaviorDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"../minecraft/SpawnRulesBehaviorDefinition\";\r\nimport AnimationControllerResourceDefinition from \"../minecraft/AnimationControllerResourceDefinition\";\r\nimport AnimationResourceDefinition from \"../minecraft/AnimationResourceDefinition\";\r\nimport AttachableResourceDefinition from \"../minecraft/AttachableResourceDefinition\";\r\nimport EntityTypeResourceDefinition from \"../minecraft/EntityTypeResourceDefinition\";\r\nimport FogResourceDefinition from \"../minecraft/FogResourceDefinition\";\r\nimport WorldTemplateManifestDefinition from \"../minecraft/WorldTemplateManifestDefinition\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { isMinorVersionTooOld } from \"../core/versioning/MinecraftVersionRules\";\r\n\r\n/**\r\n * Validates and updates format versions across various Minecraft definition types.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/formatver.form.json} for topic definitions\r\n */\r\nexport default class FormatVersionManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"FORMATVER\";\r\n  title = \"Format Version\";\r\n\r\n  performPlatformVersionValidations: boolean = false;\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, content: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(InfoItemType.internalProcessingError, this.id, 500, \"Could not retrieve version.\")\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const modernGameVersionSplit = ver.split(\".\");\r\n    if (modernGameVersionSplit.length < 3 || modernGameVersionSplit.length > 4) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          501,\r\n          \"Could not latest product retrieve version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.blockTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const btdef = await BlockTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (btdef) {\r\n            const ver = btdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, modernGameVersionSplit, infoItems, pi, \"Block type\", 110);\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                btdef?.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.itemTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const itdef = await ItemTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (itdef) {\r\n            const ver = itdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, modernGameVersionSplit, infoItems, pi, \"Item type\", 130);\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                itdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.recipeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const rbdef = await RecipeBehaviorDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rbdef) {\r\n            const ver = rbdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, modernGameVersionSplit, infoItems, pi, \"Recipe\", 150);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                rbdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.animationBehaviorJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const abdef = await AnimationControllerBehaviorDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (abdef) {\r\n            const ver = abdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"10\", \"0\"], infoItems, pi, \"Behavior animation\", 170);\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                abdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.animationControllerBehaviorJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const abdef = await AnimationControllerBehaviorDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (abdef) {\r\n            const ver = abdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"10\", \"0\"], infoItems, pi, \"Behavior animation controller\", 190);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                abdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.animationResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const ardef = await AnimationResourceDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (ardef) {\r\n            const ver = ardef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"10\", \"0\"], infoItems, pi, \"Resource animation\", 210);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                ardef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.animationControllerResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const acrdef = await AnimationControllerResourceDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (acrdef) {\r\n            const ver = acrdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"10\", \"0\"], infoItems, pi, \"Resource animation controller\", 230);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                acrdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.spawnRuleBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const srbdef = await SpawnRulesBehaviorDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (srbdef) {\r\n            const ver = srbdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"12\", \"0\"], infoItems, pi, \"Spawn rules\", 250);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                srbdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.attachableResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const srbdef = await AttachableResourceDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (srbdef) {\r\n            const ver = srbdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"10\", \"0\"], infoItems, pi, \"Attachables\", 270, true);\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                srbdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.entityTypeResource) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const etrdef = await EntityTypeResourceDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (etrdef) {\r\n            const ver = etrdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, modernGameVersionSplit, infoItems, pi, \"Entity type resource\", 290);\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                etrdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.fogResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const etrdef = await FogResourceDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (etrdef) {\r\n            const ver = etrdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, modernGameVersionSplit, infoItems, pi, \"Fog resource\", 310);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                etrdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  checkVersions(\r\n    ver: number[] | undefined,\r\n    currentVersion: string[],\r\n    infoItems: ProjectInfoItem[],\r\n    pi: ProjectItem,\r\n    typeString: string,\r\n    identifierOffset: number,\r\n    allowHigherVersions?: boolean\r\n  ) {\r\n    const verShort = currentVersion[0] + \".\" + currentVersion[1] + \".\" + currentVersion[2];\r\n\r\n    if (!ver || ver.length !== 3) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          identifierOffset,\r\n          typeString + \" does not define a format_version.\",\r\n          pi\r\n        )\r\n      );\r\n      return true;\r\n    } else {\r\n      if (ver[0] < parseInt(currentVersion[0])) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n            this.id,\r\n            identifierOffset + 2,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a lower major version number compared to the expected version (\" +\r\n              verShort +\r\n              \")\",\r\n            pi\r\n          )\r\n        );\r\n      } else if (ver[0] > parseInt(currentVersion[0]) && !allowHigherVersions) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            identifierOffset + 4,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a higher major version number compared to the expected version (\" +\r\n              verShort +\r\n              \")\",\r\n            pi\r\n          )\r\n        );\r\n        return true;\r\n      } else if (isMinorVersionTooOld(parseInt(currentVersion[0]), parseInt(currentVersion[1]), ver[1])) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n            this.id,\r\n            identifierOffset + 6,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a lower minor version number compared to the expected version (\" +\r\n              verShort +\r\n              \") or its previous minor version\",\r\n            pi\r\n          )\r\n        );\r\n      } else if (\r\n        ver[1] > parseInt(currentVersion[1]) &&\r\n        !this.performPlatformVersionValidations &&\r\n        !allowHigherVersions\r\n      ) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            identifierOffset + 8,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a higher minor version number compared to the expected version (\" +\r\n              verShort +\r\n              \")\",\r\n            pi\r\n          )\r\n        );\r\n        return true;\r\n      } else if (ver[2] < parseInt(currentVersion[2])) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.recommendation,\r\n            this.id,\r\n            identifierOffset + 10,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a lower patch version number compared to the expected version (\" +\r\n              verShort +\r\n              \")\",\r\n            pi\r\n          )\r\n        );\r\n      } else if (\r\n        ver[2] > parseInt(currentVersion[2]) &&\r\n        ver[1] === parseInt(currentVersion[1]) &&\r\n        !this.performPlatformVersionValidations &&\r\n        !allowHigherVersions\r\n      ) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            identifierOffset + 12,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a higher patch version number compared to the expected version (\" +\r\n              verShort +\r\n              \")\",\r\n            pi\r\n          )\r\n        );\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case 1:\r\n        const localResults = await this.updateBaseGameVersionToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [1];\r\n  }\r\n\r\n  async updateBaseGameVersionToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      results.push(\r\n        new ProjectUpdateResult(UpdateResultType.internalProcessingError, this.id, 199, \"Could not retrieve version.\")\r\n      );\r\n\r\n      return results;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          200,\r\n          \"Could not retrieve latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return results;\r\n    }\r\n\r\n    const major = parseInt(verSplit[0]);\r\n    const minor = parseInt(verSplit[1]);\r\n    const patch = parseInt(verSplit[2]);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const wtManifest = await WorldTemplateManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (wtManifest) {\r\n            const mev = wtManifest.baseGameVersion;\r\n\r\n            if (!mev || mev.length < 3 || mev.length > 4 || mev[0] !== major || mev[1] !== minor || mev[2] !== patch) {\r\n              wtManifest.setBaseGameVersion([major, minor, patch], project);\r\n              wtManifest.persist();\r\n\r\n              results.push(\r\n                new ProjectUpdateResult(\r\n                  UpdateResultType.updatedFile,\r\n                  this.id,\r\n                  200,\r\n                  \"Updated world template base_game_version to '\" + major + \".\" + minor + \".\" + patch + \"'.\",\r\n                  pi,\r\n                  ver\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport AnimationResourceDefinition from \"../minecraft/AnimationResourceDefinition\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\n\r\nexport enum AnimationResourceInfoGeneratorTest {\r\n  animations = 101,\r\n  bones = 102,\r\n}\r\n\r\n/**\r\n * Aggregates animation resource information from resource packs.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/resourceanimation.form.json} for topic definitions\r\n */\r\nexport default class AnimationResourceInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"RESOURCEANIMATION\";\r\n  title = \"Resource Animation\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.animationCount = infoSet.getSummedDataValue(\"RESOURCEANIMATION\", 1);\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const animationCountPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      AnimationResourceInfoGeneratorTest.animations,\r\n      ProjectInfoUtilities.getTitleFromEnum(\r\n        AnimationResourceInfoGeneratorTest,\r\n        AnimationResourceInfoGeneratorTest.animations\r\n      )\r\n    );\r\n    items.push(animationCountPi);\r\n\r\n    const boneCountPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      AnimationResourceInfoGeneratorTest.bones,\r\n      ProjectInfoUtilities.getTitleFromEnum(\r\n        AnimationResourceInfoGeneratorTest,\r\n        AnimationResourceInfoGeneratorTest.bones\r\n      )\r\n    );\r\n    items.push(boneCountPi);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.animationResourceJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const ra = await AnimationResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (ra && ra.animations) {\r\n            for (const animationName in ra.animations) {\r\n              const animation = ra.animations[animationName];\r\n\r\n              animationCountPi.incrementFeature(\"Resource\", \"Count\", 1);\r\n\r\n              if (animation && animation.bones) {\r\n                for (const boneName in animation.bones) {\r\n                  const bone = animation.bones[boneName];\r\n\r\n                  if (bone) {\r\n                    boneCountPi.incrementFeature(\"Resource Animation Bone\", \"Count\", 1);\r\n\r\n                    if (bone.position) {\r\n                      this.processAnimationValue(boneCountPi, bone.position, \"Position\");\r\n                    }\r\n\r\n                    if (bone.rotation) {\r\n                      this.processAnimationValue(boneCountPi, bone.rotation, \"Rotation\");\r\n                    }\r\n\r\n                    if (bone.scale) {\r\n                      this.processAnimationValue(boneCountPi, bone.scale, \"Scale\");\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  processAnimationValue(boneCountPi: ProjectInfoItem, value: any, type: string) {\r\n    let isKeyframedBoneAnimation = false;\r\n\r\n    if (typeof value === \"string\") {\r\n      boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Expression\", \"Count\", 1);\r\n      return;\r\n    }\r\n\r\n    for (const key in value) {\r\n      const val = value[key];\r\n\r\n      if (Array.isArray(val)) {\r\n        isKeyframedBoneAnimation = true;\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (isKeyframedBoneAnimation) {\r\n      boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Keyframe\", \"Count\", 1);\r\n\r\n      for (const key in value) {\r\n        const val = value[key];\r\n\r\n        if (Array.isArray(val)) {\r\n          for (const valAtom of val) {\r\n            if (typeof valAtom === \"string\") {\r\n              boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Keyframe with Molang\", \"Count\", 1);\r\n            } else {\r\n              boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Keyframe\", \"Count\", 1);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Continuous\", \"Count\", 1);\r\n\r\n      if (Array.isArray(value)) {\r\n        for (const val of value) {\r\n          if (typeof val.position === \"string\") {\r\n            boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Continuous with Molang\", \"Count\", 1);\r\n          } else {\r\n            boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Continuous\", \"Count\", 1);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\n\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\n\r\nexport enum UnlinkedItemInfoGeneratorTest {\r\n  unlinkedItemIsNotUsed = 191,\r\n  avoidLinksToVanillaItems = 205,\r\n}\r\n\r\nexport const UnlinkedItemNotFoundByType = 300;\r\n\r\n/**\r\n * Detects unlinked items and validates item relationships.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/unlink.form.json} for topic definitions\r\n */\r\nexport default class UnlinkedItemInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"UNLINK\";\r\n  title = \"Unlinked Items\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (projectItem.unfulfilledRelationships) {\r\n      for (const rel of projectItem.unfulfilledRelationships) {\r\n        if (rel.isVanillaDependent) {\r\n          // UNLINK205\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.recommendation,\r\n              this.id,\r\n              UnlinkedItemInfoGeneratorTest.avoidLinksToVanillaItems,\r\n              `Link to vanilla ` +\r\n                ProjectItemUtilities.getDescriptionForType(rel.itemType).toLowerCase() +\r\n                ` item; avoid if possible`,\r\n              projectItem,\r\n              rel.path\r\n            )\r\n          );\r\n        } else {\r\n          const message =\r\n            `Link to ` +\r\n            ProjectItemUtilities.getDescriptionForType(rel.itemType).toLowerCase() +\r\n            ` is not found in this pack`;\r\n\r\n          // UNLINK300+\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              UnlinkedItemNotFoundByType + rel.itemType,\r\n              message,\r\n              projectItem,\r\n              projectItem.projectPath + \" to `\" + rel.path + \"`\"\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.itemType === ProjectItemType.texture || projectItem.itemType === ProjectItemType.audio) {\r\n      if (projectItem.parentItemCount <= 0 && projectItem.childItemCount <= 0) {\r\n        const path = await projectItem.getPackRelativePath();\r\n\r\n        if (path) {\r\n          const isVanilla = await Database.matchesVanillaPath(path);\r\n\r\n          if (!isVanilla) {\r\n            // UNLINK191\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.warning,\r\n                this.id,\r\n                UnlinkedItemInfoGeneratorTest.unlinkedItemIsNotUsed,\r\n                ProjectItemUtilities.getDescriptionForType(projectItem.itemType) +\r\n                  ` does not have any items in this pack that are using this.`,\r\n                projectItem\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ModelGeometryDefinition from \"../minecraft/ModelGeometryDefinition\";\r\nimport { ItemDisplayTransforms } from \"../minecraft/IModelGeometry\";\r\n\r\nexport enum GeometryInfoGeneratorTest {\r\n  blockGeometry = 101,\r\n  entityGeometry = 102,\r\n  itemGeometry = 103,\r\n  overlyComplexBlockGeometry = 501,\r\n}\r\n\r\n/**\r\n * Validates and aggregates model geometry information from resource packs.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/geometry.form.json} for topic definitions\r\n */\r\nexport default class GeometryInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"GEOMETRY\";\r\n  title = \"Model Geometry Validation\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    const blockGeometryPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      GeometryInfoGeneratorTest.blockGeometry,\r\n      \"Block Geometry\"\r\n    );\r\n\r\n    const entityGeometryPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      GeometryInfoGeneratorTest.entityGeometry,\r\n      \"Entity Geometry\"\r\n    );\r\n\r\n    const itemGeometryPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      GeometryInfoGeneratorTest.itemGeometry,\r\n      \"Items Geometry\"\r\n    );\r\n\r\n    const items: ProjectInfoItem[] = [blockGeometryPi, entityGeometryPi, itemGeometryPi];\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.modelGeometryJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const srPath = projectItem.primaryFile.storageRelativePath.toLowerCase();\r\n          const modGeo = await ModelGeometryDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (modGeo && modGeo.definitions) {\r\n            for (const geoDef of modGeo.definitions) {\r\n              if (geoDef.bones) {\r\n                let totalCubes = 0;\r\n                for (const bone of geoDef.bones) {\r\n                  if (bone.cubes) {\r\n                    totalCubes += bone.cubes.length;\r\n                  }\r\n                }\r\n\r\n                if (srPath.indexOf(\"/blocks/\") >= 0) {\r\n                  blockGeometryPi.spectrumIntFeature(\"Cubes\", totalCubes);\r\n\r\n                  const blockCubeBudget = 50;\r\n                  if (totalCubes > blockCubeBudget) {\r\n                    items.push(\r\n                      new ProjectInfoItem(\r\n                        InfoItemType.warning,\r\n                        this.id,\r\n                        GeometryInfoGeneratorTest.overlyComplexBlockGeometry,\r\n                        `More than ${blockCubeBudget} cubes in custom blocks may lead to degraded performance. Cubes used`,\r\n                        projectItem,\r\n                        totalCubes\r\n                      )\r\n                    );\r\n                  }\r\n                } else if (srPath.indexOf(\"/items/\") >= 0 || srPath.indexOf(\"/attachable\") >= 0) {\r\n                  // note that sometimes this is in /entity, e.g., /entity/attachables, so this check needs to be first\r\n                  itemGeometryPi.spectrumIntFeature(\"Cubes\", totalCubes);\r\n                } else if (srPath.indexOf(\"/entity/\") >= 0) {\r\n                  entityGeometryPi.spectrumIntFeature(\"Cubes\", totalCubes);\r\n                }\r\n              }\r\n\r\n              if (geoDef.item_display_transforms) {\r\n                for (const itemDisplayKey in geoDef.item_display_transforms) {\r\n                  const itemDisplayTransform = (geoDef.item_display_transforms as any)[\r\n                    itemDisplayKey\r\n                  ] as ItemDisplayTransforms;\r\n                  if (!itemDisplayTransform) {\r\n                    continue;\r\n                  }\r\n\r\n                  itemGeometryPi.incrementFeature(itemDisplayKey + \" Item Display Transform\");\r\n\r\n                  if (itemDisplayTransform.fit_to_frame === true) {\r\n                    itemGeometryPi.incrementFeature(itemDisplayKey + \" Item Display Transform Fit To Frame True\");\r\n                  }\r\n\r\n                  if (itemDisplayTransform.fit_to_frame === false) {\r\n                    itemGeometryPi.incrementFeature(itemDisplayKey + \" Item Display Transform Fit To Frame False\");\r\n                  }\r\n\r\n                  if (itemDisplayTransform.scale) {\r\n                    for (const scaleNum of itemDisplayTransform.scale) {\r\n                      itemGeometryPi.spectrumFeature(itemDisplayKey + \" Item Display Transform Scale \", scaleNum);\r\n                    }\r\n                  }\r\n\r\n                  if (itemDisplayTransform.rotation) {\r\n                    for (const rotationNum of itemDisplayTransform.rotation) {\r\n                      itemGeometryPi.spectrumFeature(itemDisplayKey + \" Item Display Transform Rotation \", rotationNum);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport BlocksCatalogDefinition from \"../minecraft/BlocksCatalogDefinition\";\r\nimport TerrainTextureCatalogDefinition from \"../minecraft/TerrainTextureCatalogDefinition\";\r\nimport ItemTextureCatalogDefinition from \"../minecraft/ItemTextureCatalogDefinition\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\n\r\nexport enum TextureReferenceInfoGeneratorTest {\r\n  textureReferences = 101,\r\n}\r\n\r\n/**\r\n * Aggregates texture reference information from various catalog definitions.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/textureref.form.json} for topic definitions\r\n */\r\nexport default class TextureReferenceInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"TEXTUREREF\";\r\n  title = \"Texture References\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.textureCount = infoSet.getSummedDataValue(this.id, TextureReferenceInfoGeneratorTest.textureReferences);\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const textureRefCountPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      TextureReferenceInfoGeneratorTest.textureReferences,\r\n      \"Texture References\"\r\n    );\r\n    items.push(textureRefCountPi);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.blocksCatalogResourceJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const blockCat = await BlocksCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (blockCat && blockCat.blocksCatalog && projectItem.projectPath) {\r\n            const textureRefs = blockCat.getTextureReferences();\r\n\r\n            for (const textureRef of textureRefs) {\r\n              contentIndex.insert(\r\n                textureRef,\r\n                projectItem.projectPath,\r\n                AnnotationCategory.blockTextureReferenceDependent\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.terrainTextureCatalogResourceJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const blockCat = await TerrainTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (blockCat && projectItem.projectPath) {\r\n            const textureRefs = blockCat.getTextureReferences();\r\n\r\n            for (const textureRef of textureRefs) {\r\n              contentIndex.insert(textureRef, projectItem.projectPath, AnnotationCategory.blockTextureReferenceSource);\r\n            }\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.itemTextureJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const itemCat = await ItemTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (itemCat && projectItem.projectPath) {\r\n            const textureRefs = itemCat.getTextureReferences();\r\n\r\n            for (const textureRef of textureRefs) {\r\n              contentIndex.insert(textureRef, projectItem.projectPath, AnnotationCategory.itemTextureReferenceSource);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport IProjectFileInfoGenerator from \"./IProjectFileInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IFile from \"../storage/IFile\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nexport enum ValidGeneratorTest {\r\n  nonCompliantJson = 102,\r\n  emptyJson = 103,\r\n  jsonNotString = 104,\r\n}\r\n\r\n/**\r\n * Validates file contents for JSON compliance and format correctness.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/valfile.form.json} for topic definitions\r\n */\r\nexport default class ValidFileGenerator implements IProjectFileInfoGenerator {\r\n  id = \"VALFILE\";\r\n  title = \"Valid files\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, file: IFile, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (StorageUtilities.getMimeType(file) === \"application/json\") {\r\n      if (!file.isString) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            ValidGeneratorTest.jsonNotString,\r\n            `JSON file is not a string`,\r\n            project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n            file.content ? file.content.length + \" bytes\" : \"unloadable\"\r\n          )\r\n        );\r\n      } else if (!file.content || file.content?.length < 2) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            ValidGeneratorTest.emptyJson,\r\n            `JSON file is empty`,\r\n            project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n            file.content ? file.content.length + \" characters\" : \"unloadable\"\r\n          )\r\n        );\r\n      } else {\r\n        StorageUtilities.getJsonObject(file);\r\n\r\n        if (file.isInErrorState) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              ValidGeneratorTest.nonCompliantJson,\r\n              `JSON file is not JSON compliant`,\r\n              project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n              file.errorStateMessage ? file.errorStateMessage : \"unparseable\"\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport BlocksCatalogDefinition from \"../minecraft/BlocksCatalogDefinition\";\r\n\r\nexport enum BlocksCatalogUpdate {\r\n  removeUnusedBlockResourceIdentifiers = 1051,\r\n}\r\n\r\nexport enum BlocksCatalogInfo {\r\n  unusedBlockCatalogResource = 100,\r\n  foundBlockCatalogResource = 101,\r\n  vanillaOverrideBlockCatalogResource = 102,\r\n  blockResourceIdentifier = 53,\r\n}\r\n\r\n/**\r\n * Validates and manages blocks catalog (blocks.json) resources in resource packs.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/blockscat.form.json} for topic definitions\r\n */\r\nexport default class BlocksCatalogManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"BLOCKSCAT\";\r\n  title = \"Blocks Catalog\";\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const results: ProjectInfoItem[] = [];\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.blocksCatalogResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const blocksCatalog = await BlocksCatalogDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          results.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              BlocksCatalogInfo.foundBlockCatalogResource,\r\n              `Blocks catalog resource found`,\r\n              pi\r\n            )\r\n          );\r\n\r\n          if (blocksCatalog) {\r\n            const dependencies = await blocksCatalog.getDependenciesList(project);\r\n\r\n            for (const id of dependencies.unused) {\r\n              results.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.warning,\r\n                  this.id,\r\n                  BlocksCatalogInfo.unusedBlockCatalogResource,\r\n                  `Blocks catalog resource is not used`,\r\n                  pi,\r\n                  id\r\n                )\r\n              );\r\n            }\r\n\r\n            for (const id of dependencies.vanillaOverride) {\r\n              results.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.recommendation,\r\n                  this.id,\r\n                  BlocksCatalogInfo.vanillaOverrideBlockCatalogResource,\r\n                  `Overrides vanilla resource, which is not recommended`,\r\n                  pi,\r\n                  id\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.blocksCatalogResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const blocksCatalog = await BlocksCatalogDefinition.ensureOnFile(pi.primaryFile);\r\n          let wasUpdated = false;\r\n          if (blocksCatalog) {\r\n            switch (updateId) {\r\n              case BlocksCatalogUpdate.removeUnusedBlockResourceIdentifiers:\r\n                const dependencies = await blocksCatalog.getDependenciesList(project);\r\n\r\n                for (const id of dependencies.unused) {\r\n                  blocksCatalog.removeId(id);\r\n\r\n                  wasUpdated = true;\r\n                  results.push(\r\n                    new ProjectUpdateResult(\r\n                      UpdateResultType.updatedFile,\r\n                      this.id,\r\n                      BlocksCatalogUpdate.removeUnusedBlockResourceIdentifiers,\r\n                      \"Removed ununused blocks catalog resource\",\r\n                      pi,\r\n                      id\r\n                    )\r\n                  );\r\n                }\r\n                break;\r\n            }\r\n          }\r\n\r\n          if (wasUpdated) {\r\n            blocksCatalog?.persist();\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [BlocksCatalogUpdate.removeUnusedBlockResourceIdentifiers];\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport enum EntityTypeUpdate {\r\n  UpdateFormatVersionToLatest = 1051,\r\n}\r\n\r\nexport enum EntityTypeInfo {\r\n  RuntimeIdentifier = 52,\r\n  Identifier = 53,\r\n  Metadata = 54,\r\n  FormatVersionDefined = 100,\r\n  FormatVersionMajorVersionLowerThanCurrent = 110,\r\n  FormatVersionMajorVersionHigherThanCurrent = 111,\r\n  FormatVersionMinorVersionLowerThanCurrent = 120,\r\n  FormatVersionMinorVersionHigherThanCurrent = 121,\r\n  FormatVersionPatchVersionLowerThanCurrent = 130,\r\n  FormatVersionPatchVersionHigherThanCurrent = 131,\r\n  FailedToRetrieveLatestMinecraftVersion = 500,\r\n  FailedToParseLatestMinecraftVersion = 501,\r\n}\r\n\r\n/**\r\n * Validates and updates entity type definitions, including format version management.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/entitytype.form.json} for topic definitions\r\n */\r\nexport default class EntityTypeManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id;\r\n  title = \"Entity Type\";\r\n\r\n  constructor() {\r\n    this.id = \"ENTITYTYPE\";\r\n  }\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(InfoItemType.internalProcessingError, this.id, 509, \"Could not retrieve version.\")\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          501,\r\n          \"Could not latest product retrieve version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const piiRuntimeIdentifier = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      EntityTypeInfo.RuntimeIdentifier,\r\n      \"Entity Type Runtime Identifier\"\r\n    );\r\n    const piiIdentifier = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      EntityTypeInfo.Identifier,\r\n      \"Entity Type Identifier\"\r\n    );\r\n    const piiMetadata = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      EntityTypeInfo.Metadata,\r\n      \"Entity Type Metadata\"\r\n    );\r\n\r\n    infoItems.push(piiRuntimeIdentifier);\r\n\r\n    infoItems.push(piiIdentifier);\r\n\r\n    infoItems.push(piiMetadata);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.entityTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpEntityType = await EntityTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpEntityType) {\r\n            await bpEntityType.load();\r\n\r\n            if (bpEntityType && bpEntityType._data && bpEntityType._data.description) {\r\n              const desc = bpEntityType._data.description;\r\n\r\n              if (desc.identifier !== undefined && desc.identifier.toLowerCase().startsWith(\"minecraft:\")) {\r\n                piiIdentifier.incrementFeature(desc.identifier.toLowerCase());\r\n              } else {\r\n                piiIdentifier.incrementFeature(\"(no override identifier)\");\r\n              }\r\n\r\n              if (\r\n                desc.runtime_identifier !== undefined &&\r\n                desc.runtime_identifier.toLowerCase !== undefined &&\r\n                desc.runtime_identifier.toLowerCase().startsWith(\"minecraft:\")\r\n              ) {\r\n                piiRuntimeIdentifier.incrementFeature(desc.runtime_identifier.toLowerCase());\r\n              } else {\r\n                piiRuntimeIdentifier.incrementFeature(\"(no runtime identifier)\");\r\n              }\r\n\r\n              if (desc.aliases) {\r\n                // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n                for (const aliasName in desc.aliases) {\r\n                  piiMetadata.incrementFeature(\"Entity Type Alias\");\r\n                }\r\n              }\r\n\r\n              if (desc.properties) {\r\n                for (const propName in desc.properties) {\r\n                  const prop = desc.properties[propName];\r\n\r\n                  if (prop) {\r\n                    piiMetadata.incrementFeature(\"Entity Type Property\");\r\n\r\n                    if (prop.client_sync === true) {\r\n                      piiMetadata.incrementFeature(\"Entity Type Property Client Sync=true\");\r\n                    }\r\n                    if (prop.client_sync === false) {\r\n                      piiMetadata.incrementFeature(\"Entity Type Property Client Sync=false\");\r\n                    }\r\n                    if (prop.type === \"bool\" || prop.type === \"int\" || prop.type === \"float\" || prop.type === \"enum\") {\r\n                      piiMetadata.incrementFeature(\"Entity Type \" + prop.type + \" Property\");\r\n                    } else if (prop.type) {\r\n                      Log.debug(\"Unknown entity property type found: \" + prop.type);\r\n                      piiMetadata.incrementFeature(\"Entity Type Unknown Property\");\r\n                    }\r\n\r\n                    if (prop.values) {\r\n                      piiMetadata.spectrumFeature(\"Entity Type Property Value Count\", prop.values.length);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n\r\n              if (desc.is_experimental) {\r\n                piiMetadata.incrementFeature(\"Experimental Entity Type\");\r\n              }\r\n\r\n              if (desc.is_spawnable) {\r\n                piiMetadata.incrementFeature(\"Spawnable Entity Type\");\r\n              }\r\n\r\n              if (desc.is_summonable) {\r\n                piiMetadata.incrementFeature(\"Summonable Entity Type\");\r\n              }\r\n            } else {\r\n              piiMetadata.incrementFeature(\"Entity Type without description\");\r\n            }\r\n\r\n            const fv = bpEntityType.getFormatVersionAsNumberArray();\r\n            if (!bpEntityType || !fv) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  100,\r\n                  \"Entity type does not define a format_version.\",\r\n                  pi\r\n                )\r\n              );\r\n            } else {\r\n              if (fv.length > 0 && fv[0] < parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    110,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower major version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[0] > parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    111,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher major version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[1] < parseInt(verSplit[1]) - 1) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    120,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower minor version number compared to the current version or the previous current minor version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[1] > parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    121,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher minor version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[2] < parseInt(verSplit[2])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    130,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower patch version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[2] > parseInt(verSplit[2]) && fv[1] === parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    131,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher patch version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case EntityTypeUpdate.UpdateFormatVersionToLatest:\r\n        const localResults = await this.updateFormatVersionToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [EntityTypeUpdate.UpdateFormatVersionToLatest];\r\n  }\r\n\r\n  async updateFormatVersionToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          EntityTypeInfo.FailedToRetrieveLatestMinecraftVersion,\r\n          \"Could not retrieve version.\"\r\n        )\r\n      );\r\n\r\n      return results;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          200,\r\n          \"Could not retrieve latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return results;\r\n    }\r\n\r\n    const major = parseInt(verSplit[0]);\r\n    const minor = parseInt(verSplit[1]);\r\n    const patch = parseInt(verSplit[2]);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.entityTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const wtManifest = await EntityTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (wtManifest) {\r\n            const mev = wtManifest.formatVersion;\r\n\r\n            if (mev) {\r\n              const mevY = mev?.split(\".\");\r\n\r\n              if (\r\n                mevY &&\r\n                (mevY.length < 3 ||\r\n                  mevY.length > 4 ||\r\n                  parseInt(mevY[0]) !== major ||\r\n                  parseInt(mevY[1]) !== minor ||\r\n                  parseInt(mevY[2]) !== patch)\r\n              ) {\r\n                wtManifest.setBehaviorPackFormatVersion(major + \".\" + minor + \".\" + patch);\r\n                wtManifest.persist();\r\n\r\n                results.push(\r\n                  new ProjectUpdateResult(\r\n                    UpdateResultType.updatedFile,\r\n                    this.id,\r\n                    200,\r\n                    \"Updated behavior pack entity type manager format_version to '\" +\r\n                      major +\r\n                      \".\" +\r\n                      minor +\r\n                      \".\" +\r\n                      patch +\r\n                      \"'.\",\r\n                    pi,\r\n                    ver\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport { IProjectInfoTopicData } from \"../info/IProjectInfoGeneratorBase\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\nimport ProjectInfoUtilities from \"../info/ProjectInfoUtilities\";\r\n\r\nexport enum ItemTypeUpdate {\r\n  UpdateFormatVersionToLatest = 1,\r\n}\r\n\r\nexport enum ItemTypeInfo {\r\n  identifier = 53,\r\n  metadata = 54,\r\n  category = 55,\r\n  formatVersionDefined = 100,\r\n  formatVersionMajorVersionLowerThanCurrent = 110,\r\n  formatVersionMajorVersionHigherThanCurrent = 111,\r\n  formatVersionMinorVersionLowerThanCurrent = 120,\r\n  formatVersionMinorVersionHigherThanCurrent = 121,\r\n  formatVersionPatchVersionLowerThanCurrent = 130,\r\n  formatVersionPatchVersionHigherThanCurrent = 131,\r\n  failedToRetrieveLatestMinecraftVersion = 500,\r\n  failedToParseLatestMinecraftVersion = 501,\r\n}\r\n\r\n/**\r\n * Validates and updates item type definitions, including format version management.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/itemtype.form.json} for topic definitions\r\n */\r\nexport default class ItemTypeManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"ITEMTYPE\";\r\n  title = \"Item Type\";\r\n\r\n  getTopicData(topicId: number): IProjectInfoTopicData | undefined {\r\n    const formatVersion = {\r\n      updaterId: this.id,\r\n      updaterIndex: ItemTypeUpdate.UpdateFormatVersionToLatest,\r\n      action: \"Set behavior pack item type format version to latest version.\",\r\n    };\r\n\r\n    const title = ProjectInfoUtilities.getTitleFromEnum(ItemTypeInfo, topicId);\r\n\r\n    switch (topicId) {\r\n      case ItemTypeInfo.formatVersionMajorVersionLowerThanCurrent:\r\n      case ItemTypeInfo.formatVersionMajorVersionHigherThanCurrent:\r\n      case ItemTypeInfo.formatVersionMinorVersionLowerThanCurrent:\r\n      case ItemTypeInfo.formatVersionMinorVersionHigherThanCurrent:\r\n      case ItemTypeInfo.formatVersionPatchVersionLowerThanCurrent:\r\n      case ItemTypeInfo.formatVersionPatchVersionHigherThanCurrent:\r\n        return {\r\n          title: title,\r\n          updaters: [formatVersion],\r\n        };\r\n    }\r\n\r\n    return {\r\n      title: title,\r\n    };\r\n  }\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(InfoItemType.internalProcessingError, this.id, 500, \"Could not retrieve version.\")\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          ItemTypeInfo.failedToRetrieveLatestMinecraftVersion,\r\n          \"Could not latest product retrieve version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const piiIdentifier = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      ItemTypeInfo.identifier,\r\n      \"Item Type Identifier\"\r\n    );\r\n    const piiCategory = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      ItemTypeInfo.category,\r\n      \"Item Type Category\"\r\n    );\r\n\r\n    infoItems.push(piiIdentifier);\r\n\r\n    infoItems.push(piiCategory);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.itemTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpItemType = await ItemTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpItemType) {\r\n            await bpItemType.load();\r\n\r\n            if (bpItemType && bpItemType.data && bpItemType.data.description) {\r\n              const desc = bpItemType.data.description;\r\n\r\n              if (desc.identifier !== undefined && desc.identifier.toLowerCase().startsWith(\"minecraft:\")) {\r\n                piiIdentifier.incrementFeature(desc.identifier.toLowerCase());\r\n              } else {\r\n                piiIdentifier.incrementFeature(\"(no override identifier)\");\r\n              }\r\n\r\n              if (desc.category) {\r\n                if (desc.category.startsWith(\"minecraft:\") || desc.category.indexOf(\":\") <= 0) {\r\n                  piiCategory.incrementFeature(desc.category);\r\n                }\r\n              }\r\n            } else {\r\n              piiCategory.incrementFeature(\"(item type without category)\");\r\n            }\r\n\r\n            const fv = bpItemType.getFormatVersion();\r\n\r\n            if (!bpItemType || !bpItemType.formatVersion || !fv) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(InfoItemType.error, this.id, 100, \"Item Type does not define a format_version.\", pi)\r\n              );\r\n            } else {\r\n              if (fv.length > 0 && fv[0] < parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionMajorVersionLowerThanCurrent,\r\n                    \"Behavior pack Item Type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower major version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[0] > parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionMajorVersionHigherThanCurrent,\r\n                    \"Behavior pack Item Type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher major version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[1] < parseInt(verSplit[1]) - 1) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionMinorVersionLowerThanCurrent,\r\n                    \"Behavior pack Item Type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower minor version number compared to the current version or the previous current minor version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[1] > parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionMinorVersionHigherThanCurrent,\r\n                    \"Behavior pack Item Type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher minor version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[2] < parseInt(verSplit[2])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionPatchVersionLowerThanCurrent,\r\n                    \"Behavior pack item type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower patch version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[2] > parseInt(verSplit[2]) && fv[1] === parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionPatchVersionHigherThanCurrent,\r\n                    \"Behavior pack item type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher patch version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case ItemTypeUpdate.UpdateFormatVersionToLatest:\r\n        const localResults = await this.updateFormatVersionToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [ItemTypeUpdate.UpdateFormatVersionToLatest];\r\n  }\r\n\r\n  async updateFormatVersionToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      results.push(\r\n        new ProjectUpdateResult(UpdateResultType.internalProcessingError, this.id, 199, \"Could not retrieve version.\")\r\n      );\r\n\r\n      return results;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          200,\r\n          \"Could not retrieve latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return results;\r\n    }\r\n\r\n    const major = parseInt(verSplit[0]);\r\n    const minor = parseInt(verSplit[1]);\r\n    const patch = parseInt(verSplit[2]);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const wtManifest = await ItemTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (wtManifest) {\r\n            const mev = wtManifest.formatVersion;\r\n\r\n            if (mev) {\r\n              const mevY = mev?.split(\".\");\r\n\r\n              if (\r\n                mevY &&\r\n                (mevY.length < 3 ||\r\n                  mevY.length > 4 ||\r\n                  parseInt(mevY[0]) !== major ||\r\n                  parseInt(mevY[1]) !== minor ||\r\n                  parseInt(mevY[2]) !== patch)\r\n              ) {\r\n                wtManifest.setBehaviorPackFormatVersion(major + \".\" + minor + \".\" + patch);\r\n                wtManifest.persist();\r\n\r\n                results.push(\r\n                  new ProjectUpdateResult(\r\n                    UpdateResultType.updatedFile,\r\n                    this.id,\r\n                    200,\r\n                    \"Updated behavior pack Item Type manager format_version to '\" +\r\n                      major +\r\n                      \".\" +\r\n                      minor +\r\n                      \".\" +\r\n                      patch +\r\n                      \"'.\",\r\n                    pi,\r\n                    ver\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { ProjectItemStorageType, ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport { MaxItemTypes } from \"../app/IProjectItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\n\r\nexport enum SharingInfoGeneratorTest {\r\n  requiresCustomCapabilities = 100,\r\n  hasStrongLanguageContent = 101,\r\n}\r\n\r\nconst TopicTestIdBase = 500;\r\n\r\nconst UnsupportedForSharingTypes = [\r\n  ProjectItemType.jigsawProcessorList,\r\n  ProjectItemType.jigsawStructure,\r\n  ProjectItemType.jigsawStructureSet,\r\n  ProjectItemType.jigsawTemplatePool,\r\n  ProjectItemType.aimAssistPresetJson,\r\n  ProjectItemType.aimAssistCategoryJson,\r\n  ProjectItemType.behaviorTreeJson,\r\n  ProjectItemType.spawnGroupJson,\r\n];\r\n\r\nconst UnsupportedForSharingTypesSet = new Set(UnsupportedForSharingTypes);\r\n\r\n/**\r\n * Validates content for sharing best practices and platform compatibility.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/sharing.form.json} for topic definitions\r\n */\r\nexport default class SharingInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"SHARING\";\r\n  title = \"Sharing Best Practices\";\r\n  canAlwaysProcess = true;\r\n\r\n  getTopicData(topicId: number) {\r\n    if (topicId >= TopicTestIdBase) {\r\n      return {\r\n        title: ProjectItemUtilities.getDescriptionForType(topicId - TopicTestIdBase),\r\n      };\r\n    }\r\n\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const itemsByType: { [index: number]: ProjectInfoItem } = {};\r\n    const lineSizeCounts: number[] = [];\r\n\r\n    for (let i = 0; i < MaxItemTypes; i++) {\r\n      lineSizeCounts[i] = 0;\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n      let projInfoItem = undefined;\r\n\r\n      if (pi.storageType === ProjectItemStorageType.singleFile) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          /*\r\n          let strongLanguageContent = await BasicValidators.hasStrongLanguageContent(pi.availableFile);\r\n          if (strongLanguageContent) {\r\n            projInfoItem = new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              SharingInfoGeneratorTest.hasStrongLanguageContent,\r\n              `Contains strong language content: ` + strongLanguageContent,\r\n              pi\r\n            );\r\n            itemsByType[pi.itemType] = projInfoItem;\r\n            items.push(projInfoItem);\r\n          }*/\r\n        }\r\n      }\r\n\r\n      if (UnsupportedForSharingTypesSet.has(pi.itemType)) {\r\n        projInfoItem = new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          TopicTestIdBase + pi.itemType,\r\n          ProjectItemUtilities.getDescriptionForType(pi.itemType) +\r\n            \" is not supported for sharing - probably because this item is still an experimental feature.\",\r\n          pi\r\n        );\r\n        itemsByType[pi.itemType] = projInfoItem;\r\n        items.push(projInfoItem);\r\n      } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpManifest = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifest) {\r\n            await bpManifest.load();\r\n\r\n            if (bpManifest && bpManifest.definition && bpManifest.definition.capabilities) {\r\n              projInfoItem = new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                SharingInfoGeneratorTest.requiresCustomCapabilities,\r\n                `Declares a custom capabilities requirement, which is not recommended for sharing.`,\r\n                pi,\r\n                JSON.stringify(bpManifest.definition.capabilities, null, 2)\r\n              );\r\n              itemsByType[pi.itemType] = projInfoItem;\r\n              items.push(projInfoItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport Project from \"../../app/Project\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\nimport Database from \"../../minecraft/Database\";\r\nimport ContentIndex from \"../../core/ContentIndex\";\r\n\r\nexport enum CheckVanillaDuplicatesInfoGeneratorTest {\r\n  completeVanillaCopy = 101,\r\n  partialVanillaCopy = 102,\r\n}\r\n\r\n// Files that are allowed to be complete copies of vanilla\r\nconst ALLOWLISTED_FILES = [\"texts/languages.json\"];\r\n\r\n// Files that are restricted from being partial copies\r\nconst RESTRICTED_FILES = [\r\n  \"/ui/\",\r\n  \"/materials/\",\r\n  \"models/mobs.json\",\r\n  \"sounds/sound_definitions.json\",\r\n  \"textures/item_texture.json\",\r\n  \"textures/terrain_texture.json\",\r\n  \"blocks.json\",\r\n];\r\n\r\n// Extensions to check for partial copies\r\nconst EXTENSIONS = [\".json\", \".material\"];\r\n\r\n// Message suffix matching C# implementation\r\nconst RESOURCE_PACK_SUFFIX = \"Vanilla files can be seen at https://aka.ms/resourcepacktemplate.\";\r\n\r\n/***********\r\n * Generator for Checking Vanilla Duplicates\r\n *\r\n * Will check:\r\n *  * Complete copies of vanilla files\r\n *  * Partial copies of vanilla files (for restricted files)\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/vandupes.form.json} for topic definitions\r\n */\r\n\r\nexport default class CheckVanillaDuplicatesInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"VANDUPES\";\r\n  title = \"Vanilla Duplicates\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.completeVanillaCopy = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckVanillaDuplicatesInfoGeneratorTest.completeVanillaCopy\r\n    );\r\n\r\n    info.partialVanillaCopy = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckVanillaDuplicatesInfoGeneratorTest.partialVanillaCopy\r\n    );\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    // Get the hash catalog from the content index\r\n    const hashCatalog = contentIndex.hashCatalog;\r\n\r\n    // Load vanilla hash catalog for comparison\r\n    await Database.loadReleaseVanillaInfoHashes();\r\n\r\n    const projItems = project.getItemsCopy();\r\n\r\n    for (const item of projItems) {\r\n      const itemPath = item.projectPath || \"\";\r\n\r\n      if (ALLOWLISTED_FILES.some((allowedFile) => itemPath.includes(allowedFile))) {\r\n        continue;\r\n      }\r\n\r\n      await item.ensureStorage();\r\n\r\n      if (!item.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      // Find hashes for this file in the catalog\r\n      const fileHashes = Object.entries(hashCatalog).filter(([hash, details]) => details.filePath === item.projectPath);\r\n\r\n      // Check for complete copy of vanilla file (file with empty propertyName)\r\n      const completeFileHash = fileHashes.find(([hash, details]) => details.propertyName === \"\");\r\n      if (completeFileHash) {\r\n        const completeHashResult = await this.checkCompleteVanillaCopy(completeFileHash[0], item);\r\n        if (completeHashResult) {\r\n          items.push(completeHashResult);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      // Check for partial copies (properties with non-empty propertyName)\r\n      if (this.isRestrictedFile(itemPath) && this.hasRestrictedExtension(item.primaryFile.fullPath)) {\r\n        const propertyHashes = fileHashes.filter(([hash, details]) => details.propertyName !== \"\");\r\n        const partialHashResults = await this.checkPartialVanillaCopy(propertyHashes, item);\r\n        items.push(...partialHashResults);\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  private isRestrictedFile(filePath: string): boolean {\r\n    return RESTRICTED_FILES.some((restrictedFile) => filePath.includes(restrictedFile));\r\n  }\r\n\r\n  private hasRestrictedExtension(filePath: string): boolean {\r\n    // Extract file extension from path\r\n    const extension = \".\" + filePath.split(\".\").pop()?.toLowerCase() || \"\";\r\n    return EXTENSIONS.includes(extension);\r\n  }\r\n\r\n  private async checkCompleteVanillaCopy(fileHash: string, item: ProjectItem): Promise<ProjectInfoItem | null> {\r\n    // Check if this hash exists in the vanilla hash catalog\r\n\r\n    if (!Database.releaseVanillaContentHashes) {\r\n      return null;\r\n    }\r\n\r\n    const vanillaDetails = Database.releaseVanillaContentHashes[fileHash];\r\n    if (vanillaDetails && vanillaDetails.propertyName === \"\") {\r\n      // This is a complete file match\r\n      return new ProjectInfoItem(\r\n        InfoItemType.warning,\r\n        this.id,\r\n        CheckVanillaDuplicatesInfoGeneratorTest.completeVanillaCopy,\r\n        `Complete copy of a vanilla file [${vanillaDetails.fileName}]. ${RESOURCE_PACK_SUFFIX}`,\r\n        item,\r\n        item.name\r\n      );\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private async checkPartialVanillaCopy(\r\n    propertyHashes: [string, any][],\r\n    item: ProjectItem\r\n  ): Promise<ProjectInfoItem[]> {\r\n    const results: ProjectInfoItem[] = [];\r\n\r\n    if (!Database.releaseVanillaContentHashes) {\r\n      return results;\r\n    }\r\n\r\n    try {\r\n      // Check each property hash from the catalog\r\n      for (const [hash, details] of propertyHashes) {\r\n        // Check if this property hash exists in the vanilla hash catalog\r\n        const vanillaDetails = Database.releaseVanillaContentHashes[hash];\r\n\r\n        if (\r\n          vanillaDetails &&\r\n          vanillaDetails.propertyName !== \"\" &&\r\n          item.name.toLowerCase() === vanillaDetails.fileName.toLowerCase()\r\n        ) {\r\n          results.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckVanillaDuplicatesInfoGeneratorTest.partialVanillaCopy,\r\n              `Partial copy of a vanilla file [${item.name}] at property [${details.propertyName}]. ${RESOURCE_PACK_SUFFIX}`,\r\n              item,\r\n              details.propertyName\r\n            )\r\n          );\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error checking partial vanilla copy:\", error);\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport IFile from \"../../storage/IFile\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport IProjectFileInfoGenerator from \"../IProjectFileInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\n\r\nenum CheckNoBOMGeneratorTest {\r\n  NoByteOrderMarkAllowedInJsonFile = 101,\r\n}\r\n\r\n/**********\r\n * Generator that generates error results if Byte Order Marks are found within .json files\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/nobom.form.json} for topic definitions\r\n *********/\r\nexport default class CheckNoBOMGenerator implements IProjectFileInfoGenerator {\r\n  id: string = \"NOBOM\";\r\n  title: string = \"No Byte Order Mark allowed in json file.\";\r\n  canAlwaysProcess = true;\r\n\r\n  private severity = InfoItemType.error;\r\n\r\n  generate(_project: Project, projectFile: IFile): Promise<ProjectInfoItem[]> {\r\n    const results: ProjectInfoItem[] = [];\r\n\r\n    if (StorageUtilities.isJsonFile(projectFile) && this.hasByteOrderMark(projectFile)) {\r\n      results.push(this.getNewBOMResult(projectFile));\r\n    }\r\n\r\n    return Promise.resolve(results);\r\n  }\r\n\r\n  summarize(): void {}\r\n\r\n  private hasByteOrderMark(file: IFile) {\r\n    const bytes = StorageUtilities.getContentsAsBinary(file);\r\n    const hasBOM = StorageUtilities.hasUTF8ByteOrderMark(bytes);\r\n\r\n    return hasBOM;\r\n  }\r\n\r\n  private getNewBOMResult(file: IFile) {\r\n    return new ProjectInfoItem(\r\n      this.severity,\r\n      this.id,\r\n      CheckNoBOMGeneratorTest.NoByteOrderMarkAllowedInJsonFile,\r\n      `Byte Order Marks found in file: ${file.name}`\r\n    );\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\nimport CommandStructure from \"../app/CommandStructure\";\r\nimport CommandRegistry from \"../app/CommandRegistry\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\n\r\nexport enum MCFunctionInfoGeneratorTest {\r\n  invalidCommandSyntax = 102,\r\n  lineBeginsWithSlash = 103,\r\n}\r\n\r\n/***********\r\n * Generator for validating MCFunction Files\r\n *\r\n * Will ensure:\r\n *  * command syntax is correct\r\n *  * no slashes are present before commands\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/mcfunction.form.json} for topic definitions\r\n */\r\n\r\nexport default class MCFunctionInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"MCFUNCTION\";\r\n  title = \"MC Function Validation\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.invalidCommandSyntaxCount = infoSet.getSummedDataValue(\r\n      this.id,\r\n      MCFunctionInfoGeneratorTest.invalidCommandSyntax\r\n    );\r\n\r\n    info.linesWithSlashCount = infoSet.getSummedDataValue(this.id, MCFunctionInfoGeneratorTest.lineBeginsWithSlash);\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const projItems = project.getItemsCopy();\r\n\r\n    for (const item of projItems) {\r\n      if (item.itemType !== ProjectItemType.MCFunction) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n      if (!item.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.primaryFile.isContentLoaded) {\r\n        await item.primaryFile.loadContent();\r\n      }\r\n\r\n      const content = item.primaryFile.content;\r\n\r\n      if (!content || typeof content !== \"string\") {\r\n        continue;\r\n      }\r\n\r\n      const lines = content\r\n        .trim()\r\n        .split(/\\r?\\n/)\r\n        .filter((line) => line.trim() !== \"\");\r\n\r\n      const commands = lines.map(CommandStructure.parse);\r\n\r\n      items.push(...this.getNewLineBeginsWithSlashesResult(lines, item));\r\n      items.push(...this.getCommandSyntaxResult(commands, item));\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  private getNewLineBeginsWithSlashesResult(lines: string[], item: ProjectItem): ProjectInfoItem[] {\r\n    const results = [];\r\n    for (const line of lines) {\r\n      if (line.startsWith(\"/\")) {\r\n        results.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            MCFunctionInfoGeneratorTest.lineBeginsWithSlash,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              MCFunctionInfoGeneratorTest,\r\n              MCFunctionInfoGeneratorTest.lineBeginsWithSlash\r\n            ),\r\n            item,\r\n            `Relevant line: ${line}`\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private getCommandSyntaxResult(commands: CommandStructure[], item: ProjectItem): ProjectInfoItem[] {\r\n    const results = [];\r\n\r\n    for (const command of commands) {\r\n      if (\r\n        !command.isNamespaced &&\r\n        !CommandRegistry.isMinecraftBuiltInCommand(command.fullName) &&\r\n        !CommandRegistry.isAddOnBlockedCommand(command.fullName)\r\n      ) {\r\n        results.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            MCFunctionInfoGeneratorTest.invalidCommandSyntax,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              MCFunctionInfoGeneratorTest,\r\n              MCFunctionInfoGeneratorTest.invalidCommandSyntax\r\n            ),\r\n            item,\r\n            `${command.fullName} ${command.commandArguments.join(\" \")}`\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "import * as exifrModule from \"exifr\";\r\n// Handle CJS/ESM interop: esbuild wraps CJS default export, while ts-node uses named exports directly\r\nconst Exifr = (exifrModule as any).Exifr || (exifrModule as any).default?.Exifr;\r\nimport IFile from \"./IFile\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\n/*\r\n  Parses an image file, returning an any object with various metadata such as width and height\r\n\r\n  available data is based on image format, see Exifr docs for info\r\n*/\r\nexport async function parseImageMetadata(file: IFile): Promise<any | null> {\r\n  try {\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n    const imageReader = new Exifr();\r\n    const fileData = StorageUtilities.getContentsAsBinary(file);\r\n\r\n    if (!fileData) {\r\n      return null;\r\n    }\r\n\r\n    return await imageReader.read(fileData).then(() => imageReader.parse());\r\n  } catch (error) {\r\n    Log.verbose(\"Error parsing image metadata: \" + error);\r\n    return null;\r\n  }\r\n}\r\n\r\nexport function isPackIcon(file?: IFile | null): boolean {\r\n  return !!file && file.name.includes(\"pack_icon\") && file.name.endsWith(\".png\");\r\n}\r\n\r\nexport function isWorldIcon(file?: IFile): boolean {\r\n  return !!file && file.name.includes(\"world_icon\") && file.name.endsWith(\".jpeg\");\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport Pack, { PackType } from \"../../minecraft/Pack\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport { isPackIcon, parseImageMetadata } from \"../../storage/ImageUtilites\";\r\n\r\nenum CheckPacksIconsGeneratorTest {\r\n  NoIconFound = 101,\r\n  MultipleIconsFound = 102,\r\n  IconNotValidImage = 103,\r\n  IconNotValidSize = 104,\r\n}\r\n\r\nconst IconMaxWidth = 256;\r\nconst IconMinWidth = 2;\r\n\r\n/***********\r\n * Generator for validating Pack Icons\r\n *\r\n * Will ensure:\r\n *  * exactly 1 icon per pack\r\n *  * icon is a valid .png\r\n *  * icon is square\r\n *  * icon is within size limits\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/cpackicon.form.json} for topic definitions\r\n */\r\nexport default class CheckPackIconsGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CPACKICON\";\r\n  title: string = \"Pack Icon\";\r\n  canAlwaysProcess = true;\r\n\r\n  private severity = InfoItemType.error;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const results: ProjectInfoItem[] = [];\r\n\r\n    if (project.isVanillaEditSession) {\r\n      return results;\r\n    }\r\n\r\n    for (const pack of project.packs) {\r\n      if (requiresPackIcon(pack)) {\r\n        const result = await this.getResultForPack(pack);\r\n        if (result) {\r\n          results.push(result);\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  summarize(): void {}\r\n\r\n  private async getResultForPack(pack: Pack): Promise<ProjectInfoItem | null> {\r\n    const icons = await pack.getFiles(isPackIcon);\r\n\r\n    if (icons.length === 0) {\r\n      const message = `pack_icon image file not found for ${pack.name}. It must use the .png extension.`;\r\n      return this.createResult(CheckPacksIconsGeneratorTest.NoIconFound, message);\r\n    } else if (icons.length > 1) {\r\n      const message = `Found multiple pack icon files for ${pack.name}, there should be only one.`;\r\n      return this.createResult(CheckPacksIconsGeneratorTest.MultipleIconsFound, message);\r\n    }\r\n\r\n    const file = icons[0];\r\n    const image = await parseImageMetadata(file);\r\n\r\n    if (!image?.ImageWidth || !image?.ImageHeight) {\r\n      const message = `Pack Image (${file.name}) is not valid`;\r\n      return this.createResult(CheckPacksIconsGeneratorTest.IconNotValidImage, message);\r\n    }\r\n\r\n    if (this.isValidSize(image.ImageWidth, image.ImageHeight)) {\r\n      const message = `pack_icon must be square with size 2, 4, 8, 16, 32, 64, 128, or 256. Found [${image.ImageWidth} x ${image.ImageHeight}] on ${file.name}`;\r\n      return this.createResult(CheckPacksIconsGeneratorTest.IconNotValidSize, message);\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private createResult(test: CheckPacksIconsGeneratorTest, message: string) {\r\n    return new ProjectInfoItem(this.severity, this.id, test, message);\r\n  }\r\n\r\n  private isValidSize(width: number, height: number) {\r\n    return width !== height || width < IconMinWidth || width > IconMaxWidth || (width & (width - 1)) !== 0;\r\n  }\r\n}\r\nfunction requiresPackIcon(pack: Pack): pack is Pack {\r\n  return pack.packType !== PackType.skin && pack.packType !== PackType.design;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n  Collects a AsyncIterable into an array with an optional filter predicate\r\n*/\r\nexport async function filterAsync<TItem>(\r\n  iterable: AsyncIterable<TItem>,\r\n  predicate?: (item: TItem) => boolean\r\n): Promise<TItem[]> {\r\n  const results: TItem[] = [];\r\n  for await (const item of iterable) {\r\n    if (predicate && predicate(item)) {\r\n      results.push(item);\r\n    }\r\n  }\r\n\r\n  return results;\r\n}\r\n", "import { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport Project from \"../../app/Project\";\r\nimport IFolder from \"../../storage/IFolder\";\r\nimport { isWorldIcon, parseImageMetadata } from \"../../storage/ImageUtilites\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport { filterAsync } from \"../../core/async/AsyncUtilities\";\r\nimport Log from \"../../core/Log\";\r\n\r\nconst DefaultEduImageWidth = 480;\r\nconst DefaultEduImageHeight = 270;\r\nconst DefaultBedrockImageWidth = 800;\r\nconst DefaultBedrockImageHeight = 450;\r\n\r\nenum CheckWorldIconsGeneratorTest {\r\n  NoIconFound = 101,\r\n  MultipleIconsFound = 102,\r\n  IconNotValidImage = 103,\r\n  IconNotValidSize = 104,\r\n}\r\n\r\n/*\r\n * Generator for validating World Icons\r\n *\r\n * Will ensure:\r\n *  * exactly 1 icon per world folder (folders with a world manifest)\r\n *  * icon is a valid .jpeg\r\n *  * icon is the correct size\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/cwi.form.json} for topic definitions\r\n */\r\nexport default class CheckWorldIconsGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CWI\";\r\n  title: string = \"World Icons\";\r\n  canAlwaysProcess = true;\r\n\r\n  private severity = InfoItemType.error;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    const isEDUOffer = itemsCopy.find((item) => item.itemType === ProjectItemType.educationJson) !== undefined;\r\n\r\n    const worldFolders = [];\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        const folder = projectItem.getFolder();\r\n\r\n        if (folder) {\r\n          worldFolders.push(folder);\r\n        }\r\n      }\r\n    }\r\n\r\n    const results = [];\r\n    for (const folder of worldFolders) {\r\n      Log.assert(folder !== null, \"Manifest file cannot exist without a folder\");\r\n      const resultForFolder = await this.validateWorldIconForFolder(folder, isEDUOffer);\r\n      results.push(...resultForFolder);\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private async validateWorldIconForFolder(folder: IFolder, isEDUOffer: boolean) {\r\n    const files = await filterAsync(folder.allFiles, isWorldIcon);\r\n\r\n    if (files.length === 0) {\r\n      const message = `No World Icon found for ${folder.getFolderRelativePath}.`;\r\n      return [this.createResult(CheckWorldIconsGeneratorTest.NoIconFound, message)];\r\n    } else if (files.length > 1) {\r\n      const message = `Too many World Icons found for ${folder.getFolderRelativePath}. ${files.length} icons found, expected: 1`;\r\n      return [this.createResult(CheckWorldIconsGeneratorTest.MultipleIconsFound, message)];\r\n    }\r\n\r\n    const file = files[0];\r\n    const image = await parseImageMetadata(file);\r\n\r\n    if (!image) {\r\n      const message = `Image (${file.name}) is not valid.`;\r\n      return [this.createResult(CheckWorldIconsGeneratorTest.IconNotValidImage, message)];\r\n    }\r\n\r\n    const isSizeCorrect = isEDUOffer ? isSizeCorrectForEDU : isSizeCorrectForBedrock;\r\n\r\n    if (!isSizeCorrect({ width: image.ImageWidth, height: image.ImageHeight })) {\r\n      return [this.createResult(CheckWorldIconsGeneratorTest.IconNotValidSize, `Image (${file.name}) is not valid.`)];\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  private createResult(test: CheckWorldIconsGeneratorTest, message: string) {\r\n    return new ProjectInfoItem(this.severity, this.id, test, message);\r\n  }\r\n\r\n  summarize(): void {}\r\n}\r\n\r\nfunction isSizeCorrectForBedrock(size: { width: number; height: number }) {\r\n  return size.width === DefaultBedrockImageWidth && size.height === DefaultBedrockImageHeight;\r\n}\r\n\r\nfunction isSizeCorrectForEDU(size: { width: number; height: number }) {\r\n  const isEDUSize = size.width === DefaultEduImageWidth && size.height === DefaultEduImageHeight;\r\n  return isEDUSize || isSizeCorrectForBedrock(size);\r\n}\r\n", "export var util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"bigint\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\nexport default errorMap;\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n    overrideErrorMap = map;\n}\nexport function getErrorMap() {\n    return overrideErrorMap;\n}\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n    const overrideMap = getErrorMap();\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap, // contextual error map is first priority\n            ctx.schemaErrorMap, // then schema-bound map if available\n            overrideMap, // then global override map\n            overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nexport const INVALID = Object.freeze({\n    status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "export {};\n", "export var errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nexport class ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return isValid(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nexport class ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"jwt\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cidr\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nexport class ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nexport class ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexport class ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexport class ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nexport class ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!isValid(base))\n                        return INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexport class ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexport class ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n    object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\nimport { z } from \"zod\";\r\n\r\nexport interface ISoundDefinitionCatalog {\r\n  format_version: string;\r\n  sound_definitions: { [name: string]: ISoundDefinition };\r\n\r\n  // note there is a format that is just:\r\n  // {\r\n  //   \"ns:mysound.foo\" : {\r\n  //     \"category\": \"foo\",\r\n  //     \"sounds\": [\r\n  //        \"name\": \"sounds/foo\"\r\n  //     ]\r\n  //   }\r\n  // }\r\n}\r\n\r\nexport interface ISoundDefinition {\r\n  category?: string;\r\n  __use_legacy_max_distance?: string | boolean; // when it's a string, it's boolean values in a string: \"true\", \"false\"\r\n  max_distance?: number;\r\n  min_distance?: number;\r\n  sounds: (ISoundReference | string)[];\r\n}\r\n\r\nexport interface ISoundReference {\r\n  name: string;\r\n  is3D?: boolean;\r\n  stream?: boolean;\r\n  volume?: number;\r\n  weight?: number;\r\n  pitch?: number;\r\n  load_on_low_memory?: boolean;\r\n}\r\n\r\n// SoundReference zod schema\r\nconst SoundReferenceSchema = z.object({\r\n  name: z.string(),\r\n  is3D: z.boolean().optional(),\r\n  stream: z.boolean().optional(),\r\n  volume: z.number().optional(),\r\n  weight: z.number().optional(),\r\n  pitch: z.number().optional(),\r\n  load_on_low_memory: z.boolean().optional(),\r\n});\r\n\r\n// SoundDefinition zod schema\r\nconst SoundDefinitionSchema = z.object({\r\n  category: z.string().optional(),\r\n  __use_legacy_max_distance: z.union([z.literal(\"true\"), z.literal(\"false\"), z.boolean()]).optional(),\r\n  max_distance: z.number().optional().nullable(),\r\n  min_distance: z.number().optional().nullable(),\r\n  sounds: z.array(z.union([z.string(), SoundReferenceSchema])),\r\n});\r\n\r\n// Catalog w/ format_version zod schema\r\nconst CatalogWithFormatVersionSchema = z.object({\r\n  format_version: z.string(),\r\n  sound_definitions: z.record(z.string(), SoundDefinitionSchema),\r\n});\r\n\r\n// Flat Catalog zod Schema\r\nconst FlatCatalogEntrySchema = z.object({\r\n  sounds: z.array(\r\n    z.union([\r\n      z.string(),\r\n      z.object({\r\n        name: z.string(),\r\n      }),\r\n    ])\r\n  ),\r\n});\r\n\r\n// Catalog w/o format_version\r\nconst CatalogWithoutFormatVersionSchema = z.record(z.string(), FlatCatalogEntrySchema);\r\n\r\n// Union of both forms for runtime validation\r\nexport const SoundDefinitionCatalogSchema = z.union([\r\n  CatalogWithFormatVersionSchema,\r\n  CatalogWithoutFormatVersionSchema,\r\n]);\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport ProjectInfoUtilities from \"../ProjectInfoUtilities\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport Project from \"../../app/Project\";\r\nimport { SoundDefinitionCatalogSchema } from \"../../minecraft/ISoundDefinitionCatalog\";\r\nimport { ZodIssueCode } from \"zod\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\n\r\nexport enum SoundsDefinitionInfoGeneratorTest {\r\n  multipleSoundsDefinitionManifests = 101,\r\n  invalidSoundsDefinitionManifest = 102,\r\n  soundsDefinitionManifestInvalidJson = 103,\r\n  foundALooseSoundDefinition = 104,\r\n}\r\n\r\n/***********\r\n * Generator for validating Sounds Definition Manifest Files\r\n *\r\n * Will ensure:\r\n *  * only one Sounds Definition Manifest exists\r\n *  * Sounds Definition Manifest is valid JSON\r\n *  * Sounds Definition Manifest is formatted correctly\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/sndsdef.form.json} for topic definitions\r\n */\r\n\r\nexport default class SoundsDefinitionInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"SNDSDEF\";\r\n  title = \"Sound Definitions\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.multipleSoundsManifests = infoSet.getSummedDataValue(\r\n      this.id,\r\n      SoundsDefinitionInfoGeneratorTest.multipleSoundsDefinitionManifests\r\n    );\r\n\r\n    info.soundsDefinitionManifestFormatIsValid = infoSet.getSummedDataValue(\r\n      this.id,\r\n      SoundsDefinitionInfoGeneratorTest.invalidSoundsDefinitionManifest\r\n    );\r\n\r\n    info.soundsDefinitionManifestIsNotValidJson = infoSet.getSummedDataValue(\r\n      this.id,\r\n      SoundsDefinitionInfoGeneratorTest.soundsDefinitionManifestInvalidJson\r\n    );\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const projItems = project.getItemsCopy();\r\n\r\n    const packsWithSoundManifests: { [name: string]: boolean } = {};\r\n\r\n    for (const item of projItems) {\r\n      if (item.itemType !== ProjectItemType.soundDefinitionCatalog && item.itemType) {\r\n        continue;\r\n      }\r\n\r\n      const pack = await item.getPack();\r\n\r\n      if (!pack || !pack.projectItem.projectPath) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            SoundsDefinitionInfoGeneratorTest.foundALooseSoundDefinition,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              SoundsDefinitionInfoGeneratorTest,\r\n              SoundsDefinitionInfoGeneratorTest.foundALooseSoundDefinition\r\n            ),\r\n            item\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n\r\n      if (packsWithSoundManifests[pack.projectItem.projectPath]) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            SoundsDefinitionInfoGeneratorTest.multipleSoundsDefinitionManifests,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              SoundsDefinitionInfoGeneratorTest,\r\n              SoundsDefinitionInfoGeneratorTest.multipleSoundsDefinitionManifests\r\n            ),\r\n            item\r\n          )\r\n        );\r\n\r\n        continue;\r\n      } else {\r\n        packsWithSoundManifests[pack.projectItem.projectPath] = true;\r\n      }\r\n\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n\r\n      if (!item.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.primaryFile.isContentLoaded) {\r\n        await item.primaryFile.loadContent();\r\n      }\r\n\r\n      const content = item.primaryFile.content;\r\n\r\n      if (!content || typeof content !== \"string\") {\r\n        continue;\r\n      }\r\n\r\n      const parsedContent: unknown = StorageUtilities.getJsonObject(item.primaryFile);\r\n      if (!parsedContent) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            SoundsDefinitionInfoGeneratorTest.soundsDefinitionManifestInvalidJson,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              SoundsDefinitionInfoGeneratorTest,\r\n              SoundsDefinitionInfoGeneratorTest.soundsDefinitionManifestInvalidJson\r\n            ),\r\n            item\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n\r\n      items.push(...this.getIsManifestValidResult(parsedContent));\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  // Uses a union to check for both possible versions of a Sound Manifest (per comment in ISoundDefinitionCatalog)\r\n  private getIsManifestValidResult(fileContent: unknown): ProjectInfoItem[] {\r\n    const results: ProjectInfoItem[] = [];\r\n    const parseResult = SoundDefinitionCatalogSchema.safeParse(fileContent);\r\n\r\n    if (!parseResult.success) {\r\n      const parsedErrors: string[] = [];\r\n      for (const issue of parseResult.error.issues) {\r\n        if (issue.code === ZodIssueCode.invalid_union) {\r\n          for (const e of issue.unionErrors) {\r\n            for (const i of e.issues) {\r\n              parsedErrors.push(`${i.message} at ${i.path.join(\"/\")}`);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      results.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          SoundsDefinitionInfoGeneratorTest.invalidSoundsDefinitionManifest,\r\n          `${ProjectInfoUtilities.getTitleFromEnum(\r\n            SoundsDefinitionInfoGeneratorTest,\r\n            SoundsDefinitionInfoGeneratorTest.invalidSoundsDefinitionManifest\r\n          )}: ${parsedErrors.join(\", \")}`\r\n        )\r\n      );\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport esprima from \"esprima-next\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Log from \"../core/Log\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\n\r\nexport const CommonTerms = [\r\n  \"undefined\",\r\n  \"type\",\r\n  \"name\",\r\n  \"error\",\r\n  \"equals\",\r\n  \"value\",\r\n  \"length\",\r\n  \"index\",\r\n  \"String\",\r\n  \"number\",\r\n  \"width\",\r\n  \"height\",\r\n  \"count\",\r\n  \"event\",\r\n  \"string\",\r\n  \"text\",\r\n  \"object\",\r\n];\r\n\r\nexport const CommonTermsSet = new Set(CommonTerms);\r\n\r\nexport enum ScriptInfoGeneratorTest {\r\n  apisUsed = 101,\r\n}\r\n\r\nexport interface IScriptTokenInfo {}\r\n\r\n/**\r\n * Analyzes and aggregates information about script API usage.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/script.form.json} for topic definitions\r\n */\r\nexport default class ScriptInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"SCRIPT\";\r\n  title = \"Script\";\r\n  canAlwaysProcess = true;\r\n  minecraftTokens: { [name: string]: IScriptTokenInfo } = {};\r\n  generatedTokens = false;\r\n\r\n  async _generateTokens() {\r\n    await Database.loadStable20ScriptTypes();\r\n    const typeDefs = Database.stable20TypeDefs;\r\n\r\n    if (typeDefs) {\r\n      for (const typeDef of typeDefs.typeDefs) {\r\n        const typeDefContent = typeDef.content.join(\"\\n\");\r\n\r\n        let name = typeDef.name;\r\n        this.minecraftTokens[name] = {\r\n          typeDef: typeDef,\r\n        };\r\n\r\n        const slashIndex = name.indexOf(\"/\");\r\n\r\n        if (slashIndex >= 0) {\r\n          this.minecraftTokens[name.substring(0, slashIndex)] = {\r\n            typeDef: typeDef,\r\n          };\r\n          this.minecraftTokens[name.substring(slashIndex + 1)] = {\r\n            typeDef: typeDef,\r\n          };\r\n        }\r\n\r\n        const tokens = this.getAllTokens(typeDefContent);\r\n\r\n        for (const tok of tokens) {\r\n          this.minecraftTokens[tok] = {\r\n            typeDef: typeDef,\r\n          };\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const scriptTokensPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      ScriptInfoGeneratorTest.apisUsed,\r\n      ProjectInfoUtilities.getTitleFromEnum(ScriptInfoGeneratorTest, ScriptInfoGeneratorTest.apisUsed)\r\n    );\r\n\r\n    items.push(scriptTokensPi);\r\n\r\n    if (!this.generatedTokens) {\r\n      await this._generateTokens();\r\n    }\r\n\r\n    await Database.loadStable20ScriptTypes();\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.js) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          if (!pi.primaryFile.isContentLoaded) {\r\n            await pi.primaryFile.loadContent();\r\n          }\r\n\r\n          const content = pi.primaryFile.content;\r\n\r\n          if (content && typeof content === \"string\") {\r\n            this.parseJsContent(scriptTokensPi, content);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  getAllTokens(content: string) {\r\n    const tokens: string[] = [];\r\n    const tokensSet = new Set<string>();\r\n\r\n    try {\r\n      const results = esprima.tokenize(content);\r\n\r\n      if (results) {\r\n        for (const token of results) {\r\n          if ((token.type === \"Identifier\" || token.type === \"String\") && token.value && token.value.length > 3) {\r\n            let tok = token.value.trim();\r\n\r\n            if (tok.startsWith(\"'\") && tok.endsWith(\"'\")) {\r\n              tok = tok.substring(1, tok.length - 1);\r\n            } else if (tok.startsWith(\"'\") && tok.endsWith(\"'\")) {\r\n              tok = tok.substring(1, tok.length - 1);\r\n            }\r\n\r\n            if (token.type === \"Identifier\" && tok !== \"from\" && !tokensSet.has(tok) && !CommonTermsSet.has(tok)) {\r\n              tokens.push(tok);\r\n              tokensSet.add(tok);\r\n            } else if (\r\n              token.type === \"String\" &&\r\n              !CommonTermsSet.has(tok) &&\r\n              (tok.startsWith(\"minecraft:\") || tok.startsWith(\"@minecraft\")) &&\r\n              !tokensSet.has(tok)\r\n            ) {\r\n              tokens.push(tok);\r\n              tokensSet.add(tok);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.debugAlert(\"JS parsing error:\" + e);\r\n    }\r\n\r\n    return tokens;\r\n  }\r\n\r\n  parseJsContent(scriptTokensPi: ProjectInfoItem, content: string) {\r\n    let tokens = this.getAllTokens(content);\r\n\r\n    for (const token of tokens) {\r\n      if (this.minecraftTokens[token] !== undefined) {\r\n        scriptTokensPi.incrementFeature(token);\r\n      }\r\n    }\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    const scriptItems = infoSet.getItems(this.id, ScriptInfoGeneratorTest.apisUsed);\r\n    info.apisUsed = [];\r\n    const apisUsedSet = new Set<string>();\r\n\r\n    for (const scriptItem of scriptItems) {\r\n      let scriptTokens = scriptItem.featureSets;\r\n\r\n      if (scriptTokens) {\r\n        for (const scriptToken in scriptTokens) {\r\n          if (!apisUsedSet.has(scriptToken) && !CommonTermsSet.has(scriptToken)) {\r\n            info.apisUsed.push(scriptToken);\r\n            apisUsedSet.add(scriptToken);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    info.apisUsed.sort();\r\n  }\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport SemanticVersion from \"../../core/versioning/SemanticVersion\";\r\nimport IFile from \"../../storage/IFile\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\n\r\n/* Older versions do not require a check */\r\nconst MinVersionForCheck = new SemanticVersion(1, 20, 60);\r\n/* Used to validate that particle identifier correctly contains a namespace. */\r\nconst NamespaceRegexPattern = /^\\\\w{2,}:\\\\w+/;\r\n\r\nenum CheckParticleIdentifier {\r\n  FailedToReadFile = 101,\r\n  FailedToReadVersion = 102,\r\n  InvalidParticleIdentifier = 103,\r\n}\r\n\r\n/*\r\n * Generator for validating Particle Identifier\r\n *\r\n * Will ensure particle json files have a particle identifier with a namespace if above version 1.2.6.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/cparti.form.json} for topic definitions\r\n */\r\nexport default class CheckParticleIdentifierGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CPARTI\";\r\n  title: string = \"Particle Identifiers\";\r\n  canAlwaysProcess = true;\r\n\r\n  private severity = InfoItemType.error;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const results: ProjectInfoItem[] = [];\r\n\r\n    const particleItems = project.getItemsByType(ProjectItemType.particleJson);\r\n\r\n    for (const particleItem of particleItems) {\r\n      if (!particleItem.isContentLoaded) {\r\n        await particleItem.loadContent();\r\n      }\r\n\r\n      if (particleItem.primaryFile) {\r\n        const packResults = await this.getResultsForFile(particleItem.primaryFile, particleItem);\r\n        results.push(...packResults);\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async getResultsForFile(file: IFile, particleItem: ProjectItem): Promise<ProjectInfoItem[]> {\r\n    const json = await StorageUtilities.getJsonObject(file);\r\n\r\n    if (!json) {\r\n      const message = `Failed to read file: ${file.name}`;\r\n      return [this.createResult(CheckParticleIdentifier.FailedToReadFile, message, particleItem)];\r\n    }\r\n\r\n    const version = SemanticVersion.parse(json.format_version);\r\n\r\n    if (!version) {\r\n      const message = `'format_version' expected in json in file: ${file.name}`;\r\n      return [this.createResult(CheckParticleIdentifier.FailedToReadVersion, message, particleItem)];\r\n    }\r\n\r\n    const checkNeeded = version.compareTo(MinVersionForCheck) >= 0;\r\n\r\n    if (!checkNeeded) {\r\n      return [];\r\n    }\r\n\r\n    const indentifier: string | undefined = json.particle_effect?.description?.identifier;\r\n\r\n    if (!isValidParticleIdentifier(indentifier)) {\r\n      const message = \"Invalid Particle Identifier. Particle identifier requires a namespace.\";\r\n      return [this.createResult(CheckParticleIdentifier.InvalidParticleIdentifier, message, particleItem)];\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  private createResult(test: CheckParticleIdentifier, message: string, particleItem: ProjectItem) {\r\n    return new ProjectInfoItem(this.severity, this.id, test, message, particleItem);\r\n  }\r\n\r\n  summarize(): void {}\r\n}\r\n\r\nfunction isValidParticleIdentifier(identifier?: string) {\r\n  return identifier && NamespaceRegexPattern.test(identifier);\r\n}\r\n", "export type Skin = {\r\n  localization_name: string;\r\n  geometry: string;\r\n  texture: string;\r\n  type: string;\r\n  cape?: string;\r\n  animations?: string;\r\n  enable_attachables?: boolean;\r\n};\r\n\r\nexport enum SkinModelTarget {\r\n  /* 'custom' is the model target used for Steve */\r\n  Custom = \"Custom\",\r\n  /* Model target for Alex uses */\r\n  CustomSlim = \"CustomSlim\",\r\n}\r\n\r\nconst GeometryNamesToModelTarget = new Map<string, SkinModelTarget>([\r\n  [\"geometry.humanoid.custom\", SkinModelTarget.Custom],\r\n  [\"geometry.humanoid.customSlim\", SkinModelTarget.CustomSlim],\r\n]);\r\nconst ValidSkinTextureResolutions = [\r\n  [64, 64],\r\n  [64, 32],\r\n  [128, 128],\r\n];\r\n\r\nconst ValidPurchaseTypes = new Set([\"free\", \"paid\"]);\r\n\r\nconst ValidCapeTextureSizes = [[64, 32]];\r\n\r\nexport function isValidSkinPurchaseType(type: string) {\r\n  return ValidPurchaseTypes.has(type);\r\n}\r\n\r\nexport function isValidGeometry(skin: Skin) {\r\n  return GeometryNamesToModelTarget.has(skin.geometry);\r\n}\r\n\r\nexport function getModelTargetGeometry(skin: Skin): SkinModelTarget | undefined {\r\n  return GeometryNamesToModelTarget.get(skin.geometry);\r\n}\r\n\r\nexport function isValidSkinModelTarget(modelTarget: [number, number]) {\r\n  return ValidSkinTextureResolutions.some((dim) => dim[0] === modelTarget[0] && dim[1] === modelTarget[1]);\r\n}\r\n\r\nexport function isValidCapeSize(size: [number, number]) {\r\n  return ValidCapeTextureSizes.some((dim) => dim[0] === size[0] && dim[1] === size[1]);\r\n}\r\n", "import ProjectItem from \"../../app/ProjectItem\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\n\r\nexport type TestDefinition = {\r\n  id: number;\r\n  title: string;\r\n  severity?: InfoItemType;\r\n  projectItem?: ProjectItem;\r\n  defaultMessage?: string;\r\n  generatorId?: string;\r\n};\r\n\r\nexport function resultFromTestWithMessage(\r\n  test: TestDefinition,\r\n  generatorId: string,\r\n  message?: string,\r\n  projectItem?: ProjectItem\r\n) {\r\n  return new ProjectInfoItem(\r\n    test.severity || InfoItemType.error,\r\n    generatorId,\r\n    test.id,\r\n    message ?? test.defaultMessage ?? test.title,\r\n    projectItem\r\n  );\r\n}\r\n\r\nexport function resultFromTest(\r\n  test: TestDefinition,\r\n  {\r\n    id,\r\n    message,\r\n    item,\r\n    data,\r\n  }: {\r\n    id?: string;\r\n    message?: string;\r\n    item?: ProjectItem;\r\n    data?: string | boolean | number | number[];\r\n  }\r\n) {\r\n  return new ProjectInfoItem(\r\n    test.severity || InfoItemType.error,\r\n    test.generatorId || id || \"\",\r\n    test.id,\r\n    message ?? test.defaultMessage ?? test.title,\r\n    item,\r\n    data\r\n  );\r\n}\r\n\r\n// Can be returned to show this check does apply to this case\r\nexport function notApplicable(): ProjectInfoItem[] {\r\n  return [];\r\n}\r\n\r\n// confirms a result has been returned and/or filters nulls in a way the compiler will understand\r\nexport function isResult(value: ProjectInfoItem | null | undefined): value is ProjectInfoItem {\r\n  return !!value;\r\n}\r\n\r\nexport function getTestTitleById(record: Record<string | number, TestDefinition>, testId: number) {\r\n  return Object.values(record).find((test) => test.id === testId)?.title || `Unknown Test: ${testId}`;\r\n}\r\n", "/**\r\n * JSONSchema Validator - Validates JavaScript objects using JSON Schemas\r\n *\t(http://www.json.com/json-schema-proposal/)\r\n * Licensed under AFL-2.1 OR BSD-3-Clause\r\nTo use the validator call the validate function with an instance object and an optional schema object.\r\nIf a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),\r\nthat schema will be used to validate and the schema parameter is not necessary (if both exist,\r\nboth validations will occur).\r\nThe validate method will return an array of validation errors. If there are no errors, then an\r\nempty list will be returned. A validation error will have two properties:\r\n\"property\" which indicates which property had the error\r\n\"message\" which indicates what the error was\r\n */\r\n(function (root, factory) {\r\n    if (typeof define === 'function' && define.amd) {\r\n        // AMD. Register as an anonymous module.\r\n        define([], function () {\r\n            return factory();\r\n        });\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        // Node. Does not work with strict CommonJS, but\r\n        // only CommonJS-like environments that support module.exports,\r\n        // like Node.\r\n        module.exports = factory();\r\n    } else {\r\n        // Browser globals\r\n        root.jsonSchema = factory();\r\n    }\r\n}(this, function () {// setup primitive classes to be JSON Schema types\r\nvar exports = validate\r\nexports.Integer = {type:\"integer\"};\r\nvar primitiveConstructors = {\r\n\tString: String,\r\n\tBoolean: Boolean,\r\n\tNumber: Number,\r\n\tObject: Object,\r\n\tArray: Array,\r\n\tDate: Date\r\n}\r\nexports.validate = validate;\r\nfunction validate(/*Any*/instance,/*Object*/schema) {\r\n\t\t// Summary:\r\n\t\t//  \tTo use the validator call JSONSchema.validate with an instance object and an optional schema object.\r\n\t\t// \t\tIf a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),\r\n\t\t// \t\tthat schema will be used to validate and the schema parameter is not necessary (if both exist,\r\n\t\t// \t\tboth validations will occur).\r\n\t\t// \t\tThe validate method will return an object with two properties:\r\n\t\t// \t\t\tvalid: A boolean indicating if the instance is valid by the schema\r\n\t\t// \t\t\terrors: An array of validation errors. If there are no errors, then an\r\n\t\t// \t\t\t\t\tempty list will be returned. A validation error will have two properties:\r\n\t\t// \t\t\t\t\t\tproperty: which indicates which property had the error\r\n\t\t// \t\t\t\t\t\tmessage: which indicates what the error was\r\n\t\t//\r\n\t\treturn validate(instance, schema, {changing: false});//, coerce: false, existingOnly: false});\r\n\t};\r\nexports.checkPropertyChange = function(/*Any*/value,/*Object*/schema, /*String*/property) {\r\n\t\t// Summary:\r\n\t\t// \t\tThe checkPropertyChange method will check to see if an value can legally be in property with the given schema\r\n\t\t// \t\tThis is slightly different than the validate method in that it will fail if the schema is readonly and it will\r\n\t\t// \t\tnot check for self-validation, it is assumed that the passed in value is already internally valid.\r\n\t\t// \t\tThe checkPropertyChange method will return the same object type as validate, see JSONSchema.validate for\r\n\t\t// \t\tinformation.\r\n\t\t//\r\n\t\treturn validate(value, schema, {changing: property || \"property\"});\r\n\t};\r\nvar validate = exports._validate = function(/*Any*/instance,/*Object*/schema,/*Object*/options) {\r\n\r\n\tif (!options) options = {};\r\n\tvar _changing = options.changing;\r\n\r\n\tfunction getType(schema){\r\n\t\treturn schema.type || (primitiveConstructors[schema.name] == schema && schema.name.toLowerCase());\r\n\t}\r\n\tvar errors = [];\r\n\t// validate a value against a property definition\r\n\tfunction checkProp(value, schema, path,i){\r\n\r\n\t\tvar l;\r\n\t\tpath += path ? typeof i == 'number' ? '[' + i + ']' : typeof i == 'undefined' ? '' : '.' + i : i;\r\n\t\tfunction addError(message){\r\n\t\t\terrors.push({property:path,message:message});\r\n\t\t}\r\n\r\n\t\tif((typeof schema != 'object' || schema instanceof Array) && (path || typeof schema != 'function') && !(schema && getType(schema))){\r\n\t\t\tif(typeof schema == 'function'){\r\n\t\t\t\tif(!(value instanceof schema)){\r\n\t\t\t\t\taddError(\"is not an instance of the class/constructor \" + schema.name);\r\n\t\t\t\t}\r\n\t\t\t}else if(schema){\r\n\t\t\t\taddError(\"Invalid schema/property definition \" + schema);\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif(_changing && schema.readonly){\r\n\t\t\taddError(\"is a readonly field, it can not be changed\");\r\n\t\t}\r\n\t\tif(schema['extends']){ // if it extends another schema, it must pass that schema as well\r\n\t\t\tcheckProp(value,schema['extends'],path,i);\r\n\t\t}\r\n\t\t// validate a value against a type definition\r\n\t\tfunction checkType(type,value){\r\n\t\t\tif(type){\r\n\t\t\t\tif(typeof type == 'string' && type != 'any' &&\r\n\t\t\t\t\t\t(type == 'null' ? value !== null : typeof value != type) &&\r\n\t\t\t\t\t\t!(value instanceof Array && type == 'array') &&\r\n\t\t\t\t\t\t!(value instanceof Date && type == 'date') &&\r\n\t\t\t\t\t\t!(type == 'integer' && value%1===0)){\r\n\t\t\t\t\treturn [{property:path,message:value + \" - \" + (typeof value) + \" value found, but a \" + type + \" is required\"}];\r\n\t\t\t\t}\r\n\t\t\t\tif(type instanceof Array){\r\n\t\t\t\t\tvar unionErrors=[];\r\n\t\t\t\t\tfor(var j = 0; j < type.length; j++){ // a union type\r\n\t\t\t\t\t\tif(!(unionErrors=checkType(type[j],value)).length){\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(unionErrors.length){\r\n\t\t\t\t\t\treturn unionErrors;\r\n\t\t\t\t\t}\r\n\t\t\t\t}else if(typeof type == 'object'){\r\n\t\t\t\t\tvar priorErrors = errors;\r\n\t\t\t\t\terrors = [];\r\n\t\t\t\t\tcheckProp(value,type,path);\r\n\t\t\t\t\tvar theseErrors = errors;\r\n\t\t\t\t\terrors = priorErrors;\r\n\t\t\t\t\treturn theseErrors;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tif(value === undefined){\r\n\t\t\tif(schema.required){\r\n\t\t\t\taddError(\"is missing and it is required\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\terrors = errors.concat(checkType(getType(schema),value));\r\n\t\t\tif(schema.disallow && !checkType(schema.disallow,value).length){\r\n\t\t\t\taddError(\" disallowed value was matched\");\r\n\t\t\t}\r\n\t\t\tif(value !== null){\r\n\t\t\t\tif(value instanceof Array){\r\n\t\t\t\t\tif(schema.items){\r\n\t\t\t\t\t\tvar itemsIsArray = schema.items instanceof Array;\r\n\t\t\t\t\t\tvar propDef = schema.items;\r\n\t\t\t\t\t\tfor (i = 0, l = value.length; i < l; i += 1) {\r\n\t\t\t\t\t\t\tif (itemsIsArray)\r\n\t\t\t\t\t\t\t\tpropDef = schema.items[i];\r\n\t\t\t\t\t\t\tif (options.coerce)\r\n\t\t\t\t\t\t\t\tvalue[i] = options.coerce(value[i], propDef);\r\n\t\t\t\t\t\t\terrors.concat(checkProp(value[i],propDef,path,i));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(schema.minItems && value.length < schema.minItems){\r\n\t\t\t\t\t\taddError(\"There must be a minimum of \" + schema.minItems + \" in the array\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(schema.maxItems && value.length > schema.maxItems){\r\n\t\t\t\t\t\taddError(\"There must be a maximum of \" + schema.maxItems + \" in the array\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else if(schema.properties || schema.additionalProperties){\r\n\t\t\t\t\terrors.concat(checkObj(value, schema.properties, path, schema.additionalProperties));\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.pattern && typeof value == 'string' && !value.match(schema.pattern)){\r\n\t\t\t\t\taddError(\"does not match the regex pattern \" + schema.pattern);\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.maxLength && typeof value == 'string' && value.length > schema.maxLength){\r\n\t\t\t\t\taddError(\"may only be \" + schema.maxLength + \" characters long\");\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.minLength && typeof value == 'string' && value.length < schema.minLength){\r\n\t\t\t\t\taddError(\"must be at least \" + schema.minLength + \" characters long\");\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.minimum !== 'undefined' && typeof value == typeof schema.minimum &&\r\n\t\t\t\t\t\tschema.minimum > value){\r\n\t\t\t\t\taddError(\"must have a minimum value of \" + schema.minimum);\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.maximum !== 'undefined' && typeof value == typeof schema.maximum &&\r\n\t\t\t\t\t\tschema.maximum < value){\r\n\t\t\t\t\taddError(\"must have a maximum value of \" + schema.maximum);\r\n\t\t\t\t}\r\n\t\t\t\tif(schema['enum']){\r\n\t\t\t\t\tvar enumer = schema['enum'];\r\n\t\t\t\t\tl = enumer.length;\r\n\t\t\t\t\tvar found;\r\n\t\t\t\t\tfor(var j = 0; j < l; j++){\r\n\t\t\t\t\t\tif(enumer[j]===value){\r\n\t\t\t\t\t\t\tfound=1;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!found){\r\n\t\t\t\t\t\taddError(\"does not have a value in the enumeration \" + enumer.join(\", \"));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.maxDecimal == 'number' &&\r\n\t\t\t\t\t(value.toString().match(new RegExp(\"\\\\.[0-9]{\" + (schema.maxDecimal + 1) + \",}\")))){\r\n\t\t\t\t\taddError(\"may only have \" + schema.maxDecimal + \" digits of decimal places\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\t// validate an object against a schema\r\n\tfunction checkObj(instance,objTypeDef,path,additionalProp){\r\n\r\n\t\tif(typeof objTypeDef =='object'){\r\n\t\t\tif(typeof instance != 'object' || instance instanceof Array){\r\n\t\t\t\terrors.push({property:path,message:\"an object is required\"});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tfor(var i in objTypeDef){ \r\n\t\t\t\tif(objTypeDef.hasOwnProperty(i) && i != '__proto__' && i != 'constructor'){\r\n\t\t\t\t\tvar value = instance.hasOwnProperty(i) ? instance[i] : undefined;\r\n\t\t\t\t\t// skip _not_ specified properties\r\n\t\t\t\t\tif (value === undefined && options.existingOnly) continue;\r\n\t\t\t\t\tvar propDef = objTypeDef[i];\r\n\t\t\t\t\t// set default\r\n\t\t\t\t\tif(value === undefined && propDef[\"default\"]){\r\n\t\t\t\t\t\tvalue = instance[i] = propDef[\"default\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(options.coerce && i in instance){\r\n\t\t\t\t\t\tvalue = instance[i] = options.coerce(value, propDef);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcheckProp(value,propDef,path,i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor(i in instance){\r\n\t\t\tif(instance.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_') && objTypeDef && !objTypeDef[i] && additionalProp===false){\r\n\t\t\t\tif (options.filter) {\r\n\t\t\t\t\tdelete instance[i];\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t} else {\r\n\t\t\t\t\terrors.push({property:path,message:\"The property \" + i +\r\n\t\t\t\t\t\t\" is not defined in the schema and the schema does not allow additional properties\"});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar requires = objTypeDef && objTypeDef[i] && objTypeDef[i].requires;\r\n\t\t\tif(requires && !(requires in instance)){\r\n\t\t\t\terrors.push({property:path,message:\"the presence of the property \" + i + \" requires that \" + requires + \" also be present\"});\r\n\t\t\t}\r\n\t\t\tvalue = instance[i];\r\n\t\t\tif(additionalProp && (!(objTypeDef && typeof objTypeDef == 'object') || !(i in objTypeDef))){\r\n\t\t\t\tif(options.coerce){\r\n\t\t\t\t\tvalue = instance[i] = options.coerce(value, additionalProp);\r\n\t\t\t\t}\r\n\t\t\t\tcheckProp(value,additionalProp,path,i);\r\n\t\t\t}\r\n\t\t\tif(!_changing && value && value.$schema){\r\n\t\t\t\terrors = errors.concat(checkProp(value,value.$schema,path,i));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn errors;\r\n\t}\r\n\tif(schema){\r\n\t\tcheckProp(instance,schema,'',_changing || '');\r\n\t}\r\n\tif(!_changing && instance && instance.$schema){\r\n\t\tcheckProp(instance,instance.$schema,'','');\r\n\t}\r\n\treturn {valid:!errors.length,errors:errors};\r\n};\r\nexports.mustBeValid = function(result){\r\n\t//\tsummary:\r\n\t//\t\tThis checks to ensure that the result is valid and will throw an appropriate error message if it is not\r\n\t// result: the result returned from checkPropertyChange or validate\r\n\tif(!result.valid){\r\n\t\tthrow new TypeError(result.errors.map(function(error){return \"for property \" + error.property + ': ' + error.message;}).join(\", \\n\"));\r\n\t}\r\n}\r\n\r\nreturn exports;\r\n}));\r\n", "import { JSONSchema4, JSONSchema6, JSONSchema7, validate } from \"json-schema\";\r\nimport { ZodType } from \"zod\";\r\n\r\nexport type ValidationError = {\r\n  message: string;\r\n  propertyName?: string;\r\n};\r\n\r\ntype UnvalidatedJson = any | undefined | null;\r\ntype AcceptedSchemas = JSONSchema4 | JSONSchema6 | JSONSchema7;\r\n\r\ntype ValidationSuccess<T> = [T, null];\r\ntype ValidationFail = [null, ValidationError[]];\r\n\r\n/*\r\n  uses schema to validate a json object and if valid, returns it with the type asserted\r\n\r\n  returns a tuple of [value, errors].\r\n  If errors is null, then value will be a valid value with type T\r\n  otherwise errors will be an array and value will be null\r\n*/\r\n\r\nexport function validateJsonAndAssert<T>(\r\n  json: UnvalidatedJson,\r\n  schema: AcceptedSchemas | ZodType,\r\n  transforms: ((jsonObj: any) => any)[] = []\r\n): ValidationSuccess<T> | ValidationFail {\r\n  const [result, errors] =\r\n    schema instanceof ZodType ? zodValidateSchema<T>(json, schema) : jsonschemaValidateSchema<T>(json, schema);\r\n\r\n  if (errors) {\r\n    return [null, errors];\r\n  }\r\n\r\n  let obj = result;\r\n  for (const transform of transforms) {\r\n    obj = transform(obj);\r\n  }\r\n\r\n  return [obj, null];\r\n}\r\n\r\nfunction jsonschemaValidateSchema<T>(\r\n  json: UnvalidatedJson,\r\n  schema: AcceptedSchemas,\r\n  transforms: ((jsonObj: any) => any)[] = []\r\n): ValidationSuccess<T> | ValidationFail {\r\n  if (!json || typeof json !== \"object\") {\r\n    return [null, [{ message: \"Could not parse json\" }]];\r\n  }\r\n\r\n  const validation = validate(json, schema);\r\n\r\n  return validation.valid ? [json, null] : [null, validation.errors];\r\n}\r\n\r\nfunction zodValidateSchema<T>(json: any, schema: ZodType): ValidationSuccess<T> | ValidationFail {\r\n  const parseResult = schema.safeParse(json);\r\n  if (!parseResult.success) {\r\n    const errors = parseResult.error.errors.map((error) => ({\r\n      message: error.message,\r\n      propertyName: error.path.join(\"/\"),\r\n    }));\r\n    return [null, errors];\r\n  }\r\n\r\n  return [parseResult.data, null];\r\n}\r\n", "import { JSONSchema7 } from \"json-schema\";\r\nimport { validateJsonAndAssert } from \"../../jsonschema/SchemaValidation\";\r\nimport { Skin } from \"./Skin\";\r\n\r\nexport type SkinPack = {\r\n  localization_name: string;\r\n  serialize_name: string;\r\n  skins: Skin[];\r\n};\r\n\r\n/*\r\n Schema for validating SkinPack\r\n*/\r\nconst SkinPackSchema: JSONSchema7 = {\r\n  type: \"object\",\r\n  properties: {\r\n    localization_name: { type: \"string\" },\r\n    serialize_name: { type: \"string\" },\r\n    skins: {\r\n      type: \"array\",\r\n      items: {\r\n        type: \"object\",\r\n        properties: {\r\n          localization_name: { type: \"string\" },\r\n          geometry: { type: \"string\" },\r\n          texture: { type: \"string\" },\r\n          type: { type: \"string\" },\r\n        },\r\n        required: [\"localization_name\", \"geometry\", \"texture\", \"type\"],\r\n      },\r\n    },\r\n  },\r\n  required: [\"localization_name\", \"serialize_name\", \"skins\"],\r\n};\r\n\r\n/*\r\n  validates json against SkinPack-Schema and returns it as a fully typed SkinPack object \r\n\r\n  alias of validateJsonAndAssert for clarity and convenience\r\n*/\r\nexport const validateSkinPackJson = (json: any) => validateJsonAndAssert<SkinPack>(json, SkinPackSchema);\r\n\r\nexport function getLocKeysFromSkinPack(pack: SkinPack) {\r\n  const skinKeys = pack.skins.map((skin) => `skin.${pack.localization_name}.${skin.localization_name}`);\r\n\r\n  return [`skinpack.${pack.localization_name}`, ...skinKeys];\r\n}\r\n", "import { ImageCoords } from \"../TextureDefinition\";\r\nimport { ModelSegment } from \"./TextureUtilities\";\r\n\r\nexport const Head: ModelSegment = {\r\n  name: \"Head\",\r\n  parts: {\r\n    top: { x1: 8, y1: 0, x2: 15, y2: 7 },\r\n    front: { x1: 8, y1: 8, x2: 15, y2: 15 },\r\n    left: { x1: 16, y1: 8, x2: 23, y2: 15 },\r\n    right: { x1: 0, y1: 8, x2: 7, y2: 15 },\r\n    bottom: { x1: 16, y1: 0, x2: 23, y2: 7 },\r\n    back: { x1: 24, y1: 8, x2: 31, y2: 15 },\r\n  },\r\n} as const;\r\n\r\nexport const Body: ModelSegment = {\r\n  name: \"Body\",\r\n  parts: {\r\n    top: { x1: 20, y1: 16, x2: 27, y2: 19 },\r\n    front: { x1: 20, y1: 20, x2: 27, y2: 31 },\r\n    left: { x1: 16, y1: 20, x2: 19, y2: 31 },\r\n    right: { x1: 28, y1: 20, x2: 31, y2: 31 },\r\n    bottom: { x1: 26, y1: 16, x2: 35, y2: 19 },\r\n    back: { x1: 32, y1: 20, x2: 39, y2: 31 },\r\n  },\r\n} as const;\r\n\r\n// Right Arm - Custom\r\nexport const RightArmCustom: ModelSegment = {\r\n  name: \"Right Arm\",\r\n  parts: {\r\n    top: { x1: 44, y1: 16, x2: 47, y2: 19 },\r\n    front: { x1: 44, y1: 20, x2: 47, y2: 31 },\r\n    left: { x1: 40, y1: 20, x2: 43, y2: 31 },\r\n    right: { x1: 48, y1: 20, x2: 51, y2: 31 },\r\n    bottom: { x1: 48, y1: 16, x2: 51, y2: 19 },\r\n    back: { x1: 52, y1: 20, x2: 55, y2: 31 },\r\n  },\r\n} as const;\r\n\r\n// Right Arm - Slim\r\nexport const RightArmSlim: ModelSegment = {\r\n  name: \"Right Arm\",\r\n  parts: {\r\n    top: { x1: 44, y1: 16, x2: 46, y2: 19 },\r\n    front: { x1: 44, y1: 20, x2: 46, y2: 31 },\r\n    left: { x1: 40, y1: 20, x2: 43, y2: 31 },\r\n    right: { x1: 47, y1: 20, x2: 50, y2: 31 },\r\n    bottom: { x1: 47, y1: 16, x2: 49, y2: 19 },\r\n    back: { x1: 51, y1: 20, x2: 53, y2: 31 },\r\n  },\r\n};\r\n\r\n// Left Arm - Custom\r\nexport const LeftArmCustom: ModelSegment = {\r\n  name: \"Left Arm\",\r\n  parts: {\r\n    top: { x1: 36, y1: 48, x2: 39, y2: 51 },\r\n    front: { x1: 36, y1: 52, x2: 39, y2: 63 },\r\n    left: { x1: 32, y1: 52, x2: 35, y2: 63 },\r\n    right: { x1: 40, y1: 52, x2: 43, y2: 63 },\r\n    bottom: { x1: 40, y1: 48, x2: 43, y2: 51 },\r\n    back: { x1: 44, y1: 52, x2: 47, y2: 63 },\r\n  },\r\n} as const;\r\n\r\n// Left Arm - Slim\r\nexport const LeftArmSlim: ModelSegment = {\r\n  name: \"Left Arm\",\r\n  parts: {\r\n    top: { x1: 36, y1: 48, x2: 38, y2: 51 },\r\n    front: { x1: 36, y1: 52, x2: 38, y2: 63 },\r\n    left: { x1: 32, y1: 52, x2: 35, y2: 63 },\r\n    right: { x1: 39, y1: 52, x2: 42, y2: 63 },\r\n    bottom: { x1: 39, y1: 48, x2: 41, y2: 51 },\r\n    back: { x1: 43, y1: 52, x2: 45, y2: 63 },\r\n  },\r\n} as const;\r\n\r\n// Right Leg\r\nexport const RightLeg: ModelSegment = {\r\n  name: \"Right Leg\",\r\n  parts: {\r\n    top: { x1: 4, y1: 16, x2: 7, y2: 19 },\r\n    front: { x1: 4, y1: 20, x2: 7, y2: 31 },\r\n    left: { x1: 0, y1: 20, x2: 3, y2: 31 },\r\n    right: { x1: 8, y1: 20, x2: 11, y2: 31 },\r\n    bottom: { x1: 8, y1: 16, x2: 11, y2: 19 },\r\n    back: { x1: 12, y1: 20, x2: 15, y2: 31 },\r\n  },\r\n} as const;\r\n\r\n// Left Leg\r\nexport const LeftLeg: ModelSegment = {\r\n  name: \"Left Leg\",\r\n  parts: {\r\n    top: { x1: 20, y1: 48, x2: 23, y2: 51 },\r\n    front: { x1: 20, y1: 52, x2: 23, y2: 63 },\r\n    left: { x1: 16, y1: 52, x2: 19, y2: 63 },\r\n    right: { x1: 24, y1: 52, x2: 27, y2: 63 },\r\n    bottom: { x1: 24, y1: 48, x2: 27, y2: 51 },\r\n    back: { x1: 28, y1: 52, x2: 31, y2: 63 },\r\n  },\r\n} as const;\r\n\r\n// Right Arm Custom Difference\r\nexport const RightArmCustomDifference: ImageCoords = { x1: 54, y1: 20, x2: 55, y2: 31 } as const;\r\n// Extra 1px column present in the Custom (thick) right arm but not in the Slim variant.\r\nexport const LeftArmCustomDifference: ImageCoords = { x1: 46, y1: 52, x2: 47, y2: 63 } as const;\r\n// Extra 1px column present in the Custom (thick) left arm but not in the Slim variant.\r\n", "import Database from \"../Database\";\r\nimport { SkinModelTarget as SkinTarget } from \"../skins/Skin\";\r\nimport TextureDefinition, { ImageCoords } from \"../TextureDefinition\";\r\nimport {\r\n  Head,\r\n  RightArmCustom,\r\n  LeftArmCustom,\r\n  LeftLeg,\r\n  RightLeg,\r\n  RightArmSlim,\r\n  LeftArmSlim,\r\n  LeftArmCustomDifference,\r\n  RightArmCustomDifference,\r\n} from \"./ModelSegments\";\r\n\r\ninterface TextureSizeData {\r\n  name: string;\r\n  allowedTextures: TextureDefinition | undefined;\r\n  allowedTexturesHighRes: TextureDefinition | undefined;\r\n  geometryName: string;\r\n  segments: readonly ModelSegment[];\r\n}\r\n\r\nexport type ModelSegment = {\r\n  name: string;\r\n  parts: {\r\n    top: ImageCoords;\r\n    front: ImageCoords;\r\n    left: ImageCoords;\r\n    right: ImageCoords;\r\n    bottom: ImageCoords;\r\n    back: ImageCoords;\r\n  };\r\n};\r\n\r\n// Generally, steve == custom and alex == customSlim\r\nconst CustomSlimGeometryTags = new Set<string>([\"a\", \"alex\", \"slim\", \"customslim\"]);\r\nconst CustomGeometryTags = new Set<string>([\"s\", \"steve\", \"custom\"]);\r\n\r\nexport default class TextureUtilities {\r\n  private static _custom: TextureSizeData = {\r\n    name: \"custom\",\r\n    allowedTextures: undefined,\r\n    allowedTexturesHighRes: undefined,\r\n    geometryName: \"geometry.humanoid.custom\",\r\n    segments: [Head, RightArmCustom, LeftArmCustom, LeftLeg, RightLeg],\r\n  };\r\n\r\n  private static _customSlim: TextureSizeData = {\r\n    name: \"customSlim\",\r\n    allowedTextures: undefined,\r\n    allowedTexturesHighRes: undefined,\r\n    geometryName: \"geometry.humanoid.customSlim\",\r\n    segments: [Head, RightArmSlim, LeftArmSlim, LeftLeg, RightLeg],\r\n  };\r\n\r\n  private static _isLoaded = false;\r\n\r\n  static getBySize(size: SkinTarget): TextureSizeData {\r\n    switch (size) {\r\n      case SkinTarget.Custom:\r\n        return this._custom;\r\n      case SkinTarget.CustomSlim:\r\n        return this._customSlim;\r\n      default:\r\n        throw new Error(`Unknown skin size: ${size}`);\r\n    }\r\n  }\r\n\r\n  static async getTextureDefinititionForContent(filePath: string) {\r\n    const contentFile = await Database.getContentFolderFile(filePath);\r\n\r\n    if (!contentFile) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!contentFile.isContentLoaded) {\r\n      await contentFile.loadContent();\r\n    }\r\n\r\n    if (!(contentFile.content instanceof Uint8Array)) {\r\n      return undefined;\r\n    }\r\n\r\n    let textDef = await TextureDefinition.ensureOnFile(contentFile);\r\n\r\n    if (!textDef) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!textDef.isContentProcessed) {\r\n      await textDef.processContent();\r\n    }\r\n\r\n    return textDef;\r\n  }\r\n\r\n  static async load() {\r\n    if (this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    this._custom.allowedTextures = await TextureUtilities.getTextureDefinititionForContent(\r\n      \"textures/Custom_AllowedPixels_64.png\"\r\n    );\r\n    this._custom.allowedTexturesHighRes = await TextureUtilities.getTextureDefinititionForContent(\r\n      \"textures/Custom_AllowedPixels_128.png\"\r\n    );\r\n\r\n    this._customSlim.allowedTextures = await TextureUtilities.getTextureDefinititionForContent(\r\n      \"textures/CustomSlim_AllowedPixels_64.png\"\r\n    );\r\n\r\n    this._customSlim.allowedTexturesHighRes = await TextureUtilities.getTextureDefinititionForContent(\r\n      \"textures/CustomSlim_AllowedPixels_128.png\"\r\n    );\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n\r\nexport function isRegionVisible(texture: TextureDefinition, area: ImageCoords) {\r\n  const multiplier = isHighResolutionSkinPackTexture(texture) ? 2 : 1;\r\n  const maxX = Math.floor(area.x2) * multiplier;\r\n  const maxY = Math.floor(area.y2) * multiplier;\r\n\r\n  if (texture.imageData) {\r\n    for (let x = area.x1 * multiplier; x <= maxX; x++) {\r\n      for (let y = area.y1 * multiplier; y <= maxY; y++) {\r\n        if (texture.getPixel(x, y).a !== 0) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nexport function getSkinTargetByUniquePixelLocations(texture: TextureDefinition) {\r\n  const hasCustomSkinPixels =\r\n    isRegionVisible(texture, RightArmCustomDifference) || isRegionVisible(texture, LeftArmCustomDifference);\r\n\r\n  return hasCustomSkinPixels ? SkinTarget.Custom : SkinTarget.CustomSlim;\r\n}\r\n\r\nexport function getSkinTargetFromName(textureName: string): SkinTarget | undefined {\r\n  const tokens = textureName.split(/[._]/);\r\n  if (tokens.length > 2) {\r\n    const prefix = tokens[0]?.toLowerCase();\r\n    const suffix = tokens[tokens.length - 2]?.toLowerCase();\r\n\r\n    if (CustomGeometryTags.has(prefix) || CustomGeometryTags.has(suffix)) {\r\n      return SkinTarget.Custom;\r\n    }\r\n\r\n    if (CustomSlimGeometryTags.has(prefix) || CustomSlimGeometryTags.has(suffix)) {\r\n      return SkinTarget.CustomSlim;\r\n    }\r\n  }\r\n  return undefined;\r\n}\r\n\r\nexport function isHighResolutionSkinPackTexture(textureDefinition: TextureDefinition) {\r\n  return textureDefinition.width === 128;\r\n}\r\n\r\nexport async function isOuterAreaIsBlank(texture: TextureDefinition, size: SkinTarget) {\r\n  await TextureUtilities.load();\r\n\r\n  if (texture.width === undefined || texture.height === undefined) {\r\n    throw new Error(\"Texture width or height is undefined\");\r\n  }\r\n\r\n  const allowedAlphaMask = isHighResolutionSkinPackTexture(texture)\r\n    ? TextureUtilities.getBySize(size).allowedTexturesHighRes\r\n    : TextureUtilities.getBySize(size).allowedTextures;\r\n\r\n  if (!allowedAlphaMask) {\r\n    throw new Error(\"Could not find reference for texture\");\r\n  }\r\n\r\n  if (texture.imageData) {\r\n    for (let x = 0; x < texture.width; ++x) {\r\n      for (let y = 0; y < texture.height; ++y) {\r\n        const texIsVisibleInDisallowedSpot = allowedAlphaMask.getPixel(x, y).a === 0 && texture.getPixel(x, y).a > 0;\r\n        if (texIsVisibleInDisallowedSpot) {\r\n          return false;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nexport function getSegmentsVisibilities(texture: TextureDefinition, size: SkinTarget) {\r\n  const values = TextureUtilities.getBySize(size);\r\n\r\n  return values.segments.map((segment) => checkTextureVisibilityForSegment(texture, segment));\r\n}\r\n\r\nfunction checkTextureVisibilityForSegment(texture: TextureDefinition, segment: ModelSegment) {\r\n  return {\r\n    segmentName: segment.name,\r\n    visibilities: {\r\n      top: isRegionVisible(texture, segment.parts.top),\r\n      front: isRegionVisible(texture, segment.parts.front),\r\n      left: isRegionVisible(texture, segment.parts.left),\r\n      right: isRegionVisible(texture, segment.parts.right),\r\n      bottom: isRegionVisible(texture, segment.parts.bottom),\r\n      back: isRegionVisible(texture, segment.parts.back),\r\n    },\r\n  };\r\n}\r\n", "import { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport Project from \"../../app/Project\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport {\r\n  getModelTargetGeometry,\r\n  isValidCapeSize,\r\n  isValidSkinPurchaseType,\r\n  isValidSkinModelTarget,\r\n  Skin,\r\n} from \"../../minecraft/skins/Skin\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport { isResult, notApplicable, resultFromTest, resultFromTestWithMessage } from \"../tests/TestDefinition\";\r\nimport { findEnsuredFiles, getEnsuredFile, getEnsuredFileOfType } from \"../../app/ProjectItemUtilities\";\r\nimport { getLocKeysFromSkinPack, SkinPack, validateSkinPackJson } from \"../../minecraft/skins/SkinPack\";\r\nimport IFile from \"../../storage/IFile\";\r\nimport LocManager from \"../../minecraft/LocManager\";\r\nimport { getSkinTargetFromName } from \"../../minecraft/textures/TextureUtilities\";\r\nimport TextureDefinition from \"../../minecraft/TextureDefinition\";\r\n\r\nconst MaxFreeSkins = 2;\r\nconst MaxSkinsInAPack = 80;\r\nconst LeadingOrTrailingSpaceRegex = /^\\s+|\\s+$/;\r\n\r\nconst Tests = {\r\n  JsonNotFoundFile: {\r\n    id: 101,\r\n    title: \"Skin Pack Json File Not Found\",\r\n    severity: InfoItemType.error,\r\n    defaultMessage: \"skins.json file not found.\",\r\n  },\r\n  InvalidJsonFile: { id: 102, title: \"Invalid Json File\" },\r\n  InvalidPackLocName: {\r\n    id: 103,\r\n    title: \"Invalid Localization Name\",\r\n    severity: InfoItemType.error,\r\n    defaultMessage: \"skins.json localization_name and serialize_name must be the same.\",\r\n  },\r\n  TooManyFreeSkins: { id: 104, title: \"More Free Skins Than Allowed\" },\r\n  DuplicateTextures: { id: 105, title: \"Duplicate Textures Found\", severity: InfoItemType.warning },\r\n  CapeTextureNotAllowed: { id: 106, title: \"Cape Texture Not Allowed\" },\r\n  InvalidTextureSize: { id: 107, title: \"Texture Invalid Size\" },\r\n  MCCreatorPropertyNotAllowed: { id: 108, title: \"Minecraft Creator Property Not Allowed\" },\r\n  FailedToReadFile: { id: 109, title: \"File Read Failed\" },\r\n  OrphanedTexture: { id: 110, title: \"Texture Not Found in skins.json\" },\r\n  OrphanedLocKey: { id: 111, title: \"Loc Key Not Found in Lang File\" },\r\n  LocalizedKeyNotFoundInSkinsJson: { id: 112, title: \"Localized Key Not Found In skins.json\" },\r\n  InvalidSpacingOnLocalizedKey: { id: 113, title: \"Localized Key Cannot Have Leading Or Trailing Spaces\" },\r\n  InvalidSkinType: { id: 114, title: \"Skin Purchase Type Not Allowed\" },\r\n  InvalidSkinModelTarget: { id: 115, title: \"Invalid Skin Model Target\" },\r\n  InvalidNumberOfSkins: {\r\n    id: 116,\r\n    title: \"Invalid Number Of Skins\",\r\n    defaultMessage: `Maximum Allowable skins is: ${MaxSkinsInAPack}`,\r\n  },\r\n  OuterAreaIsBlank: { id: 117, title: \"Outer Area Blank\" },\r\n  ModelInvisible: { id: 118, title: \"Model Invisible From Some Angles\" },\r\n  ModelPartiallyInvisible: { id: 119, title: \"Model Partially Invisible\", severity: InfoItemType.warning },\r\n  CouldNotFindRelatedPack: {\r\n    id: 120,\r\n    title: \"Could Not Find Related Skin Pack\",\r\n    defaultMessage: \"Could not read skin pack manifest pack\",\r\n  },\r\n} as const;\r\n\r\n/**\r\n * Validates skin pack JSON files including skins.json structure and texture references.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/cspj.form.json} for topic definitions\r\n */\r\nexport default class CheckSkinPackJsonGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CSPJ\";\r\n  title: string = \"Skin Pack Validation\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const skinPackManifestItems = project.getItemsByType(ProjectItemType.skinPackManifestJson);\r\n\r\n    const allResults: ProjectInfoItem[] = [];\r\n\r\n    for (const skinPackManifestItem of skinPackManifestItems) {\r\n      if (!skinPackManifestItems.length) {\r\n        return notApplicable();\r\n      }\r\n\r\n      const skinPack = await skinPackManifestItem.getPack();\r\n\r\n      if (!skinPack) {\r\n        allResults.push(\r\n          resultFromTest(Tests.CouldNotFindRelatedPack, {\r\n            id: this.id,\r\n            item: skinPackManifestItem,\r\n            data: skinPackManifestItem.name,\r\n          })\r\n        );\r\n        continue;\r\n      }\r\n\r\n      const packItems = skinPack.getPackItems();\r\n      const skinCatalogJsonFile = await getEnsuredFileOfType(packItems, ProjectItemType.skinCatalogJson);\r\n\r\n      if (!skinCatalogJsonFile) {\r\n        return [\r\n          resultFromTestWithMessage(\r\n            Tests.JsonNotFoundFile,\r\n            this.id,\r\n            \"Could not find skins.json file\",\r\n            skinPackManifestItem\r\n          ),\r\n        ];\r\n      }\r\n\r\n      // read skin pack from json and return error results if it can't be read or validated\r\n      const skinCatalogJson = await StorageUtilities.getJsonObject(skinCatalogJsonFile);\r\n      const [skinPackManifestObj, errors] = validateSkinPackJson(skinCatalogJson);\r\n\r\n      if (errors) {\r\n        return errors.map((error) =>\r\n          resultFromTestWithMessage(Tests.InvalidJsonFile, this.id, error.message, skinPackManifestItem)\r\n        );\r\n      }\r\n\r\n      if (!hasValidLocalizationNames(skinPackManifestObj.localization_name, skinPackManifestObj.serialize_name)) {\r\n        return [resultFromTest(Tests.InvalidPackLocName, { id: this.id, item: skinPackManifestItem })];\r\n      }\r\n\r\n      allResults.push(...this.validateSkins(skinPackManifestObj.skins, project.isMinecraftCreator));\r\n      allResults.push(\r\n        ...(await this.validateTextures(packItems, skinPackManifestObj.skins, project.isMinecraftCreator))\r\n      );\r\n      allResults.push(...this.checkSkinLocalizations(project.loc, skinPackManifestObj));\r\n    }\r\n\r\n    return allResults;\r\n  }\r\n\r\n  summarize(): void {}\r\n\r\n  private validateSkins(skins: Skin[], isMCCreator: boolean) {\r\n    const results = [];\r\n\r\n    const invalidSkins = skins\r\n      .filter((skin) => !isValidSkinPurchaseType(skin.type))\r\n      .map(() => resultFromTestWithMessage(Tests.InvalidSkinType, this.id));\r\n    results.push(...invalidSkins);\r\n\r\n    const freeSkins = skins.filter((skin) => skin.type === \"free\");\r\n    if (freeSkins.length > MaxFreeSkins) {\r\n      const message = `${freeSkins.length} free skins found. Only ${MaxFreeSkins} allowed.`;\r\n      results.push(resultFromTestWithMessage(Tests.TooManyFreeSkins, this.id, message));\r\n    }\r\n\r\n    if (!isMCCreator) {\r\n      const nonFPResults = this.validateNonMCRestrictionsForSkin(skins);\r\n      results.push(...nonFPResults);\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private async validateTextures(\r\n    packItems: readonly ProjectItem[],\r\n    skins: Skin[],\r\n    isMCCreator: boolean\r\n  ): Promise<ProjectInfoItem[]> {\r\n    //check for duplicate capes\r\n    const capeTextureNames = skins.map((skin) => skin.cape).filter((cape) => !!cape);\r\n\r\n    // CSPJ105\r\n    const duplicateCapeTexturesResults = capeTextureNames\r\n      .filter((name, index) => capeTextureNames.indexOf(name) !== index)\r\n      .map((duplicate) =>\r\n        resultFromTestWithMessage(Tests.DuplicateTextures, this.id, `Duplicate cape texture found: ${duplicate}`)\r\n      );\r\n\r\n    //check cape textures\r\n    const capeTextureSet = new Set(capeTextureNames);\r\n    const capeTextures = await findEnsuredFiles(packItems, (item) => capeTextureSet.has(item.name));\r\n\r\n    const capeCheck = await Promise.all(capeTextures.map((cape) => this.validateCapeTextureImage(cape)));\r\n    const capeResults = capeCheck.filter(isResult);\r\n\r\n    //check for duplicate skin textures\r\n    const skinTextureNames = skins.map((skin) => skin.texture).filter((texture) => !!texture);\r\n    const duplicateTextureResults = skinTextureNames\r\n      .filter((name, index) => skinTextureNames.indexOf(name) !== index)\r\n      .map((duplicate) =>\r\n        resultFromTestWithMessage(Tests.DuplicateTextures, this.id, `Duplicate skin texture found: ${duplicate}`)\r\n      );\r\n\r\n    //check skin textures\r\n    const textureCheck = await Promise.all(\r\n      skins.map((skin) => this.validateTextureImage(skin, packItems, isMCCreator))\r\n    );\r\n    const textureResults = textureCheck.flatMap((result) => result);\r\n\r\n    //check orphaned textures\r\n    const knownTextures = new Set([...skinTextureNames, ...capeTextureSet]);\r\n    const allTexturesInProject = packItems.filter((item) => item.itemType === ProjectItemType.texture);\r\n    const orphaned = allTexturesInProject.filter(\r\n      (texItem) => !knownTextures.has(texItem.name) && !texItem.name.startsWith(\"pack_icon\")\r\n    );\r\n\r\n    // CSPJ110\r\n    const orphanResults = orphaned.map((orphan) =>\r\n      resultFromTestWithMessage(Tests.OrphanedTexture, this.id, `${orphan.name} in skin pack not found in skins.json`)\r\n    );\r\n\r\n    // combine and return results\r\n    return [\r\n      ...duplicateCapeTexturesResults,\r\n      ...capeResults,\r\n      ...duplicateTextureResults,\r\n      ...textureResults,\r\n      ...orphanResults,\r\n    ];\r\n  }\r\n\r\n  private validateNonMCRestrictionsForSkin(skins: Skin[]) {\r\n    const results = [];\r\n\r\n    if (skins.length > MaxSkinsInAPack) {\r\n      results.push(resultFromTestWithMessage(Tests.InvalidNumberOfSkins, this.id));\r\n    }\r\n\r\n    if (skins.find((skin) => hasMCOnlyProperties(skin))) {\r\n      const message = \"animations and enable_attachables not allowed if not Minecraft Creator\";\r\n      results.push(resultFromTestWithMessage(Tests.MCCreatorPropertyNotAllowed, this.id, message));\r\n    }\r\n\r\n    if (skins.find((skin) => !!skin.cape)) {\r\n      results.push(resultFromTestWithMessage(Tests.CapeTextureNotAllowed, this.id));\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private async validateCapeTextureImage(textureFile: IFile | null) {\r\n    if (!textureFile) {\r\n      return null;\r\n    }\r\n\r\n    const texture = await TextureDefinition.ensureOnFile(textureFile);\r\n\r\n    if (!texture) {\r\n      const message = `Failed to read file: ${textureFile.name}`;\r\n      return resultFromTestWithMessage(Tests.FailedToReadFile, this.id, message);\r\n    }\r\n\r\n    const width = texture.width;\r\n    const height = texture.height;\r\n\r\n    if (!width || !height || texture.errorMessage) {\r\n      const message = `Failed to read dimensions from texture: ${texture.errorMessage}`;\r\n      return resultFromTestWithMessage(Tests.FailedToReadFile, this.id, message);\r\n    }\r\n\r\n    if (!isValidCapeSize([width, height])) {\r\n      const message = `Texture: ${textureFile.name} is invalid size (${width}x${height})`;\r\n      return resultFromTestWithMessage(Tests.InvalidTextureSize, this.id, message);\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private async validateTextureImage(\r\n    skin: Skin,\r\n    items: readonly ProjectItem[],\r\n    isMCCreator: boolean\r\n  ): Promise<ProjectInfoItem[]> {\r\n    const textureFile = await getEnsuredFile(items, (item) => item.name === skin.texture);\r\n    if (!textureFile) {\r\n      return [];\r\n    }\r\n    const textureName = textureFile.name;\r\n\r\n    const texture = await TextureDefinition.ensureOnFile(textureFile);\r\n\r\n    if (!texture) {\r\n      const message = `Failed to read file: ${textureName}`;\r\n      return [resultFromTestWithMessage(Tests.FailedToReadFile, this.id, message)];\r\n    }\r\n\r\n    if (!texture.isContentProcessed) {\r\n      await texture.processContent();\r\n    }\r\n\r\n    const width = texture.width;\r\n    const height = texture.height;\r\n\r\n    if (!width || !height || texture.errorMessage) {\r\n      const message = `Failed to read dimensions from texture: ${textureName} ${texture.errorMessage}`;\r\n      return [resultFromTestWithMessage(Tests.FailedToReadFile, this.id, message)];\r\n    }\r\n\r\n    if (!isValidSkinModelTarget([width, height])) {\r\n      const message = `Texture: ${textureName} is invalid size (${width}x${height})`;\r\n      return [resultFromTestWithMessage(Tests.InvalidTextureSize, this.id, message)];\r\n    }\r\n\r\n    // remaining checks do not apply to MC creator\r\n    if (isMCCreator) {\r\n      return [];\r\n    }\r\n\r\n    const skinTarget = getSkinTargetFromName(textureName);\r\n\r\n    //CSPJ115\r\n    if (!skinTarget) {\r\n      return [\r\n        resultFromTestWithMessage(\r\n          Tests.InvalidSkinModelTarget,\r\n          this.id,\r\n          `No intended model tag in name. Slim model skins must have the prefix or suffix of  'a', 'alex', 'slim', 'customSlim' separated by an '_' ex. <name>_customSlim. Custom model skins must have the prefix or suffix of  's', 'steve', 'custom' separated by an '_' ex. <name>_custom.`\r\n        ),\r\n      ];\r\n    }\r\n\r\n    const geoSkinSize = getModelTargetGeometry(skin);\r\n\r\n    //CSPJ115\r\n    if (!geoSkinSize) {\r\n      return [\r\n        resultFromTestWithMessage(\r\n          Tests.InvalidSkinModelTarget,\r\n          this.id,\r\n          `geometry property: ${skin.geometry} not allowed`\r\n        ),\r\n      ];\r\n    }\r\n\r\n    /*\r\n    // requires pixel data for PNG, which we don't have\r\n\r\n    const pixelSkinSize = getSkinTargetByUniquePixelLocations(texture);\r\n\r\n    const isSizeConsistent = skinTarget === geoSkinSize && skinTarget === pixelSkinSize;\r\n    if (!isSizeConsistent) {\r\n      const message = `Model size indicators are inconsistent. name: ${skinTarget}, geometry: ${geoSkinSize}, image data: ${pixelSkinSize}`;\r\n      return [resultFromTestWithMessage(Tests.InvalidSkinModelTarget, this.id, message)];\r\n    }\r\n      \r\n\r\n    if (!(await isOuterAreaIsBlank(texture, skinTarget))) {\r\n      const message = `[${textureFile.name}]: Ensure that no pixels not visible on the model are filled in with an alpha greater than 0`;\r\n      return [resultFromTestWithMessage(Tests.OuterAreaIsBlank, this.id, message)];\r\n    }\r\n\r\n    const segmentVisibilities = getSegmentsVisibilities(texture, skinTarget);\r\n\r\n    const visErrors = segmentVisibilities\r\n      .flatMap((segment) => {\r\n        const messages = [];\r\n        if (!segment.visibilities.top && !segment.visibilities.bottom) {\r\n          messages.push(\r\n            `The ${segment.segmentName} is not visible from the top and the bottom. This could cause this part of the model to be completely invisible from certain angles.`\r\n          );\r\n        }\r\n\r\n        if (!segment.visibilities.front && segment.visibilities.back) {\r\n          messages.push(\r\n            `The ${segment.segmentName} is not visible from the front and the back. This could cause this part of the model to be completely invisible from certain angles.`\r\n          );\r\n        }\r\n\r\n        if (!segment.visibilities.left && !segment.visibilities.right) {\r\n          messages.push(\r\n            `The ${segment.segmentName} is not visible from the right and the left. This could cause this part of the model to be completely invisible from certain angles.`\r\n          );\r\n        }\r\n\r\n        return messages;\r\n      })\r\n      .map((message) => resultFromTestWithMessage(Tests.ModelInvisible, this.id, message));\r\n\r\n    const visWarnings = segmentVisibilities\r\n      .flatMap((segment) =>\r\n        Object.entries(segment.visibilities)\r\n          .filter(([_side, isVisible]) => !isVisible)\r\n          .map(([side]) => `Side: [${side}] of segment: [${segment.segmentName}] is not visible!`)\r\n      )\r\n      .map((message) => resultFromTestWithMessage(Tests.ModelPartiallyInvisible, this.id, message));\r\n\r\n    return [...visErrors, ...visWarnings];*/\r\n    return [];\r\n  }\r\n\r\n  private checkSkinLocalizations(locManager: LocManager, skinPack: SkinPack) {\r\n    const locKeysFromSkinPack = getLocKeysFromSkinPack(skinPack);\r\n    const knownKeys = new Set(locManager.getAllTokenKeys());\r\n\r\n    const orphanLocKeyResults = locKeysFromSkinPack\r\n      .filter((key) => !knownKeys.has(key))\r\n      .map((key) =>\r\n        resultFromTestWithMessage(\r\n          Tests.OrphanedLocKey,\r\n          this.id,\r\n          `Loc key [${key}] in skins.json not found in en_US.lang file`\r\n        )\r\n      );\r\n\r\n    const knownSkinsKeys = new Set(locKeysFromSkinPack);\r\n\r\n    const localizedOrphansResults = [];\r\n    const invalidSpaceResults = [];\r\n\r\n    for (const lang of locManager.getAllLanguages()) {\r\n      const orphansResultsForLang = lang\r\n        .getLocKeys()\r\n        .filter((key) => !knownSkinsKeys.has(key) && (key.startsWith(\"skin.\") || key.startsWith(\"skinpack.\")))\r\n        .map((orphanedKey) => `Loc Key: [${orphanedKey}] found in ${lang.language}.lang not found in skins.json`)\r\n        .map((message) => resultFromTestWithMessage(Tests.LocalizedKeyNotFoundInSkinsJson, this.id, message));\r\n\r\n      const invalidSpaceResultsForLang = lang\r\n        .getLocKeys()\r\n        .filter((key) => LeadingOrTrailingSpaceRegex.test(key))\r\n        .map(\r\n          (invalidSpacedKey) =>\r\n            `Loc string for key [${invalidSpacedKey}] in ${lang.language}.lang must not contain leading or trailing spaces.`\r\n        )\r\n        .map((message) => resultFromTestWithMessage(Tests.InvalidSpacingOnLocalizedKey, this.id, message));\r\n\r\n      localizedOrphansResults.push(...orphansResultsForLang);\r\n      invalidSpaceResults.push(...invalidSpaceResultsForLang);\r\n    }\r\n\r\n    return [...orphanLocKeyResults, ...localizedOrphansResults, ...invalidSpaceResults];\r\n  }\r\n}\r\n\r\nfunction hasValidLocalizationNames(localizationName?: string, serializeName?: string): localizationName is string {\r\n  return !!localizationName && !!serializeName && localizationName === serializeName;\r\n}\r\n\r\nfunction hasMCOnlyProperties(skin: Skin) {\r\n  return !!skin.animations || !!skin.enable_attachables;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\n\r\nimport axios from \"axios\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport MinecraftDefinitions from \"../minecraft/MinecraftDefinitions\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { JSONSchema7, validate } from \"json-schema\";\r\n\r\nconst JsonSchemaErrorBase = 100;\r\nconst NotCurrentFormatVersionBase = 1100;\r\n\r\nexport enum CommunitySchemaItemInfoGeneratorTest {\r\n  couldNotParseJson = 1,\r\n}\r\n\r\n/**\r\n * Validates JSON files against JSON schema definitions.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/comjson.form.json} for topic definitions\r\n */\r\nexport default class CommunitySchemaItemInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"COMJSON\";\r\n  title = \"Community JSON Schema Validation\";\r\n  canAlwaysProcess = true;\r\n\r\n  _schemaContentByPath: { [id: string]: object } = {};\r\n\r\n  constructor() {\r\n    this.loadSchema = this.loadSchema.bind(this);\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async loadSchema(uri: string) {\r\n    const res = await axios.get(Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) + uri);\r\n    return res.data;\r\n  }\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (\r\n      projectItem.primaryFile &&\r\n      projectItem.primaryFile.content &&\r\n      typeof projectItem.primaryFile.content === \"string\"\r\n    ) {\r\n      const schemaPath = projectItem.getCommunitySchemaPath();\r\n\r\n      if (schemaPath) {\r\n        let verIsCurrent = await MinecraftDefinitions.formatVersionIsCurrent(projectItem);\r\n\r\n        if (verIsCurrent) {\r\n          let schemaContents: JSONSchema7 | undefined = this._schemaContentByPath[schemaPath] as\r\n            | JSONSchema7\r\n            | undefined;\r\n\r\n          if (!schemaContents) {\r\n            schemaContents = await Database.getCommunitySchema(schemaPath);\r\n\r\n            if (schemaContents) {\r\n              this._schemaContentByPath[schemaPath] = schemaContents;\r\n            }\r\n          }\r\n\r\n          if (schemaContents) {\r\n            let content = projectItem.primaryFile.content;\r\n            let contentObj = undefined;\r\n\r\n            content = Utilities.fixJsonContent(content);\r\n\r\n            try {\r\n              contentObj = JSON.parse(content);\r\n              const results = validate(contentObj, schemaContents);\r\n\r\n              for (const err of results.errors) {\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.warning,\r\n                    this.id,\r\n                    JsonSchemaErrorBase + projectItem.itemType,\r\n                    `JSON structure error`,\r\n                    projectItem,\r\n                    `(${err.property}) ${err.message}`\r\n                  )\r\n                );\r\n              }\r\n            } catch (e: any) {\r\n              let errorMess: any = e;\r\n\r\n              if (e.message) {\r\n                errorMess = e.message;\r\n              }\r\n\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CommunitySchemaItemInfoGeneratorTest.couldNotParseJson,\r\n                  \"Could not parse JSON - \" + errorMess,\r\n                  projectItem\r\n                )\r\n              );\r\n            }\r\n\r\n            if (contentObj) {\r\n            }\r\n          }\r\n        } else {\r\n          let fvStr = \"\";\r\n\r\n          const fv = await MinecraftDefinitions.getFormatVersion(projectItem);\r\n\r\n          if (fv) {\r\n            fvStr = \" (is at \" + fv.join(\".\") + \")\";\r\n          }\r\n\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              NotCurrentFormatVersionBase + projectItem.itemType,\r\n              ProjectItemUtilities.getDescriptionForType(projectItem.itemType) +\r\n                \" is not at a current format version\" +\r\n                fvStr,\r\n              projectItem\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\n\r\nimport axios from \"axios\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport MinecraftDefinitions from \"../minecraft/MinecraftDefinitions\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { JSONSchema7, validate } from \"json-schema\";\r\n\r\nconst JsonSchemaErrorBase = 100;\r\nconst NotCurrentFormatVersionBase = 1100;\r\n\r\nexport enum JsonSchemaItemInfoGeneratorTest {\r\n  couldNotParseJson = 1,\r\n}\r\n\r\n/**\r\n * Validates JSON files against official JSON schema definitions at public/schemas.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/json.form.json} for topic definitions\r\n */\r\nexport default class JsonSchemaItemInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"JSON\";\r\n  title = \"JSON Schema Validation\";\r\n  canAlwaysProcess = true;\r\n\r\n  constructor() {\r\n    this.loadSchema = this.loadSchema.bind(this);\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async loadSchema(uri: string) {\r\n    const res = await axios.get(Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) + uri);\r\n    return res.data;\r\n  }\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (\r\n      projectItem.primaryFile &&\r\n      projectItem.primaryFile.content &&\r\n      typeof projectItem.primaryFile.content === \"string\"\r\n    ) {\r\n      const schemaPath = projectItem.getOfficialSchemaPath();\r\n\r\n      if (schemaPath) {\r\n        let verIsCurrent = await MinecraftDefinitions.formatVersionIsCurrent(projectItem);\r\n\r\n        if (verIsCurrent) {\r\n          let schemaContents: JSONSchema7 | undefined = (await Database.getOfficialSchema(schemaPath)) as\r\n            | JSONSchema7\r\n            | undefined;\r\n\r\n          if (schemaContents) {\r\n            let content = projectItem.primaryFile.content;\r\n            let contentObj: any = undefined;\r\n\r\n            content = Utilities.fixJsonContent(content);\r\n\r\n            try {\r\n              contentObj = JSON.parse(content);\r\n              const results = validate(contentObj, schemaContents);\r\n\r\n              for (const err of results.errors) {\r\n                let errorTitle = `JSON structure error`;\r\n                let errorDetail = `(${err.property}) ${err.message}`;\r\n\r\n                // Sanitize [object Object] from error messages - the jsonschema library\r\n                // bakes toString() of object values into the message. Resolve the actual value\r\n                // from contentObj using the property path and show a truncated JSON representation.\r\n                const errMessage = err.message\r\n                  ? err.message.replace(/\\[object Object\\]/g, () => {\r\n                      try {\r\n                        // Resolve the value from the parsed content using the error's property path.\r\n                        // Paths look like \"minecraft:spawn_rules.conditions[0]\"\r\n                        let resolved: any = contentObj;\r\n                        if (err.property) {\r\n                          const parts = err.property.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\");\r\n                          for (const part of parts) {\r\n                            if (resolved == null) break;\r\n                            resolved = resolved[part];\r\n                          }\r\n                        }\r\n                        if (resolved !== undefined && resolved !== null && typeof resolved === \"object\") {\r\n                          const json = JSON.stringify(resolved);\r\n                          return json.length > 30 ? json.substring(0, 30) + \"...\" : json;\r\n                        }\r\n                        return \"(object)\";\r\n                      } catch {\r\n                        return \"(object)\";\r\n                      }\r\n                    })\r\n                  : \"\";\r\n\r\n                // Minecraft format_version fields may legitimately be either a three-number\r\n                // array (e.g., [1,0,0]) OR a string (e.g., \"1.0.2\") - both forms are valid\r\n                // across current Bedrock content. The schema validator can flag one form\r\n                // as a type mismatch against the other, producing a false-positive warning\r\n                // that we suppress below. Only the array-vs-string mismatch is suppressed;\r\n                // genuinely unexpected types (number, boolean, object, ...) still produce a\r\n                // clear \"stringified or array form expected\" warning so the creator knows.\r\n                const propForCheck = err.property ? err.property.replace(\"instance.\", \"\") : \"\";\r\n                const isFormatVersionProperty =\r\n                  propForCheck === \"format_version\" || propForCheck.endsWith(\".format_version\");\r\n                const isTypeMismatch = !!errMessage && errMessage.includes(\"is not of a type\");\r\n\r\n                if (isFormatVersionProperty && isTypeMismatch) {\r\n                  // Resolve the actual value of format_version so we can decide whether the\r\n                  // type-mismatch is a benign array<->string mix or a genuinely wrong type.\r\n                  // Use the stripped property path (without \"instance.\" prefix) so the\r\n                  // walk actually finds the value in `contentObj` \u2014 otherwise resolution\r\n                  // always fails and every format_version produces a false-positive\r\n                  // \"Version format needs updating\" warning.\r\n                  let formatVersionValue: any = undefined;\r\n                  try {\r\n                    let resolved: any = contentObj;\r\n                    if (propForCheck) {\r\n                      const parts = propForCheck.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\");\r\n                      for (const part of parts) {\r\n                        if (resolved == null) break;\r\n                        resolved = resolved[part];\r\n                      }\r\n                    }\r\n                    formatVersionValue = resolved;\r\n                  } catch {\r\n                    // ignore - fall through to schema error reporting\r\n                  }\r\n\r\n                  const isStringForm = typeof formatVersionValue === \"string\";\r\n                  const isArrayForm =\r\n                    Array.isArray(formatVersionValue) &&\r\n                    formatVersionValue.every((v) => typeof v === \"number\");\r\n\r\n                  if (isStringForm || isArrayForm) {\r\n                    // Both array and string forms are acceptable for format_version - skip.\r\n                    continue;\r\n                  }\r\n\r\n                  // Truly unexpected type (number, boolean, object, null, ...). Surface a\r\n                  // targeted warning instead of the generic \"is not of a type\" message.\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.warning,\r\n                      this.id,\r\n                      JsonSchemaErrorBase + projectItem.itemType,\r\n                      `Version format needs updating`,\r\n                      projectItem,\r\n                      `The \"format_version\" value should be a version string (e.g. \"1.21.0\") or a three-number array (e.g. [1, 21, 0]).`\r\n                    )\r\n                  );\r\n                  continue;\r\n                }\r\n\r\n                if (\r\n                  err.property &&\r\n                  err.property.includes(\"version\") &&\r\n                  errMessage &&\r\n                  errMessage.includes(\"object value found\") &&\r\n                  errMessage.includes(\"string is required\")\r\n                ) {\r\n                  // Bedrock manifest \"version\" fields (header.version, header.min_engine_version,\r\n                  // modules[].version, dependencies[].version) accept BOTH a three-number array\r\n                  // (e.g. [1, 4, 12]) and a three-number triplet string (e.g. \"1.4.12\") \u2014 but the\r\n                  // accepted form depends on the manifest's top-level `format_version`:\r\n                  //\r\n                  //   format_version 1 / 2  \u2192 array form is the canonical/required form.\r\n                  //                           String form is invalid; fail loudly.\r\n                  //   format_version 3+     \u2192 string form \"1.4.12\" is the modern/recommended form.\r\n                  //                           Array form still works but the schema flags it; we\r\n                  //                           emit a recommendation (not a misleading \"wrong type\").\r\n                  //\r\n                  // Resolve the value AND the manifest's top-level format_version, then decide.\r\n                  let versionValue: any = undefined;\r\n                  try {\r\n                    let resolved: any = contentObj;\r\n                    if (err.property) {\r\n                      const parts = err.property.replace(\"instance.\", \"\").replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\");\r\n                      for (const part of parts) {\r\n                        if (resolved == null || part === \"\") break;\r\n                        resolved = resolved[part];\r\n                      }\r\n                    }\r\n                    versionValue = resolved;\r\n                  } catch {\r\n                    // ignore - fall through to generic structure issue handling\r\n                  }\r\n\r\n                  const isStringForm = typeof versionValue === \"string\";\r\n                  const isThreeNumberArray =\r\n                    Array.isArray(versionValue) &&\r\n                    versionValue.length === 3 &&\r\n                    versionValue.every((v) => typeof v === \"number\");\r\n\r\n                  // Top-level manifest format_version (NOT to be confused with header.version).\r\n                  // When non-numeric or absent, treat as legacy (1/2) to keep the conservative path.\r\n                  const manifestFormatVersion =\r\n                    typeof contentObj?.format_version === \"number\" ? contentObj.format_version : undefined;\r\n\r\n                  if (manifestFormatVersion !== undefined && manifestFormatVersion >= 3) {\r\n                    // Modern manifest: string form is recommended.\r\n                    if (isStringForm) {\r\n                      // Already in modern form \u2014 fully correct, suppress.\r\n                      continue;\r\n                    }\r\n                    if (isThreeNumberArray) {\r\n                      // Valid legacy form on a modern manifest \u2014 emit a RECOMMENDATION (not error)\r\n                      // to upgrade. This is safe to follow and matches the manifest spec.\r\n                      const propPath = err.property.replace(\"instance.\", \"\");\r\n                      const recommended = `\"${versionValue[0]}.${versionValue[1]}.${versionValue[2]}\"`;\r\n                      items.push(\r\n                        new ProjectInfoItem(\r\n                          InfoItemType.recommendation,\r\n                          this.id,\r\n                          JsonSchemaErrorBase + projectItem.itemType,\r\n                          `Version can be upgraded to string form`,\r\n                          projectItem,\r\n                          `In manifest format_version ${manifestFormatVersion}, \"${propPath}\" can be expressed as the string ${recommended} instead of the array [${versionValue.join(\", \")}]. Both work, but the string form is the modern convention.`\r\n                        )\r\n                      );\r\n                      continue;\r\n                    }\r\n                  } else {\r\n                    // Legacy manifest (format_version 1/2): array form is required.\r\n                    if (isThreeNumberArray) {\r\n                      // Correct \u2014 suppress the false-positive schema warning.\r\n                      continue;\r\n                    }\r\n                    if (isStringForm) {\r\n                      // Genuinely wrong: legacy manifest with a string version. Tell the truth.\r\n                      const propPath = err.property.replace(\"instance.\", \"\");\r\n                      items.push(\r\n                        new ProjectInfoItem(\r\n                          InfoItemType.warning,\r\n                          this.id,\r\n                          JsonSchemaErrorBase + projectItem.itemType,\r\n                          `Version format incompatible with manifest format_version`,\r\n                          projectItem,\r\n                          `Manifest format_version ${manifestFormatVersion ?? \"(unset)\"} requires \"${propPath}\" to be an array like [1, 0, 0], not the string \"${versionValue}\". Either change the value to the array form OR upgrade the top-level \"format_version\" to 3 to use the string form.`\r\n                        )\r\n                      );\r\n                      continue;\r\n                    }\r\n                  }\r\n\r\n                  // Truly unexpected type (object, boolean, null, etc.). Surface a non-misleading\r\n                  // warning that does NOT push the user toward the wrong form.\r\n                  errorTitle = `Version format unrecognized`;\r\n                  errorDetail = `The \"${err.property.replace(\"instance.\", \"\")}\" value is not in a recognized format. Use a three-number array like [1, 0, 0] (manifest format_version 1/2) or a three-number string like \"1.0.0\" (manifest format_version 3+).`;\r\n                } else if (errMessage && errMessage.includes(\"is not one of enum values\")) {\r\n                  // Make enum errors friendlier\r\n                  const propName = err.property ? err.property.replace(\"instance.\", \"\") : \"a field\";\r\n                  errorTitle = `Invalid value`;\r\n                  errorDetail = `The value for \"${propName}\" isn't recognized. Check for typos or see the documentation for valid options.`;\r\n                } else if (errMessage && errMessage.includes(\"requires property\")) {\r\n                  // Make required property errors friendlier\r\n                  const match = errMessage.match(/requires property \"([^\"]+)\"/);\r\n                  const missingProp = match ? match[1] : \"a required field\";\r\n                  errorTitle = `Missing required field`;\r\n                  errorDetail = `This item is missing the \"${missingProp}\" field, which is needed for it to work properly.`;\r\n                } else if (errMessage && errMessage.includes(\"is not of a type\")) {\r\n                  // Make type mismatch errors friendlier\r\n                  const propName = err.property ? err.property.replace(\"instance.\", \"\") : \"a field\";\r\n                  errorTitle = `Wrong value type`;\r\n                  errorDetail = `The value for \"${propName}\" is the wrong type. ${errMessage.includes(\"string\") ? \"It should be text.\" : errMessage.includes(\"number\") ? \"It should be a number.\" : errMessage.includes(\"boolean\") ? \"It should be true or false.\" : \"Check the expected format.\"}`;\r\n                } else {\r\n                  // General case - still improve the property path display\r\n                  const propName = err.property ? err.property.replace(\"instance.\", \"\") : \"\";\r\n                  errorTitle = `Structure issue`;\r\n                  errorDetail = propName ? `In \"${propName}\": ${errMessage}` : errMessage || \"Unexpected structure\";\r\n                }\r\n\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.warning,\r\n                    this.id,\r\n                    JsonSchemaErrorBase + projectItem.itemType,\r\n                    errorTitle,\r\n                    projectItem,\r\n                    errorDetail\r\n                  )\r\n                );\r\n              }\r\n            } catch (e: any) {\r\n              let errorMess: any = e;\r\n\r\n              if (e.message) {\r\n                errorMess = e.message;\r\n              }\r\n\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  JsonSchemaItemInfoGeneratorTest.couldNotParseJson,\r\n                  \"This file has a syntax error and can't be read as JSON. Check for missing commas, brackets, or quotes. Details: \" +\r\n                    errorMess,\r\n                  projectItem\r\n                )\r\n              );\r\n            }\r\n\r\n            if (contentObj) {\r\n            }\r\n          }\r\n        } else {\r\n          let fvStr = \"\";\r\n\r\n          const fv = await MinecraftDefinitions.getFormatVersion(projectItem);\r\n\r\n          if (fv) {\r\n            fvStr = \" (is at \" + fv.join(\".\") + \")\";\r\n          }\r\n\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              NotCurrentFormatVersionBase + projectItem.itemType,\r\n              ProjectItemUtilities.getDescriptionForType(projectItem.itemType) +\r\n                \" is not at a current format version\" +\r\n                fvStr,\r\n              projectItem\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "import { PackType } from \"../../../minecraft/Pack\";\r\n\r\nexport type PackageType = PackType | \"WorldTemplate\";\r\n\r\nconst SharedBPRPExtensions = [\r\n  \".json\",\r\n  \".txt\",\r\n  \".lang\",\r\n  \".material\",\r\n  \".mcfunction\",\r\n  \".nbt\",\r\n  \".png\",\r\n  \".tga\",\r\n  \".jpg\",\r\n  \".jpeg\",\r\n  \".hdr\",\r\n  \".wav\",\r\n  \".ogg\",\r\n  \".fsb\",\r\n  \".mcstructure\",\r\n] as const;\r\n\r\nexport const AllowedExtensionsByType: Record<PackageType, Set<string> | \"*\"> = {\r\n  [PackType.resource]: new Set([...SharedBPRPExtensions]),\r\n  [PackType.behavior]: new Set([...SharedBPRPExtensions, \".js\", \".ts\"]),\r\n  [PackType.skin]: new Set([\".json\", \".lang\", \".png\", \".tga\", \".jpg\", \".jpeg\", \".mcstructure\"]),\r\n  [PackType.persona]: new Set([\".json\", \".lang\", \".png\", \".tga\", \".mcstructure\"]),\r\n  [PackType.design]: \"*\",\r\n  WorldTemplate: \"*\",\r\n} as const;\r\n\r\nconst SharedBPRPBlockedFiles = [\r\n  \"font/emoticons.json\",\r\n  \"credits/end.txt\",\r\n  \"items_client.json\",\r\n  \"items_offsets_clients.json\",\r\n  \"texts/languages_names.json\",\r\n  \"/shaders\",\r\n  \"ui/mcoin.png\",\r\n] as const;\r\n\r\n/* \r\n  In theory you would want to exclude these when handling \"SystemResourcePacks\"\r\n  but that seems to be more of a marketplace concept that isn't handled in mctools\r\n*/\r\nconst NonSystemResourceBlockedFiles = [\"Contents.json\"];\r\n\r\nexport const BlockedFilesByType: Record<PackageType, Set<string>> = {\r\n  [PackType.resource]: new Set([...SharedBPRPBlockedFiles, ...NonSystemResourceBlockedFiles]),\r\n  [PackType.behavior]: new Set([...SharedBPRPBlockedFiles, ...NonSystemResourceBlockedFiles]),\r\n  [PackType.skin]: new Set([\"ui/mcoin.png\", \"/contents.json\"]),\r\n  [PackType.persona]: new Set([]),\r\n  [PackType.design]: new Set([]),\r\n  WorldTemplate: new Set([\"ui/mcoin.png\", \"/contents.json\"]),\r\n} as const;\r\n", "import Project from \"../../app/Project\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\nimport { resultFromTest, TestDefinition } from \"../tests/TestDefinition\";\r\nimport { getWorldTemplates } from \"../../app/ProjectItemUtilities\";\r\nimport { AllowedExtensionsByType, BlockedFilesByType, PackageType } from \"./data/ForbiddenFiles\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\n\r\nenum ForbiddenTest {\r\n  FailedToReadFile = \"FailedToReadFile\",\r\n  ExtNotInAllowList = \"ExtNotInAllowList\",\r\n  InvalidFileName = \"InvalidFileName\",\r\n  ContainsInvalidCharacter = \"ContainsInvalidCharacter\",\r\n}\r\n\r\nconst ForbiddenTests: Record<ForbiddenTest, TestDefinition> = {\r\n  FailedToReadFile: { id: 101, title: \"Failed To Read File\" },\r\n  ExtNotInAllowList: { id: 102, title: \"File Does Not Have Allowed Extension\" },\r\n  InvalidFileName: { id: 103, title: \"File Name Is Blocked\" },\r\n  ContainsInvalidCharacter: { id: 104, title: \"File Name Contains Invalid Character\" },\r\n} as const;\r\n\r\n/**\r\n * Validates files against forbidden file lists and allowed extensions.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/forbfile.form.json} for topic definitions\r\n */\r\nexport default class CheckForbiddenFilesGenerator implements IProjectInfoGenerator {\r\n  id: string = \"FORBFILE\";\r\n  title: string = \"Forbidden Files\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const packs = project.packs.map((pack) => [pack.getPackItems(), pack.packType] as const);\r\n    const templates = getWorldTemplates(project.items).map((template) => [template.items, \"WorldTemplate\"] as const);\r\n\r\n    const packages = [...packs, ...templates];\r\n\r\n    const results = await Promise.all(packages.map(([items, type]) => this.validateItemPackage(items, type)));\r\n\r\n    return results.flat();\r\n  }\r\n\r\n  private async validateItemPackage(items: readonly ProjectItem[], type: PackageType): Promise<ProjectInfoItem[]> {\r\n    // I'm avoiding reading (\"ensuring\") the whole file, we just need the path, we do need to extract the extension though\r\n    const files = items.map((item) => [item, \".\" + StorageUtilities.getTypeFromName(item.name)] as const);\r\n    const fileResults = files.flatMap(([item, ext]) => this.resultsForFile(type, item, ext));\r\n\r\n    return fileResults;\r\n  }\r\n\r\n  private resultsForFile(type: PackageType, item: ProjectItem, ext: string) {\r\n    const results = [];\r\n\r\n    const allowedExts = AllowedExtensionsByType[type];\r\n    const isFolder = item.projectPath?.endsWith(\"/\");\r\n    if (!isFolder && allowedExts !== \"*\" && !allowedExts.has(ext)) {\r\n      results.push(resultFromTest(ForbiddenTests.ExtNotInAllowList, { id: this.id, item, data: ext }));\r\n    }\r\n\r\n    if (BlockedFilesByType[type].has(item.name)) {\r\n      results.push(resultFromTest(ForbiddenTests.InvalidFileName, { id: this.id, item }));\r\n    }\r\n\r\n    if (item.projectPath?.includes(\"$\")) {\r\n      results.push(resultFromTest(ForbiddenTests.ContainsInvalidCharacter, { id: this.id, item }));\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  summarize() {}\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport { resultFromTest, TestDefinition } from \"../tests/TestDefinition\";\r\n\r\nconst MaxOrphanFileResults = 5;\r\n\r\nenum CheckIntegrityTest {\r\n  OrphanedFile = \"OrphanedFile\",\r\n  UnexpectedManifest = \"UnexpectedManifest\",\r\n}\r\n\r\nconst CheckIntegrityTests: Record<CheckIntegrityTest, TestDefinition> = {\r\n  OrphanedFile: {\r\n    id: 101,\r\n    title: \"Extraneous Files Or Folder\",\r\n    defaultMessage: \"Project contains extraneous file or folder\",\r\n  },\r\n  UnexpectedManifest: {\r\n    id: 102,\r\n    title: \"Unexpected Manifest Structure\",\r\n    defaultMessage: \"Pack has an unexpected structure, multiple manifests detected. Nested manifests are not allowed.\",\r\n  },\r\n};\r\n\r\n/**\r\n * Validates project structure integrity including orphaned files and nested manifests.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/prjint.form.json} for topic definitions\r\n */\r\nexport default class CheckProjectIntegrityGenerator implements IProjectInfoGenerator {\r\n  id: string = \"PRJINT\";\r\n  title: string = \"Project Integrity\";\r\n  canAlwaysProcess = true;\r\n\r\n  generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const orphanResults = this.checkOrphanedFiles(project);\r\n    const manifestResults = this.checkNestedManifests(project);\r\n\r\n    const results = [...orphanResults, ...manifestResults];\r\n    return Promise.resolve(results);\r\n  }\r\n\r\n  private checkOrphanedFiles(project: Project) {\r\n    //limit items to avoid spam, then get results\r\n    const results = project.unknownFiles\r\n      .slice(0, MaxOrphanFileResults)\r\n      .map((file) => resultFromTest(CheckIntegrityTests.OrphanedFile, { id: this.id, data: file.extendedPath }));\r\n\r\n    return results;\r\n  }\r\n\r\n  private checkNestedManifests(project: Project): ProjectInfoItem[] {\r\n    const results = project.packs\r\n      // get all manifests within each pack\r\n      .map((pack) => [pack, pack.getPackItems().filter((item) => item.name === \"manifest.json\")] as const)\r\n      // more than one manifest indicates an issue\r\n      .filter(([_pack, manifests]) => manifests.length > 1)\r\n      // get results\r\n      .map(([pack]) => resultFromTest(CheckIntegrityTests.UnexpectedManifest, { id: this.id, data: pack.name }));\r\n\r\n    return results;\r\n  }\r\n\r\n  summarize() {}\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/****\r\n *\r\n * separates an single array into an array of successes and an array of fails\r\n * success is based on the truthiness of an predicate function\r\n *\r\n * successes are the first value of the return tuple\r\n *****/\r\nexport function filterAndSeparate<TItem>(items: TItem[], predicate: (item: TItem) => boolean) {\r\n  const truthy: TItem[] = [];\r\n  const falsey: TItem[] = [];\r\n\r\n  for (const item of items) {\r\n    if (predicate(item)) {\r\n      truthy.push(item);\r\n    } else {\r\n      falsey.push(item);\r\n    }\r\n  }\r\n\r\n  return [truthy, falsey] as const;\r\n}\r\n\r\n/*\r\n  from an array of items, returns of all duplicates found\r\n*/\r\nexport function findDuplicates<TItem>(items: TItem[]) {\r\n  return items.filter((item, index) => items.indexOf(item) !== index);\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport { tryEnsureFiles } from \"../../app/ProjectItemUtilities\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport { resultFromTest, TestDefinition } from \"../tests/TestDefinition\";\r\nimport { filterAndSeparate } from \"../../core/ArrayUtilities\";\r\n\r\nenum CheckBetaTest {\r\n  UsingBetaFeatures = \"UsingBetaFeatures\",\r\n  FailedToParseJson = \"FailedToParseJson\",\r\n  FailedToReadFile = \"FailedToReadFile\",\r\n}\r\n\r\nconst CheckBetaTests: Record<CheckBetaTest, TestDefinition> = {\r\n  FailedToReadFile: { id: 101, title: \"Failed to read file\" },\r\n  FailedToParseJson: { id: 102, title: \"Failed to parse Json\", defaultMessage: \"Failed to parse json in file\" },\r\n  UsingBetaFeatures: { id: 103, title: \"Using beta features flag in custom definitions is not allowed\" },\r\n};\r\n\r\nconst JsonTypesToRead = new Set([\r\n  ProjectItemType.behaviorPackManifestJson,\r\n  ProjectItemType.entityTypeBehavior,\r\n  ProjectItemType.blockTypeBehavior,\r\n  ProjectItemType.itemTypeBehavior,\r\n]);\r\n\r\n/**\r\n * Validates that beta features flags are not used in custom definitions.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/cbfg.form.json} for topic definitions\r\n */\r\nexport default class CheckBetaFeaturesGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CBFG\";\r\n  title: string = \"Beta Features\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items = project.getItemsCopy();\r\n\r\n    const [readJsonItems, failedItems] = await tryEnsureFiles(items, (item) => JsonTypesToRead.has(item.itemType));\r\n\r\n    const failedReadResults = failedItems.map((item) =>\r\n      resultFromTest(CheckBetaTests.FailedToReadFile, { id: this.id, item })\r\n    );\r\n\r\n    const jsonObjects = await Promise.all(\r\n      readJsonItems.map(\r\n        async (item) => [item, item.primaryFile && (await StorageUtilities.getJsonObject(item.primaryFile))] as const\r\n      )\r\n    );\r\n\r\n    const [parsedJson, failedToParse] = filterAndSeparate(jsonObjects, ([_item, json]) => !!json);\r\n\r\n    const jsonParseResults = failedToParse\r\n      .map(([item]) => ({ id: this.id, item, data: item.primaryFile?.name }))\r\n      .map((testData) => resultFromTest(CheckBetaTests.FailedToParseJson, testData));\r\n\r\n    const useBetaResults = parsedJson\r\n      .filter(([, json]) => json.use_beta_features === true)\r\n      .map(([item]) => resultFromTest(CheckBetaTests.UsingBetaFeatures, { id: this.id, item }));\r\n\r\n    return [...failedReadResults, ...jsonParseResults, ...useBetaResults];\r\n  }\r\n\r\n  summarize(): void {}\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport Project from \"../../app/Project\";\r\nimport MCWorld from \"../../minecraft/MCWorld\";\r\nimport WorldLevelDat from \"../../minecraft/WorldLevelDat\";\r\n\r\nexport enum CheckExperimentalFlagInfoGeneratorTest {\r\n  flagIsOrWasTrue = 101,\r\n  levelDatNotFound = 102,\r\n  worldNotFound = 103,\r\n}\r\n\r\n/***********\r\n * Generator for Checking Experimental Flag for world\r\n *\r\n * Will ensure:\r\n *  * experimental flag is false and has always been false or null\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/expflag.form.json} for topic definitions\r\n */\r\n\r\nexport default class CheckExperimentalFlagInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"EXPFLAG\";\r\n  title = \"Experimental Flags\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.experimentalFlagIsOrWasTrue = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckExperimentalFlagInfoGeneratorTest.flagIsOrWasTrue\r\n    );\r\n    info.levelDatNotFound = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckExperimentalFlagInfoGeneratorTest.levelDatNotFound\r\n    );\r\n    info.worldNotFound = infoSet.getSummedDataValue(this.id, CheckExperimentalFlagInfoGeneratorTest.worldNotFound);\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const projItems = project.getItemsCopy();\r\n\r\n    for (const item of projItems) {\r\n      if (\r\n        item.itemType !== ProjectItemType.MCWorld &&\r\n        item.itemType !== ProjectItemType.MCTemplate &&\r\n        item.itemType !== ProjectItemType.worldFolder &&\r\n        item.itemType !== ProjectItemType.levelDat &&\r\n        item.itemType !== ProjectItemType.levelDatOld\r\n      ) {\r\n        continue;\r\n      }\r\n\r\n      let levelDat = undefined;\r\n\r\n      if (\r\n        item.itemType === ProjectItemType.MCWorld ||\r\n        item.itemType === ProjectItemType.MCTemplate ||\r\n        item.itemType === ProjectItemType.worldFolder\r\n      ) {\r\n        const mcworld = await MCWorld.ensureOnItem(item);\r\n\r\n        if (!mcworld) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckExperimentalFlagInfoGeneratorTest.worldNotFound,\r\n              \"Could not load world.\",\r\n              item\r\n            )\r\n          );\r\n          continue;\r\n        }\r\n\r\n        await mcworld.loadMetaFiles();\r\n\r\n        if (!mcworld.levelData) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckExperimentalFlagInfoGeneratorTest.levelDatNotFound,\r\n              \"Level.dat not found in a broader world file.\",\r\n              item\r\n            )\r\n          );\r\n          continue;\r\n        }\r\n\r\n        levelDat = mcworld.levelData;\r\n      } else if (item.itemType === ProjectItemType.levelDat || item.itemType === ProjectItemType.levelDatOld) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        if (item.primaryFile && item.primaryFile.content && item.primaryFile.content instanceof Uint8Array) {\r\n          levelDat = new WorldLevelDat();\r\n          levelDat.loadFromNbtBytes(item.primaryFile.content);\r\n        }\r\n      }\r\n\r\n      if (levelDat && (levelDat.experimentalGameplay === true || levelDat.experimentsEverUsed === true)) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            CheckExperimentalFlagInfoGeneratorTest.flagIsOrWasTrue,\r\n            \"Experimental gameplay is or was enabled in this world. Shareable content should not use experimental features.\",\r\n            item\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport Project from \"../../app/Project\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\n\r\nexport enum CheckFeatureDeprecationInfoGeneratorTest {\r\n  deprecatedBlockOverride = 101,\r\n  deprecatedTerrainTexture = 102,\r\n  deprecatedTexture = 103,\r\n  jsonParseError = 104,\r\n}\r\n\r\nconst DEPRECATED_BLOCKS = [\"fletching_table\", \"smithing_table\"];\r\n\r\nconst DEPRECATED_TEXTURES = [\r\n  \"smithing_table_top.png\",\r\n  \"smithing_table_side1.png\",\r\n  \"smithing_table_side2.png\",\r\n  \"fletcher_table_top.png\",\r\n  \"fletcher_table_side1.png\",\r\n  \"fletcher_table_side2.png\",\r\n];\r\n\r\nconst DEPRECATED_TEXTURE_ENTRIES = [\r\n  \"smithing_table_top\",\r\n  \"smithing_table_side_a\",\r\n  \"smithing_table_side_b\",\r\n  \"fletching_table_top\",\r\n  \"fletching_table_side1\",\r\n  \"fletching_table_side2\",\r\n];\r\n\r\n/***********\r\n * Generator for Checking Feature Deprecation\r\n *\r\n * Will check:\r\n *  * blocks.json for deprecated block overrides (fletching_table, smithing_table)\r\n *  * terrain_texture.json for deprecated texture entries\r\n *  * textures/blocks/ folder for deprecated textures\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/checkfeaturedeprecation.form.json} for topic definitions\r\n */\r\n\r\nexport default class CheckFeatureDeprecationInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"CHECKFEATUREDEPRECATION\";\r\n  title = \"Feature Deprecation\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.deprecatedBlockOverride = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckFeatureDeprecationInfoGeneratorTest.deprecatedBlockOverride\r\n    );\r\n\r\n    info.deprecatedTerrainTexture = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckFeatureDeprecationInfoGeneratorTest.deprecatedTerrainTexture\r\n    );\r\n\r\n    info.deprecatedTexture = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckFeatureDeprecationInfoGeneratorTest.deprecatedTexture\r\n    );\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const projItems = project.getItemsCopy();\r\n\r\n    for (const item of projItems) {\r\n      if (item.name === \"blocks.json\") {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        if (!item.primaryFile) {\r\n          continue;\r\n        }\r\n\r\n        if (!item.primaryFile.isContentLoaded) {\r\n          await item.primaryFile.loadContent();\r\n        }\r\n\r\n        const content = item.primaryFile.content;\r\n        if (!content || typeof content !== \"string\") {\r\n          continue;\r\n        }\r\n\r\n        try {\r\n          const parsedContent = StorageUtilities.getJsonObject(item.primaryFile);\r\n          if (parsedContent) {\r\n            for (const deprecatedBlock of DEPRECATED_BLOCKS) {\r\n              if (parsedContent[deprecatedBlock]) {\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.warning,\r\n                    this.id,\r\n                    CheckFeatureDeprecationInfoGeneratorTest.deprecatedBlockOverride,\r\n                    `Entity [${deprecatedBlock}] will be affected in an upcoming client update.`,\r\n                    item,\r\n                    deprecatedBlock\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        } catch (error) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckFeatureDeprecationInfoGeneratorTest.jsonParseError,\r\n              `Failed to parse JSON for entity. Error: ${error}`,\r\n              item\r\n            )\r\n          );\r\n        }\r\n      }\r\n\r\n      if (item.name === \"terrain_texture.json\") {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        if (!item.primaryFile) {\r\n          continue;\r\n        }\r\n\r\n        if (!item.primaryFile.isContentLoaded) {\r\n          await item.primaryFile.loadContent();\r\n        }\r\n\r\n        const content = item.primaryFile.content;\r\n        if (!content || typeof content !== \"string\") {\r\n          continue;\r\n        }\r\n\r\n        const parsedContent = StorageUtilities.getJsonObject(item.primaryFile);\r\n        try {\r\n          if (parsedContent) {\r\n            for (const deprecatedTexture of DEPRECATED_TEXTURE_ENTRIES) {\r\n              if (parsedContent.texture_data[deprecatedTexture]) {\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.warning,\r\n                    this.id,\r\n                    CheckFeatureDeprecationInfoGeneratorTest.deprecatedTerrainTexture,\r\n                    `Entity [${deprecatedTexture}] will be affected in an upcoming client update.`,\r\n                    item,\r\n                    deprecatedTexture\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        } catch (error) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckFeatureDeprecationInfoGeneratorTest.jsonParseError,\r\n              `Failed to parse JSON for entity. Error: ${error}`,\r\n              item\r\n            )\r\n          );\r\n        }\r\n      }\r\n\r\n      if (item.getFolder()?.name === \"blocks\") {\r\n        if (DEPRECATED_TEXTURES.includes(item.name)) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckFeatureDeprecationInfoGeneratorTest.deprecatedTexture,\r\n              `Texture [${item.name}] will be affected in an upcoming client update. Please resubmit with no modifications to this texture.`,\r\n              item,\r\n              item.name\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport Project from \"../../app/Project\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport { IGeometry } from \"../../minecraft/IModelGeometry\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\n\r\nexport enum CheckGeometryFormatInfoGeneratorTest {\r\n  restrictedPolyMeshFound = 101,\r\n  jsonParseError = 102,\r\n}\r\n\r\n/***********\r\n * Generator for Checking Geometry Format\r\n *\r\n * Will check:\r\n *  * models folder JSON files for restricted \"poly_mesh\" string if project is not first party\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/geofmt.form.json} for topic definitions\r\n */\r\n\r\nexport default class CheckGeometryFormatInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"GEOFMT\";\r\n  title = \"Geometry Format\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.restrictedPolyMeshFound = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckGeometryFormatInfoGeneratorTest.restrictedPolyMeshFound\r\n    );\r\n\r\n    info.jsonParseError = infoSet.getSummedDataValue(this.id, CheckGeometryFormatInfoGeneratorTest.jsonParseError);\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    // This restriction is only on content from a 3rd party. poly_mesh is restricted to first party content.\r\n    if (project.isMinecraftCreator === false) {\r\n      const projItems = project.getItemsCopy();\r\n\r\n      for (const item of projItems) {\r\n        if (item.itemType === ProjectItemType.modelGeometryJson) {\r\n          if (!item.loadContent) {\r\n            await item.loadContent();\r\n          }\r\n          if (!item.primaryFile) {\r\n            continue;\r\n          }\r\n\r\n          try {\r\n            const jsonData = StorageUtilities.getJsonObject(item.primaryFile);\r\n\r\n            if (jsonData && jsonData[\"minecraft:geometry\"]) {\r\n              const geometries: IGeometry[] = Array.isArray(jsonData[\"minecraft:geometry\"])\r\n                ? jsonData[\"minecraft:geometry\"]\r\n                : [jsonData[\"minecraft:geometry\"]];\r\n\r\n              for (const geometry of geometries) {\r\n                if (geometry && geometry.bones) {\r\n                  for (const bone of geometry.bones) {\r\n                    if (bone && bone.poly_mesh) {\r\n                      items.push(\r\n                        new ProjectInfoItem(\r\n                          InfoItemType.error,\r\n                          this.id,\r\n                          CheckGeometryFormatInfoGeneratorTest.restrictedPolyMeshFound,\r\n                          `Geometry bone \"${\r\n                            bone.name || \"unnamed\"\r\n                          }\" contains poly_mesh definition. This feature is not allowed!`,\r\n                          item,\r\n                          bone.name || \"unnamed bone\"\r\n                        )\r\n                      );\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          } catch (error) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CheckGeometryFormatInfoGeneratorTest.jsonParseError,\r\n                `Failed to parse JSON for geometry file. Error: ${error}`,\r\n                item\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { validateJsonAndAssert, ValidationError } from \"../../jsonschema/SchemaValidation\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport ProjectItem from \"../ProjectItem\";\r\n\r\nexport type LocalizationCatalog = {\r\n  langs: string[];\r\n};\r\n\r\nexport async function parseLocalizationCatalogFromItem(\r\n  item: ProjectItem | undefined\r\n): Promise<[null, ValidationError[]] | [LocalizationCatalog, null]> {\r\n  const file = item && (await item.loadFileContent());\r\n  const json = file && StorageUtilities.getJsonObject(file);\r\n\r\n  const [langs, errors] = validateJsonAndAssert<string[]>(json, {\r\n    type: \"array\",\r\n    items: {\r\n      type: \"string\",\r\n    },\r\n  });\r\n\r\n  if (errors) {\r\n    return [null, errors];\r\n  }\r\n\r\n  return [{ langs }, null];\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport { resultFromTest, TestDefinition } from \"../tests/TestDefinition\";\r\nimport { parseLocalizationCatalogFromItem } from \"../../app/localization/LocalizationCatalog\";\r\nimport Pack from \"../../minecraft/Pack\";\r\n\r\nconst Tests: Record<string, TestDefinition> = {\r\n  MissingLanguagesJson: { id: 101, title: \"languages.json Not Found\" },\r\n  PrimaryLangMissing: { id: 102, title: \"en_US lang code is required.\" },\r\n  FailedToParseFile: { id: 103, title: \"Failed To Parse File\" },\r\n  LangFileMissing: {\r\n    id: 104,\r\n    title: \"Lang File Missing\",\r\n    defaultMessage: \"All entries in languages.json must have corresponding .lang file.\",\r\n  },\r\n  ExtraLangFile: {\r\n    id: 105,\r\n    title: \"Lang File Without Catalog Entry\",\r\n    defaultMessage: \".lang file exists in pack but its lang code is not referenced in languages.json\",\r\n  },\r\n};\r\n\r\n/*\r\n  Checks languages.json and the various .lang files in a pack to ensure that they match\r\n\r\n  For each language in languages.json there should be a corresponding .lang file,\r\n  and each .lang file should have a corresponding entry in languages.json\r\n\r\n  There should always be en_US\r\n\r\n  @see {@link ../../../public/data/forms/mctoolsval/langfiles.form.json} for topic definitions\r\n*/\r\nexport default class CheckLangFilesGenerator implements IProjectInfoGenerator {\r\n  id: string = \"LANGFILES\";\r\n  title: string = \"Language Files\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const results = await Promise.all(project.packs.map((pack) => this.validatePack(pack)));\r\n\r\n    return results.flat();\r\n  }\r\n\r\n  async validatePack(pack: Pack) {\r\n    const items = pack.getPackItems();\r\n    const catalogItem = items.find((item) => item.itemType === ProjectItemType.languagesCatalogJson);\r\n    const langItems = items.filter((item) => item.itemType === ProjectItemType.lang);\r\n\r\n    if (!catalogItem) {\r\n      return [resultFromTest(Tests.MissingLanguagesJson, { id: this.id })];\r\n    }\r\n\r\n    const [catalog, parseErrors] = await parseLocalizationCatalogFromItem(catalogItem);\r\n    if (parseErrors) {\r\n      return parseErrors\r\n        .map((error) => ({ id: this.id, message: error.message, item: catalogItem }))\r\n        .map((data) => resultFromTest(Tests.FailedToParseFile, data));\r\n    }\r\n\r\n    if (!catalog.langs.find((lang: string) => lang === \"en_US\")) {\r\n      return [resultFromTest(Tests.PrimaryLangMissing, { id: this.id, item: catalogItem })];\r\n    }\r\n\r\n    const allLangItems = langItems.map((item) => [item, StorageUtilities.getBaseFromName(item.name)] as const);\r\n    const knownLangFileLangs = new Set(allLangItems.map(([, lang]) => lang));\r\n    const knownCatalogLangs = new Set(catalog.langs);\r\n\r\n    const langFileNotInCatalogResults = allLangItems\r\n      .filter(([, lang]) => !knownCatalogLangs.has(lang))\r\n      .map(([item]) => resultFromTest(Tests.ExtraLangFile, { id: this.id, item }));\r\n\r\n    const catalogLangNotInFile = catalog.langs\r\n      .filter((lang: string) => !knownLangFileLangs.has(lang))\r\n      .map((lang: string) => resultFromTest(Tests.LangFileMissing, { id: this.id, data: lang, item: catalogItem }));\r\n\r\n    return [...langFileNotInCatalogResults, ...catalogLangNotInFile];\r\n  }\r\n\r\n  summarize() {}\r\n}\r\n", "import { ProjectInfoSuite } from \"../IProjectInfoData\";\r\n\r\ntype SuiteConfig = {\r\n  performAddOnValidations: boolean;\r\n  performPlatformVersionValidations: boolean;\r\n  identifierOverridesAreErrors: boolean;\r\n};\r\n\r\nexport const SuiteConfigs: Record<ProjectInfoSuite, SuiteConfig> = {\r\n  [ProjectInfoSuite.cooperativeAddOn]: {\r\n    performAddOnValidations: true,\r\n    performPlatformVersionValidations: false,\r\n    identifierOverridesAreErrors: true,\r\n  },\r\n  [ProjectInfoSuite.currentPlatformVersions]: {\r\n    performAddOnValidations: false,\r\n    performPlatformVersionValidations: true,\r\n    identifierOverridesAreErrors: false,\r\n  },\r\n  [ProjectInfoSuite.sharing]: {\r\n    performAddOnValidations: false,\r\n    performPlatformVersionValidations: false,\r\n    identifierOverridesAreErrors: false,\r\n  },\r\n  [ProjectInfoSuite.sharingStrict]: {\r\n    performAddOnValidations: false,\r\n    performPlatformVersionValidations: false,\r\n    identifierOverridesAreErrors: false,\r\n  },\r\n  [ProjectInfoSuite.defaultInDevelopment]: {\r\n    performAddOnValidations: false,\r\n    performPlatformVersionValidations: false,\r\n    identifierOverridesAreErrors: false,\r\n  },\r\n} as const;\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport SemanticVersion from \"../core/versioning/SemanticVersion\";\r\n\r\nconst Versioning = {\r\n  FirstMinEngineVersionForFormatV2: new SemanticVersion(1, 13, 0),\r\n  FirstMinEngineVersionForFormatV2EDU: new SemanticVersion(1, 15, 0),\r\n  PublishedClientVersion: new SemanticVersion(1, 16, 0),\r\n  MinimumAddOnVersion: new SemanticVersion(1, 20, 60),\r\n  PublishedClientVersionEDUv1: new SemanticVersion(1, 12, 3),\r\n  PublishedClientVersionEDU: new SemanticVersion(1, 14, 0),\r\n  PublishedClientVersionEDUR17: new SemanticVersion(1, 17, 0),\r\n  MaxClientVersion: new SemanticVersion(65535, 65535, 65535),\r\n  InitialPackVersion: new SemanticVersion(1, 0, 0),\r\n} as const;\r\n\r\nexport default Versioning;\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n  search in given object for property names, returns first property name not found, or undefined if nothing found\r\n*/\r\nexport function findMissingProperty<TObject>(obj: TObject, keys: (keyof TObject)[]): keyof TObject | undefined {\r\n  return keys.find((key) => !obj[key]);\r\n}\r\n\r\n/*\r\n  search in given object for property names, returns all property names not found\r\n*/\r\nexport function allMissingProperties<TObject>(obj: TObject, keys: (keyof TObject)[]): (keyof TObject)[] {\r\n  return keys.filter((key) => !obj[key]);\r\n}\r\n\r\n/*\r\n return true if the given value is truthey, while asserting the type\r\n can be used in filters etc to remove nulls in a way the compiler accepts\r\n*/\r\nexport function notEmpty<TValue>(value: TValue | null | undefined): value is TValue {\r\n  return !!value;\r\n}\r\n\r\n// Convert a single snake_case string to camelCase at the type level\r\ntype SnakeToCamelCase<S extends string> = S extends `${infer T}_${infer U}`\r\n  ? `${Lowercase<T>}${Capitalize<SnakeToCamelCase<U>>}`\r\n  : Lowercase<S>;\r\n\r\n/*\r\n    Converts a type to a similar type, but with snake_case property names converted to camelCase\r\n    handles primitives, nested objects, arrays, and optional arrays\r\n  */\r\nexport type CamelCase<T> = {\r\n  [K in keyof T as K extends string ? SnakeToCamelCase<K> : K]: T[K] extends Array<infer U> | undefined // optional array case\r\n    ? Array<CamelCase<U>> | undefined\r\n    : T[K] extends Array<infer U> // regular array\r\n    ? Array<CamelCase<U>>\r\n    : T[K] extends object // nested object\r\n    ? CamelCase<T[K]>\r\n    : T[K];\r\n};\r\n\r\nfunction toCamelCase(str: string): string {\r\n  return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\r\n}\r\n\r\n//modifies an object such that its property names are converted from snake_case to camelCase\r\nexport function convertKeysToCamelCase(obj: any): any {\r\n  if (Array.isArray(obj)) {\r\n    return obj.map(convertKeysToCamelCase);\r\n  } else if (obj !== null && typeof obj === \"object\") {\r\n    return Object.fromEntries(\r\n      Object.entries(obj).map(([key, value]) => [toCamelCase(key), convertKeysToCamelCase(value)])\r\n    );\r\n  }\r\n  return obj;\r\n}\r\n", "import { z } from \"zod\";\r\n\r\n//Zod schemas:\r\nconst VersionSchema = z.union([z.string(), z.array(z.number())]);\r\n\r\nconst HeaderSchema = z.object({\r\n  name: z.string(),\r\n  uuid: z.string(),\r\n  version: VersionSchema,\r\n  description: z.string().optional(),\r\n  base_game_version: VersionSchema.optional(),\r\n  lock_template_options: z.boolean().optional(),\r\n  allow_random_seed: z.boolean().optional(),\r\n  min_engine_version: VersionSchema.optional(),\r\n  max_engine_version: VersionSchema.optional(),\r\n  platform_locked: z.boolean().optional(),\r\n  packScope: z.string().optional(),\r\n});\r\nconst ModuleSchema = z.array(\r\n  z.object({\r\n    type: z.string(),\r\n    uuid: z.string(),\r\n    version: VersionSchema,\r\n    description: z.string().optional(),\r\n    language: z.string().optional(),\r\n    entry: z.string().optional(),\r\n  })\r\n);\r\n\r\nconst SubpackSchema = z.array(\r\n  z.object({\r\n    folder_name: z.string(),\r\n    name: z.string(),\r\n    memory_tier: z.number().optional(),\r\n    memory_performance_tier: z.number().optional(),\r\n  })\r\n);\r\n\r\nconst DependenciesSchema = z.array(\r\n  z.object({\r\n    uuid: z.string().optional(),\r\n    module_name: z.string().optional(),\r\n    version: VersionSchema,\r\n  })\r\n);\r\n\r\nconst MetadataSchema = z.object({\r\n  authors: z.array(z.string()).optional(),\r\n  product_type: z.string().optional(),\r\n});\r\n\r\nconst SettingsSchema = z.array(\r\n  z.object({\r\n    type: z.string(),\r\n    text: z.string(),\r\n    name: z.string().optional(),\r\n    default: z.union([z.boolean(), z.number(), z.string()]).optional(),\r\n    min: z.number().optional(),\r\n    max: z.number().optional(),\r\n    step: z.number().optional(),\r\n    options: z\r\n      .array(\r\n        z.object({\r\n          name: z.string().optional(),\r\n          text: z.string().optional(),\r\n        })\r\n      )\r\n      .optional(),\r\n  })\r\n);\r\n\r\nexport const ManifestSchema = z.object({\r\n  format_version: z.number(),\r\n  header: HeaderSchema,\r\n  modules: ModuleSchema,\r\n  dependencies: DependenciesSchema.optional(),\r\n  subpacks: SubpackSchema.optional(),\r\n  capabilities: z.array(z.string()).optional(),\r\n  metadata: MetadataSchema.optional(),\r\n  settings: SettingsSchema.optional(),\r\n});\r\n\r\nexport type JsonManifest = z.infer<typeof ManifestSchema>;\r\n", "import { CamelCase, convertKeysToCamelCase } from \"../../core/ObjectUtilities\";\r\nimport { validateJsonAndAssert } from \"../../jsonschema/SchemaValidation\";\r\nimport { JsonManifest, ManifestSchema } from \"./JsonManifest\";\r\n\r\ntype Manifest = CamelCase<JsonManifest>;\r\n\r\nconst transforms = [convertKeysToCamelCase];\r\nexport const parseManifest = (json: any) => validateJsonAndAssert<Manifest>(json, ManifestSchema, transforms);\r\n\r\nexport default Manifest;\r\n", "import SemanticVersion from \"../../../core/versioning/SemanticVersion\";\r\nimport { InfoItemType } from \"../../IInfoItemData\";\r\n\r\nexport const MinDropDownOptions = 2;\r\n\r\nexport const AllowedPackScopes = new Set([\"global\", \"world\", \"any\"]);\r\n\r\nexport const AllowedCapabilities = new Set<string>([\"pbr\"]);\r\nexport const AllowedDependencyModules: Record<string, SemanticVersion> = {\r\n  \"@minecraft/server\": new SemanticVersion(1, 0, 0),\r\n  \"@minecraft/server-ui\": new SemanticVersion(1, 0, 0),\r\n};\r\nexport const TargetMevForVV = new SemanticVersion(1, 21, 120);\r\nexport const NamespaceFormat = /.+:.+/;\r\nexport const FormatVersion1 = 1;\r\nexport const FormatVersion2 = 2;\r\nexport const FormatVersion3 = 3;\r\nexport const ValidFormatVersions = new Set([FormatVersion1, FormatVersion2, FormatVersion3]);\r\nexport const WorldTemplateModuleName = \"world_template\";\r\nexport const KnownModuleTypes = new Set([\r\n  \"persona_piece\",\r\n  WorldTemplateModuleName,\r\n  \"skin_pack\",\r\n  \"data\",\r\n  \"script\",\r\n  \"resources\",\r\n]);\r\n\r\n// The mininmum min_engine_version allowed for blockbench emotes. See user story #1331327 for context\r\nexport const BlockBenchEmoteMinEngineVersion: SemanticVersion = new SemanticVersion(1, 17, 0);\r\n\r\nexport const Tests = {\r\n  InvalidFormatVersion: { id: 101, title: \"InvalidFormatVersion\" },\r\n  InvalidManifestSchema: { id: 102, title: \"Invalid Json Schema For Manifest File\" },\r\n  InvalidNumberOfManifests: {\r\n    id: 103,\r\n    title: \"Invalid Number Of Manifests\",\r\n    defaultMessage: \"Packs must have exactly one manifest\",\r\n  },\r\n  MissingHeaderProperty: {\r\n    id: 104,\r\n    title: \"Missing Header Property\",\r\n  },\r\n  HeaderPropertyRequiredV2: {\r\n    id: 105,\r\n    title: \"Header Property Required\",\r\n    defaultMessage: \"Header property is required for format version 2 and above\",\r\n  },\r\n  MinEngineVersionTooHigh: {\r\n    id: 106,\r\n    title: \"Min Engine Version Too High For Format Version 1\",\r\n    defaultMessage: `[min_engine_version] is too high. To use a higher version, you need to use [format_version] [${FormatVersion2}]`,\r\n  },\r\n  InvalidPackScope: {\r\n    id: 107,\r\n    title: \"InvalidPackScope\",\r\n    defaultMessage: `pack_scope must be one of [${[...AllowedPackScopes].join(\", \")}]`,\r\n  },\r\n  TooManyWorldTemplates: {\r\n    id: 108,\r\n    title: \"More Than 1 World Templates\",\r\n    defaultMessage: \"manifest.modules can have only 1 world_template module\",\r\n  },\r\n  InvalidModuleType: {\r\n    id: 109,\r\n    title: \"Invalid Module Type\",\r\n  },\r\n  DuplicateId: {\r\n    id: 110,\r\n    title: \"Duplicate Id Found\",\r\n    defaultMessage: \"Duplicate UUID found. All UUIDs must be unique\",\r\n  },\r\n  InvalidId: {\r\n    id: 111,\r\n    title: \"UUID is not valid\",\r\n  },\r\n  NoDependencyIdentifier: {\r\n    id: 112,\r\n    title: \"No Dependency Identifier\",\r\n    defaultMessage: \"Dependency is invalid, no 'module_name' or 'uuid' identifier found\",\r\n  },\r\n  MultipleDependencyIdentifier: {\r\n    id: 113,\r\n    title: \"Multiple Dependency Identifier\",\r\n    defaultMessage: \"Dependencies should be expressed by 'module_name' or UUID, not both\",\r\n  },\r\n  ModuleNameNotAllowed: {\r\n    id: 114,\r\n    title: \"Module Name Not Allowed\",\r\n  },\r\n  UnableToParseVersion: {\r\n    id: 115,\r\n    title: \"Unable To Parse Version\",\r\n  },\r\n  BelowMinVersion: {\r\n    id: 116,\r\n    title: \"Version Is Below Minimum Allowed\",\r\n  },\r\n  InvalidCapability: {\r\n    id: 117,\r\n    title: \"Invalid Capability\",\r\n  },\r\n  DuplicateSubpackFolder: {\r\n    id: 118,\r\n    title: \"Duplicate Subpack Folder\",\r\n    defaultMessage: \"Subpack folder name used twice\",\r\n  },\r\n  DuplicateSubpackName: {\r\n    id: 119,\r\n    title: \"Duplicate Subpack Name\",\r\n    defaultMessage: \"Subpack name used twice\",\r\n  },\r\n  InvalidSubpackName: {\r\n    id: 120,\r\n    title: \"Invalid Subpack Name\",\r\n  },\r\n  InvalidSubpackMemoryTier: {\r\n    id: 121,\r\n    title: \"Invalid Subpack Memory Tier\",\r\n    defaultMessage: \"Memory Tier for subpack must be greater than or equal to the minimum\",\r\n  },\r\n  MissingSettingsProperty: {\r\n    id: 122,\r\n    title: \"Manifest Settings Missing Property\",\r\n    defaultMessage: \"Property in manifest settings is missing or undefined\",\r\n  },\r\n  InvalidSettingType: {\r\n    id: 123,\r\n    title: \"Invalid Setting Type\",\r\n    defaultMessage: \"Manifest settings has invalid type property\",\r\n  },\r\n  InvalidSettingsMin: {\r\n    id: 124,\r\n    title: \"Invalid Setting Minimum\",\r\n    defaultMessage: \"Manifest min must be less max\",\r\n  },\r\n  InvalidSliderDefault: {\r\n    id: 125,\r\n    title: \"Invalid Slider Setting Default\",\r\n    defaultMessage: \"Manifest default must be less max, greather than min, and a number if type is slider\",\r\n  },\r\n  InvalidDropdownDefault: {\r\n    id: 126,\r\n    title: \"Invalid Dropdown Setting Default\",\r\n    defaultMessage: \"Default must exist in the options list\",\r\n  },\r\n  InvalidSettingsStep: {\r\n    id: 127,\r\n    title: \"Invalid Setting Step\",\r\n    defaultMessage: \"Manifest step must be greater than 0 and less than (max - min)\",\r\n  },\r\n  DuplicateSettingsName: {\r\n    id: 128,\r\n    title: \"Duplicate Settings Name\",\r\n  },\r\n  SettingsNamespaceRequired: {\r\n    id: 129,\r\n    title: \"Settings Name Requires Namespace\",\r\n    defaultMessage: \"Settings name must be in the format of a namespace and include ':'\",\r\n  },\r\n  NotEnoughSettingsOptions: {\r\n    id: 130,\r\n    title: \"Not Enough Settings Options\",\r\n    defaultMessage: `Settings dropdowns must have at least ${MinDropDownOptions} options`,\r\n  },\r\n  DuplicateOptions: {\r\n    id: 131,\r\n    title: \"Duplicate Settings Options\",\r\n    defaultMessage: `Settings dropdowns must not have duplicate options`,\r\n  },\r\n  InvalidBaseGameVersion: {\r\n    id: 132,\r\n    title: \"Invalid Base Game Version\",\r\n    defaultMessage: `Use of [base_game_version] requires [format_version] [${FormatVersion2}] or higher`,\r\n  },\r\n  WildCardGameVersion: {\r\n    id: 133,\r\n    title: \"WildCard Game Version\",\r\n    defaultMessage: `[base_game_version] wildcards are not recommended`,\r\n    severity: InfoItemType.warning,\r\n  },\r\n  MinEngineVersionForVV: {\r\n    id: 134,\r\n    title: \"PBR Pack Min Engine Version\",\r\n    defaultMessage: `Packs that support PBR must have a minimum min_engine_version of at least ${TargetMevForVV.asString()}`,\r\n    severity: InfoItemType.error,\r\n  },\r\n  HasPBRFilesButNoManifestCapability: {\r\n    id: 135,\r\n    title: \"Has Vibrant Visuals Enhanced Files But No Manifest Capability\",\r\n    defaultMessage: `Packs that contain PBR related files must declare the \"pbr\" capability in the manifest`,\r\n    severity: InfoItemType.error,\r\n  },\r\n} as const;\r\n", "import Project from \"../../../app/Project\";\r\nimport ProjectItem from \"../../../app/ProjectItem\";\r\nimport Versioning from \"../../../app/Versioning\";\r\nimport { filterAndSeparate, findDuplicates } from \"../../../core/ArrayUtilities\";\r\nimport ContentIndex from \"../../../core/ContentIndex\";\r\nimport { findMissingProperty, notEmpty } from \"../../../core/ObjectUtilities\";\r\nimport Utilities from \"../../../core/Utilities\";\r\nimport SemanticVersion from \"../../../core/versioning/SemanticVersion\";\r\nimport { PackType } from \"../../../minecraft/Pack\";\r\nimport IProjectInfoGenerator from \"../../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../../ProjectInfoItem\";\r\nimport { resultFromTest } from \"../../tests/TestDefinition\";\r\nimport Manifest, { parseManifest } from \"../../../minecraft/manifests/Manifest\";\r\nimport { Tests } from \"./CheckManifestData\";\r\nimport * as ValidationData from \"./CheckManifestData\";\r\nimport { ProjectItemType } from \"../../../app/IProjectItemData\";\r\n\r\ntype PackDesc = {\r\n  type?: PackType;\r\n  isWorld?: boolean;\r\n  isEDUOffer?: boolean;\r\n};\r\n\r\n/**\r\n * Validates pack manifest files for structure, required fields, and format compliance.\r\n *\r\n * @see {@link ../../../../public/data/forms/mctoolsval/chkmanif.form.json} for topic definitions\r\n */\r\nexport default class CheckManifestGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CHKMANIF\";\r\n  title: string = \"Manifest Validation\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const packs = project.packs;\r\n\r\n    const invalidManifests = packs\r\n      .filter((pack) => {\r\n        const manifests = pack.getPackItems().filter((item) => item.name === \"manifest.json\");\r\n        return manifests.length === 0 || manifests.length > 1;\r\n      })\r\n      .map(() => resultFromTest(Tests.InvalidNumberOfManifests, { id: this.id }));\r\n\r\n    if (invalidManifests.length > 0) {\r\n      return invalidManifests;\r\n    }\r\n\r\n    const packManifests = packs.map((pack) => [pack.getManifest(), pack] as const);\r\n    const worldManifests = project.items\r\n      .filter((item) => item.itemType === ProjectItemType.worldTemplateManifestJson)\r\n      .map<[ProjectItem, PackDesc]>((manifest) => [manifest, { isWorld: true }]);\r\n\r\n    const allManifests = [...worldManifests, ...packManifests];\r\n\r\n    const results = await Promise.all(allManifests.map(([desc, manifest]) => this.validateManifest(desc, manifest)));\r\n    return results.flat();\r\n  }\r\n\r\n  async validateManifest(manifestItem: ProjectItem, pack: PackDesc): Promise<ProjectInfoItem[]> {\r\n    const json = await manifestItem.getContentAsJson();\r\n    const [manifest, parseErrors] = parseManifest(json);\r\n\r\n    if (parseErrors) {\r\n      return parseErrors\r\n        .map((error) => ({ id: this.id, message: error.message, item: manifestItem, data: error.propertyName }))\r\n        .map((resultData) => resultFromTest(Tests.InvalidManifestSchema, resultData));\r\n    }\r\n\r\n    const results = [\r\n      ...this.validateFormatVersion(pack, manifest, manifestItem),\r\n      ...this.validateIds(pack, manifest, manifestItem),\r\n      ...this.validateHeader(pack, manifest, manifestItem),\r\n      ...this.validateModules(pack, manifest, manifestItem),\r\n      ...this.validateDependencies(pack, manifest, manifestItem),\r\n      ...this.validateSubpacks(pack, manifest, manifestItem),\r\n      ...this.validateCapabilities(pack, manifest, manifestItem),\r\n      ...this.validateCapabilitiesForMinEngineVersionPlusPbr(pack, manifest, manifestItem),\r\n      ...this.validateSettings(pack, manifest, manifestItem),\r\n    ];\r\n\r\n    return results;\r\n  }\r\n\r\n  private validateIds(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const allIds = [\r\n      manifest.header.uuid,\r\n      ...(manifest.modules?.map((module) => module.uuid) || []),\r\n      ...(manifest.dependencies?.map((dep) => dep.uuid).filter(notEmpty) || []),\r\n    ];\r\n\r\n    const [validIds, invalidIds] = filterAndSeparate(allIds, (id) => Utilities.isValidUuid(id));\r\n\r\n    const invalidIdResults = invalidIds\r\n      .map((invalid) => ({ id: this.id, item: manifestItem, data: invalid }))\r\n      .map((data) => resultFromTest(Tests.InvalidId, data));\r\n\r\n    const dupIdResults = findDuplicates(validIds)\r\n      .map((dupId) => ({ id: this.id, item: manifestItem, data: dupId }))\r\n      .map((data) => resultFromTest(Tests.DuplicateId, data));\r\n\r\n    return [...invalidIdResults, ...dupIdResults];\r\n  }\r\n\r\n  private validateSettings(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const settings = manifest.settings;\r\n    if (!settings) {\r\n      return [];\r\n    }\r\n\r\n    const dupNameResults = findDuplicates(settings.map((setting) => setting.name))\r\n      .map((dup) => ({ id: this.id, data: dup, item: manifestItem }))\r\n      .map((data) => resultFromTest(Tests.DuplicateSettingsName, data));\r\n\r\n    const noNamespaces = settings\r\n      .filter((setting) => setting.name && ValidationData.NamespaceFormat.test(setting.name))\r\n      .map((setting) => ({ id: this.id, item: manifestItem, data: setting.name }))\r\n      .map((data) => resultFromTest(Tests.SettingsNamespaceRequired, data));\r\n\r\n    const toggles = settings.filter((setting) => setting.type === \"toggle\");\r\n    const sliders = settings.filter((setting) => setting.type === \"slider\");\r\n    const dropdowns = settings.filter((setting) => setting.type === \"dropdown\");\r\n\r\n    const knownTypes = new Set([\"label\", \"toggle\", \"slider\", \"dropdown\"]);\r\n    const invalidTypes = settings\r\n      .filter((settings) => !knownTypes.has(settings.type))\r\n      .map((settings) => ({ id: this.id, data: settings.type, item: manifestItem }))\r\n      .map((data) => resultFromTest(Tests.InvalidSettingType, data));\r\n\r\n    //note: type and text are always required, so we use the schema to validate that\r\n    //for other properties that are only conditionally required, we'll confirm post parsing\r\n\r\n    const missingPropResults = [\r\n      ...toggles\r\n        .map((toggle) => [toggle, findMissingProperty(toggle, [\"name\", \"default\"])] as const)\r\n        .filter(([, missingProperty]) => !!missingProperty)\r\n        .map(([, missingProperty]) => ({ id: this.id, item: manifestItem, data: missingProperty }))\r\n        .map((data) => resultFromTest(Tests.MissingSettingsProperty, data)),\r\n\r\n      ...sliders\r\n        .map((slider) => [slider, findMissingProperty(slider, [\"name\", \"min\", \"max\", \"step\", \"default\"])] as const)\r\n        .filter(([, missingProperty]) => !!missingProperty)\r\n        .map(([, missingProperty]) => ({ id: this.id, item: manifestItem, data: missingProperty }))\r\n        .map((data) => resultFromTest(Tests.MissingSettingsProperty, data)),\r\n\r\n      ...dropdowns\r\n        .map((dropdown) => [dropdown, findMissingProperty(dropdown, [\"name\", \"default\", \"options\"])] as const)\r\n        .filter(([, missingProperty]) => !!missingProperty)\r\n        .map(([, missingProperty]) => ({ id: this.id, item: manifestItem, data: missingProperty }))\r\n        .map((data) => resultFromTest(Tests.MissingSettingsProperty, data)),\r\n    ];\r\n\r\n    const invalidMins = sliders\r\n      // undefined values are reported by the missing property result, ignore for now\r\n      .filter((slider) => !!slider.min && !!slider.max)\r\n      // we've already filtered undefined values, '!' is safe\r\n      .filter((slider) => slider.min! > slider.max!)\r\n      .map((slider) => ({ id: this.id, item: manifestItem, data: slider.min }))\r\n      .map((data) => resultFromTest(Tests.InvalidSettingsMin, data));\r\n\r\n    const invalidDefaults = sliders\r\n      .filter((slider) => !!slider.default && !!slider.min && !!slider.max)\r\n      // we've already filtered undefined values, '!' is safe\r\n      .filter(\r\n        (slider) => typeof slider.default !== \"number\" || slider.default > slider.max! || slider.default < slider.min!\r\n      )\r\n      .map((slider) => ({ id: this.id, item: manifestItem, data: slider.default }))\r\n      .map((data) => resultFromTest(Tests.InvalidSliderDefault, data));\r\n\r\n    const invalidSteps = sliders\r\n      .filter((slider) => !!slider.step && !!slider.min && !!slider.max)\r\n      // we've already filtered undefined values, '!' is safe\r\n      .filter((slider) => slider.step! <= 0 || slider.step! > slider.max! - slider.min!)\r\n      .map((slider) => ({ id: this.id, item: manifestItem, data: slider.step }))\r\n      .map((data) => resultFromTest(Tests.InvalidSettingsStep, data));\r\n\r\n    const notEnoughOptions = dropdowns\r\n      .filter((dropdown) => !dropdown.options || dropdown.options.length < ValidationData.MinDropDownOptions)\r\n      .map(() => ({ id: this.id, item: manifestItem }))\r\n      .map((data) => resultFromTest(Tests.NotEnoughSettingsOptions, data));\r\n\r\n    const duplicateOptions = dropdowns\r\n      .flatMap((dropdown) => (dropdown.options ? findDuplicates(dropdown.options.map((opt) => opt.name)) : []))\r\n      .map((duplicate) => ({ id: this.id, item: manifestItem, data: duplicate }))\r\n      .map((data) => resultFromTest(Tests.DuplicateOptions, data));\r\n\r\n    const badDefaults = dropdowns\r\n      .filter(\r\n        (dropdown) =>\r\n          dropdown.options &&\r\n          typeof dropdown.default === \"string\" &&\r\n          dropdown.options.map((opt) => opt.name).includes(dropdown.default)\r\n      )\r\n      .map((dropdown) => ({ id: this.id, item: manifestItem, data: dropdown.default }))\r\n      .map((data) => resultFromTest(Tests.InvalidSliderDefault, data));\r\n\r\n    return [\r\n      ...noNamespaces,\r\n      ...dupNameResults,\r\n      ...invalidTypes,\r\n      ...missingPropResults,\r\n      ...invalidMins,\r\n      ...invalidDefaults,\r\n      ...invalidSteps,\r\n      ...notEnoughOptions,\r\n      ...duplicateOptions,\r\n      ...badDefaults,\r\n    ];\r\n  }\r\n\r\n  private validateCapabilitiesForMinEngineVersionPlusPbr(\r\n    pack: PackDesc,\r\n    manifest: Manifest,\r\n    manifestItem: ProjectItem\r\n  ): ProjectInfoItem[] {\r\n    let results: ProjectInfoItem[] = [];\r\n\r\n    if (manifestItem.itemType !== ProjectItemType.resourcePackManifestJson) {\r\n      return results;\r\n    }\r\n\r\n    // Check for VV files scoped to THIS pack only, not the entire project.\r\n    // A project may have multiple resource packs where only some contain PBR content.\r\n    const owningPack = manifestItem.project.packs.find(\r\n      (p) => p.projectItem.projectPath && manifestItem.projectPath?.startsWith(p.projectItem.projectPath)\r\n    );\r\n\r\n    const hasVVFilesInPack = owningPack?.hasVibrantVisualsContent() ?? false;\r\n\r\n    const capabilities = manifest.capabilities;\r\n    let hasPbr = false;\r\n\r\n    if (capabilities) {\r\n      for (const cap of capabilities) {\r\n        if (cap.toLowerCase() === \"pbr\") {\r\n          hasPbr = true;\r\n\r\n          if (manifest.header?.minEngineVersion) {\r\n            const minVersion = SemanticVersion.parse(manifest.header.minEngineVersion);\r\n            if (minVersion && minVersion.compareTo(ValidationData.TargetMevForVV) < 0) {\r\n              results.push(\r\n                resultFromTest(Tests.MinEngineVersionForVV, {\r\n                  id: this.id,\r\n                  item: manifestItem,\r\n                  data: minVersion.asString(),\r\n                })\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (hasVVFilesInPack && !hasPbr && !manifestItem.project.isVanillaEditSession) {\r\n      results.push(\r\n        resultFromTest(Tests.HasPBRFilesButNoManifestCapability, {\r\n          id: this.id,\r\n          item: manifestItem,\r\n        })\r\n      );\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private validateCapabilities(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const capabilities = manifest.capabilities;\r\n    if (!capabilities) {\r\n      return [];\r\n    }\r\n\r\n    return capabilities\r\n      .filter((capability) => !ValidationData.AllowedCapabilities.has(capability.toLowerCase()))\r\n      .map((capability) => ({ id: this.id, item: manifestItem, data: capability }))\r\n      .map((data) => resultFromTest(Tests.InvalidCapability, data));\r\n  }\r\n\r\n  private validateSubpacks(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const subpacks = manifest.subpacks;\r\n    if (!subpacks) {\r\n      return [];\r\n    }\r\n\r\n    const dupFolderResults = findDuplicates(subpacks.map((subp) => subp.folderName))\r\n      .map((folder) => ({ id: this.id, item: manifestItem, data: folder }))\r\n      .map((data) => resultFromTest(Tests.DuplicateSubpackFolder, data));\r\n\r\n    const dupNameResults = findDuplicates(subpacks.map((subp) => subp.name))\r\n      .map((name) => ({ id: this.id, item: manifestItem, data: name }))\r\n      .map((data) => resultFromTest(Tests.DuplicateSubpackName, data));\r\n\r\n    /*\r\n    Disable name checks and .memory tier checks for \r\n    const validNames = new Set(Object.values(SubpackTypes).map((type) => type.name));\r\n\r\n    const invalidNameResults = subpacks\r\n      .filter((subp) => !validNames.has(subp.name))\r\n      .map((subp) => ({ id: this.id, item: manifestItem, data: subp.name }))\r\n      .map((data) => resultFromTest(Tests.InvalidSubpackName, data));\r\n    \r\n\r\n    const invalidMemoryTierResults = subpacks\r\n      .map((subp) => [subp, SubpackTypes[subp.name]?.minTier] as const)\r\n      .filter(([, minTier]) => !!minTier)\r\n      .filter(([subp, minTier]) => subp.memoryTier < minTier)\r\n      .map(([subp]) => ({ id: this.id, item: manifestItem, data: subp.memoryTier }))\r\n      .map((data) => resultFromTest(Tests.InvalidSubpackMemoryTier, data));\r\n    */\r\n\r\n    return [...dupFolderResults, ...dupNameResults]; //, ...invalidNameResults, ...invalidMemoryTierResults];\r\n  }\r\n\r\n  private validateDependencies(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const dependencies = manifest.dependencies;\r\n    if (!dependencies) {\r\n      return [];\r\n    }\r\n\r\n    const noIdResults = dependencies\r\n      .filter((dependency) => !dependency.uuid && !dependency.moduleName)\r\n      .map(() => resultFromTest(Tests.NoDependencyIdentifier, { id: this.id, item: manifestItem }));\r\n\r\n    const multipleIdResults = dependencies\r\n      .filter((dependency) => !!dependency.uuid && !!dependency.moduleName)\r\n      .map(() => resultFromTest(Tests.MultipleDependencyIdentifier, { id: this.id, item: manifestItem }));\r\n\r\n    const allowedDependencyModulesResults = dependencies\r\n      .filter(\r\n        (dependency) => !!dependency.moduleName && !ValidationData.AllowedDependencyModules[dependency.moduleName]\r\n      )\r\n      .map((dependency) => ({ id: this.id, item: manifestItem, data: dependency.moduleName }))\r\n      .map((data) => resultFromTest(Tests.ModuleNameNotAllowed, data));\r\n\r\n    const dependencyVersions = dependencies.map((dep) => [dep, SemanticVersion.parse(dep.version)] as const);\r\n    const invalidVersionResults = dependencyVersions\r\n      .filter(([, version]) => !version)\r\n      .map(([dep]) => ({ id: this.id, item: manifestItem, data: dep.version }))\r\n      .map((data) => resultFromTest(Tests.UnableToParseVersion, data));\r\n\r\n    const versionsBelowMinResults = dependencyVersions\r\n      // we only care about dependencies that use module name, non-allowed modules are handled by a different check\r\n      .filter(\r\n        ([dep, version]) => !!dep.moduleName && !!ValidationData.AllowedDependencyModules[dep.moduleName] && !!version\r\n      )\r\n      //  '!' is safe here, we've already filtered falsey moduleNames and versions\r\n      .filter(([dep, version]) => version!.compareTo(ValidationData.AllowedDependencyModules[dep.moduleName!]) <= 0)\r\n      .map(([dep]) => resultFromTest(Tests.BelowMinVersion, { id: this.id, item: manifestItem, data: dep.version }));\r\n\r\n    return [\r\n      ...noIdResults,\r\n      ...multipleIdResults,\r\n      ...allowedDependencyModulesResults,\r\n      ...invalidVersionResults,\r\n      ...versionsBelowMinResults,\r\n    ];\r\n  }\r\n\r\n  private validateModules(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const modules = manifest.modules;\r\n\r\n    if (!modules) {\r\n      return [];\r\n    }\r\n\r\n    if (modules.filter((module) => module.type === ValidationData.WorldTemplateModuleName).length > 1) {\r\n      return [resultFromTest(Tests.TooManyWorldTemplates, { id: this.id, item: manifestItem })];\r\n    }\r\n\r\n    return modules\r\n      .filter((module) => !ValidationData.KnownModuleTypes.has(module.type))\r\n      .map((module) => resultFromTest(Tests.InvalidModuleType, { id: this.id, item: manifestItem, data: module.type }));\r\n  }\r\n\r\n  private validateHeader(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem): ProjectInfoItem[] {\r\n    const header = manifest.header;\r\n\r\n    const results = [];\r\n    const isemptyDescriptionAllowed = pack.type === PackType.skin;\r\n    if (!header.description && !isemptyDescriptionAllowed) {\r\n      results.push(\r\n        resultFromTest(Tests.MissingHeaderProperty, { id: this.id, item: manifestItem, data: \"description\" })\r\n      );\r\n    }\r\n\r\n    if (pack.isWorld) {\r\n      if (!!header.baseGameVersion && manifest.formatVersion < ValidationData.FormatVersion2) {\r\n        const data = { id: this.id, item: manifestItem, data: header.baseGameVersion };\r\n        results.push(resultFromTest(Tests.InvalidBaseGameVersion, data));\r\n      }\r\n\r\n      if (header.baseGameVersion === \"*\") {\r\n        const data = { id: this.id, item: manifestItem, data: header.baseGameVersion };\r\n        results.push(resultFromTest(Tests.WildCardGameVersion, data));\r\n      }\r\n\r\n      if (manifest.formatVersion > ValidationData.FormatVersion1 && header.lockTemplateOptions === undefined) {\r\n        const data = { id: this.id, item: manifestItem, data: \"lock_template_options\" };\r\n        results.push(resultFromTest(Tests.HeaderPropertyRequiredV2, data));\r\n      }\r\n    }\r\n\r\n    if (pack.type === PackType.resource) {\r\n      const infoItem = this.validateMinEngineVersion(\r\n        header.minEngineVersion,\r\n        pack,\r\n        manifest.formatVersion,\r\n        manifestItem\r\n      );\r\n      if (infoItem) {\r\n        results.push(infoItem);\r\n      }\r\n    }\r\n\r\n    if (header.packscope && ValidationData.AllowedPackScopes.has(header.packscope)) {\r\n      results.push(resultFromTest(Tests.InvalidPackScope, { id: this.id, item: manifestItem, data: header.packscope }));\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private validateMinEngineVersion(\r\n    mev: string | number[] | undefined,\r\n    pack: PackDesc,\r\n    formatVersion: number,\r\n    manifestItem: ProjectItem\r\n  ): ProjectInfoItem | null {\r\n    const minVersion = SemanticVersion.parse(mev);\r\n    if (!minVersion && formatVersion > ValidationData.FormatVersion1) {\r\n      const data = { id: this.id, item: manifestItem, data: \"min_engine_version\" };\r\n      return resultFromTest(Tests.HeaderPropertyRequiredV2, data);\r\n    }\r\n\r\n    const requiredVer = this.getMinimalVersionThatRequiresV2(pack.isEDUOffer === true);\r\n    if (minVersion && minVersion.compareTo(requiredVer) >= 0 && formatVersion < ValidationData.FormatVersion2) {\r\n      const data = { id: this.id, item: manifestItem, data: mev };\r\n      return resultFromTest(Tests.MinEngineVersionTooHigh, data);\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private getMinimalVersionThatRequiresV2(isEDUOffer: boolean) {\r\n    return isEDUOffer ? Versioning.FirstMinEngineVersionForFormatV2EDU : Versioning.FirstMinEngineVersionForFormatV2;\r\n  }\r\n\r\n  private validateFormatVersion(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const format = manifest.formatVersion;\r\n\r\n    if (!ValidationData.ValidFormatVersions.has(format)) {\r\n      return [resultFromTest(Tests.InvalidFormatVersion, { id: this.id, data: format })];\r\n    }\r\n\r\n    if (\r\n      !(pack.type === PackType.skin || pack.type === PackType.persona) &&\r\n      manifest.formatVersion < ValidationData.FormatVersion2\r\n    ) {\r\n      return [\r\n        resultFromTest(Tests.InvalidFormatVersion, {\r\n          id: this.id,\r\n          data: format,\r\n          message: `All new content targeting published client version must conform to format version [${ValidationData.FormatVersion2}].`,\r\n        }),\r\n      ];\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  summarize() {}\r\n}\r\n", "import ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport Project from \"../../app/Project\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoUtilities from \"../ProjectInfoUtilities\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport Utilities from \"../../core/Utilities\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\nimport BehaviorManifestDefinition from \"../../minecraft/BehaviorManifestDefinition\";\r\nimport ResourceManifestDefinition from \"../../minecraft/ResourceManifestDefinition\";\r\n\r\nexport enum CheckResourcePackDependenciesGeneratorTest {\r\n  invalidManifestJson = 101,\r\n  missingResourcePackDependency = 102,\r\n  internalProcessingError = 103,\r\n}\r\n\r\n/**\r\n * Validates resource pack dependencies in behavior pack manifests.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/rpdepends.form.json} for topic definitions\r\n */\r\nexport default class CheckResourcePackDependenciesGenerator implements IProjectInfoGenerator {\r\n  id = \"RPDEPENDS\";\r\n  title = \"Resource Pack Dependencies\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.invalidManifestJson = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckResourcePackDependenciesGeneratorTest.invalidManifestJson\r\n    );\r\n\r\n    info.missingResourcePackDependencies = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckResourcePackDependenciesGeneratorTest.missingResourcePackDependency\r\n    );\r\n\r\n    info.internalProcessingErrors = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckResourcePackDependenciesGeneratorTest.internalProcessingError\r\n    );\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const projItems = project.getItemsCopy();\r\n    const manifestDependencies: { uuid: string; manifestItem: ProjectItem }[] = [];\r\n    const availablePacks: { uuid: string; manifestItem: ProjectItem }[] = [];\r\n\r\n    // Loop through once to find and store all uuids of various packs\r\n    for (const item of projItems) {\r\n      if (\r\n        item.itemType !== ProjectItemType.resourcePackManifestJson &&\r\n        item.itemType !== ProjectItemType.behaviorPackManifestJson\r\n      ) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n\r\n      if (!item.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.primaryFile.isContentLoaded) {\r\n        await item.primaryFile.loadContent();\r\n      }\r\n\r\n      try {\r\n        if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const resourceManifest = await ResourceManifestDefinition.ensureOnFile(item.primaryFile);\r\n\r\n          if (!resourceManifest || !resourceManifest.isLoaded) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CheckResourcePackDependenciesGeneratorTest.invalidManifestJson,\r\n                ProjectInfoUtilities.getTitleFromEnum(\r\n                  CheckResourcePackDependenciesGeneratorTest,\r\n                  CheckResourcePackDependenciesGeneratorTest.invalidManifestJson\r\n                ),\r\n                item\r\n              )\r\n            );\r\n            continue;\r\n          }\r\n\r\n          if (resourceManifest.id && Utilities.isValidUuid(resourceManifest.id)) {\r\n            availablePacks.push({\r\n              uuid: resourceManifest.id,\r\n              manifestItem: item,\r\n            });\r\n          }\r\n\r\n          if (resourceManifest.dependencies) {\r\n            for (const dependency of resourceManifest.dependencies) {\r\n              if (dependency.uuid && typeof dependency.uuid === \"string\" && Utilities.isValidUuid(dependency.uuid)) {\r\n                manifestDependencies.push({\r\n                  uuid: dependency.uuid,\r\n                  manifestItem: item,\r\n                });\r\n              }\r\n            }\r\n          }\r\n        } else if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const behaviorManifest = await BehaviorManifestDefinition.ensureOnFile(item.primaryFile);\r\n\r\n          if (!behaviorManifest || !behaviorManifest.isLoaded) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CheckResourcePackDependenciesGeneratorTest.invalidManifestJson,\r\n                ProjectInfoUtilities.getTitleFromEnum(\r\n                  CheckResourcePackDependenciesGeneratorTest,\r\n                  CheckResourcePackDependenciesGeneratorTest.invalidManifestJson\r\n                ),\r\n                item\r\n              )\r\n            );\r\n            continue;\r\n          }\r\n\r\n          if (behaviorManifest.id && Utilities.isValidUuid(behaviorManifest.id)) {\r\n            availablePacks.push({\r\n              uuid: behaviorManifest.id,\r\n              manifestItem: item,\r\n            });\r\n          }\r\n        }\r\n      } catch (error) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckResourcePackDependenciesGeneratorTest.internalProcessingError,\r\n            `Error processing manifest ${item.name}: ${error}`,\r\n            item\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    // Loop through again to check if each dependency exists in available packs\r\n    for (const dependency of manifestDependencies) {\r\n      const foundPack = availablePacks.find((pack) => pack.uuid === dependency.uuid);\r\n\r\n      if (!foundPack) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckResourcePackDependenciesGeneratorTest.missingResourcePackDependency,\r\n            `Dependency with uuid [${dependency.uuid}] specified but uuid is not located in any included resource or behavior packs.`,\r\n            dependency.manifestItem\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "import ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport Project from \"../../app/Project\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport Utilities from \"../../core/Utilities\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\nimport ResourceManifestDefinition from \"../../minecraft/ResourceManifestDefinition\";\r\nimport BehaviorManifestDefinition from \"../../minecraft/BehaviorManifestDefinition\";\r\n\r\nexport enum CheckWorldPackReferencesGeneratorTest {\r\n  invalidWorldPackReferencesJson = 201,\r\n  missingWorldPackReferencesFile = 202,\r\n  invalidPackId = 203,\r\n  missingManifestVersion = 204,\r\n  invalidManifestVersion = 205,\r\n  packReferenceNotFound = 206,\r\n  internalProcessingError = 207,\r\n}\r\n\r\n/**\r\n * Validates world pack references including world_behavior_packs.json and world_resource_packs.json.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/wpackrefs.form.json} for topic definitions\r\n */\r\nexport default class CheckWorldPackReferencesGenerator implements IProjectInfoGenerator {\r\n  id = \"WPACKREFS\";\r\n  title = \"World Pack References\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.invalidWorldPackReferencesJson = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.invalidWorldPackReferencesJson\r\n    );\r\n\r\n    info.missingWorldPackReferencesFile = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.missingWorldPackReferencesFile\r\n    );\r\n\r\n    info.invalidPackIds = infoSet.getSummedDataValue(this.id, CheckWorldPackReferencesGeneratorTest.invalidPackId);\r\n\r\n    info.missingManifestVersion = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.missingManifestVersion\r\n    );\r\n\r\n    info.invalidManifestVersion = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.invalidManifestVersion\r\n    );\r\n\r\n    info.packReferencesNotFound = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.packReferenceNotFound\r\n    );\r\n\r\n    info.internalProcessingErrors = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.internalProcessingError\r\n    );\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const projItems = project.getItemsCopy();\r\n    const availablePacks: { uuid: string; manifestItem: ProjectItem }[] = [];\r\n\r\n    try {\r\n      // First, collect all available pack UUIDs from manifests\r\n      await this.collectAvailablePacks(projItems, availablePacks, items);\r\n\r\n      // Check for pack reference files\r\n      for (const item of projItems) {\r\n        if (item.itemType === ProjectItemType.resourcePackListJson) {\r\n          await this.checkPackReferences(item, availablePacks, items);\r\n        } else if (item.itemType === ProjectItemType.behaviorPackListJson) {\r\n          await this.checkPackReferences(item, availablePacks, items);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CheckWorldPackReferencesGeneratorTest.internalProcessingError,\r\n          `Internal processing error: ${error}`,\r\n          undefined\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  private async collectAvailablePacks(\r\n    projItems: ProjectItem[],\r\n    availablePacks: { uuid: string; manifestItem: ProjectItem }[],\r\n    items: ProjectInfoItem[]\r\n  ): Promise<void> {\r\n    for (const item of projItems) {\r\n      if (\r\n        item.itemType !== ProjectItemType.resourcePackManifestJson &&\r\n        item.itemType !== ProjectItemType.behaviorPackManifestJson\r\n      ) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n\r\n      if (!item.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.primaryFile.isContentLoaded) {\r\n        await item.primaryFile.loadContent();\r\n      }\r\n\r\n      try {\r\n        if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const resourceManifest = await ResourceManifestDefinition.ensureOnFile(item.primaryFile);\r\n          if (resourceManifest && resourceManifest.id && Utilities.isValidUuid(resourceManifest.id)) {\r\n            availablePacks.push({\r\n              uuid: resourceManifest.id,\r\n              manifestItem: item,\r\n            });\r\n          }\r\n        } else if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const behaviorManifest = await BehaviorManifestDefinition.ensureOnFile(item.primaryFile);\r\n          if (behaviorManifest && behaviorManifest.id && Utilities.isValidUuid(behaviorManifest.id)) {\r\n            availablePacks.push({\r\n              uuid: behaviorManifest.id,\r\n              manifestItem: item,\r\n            });\r\n          }\r\n        }\r\n      } catch (error) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.internalProcessingError,\r\n            `Error processing manifest ${item.name}: ${error}`,\r\n            item\r\n          )\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  private async checkPackReferences(\r\n    packReferencesFile: ProjectItem,\r\n    availablePacks: { uuid: string; manifestItem: ProjectItem }[],\r\n    items: ProjectInfoItem[]\r\n  ): Promise<void> {\r\n    if (!packReferencesFile.isContentLoaded) {\r\n      await packReferencesFile.loadContent();\r\n    }\r\n\r\n    if (!packReferencesFile.primaryFile) {\r\n      return;\r\n    }\r\n\r\n    if (!packReferencesFile.primaryFile.isContentLoaded) {\r\n      await packReferencesFile.primaryFile.loadContent();\r\n    }\r\n\r\n    const parsedContent = StorageUtilities.getJsonObject(packReferencesFile.primaryFile);\r\n\r\n    if (!parsedContent || !Array.isArray(parsedContent)) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CheckWorldPackReferencesGeneratorTest.invalidWorldPackReferencesJson,\r\n          `Invalid JSON format in ${packReferencesFile.name}. Expected an array of pack references.`,\r\n          packReferencesFile\r\n        )\r\n      );\r\n      return;\r\n    }\r\n\r\n    const packRefsFoundInJson: string[] = [];\r\n\r\n    // Validate each pack reference object\r\n    for (let i = 0; i < parsedContent.length; i++) {\r\n      const packRef = parsedContent[i];\r\n\r\n      if (typeof packRef !== \"object\" || packRef === null) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.invalidWorldPackReferencesJson,\r\n            `Invalid pack reference object at index ${i} in ${packReferencesFile.name}`,\r\n            packReferencesFile\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n\r\n      // Validate pack_id\r\n      if (!packRef.pack_id || typeof packRef.pack_id !== \"string\") {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.invalidPackId,\r\n            `Missing or invalid pack_id at index ${i} in ${packReferencesFile.name}`,\r\n            packReferencesFile\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n\r\n      if (!Utilities.isValidUuid(packRef.pack_id)) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.invalidPackId,\r\n            `Invalid UUID format for pack_id [${packRef.pack_id}] at index ${i} in ${packReferencesFile.name}`,\r\n            packReferencesFile\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n\r\n      // Valid pack_id found, add to list\r\n      packRefsFoundInJson.push(packRef.pack_id);\r\n\r\n      // Validate version\r\n      const versionValidation = ResourceManifestDefinition.validatePackReferenceVersion(packRef.version);\r\n      if (!versionValidation.isValid) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.invalidManifestVersion,\r\n            `${versionValidation.errorMessage} for pack_id [${packRef.pack_id}] at index ${i} in ${packReferencesFile.name}`,\r\n            packReferencesFile\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n    }\r\n\r\n    // Check if each referenced pack exists in the available packs\r\n    for (const packRef of packRefsFoundInJson) {\r\n      const foundPack = availablePacks.find((pack) => pack.uuid === packRef);\r\n\r\n      if (!foundPack) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.packReferenceNotFound,\r\n            `Pack reference [${packRef}] not found in project.`,\r\n            packReferencesFile\r\n          )\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport MCWorld from \"../minecraft/MCWorld\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport { IGeneratorOptions } from \"./ProjectInfoSet\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectUtilities, { ProjectMetaCategory } from \"../app/ProjectUtilities\";\r\n\r\nconst CUSTOM_DIMENSION_ID_START = 1000;\r\n\r\nconst VanillaIdToString: Record<number, string> = {\r\n  0: \"Overworld\",\r\n  1: \"Nether\",\r\n  2: \"The End\",\r\n};\r\n\r\nexport enum CustomDimensionWorldDataTest {\r\n  nameIdMappingTableMissing = 101,\r\n  vanillaDimensionChunkData = 102,\r\n  unclaimedDimensionMappings = 103,\r\n}\r\n\r\nexport default class CustomDimensionWorldDataInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"CDWORLDDATA\";\r\n  title = \"Custom Dimension World Data Validation\";\r\n\r\n  /**\r\n   * Per-project cache for {@link isAddOnContextForWorld}. Avoids re-running\r\n   * the (manifest-reading) meta-category detection on every world item in a\r\n   * multi-world project.\r\n   */\r\n  #addOnContextCache: WeakMap<Project, Promise<boolean>> = new WeakMap();\r\n\r\n  /**\r\n   * Rule 102 (\"Vanilla Dimension Chunk Data\") is meaningful only when the\r\n   * surrounding project is shaped like an add-on. For a standalone world\r\n   * template \u2014 or any \"general world data\" project \u2014 Overworld/Nether/End\r\n   * chunk data is normal and expected, not a defect.\r\n   *\r\n   * Delegates to the canonical {@link ProjectUtilities.getMetaCategory}, the\r\n   * shared classifier used elsewhere (e.g. {@link TextureImageInfoGenerator})\r\n   * to gate add-on-only validations. We use `getMetaCategory` rather than\r\n   * `getIsAddon` because the latter excludes any project containing world\r\n   * items \u2014 but this generator only ever runs on world items, so that check\r\n   * would always fail. `getMetaCategory` evaluates pack shape independently\r\n   * and returns `worldTemplate` (not `addOn`) when a template manifest is\r\n   * present, which gives us the correct gating for free.\r\n   *\r\n   * Result is cached per Project for the lifetime of the generator instance.\r\n   */\r\n  private async isAddOnContextForWorld(project: Project | undefined): Promise<boolean> {\r\n    if (!project) {\r\n      return false;\r\n    }\r\n\r\n    const cached = this.#addOnContextCache.get(project);\r\n    if (cached) {\r\n      return cached;\r\n    }\r\n\r\n    const promise = ProjectUtilities.getMetaCategory(project).then((cat) => cat === ProjectMetaCategory.addOn);\r\n    this.#addOnContextCache.set(project, promise);\r\n    return promise;\r\n  }\r\n\r\n  getTopicData(topicId: number) {\r\n    switch (topicId) {\r\n      case CustomDimensionWorldDataTest.nameIdMappingTableMissing:\r\n        return {\r\n          title: \"Name-ID Mapping Table Missing\",\r\n          description:\r\n            \"The LevelDB contains custom dimension chunk data but is missing the required DimensionNameIdTable key. \" +\r\n            \"This table is needed to map dimension names to IDs for correct chunk data association on load.\",\r\n        };\r\n      case CustomDimensionWorldDataTest.vanillaDimensionChunkData:\r\n        return {\r\n          title: \"Vanilla Dimension Chunk Data\",\r\n          description:\r\n            \"The LevelDB contains chunk data for vanilla dimensions (Overworld, Nether, or The End). \" +\r\n            \"Creator content must only include chunk data for custom dimensions (ID >= 1000).\",\r\n        };\r\n      case CustomDimensionWorldDataTest.unclaimedDimensionMappings:\r\n        return {\r\n          title: \"Unclaimed Dimension Mappings\",\r\n          description:\r\n            \"The DimensionNameIdTable contains name-ID mappings for dimensions that have no corresponding \" +\r\n            \"chunk data in the LevelDB. This may indicate incomplete cleanup or leftover development data.\",\r\n        };\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    const customDimensionErrors = infoSet.getCount(this.id, CustomDimensionWorldDataTest.vanillaDimensionChunkData);\r\n    const nameIdTableMissing = infoSet.getCount(this.id, CustomDimensionWorldDataTest.nameIdMappingTableMissing);\r\n    const unclaimedMappings = infoSet.getCount(this.id, CustomDimensionWorldDataTest.unclaimedDimensionMappings);\r\n\r\n    // Only add summary fields when there are actual findings.\r\n    // This avoids adding zero-value fields to validation output for content\r\n    // that has no world data (e.g., add-on packs), keeping existing baselines stable.\r\n    if (customDimensionErrors > 0 || nameIdTableMissing > 0 || unclaimedMappings > 0) {\r\n      info.customDimensionErrors = customDimensionErrors;\r\n      info.nameIdTableMissing = nameIdTableMissing;\r\n      info.unclaimedMappings = unclaimedMappings;\r\n    }\r\n  }\r\n\r\n  async generate(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    options?: IGeneratorOptions\r\n  ): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (\r\n      projectItem.itemType !== ProjectItemType.MCWorld &&\r\n      projectItem.itemType !== ProjectItemType.MCTemplate &&\r\n      projectItem.itemType !== ProjectItemType.worldFolder\r\n    ) {\r\n      return items;\r\n    }\r\n\r\n    const mcworld: MCWorld | undefined = await MCWorld.ensureOnItem(projectItem);\r\n\r\n    if (!mcworld) {\r\n      return items;\r\n    }\r\n\r\n    await mcworld.loadLevelDb(false);\r\n\r\n    if (!mcworld.levelDb) {\r\n      return items;\r\n    }\r\n\r\n    const dimensionIds = mcworld.dimensionIdsInChunks;\r\n\r\n    // No chunk data at all \u2014 nothing to validate\r\n    if (dimensionIds.size === 0) {\r\n      return items;\r\n    }\r\n\r\n    const hasCustomDimChunks = Array.from(dimensionIds).some((id) => id >= CUSTOM_DIMENSION_ID_START);\r\n    const vanillaDimIds = Array.from(dimensionIds).filter((id) => id < CUSTOM_DIMENSION_ID_START);\r\n\r\n    // Rule 102: Vanilla dimension chunk data found in LevelDB.\r\n    // Only meaningful when this project is shaped like an add-on that bundles\r\n    // a starter world. World templates and \"general world data\" projects are\r\n    // expected to contain vanilla chunk data \u2014 emitting an error there is a\r\n    // false positive.\r\n    const inAddOnContext = vanillaDimIds.length > 0 ? await this.isAddOnContextForWorld(projectItem.project) : false;\r\n\r\n    if (inAddOnContext) {\r\n      for (const dimId of vanillaDimIds) {\r\n        const dimName = VanillaIdToString[dimId] ?? `ID ${dimId}`;\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CustomDimensionWorldDataTest.vanillaDimensionChunkData,\r\n            `LevelDB contains chunk data for vanilla dimension '${dimName}' (ID ${dimId}). ` +\r\n              \"Creator content must only include chunk data for custom dimensions (ID >= 1000).\",\r\n            projectItem,\r\n            dimId\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    // Rule 101: DimensionNameIdTable required when custom dimension chunk data is present\r\n    if (hasCustomDimChunks && !mcworld.hasDimensionNameIdTable) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CustomDimensionWorldDataTest.nameIdMappingTableMissing,\r\n          \"LevelDB contains custom dimension chunk data but is missing the required DimensionNameIdTable key. \" +\r\n            \"This table is needed by Chunker to correctly associate dimension names with their chunk data.\",\r\n          projectItem\r\n        )\r\n      );\r\n    }\r\n\r\n    // Rule 103: Unclaimed dimension mappings (name-ID entries with no corresponding chunk data)\r\n    const nameIdTable = mcworld.dimensionNameIdTable;\r\n\r\n    if (nameIdTable && nameIdTable.size > 0) {\r\n      for (const [dimName, dimId] of nameIdTable) {\r\n        if (!dimensionIds.has(dimId)) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CustomDimensionWorldDataTest.unclaimedDimensionMappings,\r\n              `DimensionNameIdTable contains mapping '${dimName}' -> ID ${dimId} ` +\r\n                \"but no corresponding chunk data exists in the LevelDB.\",\r\n              projectItem,\r\n              dimName\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ScriptModuleManager from \"../../manager/ScriptModuleManager\";\r\nimport VsCodeFileManager from \"../../manager/VsCodeFileManager\";\r\nimport MinEngineVersionManager from \"../../manager/MinEngineVersionManager\";\r\nimport BaseGameVersionManager from \"../../manager/BaseGameVersionManager\";\r\nimport PackMetaDataInformationGenerator from \"../PackMetaDataInfoGenerator\";\r\nimport CooperativeAddOnRequirementsGenerator from \"../CooperativeAddOnRequirementsGenerator\";\r\nimport StrictPlatformInfoGenerator from \"../StrictPlatformInfoGenerator\";\r\nimport CooperativeAddOnItemRequirementsGenerator from \"../CooperativeAddOnItemRequirementsGenerator\";\r\nimport PathLengthFileGenerator from \"../PathLengthFileGenerator\";\r\nimport ItemCountsInfoGenerator from \"../ItemCountsInfoGenerator\";\r\nimport PackInfoGenerator from \"../PackInfoGenerator\";\r\nimport LineSizeInfoGenerator from \"../LineSizeInfoGenerator\";\r\nimport FormSchemaItemInfoGenerator from \"../FormSchemaItemInfoGenerator\";\r\nimport UnknownItemGenerator from \"../UnknownItemGenerator\";\r\nimport UnknownFileGenerator from \"../UnknownFileGenerator\";\r\nimport WorldItemInfoGenerator from \"../WorldItemInfoGenerator\";\r\nimport JsonFileTagsInfoGenerator from \"../JsonFileTagsInfoGenerator\";\r\nimport WorldDataInfoGenerator from \"../WorldDataInfoGenerator\";\r\nimport { ProjectInfoSuite } from \"../IProjectInfoData\";\r\nimport IProjectFileInfoGenerator from \"../IProjectFileInfoGenerator\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport IProjectItemInfoGenerator from \"../IProjectItemInfoGenerator\";\r\nimport IProjectInfoGeneratorBase from \"../IProjectInfoGeneratorBase\";\r\nimport TextureInfoGenerator from \"../TextureInfoGenerator\";\r\nimport PackSizeInfoGenerator from \"../PackSizeInfoGenerator\";\r\nimport TextureImageInfoGenerator from \"../TextureImageInfoGenerator\";\r\nimport FormatVersionManager from \"../../manager/FormatVersionManager\";\r\nimport AnimationResourceInfoGenerator from \"../AnimationResourceInfoGenerator\";\r\nimport UnlinkedItemInfoGenerator from \"../UnlinkedItemInfoGenerator\";\r\nimport GeometryInfoGenerator from \"../GeometryInfoGenerator\";\r\nimport TextureReferenceInfoGenerator from \"../TextureReferenceInfoGenerator\";\r\nimport TypesInfoGenerator from \"../TypesInfoGenerator\";\r\nimport ValidFileGenerator from \"../ValidFileGenerator\";\r\nimport BlocksCatalogManager from \"../../manager/BlocksCatalogManager\";\r\nimport EntityTypeManager from \"../../manager/EntityTypeManager\";\r\nimport ItemTypeManager from \"../../manager/ItemTypeManager\";\r\nimport SharingInfoGenerator from \"../SharingInfoGenerator\";\r\nimport CheckVanillaDuplicatesInfoGenerator from \"../projectGenerators/CheckVanillaDuplicatesInfoGenerator\";\r\nimport CheckNoBOMGenerator from \"../fileGenerators/CheckNoBOMGenerator\";\r\nimport MCFunctionInfoGenerator from \"../MCFunctionInfoGenerator\";\r\nimport CheckPackIconsGenerator from \"../projectGenerators/CheckPackIconsGenerator\";\r\nimport CheckWorldIconsGenerator from \"../projectGenerators/CheckWorldIconsGenerator\";\r\nimport SoundsDefinitionInfoGenerator from \"../projectGenerators/SoundDefinitionsInfoGenerator\";\r\nimport SummaryInfoGenerator from \"../SummaryInfoGenerator\";\r\nimport ScriptInfoGenerator from \"../ScriptInfoGenerator\";\r\nimport CheckParticleIdentifierGenerator from \"../projectGenerators/CheckParticleIdentifierGenerator\";\r\nimport CheckSkinPackJsonGenerator from \"../projectGenerators/CheckSkinPackJsonGenerator\";\r\nimport CommunitySchemaItemInfoGenerator from \"../CommunitySchemaItemInfoGenerator\";\r\nimport JsonSchemaItemInfoGenerator from \"../JsonSchemaItemInfoGenerator\";\r\nimport CheckForbiddenFilesGenerator from \"../projectGenerators/CheckForbiddenFiles\";\r\nimport CheckProjectIntegrityGenerator from \"../projectGenerators/CheckProjectIntegrityGenerator\";\r\nimport CheckBetaFeaturesGenerator from \"../projectGenerators/CheckBetaFeaturesGenerator\";\r\nimport CheckExperimentalFlagInfoGenerator from \"../projectGenerators/CheckExperimentalFlagInfoGenerator\";\r\nimport CheckFeatureDeprecationInfoGenerator from \"../projectGenerators/CheckFeatureDeprecationInfoGenerator\";\r\nimport CheckGeometryFormatInfoGenerator from \"../projectGenerators/CheckGeometryFormatInfoGenerator\";\r\nimport CheckLangFilesGenerator from \"../projectGenerators/CheckLangFilesGenerator\";\r\nimport { SuiteConfigs } from \"./RegistrationData\";\r\nimport CheckManifestGenerator from \"../projectGenerators/checkManifest/CheckManifestGenerator\";\r\nimport CheckResourcePackDependenciesGenerator from \"../projectGenerators/CheckResourcePackDependenciesGenerator\";\r\nimport CheckWorldPackReferencesGenerator from \"../projectGenerators/CheckWorldPackReferencesGenerator\";\r\nimport CrossReferenceIndexGenerator from \"../CrossReferenceIndexGenerator\";\r\nimport CustomDimensionWorldDataInfoGenerator from \"../CustomDimensionWorldDataInfoGenerator\";\r\n\r\nexport const TestsToExcludeFromDefaultSuite = [\"CADDONREQ\", \"CADDONIREQ\", \"LANGFILES\", \"SHARING\", \"VANDUPES\"];\r\n\r\nexport default class GeneratorRegistrations {\r\n  static managers = [\r\n    new ScriptModuleManager(),\r\n    new VsCodeFileManager(),\r\n    new MinEngineVersionManager(),\r\n    new BaseGameVersionManager(),\r\n    new BlocksCatalogManager(),\r\n    new EntityTypeManager(),\r\n    new ItemTypeManager(),\r\n  ];\r\n\r\n  static projectGenerators = [\r\n    new ItemCountsInfoGenerator(),\r\n    new LineSizeInfoGenerator(),\r\n    new PackSizeInfoGenerator(),\r\n    new PackInfoGenerator(),\r\n    new JsonFileTagsInfoGenerator(),\r\n    new FormatVersionManager(),\r\n    new ScriptInfoGenerator(),\r\n    new SharingInfoGenerator(),\r\n    new SummaryInfoGenerator(),\r\n    new CheckVanillaDuplicatesInfoGenerator(),\r\n    new PackMetaDataInformationGenerator(),\r\n    new AnimationResourceInfoGenerator(),\r\n    new CooperativeAddOnRequirementsGenerator(),\r\n    new StrictPlatformInfoGenerator(),\r\n    new TextureInfoGenerator(),\r\n    new TextureReferenceInfoGenerator(),\r\n    new TypesInfoGenerator(),\r\n    new TextureImageInfoGenerator(),\r\n    new GeometryInfoGenerator(),\r\n    new MCFunctionInfoGenerator(),\r\n    new CheckPackIconsGenerator(),\r\n    new CheckWorldIconsGenerator(),\r\n    new SoundsDefinitionInfoGenerator(),\r\n    new CheckParticleIdentifierGenerator(),\r\n    new CheckSkinPackJsonGenerator(),\r\n    new CheckExperimentalFlagInfoGenerator(),\r\n    new CheckFeatureDeprecationInfoGenerator(),\r\n    new CheckForbiddenFilesGenerator(),\r\n    new CheckProjectIntegrityGenerator(),\r\n    new CheckBetaFeaturesGenerator(),\r\n    new CheckManifestGenerator(),\r\n    new CheckGeometryFormatInfoGenerator(),\r\n    new CheckLangFilesGenerator(),\r\n    new CheckResourcePackDependenciesGenerator(),\r\n    new CheckWorldPackReferencesGenerator(),\r\n    new CrossReferenceIndexGenerator(),\r\n    ...this.managers,\r\n  ];\r\n\r\n  static updaters = this.managers;\r\n\r\n  static itemGenerators = [\r\n    new UnknownItemGenerator(),\r\n    new FormSchemaItemInfoGenerator(),\r\n    new JsonSchemaItemInfoGenerator(),\r\n    new CommunitySchemaItemInfoGenerator(),\r\n    new WorldItemInfoGenerator(),\r\n    new WorldDataInfoGenerator(),\r\n    new CustomDimensionWorldDataInfoGenerator(),\r\n    new CooperativeAddOnItemRequirementsGenerator(),\r\n    new UnlinkedItemInfoGenerator(),\r\n  ];\r\n\r\n  static fileGenerators = [\r\n    new UnknownFileGenerator(),\r\n    new ValidFileGenerator(),\r\n    new PathLengthFileGenerator(),\r\n    new CheckNoBOMGenerator(),\r\n  ];\r\n\r\n  static configureForSuite(\r\n    generator:\r\n      | IProjectFileInfoGenerator\r\n      | IProjectInfoGenerator\r\n      | IProjectItemInfoGenerator\r\n      | IProjectInfoGeneratorBase,\r\n    suite: ProjectInfoSuite\r\n  ) {\r\n    const config = SuiteConfigs[suite];\r\n\r\n    if (\"performAddOnValidations\" in generator) {\r\n      generator.performAddOnValidations = config.performAddOnValidations;\r\n    }\r\n    if (\"performPlatformVersionValidations\" in generator) {\r\n      generator.performPlatformVersionValidations = config.performPlatformVersionValidations;\r\n    }\r\n\r\n    if (\"identifierOverridesAreErrors\" in generator) {\r\n      generator.identifierOverridesAreErrors = config.identifierOverridesAreErrors;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Project from \"../app/Project\";\r\nimport IProjectUpdater from \"./IProjectUpdater\";\r\nimport Log from \"../core/Log\";\r\nimport ProjectUpdateResult from \"./ProjectUpdateResult\";\r\nimport GeneratorRegistrations from \"../info/registration/GeneratorRegistrations\";\r\n\r\nexport default class ProjectUpdateRunner {\r\n  project?: Project;\r\n\r\n  constructor(project: Project) {\r\n    this.project = project;\r\n  }\r\n\r\n  async updateProject(includeUpdaters?: string[], excludeUpdaters?: string[]) {\r\n    const updaters: IProjectUpdater[] = GeneratorRegistrations.updaters;\r\n\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    if (!this.project) {\r\n      Log.throwUnexpectedUndefined(\"PURUP\");\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < updaters.length; i++) {\r\n      const updater = updaters[i];\r\n\r\n      const updaterIds = updater.getUpdateIds();\r\n\r\n      for (let j = 0; j < updaterIds.length; j++) {\r\n        if (\r\n          (!includeUpdaters || includeUpdaters.includes(updater.id)) &&\r\n          (!excludeUpdaters || !excludeUpdaters.includes(updater.id))\r\n        ) {\r\n          const localResults = await updater.update(this.project, updaterIds[j]);\r\n\r\n          results.push(...localResults);\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async update(updaterId: string, updaterIndex: number): Promise<ProjectUpdateResult[]> {\r\n    const updaters: IProjectUpdater[] = GeneratorRegistrations.updaters;\r\n    const allResults: ProjectUpdateResult[] = [];\r\n\r\n    if (!this.project) {\r\n      Log.throwUnexpectedUndefined(\"PURU\");\r\n      return [];\r\n    }\r\n\r\n    for (let i = 0; i < updaters.length; i++) {\r\n      const updater = updaters[i];\r\n\r\n      if (updater.id === updaterId) {\r\n        const results = await updater.update(this.project, updaterIndex);\r\n\r\n        for (const result of results) {\r\n          allResults.push(result);\r\n        }\r\n      }\r\n    }\r\n\r\n    return allResults;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport Project from \"../app/Project\";\r\n\r\nconst EslintDefaultConfig = [\r\n  \"import minecraftLinting from 'eslint-plugin-minecraft-linting';\",\r\n  \"import tsParser from '@typescript-eslint/parser';\",\r\n  \"import ts from '@typescript-eslint/eslint-plugin';\",\r\n  \"export default [\",\r\n  \"  {\",\r\n  \"    files: ['scripts/**/*.ts'],\",\r\n  \"    languageOptions: {\",\r\n  \"      parser: tsParser,\",\r\n  \"      ecmaVersion: 'latest',\",\r\n  \"    },\",\r\n  \"    plugins: {\",\r\n  \"      ts,\",\r\n  \"      'minecraft-linting': minecraftLinting,\",\r\n  \"    },\",\r\n  \"    rules: {\",\r\n  \"      'minecraft-linting/avoid-unnecessary-command': 'error',\",\r\n  \"    },\",\r\n  \"  },\",\r\n  \"];\",\r\n];\r\n\r\nexport default class EslintConfig {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<EslintConfig, EslintConfig>();\r\n\r\n  public project: Project | undefined = undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<EslintConfig, EslintConfig>) {\r\n    let justf: EslintConfig | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      justf = new EslintConfig();\r\n\r\n      justf.file = file;\r\n\r\n      file.manager = justf;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof EslintConfig) {\r\n      justf = file.manager as EslintConfig;\r\n\r\n      if (!justf.isLoaded && loadHandler) {\r\n        justf.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await justf.load();\r\n\r\n      return justf;\r\n    }\r\n\r\n    return justf;\r\n  }\r\n\r\n  async ensureDefault() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.load();\r\n\r\n    this._file.setContent(EslintConfig.getDefaultContent());\r\n  }\r\n\r\n  async ensureMin() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.load();\r\n\r\n    if (!this._file.content || typeof this._file.content !== \"string\") {\r\n      this._file.setContent(EslintConfig.getDefaultContent());\r\n    }\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    return false;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent(true);\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n\r\n  static getDefaultContent() {\r\n    return EslintDefaultConfig.join(\"\\n\").replace(/'/gi, '\"');\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport Project from \"../app/Project\";\r\n\r\nconst JustDefaultConfig = [\r\n  \"import { argv, parallel, series, task, tscTask } from 'just-scripts';\",\r\n  \"import {\",\r\n  \"  BundleTaskParameters,\",\r\n  \"  CopyTaskParameters,\",\r\n  \"  bundleTask,\",\r\n  \"  cleanTask,\",\r\n  \"  cleanCollateralTask,\",\r\n  \"  copyTask,\",\r\n  \"  coreLint,\",\r\n  \"  mcaddonTask,\",\r\n  \"  setupEnvironment,\",\r\n  \"  ZipTaskParameters,\",\r\n  \"  STANDARD_CLEAN_PATHS,\",\r\n  \"  DEFAULT_CLEAN_DIRECTORIES,\",\r\n  \"  getOrThrowFromProcess,\",\r\n  \"  watchTask,\",\r\n  \"} from '@minecraft/core-build-tasks';\",\r\n  \"import path from 'path';\",\r\n  \"setupEnvironment(path.resolve(__dirname, '.env'));\",\r\n  \"const projectName = getOrThrowFromProcess('PROJECT_NAME');\",\r\n  \"const bundleTaskOptions: BundleTaskParameters = {\",\r\n  \"  entryPoint: path.join(__dirname, './scripts/main.ts'),\",\r\n  \"  external: ['@minecraft/server', '@minecraft/server-ui'],\",\r\n  \"  outfile: path.resolve(__dirname, './dist/scripts/main.js'),\",\r\n  \"  minifyWhitespace: false,\",\r\n  \"  sourcemap: true,\",\r\n  \"  outputSourcemapPath: path.resolve(__dirname, './dist/debug'),\",\r\n  \"};\",\r\n  \"const copyTaskOptions: CopyTaskParameters = {\",\r\n  \"  copyToBehaviorPacks: [`./behavior_packs/$_{projectName}`],\",\r\n  \"  copyToScripts: ['./dist/scripts'],\",\r\n  \"  copyToResourcePacks: [`./resource_packs/$_{projectName}`],\",\r\n  \"};\",\r\n  \"const mcaddonTaskOptions: ZipTaskParameters = {\",\r\n  \"  ...copyTaskOptions,\",\r\n  \"  outputFile: `./dist/packages/$_{projectName}.mcaddon`,\",\r\n  \"};\",\r\n  \"task('lint', coreLint(['scripts/**/*.ts'], argv().fix));\",\r\n  \"task('typescript', tscTask());\",\r\n  \"task('bundle', bundleTask(bundleTaskOptions));\",\r\n  \"task('build', series('typescript', 'bundle'));\",\r\n  \"task('clean-local', cleanTask(DEFAULT_CLEAN_DIRECTORIES));\",\r\n  \"task('clean-collateral', cleanCollateralTask(STANDARD_CLEAN_PATHS));\",\r\n  \"task('clean', parallel('clean-local', 'clean-collateral'));\",\r\n  \"task('copyArtifacts', copyTask(copyTaskOptions));\",\r\n  \"task('package', series('clean-collateral', 'copyArtifacts'));\",\r\n  \"task(\",\r\n  \"  'local-deploy',\",\r\n  \"  watchTask(\",\r\n  \"    ['scripts/**/*.ts', 'behavior_packs/**/*.{json,lang,tga,ogg,png}', 'resource_packs/**/*.{json,lang,tga,ogg,png}'],\",\r\n  \"    series('clean-local', 'build', 'package')\",\r\n  \"  )\",\r\n  \");\",\r\n  \"task('createMcaddonFile', mcaddonTask(mcaddonTaskOptions));\",\r\n  \"task('mcaddon', series('clean-local', 'build', 'createMcaddonFile'));\",\r\n];\r\n\r\nexport default class JustConfig {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<JustConfig, JustConfig>();\r\n\r\n  public project: Project | undefined = undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<JustConfig, JustConfig>) {\r\n    let justf: JustConfig | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      justf = new JustConfig();\r\n\r\n      justf.file = file;\r\n\r\n      file.manager = justf;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JustConfig) {\r\n      justf = file.manager as JustConfig;\r\n\r\n      if (!justf.isLoaded && loadHandler) {\r\n        justf.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await justf.load();\r\n\r\n      return justf;\r\n    }\r\n\r\n    return justf;\r\n  }\r\n\r\n  async ensureDefault() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.load();\r\n\r\n    this._file.setContent(JustConfig.getDefaultContent());\r\n  }\r\n\r\n  async ensureMin() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.load();\r\n\r\n    if (!this._file.content || typeof this._file.content !== \"string\") {\r\n      this._file.setContent(JustConfig.getDefaultContent());\r\n    }\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    return false;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent(true);\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n\r\n  static getDefaultContent() {\r\n    return JustDefaultConfig.join(\"\\n\").replace(/'/gi, '\"').replace(/\\$_{/gi, \"${\");\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport EslintConfig from \"../devproject/EslintConfig\";\r\nimport JustConfig from \"../devproject/JustConfig\";\r\nimport NpmPackageDefinition from \"../devproject/NpmPackageDefinition\";\r\nimport { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport Project, { FolderContext } from \"./Project\";\r\n\r\nexport default class ProjectStandard {\r\n  static async ensureIsStandard(project: Project) {\r\n    await project.ensureProjectFolder();\r\n\r\n    if (project.projectFolder) {\r\n      const justFile = await project.projectFolder.getFileFromRelativePath(\"/just.config.ts\");\r\n\r\n      if (justFile && (await justFile.exists())) {\r\n        justFile.setContent(JustConfig.getDefaultContent());\r\n        justFile.saveContent();\r\n      }\r\n\r\n      const eslintFile = await project.projectFolder.getFileFromRelativePath(\"/eslint.config.mjs\");\r\n\r\n      if (eslintFile && (await eslintFile.exists())) {\r\n        eslintFile.setContent(EslintConfig.getDefaultContent());\r\n        eslintFile.saveContent();\r\n      }\r\n\r\n      const packageJson = await project.projectFolder.getFileFromRelativePath(\"/package.json\");\r\n\r\n      if (packageJson && (await packageJson.exists())) {\r\n        project.ensureItemByProjectPath(\r\n          \"/package.json\",\r\n          ProjectItemStorageType.singleFile,\r\n          \"package.json\",\r\n          ProjectItemType.packageJson,\r\n          FolderContext.unknown,\r\n          undefined,\r\n          ProjectItemCreationType.generated\r\n        );\r\n      }\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const item = itemsCopy[i];\r\n\r\n      if (item.itemType === ProjectItemType.justConfigTs && item.primaryFile) {\r\n        item.creationType = ProjectItemCreationType.generated;\r\n\r\n        const justConfig = await JustConfig.ensureOnFile(item.primaryFile);\r\n\r\n        if (justConfig) {\r\n          justConfig.ensureDefault();\r\n          await justConfig.save();\r\n        }\r\n      } else if (item.itemType === ProjectItemType.esLintConfigMjs && item.primaryFile) {\r\n        item.creationType = ProjectItemCreationType.generated;\r\n\r\n        const eslintConfig = await EslintConfig.ensureOnFile(item.primaryFile);\r\n\r\n        if (eslintConfig) {\r\n          eslintConfig.ensureDefault();\r\n          await eslintConfig.save();\r\n        }\r\n      } else if (item.itemType === ProjectItemType.packageJson && item.primaryFile) {\r\n        item.creationType = ProjectItemCreationType.generated;\r\n\r\n        const packageJson = await NpmPackageDefinition.ensureOnFile(item.primaryFile);\r\n\r\n        if (packageJson) {\r\n          await packageJson.ensureStandardContent();\r\n          await packageJson.save();\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "import IActionGroup from \"./IActionGroup.js\";\r\n\r\nexport enum ActionSetTarget {\r\n  general = 0,\r\n  script = 1,\r\n  mcfunction = 2,\r\n  entityEvent = 3,\r\n  gameTest = 4,\r\n  worldTest = 5,\r\n}\r\n\r\nexport default interface IActionSetData extends IActionGroup {\r\n  name: string;\r\n  targetType: ActionSetTarget;\r\n}\r\n", "import Action from \"./Action\";\r\n\r\nexport default class ActionError {\r\n  action: Action;\r\n  message: string;\r\n\r\n  constructor(action: Action, message: string) {\r\n    this.action = action;\r\n    this.message = message;\r\n  }\r\n}\r\n", "import Utilities from \"../core/Utilities\";\r\nimport Test from \"../gameTest/Test\";\r\nimport IWorld from \"../minecraft/IWorld\";\r\nimport Action from \"./Action\";\r\nimport ActionError from \"./ActionError\";\r\n\r\nexport default class ActionSetScope {\r\n  parent: ActionSetScope | undefined;\r\n\r\n  test: Test | undefined;\r\n  world: IWorld | undefined;\r\n  errors: ActionError[] = [];\r\n\r\n  state: { [name: string]: object } = {};\r\n\r\n  getState(name: string): object | undefined {\r\n    const result = this.state[name];\r\n\r\n    if (!result && this.parent) {\r\n      return this.parent.getState(name);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  setState(name: string, val: object) {\r\n    if (Utilities.isUsableAsObjectKey(name)) {\r\n      this.state[name] = val;\r\n    }\r\n  }\r\n\r\n  addError(action: Action, message: string) {\r\n    const error = new ActionError(action, message);\r\n\r\n    this.addErrorDirect(error);\r\n  }\r\n\r\n  addErrorDirect(error: ActionError) {\r\n    this.errors.push(error);\r\n\r\n    if (this.parent) {\r\n      this.parent.addErrorDirect(error);\r\n    }\r\n  }\r\n\r\n  createBlockLocation(name: string) {\r\n    const val = this.getState(name);\r\n\r\n    if (val instanceof Array) {\r\n    }\r\n  }\r\n}\r\n", "import IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IFormDefinition from \"./IFormDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class DataFormFile {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _title?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public formDefinition?: IFormDefinition;\r\n\r\n  private _onLoaded = new EventDispatcher<DataFormFile, DataFormFile>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get title() {\r\n    if (this.formDefinition) {\r\n      return this.formDefinition.title;\r\n    }\r\n\r\n    return this._title;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n\r\n    if (newId) {\r\n      const underscore = newId.lastIndexOf(\"_\");\r\n\r\n      if (underscore >= 0 && underscore < newId.length - 2) {\r\n        this._title = newId.substring(0, underscore);\r\n      } else {\r\n        this._title = newId;\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<DataFormFile, DataFormFile>) {\r\n    let dff: DataFormFile | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dff = new DataFormFile();\r\n\r\n      dff.file = file;\r\n\r\n      file.manager = dff;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof DataFormFile) {\r\n      dff = file.manager as DataFormFile;\r\n\r\n      if (!dff.isLoaded && loadHandler) {\r\n        dff.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dff.load();\r\n    }\r\n\r\n    return dff;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.formDefinition !== null, \"DFFP\");\r\n\r\n    if (this.formDefinition) {\r\n      return this._file.setObjectContentIfSemanticallyDifferent(this.formDefinition);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.formDefinition = StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "import ActionSet from \"./ActionSet\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IAction from \"./IAction\";\r\nimport Location from \"../minecraft/Location\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IGetSetPropertyObject from \"../dataform/IGetSetPropertyObject\";\r\nimport ActionSetScope from \"./ActionSetScope\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\nimport { IActionable } from \"./IActionable\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport enum ActionType {\r\n  simulatedPlayerSpawn = \"test_simulated_player_spawn\",\r\n  simulatedPlayerMove = \"test_simulated_player_move\",\r\n  simulatedPlayerInteract = \"test_simulated_player_interact\",\r\n  entitySpawn = \"entity_spawn\",\r\n  idle = \"test_idle\",\r\n}\r\n\r\nexport default abstract class Action implements IGetSetPropertyObject, IActionable {\r\n  data: IAction;\r\n  group: ActionGroup;\r\n  typeForm?: IFormDefinition;\r\n  actionSet: ActionSet;\r\n\r\n  get id() {\r\n    return this.data.id;\r\n  }\r\n\r\n  set id(newId: string | undefined) {\r\n    this.data.id = newId;\r\n  }\r\n\r\n  private _onPropertyChanged = new EventDispatcher<Action, string>();\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  get typeId() {\r\n    return \"action\";\r\n  }\r\n\r\n  get shortSubjectId() {\r\n    return \"obj\";\r\n  }\r\n\r\n  get withId() {\r\n    const withId = this.data.withId;\r\n\r\n    if (withId) {\r\n      return withId;\r\n    }\r\n\r\n    return this.shortSubjectId;\r\n  }\r\n\r\n  get setId() {\r\n    const setId = this.data.setId;\r\n\r\n    if (setId) {\r\n      return setId;\r\n    }\r\n\r\n    return this.shortSubjectId;\r\n  }\r\n\r\n  get type(): string {\r\n    return this.data.type;\r\n  }\r\n\r\n  getDataCopy() {\r\n    const result: { [propName: string]: any } = {};\r\n\r\n    if (this.data) {\r\n      for (const propName in this.data) {\r\n        let val = (this.data as any)[propName];\r\n\r\n        if (val) {\r\n          result[propName] = val;\r\n        }\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  constructor(group: ActionGroup, data: IAction) {\r\n    this.group = group;\r\n\r\n    if (!this.group._actionSet) {\r\n      throw new Error(\"Cannot add action to unattached group\");\r\n    }\r\n\r\n    this.actionSet = this.group._actionSet;\r\n\r\n    this.data = data;\r\n  }\r\n\r\n  abstract validate(): boolean;\r\n\r\n  run(scope: ActionSetScope) {}\r\n\r\n  getProperty(id: string) {\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    return (this.data as any)[id] as any;\r\n  }\r\n\r\n  setProperty(id: string, value: any) {\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    (this.data as any)[id] = value;\r\n  }\r\n\r\n  getBaseValue(): any {\r\n    return this.data as any;\r\n  }\r\n\r\n  setBaseValue(value: any): void {\r\n    (this.data as any) = value;\r\n  }\r\n\r\n  getArgumentAsLocation(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    if (val instanceof Array && val.length >= 3) {\r\n      const loc = new Location(val[0], val[1], val[2]);\r\n\r\n      return loc;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getArgumentAsBlockLocation(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    if (val instanceof Array && val.length >= 3) {\r\n      const loc = new BlockLocation(val[0], val[1], val[2]);\r\n\r\n      return loc;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  _notifyPropertyChanged(propertyName: string) {\r\n    this._onPropertyChanged.dispatch(this, propertyName);\r\n  }\r\n\r\n  abstract getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements;\r\n  abstract getCommandRequirements(options: ICommandOptions): ICommandRequirements;\r\n  abstract addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ): void;\r\n  abstract addCommandLines(lines: string[], indent: number, options: ICommandOptions): void;\r\n\r\n  getScriptTest() {\r\n    return \"test\";\r\n  }\r\n\r\n  getScriptWith() {\r\n    if (!this.data.withId) {\r\n      return \"obj\";\r\n    }\r\n\r\n    return this.data.withId;\r\n  }\r\n\r\n  getScriptSet() {\r\n    if (!this.data.setId) {\r\n      return \"obj\";\r\n    }\r\n\r\n    return this.data.setId;\r\n  }\r\n\r\n  getCommandWith() {\r\n    if (!this.data.withId) {\r\n      return \"obj\";\r\n    }\r\n\r\n    return this.data.withId;\r\n  }\r\n\r\n  getCommandSet() {\r\n    if (!this.data.setId) {\r\n      return \"obj\";\r\n    }\r\n\r\n    return this.data.setId;\r\n  }\r\n\r\n  getArgumentAsNumber(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    if (typeof val === \"number\") {\r\n      return val;\r\n    } else if (typeof val === \"string\") {\r\n      return parseFloat(val);\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  getArgumentAsString(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    return val;\r\n  }\r\n\r\n  validateArgumentIsEntityType(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    if (!val || typeof val !== \"string\") {\r\n      throw new Error(\"Argument '\" + name + \"' is not defined.\");\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  absolutizeLocation(location: Location) {\r\n    if (!this.actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new Location(\r\n      this.actionSet.locationRoot.x + location.x,\r\n      this.actionSet.locationRoot.y + location.y,\r\n      this.actionSet.locationRoot.z + location.z\r\n    );\r\n  }\r\n\r\n  absolutizeBlockLocation(location: BlockLocation) {\r\n    if (!this.actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new BlockLocation(\r\n      Math.round(this.actionSet.locationRoot.x + location.x),\r\n      Math.round(this.actionSet.locationRoot.y + location.y),\r\n      Math.round(this.actionSet.locationRoot.z + location.z)\r\n    );\r\n  }\r\n\r\n  validateArgumentIsType(name: string, type: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    const typestr = typeof val;\r\n\r\n    switch (type) {\r\n      case \"BlockLocation\":\r\n      case \"Location\":\r\n        if (!(val instanceof Array) || val.length !== 3) {\r\n          throw new Error(\"Expected an array of 3 numbers for parameter '\" + name + \"'\");\r\n        }\r\n        break;\r\n\r\n      case \"boolean\":\r\n      case \"number\":\r\n      case \"string\":\r\n        if (typestr !== type) {\r\n          throw new Error(\"Unexpected type mismatch: \" + name + \" is \" + typestr + \" (expected \" + type + \")\");\r\n        }\r\n        break;\r\n    }\r\n\r\n    return true;\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport SimulatedPlayer from \"../gameTest/SimulatedPlayer\";\r\nimport ActionSetScope from \"./ActionSetScope\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class BlockBreakAction extends Action {\r\n  get shortSubjectId() {\r\n    return \"blockBreak\";\r\n  }\r\n\r\n  get typeTitle() {\r\n    return \"Block Break Action\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"block_break\";\r\n  }\r\n\r\n  get title() {\r\n    let title = this.typeTitle;\r\n\r\n    if (this.location) {\r\n      title += \" \" + this.location.toSummary();\r\n    }\r\n\r\n    return title;\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsBlockLocation(\"location\");\r\n  }\r\n\r\n  set location(location: BlockLocation | undefined) {\r\n    if (!location) {\r\n      (this.data as any)[\"location\"] = undefined;\r\n    } else {\r\n      (this.data as any)[\"location\"] = [location.x, location.y, location.z];\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"location\", \"BlockLocation\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    let location = this.location;\r\n\r\n    if (!location) {\r\n      location = new BlockLocation(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"tag @p[l=1] add \" + this.getCommandSet());\r\n  }\r\n\r\n  run(scope: ActionSetScope) {\r\n    if (!scope.test) {\r\n      scope.addError(this, \"Test is not specified\");\r\n      return;\r\n    }\r\n\r\n    if (!this.location) {\r\n      scope.addError(this, \"Location is not specified\");\r\n      return;\r\n    }\r\n\r\n    //const simPlayer = scope.test.spawnSimulatedPlayer(this.location);\r\n\r\n    const simPlayer = scope.getState(this.setId) as SimulatedPlayer;\r\n\r\n    if (simPlayer) {\r\n      simPlayer.interact();\r\n    }\r\n    //scope.setState(this.setId, simPlayer);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    /*    if (!this.location) {\r\n      throw new Error();\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, this.getScriptSet() + \".interact();\");*/\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\n\r\nexport default abstract class GroupAction extends Action {}\r\n", "export enum ScriptGenerationPlacement {\r\n  initInSequence = 5,\r\n  beforeBlockStart = 9,\r\n  blockStart = 10,\r\n  afterBlockStart = 11,\r\n  inSequence = 20,\r\n  beforeBlockEnd = 29,\r\n  blockEnd = 30,\r\n  afterBlockEnd = 31,\r\n}\r\n\r\nexport default interface IScriptGenerationContext {\r\n  topLevelFunction?: boolean;\r\n  indent: number;\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class BlockExplodeAction extends GroupAction {\r\n  get typeId() {\r\n    return \"block_explode\";\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      lines.push(\"export function \" + this.group.name + \"(event: mc.BlockExplodeAfterEventSignal) {\");\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n\r\n    if (placement === ScriptGenerationPlacement.initInSequence) {\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        \"mc.world.afterEvents.blockExplode.subscribe(\" + this.group.name + \");\"\r\n      );\r\n    }\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext from \"./IScriptGenerationContext\";\r\n\r\nexport default class BlockSetAction extends Action {\r\n  get typeId() {\r\n    return \"block_set\";\r\n  }\r\n\r\n  get blockType() {\r\n    return this.getArgumentAsString(\"blockType\");\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.blockType) {\r\n      return;\r\n    }\r\n\r\n    let loc = this.location;\r\n\r\n    if (!loc) {\r\n      loc = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"setblock \" + this.blockType + \" \" + loc.x + \" \" + loc.y + \" \" + loc.z);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.blockType) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let loc = this.location;\r\n\r\n      if (!loc) {\r\n        loc = new Location(0, 0, 0);\r\n      }\r\n\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        \"overworld.setlockType({ x: \" + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + '}, \"' + this.blockType + '\",);'\r\n      );\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"location\", \"Location\");\r\n\r\n    return true;\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class EntityDieAction extends GroupAction {\r\n  get typeId() {\r\n    return \"entity_die\";\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      lines.push(\"export function \" + this.group.name + \"(event: mc.EntityDieAfterEventSignal) {\");\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n\r\n    if (placement === ScriptGenerationPlacement.initInSequence) {\r\n      ActionGroup.addLine(lines, context.indent, \"mc.world.afterEvents.entityDie.subscribe(\" + this.group.name + \");\");\r\n    }\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext from \"./IScriptGenerationContext\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class EntitySpawnAction extends Action {\r\n  get typeTitle() {\r\n    return \"Spawn Entity\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"entity_spawn\";\r\n  }\r\n\r\n  get title() {\r\n    if (!this.entityType) {\r\n      return this.typeTitle;\r\n    }\r\n\r\n    return this.typeTitle + \" \" + this.entityType;\r\n  }\r\n\r\n  get entityType() {\r\n    return this.getArgumentAsString(\"entityType\");\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.entityType) {\r\n      return;\r\n    }\r\n\r\n    let loc = this.location;\r\n\r\n    if (!loc) {\r\n      loc = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"summon \" + this.entityType + \" \" + loc.x + \" \" + loc.y + \" \" + loc.z);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.entityType) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let loc = this.location;\r\n\r\n      if (!loc) {\r\n        Log.debugAlert(\"Action does not have a defined location.\");\r\n      } else {\r\n        if (options.useGameTestApis) {\r\n          ActionGroup.addLine(\r\n            lines,\r\n            context.indent,\r\n            'test.spawnEntity(\"' + this.entityType + '\", { x: ' + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + \"});\"\r\n          );\r\n        } else {\r\n          ActionGroup.addLine(\r\n            lines,\r\n            context.indent,\r\n            'overworld.spawnEntity(\"' + this.entityType + '\", { x: ' + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + \"});\"\r\n          );\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"location\", \"Location\");\r\n    this.validateArgumentIsEntityType(\"entityType\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getCommand() {\r\n    return \"\";\r\n  }\r\n\r\n  getJavaScript() {\r\n    return \"\";\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Action from \"./Action\";\r\n\r\nexport default class GeneralAction extends Action {\r\n  _typeId = \"general\";\r\n\r\n  get typeId() {\r\n    return this._typeId;\r\n  }\r\n\r\n  set typeId(newTypeId: string) {\r\n    this._typeId = newTypeId;\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {}\r\n}\r\n", "import IConditionClause from \"./IConditionClause\";\r\n\r\nexport enum ActionContextType {\r\n  general = 0,\r\n  entity = 1,\r\n  block = 2,\r\n  item = 3,\r\n  gameTest = 4,\r\n  dimensionLocation = 5,\r\n}\r\n\r\nexport default interface IAction {\r\n  id?: string;\r\n  type: string;\r\n  args?: object;\r\n  condition?: IConditionClause[];\r\n  actions?: IAction[];\r\n  value?: string;\r\n  withId?: string;\r\n  setId?: string;\r\n\r\n  name?: string;\r\n  location?: number[];\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext from \"./IScriptGenerationContext\";\r\n\r\nexport default class ItemSpawnAction extends Action {\r\n  get typeId() {\r\n    return \"item_spawn\";\r\n  }\r\n\r\n  get itemType() {\r\n    return this.getArgumentAsString(\"itemType\");\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.itemType) {\r\n      return;\r\n    }\r\n\r\n    let loc = this.location;\r\n\r\n    if (!loc) {\r\n      loc = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"particle \" + this.itemType + \" \" + loc.x + \" \" + loc.y + \" \" + loc.z);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.itemType) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let loc = this.location;\r\n\r\n      if (!loc) {\r\n        loc = new Location(0, 0, 0);\r\n      }\r\n\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        'overworld.spawnItem(\"' + this.itemType + '\", { x: ' + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + \"});\"\r\n      );\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext from \"./IScriptGenerationContext\";\r\n\r\nexport default class ParticleSpawnAction extends Action {\r\n  get typeId() {\r\n    return \"particle_spawn\";\r\n  }\r\n\r\n  get particleName() {\r\n    return this.getArgumentAsString(\"particleName\");\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.particleName) {\r\n      return;\r\n    }\r\n\r\n    let loc = this.location;\r\n\r\n    if (!loc) {\r\n      loc = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"particle \" + this.particleName + \" \" + loc.x + \" \" + loc.y + \" \" + loc.z);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.particleName) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let loc = this.location;\r\n\r\n      if (!loc) {\r\n        loc = new Location(0, 0, 0);\r\n      }\r\n\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        'overworld.spawnParticle(\"' + this.particleName + '\", { x: ' + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + \"});\"\r\n      );\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class PlayerJoinAction extends GroupAction {\r\n  get typeId() {\r\n    return \"player_join\";\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      lines.push(\"export function \" + this.group.name + \"(event: mc.PLayerJoinAfterEventSignal) {\");\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n\r\n    if (placement === ScriptGenerationPlacement.initInSequence) {\r\n      ActionGroup.addLine(lines, context.indent, \"mc.world.afterEvents.playerJoin.subscribe(\" + this.group.name + \");\");\r\n    }\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class RandomizeGroupAction extends GroupAction {\r\n  get typeTitle() {\r\n    return \"Randomize\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"randomize\";\r\n  }\r\n\r\n  get title() {\r\n    return this.typeTitle;\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      let functionLine = \"export function \" + this.group.name + \"() {\";\r\n      lines.push(functionLine);\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class SequenceGroupAction extends GroupAction {\r\n  get typeTitle() {\r\n    return \"Sequence\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"sequence\";\r\n  }\r\n\r\n  get title() {\r\n    return this.typeTitle;\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      let functionLine = \"export function \" + this.group.name + \"() {\";\r\n      lines.push(functionLine);\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext from \"./IScriptGenerationContext\";\r\n\r\nexport default class PlaySoundAction extends Action {\r\n  get typeId() {\r\n    return \"sound_play\";\r\n  }\r\n\r\n  get soundName() {\r\n    return this.getArgumentAsString(\"soundName\");\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.soundName) {\r\n      return;\r\n    }\r\n\r\n    let loc = this.location;\r\n\r\n    if (!loc) {\r\n      loc = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"playsound \" + this.soundName + \" \" + loc.x + \" \" + loc.y + \" \" + loc.z);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.soundName) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let loc = this.location;\r\n\r\n      if (!loc) {\r\n        loc = new Location(0, 0, 0);\r\n      }\r\n\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        'overworld.playSound(\"' + this.soundName + '\", { x: ' + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + \"});\"\r\n      );\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements.js\";\r\nimport ICommandOptions from \"./ICommandOptions.js\";\r\nimport ICommandRequirements from \"./ICommandRequirements.js\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class TestIdleAction extends Action {\r\n  get typeTitle() {\r\n    return \"Idle\";\r\n  }\r\n\r\n  get title() {\r\n    return this.typeTitle;\r\n  }\r\n\r\n  get ticks() {\r\n    return this.getArgumentAsNumber(\"ticks\");\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"ticks\", \"number\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      ActionGroup.addLine(lines, context.indent, \"await \" + this.getScriptTest() + \".idle(\" + this.ticks + \");\");\r\n    }\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class TestSimulatedPlayerMoveAction extends Action {\r\n  get typeTitle() {\r\n    return \"Move Simulated Player\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"test_simulated_player_move\";\r\n  }\r\n\r\n  get shortSubjectId() {\r\n    return \"simplayer\";\r\n  }\r\n\r\n  get title() {\r\n    if (!this.location) {\r\n      return this.typeTitle;\r\n    }\r\n\r\n    return this.typeTitle + \" \" + this.location.toSummary();\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  set location(location: Location | undefined) {\r\n    if (!location) {\r\n      (this.data as any)[\"location\"] = undefined;\r\n    } else {\r\n      (this.data as any)[\"location\"] = [location.x, location.y, location.z];\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"location\", \"Location\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number) {\r\n    let location = this.location;\r\n\r\n    if (!location) {\r\n      location = new Location(0, 0, 0);\r\n    }\r\n\r\n    location = this.absolutizeLocation(location);\r\n\r\n    ActionGroup.addLine(\r\n      lines,\r\n      indent,\r\n      \"tp @p[tag=\" + this.getCommandWith() + \"]\" + location.x + \" \" + location.y + \" \" + location.z\r\n    );\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    let location = this.location;\r\n\r\n    if (!location) {\r\n      location = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(\r\n      lines,\r\n      context.indent,\r\n      this.getScriptWith() +\r\n        \".moveToLocation(new Location(\" +\r\n        location.x +\r\n        \", \" +\r\n        location.y +\r\n        \", \" +\r\n        location.z +\r\n        \"));\"\r\n    );\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements.js\";\r\nimport ICommandOptions from \"./ICommandOptions.js\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\nimport ICommandRequirements from \"./ICommandRequirements.js\";\r\nimport ActionSetScope from \"./ActionSetScope.js\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class SimulatedPlayerSpawnAction extends Action {\r\n  get shortSubjectId() {\r\n    return \"simplayer\";\r\n  }\r\n\r\n  get typeTitle() {\r\n    return \"Spawn Simulated Player\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"test_simulated_player_spawn\";\r\n  }\r\n\r\n  get title() {\r\n    let title = this.typeTitle;\r\n\r\n    if (this.location) {\r\n      title += \" \" + this.location.toSummary();\r\n    }\r\n\r\n    return title;\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsBlockLocation(\"location\");\r\n  }\r\n\r\n  set location(location: BlockLocation | undefined) {\r\n    if (!location) {\r\n      (this.data as any)[\"location\"] = undefined;\r\n    } else {\r\n      (this.data as any)[\"location\"] = [location.x, location.y, location.z];\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"location\", \"Location\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    let location = this.location;\r\n\r\n    if (!location) {\r\n      location = new BlockLocation(0, 0, 0);\r\n    }\r\n\r\n    location = this.absolutizeBlockLocation(location);\r\n\r\n    ActionGroup.addLine(lines, indent, \"tag @p[l=1] add \" + this.getCommandSet());\r\n  }\r\n\r\n  run(scope: ActionSetScope) {\r\n    if (!scope.test) {\r\n      scope.addError(this, \"Test is not specified\");\r\n      return;\r\n    }\r\n\r\n    if (!this.location) {\r\n      scope.addError(this, \"Location is not specified\");\r\n      return;\r\n    }\r\n\r\n    const simPlayer = scope.test.spawnSimulatedPlayer(this.location);\r\n\r\n    scope.setState(this.setId, simPlayer);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let location = this.location;\r\n\r\n      if (!location) {\r\n        location = new BlockLocation(0, 0, 0);\r\n      }\r\n\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        \"const \" +\r\n          this.getScriptSet() +\r\n          \" = \" +\r\n          this.getScriptTest() +\r\n          \".spawnSimulatedPlayer(new BlockLocation(\" +\r\n          location.x +\r\n          \", \" +\r\n          location.y +\r\n          \", \" +\r\n          location.z +\r\n          '), \"' +\r\n          this.getScriptSet() +\r\n          '\");'\r\n      );\r\n    }\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class TickGroupAction extends GroupAction {\r\n  get typeTitle() {\r\n    return \"Tick\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"tick\";\r\n  }\r\n\r\n  get title() {\r\n    return this.typeTitle;\r\n  }\r\n\r\n  get ticks() {\r\n    return this.getArgumentAsNumber(\"ticks\");\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"ticks\", \"number\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      let functionLine = \"export function \" + this.group.name + \"() {\";\r\n      lines.push(functionLine);\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n\r\n    if (placement === ScriptGenerationPlacement.initInSequence) {\r\n      let ticks = this.getProperty(\"everyNTicks\");\r\n\r\n      if (!ticks) {\r\n        ticks = 1;\r\n      }\r\n      ActionGroup.addLine(lines, context.indent, \"mc.system.runInterval(\" + this.group.name + \", \" + ticks + \");\");\r\n    }\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class WorldSendMessageAction extends Action {\r\n  get typeId() {\r\n    return \"world_send_message\";\r\n  }\r\n\r\n  get message() {\r\n    return this.getArgumentAsString(\"message\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.message) {\r\n      return;\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"say \" + this.message);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.message) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      ActionGroup.addLine(lines, context.indent, 'mc.world.sendMessage(\"' + this.message + '\");');\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n}\r\n", "import Utilities from \"../core/Utilities\";\r\nimport DataFormFile from \"../dataform/DataFormFile\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport BlockBreakAction from \"./BlockBreakAction\";\r\nimport BlockExplodeAction from \"./BlockExplodeAction\";\r\nimport BlockSetAction from \"./BlockSetAction\";\r\nimport EntityDieAction from \"./EntityDieAction\";\r\nimport EntitySpawnAction from \"./EntitySpawnAction\";\r\nimport GeneralAction from \"./GeneralAction\";\r\nimport IAction, { ActionContextType } from \"./IAction\";\r\nimport IActionGroup from \"./IActionGroup\";\r\nimport { ActionSetTarget } from \"./IActionSetData\";\r\nimport ItemSpawnAction from \"./ItemSpawnAction\";\r\nimport ParticleSpawnAction from \"./ParticleSpawnAction\";\r\nimport PlayerJoinAction from \"./PlayerJoinAction\";\r\nimport RandomizeGroupAction from \"./RandomizeGroupAction\";\r\nimport SequenceGroupAction from \"./SequenceGroupAction\";\r\nimport SoundPlayAction from \"./SoundPlayAction\";\r\nimport TestIdleAction from \"./TestIdleAction\";\r\nimport TestSimulatedPlayerMoveAction from \"./TestSimulatedPlayerMoveAction\";\r\nimport TestSimulatedPlayerSpawnAction from \"./TestSimulatedPlayerSpawnAction\";\r\nimport TickGroupAction from \"./TickGroupAction\";\r\nimport WorldSendMessageAction from \"./WorldSendMessageAction\";\r\n\r\nexport interface IActionSetActionType {\r\n  id: string;\r\n  title: string;\r\n  requiredContextType: ActionContextType;\r\n}\r\n\r\nexport interface IActionType {\r\n  id: string;\r\n  title: string;\r\n  form: IFormDefinition;\r\n}\r\n\r\nconst EntitySpawnActionType: IActionSetActionType = {\r\n  id: \"entity_spawn\",\r\n  title: \"Entity Spawn\",\r\n  requiredContextType: ActionContextType.dimensionLocation,\r\n};\r\n\r\nconst BlockBreakActionType: IActionSetActionType = {\r\n  id: \"block_break\",\r\n  title: \"Block Break\",\r\n  requiredContextType: ActionContextType.dimensionLocation,\r\n};\r\n\r\nexport const GroupActions = [\"tick\", \"entity_die\", \"block_explode\", \"player_join\", \"randomize\", \"sequence\"];\r\n\r\nexport class ActionSetCatalog {\r\n  static async getEntityLegacyFiltersSet() {\r\n    const legacyFilterTypes: IActionType[] = [];\r\n\r\n    await ActionSetCatalog.addTypesFromFormFolder(legacyFilterTypes, \"entityfilters\", ActionSetTarget.entityEvent);\r\n\r\n    return legacyFilterTypes;\r\n  }\r\n\r\n  static async getScriptSet() {\r\n    const scriptFilterTypes: IActionType[] = [];\r\n\r\n    await ActionSetCatalog.addTypesFromFormFolder(scriptFilterTypes, \"scriptfilters\", ActionSetTarget.script);\r\n\r\n    return scriptFilterTypes;\r\n  }\r\n\r\n  static async addTypesFromFormFolder(actionList: IActionType[], folderName: string, actionSetTarget: ActionSetTarget) {\r\n    const formsFolder = await Database.getFormsFolder(folderName);\r\n\r\n    if (!formsFolder) {\r\n      return;\r\n    }\r\n\r\n    await formsFolder.load();\r\n\r\n    for (const fileName in formsFolder.files) {\r\n      const file = formsFolder.files[fileName];\r\n\r\n      if (file) {\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n\r\n        const form = await DataFormFile.ensureOnFile(file);\r\n\r\n        if (form && form.formDefinition) {\r\n          let shouldAddItem = true;\r\n\r\n          if (form.formDefinition.tags) {\r\n            if (actionSetTarget === ActionSetTarget.entityEvent && !form.formDefinition.tags.includes(\"entityevent\")) {\r\n              shouldAddItem = false;\r\n            }\r\n            if (actionSetTarget === ActionSetTarget.script && !form.formDefinition.tags.includes(\"script\")) {\r\n              shouldAddItem = false;\r\n            }\r\n            if (actionSetTarget === ActionSetTarget.mcfunction && !form.formDefinition.tags.includes(\"commands\")) {\r\n              shouldAddItem = false;\r\n            }\r\n            if (actionSetTarget === ActionSetTarget.gameTest && !form.formDefinition.tags.includes(\"test\")) {\r\n              shouldAddItem = false;\r\n            }\r\n          } else {\r\n            shouldAddItem = false;\r\n          }\r\n\r\n          if (shouldAddItem) {\r\n            actionList.push({\r\n              id: StorageUtilities.getCoreBaseFromName(fileName),\r\n              title: form.title\r\n                ? form.title\r\n                : Utilities.humanify(form.id ? form.id : StorageUtilities.getCoreBaseFromName(fileName)),\r\n              form: form.formDefinition,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getDefaultContextForTarget(actionSetTarget: ActionSetTarget) {\r\n    if (actionSetTarget === ActionSetTarget.entityEvent) {\r\n      return ActionContextType.entity;\r\n    }\r\n\r\n    return ActionContextType.general;\r\n  }\r\n\r\n  static async getActionCatalog(actionSetTarget: ActionSetTarget): Promise<IActionType[]> {\r\n    const actionTypes: IActionType[] = [];\r\n\r\n    if (actionSetTarget === ActionSetTarget.entityEvent) {\r\n      await ActionSetCatalog.addTypesFromFormFolder(actionTypes, \"entityevents\", actionSetTarget);\r\n    } else {\r\n      await ActionSetCatalog.addTypesFromFormFolder(actionTypes, \"action\", actionSetTarget);\r\n    }\r\n\r\n    return actionTypes;\r\n  }\r\n\r\n  static createActionGroup(parent: ActionGroup, data: IActionGroup, id?: string): ActionGroup {\r\n    const ag = new ActionGroup(\r\n      data\r\n        ? data\r\n        : {\r\n            id: id ? id : Utilities.createRandomId(10),\r\n            actions: [],\r\n          },\r\n      parent.actionSet\r\n    );\r\n\r\n    return ag;\r\n  }\r\n\r\n  static createActionOrGroup(\r\n    parent: ActionGroup,\r\n    type: string,\r\n    data?: IAction | ActionGroup,\r\n    id?: string\r\n  ): Action | ActionGroup {\r\n    if (GroupActions.includes(type)) {\r\n      const ag = this.createActionGroup(parent, data as IActionGroup, id);\r\n\r\n      ag.groupActionType = type;\r\n\r\n      return ag;\r\n    }\r\n\r\n    return this.createAction(parent, type, data as IAction, id);\r\n  }\r\n\r\n  static createAction(parent: ActionGroup, type: string, data?: IAction, id?: string): Action {\r\n    let action = undefined;\r\n\r\n    if (!data) {\r\n      data = {\r\n        type: type,\r\n      };\r\n    }\r\n\r\n    switch (type) {\r\n      case EntitySpawnActionType.id:\r\n        action = new EntitySpawnAction(parent, data as IAction);\r\n        break;\r\n      case BlockBreakActionType.id:\r\n        action = new BlockBreakAction(parent, data as IAction);\r\n        break;\r\n      case \"test_simulated_player_spawn\":\r\n        action = new TestSimulatedPlayerSpawnAction(parent, data as IAction);\r\n        break;\r\n      case \"test_simulated_player_move\":\r\n        action = new TestSimulatedPlayerMoveAction(parent, data as IAction);\r\n        break;\r\n      case \"test_idle\":\r\n        action = new TestIdleAction(parent, data as IAction);\r\n        break;\r\n      case \"tick\":\r\n        action = new TickGroupAction(parent, data);\r\n        break;\r\n      case \"randomize\":\r\n        action = new RandomizeGroupAction(parent, data);\r\n        break;\r\n      case \"sequence\":\r\n        action = new SequenceGroupAction(parent, data);\r\n        break;\r\n      case \"world_send_message\":\r\n        action = new WorldSendMessageAction(parent, data);\r\n        break;\r\n      case \"entity_die\":\r\n        action = new EntityDieAction(parent, data);\r\n        break;\r\n      case \"player_join\":\r\n        action = new PlayerJoinAction(parent, data);\r\n        break;\r\n      case \"block_set\":\r\n        action = new BlockSetAction(parent, data);\r\n        break;\r\n      case \"particle_spawn\":\r\n        action = new ParticleSpawnAction(parent, data);\r\n        break;\r\n      case \"item_spawn\":\r\n        action = new ItemSpawnAction(parent, data);\r\n        break;\r\n      case \"block_explode\":\r\n        action = new BlockExplodeAction(parent, data);\r\n        break;\r\n      case \"sound_play\":\r\n        action = new SoundPlayAction(parent, data);\r\n        break;\r\n      default:\r\n        action = new GeneralAction(parent, data);\r\n        action.typeId = type;\r\n        break;\r\n    }\r\n\r\n    if (id) {\r\n      action.id = id;\r\n    }\r\n\r\n    return action;\r\n  }\r\n}\r\n", "import ActionSet from \"./ActionSet\";\r\nimport Action from \"./Action\";\r\nimport IActionGroup from \"./IActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport Test from \"../gameTest/Test\";\r\nimport ActionSetScope from \"./ActionSetScope\";\r\n\r\nimport Location from \"../minecraft/Location\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\nimport IWorld from \"../minecraft/IWorld\";\r\nimport { ActionSetCatalog } from \"./ActionSetCatalog\";\r\nimport IAction, { ActionContextType } from \"./IAction\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\nimport IGetSetPropertyObject from \"../dataform/IGetSetPropertyObject\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport { IActionable } from \"./IActionable\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class ActionGroup implements IGetSetPropertyObject, IActionable {\r\n  data: IActionGroup;\r\n  _actionSet?: ActionSet;\r\n  actions: (Action | ActionGroup)[];\r\n  expectedContext: ActionContextType = ActionContextType.general;\r\n  _groupAction?: Action;\r\n\r\n  private _onPropertyChanged = new EventDispatcher<Action, string>();\r\n\r\n  public get groupActionType() {\r\n    return this.data?.groupActionType;\r\n  }\r\n\r\n  public set groupActionType(newGat: string | undefined) {\r\n    if (!this.data) {\r\n      this.data = {\r\n        actions: [],\r\n      };\r\n    }\r\n\r\n    if (newGat !== this.data.groupActionType) {\r\n      this._groupAction = undefined;\r\n      this.data.groupActionType = newGat;\r\n      this.ensureGroupAction();\r\n    }\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  get actionSet() {\r\n    return this._actionSet;\r\n  }\r\n\r\n  set actionSet(newActionSet: ActionSet | undefined) {\r\n    this._actionSet = newActionSet;\r\n  }\r\n\r\n  get id() {\r\n    return this.data.id;\r\n  }\r\n\r\n  set id(newId: string | undefined) {\r\n    this.data.id = newId;\r\n  }\r\n\r\n  get name() {\r\n    return this.data.name;\r\n  }\r\n\r\n  set name(newName: string | undefined) {\r\n    this.data.name = newName;\r\n  }\r\n\r\n  get typeId() {\r\n    if (this.data.groupActionType) {\r\n      return this.data.groupActionType;\r\n    }\r\n\r\n    return \"group\";\r\n  }\r\n\r\n  get canvasX() {\r\n    return this.data.canvasX;\r\n  }\r\n\r\n  set canvasX(inboundX: number | undefined) {\r\n    this.data.canvasX = inboundX;\r\n  }\r\n\r\n  get canvasY() {\r\n    return this.data.canvasY;\r\n  }\r\n\r\n  set canvasY(inboundY: number | undefined) {\r\n    this.data.canvasY = inboundY;\r\n  }\r\n\r\n  constructor(data: IActionGroup, actionSet?: ActionSet, doNotHydrate?: boolean) {\r\n    this.data = data;\r\n    this._actionSet = actionSet;\r\n    this.actions = [];\r\n\r\n    if (!doNotHydrate) {\r\n      this._hydrate();\r\n    }\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions) {\r\n    return {};\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions) {\r\n    return {};\r\n  }\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ): void {}\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions): void {}\r\n\r\n  getProperty(id: string) {\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.data.groupActionData) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._groupAction) {\r\n      return this._groupAction.getProperty(id);\r\n    }\r\n\r\n    return (this.data.groupActionData as any)[id] as any;\r\n  }\r\n\r\n  setProperty(id: string, value: any) {\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n    if (!this.data.groupActionData && this.data.groupActionType) {\r\n      this.data.groupActionData = {\r\n        type: this.data.groupActionType,\r\n      };\r\n    }\r\n\r\n    if (this.groupAction) {\r\n      this.groupAction.setProperty(id, value);\r\n    }\r\n  }\r\n\r\n  ensureGroupAction() {\r\n    if (!this._groupAction && this.data && this.data.groupActionType) {\r\n      this._hydrateGroupAction();\r\n    }\r\n  }\r\n\r\n  get groupAction() {\r\n    if (this._groupAction) {\r\n      return this._groupAction;\r\n    }\r\n\r\n    this.ensureGroupAction();\r\n\r\n    return this._groupAction;\r\n  }\r\n\r\n  getBaseValue(): any {\r\n    return this.data as any;\r\n  }\r\n\r\n  setBaseValue(value: any): void {\r\n    (this.data as any) = value;\r\n  }\r\n\r\n  getArgumentAsNumber(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    if (typeof val === \"number\") {\r\n      return val;\r\n    } else if (typeof val === \"string\") {\r\n      return parseFloat(val);\r\n    }\r\n\r\n    throw new Error();\r\n  }\r\n\r\n  validateArgumentIsType(name: string, type: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    const typestr = typeof val;\r\n\r\n    switch (type) {\r\n      case \"BlockLocation\":\r\n      case \"Location\":\r\n        if (!(val instanceof Array) || val.length !== 3) {\r\n          throw new Error(\"Expected an array of 3 numbers for parameter '\" + name + \"'\");\r\n        }\r\n        break;\r\n\r\n      case \"boolean\":\r\n      case \"number\":\r\n      case \"string\":\r\n        if (typestr !== type) {\r\n          throw new Error(\"Unexpected type mismatch: \" + name + \" is \" + typestr + \" (expected \" + type + \")\");\r\n        }\r\n        break;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  _hydrate() {\r\n    this.actions = [];\r\n\r\n    if (this.data.actions && Array.isArray(this.data.actions)) {\r\n      for (const dataAction of this.data.actions) {\r\n        if (dataAction.actions) {\r\n          const newActionGroup = ActionSetCatalog.createActionGroup(this, dataAction as IActionGroup);\r\n          this.actions.push(newActionGroup);\r\n        } else if ((dataAction as IAction).type) {\r\n          const newAction = ActionSetCatalog.createAction(this, (dataAction as IAction).type, dataAction as IAction);\r\n          this.actions.push(newAction);\r\n        }\r\n      }\r\n    }\r\n\r\n    this._hydrateGroupAction();\r\n  }\r\n\r\n  _hydrateGroupAction() {\r\n    if (this.data && this.data.groupActionType) {\r\n      if (!this.data.groupActionData) {\r\n        this.data.groupActionData = { type: this.data.groupActionType };\r\n      }\r\n\r\n      const act = ActionSetCatalog.createAction(this, this.data.groupActionType, this.data.groupActionData);\r\n\r\n      this._groupAction = act;\r\n    }\r\n  }\r\n\r\n  startRun(world?: IWorld, test?: Test) {\r\n    const scope = new ActionSetScope();\r\n\r\n    scope.test = test;\r\n    scope.world = world;\r\n\r\n    this.run(scope);\r\n  }\r\n\r\n  run(parentScope: ActionSetScope) {\r\n    for (let i = 0; i < this.actions.length; i++) {\r\n      const action = this.actions[i];\r\n\r\n      action.run(parentScope);\r\n    }\r\n  }\r\n\r\n  setActions(newActionList: (Action | ActionSet)[]) {\r\n    this.actions = newActionList;\r\n    const dataArr: (IAction | IActionGroup)[] = [];\r\n\r\n    for (const actionOrGroup of newActionList) {\r\n      actionOrGroup.actionSet = this.actionSet;\r\n\r\n      dataArr.push(actionOrGroup.data);\r\n    }\r\n\r\n    this.data.actions = dataArr;\r\n  }\r\n\r\n  absolutizeLocation(location: Location) {\r\n    if (!this._actionSet || !this._actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new Location(\r\n      this._actionSet.locationRoot.x + location.x,\r\n      this._actionSet.locationRoot.y + location.y,\r\n      this._actionSet.locationRoot.z + location.z\r\n    );\r\n  }\r\n\r\n  absolutizeBlockLocation(location: BlockLocation) {\r\n    if (!this._actionSet || !this._actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new BlockLocation(\r\n      Math.round(this._actionSet.locationRoot.x + location.x),\r\n      Math.round(this._actionSet.locationRoot.y + location.y),\r\n      Math.round(this._actionSet.locationRoot.z + location.z)\r\n    );\r\n  }\r\n\r\n  relativizeLocation(location: Location) {\r\n    if (!this._actionSet || !this._actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new Location(\r\n      location.x - this._actionSet.locationRoot.x,\r\n      location.y - this._actionSet.locationRoot.y,\r\n      location.z - this._actionSet.locationRoot.z\r\n    );\r\n  }\r\n\r\n  relativizeBlockLocation(location: BlockLocation) {\r\n    if (!this._actionSet || !this._actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new BlockLocation(\r\n      Math.round(location.x - this._actionSet.locationRoot.x),\r\n      Math.round(location.y - this._actionSet.locationRoot.y),\r\n      Math.round(location.z - this._actionSet.locationRoot.z)\r\n    );\r\n  }\r\n\r\n  addAction(action: Action | ActionGroup) {\r\n    this.actions.push(action);\r\n\r\n    if (!this.data.actions) {\r\n      this.data.actions = [];\r\n    }\r\n\r\n    this.data.actions.push(action.data);\r\n  }\r\n\r\n  static mergeScriptOptions(source: IScriptGenerationOptions, add: IScriptGenerationOptions) {\r\n    source.isFunction = source.isFunction || add.isFunction;\r\n  }\r\n\r\n  static mergeScriptRequirements(source: IScriptRequirements, add: IScriptRequirements) {\r\n    source.needsLocalOverworld = source.needsLocalOverworld || add.needsLocalOverworld;\r\n  }\r\n\r\n  static mergeCommandRequirements(source: ICommandRequirements, add: ICommandRequirements) {}\r\n\r\n  static addLine(lines: string[], indent: number, line: string) {\r\n    lines.push(this.getIndentSpaces(indent) + line);\r\n  }\r\n\r\n  static getIndentSpaces(indent: number) {\r\n    let result = \"\";\r\n\r\n    for (let i = 0; i < indent; i++) {\r\n      result += \" \";\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  ensureLoaded() {\r\n    if (this.data.actions) {\r\n      for (const actionData of this.data.actions) {\r\n        if ((actionData as IAction).type) {\r\n          const action = ActionSetCatalog.createAction(this, (actionData as IAction).type, actionData as IAction);\r\n\r\n          this.actions.push(action);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  removeAction(removeAction: Action) {\r\n    const newActionArr: (Action | ActionGroup)[] = [];\r\n\r\n    for (const action of this.actions) {\r\n      if (action !== removeAction) {\r\n        newActionArr.push(action);\r\n      }\r\n    }\r\n\r\n    this.actions = newActionArr;\r\n  }\r\n}\r\n", "import IActionSetData, { ActionSetTarget } from \"./IActionSetData\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport Test from \"../gameTest/Test\";\r\nimport Location from \"../minecraft/Location\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\n\r\nexport default class ActionSet extends ActionGroup {\r\n  actionSetData: IActionSetData;\r\n  _test: Test | undefined;\r\n  _locationRoot: Location | undefined;\r\n\r\n  get targetType() {\r\n    if (!this.actionSetData || !this.actionSetData.targetType) {\r\n      return ActionSetTarget.general;\r\n    }\r\n\r\n    return this.actionSetData.targetType;\r\n  }\r\n\r\n  set targetType(newTargetType: ActionSetTarget) {\r\n    this.actionSetData.targetType = newTargetType;\r\n  }\r\n\r\n  get locationRoot() {\r\n    return this._locationRoot;\r\n  }\r\n\r\n  set locationRoot(newRoot: Location | undefined) {\r\n    this._locationRoot = newRoot;\r\n  }\r\n\r\n  absolutizeLocation(location: Location) {\r\n    if (!this.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new Location(\r\n      this.locationRoot.x + location.x,\r\n      this.locationRoot.y + location.y,\r\n      this.locationRoot.z + location.z\r\n    );\r\n  }\r\n\r\n  absolutizeBlockLocation(location: BlockLocation) {\r\n    if (!this.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new BlockLocation(\r\n      Math.round(this.locationRoot.x + location.x),\r\n      Math.round(this.locationRoot.y + location.y),\r\n      Math.round(this.locationRoot.z + location.z)\r\n    );\r\n  }\r\n\r\n  relativizeLocation(location: Location) {\r\n    if (!this.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new Location(\r\n      location.x - this.locationRoot.x,\r\n      location.y - this.locationRoot.y,\r\n      location.z - this.locationRoot.z\r\n    );\r\n  }\r\n\r\n  relativizeBlockLocation(location: BlockLocation) {\r\n    if (!this.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new BlockLocation(\r\n      Math.round(location.x - this.locationRoot.x),\r\n      Math.round(location.y - this.locationRoot.y),\r\n      Math.round(location.z - this.locationRoot.z)\r\n    );\r\n  }\r\n\r\n  get test() {\r\n    return this._test;\r\n  }\r\n\r\n  get name() {\r\n    return this.actionSetData.name;\r\n  }\r\n\r\n  set name(newValue: string) {\r\n    this.actionSetData.name = newValue;\r\n  }\r\n\r\n  constructor(data: IActionSetData) {\r\n    super(data, undefined, true);\r\n    this.actionSetData = data;\r\n    this._actionSet = this;\r\n\r\n    this._hydrate();\r\n  }\r\n}\r\n", "import Action from \"../actions/Action\";\r\nimport ActionGroup from \"../actions/ActionGroup\";\r\nimport ActionSet from \"../actions/ActionSet\";\r\nimport { ActionContextType } from \"../actions/IAction\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"../actions/IScriptGenerationContext\";\r\nimport IScriptRequirements from \"../actions/IScriptRequirements\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport const AUTOGENERATED_WHOLEFILE_SCRIPT_SEPARATOR =\r\n  \"// ===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING\";\r\n\r\nexport interface IScriptGenerationOptions {\r\n  typeScript: boolean;\r\n  isFunction?: boolean;\r\n  addTestIdlePause?: boolean;\r\n  useGameTestApis?: boolean;\r\n}\r\n\r\nexport default class ActionSetScriptGenerator {\r\n  static generateScript(actionSet: ActionSet, options?: IScriptGenerationOptions): string {\r\n    const lines: string[] = [];\r\n\r\n    if (!options) {\r\n      options = {\r\n        typeScript: true,\r\n      };\r\n    }\r\n\r\n    this.addScriptLines(lines, actionSet, options);\r\n\r\n    return lines.join(\"\\n\");\r\n  }\r\n\r\n  static generateGameTestJavaScript(\r\n    actionSet: ActionSet,\r\n    groupName: string,\r\n    nameSuffix: string,\r\n    structureName: string\r\n  ) {\r\n    const lines: string[] = [];\r\n\r\n    let name = actionSet.name ?? \"action_set\";\r\n\r\n    if (nameSuffix) {\r\n      name += nameSuffix;\r\n    }\r\n\r\n    name = Utilities.getSimpleString(name);\r\n    groupName = Utilities.getSimpleString(groupName);\r\n\r\n    lines.push(\"async function gt_\" + name + \"(test) {\");\r\n    this.addScriptGroupLines(\r\n      lines,\r\n      actionSet,\r\n      {\r\n        isFunction: true,\r\n        addTestIdlePause: true,\r\n        useGameTestApis: true,\r\n        typeScript: false,\r\n      },\r\n      { indent: 2 },\r\n      ScriptGenerationPlacement.inSequence\r\n    );\r\n    lines.push(\"}\");\r\n    lines.push(\r\n      'registerAsync(\"' +\r\n        groupName +\r\n        '\", \"' +\r\n        name +\r\n        '\", gt_' +\r\n        name +\r\n        ').maxTicks(4000).structureName(\"gametest:' +\r\n        structureName +\r\n        'empty\");'\r\n    );\r\n\r\n    return lines.join(\"\\n\");\r\n  }\r\n\r\n  static addScriptGroupLinesForFunction(\r\n    lines: string[],\r\n    actionGroup: ActionGroup,\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext\r\n  ) {\r\n    this.addScriptGroupLines(lines, actionGroup, options, { indent: 2 }, ScriptGenerationPlacement.beforeBlockStart);\r\n    if (actionGroup.groupAction) {\r\n      actionGroup.groupAction.addScriptLines(lines, options, { indent: 2 }, ScriptGenerationPlacement.blockStart);\r\n    } else {\r\n      let functionLine = \"export function \" + actionGroup.name + \"(\";\r\n      let args = \"\";\r\n\r\n      if (actionGroup.expectedContext === ActionContextType.dimensionLocation) {\r\n        args += \"location: mc.DimensionLocation\";\r\n      }\r\n\r\n      functionLine += args + \") {\";\r\n\r\n      options.isFunction = true;\r\n\r\n      lines.push(functionLine);\r\n    }\r\n    this.addScriptGroupLines(lines, actionGroup, options, { indent: 2 }, ScriptGenerationPlacement.afterBlockStart);\r\n    this.addScriptGroupLines(lines, actionGroup, options, { indent: 2 }, ScriptGenerationPlacement.inSequence);\r\n    this.addScriptGroupLines(lines, actionGroup, options, { indent: 2 }, ScriptGenerationPlacement.beforeBlockEnd);\r\n    if (actionGroup.groupAction) {\r\n      actionGroup.groupAction.addScriptLines(lines, options, { indent: 2 }, ScriptGenerationPlacement.blockEnd);\r\n    } else {\r\n      lines.push(\"}\");\r\n    }\r\n    this.addScriptGroupLines(lines, actionGroup, options, { indent: 2 }, ScriptGenerationPlacement.afterBlockEnd);\r\n  }\r\n\r\n  static addInitGroupLines(\r\n    lines: string[],\r\n    actionSet: ActionSet,\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext\r\n  ) {\r\n    lines.push(\"export function init() {\");\r\n\r\n    this.addScriptGroupLines(lines, actionSet, options, { indent: 2 }, ScriptGenerationPlacement.initInSequence);\r\n\r\n    lines.push(\"}\");\r\n  }\r\n\r\n  static addScriptGroupLines(\r\n    lines: string[],\r\n    actionGroup: ActionGroup,\r\n    scriptGenOptions: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    const req: IScriptRequirements = {};\r\n\r\n    for (const action of actionGroup.actions) {\r\n      if (action instanceof Action) {\r\n        ActionGroup.mergeScriptRequirements(req, action.getScriptRequirements(scriptGenOptions));\r\n      }\r\n    }\r\n\r\n    if (req.needsLocalOverworld && placement === ScriptGenerationPlacement.inSequence) {\r\n      ActionGroup.addLine(lines, context.indent, 'const overworld = mc.world.getDimension(\"overworld\");');\r\n    }\r\n\r\n    if (\r\n      actionGroup.groupAction &&\r\n      (placement === ScriptGenerationPlacement.initInSequence || placement === ScriptGenerationPlacement.inSequence)\r\n    ) {\r\n      actionGroup.groupAction.addScriptLines(lines, scriptGenOptions, context, placement);\r\n    }\r\n\r\n    for (const action of actionGroup.actions) {\r\n      if (action instanceof ActionGroup) {\r\n        this.addScriptGroupLines(lines, action, scriptGenOptions, context, placement);\r\n      } else if (action instanceof Action) {\r\n        action.addScriptLines(lines, scriptGenOptions, context, placement);\r\n      }\r\n      if (scriptGenOptions.addTestIdlePause) {\r\n        ActionGroup.addLine(lines, context.indent, \"await test.idle(15);\");\r\n      }\r\n    }\r\n  }\r\n\r\n  static addScriptLines(lines: string[], actionSet: ActionSet, options: IScriptGenerationOptions) {\r\n    lines.push(AUTOGENERATED_WHOLEFILE_SCRIPT_SEPARATOR);\r\n\r\n    lines.push('import * as mc from \"@minecraft/server\";');\r\n\r\n    let subGroupCount = 0;\r\n    let subActionCount = 0;\r\n\r\n    for (const childAction of actionSet.actions) {\r\n      if (childAction instanceof ActionGroup) {\r\n        subGroupCount++;\r\n      } else if (childAction instanceof Action) {\r\n        subActionCount++;\r\n      }\r\n    }\r\n\r\n    let actionGroupCount = 0;\r\n    if (subGroupCount > 0 && subActionCount === 0) {\r\n      for (const childAction of actionSet.actions) {\r\n        if (childAction instanceof ActionGroup) {\r\n          if (!childAction.name) {\r\n            childAction.name = (actionSet.name ?? \"action\") + \"_\" + String(actionGroupCount + 1);\r\n          }\r\n\r\n          this.addScriptGroupLinesForFunction(lines, childAction, options, { indent: 2 });\r\n          actionGroupCount++;\r\n        }\r\n      }\r\n    } else {\r\n      this.addScriptGroupLinesForFunction(lines, actionSet, options, { indent: 2 });\r\n    }\r\n\r\n    this.addInitGroupLines(lines, actionSet, options, { indent: 2 });\r\n  }\r\n}\r\n", "import IWorldTestArea from \"./IWorldTestArea\";\r\nimport WorldTest from \"./WorldTest.js\";\r\nimport BlockLocation from \"./../minecraft/BlockLocation\";\r\nimport ActionSet from \"../actions/ActionSet\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport ActionSetScriptGenerator from \"../script/ActionSetScriptGenerator\";\r\nimport { ActionSetTarget } from \"../actions/IActionSetData\";\r\n\r\nexport default class WorldTestArea {\r\n  private _test: WorldTest;\r\n  data: IWorldTestArea;\r\n  public scripts: ActionSet[];\r\n  private _location: BlockLocation | undefined;\r\n  private _onPropertyChanged = new EventDispatcher<WorldTestArea, string>();\r\n\r\n  getProperty(id: string): any {\r\n    switch (id) {\r\n      case \"location\":\r\n        return this.location.toArray();\r\n    }\r\n  }\r\n\r\n  setProperty(id: string, value: any): void {\r\n    switch (id) {\r\n      case \"location\":\r\n        this.location = BlockLocation.from(value);\r\n    }\r\n  }\r\n\r\n  getBaseValue(): any {\r\n    return this.data;\r\n  }\r\n\r\n  setBaseValue(value: any): void {\r\n    this.data = value;\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  get location(): BlockLocation {\r\n    if (!this._location) {\r\n      let x = 0;\r\n      let y = 0;\r\n      let z = 0;\r\n\r\n      if (this.data.location && this.data.location.length && this.data.location.length === 3) {\r\n        x = this.data.location[0];\r\n        y = this.data.location[1];\r\n        z = this.data.location[2];\r\n      }\r\n      this._location = new BlockLocation(x, y, z);\r\n    }\r\n\r\n    return this._location;\r\n  }\r\n\r\n  set location(location: BlockLocation) {\r\n    if (\r\n      (!this._location && location) ||\r\n      (this._location &&\r\n        (this._location.x !== location.x || this._location.y !== location.y || this._location.z !== location.z))\r\n    ) {\r\n      this._location = location;\r\n\r\n      for (let i = 0; i < this.scripts.length; i++) {\r\n        this.scripts[i].locationRoot = this._location.toLocation();\r\n      }\r\n\r\n      this._onPropertyChanged.dispatch(this, \"location\");\r\n    }\r\n  }\r\n\r\n  get title(): string {\r\n    const loc = this.location;\r\n\r\n    return \"test\" + loc.title;\r\n  }\r\n\r\n  constructor(test: WorldTest, data: IWorldTestArea) {\r\n    this.scripts = [];\r\n    this.data = data;\r\n    this._test = test;\r\n  }\r\n\r\n  generateGameTestJavaScript(groupName: string) {\r\n    const scripts: string[] = [];\r\n\r\n    for (let i = 0; i < this.scripts.length; i++) {\r\n      const script = this.scripts[i];\r\n\r\n      let scriptName = groupName;\r\n      if (this.scripts.length > 1) {\r\n        scriptName += (i + 1).toString();\r\n      }\r\n      scripts.push(\r\n        ActionSetScriptGenerator.generateGameTestJavaScript(script, scriptName, (i + 1).toString(), this._test.name)\r\n      );\r\n    }\r\n\r\n    return scripts.join(\"\\n\");\r\n  }\r\n\r\n  createScript(type: string) {\r\n    const as = new ActionSet({\r\n      name: \"Area Script\",\r\n      targetType: ActionSetTarget.worldTest,\r\n      actions: [],\r\n    });\r\n\r\n    if (as) {\r\n      if (this._location) {\r\n        as.locationRoot = this._location.toLocation();\r\n      }\r\n\r\n      this.scripts.push(as);\r\n\r\n      if (!this.data.scripts) {\r\n        this.data.scripts = [];\r\n      }\r\n\r\n      this.data.scripts.push(as.actionSetData);\r\n    }\r\n  }\r\n}\r\n", "import IWorldTestDefinition from \"./IWorldTestDefinition\";\r\nimport WorldTestArea from \"./WorldTestArea\";\r\n\r\nexport default class WorldTest {\r\n  public data: IWorldTestDefinition;\r\n  public areas: WorldTestArea[];\r\n\r\n  #isLoaded: boolean;\r\n\r\n  constructor(data: IWorldTestDefinition) {\r\n    this.#isLoaded = false;\r\n    this.areas = [];\r\n    this.data = data;\r\n  }\r\n\r\n  public ensureLoaded() {\r\n    if (this.data.areas) {\r\n      for (const area of this.data.areas) {\r\n        const areaWrap = new WorldTestArea(this, area);\r\n        this.areas.push(areaWrap);\r\n      }\r\n    }\r\n\r\n    this.#isLoaded = true;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this.#isLoaded;\r\n  }\r\n\r\n  public get worldId() {\r\n    return this.data.worldId;\r\n  }\r\n\r\n  public set worldId(newWorldId: string | undefined) {\r\n    this.data.worldId = newWorldId;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.data === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this.data.name;\r\n  }\r\n\r\n  public set name(newName: string) {\r\n    if (this.data === undefined) {\r\n      return;\r\n    }\r\n\r\n    this.data.name = newName;\r\n  }\r\n\r\n  generateJavaScript() {\r\n    return \"\";\r\n  }\r\n\r\n  generateGameTestJavaScript(name: string) {\r\n    const scripts: string[] = [];\r\n\r\n    scripts.push('import { register, registerAsync, Test, SimulatedPlayer } from \"@minecraft/server-gametest\";');\r\n    scripts.push('import { BlockLocation, Location, world } from \"@minecraft/server\";');\r\n\r\n    for (let i = 0; i < this.areas.length; i++) {\r\n      const area = this.areas[i];\r\n\r\n      scripts.push(area.generateGameTestJavaScript(area.title));\r\n    }\r\n\r\n    return scripts.join(\"\\n\");\r\n  }\r\n\r\n  generateCommandLine() {\r\n    return \"\";\r\n  }\r\n\r\n  createArea(type: string) {\r\n    const area = new WorldTestArea(this, { location: [], scripts: [] });\r\n\r\n    if (area) {\r\n      this.areas.push(area);\r\n\r\n      if (!this.data.areas) {\r\n        this.data.areas = [];\r\n      }\r\n\r\n      this.data.areas.push(area.data);\r\n    }\r\n  }\r\n}\r\n", "import IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IWorldTestDefinition from \"../worldtest/IWorldTestDefinition\";\r\nimport WorldTest from \"./../worldtest/WorldTest\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"./../app/Project\";\r\nimport Structure from \"../minecraft/Structure\";\r\nimport BlockVolume from \"../minecraft/BlockVolume\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class WorldTestManager {\r\n  private _jsonFile?: IFile;\r\n  private _jsFile?: IFile;\r\n  private _functionFile?: IFile;\r\n  private _structureFile?: IFile;\r\n  private _isLoaded: boolean;\r\n  private _worldTest?: WorldTest;\r\n  private _worldTestData?: IWorldTestDefinition;\r\n\r\n  get worldTest() {\r\n    return this._worldTest;\r\n  }\r\n\r\n  private _onLoaded = new EventDispatcher<WorldTestManager, WorldTestManager>();\r\n\r\n  constructor() {\r\n    this._isLoaded = false;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get jsonFile() {\r\n    return this._jsonFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get name() {\r\n    if (this._worldTestData === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this._worldTestData.name;\r\n  }\r\n\r\n  public set name(newName: string) {\r\n    if (this._worldTestData === undefined) {\r\n      return;\r\n    }\r\n\r\n    this._worldTestData.name = newName;\r\n  }\r\n\r\n  public set jsonFile(newFile: IFile | undefined) {\r\n    this._jsonFile = newFile;\r\n  }\r\n\r\n  public async load() {\r\n    if (this._jsonFile === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._jsonFile.loadContent();\r\n\r\n    if (!this._jsonFile.content || this._jsonFile.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const data: any = JSON.parse(this._jsonFile.content);\r\n\r\n      this._worldTestData = data;\r\n\r\n      if (data) {\r\n        this._worldTest = new WorldTest(data);\r\n\r\n        this._worldTest.ensureLoaded();\r\n        this._worldTest.name = StorageUtilities.getBaseFromName(this._jsonFile.name);\r\n      }\r\n    } catch (e) {\r\n      Log.fail(\"Could not parse world test JSON \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  private async ensureFunctionFile() {\r\n    if (this._jsonFile === undefined || this._functionFile !== undefined) {\r\n      return;\r\n    }\r\n\r\n    const newFileName = StorageUtilities.getBaseFromName(this._jsonFile.name) + \".mcfunction\";\r\n\r\n    let functionFolder = this._jsonFile.parentFolder;\r\n\r\n    if (functionFolder.name === \"scripts\" && functionFolder.parentFolder) {\r\n      functionFolder = functionFolder.parentFolder.ensureFolder(\"functions\");\r\n    }\r\n\r\n    await functionFolder.ensureExists();\r\n\r\n    this._functionFile = functionFolder.ensureFile(newFileName);\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._jsonFile === undefined || this._worldTest === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._worldTest?.data) {\r\n      return false;\r\n    }\r\n\r\n    this.ensureFunctionFile();\r\n\r\n    return this._jsonFile.setObjectContentIfSemanticallyDifferent(this._worldTest.data);\r\n  }\r\n\r\n  async persistSideFiles(project: Project) {\r\n    const bpFolder = await project.getDefaultBehaviorPackFolder();\r\n\r\n    if (!bpFolder || this._jsonFile === undefined) {\r\n      Log.unexpectedUndefined(\"WTM\");\r\n      return;\r\n    }\r\n\r\n    if (this._jsFile === undefined) {\r\n      const scriptsFolder = await project.ensureBehaviorPackScriptsFolder();\r\n\r\n      const newFileName = StorageUtilities.getBaseFromName(this._jsonFile.name) + \".gen.js\";\r\n\r\n      this._jsFile = scriptsFolder.ensureFile(newFileName);\r\n    }\r\n\r\n    if (this._structureFile === undefined) {\r\n      const structuresFolder = bpFolder.ensureFolder(\"structures\");\r\n\r\n      await structuresFolder.ensureExists();\r\n\r\n      const structuresSubFolder = structuresFolder.ensureFolder(\"gametest\");\r\n\r\n      await structuresSubFolder.ensureExists();\r\n\r\n      const newFileName = StorageUtilities.getBaseFromName(this._jsonFile.name) + \"empty.mcstructure\";\r\n\r\n      this._structureFile = structuresSubFolder.ensureFile(newFileName);\r\n    }\r\n\r\n    if (this.worldTest && this._jsFile) {\r\n      const jsString = this.worldTest.generateGameTestJavaScript(this._jsonFile.name);\r\n      this._jsFile.setContent(jsString);\r\n    }\r\n\r\n    if (this.worldTest) {\r\n      const functionsFolder = bpFolder.ensureFolder(\"functions\");\r\n\r\n      await functionsFolder.ensureExists();\r\n\r\n      for (let i = 0; i < this.worldTest.areas.length; i++) {\r\n        const area = this.worldTest.areas[i];\r\n\r\n        for (let j = 0; j < area.scripts.length; j++) {\r\n          const script = area.scripts[j];\r\n\r\n          const functionFile = functionsFolder.ensureFile(\r\n            Utilities.getSimpleString(area.title + (i + 1).toString() + script.name + (j + 1).toString()) +\r\n              \".mcfunction\"\r\n          );\r\n\r\n          const functionString = \"tp \" + area.location.x + \" \" + area.location.y + \" \" + area.location.z;\r\n          /*\"\\ngametest run \" +\r\n            Utilities.getSimpleString(area.title) +\r\n            \":\" +\r\n            Utilities.getSimpleString(script.name + (j + 1).toString());*/\r\n\r\n          functionFile.setContent(functionString);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.worldTest && this._structureFile) {\r\n      const structure = new Structure();\r\n      const cube = new BlockVolume();\r\n\r\n      cube.setMaxDimensions(8, 8, 8);\r\n\r\n      structure.cube = cube;\r\n\r\n      cube.getBlock(new BlockLocation(0, 0, 0)).typeName = \"minecraft:dirt\";\r\n\r\n      const bytes = structure.getMCStructureBytes();\r\n\r\n      if (bytes) {\r\n        this._structureFile.setContent(bytes);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<WorldTestManager, WorldTestManager>) {\r\n    let wtm = undefined;\r\n    if (file.manager === undefined) {\r\n      const wtm = new WorldTestManager();\r\n\r\n      wtm.jsonFile = file;\r\n\r\n      file.manager = wtm;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof WorldTestManager) {\r\n      wtm = file.manager as WorldTestManager;\r\n\r\n      if (!wtm.isLoaded) {\r\n        if (loadHandler) {\r\n          wtm.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await wtm.load();\r\n      }\r\n    }\r\n\r\n    return wtm;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport { IVsCodeExtensions } from \"./IVsCodeExtensions\";\r\n\r\nexport const VsCodeRecommendations = [\r\n  \"esbenp.prettier-vscode\",\r\n  \"blockceptionltd.blockceptionvscodeminecraftbedrockdevelopmentextension\",\r\n  \"mojang-studios.minecraft-debugger\",\r\n];\r\n\r\nexport default class VsCodeExtensionsDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: IVsCodeExtensions;\r\n\r\n  private _onLoaded = new EventDispatcher<VsCodeExtensionsDefinition, VsCodeExtensionsDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<VsCodeExtensionsDefinition, VsCodeExtensionsDefinition>\r\n  ) {\r\n    let dt: VsCodeExtensionsDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new VsCodeExtensionsDefinition();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof VsCodeExtensionsDefinition) {\r\n      dt = file.manager as VsCodeExtensionsDefinition;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"VSED\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async hasMinContent() {\r\n    await this.load();\r\n\r\n    if (!this.definition || !this.definition.recommendations) {\r\n      return false;\r\n    }\r\n\r\n    for (const reco of VsCodeRecommendations) {\r\n      if (!this.definition.recommendations.includes(reco)) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async ensureMinContent() {\r\n    const hasRecos = await this.hasMinContent();\r\n\r\n    if (hasRecos) {\r\n      return true;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      this.definition = { recommendations: [] };\r\n    }\r\n\r\n    if (!this.definition.recommendations) {\r\n      this.definition.recommendations = [];\r\n    }\r\n\r\n    for (const reco of VsCodeRecommendations) {\r\n      if (!this.definition.recommendations.includes(reco)) {\r\n        this.definition.recommendations.push(reco);\r\n      }\r\n    }\r\n\r\n    return this.definition;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent();\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    try {\r\n      const data: any = JSON.parse(this._file.content);\r\n\r\n      this.definition = data;\r\n    } catch (e) {\r\n      Log.fail(\"Could not parse vscode launch JSON \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\n\r\nexport const VsCodeDefaultSettings: { [name: string]: any } = {\r\n  \"[javascript]\": {\r\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\r\n  },\r\n  \"[typescript]\": {\r\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\r\n  },\r\n  \"[typescriptreact]\": {\r\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\r\n  },\r\n  \"[json]\": {\r\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\r\n  },\r\n  \"git.ignoreLimitWarning\": true,\r\n  \"editor.formatOnSave\": true,\r\n  \"search.exclude\": {\r\n    \"**/.git\": true,\r\n    \"**/node_modules\": true,\r\n    \"**/dist\": true,\r\n    \"**/lib\": true,\r\n  },\r\n  \"files.exclude\": {\r\n    \"**/.git\": true,\r\n    \"**/.DS_Store\": true,\r\n    \"**/node_modules\": true,\r\n  },\r\n  \"cSpell.words\": [\"gametest\", \"gametests\", \"mcaddon\"],\r\n  \"editor.tabSize\": 2,\r\n  \"eslint.experimental.useFlatConfig\": true,\r\n};\r\n\r\nexport default class VsCodeSettingsDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: { [name: string]: any };\r\n\r\n  private _onLoaded = new EventDispatcher<VsCodeSettingsDefinition, VsCodeSettingsDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<VsCodeSettingsDefinition, VsCodeSettingsDefinition>\r\n  ) {\r\n    let dt: VsCodeSettingsDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new VsCodeSettingsDefinition();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof VsCodeSettingsDefinition) {\r\n      dt = file.manager as VsCodeSettingsDefinition;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"VCSP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async hasMinContent() {\r\n    await this.load();\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    for (const settingName in VsCodeDefaultSettings) {\r\n      if (this.definition[settingName] === undefined) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async ensureMinContent() {\r\n    const hasSettings = await this.hasMinContent();\r\n\r\n    if (hasSettings) {\r\n      return true;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      this.definition = VsCodeDefaultSettings;\r\n    }\r\n\r\n    for (const settingName in VsCodeDefaultSettings) {\r\n      if (this.definition[settingName] === undefined) {\r\n        this.definition[settingName] = VsCodeDefaultSettings[settingName];\r\n      }\r\n    }\r\n\r\n    return this.definition;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent();\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    try {\r\n      const data: any = JSON.parse(this._file.content);\r\n\r\n      this.definition = data;\r\n    } catch (e) {\r\n      Log.fail(\"Could not parse vscode launch JSON \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\n\r\nexport const PrettierRcDefaultSettings: { [name: string]: any } = {\r\n  trailingComma: \"es5\",\r\n  tabWidth: 2,\r\n  semi: true,\r\n  singleQuote: false,\r\n  bracketSpacing: true,\r\n  arrowParens: \"always\",\r\n  printWidth: 120,\r\n  endOfLine: \"auto\",\r\n};\r\n\r\nexport default class PrettierRcConfig {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: { [name: string]: any };\r\n\r\n  private _onLoaded = new EventDispatcher<PrettierRcConfig, PrettierRcConfig>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<PrettierRcConfig, PrettierRcConfig>) {\r\n    let dt: PrettierRcConfig | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new PrettierRcConfig();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof PrettierRcConfig) {\r\n      dt = file.manager as PrettierRcConfig;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"PRCP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async hasMinContent() {\r\n    await this.load();\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    for (const settingName in PrettierRcDefaultSettings) {\r\n      if (this.definition[settingName] === undefined) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async ensureMinContent() {\r\n    const hasSettings = await this.hasMinContent();\r\n\r\n    if (hasSettings) {\r\n      return true;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      this.definition = PrettierRcDefaultSettings;\r\n    }\r\n\r\n    for (const settingName in PrettierRcDefaultSettings) {\r\n      if (this.definition[settingName] === undefined) {\r\n        this.definition[settingName] = PrettierRcDefaultSettings[settingName];\r\n      }\r\n    }\r\n\r\n    return this.definition;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    try {\r\n      const data: any = JSON.parse(this._file.content);\r\n\r\n      this.definition = data;\r\n    } catch (e) {\r\n      Log.fail(\"Could not parse vscode launch JSON \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport WorldTestManager from \"../script/WorldTestManager\";\r\nimport { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport Project, { AUTOGENERATED_CONTENT_TOKEN, AUTOGENERATED_JS_SEPARATOR, FolderContext } from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport Log from \"../core/Log\";\r\nimport { ProjectScriptLanguage } from \"./IProjectData\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport EnvSettings from \"../devproject/EnvSettings\";\r\nimport VsCodeLaunchDefinition from \"../devproject/VsCodeLaunchDefinition\";\r\nimport VsCodeTasksDefinition from \"../devproject/VsCodeTasksDefinition\";\r\nimport VsCodeExtensionsDefinition from \"../devproject/VsCodeExtensionsDefinition\";\r\nimport VsCodeSettingsDefinition from \"../devproject/VsCodeSettingsDefinition\";\r\nimport PrettierRcConfig from \"../devproject/PrettierRcConfig\";\r\nimport JustConfig from \"../devproject/JustConfig\";\r\nimport NpmPackageDefinition from \"../devproject/NpmPackageDefinition\";\r\nimport { FileUpdateType } from \"../storage/IFile\";\r\n\r\nexport default class ProjectAutogeneration {\r\n  static async updateProjectAutogeneration(project: Project, createNewArtifacts: boolean) {\r\n    let packageItems = 0;\r\n    let envItems = 0;\r\n    let justConfigItems = 0;\r\n    let needsJustConfig = false;\r\n    let needsEslintConfig = false;\r\n    let eslintConfigItems = 0;\r\n    let vsCodeLaunchItems = 0;\r\n    let vsCodeExtensionsItems = 0;\r\n    let vsCodeSettingsItems = 0;\r\n    let vsCodeTasksItems = 0;\r\n    let prettierRcItems = 0;\r\n\r\n    const items = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < items.length; i++) {\r\n      const item = items[i];\r\n\r\n      if (item.itemType === ProjectItemType.packageJson) {\r\n        packageItems++;\r\n\r\n        const itemFile = item.primaryFile;\r\n        if (itemFile) {\r\n          if (!itemFile.isContentLoaded) {\r\n            await itemFile.loadContent();\r\n          }\r\n\r\n          if (itemFile.content && typeof itemFile.content === \"string\") {\r\n            if (itemFile.content.indexOf(\"just-scripts\") > 0) {\r\n              needsJustConfig = true;\r\n            }\r\n            if (itemFile.content.indexOf(\"eslint\") > 0) {\r\n              needsEslintConfig = true;\r\n            }\r\n          }\r\n        }\r\n      } else if (item.itemType === ProjectItemType.env) {\r\n        envItems++;\r\n      } else if (item.itemType === ProjectItemType.vsCodeLaunchJson) {\r\n        vsCodeLaunchItems++;\r\n      } else if (item.itemType === ProjectItemType.prettierRcJson) {\r\n        prettierRcItems++;\r\n      } else if (item.itemType === ProjectItemType.esLintConfigMjs) {\r\n        eslintConfigItems++;\r\n      } else if (item.itemType === ProjectItemType.justConfigTs) {\r\n        justConfigItems++;\r\n      }\r\n    }\r\n\r\n    if (envItems === 0 && (justConfigItems > 0 || needsJustConfig) && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.env\",\r\n        ProjectItemStorageType.singleFile,\r\n        \".env\",\r\n        ProjectItemType.env,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (prettierRcItems === 0 && packageItems > 0 && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.prettierrc.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        \".prettierrc.json\",\r\n        ProjectItemType.prettierRcJson,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (justConfigItems === 0 && needsJustConfig && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/just.config.ts\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"just.config.ts\",\r\n        ProjectItemType.justConfigTs,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (eslintConfigItems === 0 && needsEslintConfig && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/eslint.config.mjs\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"eslint.config.mjs\",\r\n        ProjectItemType.esLintConfigMjs,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (vsCodeLaunchItems === 0 && packageItems > 0 && project.projectFolder && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.vscode/launch.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"launch.json\",\r\n        ProjectItemType.vsCodeLaunchJson,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (vsCodeSettingsItems === 0 && packageItems > 0 && project.projectFolder && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.vscode/settings.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"settings.json\",\r\n        ProjectItemType.vsCodeSettingsJson,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (vsCodeTasksItems === 0 && packageItems > 0 && project.projectFolder && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.vscode/tasks.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"tasks.json\",\r\n        ProjectItemType.vsCodeTasksJson,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (vsCodeExtensionsItems === 0 && packageItems > 0 && project.projectFolder && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.vscode/extensions.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"extensions.json\",\r\n        ProjectItemType.vsCodeExtensionsJson,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    for (let i = 0; i < items.length; i++) {\r\n      const item = items[i];\r\n\r\n      if (item.creationType === ProjectItemCreationType.generated) {\r\n        await ProjectAutogeneration.updateItemAutogeneration(item);\r\n      }\r\n\r\n      await ProjectAutogeneration.updateItemAutogeneratedSideFiles(item);\r\n    }\r\n  }\r\n\r\n  static async updateItemAutogeneratedSideFiles(item: ProjectItem) {\r\n    if (!item.primaryFile || !item.project) {\r\n      return;\r\n    }\r\n\r\n    if (item.itemType === ProjectItemType.worldTest) {\r\n      const worldTestManager = await WorldTestManager.ensureOnFile(item.primaryFile);\r\n\r\n      if (worldTestManager) {\r\n        await worldTestManager.persistSideFiles(item.project);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async updateItemAutogeneration(item: ProjectItem, contentOnlyUpdate?: boolean) {\r\n    if (!contentOnlyUpdate && !item.isContentLoaded) {\r\n      await item.loadContent();\r\n    }\r\n\r\n    if (item.primaryFile == null || item.creationType !== ProjectItemCreationType.generated) {\r\n      return;\r\n    }\r\n\r\n    if (item.itemType === ProjectItemType.catalogIndexJs) {\r\n      if (!item.primaryFile.isContentLoaded) {\r\n        await item.primaryFile.loadContent();\r\n      }\r\n\r\n      ProjectAutogeneration.updateCatalogJsContent(item, await ProjectAutogeneration.getCatalogJsContent(item.project));\r\n    } else if (item.itemType === ProjectItemType.env) {\r\n      item.primaryFile.setContentIfSemanticallyDifferent(\r\n        await EnvSettings.getContent(\r\n          item.project,\r\n          typeof item.primaryFile.content === \"string\" ? item.primaryFile.content : undefined\r\n        ),\r\n        FileUpdateType.versionlessEdit\r\n      );\r\n    } else if (item.itemType === ProjectItemType.justConfigTs) {\r\n      const justConfigTs = await JustConfig.ensureOnFile(item.primaryFile);\r\n\r\n      if (justConfigTs) {\r\n        await justConfigTs.ensureDefault();\r\n        await justConfigTs.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.vsCodeLaunchJson) {\r\n      const vscodelaunch = await VsCodeLaunchDefinition.ensureOnFile(item.primaryFile);\r\n\r\n      if (vscodelaunch) {\r\n        await vscodelaunch.ensureMinContent();\r\n        await vscodelaunch.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.vsCodeTasksJson) {\r\n      const vscodetasks = await VsCodeTasksDefinition.ensureOnFile(item.primaryFile);\r\n\r\n      if (vscodetasks) {\r\n        await vscodetasks.ensureMinContent();\r\n        await vscodetasks.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.vsCodeExtensionsJson) {\r\n      const vscodeextensions = await VsCodeExtensionsDefinition.ensureOnFile(item.primaryFile);\r\n\r\n      if (vscodeextensions) {\r\n        await vscodeextensions.ensureMinContent();\r\n        await vscodeextensions.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.vsCodeSettingsJson) {\r\n      const vscodesettings = await VsCodeSettingsDefinition.ensureOnFile(item.primaryFile);\r\n\r\n      if (vscodesettings) {\r\n        await vscodesettings.ensureMinContent();\r\n        await vscodesettings.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.prettierRcJson) {\r\n      const prettierrc = await PrettierRcConfig.ensureOnFile(item.primaryFile);\r\n\r\n      if (prettierrc) {\r\n        await prettierrc.ensureMinContent();\r\n        await prettierrc.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.packageJson) {\r\n      const packageJson = await NpmPackageDefinition.ensureOnFile(item.primaryFile);\r\n\r\n      if (packageJson) {\r\n        await packageJson.ensureMinContent(item.project);\r\n        await packageJson.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n      // Only generate initial content \u2014 don't overwrite user edits on save.\r\n      // Updates via the form editor use BehaviorManifestDefinition.persist() instead.\r\n      if (!item.primaryFile.isContentLoaded || !item.primaryFile.content) {\r\n        item.primaryFile.setContent(await BehaviorManifestDefinition.getContent(item.project, contentOnlyUpdate));\r\n      }\r\n    } else if (item.itemType === ProjectItemType.entityTypeBaseJs) {\r\n      const content = await ProjectAutogeneration.getGeneratedEntityTypeScript(item);\r\n\r\n      if (content.javaScript !== undefined) {\r\n        item.primaryFile.setContent(content.javaScript, FileUpdateType.versionlessEdit);\r\n      }\r\n      if (\r\n        item.project.preferredScriptLanguage === ProjectScriptLanguage.typeScript &&\r\n        content.typeScript !== undefined\r\n      ) {\r\n        const file = item.primaryFile.parentFolder.ensureFile(\r\n          StorageUtilities.getBaseFromName(item.primaryFile.name) + \".ts\"\r\n        );\r\n\r\n        file.setContent(content.typeScript, FileUpdateType.versionlessEdit);\r\n      }\r\n\r\n      if (\r\n        item.project.preferredScriptLanguage === ProjectScriptLanguage.typeScript &&\r\n        content.typeScript !== undefined\r\n      ) {\r\n        const file = item.primaryFile.parentFolder.ensureFile(\r\n          StorageUtilities.getBaseFromName(item.primaryFile.name) + \".ts\"\r\n        );\r\n\r\n        file.setContent(content.typeScript, FileUpdateType.versionlessEdit);\r\n      }\r\n    } else if (item.itemType === ProjectItemType.entityTypeBaseTs) {\r\n      const content = await ProjectAutogeneration.getGeneratedEntityTypeScript(item);\r\n\r\n      if (content.typeScript !== undefined) {\r\n        item.primaryFile.setContent(content.typeScript, FileUpdateType.versionlessEdit);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async getCatalogJsContent(project: Project) {\r\n    const content: string[] = [];\r\n\r\n    const behaviorPackRootFolder = await project.ensureDefaultBehaviorPackFolder();\r\n\r\n    const items = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < items.length; i++) {\r\n      const projectItem = items[i];\r\n\r\n      if (projectItem.itemType === ProjectItemType.worldTest) {\r\n        const file = await projectItem.loadFileContent();\r\n\r\n        if (file) {\r\n          const newFileName = StorageUtilities.getBaseFromName(file.name) + \".gen.js\";\r\n\r\n          content.push('import \"scripts/' + newFileName + '\";');\r\n        }\r\n      } else if (\r\n        projectItem.itemType === ProjectItemType.js ||\r\n        projectItem.itemType === ProjectItemType.buildProcessedJs ||\r\n        projectItem.itemType === ProjectItemType.entityTypeBaseJs ||\r\n        projectItem.itemType === ProjectItemType.testJs\r\n      ) {\r\n        const file = await projectItem.loadFileContent();\r\n\r\n        if (file) {\r\n          let filePath = file.getFolderRelativePath(behaviorPackRootFolder);\r\n\r\n          if (!file.isContentLoaded) {\r\n            await file.loadContent(false);\r\n          }\r\n\r\n          if ((file.content !== null || filePath !== null) && filePath !== undefined) {\r\n            if (filePath.startsWith(\"/scripts/\")) {\r\n              filePath = filePath.substring(9, filePath.length);\r\n            }\r\n\r\n            if (filePath.startsWith(\"/\")) {\r\n              filePath = filePath.substring(1, filePath.length);\r\n            }\r\n\r\n            content.push('import \"' + filePath + '\";');\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return AUTOGENERATED_JS_SEPARATOR + \"\\n\\n\" + content.join(\"\\n\");\r\n  }\r\n\r\n  static async updateCatalogJsContent(item: ProjectItem, newContent: string) {\r\n    if (item.primaryFile == null || item.primaryFile.content instanceof Uint8Array) {\r\n      Log.unexpectedContentState();\r\n      return;\r\n    }\r\n\r\n    if (\r\n      item.primaryFile.content === undefined ||\r\n      item.primaryFile.content === null ||\r\n      item.primaryFile.content.trim() === \"\"\r\n    ) {\r\n      item.primaryFile.setContent(newContent, FileUpdateType.versionlessEdit);\r\n      return;\r\n    }\r\n\r\n    let updatedContent = item.primaryFile.content;\r\n\r\n    const autogenToken = updatedContent.indexOf(AUTOGENERATED_CONTENT_TOKEN);\r\n\r\n    if (autogenToken >= 0) {\r\n      let previous = updatedContent.lastIndexOf(\"\\r\", autogenToken);\r\n\r\n      if (previous < 0) {\r\n        previous = updatedContent.lastIndexOf(\"\\n\", autogenToken);\r\n\r\n        if (previous < 0) {\r\n          previous = 0;\r\n        }\r\n      }\r\n\r\n      const previousComment = updatedContent.lastIndexOf(\"//\", autogenToken);\r\n\r\n      // we expect \\n//, but if for some reason the comment has moved, let's only strip from the comment forward.\r\n      if (previousComment > previous + 2) {\r\n        previous = previousComment;\r\n      }\r\n\r\n      if (previous >= 0) {\r\n        updatedContent = updatedContent.substring(0, previous);\r\n      }\r\n    }\r\n\r\n    updatedContent += newContent;\r\n\r\n    item.primaryFile.setContent(updatedContent, FileUpdateType.versionlessEdit);\r\n  }\r\n\r\n  static async getGeneratedEntityTypeScript(item: ProjectItem) {\r\n    if (item.projectPath === null || item.projectPath === undefined) {\r\n      return { javaScript: \"\", typeScript: undefined };\r\n    }\r\n\r\n    let typeName = StorageUtilities.getBaseFromName(StorageUtilities.getLeafName(item.projectPath));\r\n\r\n    if (typeName.endsWith(\".base\")) {\r\n      typeName = typeName.substring(0, typeName.length - 5);\r\n    }\r\n\r\n    const items = item.project.getItemsCopy();\r\n\r\n    for (let i = 0; i < items.length; i++) {\r\n      const candItem = items[i];\r\n\r\n      if (\r\n        candItem.itemType === ProjectItemType.entityTypeBehavior &&\r\n        candItem.projectPath !== null &&\r\n        candItem.projectPath !== undefined\r\n      ) {\r\n        const jsonName = StorageUtilities.getBaseFromName(StorageUtilities.getLeafName(candItem.projectPath));\r\n\r\n        if (jsonName === typeName) {\r\n          const jsonFile = await candItem.loadFileContent();\r\n\r\n          if (jsonFile !== undefined && jsonFile !== null) {\r\n            if (jsonFile.manager === undefined) {\r\n              await EntityTypeDefinition.ensureOnFile(jsonFile);\r\n            }\r\n\r\n            if (jsonFile.manager) {\r\n              const et = jsonFile.manager as EntityTypeDefinition;\r\n\r\n              const js = et.getScript(false);\r\n              let ts = undefined;\r\n\r\n              if (item.project.preferredScriptLanguage === ProjectScriptLanguage.typeScript) {\r\n                ts = et.getScript(true);\r\n              }\r\n\r\n              return { javaScript: js, typeScript: ts };\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return { javaScript: \"\", typeScript: undefined };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport Project, { FolderContext } from \"./Project\";\r\nimport { ProjectItemType, ProjectItemStorageType, ProjectItemCreationType } from \"./IProjectItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { ProjectEditPreference, ProjectFocus, ProjectScriptLanguage } from \"./IProjectData\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport NpmPackageDefinition from \"../devproject/NpmPackageDefinition\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport ISnippet from \"./ISnippet\";\r\nimport IGalleryItem from \"./IGalleryItem\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport ProjectItemUtilities from \"./ProjectItemUtilities\";\r\nimport { PackType } from \"../minecraft/Pack\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport { IAnnotatedValue } from \"../core/AnnotatedValue\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport ProjectUpdateRunner from \"../updates/ProjectUpdateRunner\";\r\nimport ProjectStandard from \"./ProjectStandard\";\r\nimport ProjectAutogeneration from \"./ProjectAutogeneration\";\r\nimport TypeScriptDefinition from \"../minecraft/TypeScriptDefinition\";\r\nimport { constants } from \"../core/Constants\";\r\nimport ProjectContent from \"./ProjectContent\";\r\n\r\nconst behaviorPackFolderHints = [\"behavior_pack\", \"/bp/\", \"/bps/\"];\r\n\r\nconst resourcePackFolderHints = [\"resource_pack\", \"/rp/\", \"/rps/\"];\r\n\r\nexport enum NewEntityTypeAddMode {\r\n  baseId,\r\n}\r\n\r\nexport enum NewItemTypeAddMode {\r\n  baseId,\r\n}\r\n\r\nexport enum ProjectMetaCategory {\r\n  mix = 0,\r\n  worldTemplate = 1,\r\n  texturePack = 2,\r\n  addOn = 3,\r\n  skinPack = 4,\r\n  persona = 5,\r\n}\r\n\r\nexport default class ProjectUtilities {\r\n  static async ensureContentInDefaultScriptFile(\r\n    project: Project,\r\n    signatureToken: string,\r\n    content: string,\r\n    placeAtBottom?: boolean\r\n  ) {\r\n    const defaultScriptFile = await project.getDefaultScriptsFile();\r\n\r\n    if (defaultScriptFile) {\r\n      if (!defaultScriptFile.isContentLoaded) {\r\n        await defaultScriptFile.loadContent();\r\n      }\r\n\r\n      if (typeof defaultScriptFile.content === \"string\" && defaultScriptFile.content.length > 0) {\r\n        if (defaultScriptFile.content.indexOf(signatureToken) < 0) {\r\n          let newContent = defaultScriptFile.content;\r\n\r\n          if (!placeAtBottom) {\r\n            newContent = content + newContent;\r\n          } else {\r\n            newContent = newContent + content;\r\n          }\r\n\r\n          defaultScriptFile.setContent(newContent);\r\n\r\n          await defaultScriptFile.saveContent();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async getDefaultFolderForPack(project: Project, packType: PackType) {\r\n    if (packType === PackType.behavior) {\r\n      return await project.getDefaultBehaviorPackFolder();\r\n    } else if (packType === PackType.resource) {\r\n      return await project.getDefaultResourcePackFolder();\r\n    } else if (packType === PackType.skin) {\r\n      return await project.getDefaultSkinPackFolder();\r\n    } else if (packType === PackType.design) {\r\n      return await project.getDefaultSkinPackFolder();\r\n    }\r\n\r\n    throw new Error();\r\n  }\r\n\r\n  static getSimplifiedProjectName(projectName: string) {\r\n    // strip out a trailing -xxxxxx (dash + 6 chars) that is used in Electron file-system based project names\r\n    let lastDash = projectName.lastIndexOf(\"-\");\r\n\r\n    if (lastDash >= 2 && lastDash === projectName.length - 7) {\r\n      return projectName.substring(0, projectName.length - 7);\r\n    }\r\n\r\n    return projectName;\r\n  }\r\n\r\n  static getPackTypeName(packType: PackType) {\r\n    switch (packType) {\r\n      case PackType.behavior:\r\n        return \"Behavior\";\r\n      case PackType.resource:\r\n        return \"Resource\";\r\n      case PackType.skin:\r\n        return \"Skin\";\r\n      default:\r\n        return \"Unknown\";\r\n    }\r\n  }\r\n\r\n  static async ensureJsonItem(project: Project, jsonContent: string, fileName: string) {\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const typeInfo = ProjectItemUtilities.inferTypeFromJsonContent(jsonContent, fileName);\r\n\r\n    let packType = typeInfo.packType;\r\n\r\n    if (packType === undefined) {\r\n      packType = PackType.behavior;\r\n    }\r\n\r\n    const baseFolder = await ProjectItemUtilities.getDefaultFolderForType(project, typeInfo.itemType);\r\n\r\n    if (!baseFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    let folderPath = baseFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    if (folderPath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    fileName = StorageUtilities.getUniqueChildFolderName(fileName, baseFolder);\r\n\r\n    const contentFile = baseFolder.ensureFile(fileName);\r\n    contentFile.setContent(jsonContent);\r\n    contentFile.saveContent();\r\n\r\n    const relPath = contentFile.getFolderRelativePath(project.projectFolder as IFolder);\r\n\r\n    if (relPath !== undefined) {\r\n      return project.ensureItemByProjectPath(\r\n        relPath,\r\n        ProjectItemStorageType.singleFile,\r\n        fileName,\r\n        typeInfo.itemType,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.normal\r\n      );\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getItemsFromSearch(project: Project, searchResults: IAnnotatedValue[] | undefined) {\r\n    if (searchResults === undefined) {\r\n      return [];\r\n    }\r\n\r\n    const searchItems: ProjectItem[] = [];\r\n\r\n    for (const val of searchResults) {\r\n      for (const item of project.items) {\r\n        if (item.projectPath && val.value === item.projectPath) {\r\n          searchItems.push(item);\r\n        }\r\n      }\r\n    }\r\n\r\n    return searchItems;\r\n  }\r\n\r\n  static isBehaviorPackRelated(folderName: string) {\r\n    for (const hint of behaviorPackFolderHints) {\r\n      if (folderName.toLowerCase().indexOf(hint) >= 0) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isResourcePackRelated(folderName: string) {\r\n    for (const hint of resourcePackFolderHints) {\r\n      if (folderName.toLowerCase().indexOf(hint) >= 0) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static inferJsonProjectItemTypeFromExtension(path: string): ProjectItemType {\r\n    const extension = StorageUtilities.getTypeFromName(path).toLowerCase();\r\n\r\n    switch (extension) {\r\n      case \"json\":\r\n        return ProjectItemType.unknownJson;\r\n      case \"mcaddon\":\r\n        return ProjectItemType.MCAddon;\r\n      case \"mcpack\":\r\n        return ProjectItemType.MCPack;\r\n      case \"mcworld\":\r\n        return ProjectItemType.MCWorld;\r\n      case \"mctemplate\":\r\n        return ProjectItemType.MCTemplate;\r\n      case \"mcproject\":\r\n        return ProjectItemType.MCProject;\r\n      case \"tga\":\r\n      case \"png\":\r\n      case \"jpg\":\r\n        return ProjectItemType.texture;\r\n      case \"ogg\":\r\n      case \"fsb\":\r\n      case \"mp3\":\r\n        return ProjectItemType.audio;\r\n    }\r\n\r\n    return ProjectItemType.unknown;\r\n  }\r\n\r\n  static inferJsonProjectItemTypeFromPath(path: string): ProjectItemType {\r\n    const lowerPath = path.toLowerCase();\r\n\r\n    if (this.isBehaviorPackRelated(lowerPath)) {\r\n      if (lowerPath.indexOf(\"/biomes/\") >= 0) {\r\n        return ProjectItemType.biomeBehavior;\r\n      }\r\n      if (lowerPath.indexOf(\"/entities/\") >= 0) {\r\n        return ProjectItemType.entityTypeBehavior;\r\n      }\r\n      if (lowerPath.indexOf(\"/items/\") >= 0) {\r\n        return ProjectItemType.itemTypeBehavior;\r\n      }\r\n      if (lowerPath.indexOf(\"/animation_controllers/\") >= 0) {\r\n        return ProjectItemType.animationControllerBehaviorJson;\r\n      }\r\n      if (lowerPath.indexOf(\"/animations/\") >= 0) {\r\n        return ProjectItemType.animationBehaviorJson;\r\n      }\r\n    }\r\n\r\n    if (this.isResourcePackRelated(lowerPath)) {\r\n      if (lowerPath.indexOf(\"/animation_controllers/\") >= 0) {\r\n        return ProjectItemType.animationControllerResourceJson;\r\n      }\r\n      if (lowerPath.indexOf(\"/animations/\") >= 0) {\r\n        return ProjectItemType.animationResourceJson;\r\n      }\r\n      if (lowerPath.indexOf(\"/attachables/\") >= 0) {\r\n        return ProjectItemType.attachableResourceJson;\r\n      }\r\n      if (lowerPath.indexOf(\"/biomes/\") >= 0) {\r\n        return ProjectItemType.biomeResource;\r\n      }\r\n      if (lowerPath.indexOf(\"/entity/\") >= 0) {\r\n        return ProjectItemType.entityTypeResource;\r\n      }\r\n      if (lowerPath.indexOf(\"/entity/\") >= 0) {\r\n        return ProjectItemType.entityTypeResource;\r\n      }\r\n\r\n      if (lowerPath.endsWith(\"/blocks.json\")) {\r\n        return ProjectItemType.blocksCatalogResourceJson;\r\n      }\r\n      if (lowerPath.endsWith(\"/sounds.json\")) {\r\n        return ProjectItemType.soundDefinitionCatalog;\r\n      }\r\n      if (lowerPath.endsWith(\"/biomes_client.json\")) {\r\n        return ProjectItemType.biomesClientCatalogResource;\r\n      }\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/fogs/\") >= 0) {\r\n      return ProjectItemType.fogResourceJson;\r\n    }\r\n\r\n    // Check for texture_set.json BEFORE /models/ check - texture_set files can exist in /models/ folders\r\n    // (e.g., /textures/models/armor/chain_1.texture_set.json)\r\n    if (lowerPath.indexOf(\".texture_set.json\") >= 0) {\r\n      return ProjectItemType.textureSetJson;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/models/\") >= 0) {\r\n      return ProjectItemType.modelGeometryJson;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/particles/\") >= 0) {\r\n      return ProjectItemType.particleJson;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/render_controllers/\") >= 0) {\r\n      return ProjectItemType.renderControllerJson;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/sounds/\") >= 0) {\r\n      if (lowerPath.indexOf(\"music_definitions.json\") >= 0) {\r\n        return ProjectItemType.musicDefinitionJson;\r\n      }\r\n      if (lowerPath.indexOf(\"sound_definitions.json\") >= 0) {\r\n        return ProjectItemType.soundDefinitionCatalog;\r\n      }\r\n\r\n      return this.inferJsonProjectItemTypeFromExtension(path);\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/textures/\") >= 0) {\r\n      if (lowerPath.indexOf(\"flipbook_textures.json\") >= 0) {\r\n        return ProjectItemType.flipbookTexturesJson;\r\n      }\r\n      if (lowerPath.indexOf(\"item_texture.json\") >= 0) {\r\n        return ProjectItemType.itemTextureJson;\r\n      }\r\n      if (lowerPath.indexOf(\"terrain_texture.json\") >= 0) {\r\n        return ProjectItemType.terrainTextureCatalogResourceJson;\r\n      }\r\n\r\n      if (lowerPath.indexOf(\"texture_list.json\") >= 0) {\r\n        return ProjectItemType.textureListJson;\r\n      }\r\n\r\n      if (lowerPath.indexOf(\".texture_set.json\") >= 0) {\r\n        return ProjectItemType.textureSetJson;\r\n      }\r\n\r\n      if (\r\n        lowerPath.indexOf(\"/ui/\") >= 0 &&\r\n        this.inferJsonProjectItemTypeFromExtension(path) === ProjectItemType.texture\r\n      ) {\r\n        return ProjectItemType.uiTexture;\r\n      }\r\n\r\n      return this.inferJsonProjectItemTypeFromExtension(path);\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/loot_tables/\") >= 0) {\r\n      return ProjectItemType.lootTableBehavior;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/recipes/\") >= 0) {\r\n      return ProjectItemType.recipeBehavior;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/spawn_rules/\") >= 0) {\r\n      return ProjectItemType.spawnRuleBehavior;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/trading/\") >= 0) {\r\n      return ProjectItemType.tradingBehaviorJson;\r\n    }\r\n\r\n    return this.inferJsonProjectItemTypeFromExtension(path);\r\n  }\r\n\r\n  /**\r\n   * Attempts to infer a project item type using the top-level keys present in a JSON object.\r\n   * Falls back to unknown when no meaningful match is found.\r\n   */\r\n  static inferJsonProjectItemTypeFromContent(json: any): ProjectItemType {\r\n    if (!json || typeof json !== \"object\" || Array.isArray(json)) {\r\n      return ProjectItemType.unknownJson;\r\n    }\r\n\r\n    const metadataKeys = new Set([\"format_version\", \"minecraft:format_version\"]);\r\n    const rootKeys = Object.keys(json).filter((key) => !metadataKeys.has(key.toLowerCase()));\r\n\r\n    if (rootKeys.length === 0) {\r\n      return ProjectItemType.unknownJson;\r\n    }\r\n\r\n    const normalizedKeys = rootKeys.map((key) => key.toLowerCase());\r\n\r\n    const directMappings: { [key: string]: ProjectItemType } = {\r\n      \"minecraft:block\": ProjectItemType.blockTypeBehavior,\r\n      \"minecraft:item\": ProjectItemType.itemTypeBehavior,\r\n      \"minecraft:entity\": ProjectItemType.entityTypeBehavior,\r\n      \"minecraft:spawn_rules\": ProjectItemType.spawnRuleBehavior,\r\n      \"minecraft:spawn_groups\": ProjectItemType.spawnGroupJson,\r\n      \"minecraft:loot_table\": ProjectItemType.lootTableBehavior,\r\n      \"minecraft:feature\": ProjectItemType.featureBehavior,\r\n      \"minecraft:feature_rules\": ProjectItemType.featureRuleBehavior,\r\n      \"minecraft:trading\": ProjectItemType.tradingBehaviorJson,\r\n      \"minecraft:dialogue\": ProjectItemType.dialogueBehaviorJson,\r\n      \"minecraft:volume\": ProjectItemType.volumeBehaviorJson,\r\n      \"minecraft:behavior_tree\": ProjectItemType.behaviorTreeJson,\r\n      \"minecraft:aim_assist_category\": ProjectItemType.aimAssistCategoryJson,\r\n      \"minecraft:aim_assist_preset\": ProjectItemType.aimAssistPresetJson,\r\n      \"minecraft:dimension\": ProjectItemType.dimensionJson,\r\n      \"minecraft:structure\": ProjectItemType.jigsawStructure,\r\n      \"minecraft:structure_set\": ProjectItemType.jigsawStructureSet,\r\n      \"minecraft:template_pool\": ProjectItemType.jigsawTemplatePool,\r\n      \"minecraft:processor_list\": ProjectItemType.jigsawProcessorList,\r\n      \"minecraft:biome\": ProjectItemType.biomeBehavior,\r\n      \"minecraft:client_entity\": ProjectItemType.entityTypeResource,\r\n      \"minecraft:attachable\": ProjectItemType.attachableResourceJson,\r\n      \"minecraft:fog_settings\": ProjectItemType.fogResourceJson,\r\n      \"minecraft:geometry\": ProjectItemType.modelGeometryJson,\r\n      \"minecraft:block_culling\": ProjectItemType.blockCulling,\r\n      particle_effect: ProjectItemType.particleJson,\r\n      render_controllers: ProjectItemType.renderControllerJson,\r\n      \"minecraft:render_controller\": ProjectItemType.renderControllerJson,\r\n      \"minecraft:texture_set\": ProjectItemType.textureSetJson,\r\n      \"minecraft:atmospherics\": ProjectItemType.atmosphericsJson,\r\n      \"minecraft:pbr\": ProjectItemType.pbrJson,\r\n      \"minecraft:point_lights\": ProjectItemType.pointLightsJson,\r\n      \"minecraft:water\": ProjectItemType.waterJson,\r\n      \"minecraft:shadows\": ProjectItemType.shadowsJson,\r\n      \"minecraft:uniforms\": ProjectItemType.uniformsJson,\r\n      uniforms: ProjectItemType.uniformsJson,\r\n      \"minecraft:renderer\": ProjectItemType.rendererJson,\r\n      renderer: ProjectItemType.rendererJson,\r\n      lods: ProjectItemType.lodJson,\r\n      \"minecraft:lods\": ProjectItemType.lodJson,\r\n      loading_messages: ProjectItemType.loadingMessagesJson,\r\n      splashes: ProjectItemType.splashesJson,\r\n      \"minecraft:font\": ProjectItemType.fontMetadataJson,\r\n      font_metadata: ProjectItemType.fontMetadataJson,\r\n      emoticons: ProjectItemType.emoticonsJson,\r\n      \"minecraft:emoticons\": ProjectItemType.emoticonsJson,\r\n      contents: ProjectItemType.contentsJson,\r\n      \"minecraft:contents\": ProjectItemType.contentsJson,\r\n    };\r\n\r\n    for (const key of normalizedKeys) {\r\n      const direct = directMappings[key];\r\n      if (direct !== undefined) {\r\n        return direct;\r\n      }\r\n    }\r\n\r\n    // Check for legacy geometry format (format_version 1.8.0) where keys are like \"geometry.bat\", \"geometry.pig\"\r\n    for (const key of normalizedKeys) {\r\n      if (key.startsWith(\"geometry.\")) {\r\n        return ProjectItemType.modelGeometryJson;\r\n      }\r\n    }\r\n\r\n    return ProjectItemType.unknownJson;\r\n  }\r\n\r\n  static getItemFromAnnotatedValue(project: Project, value: IAnnotatedValue) {\r\n    for (const item of project.items) {\r\n      if (item.projectPath === value.value) {\r\n        return item;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async isVibrantVisualsCompatible(project: Project) {\r\n    for (const item of project.items) {\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n\r\n      if (item.primaryFile) {\r\n        const manifestJson = await ResourceManifestDefinition.ensureOnFile(item.primaryFile);\r\n\r\n        if (manifestJson && manifestJson.capabilities && manifestJson.capabilities.includes(\"pbr\")) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isVibrantVisualsEnhanced(project: Project) {\r\n    for (const item of project.items) {\r\n      if (ProjectItemUtilities.isVibrantVisualsRelated(item)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async ensureDefaultItems(project: Project) {\r\n    if (project.focus === ProjectFocus.gameTests && project.projectFolder !== null) {\r\n      const bpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n\r\n      const defaultPath = bpFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n      let pi = project.ensureItemByTag(\r\n        \"gametestjs\",\r\n        \"Test\",\r\n        ProjectItemType.testJs,\r\n        defaultPath + \"scripts/test.js\",\r\n        ProjectItemStorageType.singleFile\r\n      );\r\n\r\n      let file = await pi.loadFileContent();\r\n\r\n      if (file !== null) {\r\n        let content = \"\";\r\n        if (project.preferredScriptLanguage === ProjectScriptLanguage.typeScript) {\r\n          content = ProjectContent.getDefaultTestTypeScript(this.name, StorageUtilities.getBaseFromName(\"test\"));\r\n        } else {\r\n          content = ProjectContent.getDefaultTestJavaScript(this.name, StorageUtilities.getBaseFromName(\"test\"));\r\n        }\r\n\r\n        file.setContent(content);\r\n      }\r\n\r\n      await project.ensureJsIndexFile();\r\n\r\n      pi = project.ensureItemByTag(\r\n        \"manifestjson\",\r\n        \"manifest\",\r\n        ProjectItemType.behaviorPackManifestJson,\r\n        defaultPath + \"manifest.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        ProjectItemCreationType.generated\r\n      );\r\n\r\n      pi = project.ensureItemByTag(\r\n        \"gameteststructure\",\r\n        \"Basic\",\r\n        ProjectItemType.structure,\r\n        defaultPath + \"structures/gametests/basic.mcstructure\",\r\n        ProjectItemStorageType.singleFile\r\n      );\r\n\r\n      file = await pi.loadFileContent();\r\n\r\n      if (file !== null) {\r\n        const result = ProjectContent.generateDefaultStructure();\r\n\r\n        if (result !== undefined) {\r\n          file.setContent(result);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static hasEntities(project: Project) {\r\n    const projectItems = project.getItemsByType(ProjectItemType.entityTypeBehavior);\r\n    if (projectItems.length > 0) {\r\n      return true;\r\n    }\r\n\r\n    const projectItemsResource = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n    if (projectItemsResource.length > 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static hasBlocks(project: Project) {\r\n    const projectItems = project.getItemsByType(ProjectItemType.blockTypeBehavior);\r\n    if (projectItems.length > 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static hasItems(project: Project) {\r\n    const projectItems = project.getItemsByType(ProjectItemType.itemTypeBehavior);\r\n    if (projectItems.length > 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async hasDocumentationMetadata(folder: IFolder, depth?: number) {\r\n    await folder.load();\r\n\r\n    for (const folderName in folder.folders) {\r\n      if (\r\n        folderName === \"checkpoint_input\" ||\r\n        folderName === \"metadata\" ||\r\n        folderName === \"type_definitions\" ||\r\n        folderName === \"typedefs\"\r\n      ) {\r\n        return true;\r\n      }\r\n\r\n      if (depth === undefined || depth < 5) {\r\n        const isMetadata = await ProjectUtilities.hasDocumentationMetadata(folder, depth ? depth + 1 : 1);\r\n\r\n        if (isMetadata) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async prepareProjectForDocumentation(project: Project) {\r\n    await project.ensureProjectFolder();\r\n\r\n    if (!project.projectFolder) {\r\n      return;\r\n    }\r\n\r\n    const hasMetadata = await ProjectUtilities.hasDocumentationMetadata(project.projectFolder);\r\n\r\n    if (hasMetadata) {\r\n      return;\r\n    }\r\n\r\n    const result = await Database.loadPreviewMetadataFolder();\r\n\r\n    if (result) {\r\n      project.accessoryFolders = [result];\r\n    }\r\n  }\r\n\r\n  static async getBaseBehaviorPackPath(project: Project) {\r\n    const bpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const defaultPath = bpFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  static async getBaseResourcePackPath(project: Project) {\r\n    const rpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const defaultPath = rpFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  static async applyScriptEntryPoint(project: Project, newScriptEntryPoint: string) {\r\n    project.scriptEntryPoint = newScriptEntryPoint;\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultBehaviorPackUniqueId) {\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultBehaviorPackUniqueId)\r\n            ) {\r\n              const sm = manifestJson.ensureScriptModule(project.title, project.description);\r\n\r\n              sm.entry = project.scriptEntryPoint;\r\n\r\n              manifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async applyDescription(project: Project, newDescription: string) {\r\n    project.description = newDescription;\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultBehaviorPackUniqueId) {\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.packageJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const npmPackageJson = await NpmPackageDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (npmPackageJson && npmPackageJson.definition) {\r\n              npmPackageJson.definition.description = newDescription;\r\n\r\n              await npmPackageJson.save();\r\n            }\r\n          }\r\n        } else if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultBehaviorPackUniqueId)\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.description = newDescription;\r\n\r\n              await manifestJson.save();\r\n            }\r\n          }\r\n        } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultResourcePackUniqueId)\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.description = newDescription;\r\n\r\n              await manifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async applyCreator(project: Project, newCreator: string) {\r\n    project.creator = newCreator;\r\n  }\r\n\r\n  static async applyShortName(project: Project, newShortName: string) {\r\n    project.shortName = newShortName;\r\n  }\r\n\r\n  static async ensureGeneratedWith(project: Project, isToolWeb?: boolean) {\r\n    const appName = isToolWeb ? \"mctoolsweb\" : \"mctoolscli\";\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultBehaviorPackUniqueId) {\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.primaryFile && projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (bpManifestJson && bpManifestJson.definition) {\r\n            bpManifestJson.ensureGeneratedWith(appName, constants.version);\r\n            await bpManifestJson.save();\r\n          }\r\n        } else if (projectItem.primaryFile && projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (rpManifestJson && rpManifestJson.definition) {\r\n            rpManifestJson.ensureGeneratedWith(appName, constants.version);\r\n            await rpManifestJson.save();\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async applyTitle(project: Project, newTitle: string) {\r\n    project.title = newTitle;\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultBehaviorPackUniqueId) {\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.primaryFile && projectItem.itemType === ProjectItemType.packageJson) {\r\n          const npmPackageJson = await NpmPackageDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (npmPackageJson && npmPackageJson.definition) {\r\n            npmPackageJson.definition.name = newTitle;\r\n            await npmPackageJson.save();\r\n          }\r\n        } else if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultBehaviorPackUniqueId)\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.name = newTitle;\r\n\r\n              await manifestJson.save();\r\n            }\r\n          }\r\n        } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultResourcePackUniqueId)\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.name = newTitle;\r\n\r\n              await manifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async applyBehaviorPackUniqueId(project: Project, newBehaviorPackId: string) {\r\n    const oldBehaviorPackId = project.defaultBehaviorPackUniqueId;\r\n\r\n    await project.setDefaultBehaviorPackUniqueIdAndUpdateDependencies(newBehaviorPackId);\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultBehaviorPackUniqueId) {\r\n      let bpackCount = 0;\r\n\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          bpackCount++;\r\n        }\r\n      }\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              (bpackCount <= 1 ||\r\n                Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultBehaviorPackUniqueId) ||\r\n                Utilities.uuidEqual(manifestJson.definition.header.uuid, oldBehaviorPackId))\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.uuid = newBehaviorPackId;\r\n\r\n              manifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async applyResourcePackUniqueId(project: Project, newResourcePackId: string) {\r\n    const oldResourcePackId = project.defaultResourcePackUniqueId;\r\n\r\n    await project.setDefaultResourcePackUniqueIdAndUpdateDependencies(newResourcePackId);\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultResourcePackUniqueId) {\r\n      let rpackCount = 0;\r\n\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          rpackCount++;\r\n        }\r\n      }\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              (rpackCount <= 1 ||\r\n                Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultResourcePackUniqueId) ||\r\n                Utilities.uuidEqual(manifestJson.definition.header.uuid, oldResourcePackId))\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.uuid = newResourcePackId;\r\n\r\n              manifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static getSuggestedProjectShortName(creator: string, name: string) {\r\n    return this.getSuggestedShortName(creator) + \"_\" + this.getSuggestedShortName(name);\r\n  }\r\n\r\n  static getSuggestedShortName(caption: string) {\r\n    caption = caption.trim().replace(/-/g, \"\");\r\n    caption = caption.replace(/[_ :;=]/g, \"\");\r\n\r\n    let capitalStr = \"\";\r\n\r\n    for (let i = 0; i < caption.length; i++) {\r\n      if (caption[i] >= \"A\" && caption[i] <= \"Z\") {\r\n        capitalStr += caption[i].toLowerCase();\r\n      }\r\n    }\r\n\r\n    if (capitalStr.length > 1) {\r\n      return capitalStr;\r\n    }\r\n\r\n    if (caption.length <= 8) {\r\n      return caption.toLowerCase();\r\n    }\r\n\r\n    return caption.substring(0, 8).toLowerCase();\r\n  }\r\n\r\n  static getSuggestedProjectName(project: IGalleryItem) {\r\n    return this.getSuggestedProjectNameFromElements(project.id, project.gitHubFolder, project.gitHubRepoName);\r\n  }\r\n\r\n  static getSuggestedProjectNameFromElements(id?: string, gitHubFolder?: string, gitHubRepoName?: string) {\r\n    // Special case for addonStarter: use \"My Add-On\" (task 027)\r\n    if (id === \"addonStarter\") {\r\n      return \"My Add-On\";\r\n    }\r\n\r\n    let projName = \"my\";\r\n\r\n    if (id) {\r\n      projName += id;\r\n    } else if (gitHubFolder !== undefined) {\r\n      projName += gitHubFolder;\r\n      projName = projName.replace(\" behavior_packs\", \"\");\r\n    } else {\r\n      projName += gitHubRepoName;\r\n    }\r\n\r\n    projName = projName.replace(/_/gi, \"\");\r\n    projName = projName.replace(/\\//gi, \"\");\r\n    projName = projName.replace(/\\\\/gi, \"\");\r\n    projName = projName.replace(/ /gi, \"\");\r\n\r\n    return projName;\r\n  }\r\n\r\n  static async getBaseScriptsPath(project: Project) {\r\n    const scriptsFolder = await project.ensureDefaultScriptsFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    return scriptsFolder.getFolderRelativePath(project.projectFolder);\r\n  }\r\n\r\n  static async renameDefaultFolders(project: Project, newTokenName: string) {\r\n    const bpFolder = await project.getDefaultBehaviorPackFolder(true);\r\n    const rpFolder = await project.getDefaultResourcePackFolder(true);\r\n\r\n    newTokenName = MinecraftUtilities.makeNameFolderSafe(newTokenName);\r\n\r\n    if (bpFolder) {\r\n      await this._renameOrCopyFolder(bpFolder, newTokenName, \"behavior pack\");\r\n    }\r\n\r\n    if (rpFolder) {\r\n      await this._renameOrCopyFolder(rpFolder, newTokenName, \"resource pack\");\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Attempts to rename a pack folder. If the rename fails (e.g., OneDrive file locks),\r\n   * falls back to copying contents to a new folder and deleting the original.\r\n   */\r\n  private static async _renameOrCopyFolder(folder: IFolder, newName: string, label: string) {\r\n    try {\r\n      // First attempt: direct rename. This is fast but can fail on systems with\r\n      // file locks (OneDrive, antivirus, indexers) throwing EPERM/EACCES.\r\n      let renamed = false;\r\n      try {\r\n        renamed = await folder.rename(newName);\r\n      } catch (renameErr: any) {\r\n        // Rename threw (e.g., EPERM). In-memory state is still clean because\r\n        // NodeFolder.moveTo() performs the disk op before updating state.\r\n        // Fall through to copy+delete below.\r\n        Log.debug(\"Rename threw for \" + label + \" folder (\" + renameErr.message + \"); falling back to copy + delete.\");\r\n      }\r\n\r\n      if (renamed) {\r\n        return; // rename succeeded on disk and in-memory\r\n      }\r\n\r\n      // Disk rename failed or threw. Fall back to copy + delete.\r\n      Log.debug(\"Disk rename failed for \" + label + \" folder; falling back to copy + delete.\");\r\n\r\n      const parentFolder = folder.parentFolder;\r\n      if (!parentFolder) {\r\n        Log.error(\"Cannot copy \" + label + \" folder: no parent folder.\");\r\n        return;\r\n      }\r\n\r\n      const targetFolder = parentFolder.ensureFolder(newName);\r\n      await targetFolder.ensureExists();\r\n\r\n      await StorageUtilities.syncFolderTo(folder, targetFolder, true, true, false);\r\n\r\n      try {\r\n        await folder.deleteThisFolder();\r\n      } catch (deleteErr: any) {\r\n        // If delete fails, we still have the new folder with the correct content.\r\n        // The old template folder will remain but is not harmful \u2014 the project will use the new one.\r\n        Log.debug(\"Could not delete old \" + label + \" template folder: \" + deleteErr.toString());\r\n      }\r\n    } catch (e: any) {\r\n      // perhaps folder could not be renamed because a folder exists; continue in this case.\r\n      Log.error(\"Error renaming \" + label + \" folder: \" + e.toString());\r\n    }\r\n  }\r\n\r\n  static async processNewProject(\r\n    project: Project,\r\n    title: string,\r\n    description: string,\r\n    suggestedShortName?: string,\r\n    isWeb?: boolean\r\n  ) {\r\n    await project.inferProjectItemsFromFiles();\r\n\r\n    if (suggestedShortName) {\r\n      await ProjectUtilities.renameDefaultFolders(project, suggestedShortName);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, true);\r\n\r\n    await ProjectUtilities.randomizeAllUids(project);\r\n\r\n    // Friendly-name fallback for the addon starter (and similar gallery templates).\r\n    // The \"myaddonStarter\" string comes from `getSuggestedProjectNameFromElements`\r\n    // when callers ignore the `addonStarter` special case (line 947) and feed the\r\n    // raw \"my\" + galleryId derivation back into processNewProject. That string\r\n    // also leaks into the description because the New Project Dialog defaults\r\n    // description to the title. Substitute a friendlier title and a non-tautological\r\n    // description so first-time creators don't see \"myaddonStarter / myaddonStarter\"\r\n    // in their pack manifest.\r\n    const friendlyTitle = ProjectUtilities.makeFriendlyProjectTitle(title);\r\n    if (friendlyTitle !== title) {\r\n      title = friendlyTitle;\r\n      // If the description was just a copy of the auto-derived title, swap it out too.\r\n      if (\r\n        !description ||\r\n        description === title ||\r\n        ProjectUtilities.makeFriendlyProjectTitle(description) === friendlyTitle\r\n      ) {\r\n        description = \"An add-on starter project. Customize this in manifest.json or via the editor.\";\r\n      }\r\n    } else if (description && description === title) {\r\n      // Title was already friendly but description tautologically copies it. Provide a\r\n      // gentle nudge so the manifest isn't \"Foo / Foo\".\r\n      description = title + \" \u2014 customize this description in manifest.json or via the editor.\";\r\n    }\r\n\r\n    await ProjectUtilities.applyTitle(project, title);\r\n    await ProjectUtilities.applyDescription(project, description);\r\n    await ProjectUtilities.ensureGeneratedWith(project, isWeb);\r\n\r\n    await ProjectStandard.ensureIsStandard(project);\r\n\r\n    const pur = new ProjectUpdateRunner(project);\r\n\r\n    await pur.updateProject();\r\n\r\n    await project.save(true);\r\n  }\r\n\r\n  /**\r\n   * Detects the auto-derived \"my\" + galleryId pattern (e.g. \"myaddonStarter\")\r\n   * produced by `getSuggestedProjectNameFromElements` when the addonStarter\r\n   * special case is bypassed, and substitutes a human-readable title.\r\n   *\r\n   * Currently only normalises the addon starter family \u2014 extend with additional\r\n   * checks if more gallery templates start leaking technical ids into manifests.\r\n   */\r\n  static makeFriendlyProjectTitle(title: string): string {\r\n    if (!title) {\r\n      return title;\r\n    }\r\n    const lower = title.trim().toLowerCase();\r\n    if (lower === \"myaddonstarter\") {\r\n      return \"My Add-on Starter\";\r\n    }\r\n    return title;\r\n  }\r\n\r\n  static async setNewModuleId(project: Project, newModuleId: string, oldModuleId: string) {\r\n    const itemsCopy = project.getItemsCopy();\r\n    let setResourcePack = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (pi.itemType === ProjectItemType.resourcePackManifestJson && !setResourcePack) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            if (rpManifestJson.definition && rpManifestJson.definition.modules) {\r\n              const mods = rpManifestJson.definition.modules;\r\n\r\n              for (const mod of mods) {\r\n                if (mod.uuid === oldModuleId) {\r\n                  mod.uuid = newModuleId;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const bpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            if (bpManifestJson.definition && bpManifestJson.definition.modules) {\r\n              const mods = bpManifestJson.definition.modules;\r\n\r\n              for (const mod of mods) {\r\n                if (mod.uuid === oldModuleId) {\r\n                  mod.uuid = newModuleId;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async getDefaultBehaviorPackFolder(project: Project, paths: string[]) {\r\n    const bpFolder = await project.getDefaultBehaviorPackFolder();\r\n\r\n    if (!bpFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const srFolder = await bpFolder.ensureFolderFromRelativePath(paths.join(\"/\"));\r\n\r\n    await srFolder.ensureExists();\r\n\r\n    return srFolder;\r\n  }\r\n\r\n  static async getIsAddon(project: Project) {\r\n    const itemsCopy = project.getItemsCopy();\r\n    let rpCount = 0;\r\n    let bpCount = 0;\r\n    let hasThingsThatAreNotInAddons = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (\r\n          pi.itemType === ProjectItemType.worldFolder ||\r\n          pi.itemType === ProjectItemType.worldTemplateManifestJson ||\r\n          pi.itemType === ProjectItemType.levelDbLdb ||\r\n          pi.itemType === ProjectItemType.levelDbLog ||\r\n          pi.itemType === ProjectItemType.levelDbManifest ||\r\n          pi.itemType === ProjectItemType.MCWorld ||\r\n          pi.itemType === ProjectItemType.MCProject ||\r\n          pi.itemType === ProjectItemType.MCTemplate ||\r\n          pi.itemType === ProjectItemType.levelDat\r\n        ) {\r\n          hasThingsThatAreNotInAddons = true;\r\n        } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          rpCount++;\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            if (!rpManifestJson.hasAddonProperties()) {\r\n              return false;\r\n            }\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          bpCount++;\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            if (!bpManifestJson.hasAddonProperties()) {\r\n              return false;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return !hasThingsThatAreNotInAddons && bpCount === 1 && rpCount === 1;\r\n  }\r\n\r\n  static async getMetaCategory(project: Project) {\r\n    const itemsCopy = project.getItemsCopy();\r\n    let rpCount = 0;\r\n    let bpCount = 0;\r\n    let spCount = 0;\r\n    let personaCount = 0;\r\n    let worldTemplateCount = 0;\r\n\r\n    let hasPacksWithAddOnProperties = false;\r\n    let hasPacksWithoutAddOnProperties = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (!pi.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        rpCount++;\r\n        const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n        if (rpManifestJson) {\r\n          let hasAddonProperties = rpManifestJson.hasAddonProperties();\r\n\r\n          if (hasAddonProperties) {\r\n            hasPacksWithAddOnProperties = true;\r\n          } else {\r\n            hasPacksWithoutAddOnProperties = true;\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        bpCount++;\r\n        const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n        if (bpManifestJson) {\r\n          let hasAddonProperties = bpManifestJson.hasAddonProperties();\r\n\r\n          if (hasAddonProperties) {\r\n            hasPacksWithAddOnProperties = true;\r\n          } else {\r\n            hasPacksWithoutAddOnProperties = true;\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.skinPackManifestJson) {\r\n        spCount++;\r\n      } else if (pi.itemType === ProjectItemType.personaManifestJson) {\r\n        personaCount++;\r\n      } else if (pi.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        worldTemplateCount++;\r\n      }\r\n    }\r\n\r\n    if (personaCount > 0) {\r\n      return ProjectMetaCategory.persona;\r\n    }\r\n\r\n    if (worldTemplateCount > 0) {\r\n      return ProjectMetaCategory.worldTemplate;\r\n    }\r\n\r\n    if (\r\n      bpCount === 1 &&\r\n      rpCount === 1 &&\r\n      spCount === 0 &&\r\n      !hasPacksWithoutAddOnProperties &&\r\n      hasPacksWithAddOnProperties\r\n    ) {\r\n      return ProjectMetaCategory.addOn;\r\n    }\r\n\r\n    if (bpCount === 0 && rpCount >= 1 && !hasPacksWithAddOnProperties) {\r\n      return ProjectMetaCategory.texturePack;\r\n    }\r\n\r\n    if (spCount >= 0) {\r\n      return ProjectMetaCategory.skinPack;\r\n    }\r\n\r\n    return ProjectMetaCategory.mix;\r\n  }\r\n\r\n  static getMetaCategoryDescription(category: ProjectMetaCategory) {\r\n    switch (category) {\r\n      case ProjectMetaCategory.addOn:\r\n        return \"Add-On\";\r\n      case ProjectMetaCategory.worldTemplate:\r\n        return \"World Template\";\r\n      case ProjectMetaCategory.texturePack:\r\n        return \"Texture Pack\";\r\n      case ProjectMetaCategory.skinPack:\r\n        return \"Skin Pack\";\r\n      case ProjectMetaCategory.persona:\r\n        return \"Persona\";\r\n      default:\r\n        return \"Mix\";\r\n    }\r\n  }\r\n\r\n  static async setIsAddon(project: Project) {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            rpManifestJson.setAddonProperties();\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            bpManifestJson.setAddonProperties();\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async randomizeAllUids(project: Project) {\r\n    const oldUids: { [name: string]: string } = {};\r\n\r\n    oldUids[\"defaultBehaviorPack\"] = project.defaultBehaviorPackUniqueId;\r\n    oldUids[\"defaultResourcePack\"] = project.defaultResourcePackUniqueId;\r\n    oldUids[\"defaultDataPack\"] = project.defaultDataUniqueId;\r\n    oldUids[\"defaultScriptModulePack\"] = project.defaultScriptModuleUniqueId;\r\n\r\n    await project.setDefaultResourcePackUniqueIdAndUpdateDependencies(Utilities.createUuid());\r\n    await project.setDefaultBehaviorPackUniqueIdAndUpdateDependencies(Utilities.createUuid());\r\n    project.defaultDataUniqueId = Utilities.createUuid();\r\n    project.defaultScriptModuleUniqueId = Utilities.createUuid();\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n    let assignedDefaultBehaviorPack = false;\r\n    let assignedDefaultResourcePack = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            bpManifestJson.randomizeModuleUuids(\r\n              project.defaultScriptModuleUniqueId,\r\n              oldUids[\"defaultScriptModulePack\"]\r\n            );\r\n\r\n            if (\r\n              bpManifestJson.id !== oldUids[\"defaultBehaviorPack\"] &&\r\n              bpManifestJson.id !== project.defaultBehaviorPackUniqueId\r\n            ) {\r\n              if (!assignedDefaultBehaviorPack) {\r\n                // Assign the project's default behavior pack UUID to the first unmatched manifest\r\n                // so that applyTitle/applyDescription can find it by UUID later.\r\n                await bpManifestJson.setUuid(project.defaultBehaviorPackUniqueId, project);\r\n                assignedDefaultBehaviorPack = true;\r\n              } else {\r\n                await bpManifestJson.setUuid(Utilities.createUuid(), project);\r\n              }\r\n            } else {\r\n              assignedDefaultBehaviorPack = true;\r\n            }\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            rpManifestJson.randomizeModuleUuids(project.defaultDataUniqueId, oldUids[\"defaultDataModulePack\"]);\r\n\r\n            if (\r\n              rpManifestJson.id !== oldUids[\"defaultResourcePack\"] &&\r\n              rpManifestJson.id !== project.defaultResourcePackUniqueId\r\n            ) {\r\n              if (!assignedDefaultResourcePack) {\r\n                // Assign the project's default resource pack UUID to the first unmatched manifest\r\n                // so that applyTitle/applyDescription can find it by UUID later.\r\n                await rpManifestJson.setUuid(project.defaultResourcePackUniqueId, project);\r\n                assignedDefaultResourcePack = true;\r\n              } else {\r\n                await rpManifestJson.setUuid(Utilities.createUuid(), project);\r\n              }\r\n            } else {\r\n              assignedDefaultResourcePack = true;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static sanitizeProjectName(name: string) {\r\n    const lastDash = name.lastIndexOf(\"-\");\r\n\r\n    // this is the token format of Electron Storage - remove the random token at the end\r\n    if (lastDash === name.length - 6) {\r\n      name = name.substring(0, name.length - 6);\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  static CodeReplaceTokens = [\"say Hello\", 'sendMessage(\"Hello world'];\r\n\r\n  static ImportTypes = {\r\n    vanilla: [\r\n      \"MinecraftDimensionTypes\",\r\n      \"MinecraftBlockTypes\",\r\n      \"MinecraftItemTypes\",\r\n      \"MinecraftEntityTypes\",\r\n      \"MinecraftEffectTypes\",\r\n      \"MinecraftEnchantmentTypes\",\r\n      \"MinecraftBiomeTypes\",\r\n      \"MinecraftFeatureTypes\",\r\n      \"MinecraftPotionEffectTypes\",\r\n      \"MinecraftPotionLiquidTypes\",\r\n      \"MinecraftPotionModifierTypes\",\r\n      \"MinecraftCooldownCategoryTypes\",\r\n    ],\r\n    math: [\"Vector3Utils\"],\r\n    mcui: [\r\n      \"MessageFormResponse\",\r\n      \"MessageFormData\",\r\n      \"ActionFormData\",\r\n      \"ActionFormResponse\",\r\n      \"ModalFormData\",\r\n      \"ModalFormResponse\",\r\n    ],\r\n    mc: [\r\n      \"system\",\r\n      \"BlockPermutation\",\r\n      \"BlockSignComponent\",\r\n      \"CompoundBlockVolume\",\r\n      \"SignSide\",\r\n      \"DyeColor\",\r\n      \"ItemDurabilityComponent\",\r\n      \"RawMessage\",\r\n      \"RawText\",\r\n      \"EntityProjectileComponent\",\r\n      \"EntityQueryOptions\",\r\n      \"ButtonPushAfterEvent\",\r\n      \"ItemStack\",\r\n      \"MolangVariableMap\",\r\n      \"EntityInventoryComponent\",\r\n      \"BlockInventoryComponent\",\r\n      \"Enchantment\",\r\n      \"ItemEnchantsComponent\",\r\n      \"EntityHealthComponent\",\r\n      \"EntityOnFireComponent\",\r\n      \"EntityEquippableComponent\",\r\n      \"EquipmentSlot\",\r\n      \"EntityItemComponent\",\r\n      \"EntitySpawnAfterEvent\",\r\n      \"PistonActivateBeforeEvent\",\r\n      \"PistonActivateAfterEvent\",\r\n      \"MusicOptions\",\r\n      \"WorldSoundOptions\",\r\n      \"PlayerSoundOptions\",\r\n      \"DisplaySlotId\",\r\n      \"ObjectiveSortOrder\",\r\n      \"TripWireTripAfterEvent\",\r\n      \"BlockComponentTypes\",\r\n      \"EntityComponentTypes\",\r\n      \"ItemComponentTypes\",\r\n      \"LeverActionAfterEvent\",\r\n      \"Vector3\",\r\n    ],\r\n    mced: [\r\n      \"IPlayerUISession\",\r\n      \"ExtensionContext\",\r\n      \"IModalToolContainer\",\r\n      \"registerEditorExtension\",\r\n      \"ActionManager\",\r\n      \"IModalTool\",\r\n      \"ActionTypes\",\r\n      \"MouseProps\",\r\n      \"MouseActionType\",\r\n      \"MouseInputType\",\r\n      \"KeyboardKey\",\r\n      \"InputModifier\",\r\n      \"EditorInputContext\",\r\n      \"IPropertyPane\",\r\n    ],\r\n  };\r\n\r\n  static getTopicUrl(topic: string) {\r\n    const tokens = topic.split(\".\");\r\n\r\n    if (tokens.length < 1) {\r\n      return undefined;\r\n    }\r\n\r\n    if (\r\n      this.ImportTypes.mc.includes(tokens[0]) ||\r\n      tokens[0] === \"World\" ||\r\n      tokens[0] === \"System\" ||\r\n      tokens[0] === \"Dimension\"\r\n    ) {\r\n      return (\r\n        \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/\" +\r\n        topic.toLowerCase().replace(\".\", \"#\")\r\n      );\r\n    }\r\n    if (this.ImportTypes.mcui.includes(tokens[0])) {\r\n      return (\r\n        \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-ui/\" +\r\n        topic.toLowerCase().replace(\".\", \"#\")\r\n      );\r\n    }\r\n    if (this.ImportTypes.mced.includes(tokens[0])) {\r\n      return (\r\n        \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-editor/\" +\r\n        topic.toLowerCase().replace(\".\", \"#\")\r\n      );\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static adaptFullSample(content: string) {\r\n    const registerFunction = content.indexOf(\"export function register\");\r\n\r\n    if (registerFunction >= 0) {\r\n      let nextParen = content.indexOf(\"Extension(\", registerFunction);\r\n\r\n      if (nextParen > registerFunction) {\r\n        content = content.substring(0, registerFunction + 24) + content.substring(nextParen);\r\n      }\r\n    }\r\n\r\n    return content;\r\n  }\r\n\r\n  static adaptSample(sampleContent: string, fileContent: string) {\r\n    if (sampleContent.indexOf(\" mc.\") >= 0 && fileContent.indexOf(\" as mc\") <= 0) {\r\n      sampleContent = sampleContent.replace(/mc./gi, \"\");\r\n    }\r\n\r\n    if (sampleContent.indexOf(\" mcui.\") >= 0 && fileContent.indexOf(\" as mcui\") <= 0) {\r\n      sampleContent = sampleContent.replace(/mcui./gi, \"\");\r\n    }\r\n\r\n    return sampleContent;\r\n  }\r\n\r\n  static modifyImports(fileContent: string) {\r\n    let startOfCode = fileContent.indexOf(\"(\");\r\n    let nextStartOfCode = fileContent.indexOf(\"function\");\r\n\r\n    if (nextStartOfCode >= 0 && nextStartOfCode < startOfCode) {\r\n      startOfCode = nextStartOfCode;\r\n    }\r\n\r\n    nextStartOfCode = fileContent.indexOf(\"class\");\r\n\r\n    if (nextStartOfCode >= 0 && nextStartOfCode < startOfCode) {\r\n      startOfCode = nextStartOfCode;\r\n    }\r\n\r\n    const previousNewLine = fileContent.lastIndexOf(\"\\n\", startOfCode);\r\n\r\n    if (previousNewLine >= 0) {\r\n      startOfCode = previousNewLine;\r\n    }\r\n\r\n    if (startOfCode > 0) {\r\n      let introContent = fileContent.substring(0, startOfCode);\r\n      const restOfContent = fileContent.substring(startOfCode);\r\n\r\n      introContent = ProjectUtilities.ensureImportLines(\r\n        introContent,\r\n        restOfContent,\r\n        \"@minecraft/server\",\r\n        this.ImportTypes.mc\r\n      );\r\n\r\n      introContent = ProjectUtilities.ensureImportLines(\r\n        introContent,\r\n        restOfContent,\r\n        \"@minecraft/server-ui\",\r\n        this.ImportTypes.mcui\r\n      );\r\n\r\n      introContent = ProjectUtilities.ensureImportLines(\r\n        introContent,\r\n        restOfContent,\r\n        \"@minecraft/vanilla-data\",\r\n        this.ImportTypes.vanilla\r\n      );\r\n\r\n      introContent = ProjectUtilities.ensureImportLines(\r\n        introContent,\r\n        restOfContent,\r\n        \"@minecraft/math\",\r\n        this.ImportTypes.math\r\n      );\r\n\r\n      fileContent = introContent + restOfContent;\r\n    }\r\n\r\n    return fileContent;\r\n  }\r\n\r\n  static ensureImportLines(\r\n    introSection: string,\r\n    restOfContent: string,\r\n    moduleName: string,\r\n    importCollection: string[]\r\n  ) {\r\n    for (const importType of importCollection) {\r\n      if (restOfContent.indexOf(importType) >= 0) {\r\n        let importLineIndex = introSection.indexOf('from \"' + moduleName + '\";');\r\n\r\n        if (importLineIndex < 0) {\r\n          introSection = 'import {} from \"' + moduleName + '\";\\n' + introSection;\r\n          importLineIndex = 10;\r\n        }\r\n\r\n        let previousNewLine = introSection.lastIndexOf(\"\\n\", importLineIndex);\r\n\r\n        if (previousNewLine < 0) {\r\n          previousNewLine = 0;\r\n        }\r\n\r\n        let endNewLine = introSection.indexOf(\"\\n\", importLineIndex);\r\n\r\n        if (endNewLine > previousNewLine) {\r\n          let importLine = introSection.substring(previousNewLine, endNewLine);\r\n\r\n          const leftBracket = importLine.indexOf(\"{\");\r\n          const rightBracket = importLine.indexOf(\"}\");\r\n\r\n          if (leftBracket > 0 && rightBracket > leftBracket) {\r\n            const interior = importLine.substring(leftBracket + 1, rightBracket).trim();\r\n\r\n            let injectToken = importType;\r\n\r\n            // is there one token already in the import linte\r\n            if (interior.length > 0) {\r\n              injectToken = \", \" + injectToken;\r\n            }\r\n\r\n            importLine = importLine.substring(0, rightBracket) + injectToken + importLine.substring(rightBracket);\r\n          }\r\n\r\n          introSection = introSection.substring(0, previousNewLine) + importLine + introSection.substring(endNewLine);\r\n        }\r\n      }\r\n    }\r\n\r\n    return introSection;\r\n  }\r\n\r\n  static async ensureTypeScriptFileWith(\r\n    project: Project,\r\n    token: string,\r\n    templateSet: string,\r\n    templateName: string,\r\n    fileNameCore: string,\r\n    replacers: { [sourceString: string]: string }\r\n  ) {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.ts) {\r\n        await projectItem.loadFileContent();\r\n\r\n        if (projectItem.primaryFile) {\r\n          const tsJson = await TypeScriptDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (tsJson?.data && tsJson.data.indexOf(token) >= 0) {\r\n            return;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const snippet = await Database.getSnippet(templateSet, templateName);\r\n    const scriptFolder = await project.ensureDefaultScriptsFolder();\r\n\r\n    await scriptFolder.load();\r\n\r\n    if (!snippet) {\r\n      Log.error(\"Could not find template \" + templateSet, templateName);\r\n      return;\r\n    }\r\n\r\n    const file = scriptFolder.ensureFile(fileNameCore + \".ts\");\r\n\r\n    let snippetInjectContent = \"\\n\" + snippet.body.join(\"\\n\") + \"\\n\";\r\n\r\n    for (const replacerToken in replacers) {\r\n      const targetReplace = replacers[replacerToken];\r\n\r\n      if (targetReplace) {\r\n        // replace with something better.\r\n        while (snippetInjectContent.indexOf(replacerToken) >= 0) {\r\n          snippetInjectContent = snippetInjectContent.replace(replacerToken, replacers[replacerToken]);\r\n        }\r\n      }\r\n    }\r\n\r\n    file.setContent(snippetInjectContent);\r\n\r\n    await file.saveContent();\r\n\r\n    project.ensureItemFromFile(file, ProjectItemType.ts, FolderContext.behaviorPack);\r\n  }\r\n\r\n  static async injectSnippet(project: Project, snippet: ISnippet, fullScriptBoxReplace: boolean) {\r\n    let snippetInjectContent = \"\\n\" + snippet.body.join(\"\\n\") + \"\\n\";\r\n\r\n    const folder = await project.ensureDefaultScriptsFolder();\r\n\r\n    await folder.load();\r\n\r\n    // Log.debugAlert(\"Inject snippet considering folder: \" + folder.storageRelativePath + \"|\" + replaceContent);\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file !== undefined) {\r\n        if (fullScriptBoxReplace && fileName === \"ScriptBox.ts\") {\r\n          snippetInjectContent = ProjectUtilities.adaptFullSample(snippetInjectContent);\r\n\r\n          file.setContent(snippetInjectContent);\r\n        } else {\r\n          const type = StorageUtilities.getTypeFromName(file.name);\r\n\r\n          if (type === \"ts\" || type === \"js\") {\r\n            if (!file.isContentLoaded) {\r\n              await file.loadContent();\r\n            }\r\n\r\n            // Log.debugAlert(\"Inject snippet considering file: \" + file.storageRelativePath + \"|\" + file.content?.length);\r\n            if (file.content && typeof file.content === \"string\") {\r\n              let content = file.content;\r\n\r\n              for (let i = 0; i < this.CodeReplaceTokens.length; i++) {\r\n                const token = content.indexOf(this.CodeReplaceTokens[i]);\r\n\r\n                if (token >= 0) {\r\n                  const previousNewLine = content.lastIndexOf(\"\\n\", token);\r\n                  const nextNewLine = content.indexOf(\"\\n\", token);\r\n                  if (previousNewLine >= 0 && nextNewLine > previousNewLine) {\r\n                    snippetInjectContent = ProjectUtilities.adaptSample(snippetInjectContent, content);\r\n\r\n                    content =\r\n                      content.substring(0, previousNewLine) + snippetInjectContent + content.substring(nextNewLine + 1);\r\n\r\n                    if (\r\n                      snippetInjectContent.indexOf(\"overworld\") >= 0 &&\r\n                      snippetInjectContent.indexOf(\"const overworld\") <= 0\r\n                    ) {\r\n                      let firstComment = content.indexOf(\"//\");\r\n                      if (firstComment >= 0) {\r\n                        content =\r\n                          content.substring(0, firstComment) +\r\n                          '  const overworld = mc.world.getDimension(\"overworld\");\\n' +\r\n                          content.substring(firstComment, content.length);\r\n                      }\r\n                    }\r\n\r\n                    content = ProjectUtilities.modifyImports(content);\r\n\r\n                    file.setContent(content);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async addBlockType(project: Project, blockTypeId?: string, blockTypeName?: string) {\r\n    const defaultBehaviorPackPath = await ProjectUtilities.getBaseBehaviorPackPath(project);\r\n    const defaultScriptsPath = await ProjectUtilities.getBaseScriptsPath(project);\r\n\r\n    if (defaultBehaviorPackPath === undefined || defaultScriptsPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    await Database.getReleaseVanillaBehaviorPackFolder();\r\n\r\n    if (Database.releaseVanillaBehaviorPackFolder === null) {\r\n      Log.fail(\"Could not find default behavior pack folder\");\r\n      return;\r\n    }\r\n\r\n    const sourceFile = Database.releaseVanillaBehaviorPackFolder\r\n      .ensureFolder(\"blocks\")\r\n      .ensureFile(blockTypeId + \".json\");\r\n\r\n    if (!sourceFile.isContentLoaded) {\r\n      await sourceFile.loadContent(true);\r\n    }\r\n\r\n    if (\r\n      !sourceFile.content ||\r\n      sourceFile.content === \"\" ||\r\n      sourceFile.content === \"null\" ||\r\n      sourceFile.content instanceof Uint8Array\r\n    ) {\r\n      Log.fail(\"Block at '\" + sourceFile.fullPath + \"' is empty.\");\r\n      return;\r\n    }\r\n\r\n    const name = blockTypeId ? MinecraftUtilities.canonicalizeName(blockTypeId) : \"block\";\r\n\r\n    const nextBlockTypeName = blockTypeName ? blockTypeName : name;\r\n\r\n    const candidateFilePath = await ProjectUtilities.getFileName(\r\n      project,\r\n      defaultBehaviorPackPath + \"blocks/\",\r\n      nextBlockTypeName,\r\n      \"json\",\r\n      true\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      nextBlockTypeName,\r\n      ProjectItemType.blockTypeBehavior,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const content = Utilities.fixJsonContent(sourceFile.content);\r\n\r\n      file.setContent(content);\r\n\r\n      const bt = await BlockTypeDefinition.ensureOnFile(file, undefined);\r\n\r\n      if (bt) {\r\n        bt.id =\r\n          nextBlockTypeName.indexOf(\":\") >= 0\r\n            ? nextBlockTypeName\r\n            : project.effectiveDefaultNamespace + \":\" + nextBlockTypeName;\r\n\r\n        bt.persist();\r\n      }\r\n\r\n      await file.saveContent(true);\r\n    }\r\n    /*\r\n    if (project.preferredScriptLanguage === ProjectScriptLanguage.javaScript) {\r\n      const candidateJsFilePath = await ProjectUtilities.getFileName(\r\n        project,\r\n        defaultScriptsPath + \"generated/\",\r\n        nextBlockTypeName + \".base\",\r\n        \"js\",\r\n        true\r\n      );\r\n\r\n      if (candidateJsFilePath) {\r\n        const piGenJs = project.ensureItemByProjectPath(\r\n          candidateJsFilePath,\r\n          ProjectItemStorageType.singleFile,\r\n          StorageUtilities.getLeafName(candidateJsFilePath),\r\n          ProjectItemType.blockTypeBaseJs,\r\n          undefined,\r\n          ProjectItemCreationType.generated\r\n        );\r\n\r\n        await ProjectAutogeneration.updateItemAutogeneration(piGenJs);\r\n      }\r\n    } else if (project.preferredScriptLanguage === ProjectScriptLanguage.typeScript) {\r\n      const candidateJsFilePath = await ProjectUtilities.getFileName(\r\n        project,\r\n        defaultScriptsPath + \"generated/\",\r\n        nextBlockTypeName + \".base\",\r\n        \"ts\",\r\n        true\r\n      );\r\n\r\n      if (candidateJsFilePath) {\r\n        const piGenJs = project.ensureItemByProjectPath(\r\n          candidateJsFilePath,\r\n          ProjectItemStorageType.singleFile,\r\n          StorageUtilities.getLeafName(candidateJsFilePath),\r\n          ProjectItemType.blockTypeBaseTs,\r\n          undefined,\r\n          ProjectItemCreationType.normal\r\n        );\r\n\r\n        await ProjectAutogeneration.updateItemAutogeneration(piGenJs);\r\n      }\r\n    }*/\r\n  }\r\n\r\n  static canonicalizeStoragePath(path: string | null | undefined) {\r\n    if (!path) {\r\n      return \"\";\r\n    }\r\n\r\n    path = path.toLowerCase();\r\n\r\n    return path;\r\n  }\r\n\r\n  static canonicalizeNamespace(path: string | null | undefined) {\r\n    if (!path) {\r\n      return \"\";\r\n    }\r\n\r\n    path = path.toLowerCase();\r\n    path = path.replace(/ /gi, \"\");\r\n    path = path.replace(/:/gi, \"\");\r\n\r\n    return path;\r\n  }\r\n\r\n  static async getFileName(\r\n    project: Project,\r\n    basePath: string,\r\n    baseName: string,\r\n    extension: string,\r\n    includeBase: boolean\r\n  ) {\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    let index = 0;\r\n\r\n    if (includeBase) {\r\n      index = -1;\r\n    }\r\n\r\n    let candidateFilePath = \"\";\r\n    const projectFolder = project.projectFolder;\r\n    let candidateFile = null;\r\n\r\n    await projectFolder.ensureFolderFromRelativePath(basePath);\r\n    await projectFolder.ensureExists();\r\n\r\n    // find a filename not in use\r\n    do {\r\n      index++;\r\n\r\n      if (index === 0) {\r\n        candidateFilePath = basePath + baseName + \".\" + extension;\r\n      } else {\r\n        candidateFilePath = basePath + baseName + index + \".\" + extension;\r\n      }\r\n\r\n      candidateFile = await projectFolder.getFileFromRelativePath(candidateFilePath);\r\n    } while (candidateFile !== null && candidateFile !== undefined);\r\n\r\n    return candidateFilePath;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   PROJECT ITEM TYPE INFO - Semantic Color System & Categorization\r\n   \r\n   This module provides a unified system for categorizing, coloring, and\r\n   providing icons for all Minecraft project item types. The design uses\r\n   Minecraft-themed colors inspired by in-game materials and concepts.\r\n   \r\n   CATEGORY GROUPS (semantic groupings for UI display):\r\n   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n   1. Scripts/Logic (Emerald Green)    - TypeScript, JavaScript, functions\r\n   2. Entity Types (Minecraft Green)  - Entities, spawn rules, dialogues\r\n   3. Item Types (Gold/Amber)          - Items, loot tables, recipes, trading\r\n   4. Block Types (Stone Gray)         - Blocks, terrain, culling\r\n   5. World/Worldgen (Grass Lime)      - Biomes, features, dimensions, worlds\r\n   6. Models/Animations (Diamond Cyan) - Geometry, animations, render controllers\r\n   7. Textures/Audio (Minecraft Green) - Textures, sounds, particles\r\n   8. Vibrant Visuals (Minecraft Green) - Lighting, atmospherics, PBR\r\n   9. UI/UX (Pumpkin Orange)           - JSON UI, global variables\r\n   10. Config/Dev (Iron Slate)         - Package.json, tsconfig, VS Code\r\n   11. Design (Lapis Blue)             - Design pack content\r\n   12. Packaging (Redstone Red)        - MCAddon, MCPack, ZIP files\r\n   \r\n   See: docs/ux/ColorSystem.md for full color palette\r\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\r\n\r\nimport IColor from \"../core/IColor\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\n\r\n/**\r\n * Semantic category groups for project items.\r\n * These map to visual groupings in the UI item list.\r\n */\r\nexport enum ProjectItemTypeGroup {\r\n  design = \"design\",\r\n  scriptsLogic = \"scriptsLogic\",\r\n  entityTypes = \"entityTypes\",\r\n  itemTypes = \"itemTypes\",\r\n  blockTypes = \"blockTypes\",\r\n  worldWorldgen = \"worldWorldgen\",\r\n  modelsAnimations = \"modelsAnimations\",\r\n  texturesAudio = \"texturesAudio\",\r\n  vibrantVisuals = \"vibrantVisuals\",\r\n  uiUx = \"uiUx\",\r\n  configDev = \"configDev\",\r\n  packaging = \"packaging\",\r\n  skinPersona = \"skinPersona\",\r\n  meta = \"meta\",\r\n  unknown = \"unknown\",\r\n}\r\n\r\n/**\r\n * Color palette for project item type groups.\r\n * Colors are inspired by Minecraft materials and items.\r\n */\r\nexport const ProjectItemTypeGroupColors: Record<ProjectItemTypeGroup, IColor> = {\r\n  // Emerald Green - Scripts and logic\r\n  [ProjectItemTypeGroup.scriptsLogic]: { red: 16, green: 185, blue: 129 }, // #10b981\r\n\r\n  // Minecraft Green - Entity types\r\n  [ProjectItemTypeGroup.entityTypes]: { red: 82, green: 165, blue: 53 }, // #52a535\r\n\r\n  // Gold/Amber - Item types\r\n  [ProjectItemTypeGroup.itemTypes]: { red: 245, green: 158, blue: 11 }, // #f59e0b\r\n\r\n  // Stone Gray - Block types\r\n  [ProjectItemTypeGroup.blockTypes]: { red: 120, green: 113, blue: 108 }, // #78716c\r\n\r\n  // Grass Lime - World and worldgen\r\n  [ProjectItemTypeGroup.worldWorldgen]: { red: 132, green: 204, blue: 22 }, // #84cc16\r\n\r\n  // Diamond Cyan - Models and animations\r\n  [ProjectItemTypeGroup.modelsAnimations]: { red: 6, green: 182, blue: 212 }, // #06b6d4\r\n\r\n  // Minecraft Green - Textures and audio\r\n  [ProjectItemTypeGroup.texturesAudio]: { red: 82, green: 165, blue: 53 }, // #52a535\r\n\r\n  // Minecraft Green - Vibrant visuals\r\n  [ProjectItemTypeGroup.vibrantVisuals]: { red: 82, green: 165, blue: 53 }, // #52a535\r\n\r\n  // Pumpkin Orange - UI/UX\r\n  [ProjectItemTypeGroup.uiUx]: { red: 249, green: 115, blue: 22 }, // #f97316\r\n\r\n  // Iron Slate - Config and dev tools\r\n  [ProjectItemTypeGroup.configDev]: { red: 100, green: 116, blue: 139 }, // #64748b\r\n\r\n  // Lapis Blue - Design pack content\r\n  [ProjectItemTypeGroup.design]: { red: 59, green: 130, blue: 246 }, // #3b82f6\r\n\r\n  // Redstone Red - Packaging\r\n  [ProjectItemTypeGroup.packaging]: { red: 239, green: 68, blue: 68 }, // #ef4444\r\n\r\n  // Leather Brown - Skins and personas\r\n  [ProjectItemTypeGroup.skinPersona]: { red: 180, green: 128, blue: 90 }, // #b4805a\r\n\r\n  // Book Brown - Meta/documentation\r\n  [ProjectItemTypeGroup.meta]: { red: 146, green: 114, blue: 87 }, // #927257\r\n\r\n  // Coal Gray - Unknown\r\n  [ProjectItemTypeGroup.unknown]: { red: 82, green: 82, blue: 91 }, // #52525b\r\n};\r\n\r\n/**\r\n * Maps each ProjectItemType to its semantic group.\r\n */\r\nexport function getProjectItemTypeGroup(itemType: ProjectItemType): ProjectItemTypeGroup {\r\n  switch (itemType) {\r\n    // \u2550\u2550\u2550 Design Pack \u2550\u2550\u2550\r\n    case ProjectItemType.designTexture:\r\n    case ProjectItemType.designPackManifestJson:\r\n    case ProjectItemType.designPackFolder:\r\n    case ProjectItemType.actionSet:\r\n      return ProjectItemTypeGroup.design;\r\n\r\n    // \u2550\u2550\u2550 Scripts & Logic \u2550\u2550\u2550\r\n    case ProjectItemType.ts:\r\n    case ProjectItemType.js:\r\n    case ProjectItemType.MCFunction:\r\n    case ProjectItemType.testJs:\r\n    case ProjectItemType.buildProcessedJs:\r\n    case ProjectItemType.catalogIndexJs:\r\n    case ProjectItemType.entityTypeBaseJs:\r\n    case ProjectItemType.entityTypeBaseTs:\r\n    case ProjectItemType.blockTypeBaseJs:\r\n    case ProjectItemType.blockTypeBaseTs:\r\n    case ProjectItemType.tickJson:\r\n    case ProjectItemType.functionEventJson:\r\n    case ProjectItemType.animationBehaviorJson:\r\n    case ProjectItemType.animationControllerBehaviorJson:\r\n      return ProjectItemTypeGroup.scriptsLogic;\r\n\r\n    // \u2550\u2550\u2550 Entity Types \u2550\u2550\u2550\r\n    case ProjectItemType.entityTypeBehavior:\r\n    case ProjectItemType.entityTypeResource:\r\n    case ProjectItemType.spawnRuleBehavior:\r\n    case ProjectItemType.spawnGroupJson:\r\n    case ProjectItemType.dialogueBehaviorJson:\r\n    case ProjectItemType.behaviorTreeJson:\r\n      return ProjectItemTypeGroup.entityTypes;\r\n\r\n    // \u2550\u2550\u2550 Item Types \u2550\u2550\u2550\r\n    case ProjectItemType.itemTypeBehavior:\r\n    case ProjectItemType.itemTypeLegacyResource:\r\n    case ProjectItemType.attachableResourceJson:\r\n    case ProjectItemType.lootTableBehavior:\r\n    case ProjectItemType.recipeBehavior:\r\n    case ProjectItemType.tradingBehaviorJson:\r\n    case ProjectItemType.craftingItemCatalog:\r\n    case ProjectItemType.itemTextureJson:\r\n      return ProjectItemTypeGroup.itemTypes;\r\n\r\n    // \u2550\u2550\u2550 Block Types \u2550\u2550\u2550\r\n    case ProjectItemType.blockTypeBehavior:\r\n    case ProjectItemType.blocksCatalogResourceJson:\r\n    case ProjectItemType.blockTypeResourceJsonDoNotUse:\r\n    case ProjectItemType.blockCulling:\r\n    case ProjectItemType.blockMaterialsBehaviorJson:\r\n    case ProjectItemType.terrainTextureCatalogResourceJson:\r\n    case ProjectItemType.voxelShapeBehavior:\r\n      return ProjectItemTypeGroup.blockTypes;\r\n\r\n    // \u2550\u2550\u2550 World & Worldgen \u2550\u2550\u2550\r\n    case ProjectItemType.worldFolder:\r\n    case ProjectItemType.worldTemplateManifestJson:\r\n    case ProjectItemType.MCWorld:\r\n    case ProjectItemType.MCTemplate:\r\n    case ProjectItemType.MCProject:\r\n    case ProjectItemType.levelDat:\r\n    case ProjectItemType.levelDatOld:\r\n    case ProjectItemType.behaviorPackListJson:\r\n    case ProjectItemType.resourcePackListJson:\r\n    case ProjectItemType.behaviorPackHistoryListJson:\r\n    case ProjectItemType.resourcePackHistoryListJson:\r\n    case ProjectItemType.levelDbLdb:\r\n    case ProjectItemType.levelDbLog:\r\n    case ProjectItemType.levelDbCurrent:\r\n    case ProjectItemType.levelDbManifest:\r\n    case ProjectItemType.worldTest:\r\n    case ProjectItemType.biomeBehavior:\r\n    case ProjectItemType.biomeResource:\r\n    case ProjectItemType.biomesClientCatalogResource:\r\n    case ProjectItemType.featureRuleBehavior:\r\n    case ProjectItemType.featureBehavior:\r\n    case ProjectItemType.jigsawStructureSet:\r\n    case ProjectItemType.jigsawStructure:\r\n    case ProjectItemType.jigsawTemplatePool:\r\n    case ProjectItemType.jigsawProcessorList:\r\n    case ProjectItemType.dimensionJson:\r\n    case ProjectItemType.volumeBehaviorJson:\r\n    case ProjectItemType.structure:\r\n      return ProjectItemTypeGroup.worldWorldgen;\r\n\r\n    // \u2550\u2550\u2550 Models & Animations \u2550\u2550\u2550\r\n    case ProjectItemType.modelGeometryJson:\r\n    case ProjectItemType.animationResourceJson:\r\n    case ProjectItemType.animationControllerResourceJson:\r\n    case ProjectItemType.renderControllerJson:\r\n    case ProjectItemType.particleJson:\r\n      return ProjectItemTypeGroup.modelsAnimations;\r\n\r\n    // \u2550\u2550\u2550 Textures & Audio \u2550\u2550\u2550\r\n    case ProjectItemType.texture:\r\n    case ProjectItemType.image:\r\n    case ProjectItemType.packIconImage:\r\n    case ProjectItemType.marketingAssetImage:\r\n    case ProjectItemType.storeAssetImage:\r\n    case ProjectItemType.textureListJson:\r\n    case ProjectItemType.flipbookTexturesJson:\r\n    case ProjectItemType.audio:\r\n    case ProjectItemType.soundCatalog:\r\n    case ProjectItemType.soundDefinitionCatalog:\r\n    case ProjectItemType.musicDefinitionJson:\r\n    case ProjectItemType.fogResourceJson:\r\n      return ProjectItemTypeGroup.texturesAudio;\r\n\r\n    // \u2550\u2550\u2550 Vibrant Visuals \u2550\u2550\u2550\r\n    case ProjectItemType.lightingJson:\r\n    case ProjectItemType.colorGradingJson:\r\n    case ProjectItemType.atmosphericsJson:\r\n    case ProjectItemType.pbrJson:\r\n    case ProjectItemType.pointLightsJson:\r\n    case ProjectItemType.waterJson:\r\n    case ProjectItemType.shadowsJson:\r\n    case ProjectItemType.textureSetJson:\r\n      return ProjectItemTypeGroup.vibrantVisuals;\r\n\r\n    // \u2550\u2550\u2550 UI/UX \u2550\u2550\u2550\r\n    case ProjectItemType.uiJson:\r\n    case ProjectItemType.uiTexture:\r\n    case ProjectItemType.ninesliceJson:\r\n    case ProjectItemType.globalVariablesJson:\r\n    case ProjectItemType.lang:\r\n    case ProjectItemType.languagesCatalogJson:\r\n    case ProjectItemType.loadingMessagesJson:\r\n    case ProjectItemType.splashesJson:\r\n    case ProjectItemType.emoticonsJson:\r\n    case ProjectItemType.fontMetadataJson:\r\n      return ProjectItemTypeGroup.uiUx;\r\n\r\n    // \u2550\u2550\u2550 Config & Dev \u2550\u2550\u2550\r\n    case ProjectItemType.tsconfigJson:\r\n    case ProjectItemType.packageJson:\r\n    case ProjectItemType.packageLockJson:\r\n    case ProjectItemType.vsCodeLaunchJson:\r\n    case ProjectItemType.vsCodeTasksJson:\r\n    case ProjectItemType.vsCodeSettingsJson:\r\n    case ProjectItemType.vsCodeExtensionsJson:\r\n    case ProjectItemType.justConfigTs:\r\n    case ProjectItemType.jsMap:\r\n    case ProjectItemType.esLintConfigMjs:\r\n    case ProjectItemType.env:\r\n    case ProjectItemType.prettierRcJson:\r\n    case ProjectItemType.jsconfigJson:\r\n    case ProjectItemType.behaviorPackManifestJson:\r\n    case ProjectItemType.resourcePackManifestJson:\r\n    case ProjectItemType.behaviorPackFolder:\r\n    case ProjectItemType.resourcePackFolder:\r\n    case ProjectItemType.cameraBehaviorJson:\r\n    case ProjectItemType.cameraResourceJson:\r\n    case ProjectItemType.aimAssistPresetJson:\r\n    case ProjectItemType.aimAssistCategoryJson:\r\n    case ProjectItemType.educationJson:\r\n    case ProjectItemType.fileListArrayJson:\r\n    case ProjectItemType.sdlLayout:\r\n    case ProjectItemType.lodJson:\r\n    case ProjectItemType.rendererJson:\r\n    case ProjectItemType.uniformsJson:\r\n    case ProjectItemType.materialsResourceJson:\r\n    case ProjectItemType.material:\r\n    case ProjectItemType.materialSetJson:\r\n    case ProjectItemType.materialVertex:\r\n    case ProjectItemType.materialFragment:\r\n    case ProjectItemType.materialGeometry:\r\n      return ProjectItemTypeGroup.configDev;\r\n\r\n    // \u2550\u2550\u2550 Packaging \u2550\u2550\u2550\r\n    case ProjectItemType.MCAddon:\r\n    case ProjectItemType.MCPack:\r\n    case ProjectItemType.zip:\r\n    case ProjectItemType.contentsJson:\r\n      return ProjectItemTypeGroup.packaging;\r\n\r\n    // \u2550\u2550\u2550 Skins & Personas \u2550\u2550\u2550\r\n    case ProjectItemType.skinCatalogJson:\r\n    case ProjectItemType.skinPackGeometryJson:\r\n    case ProjectItemType.skinPackTextureBackCompatJson:\r\n    case ProjectItemType.skinPackManifestJson:\r\n    case ProjectItemType.skinPackFolder:\r\n    case ProjectItemType.personaJson:\r\n    case ProjectItemType.personaManifestJson:\r\n    case ProjectItemType.personaPackFolder:\r\n      return ProjectItemTypeGroup.skinPersona;\r\n\r\n    // \u2550\u2550\u2550 Meta/Documentation \u2550\u2550\u2550\r\n    case ProjectItemType.dataForm:\r\n    case ProjectItemType.docInfoJson:\r\n    case ProjectItemType.scriptTypesJson:\r\n    case ProjectItemType.commandSetDefinitionJson:\r\n    case ProjectItemType.docfxJson:\r\n    case ProjectItemType.jsdocJson:\r\n    case ProjectItemType.markdownDocumentation:\r\n    case ProjectItemType.documentedTypeFolder:\r\n    case ProjectItemType.documentedCommandFolder:\r\n    case ProjectItemType.contentIndexJson:\r\n    case ProjectItemType.contentReportJson:\r\n    case ProjectItemType.mcToolsProjectPreferences:\r\n    case ProjectItemType.projectSummaryMetadata:\r\n    case ProjectItemType.engineOrderingJson:\r\n    case ProjectItemType.vanillaDataJson:\r\n    case ProjectItemType.tagsMetadata:\r\n      return ProjectItemTypeGroup.meta;\r\n\r\n    // \u2550\u2550\u2550 Unknown \u2550\u2550\u2550\r\n    case ProjectItemType.unknown:\r\n    case ProjectItemType.unknownJson:\r\n    default:\r\n      return ProjectItemTypeGroup.unknown;\r\n  }\r\n}\r\n\r\n/**\r\n * Gets the semantic color for a project item type.\r\n */\r\nexport function getColorForProjectItemType(itemType: ProjectItemType): IColor {\r\n  const group = getProjectItemTypeGroup(itemType);\r\n  return { ...ProjectItemTypeGroupColors[group] };\r\n}\r\n\r\n/**\r\n * Gets the hex color string for a project item type.\r\n */\r\nexport function getHexColorForProjectItemType(itemType: ProjectItemType): string {\r\n  const color = getColorForProjectItemType(itemType);\r\n  return `#${color.red.toString(16).padStart(2, \"0\")}${color.green.toString(16).padStart(2, \"0\")}${color.blue\r\n    .toString(16)\r\n    .padStart(2, \"0\")}`;\r\n}\r\n\r\n/**\r\n * Display order for groups in the UI item list.\r\n * Order: Design \u2192 Scripts \u2192 Entities \u2192 Items \u2192 Blocks \u2192 World \u2192 Models \u2192 Textures \u2192 VV \u2192 UI \u2192 Config \u2192 Packaging \u2192 Skins \u2192 Meta \u2192 Unknown\r\n */\r\nexport const ProjectItemTypeGroupSortOrder: ProjectItemTypeGroup[] = [\r\n  ProjectItemTypeGroup.design,\r\n  ProjectItemTypeGroup.scriptsLogic,\r\n  ProjectItemTypeGroup.entityTypes,\r\n  ProjectItemTypeGroup.itemTypes,\r\n  ProjectItemTypeGroup.blockTypes,\r\n  ProjectItemTypeGroup.worldWorldgen,\r\n  ProjectItemTypeGroup.modelsAnimations,\r\n  ProjectItemTypeGroup.texturesAudio,\r\n  ProjectItemTypeGroup.vibrantVisuals,\r\n  ProjectItemTypeGroup.uiUx,\r\n  ProjectItemTypeGroup.skinPersona,\r\n  ProjectItemTypeGroup.configDev,\r\n  ProjectItemTypeGroup.packaging,\r\n  ProjectItemTypeGroup.meta,\r\n  ProjectItemTypeGroup.unknown,\r\n];\r\n\r\n/**\r\n * Gets the sort order index for a project item type group.\r\n */\r\nexport function getGroupSortOrder(group: ProjectItemTypeGroup): number {\r\n  const index = ProjectItemTypeGroupSortOrder.indexOf(group);\r\n  return index >= 0 ? index : ProjectItemTypeGroupSortOrder.length;\r\n}\r\n\r\n/**\r\n * Gets the sort order for a project item type based on its group.\r\n */\r\nexport function getSortOrderForProjectItemType(itemType: ProjectItemType): number {\r\n  const group = getProjectItemTypeGroup(itemType);\r\n  const groupOrder = getGroupSortOrder(group);\r\n  // Multiply by 1000 to leave room for sub-ordering within groups\r\n  // Add the item type number for stable ordering within groups\r\n  return groupOrder * 1000 + itemType;\r\n}\r\n\r\n/**\r\n * Display name for each group.\r\n */\r\nexport const ProjectItemTypeGroupNames: Record<ProjectItemTypeGroup, string> = {\r\n  [ProjectItemTypeGroup.design]: \"Design\",\r\n  [ProjectItemTypeGroup.scriptsLogic]: \"Scripts & Logic\",\r\n  [ProjectItemTypeGroup.entityTypes]: \"Entity Types\",\r\n  [ProjectItemTypeGroup.itemTypes]: \"Item Types\",\r\n  [ProjectItemTypeGroup.blockTypes]: \"Block Types\",\r\n  [ProjectItemTypeGroup.worldWorldgen]: \"World & Worldgen\",\r\n  [ProjectItemTypeGroup.modelsAnimations]: \"Models & Animations\",\r\n  [ProjectItemTypeGroup.texturesAudio]: \"Textures & Audio\",\r\n  [ProjectItemTypeGroup.vibrantVisuals]: \"Vibrant Visuals\",\r\n  [ProjectItemTypeGroup.uiUx]: \"UI & Localization\",\r\n  [ProjectItemTypeGroup.configDev]: \"Config & Dev\",\r\n  [ProjectItemTypeGroup.packaging]: \"Packages\",\r\n  [ProjectItemTypeGroup.skinPersona]: \"Skins & Personas\",\r\n  [ProjectItemTypeGroup.meta]: \"Documentation\",\r\n  [ProjectItemTypeGroup.unknown]: \"Other\",\r\n};\r\n\r\n/**\r\n * SVG path data for each project item type group icon.\r\n * Icons are designed on a 16x16 grid with a blocky Minecraft aesthetic.\r\n */\r\nexport const ProjectItemTypeGroupIcons: Record<ProjectItemTypeGroup, string> = {\r\n  // Design - Paintbrush/palette\r\n  [ProjectItemTypeGroup.design]: `M3 12L5 10L11 4L13 6L7 12L5 14L3 12ZM12 3L13 2L14 3L13 4L12 3ZM4 11L5 12L4 13L3 12L4 11Z`,\r\n\r\n  // Scripts/Logic - Code brackets with lightning bolt\r\n  [ProjectItemTypeGroup.scriptsLogic]: `M2 3H5L4 8H2L2 3ZM11 3H14V8H12L11 3ZM7 2L9 7H7L9 14H7L5 9H7L5 2H7Z`,\r\n\r\n  // Entity Types - Mob face (creeper-inspired)\r\n  [ProjectItemTypeGroup.entityTypes]: `M3 2H13V14H3V2ZM5 5H7V7H5V5ZM9 5H11V7H9V5ZM6 9H10V10H9V12H7V10H6V9Z`,\r\n\r\n  // Item Types - Diamond/gem shape\r\n  [ProjectItemTypeGroup.itemTypes]: `M8 1L14 7L8 15L2 7L8 1ZM8 4L5 7L8 12L11 7L8 4Z`,\r\n\r\n  // Block Types - 3D cube\r\n  [ProjectItemTypeGroup.blockTypes]: `M8 2L14 5V11L8 14L2 11V5L8 2ZM8 4L4 6.5V10.5L8 12L12 10.5V6.5L8 4Z`,\r\n\r\n  // World/Worldgen - Globe with terrain\r\n  [ProjectItemTypeGroup.worldWorldgen]: `M8 1A7 7 0 1 0 8 15A7 7 0 1 0 8 1ZM8 3A5 5 0 1 1 8 13A5 5 0 1 1 8 3ZM4 8H6L7 6H9L10 8H12M5 10L8 11L11 10`,\r\n\r\n  // Models/Animations - Bone/skeleton arm\r\n  [ProjectItemTypeGroup.modelsAnimations]: `M2 4H4V6H6V4H10V6H12V4H14V8H12V10H14V14H10V12H6V14H2V10H4V8H2V4ZM6 8V10H10V8H6Z`,\r\n\r\n  // Textures/Audio - Image frame with music note\r\n  [ProjectItemTypeGroup.texturesAudio]: `M2 2H11V3H3V11H2V2ZM5 5H14V14H5V5ZM7 7V12H12V7H7ZM11 8V10C11 11 10 11 10 10V8H11Z`,\r\n\r\n  // Vibrant Visuals - Sun/light rays\r\n  [ProjectItemTypeGroup.vibrantVisuals]: `M8 4A4 4 0 1 0 8 12A4 4 0 1 0 8 4ZM8 1V2M8 14V15M1 8H2M14 8H15M3 3L4 4M12 12L13 13M13 3L12 4M3 13L4 12`,\r\n\r\n  // UI/UX - Window with grid\r\n  [ProjectItemTypeGroup.uiUx]: `M2 2H14V14H2V2ZM3 3V5H13V3H3ZM3 6V13H7V6H3ZM8 6V13H13V6H8ZM4 4H5V4.5H4V4ZM6 4H7V4.5H6V4Z`,\r\n\r\n  // Config/Dev - Gear/cog\r\n  [ProjectItemTypeGroup.configDev]: `M7 1H9V3L10 3.5L11.5 2L13 3.5L11.5 5L12 6H14V8H12L11.5 9L13 10.5L11.5 12L10 10.5L9 11V13H7V11L6 10.5L4.5 12L3 10.5L4.5 9L4 8H2V6H4L4.5 5L3 3.5L4.5 2L6 3.5L7 3V1ZM8 5A3 3 0 1 0 8 11A3 3 0 1 0 8 5Z`,\r\n\r\n  // Packaging - Box/package\r\n  [ProjectItemTypeGroup.packaging]: `M2 4L8 1L14 4V12L8 15L2 12V4ZM8 3L4 5V7L8 9L12 7V5L8 3ZM3 8V11L8 13V10L3 8ZM13 8L8 10V13L13 11V8Z`,\r\n\r\n  // Skins/Personas - Player head\r\n  [ProjectItemTypeGroup.skinPersona]: `M4 2H12V10H10V12H12V14H4V12H6V10H4V2ZM6 4V8H10V4H6ZM7 5H8V6H7V5ZM9 5H10V6H9V5Z`,\r\n\r\n  // Meta/Documentation - Book\r\n  [ProjectItemTypeGroup.meta]: `M3 2C3 2 4 1 8 1C12 1 13 2 13 2V13C13 13 12 14 8 14C4 14 3 13 3 13V2ZM5 4H11V5H5V4ZM5 6H11V7H5V6ZM5 8H9V9H5V8Z`,\r\n\r\n  // Unknown - Question mark\r\n  [ProjectItemTypeGroup.unknown]: `M6 4C6 2 10 2 10 4C10 6 8 6 8 8V9H7V8C7 5.5 9 5.5 9 4C9 3 7 3 7 4H6ZM7 11H9V13H7V11Z`,\r\n};\r\n\r\n/**\r\n * Gets the SVG icon path for a project item type group.\r\n */\r\nexport function getIconPathForGroup(group: ProjectItemTypeGroup): string {\r\n  return ProjectItemTypeGroupIcons[group] || ProjectItemTypeGroupIcons[ProjectItemTypeGroup.unknown];\r\n}\r\n\r\n/**\r\n * Gets the SVG icon path for a project item type.\r\n */\r\nexport function getIconPathForProjectItemType(itemType: ProjectItemType): string {\r\n  const group = getProjectItemTypeGroup(itemType);\r\n  return getIconPathForGroup(group);\r\n}\r\n\r\n/**\r\n * Individual item type icons - more specific icons for commonly used types.\r\n * Falls back to group icon if not defined.\r\n */\r\nexport const ProjectItemTypeSpecificIcons: Partial<Record<ProjectItemType, string>> = {\r\n  // TypeScript - TS letters\r\n  [ProjectItemType.ts]: `M2 4H14V12H2V4ZM4 6V10H5V7.5H6.5V10H7.5V6H4ZM8 7H10V7.5H9V8H10V9.5H8V9H9V8.5H8V7Z`,\r\n\r\n  // JavaScript - JS letters\r\n  [ProjectItemType.js]: `M2 4H14V12H2V4ZM4 6V9.5H5V10H6V9H5V6H4ZM7 6V10H10V8.5H8V8H10V6H7ZM8 7H9V7.5H8V7Z`,\r\n\r\n  // MCFunction - Command block\r\n  [ProjectItemType.MCFunction]: `M3 3H13V13H3V3ZM5 5V11H11V5H5ZM6 7H10V9H6V7Z`,\r\n\r\n  // Entity behavior - Mob head with gear\r\n  [ProjectItemType.entityTypeBehavior]: `M3 2H13V11H11V13H5V11H3V2ZM5 4H7V6H5V4ZM9 4H11V6H9V4ZM6 8H10V9H6V8ZM12 11A2 2 0 1 0 12 15A2 2 0 1 0 12 11Z`,\r\n\r\n  // Entity resource - Mob head with paint\r\n  [ProjectItemType.entityTypeResource]: `M3 2H13V11H11V13H5V11H3V2ZM5 4H7V6H5V4ZM9 4H11V6H9V4ZM6 8H10V9H6V8ZM1 12L3 10L4 11L3 13L1 12Z`,\r\n\r\n  // Item behavior - Sword\r\n  [ProjectItemType.itemTypeBehavior]: `M12 1L14 3L6 11L4 13L3 12L5 10L13 2L12 1ZM2 14L4 12L5 13L3 15L2 14Z`,\r\n\r\n  // Block behavior - Cube with gear\r\n  [ProjectItemType.blockTypeBehavior]: `M8 2L13 5V10L8 13L3 10V5L8 2ZM8 4L5 5.5V9L8 11L11 9V5.5L8 4ZM12 12A2 2 0 1 0 12 16A2 2 0 1 0 12 12Z`,\r\n\r\n  // Loot table - Chest\r\n  [ProjectItemType.lootTableBehavior]: `M2 5H14V13H2V5ZM3 6V8H13V6H3ZM3 9V12H13V9H3ZM7 10H9V11H7V10ZM1 4H15V5H1V4Z`,\r\n\r\n  // Recipe - Crafting grid\r\n  [ProjectItemType.recipeBehavior]: `M3 3H13V13H3V3ZM4 4V6H6V4H4ZM7 4V6H9V4H7ZM10 4V6H12V4H10ZM4 7V9H6V7H4ZM7 7V9H9V7H7ZM10 7V9H12V7H10ZM4 10V12H6V10H4ZM7 10V12H9V10H7ZM10 10V12H12V10H10Z`,\r\n\r\n  // Spawn rule - Egg\r\n  [ProjectItemType.spawnRuleBehavior]: `M8 2C5 2 4 5 4 8C4 12 6 14 8 14C10 14 12 12 12 8C12 5 11 2 8 2ZM8 4C9.5 4 10 6 10 8C10 10.5 9 12 8 12C7 12 6 10.5 6 8C6 6 6.5 4 8 4Z`,\r\n\r\n  // Model geometry - Wireframe cube\r\n  [ProjectItemType.modelGeometryJson]: `M8 1L14 4V11L8 14L2 11V4L8 1ZM8 3L4 5L8 7L12 5L8 3ZM3 6V10L7 12V8L3 6ZM13 6L9 8V12L13 10V6Z`,\r\n\r\n  // Texture - Image\r\n  [ProjectItemType.texture]: `M2 3H14V13H2V3ZM3 4V12H13V4H3ZM5 6A1 1 0 1 0 5 8A1 1 0 1 0 5 6ZM4 11L6 8L8 10L10 7L12 11H4Z`,\r\n\r\n  // Audio - Speaker/sound waves\r\n  [ProjectItemType.audio]: `M3 5H5L9 2V14L5 11H3V5ZM11 5V6C12 6.5 12 9.5 11 10V11C13 10 13 6 11 5ZM11 3V4C14 5 14 11 11 12V13C15 11.5 15 4.5 11 3Z`,\r\n\r\n  // Biome - Mountain/tree\r\n  [ProjectItemType.biomeBehavior]: `M8 2L13 10H10L12 14H4L6 10H3L8 2ZM8 5L6 8H7L5.5 12H10.5L9 8H10L8 5Z`,\r\n\r\n  // Particle - Sparkle\r\n  [ProjectItemType.particleJson]: `M8 1V4M8 12V15M1 8H4M12 8H15M3 3L5 5M11 11L13 13M13 3L11 5M3 13L5 11M8 6A2 2 0 1 0 8 10A2 2 0 1 0 8 6Z`,\r\n\r\n  // Animation - Film strip\r\n  [ProjectItemType.animationResourceJson]: `M2 2H4V14H2V2ZM12 2H14V14H12V2ZM5 3H11V6H5V3ZM5 7H11V10H5V7ZM5 11H11V14H5V11ZM3 3V4M3 6V7M3 9V10M3 12V13M13 3V4M13 6V7M13 9V10M13 12V13`,\r\n\r\n  // Lighting - Light bulb\r\n  [ProjectItemType.lightingJson]: `M8 1C5 1 4 4 4 6C4 8 5 9 6 10V12H10V10C11 9 12 8 12 6C12 4 11 1 8 1ZM6 13H10V14H6V13ZM7 14H9V15H7V14Z`,\r\n\r\n  // UI JSON - Window\r\n  [ProjectItemType.uiJson]: `M2 2H14V14H2V2ZM3 3V4H13V3H3ZM3 5V13H13V5H3ZM4 6H8V8H4V6ZM9 6H12V12H9V6ZM4 9H8V12H4V9Z`,\r\n\r\n  // World folder - Globe\r\n  [ProjectItemType.worldFolder]: `M8 1A7 7 0 1 0 8 15A7 7 0 1 0 8 1ZM8 3C9 3 10 4 10.5 6H5.5C6 4 7 3 8 3ZM4 8C4 7.3 4.1 6.7 4.3 6H6C5.9 6.6 5.8 7.3 5.8 8C5.8 8.7 5.9 9.4 6 10H4.3C4.1 9.3 4 8.7 4 8ZM8 13C7 13 6 12 5.5 10H10.5C10 12 9 13 8 13ZM10 10C10.1 9.4 10.2 8.7 10.2 8C10.2 7.3 10.1 6.6 10 6H11.7C11.9 6.7 12 7.3 12 8C12 8.7 11.9 9.3 11.7 10H10Z`,\r\n\r\n  // Package JSON - NPM box\r\n  [ProjectItemType.packageJson]: `M2 4L8 1L14 4V12L8 15L2 12V4ZM3 5V11L8 13.5L13 11V5L8 2.5L3 5ZM5 6H11V10H9V7H7V10H5V6Z`,\r\n};\r\n\r\n/**\r\n * Gets the specific SVG icon path for a project item type.\r\n * Falls back to the group icon if no specific icon is defined.\r\n */\r\nexport function getSpecificIconPathForProjectItemType(itemType: ProjectItemType): string {\r\n  return ProjectItemTypeSpecificIcons[itemType] || getIconPathForProjectItemType(itemType);\r\n}\r\n", "import Log from \"../../../core/Log\";\r\nimport { ProjectItemType } from \"../../IProjectItemData\";\r\nimport { IProjectItemDefaults } from \"./IProjectItemDefaults\";\r\n\r\nconst ProjectItemValues = new Map<ProjectItemType, IProjectItemDefaults>([\r\n  [ProjectItemType.MCFunction, { folderRoots: [\"functions\"] }],\r\n  [ProjectItemType.featureRuleBehavior, { folderRoots: [\"feature_rules\"] }],\r\n  [ProjectItemType.actionSet, { folderRoots: [\"action_sets\"] }],\r\n  [ProjectItemType.designTexture, { folderRoots: [\"design_textures\"] }],\r\n  [ProjectItemType.featureBehavior, { folderRoots: [\"features\"] }],\r\n  [ProjectItemType.js, { folderRoots: [\"scripts\"] }],\r\n  [ProjectItemType.ts, { folderRoots: [\"scripts\"] }],\r\n  [ProjectItemType.image, { folderRoots: [\"subpacks\"] }],\r\n  [ProjectItemType.craftingItemCatalog, { folderRoots: [\"item_catalog\"] }],\r\n  [ProjectItemType.lightingJson, { folderRoots: [\"lighting\"] }],\r\n  [ProjectItemType.tickJson, { folderRoots: [\"functions\"] }],\r\n  [ProjectItemType.uiTexture, { folderRoots: [\"textures\", \"ui\"] }],\r\n  [ProjectItemType.jigsawProcessorList, { folderRoots: [\"worldgen\", \"processors\"] }],\r\n  [ProjectItemType.jigsawStructure, { folderRoots: [\"worldgen\", \"jigsaw_structures\"] }],\r\n  [ProjectItemType.jigsawTemplatePool, { folderRoots: [\"worldgen\", \"template_pools\"] }],\r\n  [ProjectItemType.jigsawStructureSet, { folderRoots: [\"worldgen\", \"structure_sets\"] }],\r\n  [ProjectItemType.biomeResource, { folderRoots: [\"biomes\"] }],\r\n  [ProjectItemType.biomeBehavior, { folderRoots: [\"biomes\"] }],\r\n  [ProjectItemType.texture, { folderRoots: [\"textures\"] }],\r\n  [ProjectItemType.terrainTextureCatalogResourceJson, { folderRoots: [\"textures\"] }],\r\n  [ProjectItemType.itemTextureJson, { folderRoots: [\"textures\"] }],\r\n  [ProjectItemType.flipbookTexturesJson, { folderRoots: [\"textures\"] }],\r\n  [\r\n    ProjectItemType.packIconImage,\r\n    {\r\n      folderRoots: [\r\n        \"resource_packs\",\r\n        \"rps\",\r\n        \"development_resource_packs\",\r\n        \"behavior_packs\",\r\n        \"bps\",\r\n        \"development_behavior_packs\",\r\n      ],\r\n    },\r\n  ],\r\n  [ProjectItemType.modelGeometryJson, { folderRoots: [\"models\"] }],\r\n  [ProjectItemType.soundCatalog, { folderRoots: [\"resource_packs\", \"rps\", \"development_resource_packs\"] }],\r\n  [ProjectItemType.soundDefinitionCatalog, { folderRoots: [\"sounds\"] }],\r\n  [ProjectItemType.entityTypeResource, { folderRoots: [\"entity\"] }],\r\n  [ProjectItemType.animationControllerResourceJson, { folderRoots: [\"animation_controllers\"] }],\r\n  [ProjectItemType.animationControllerBehaviorJson, { folderRoots: [\"animation_controllers\"] }],\r\n  [ProjectItemType.animationResourceJson, { folderRoots: [\"animations\"] }],\r\n  [ProjectItemType.animationBehaviorJson, { folderRoots: [\"animations\"] }],\r\n  [ProjectItemType.renderControllerJson, { folderRoots: [\"render_controllers\"] }],\r\n  [ProjectItemType.attachableResourceJson, { folderRoots: [\"attachables\"] }],\r\n  [ProjectItemType.entityTypeBehavior, { folderRoots: [\"entities\"] }],\r\n  [ProjectItemType.itemTypeBehavior, { folderRoots: [\"items\"] }],\r\n  [ProjectItemType.itemTypeLegacyResource, { folderRoots: [\"items\"] }],\r\n  [ProjectItemType.blockTypeBehavior, { folderRoots: [\"blocks\"] }],\r\n  [ProjectItemType.documentedTypeFolder, { folderRoots: [\"script_modules\"] }],\r\n  [ProjectItemType.commandSetDefinitionJson, { folderRoots: [\"command_modules\"] }],\r\n  [ProjectItemType.lootTableBehavior, { folderRoots: [\"loot_tables\"] }],\r\n  [ProjectItemType.recipeBehavior, { folderRoots: [\"recipes\"] }],\r\n  [ProjectItemType.spawnRuleBehavior, { folderRoots: [\"spawn_rules\"] }],\r\n  [ProjectItemType.particleJson, { folderRoots: [\"particles\"] }],\r\n  [ProjectItemType.structure, { folderRoots: [\"structures\"] }],\r\n  [ProjectItemType.worldFolder, { folderRoots: [\"worlds\"] }],\r\n  [ProjectItemType.MCWorld, { folderRoots: [\"worlds\"] }],\r\n  [ProjectItemType.colorGradingJson, { folderRoots: [\"color_grading\"] }],\r\n  [ProjectItemType.atmosphericsJson, { folderRoots: [\"atmospherics\"] }],\r\n  [ProjectItemType.pbrJson, { folderRoots: [\"pbr\"] }],\r\n  [ProjectItemType.pointLightsJson, { folderRoots: [\"point_lights\"] }],\r\n  [ProjectItemType.shadowsJson, { folderRoots: [\"shadows\"] }],\r\n  [ProjectItemType.waterJson, { folderRoots: [\"water\"] }],\r\n  [ProjectItemType.aimAssistPresetJson, { folderRoots: [\"cameras\"] }],\r\n  [ProjectItemType.dimensionJson, { folderRoots: [\"dimensions\"] }],\r\n  [ProjectItemType.fogResourceJson, { folderRoots: [\"fogs\"] }],\r\n  [ProjectItemType.dataForm, { folderRoots: [\"forms\"] }],\r\n  [ProjectItemType.scriptTypesJson, { folderRoots: [\"checkpoint_input\", \"script_modules\"] }],\r\n  [ProjectItemType.engineOrderingJson, { folderRoots: [\"checkpoint_input\", \"engine_modules\"] }],\r\n  [ProjectItemType.vanillaDataJson, { folderRoots: [\"checkpoint_input\", \"vanilladata_modules\"] }],\r\n  [ProjectItemType.marketingAssetImage, { folderRoots: [\"marketing art\"] }],\r\n  [ProjectItemType.storeAssetImage, { folderRoots: [\"store art\"] }],\r\n  [ProjectItemType.audio, { folderRoots: [\"sounds\"] }],\r\n  [ProjectItemType.voxelShapeBehavior, { folderRoots: [\"voxel_shapes\"] }],\r\n  [ProjectItemType.materialSetJson, { folderRoots: [\"materials\"] }],\r\n  [ProjectItemType.materialsResourceJson, { folderRoots: [\"materials\"] }],\r\n  [ProjectItemType.material, { folderRoots: [\"materials\"] }],\r\n  [ProjectItemType.tradingBehaviorJson, { folderRoots: [\"trading\"] }],\r\n  [ProjectItemType.blockCulling, { folderRoots: [\"block_culling\"] }],\r\n]);\r\n\r\nexport const getProjectItemDefaults = (itemType: ProjectItemType): IProjectItemDefaults => {\r\n  const defaults = ProjectItemValues.get(itemType);\r\n  if (!defaults) {\r\n    Log.verbose(\"No defaults found for item type: \" + itemType);\r\n    return { folderRoots: [] };\r\n  }\r\n\r\n  return defaults;\r\n};\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IColor from \"../core/IColor\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { PackType } from \"../minecraft/Pack\";\r\nimport { VibrantVisualsFileExtensionVariants } from \"../minecraft/TextureDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ProjectItemCategory, ProjectItemType } from \"./IProjectItemData\";\r\nimport IProjectItemRelationship from \"./IProjectItemRelationship\";\r\nimport Project from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport ProjectUtilities from \"./ProjectUtilities\";\r\nimport { getColorForProjectItemType, getProjectItemTypeGroup, ProjectItemTypeGroup } from \"./ProjectItemTypeInfo\";\r\nimport { getProjectItemDefaults } from \"./project/projectItems/ProjectItemValues\";\r\n\r\n// an attempt to group related things together via sort order. Used in the UI item list.\r\n// Order: Design \u2192 Scripts/Logic \u2192 Entity Types \u2192 Item Types \u2192 Block Types \u2192 World/Worldgen \u2192\r\n//        Models/Animations \u2192 Textures/Audio \u2192 Vibrant Visuals \u2192 UI/UX \u2192 Skins \u2192 Config/Dev \u2192 Packaging \u2192 Meta\r\n// This order keeps logical groupings together to make projects easier to navigate.\r\nexport const ProjectItemSortOrder = [\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // DESIGN - Design pack content for planning/iteration\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.designTexture,\r\n  ProjectItemType.designPackManifestJson,\r\n  ProjectItemType.designPackFolder,\r\n  ProjectItemType.actionSet,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // SCRIPTS & LOGIC - Code and command logic (Emerald Green)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.ts,\r\n  ProjectItemType.js,\r\n  ProjectItemType.MCFunction,\r\n  ProjectItemType.tickJson,\r\n  ProjectItemType.functionEventJson,\r\n  ProjectItemType.testJs,\r\n  ProjectItemType.entityTypeBaseJs,\r\n  ProjectItemType.entityTypeBaseTs,\r\n  ProjectItemType.blockTypeBaseJs,\r\n  ProjectItemType.blockTypeBaseTs,\r\n  ProjectItemType.catalogIndexJs,\r\n  ProjectItemType.buildProcessedJs,\r\n  ProjectItemType.animationBehaviorJson, // Behavior-side animations are logic\r\n  ProjectItemType.animationControllerBehaviorJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // ENTITY TYPES - Mobs, creatures, NPCs (Enderman Purple)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.entityTypeBehavior,\r\n  ProjectItemType.entityTypeResource,\r\n  ProjectItemType.spawnRuleBehavior,\r\n  ProjectItemType.spawnGroupJson,\r\n  ProjectItemType.dialogueBehaviorJson,\r\n  ProjectItemType.behaviorTreeJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // ITEM TYPES - Items, loot, recipes, trading (Gold/Amber)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.itemTypeBehavior,\r\n  ProjectItemType.itemTypeLegacyResource,\r\n  ProjectItemType.attachableResourceJson,\r\n  ProjectItemType.itemTextureJson,\r\n  ProjectItemType.lootTableBehavior,\r\n  ProjectItemType.recipeBehavior,\r\n  ProjectItemType.tradingBehaviorJson,\r\n  ProjectItemType.craftingItemCatalog,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // BLOCK TYPES - Blocks and terrain (Stone Gray)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.blockTypeBehavior,\r\n  ProjectItemType.blocksCatalogResourceJson,\r\n  ProjectItemType.blockTypeResourceJsonDoNotUse,\r\n  ProjectItemType.blockCulling,\r\n  ProjectItemType.blockMaterialsBehaviorJson,\r\n  ProjectItemType.terrainTextureCatalogResourceJson,\r\n  ProjectItemType.voxelShapeBehavior,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // WORLD & WORLDGEN - Worlds, biomes, features, dimensions (Grass Lime)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.worldFolder,\r\n  ProjectItemType.worldTemplateManifestJson,\r\n  ProjectItemType.MCWorld,\r\n  ProjectItemType.MCProject,\r\n  ProjectItemType.MCTemplate,\r\n  ProjectItemType.worldTest,\r\n  ProjectItemType.levelDat,\r\n  ProjectItemType.levelDatOld,\r\n  ProjectItemType.behaviorPackListJson,\r\n  ProjectItemType.resourcePackListJson,\r\n  ProjectItemType.behaviorPackHistoryListJson,\r\n  ProjectItemType.resourcePackHistoryListJson,\r\n  ProjectItemType.levelDbLdb,\r\n  ProjectItemType.levelDbLog,\r\n  ProjectItemType.levelDbCurrent,\r\n  ProjectItemType.levelDbManifest,\r\n  ProjectItemType.structure,\r\n  ProjectItemType.volumeBehaviorJson,\r\n  // Biomes\r\n  ProjectItemType.biomeBehavior,\r\n  ProjectItemType.biomeResource,\r\n  ProjectItemType.biomesClientCatalogResource,\r\n  // Features and jigsaw structures\r\n  ProjectItemType.featureRuleBehavior,\r\n  ProjectItemType.featureBehavior,\r\n  ProjectItemType.jigsawStructureSet,\r\n  ProjectItemType.jigsawStructure,\r\n  ProjectItemType.jigsawTemplatePool,\r\n  ProjectItemType.jigsawProcessorList,\r\n  ProjectItemType.dimensionJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // MODELS & ANIMATIONS - Geometry, animations, render controllers (Diamond Cyan)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.modelGeometryJson,\r\n  ProjectItemType.animationResourceJson,\r\n  ProjectItemType.animationControllerResourceJson,\r\n  ProjectItemType.renderControllerJson,\r\n  ProjectItemType.particleJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // TEXTURES & AUDIO - Visual and audio assets (Pink Dye)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.texture,\r\n  ProjectItemType.image,\r\n  ProjectItemType.packIconImage,\r\n  ProjectItemType.marketingAssetImage,\r\n  ProjectItemType.storeAssetImage,\r\n  ProjectItemType.textureListJson,\r\n  ProjectItemType.flipbookTexturesJson,\r\n  ProjectItemType.fogResourceJson,\r\n  // Audio\r\n  ProjectItemType.soundCatalog,\r\n  ProjectItemType.soundDefinitionCatalog,\r\n  ProjectItemType.musicDefinitionJson,\r\n  ProjectItemType.audio,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // VIBRANT VISUALS - Deferred rendering, PBR, lighting (Amethyst)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.lightingJson,\r\n  ProjectItemType.colorGradingJson,\r\n  ProjectItemType.atmosphericsJson,\r\n  ProjectItemType.pbrJson,\r\n  ProjectItemType.pointLightsJson,\r\n  ProjectItemType.waterJson,\r\n  ProjectItemType.shadowsJson,\r\n  ProjectItemType.textureSetJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // UI & LOCALIZATION - JSON UI, languages, dialogs (Pumpkin Orange)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.uiJson,\r\n  ProjectItemType.uiTexture,\r\n  ProjectItemType.ninesliceJson,\r\n  ProjectItemType.globalVariablesJson,\r\n  ProjectItemType.languagesCatalogJson,\r\n  ProjectItemType.lang,\r\n  ProjectItemType.loadingMessagesJson,\r\n  ProjectItemType.splashesJson,\r\n  ProjectItemType.emoticonsJson,\r\n  ProjectItemType.fontMetadataJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // SKINS & PERSONAS - Player customization (Leather Brown)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.skinCatalogJson,\r\n  ProjectItemType.skinPackGeometryJson,\r\n  ProjectItemType.skinPackTextureBackCompatJson,\r\n  ProjectItemType.skinPackManifestJson,\r\n  ProjectItemType.skinPackFolder,\r\n  ProjectItemType.personaJson,\r\n  ProjectItemType.personaManifestJson,\r\n  ProjectItemType.personaPackFolder,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // CONFIG & DEV - Build tools, manifests, VS Code (Iron Slate)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.behaviorPackManifestJson,\r\n  ProjectItemType.resourcePackManifestJson,\r\n  ProjectItemType.behaviorPackFolder,\r\n  ProjectItemType.resourcePackFolder,\r\n  ProjectItemType.tsconfigJson,\r\n  ProjectItemType.packageJson,\r\n  ProjectItemType.packageLockJson,\r\n  ProjectItemType.vsCodeLaunchJson,\r\n  ProjectItemType.vsCodeTasksJson,\r\n  ProjectItemType.vsCodeSettingsJson,\r\n  ProjectItemType.vsCodeExtensionsJson,\r\n  ProjectItemType.justConfigTs,\r\n  ProjectItemType.jsMap,\r\n  ProjectItemType.esLintConfigMjs,\r\n  ProjectItemType.env,\r\n  ProjectItemType.prettierRcJson,\r\n  ProjectItemType.jsconfigJson,\r\n  ProjectItemType.cameraBehaviorJson,\r\n  ProjectItemType.cameraResourceJson,\r\n  ProjectItemType.aimAssistPresetJson,\r\n  ProjectItemType.aimAssistCategoryJson,\r\n  ProjectItemType.sdlLayout,\r\n  ProjectItemType.lodJson,\r\n  ProjectItemType.rendererJson,\r\n  ProjectItemType.uniformsJson,\r\n  ProjectItemType.materialsResourceJson,\r\n  ProjectItemType.material,\r\n  ProjectItemType.materialSetJson,\r\n  ProjectItemType.materialVertex,\r\n  ProjectItemType.materialFragment,\r\n  ProjectItemType.materialGeometry,\r\n  ProjectItemType.fileListArrayJson,\r\n  ProjectItemType.educationJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // PACKAGING - Archives and packages (Redstone Red)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.MCAddon,\r\n  ProjectItemType.MCPack,\r\n  ProjectItemType.zip,\r\n  ProjectItemType.contentsJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // META & DOCUMENTATION - Docs, forms, metadata (Book Brown)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.dataForm,\r\n  ProjectItemType.docInfoJson,\r\n  ProjectItemType.scriptTypesJson,\r\n  ProjectItemType.commandSetDefinitionJson,\r\n  ProjectItemType.docfxJson,\r\n  ProjectItemType.jsdocJson,\r\n  ProjectItemType.markdownDocumentation,\r\n  ProjectItemType.documentedTypeFolder,\r\n  ProjectItemType.documentedCommandFolder,\r\n  ProjectItemType.contentIndexJson,\r\n  ProjectItemType.contentReportJson,\r\n  ProjectItemType.mcToolsProjectPreferences,\r\n  ProjectItemType.projectSummaryMetadata,\r\n  ProjectItemType.engineOrderingJson,\r\n  ProjectItemType.vanillaDataJson,\r\n  ProjectItemType.tagsMetadata,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // UNKNOWN - Fallback for unrecognized types\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.unknownJson,\r\n  ProjectItemType.unknown,\r\n];\r\n\r\nexport const FormMappings: {\r\n  [typeIdAsString: string]: {\r\n    formCategory: string;\r\n    formName: string;\r\n    select?: string;\r\n  };\r\n} = {\r\n  /*  [\"\" + ProjectItemType.atmosphericsJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"atmosphericscattering_atmosphericscatteringconfigsettings\",\r\n    select: \"minecraft:atmosphere_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.colorGradingJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"colorgraderconfig_colorgradingparameterssrc\",\r\n    select: \"minecraft:color_grading_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.lightingJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"lightinggroup_lightingimpl_1_21_70\",\r\n    select: \"minecraft:lighting_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.pbrJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"pbrfallbackconfig_pbrfallbackconfigsettings\",\r\n    select: \"minecraft:pbr_fallback_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.waterJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"waterconfig_waterconfigsettingsv1\",\r\n    select: \"minecraft:water_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.shadowsJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"shadowstylizationconfig_shadowstylizationconfigsettings\",\r\n    select: \"minecraft:shadow_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.pointLightsJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"pointlightconfig_pointlightconfigsettings\",\r\n    select: \"minecraft:point_light_settings\",\r\n  },*/\r\n};\r\n\r\nexport default class ProjectItemUtilities {\r\n  static inferTypeFromContent(\r\n    content: Uint8Array | string,\r\n    fileName: string\r\n  ): { itemType: ProjectItemType; packType?: PackType; path?: string } {\r\n    const type = StorageUtilities.getTypeFromName(fileName);\r\n\r\n    if (typeof content === \"string\") {\r\n      switch (type) {\r\n        case \"json\":\r\n          return ProjectItemUtilities.inferTypeFromJsonContent(content, fileName);\r\n      }\r\n    } else {\r\n      switch (type) {\r\n        case \"png\":\r\n          return { itemType: ProjectItemType.texture, packType: PackType.resource, path: \"/textures/ \" };\r\n      }\r\n    }\r\n\r\n    return { itemType: ProjectItemType.unknown, packType: PackType.behavior, path: \"/\" };\r\n  }\r\n\r\n  static getFormPathForType(itemType: ProjectItemType) {\r\n    switch (itemType) {\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return \"entity/entity_behavior_document\";\r\n      case ProjectItemType.biomeBehavior:\r\n        return \"biome/biome_json_file\";\r\n      case ProjectItemType.blockCulling:\r\n        return \"block_culling/blockculling\";\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n        // Note: This is the legacy biomes_client.json format, NOT the newer client_biome format\r\n        // which has format_version and minecraft:client_biome structure\r\n        return \"biomes_client/biomes_client\";\r\n      case ProjectItemType.atmosphericsJson:\r\n        return \"client_deferred_rendering/atmosphericscattering_atmosphericscatteringconfigsettings\";\r\n      case ProjectItemType.colorGradingJson:\r\n        return \"client_deferred_rendering/colorgraderconfig_colorgradingparameterssrc\";\r\n      case ProjectItemType.lightingJson:\r\n        return \"client_deferred_rendering/lightinggroup_lightingimpl_1_21_70\";\r\n      case ProjectItemType.pbrJson:\r\n        return \"client_deferred_rendering/pbrfallbackconfig_pbrfallbackconfigsettings\";\r\n      case ProjectItemType.pointLightsJson:\r\n        return \"client_deferred_rendering/pointlightconfig_pointlightconfigsettings\";\r\n      case ProjectItemType.shadowsJson:\r\n        return \"client_deferred_rendering/shadowstylizationconfig_shadowstylizationconfigsettings\";\r\n      case ProjectItemType.waterJson:\r\n        return \"client_deferred_rendering/waterconfig_waterconfigsettingsv1\";\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n        return \"client_item/resource\";\r\n      case ProjectItemType.featureRuleBehavior:\r\n        return \"feature/feature_rule_definition\";\r\n      case ProjectItemType.featureBehavior:\r\n        return \"features/features\";\r\n      case ProjectItemType.fogResourceJson:\r\n        return \"fogs/fogs\";\r\n      case ProjectItemType.jigsawStructure:\r\n        return \"jigsaw/minecraft_jigsaw_structure_metadata\";\r\n      case ProjectItemType.spawnRuleBehavior:\r\n        return \"spawn/spawn_rules_document\";\r\n      case ProjectItemType.modelGeometryJson:\r\n        return \"visual/geometry.v1.21.0\";\r\n      case ProjectItemType.textureSetJson:\r\n        return \"visual/texture_set.v1.21.30\";\r\n      case ProjectItemType.voxelShapeBehavior:\r\n        return \"voxel_shapes/voxel_shape_document\";\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns the path to a community/Blockception JSON schema for the given item type.\r\n   * These schemas are located in public/res/latest/schemas/ and are loaded via Database.getCommunitySchema().\r\n   */\r\n  static getCommunitySchemaPathForType(itemType: ProjectItemType) {\r\n    switch (itemType) {\r\n      case ProjectItemType.behaviorPackManifestJson:\r\n        return \"general/manifest.json\";\r\n      case ProjectItemType.behaviorPackListJson:\r\n        return \"general/world_x_packs.json\";\r\n      case ProjectItemType.resourcePackListJson:\r\n        return \"general/world_x_packs.json\";\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n        return \"behavior/animation_controllers/animation_controller.json\";\r\n      case ProjectItemType.animationBehaviorJson:\r\n        return \"behavior/animations/animations.json\";\r\n      case ProjectItemType.blockTypeBehavior:\r\n        return \"behavior/blocks/blocks.json\";\r\n      case ProjectItemType.itemTypeBehavior:\r\n        return \"behavior/items/items.json\";\r\n      case ProjectItemType.lootTableBehavior:\r\n        return \"behavior/loot_tables/loot_tables.json\";\r\n      case ProjectItemType.dialogueBehaviorJson:\r\n        return \"behavior/dialogue/dialogue.json\";\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return \"behavior/entities/entities.json\";\r\n      case ProjectItemType.atmosphericsJson:\r\n        return \"resource/atmospherics/atmospherics.json\";\r\n      case ProjectItemType.blocksCatalogResourceJson:\r\n        return \"resource/blocks.json\";\r\n      case ProjectItemType.soundCatalog:\r\n        return \"resource/sounds.json\";\r\n      case ProjectItemType.animationResourceJson:\r\n        return \"resource/animations/actor_animation.json\";\r\n      case ProjectItemType.animationControllerResourceJson:\r\n        return \"resource/animation_controllers/animation_controller.json\";\r\n      case ProjectItemType.entityTypeResource:\r\n        return \"resource/entity/entity.json\";\r\n      case ProjectItemType.fogResourceJson:\r\n        return \"resource/fog/fog.json\";\r\n      case ProjectItemType.modelGeometryJson:\r\n        return \"resource/models/entity/model_entity.json\";\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n        return \"resource/biomes_client.json\";\r\n      case ProjectItemType.particleJson:\r\n        return \"resource/particles/particles.json\";\r\n      case ProjectItemType.renderControllerJson:\r\n        return \"resource/render_controllers/render_controllers.json\";\r\n      case ProjectItemType.blockCulling:\r\n        return \"resource/block_culling/block_culling.json\";\r\n      case ProjectItemType.craftingItemCatalog:\r\n        return \"behavior/item_catalog/crafting_item_catalog.json\";\r\n      //     case ProjectItemType.uiTextureJson:\r\n      //        return \"resource/textures/ui_texture_definition.json\";\r\n      case ProjectItemType.languagesCatalogJson:\r\n        return \"language/languages.json\";\r\n      case ProjectItemType.featureBehavior:\r\n        return \"behavior/features/features.json\";\r\n      case ProjectItemType.featureRuleBehavior:\r\n        return \"behavior/feature_rules/feature_rules.json\";\r\n      case ProjectItemType.functionEventJson:\r\n        return \"behavior/functions/tick.json\";\r\n      case ProjectItemType.recipeBehavior:\r\n        return \"behavior/recipes/recipes.json\";\r\n      case ProjectItemType.spawnRuleBehavior:\r\n        return \"behavior/spawn_rules/spawn_rules.json\";\r\n      case ProjectItemType.tradingBehaviorJson:\r\n        return \"behavior/trading/trading.json\";\r\n      case ProjectItemType.attachableResourceJson:\r\n        return \"resource/attachables/attachables.json\";\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n        return \"resource/items/items.json\";\r\n      case ProjectItemType.materialsResourceJson:\r\n        return \"resource/materials/materials.json\";\r\n      case ProjectItemType.musicDefinitionJson:\r\n        return \"resource/sounds/music_definitions.json\";\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n        return \"resource/sounds/sound_definitions.json\";\r\n      case ProjectItemType.blockTypeResourceJsonDoNotUse:\r\n        return \"resource/blocks.json\";\r\n      case ProjectItemType.uiJson:\r\n        return \"resource/ui/ui.json\";\r\n      case ProjectItemType.tickJson:\r\n        return \"behavior/functions/tick.json\";\r\n      case ProjectItemType.flipbookTexturesJson:\r\n        return \"resource/textures/flipbook_textures.json\";\r\n      case ProjectItemType.itemTextureJson:\r\n        return \"resource/textures/item_texture.json\";\r\n      case ProjectItemType.terrainTextureCatalogResourceJson:\r\n        return \"resource/textures/terrain_texture.json\";\r\n      case ProjectItemType.globalVariablesJson:\r\n        return \"resource/ui/_global_variables.json\";\r\n\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns the path to an official JSON schema for the given item type.\r\n   * These schemas are located in public/schemas/ and are loaded via Database.getOfficialSchema().\r\n   * The official schemas have different naming conventions than community schemas.\r\n   */\r\n  static getOfficialSchemaPathForType(itemType: ProjectItemType): string | undefined {\r\n    switch (itemType) {\r\n      // Behavior pack types\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return \"bp/entities/index.schema.json\";\r\n      case ProjectItemType.blockTypeBehavior:\r\n        return \"bp/blocks/index.schema.json\";\r\n      case ProjectItemType.itemTypeBehavior:\r\n        return \"bp/items/index.schema.json\";\r\n      case ProjectItemType.recipeBehavior:\r\n        return \"bp/recipes/index.schema.json\";\r\n      case ProjectItemType.lootTableBehavior:\r\n        return \"bp/loot_tables/index.schema.json\";\r\n      case ProjectItemType.spawnRuleBehavior:\r\n        return \"bp/spawn_rules/index.schema.json\";\r\n      case ProjectItemType.dialogueBehaviorJson:\r\n        return \"bp/dialogue/index.schema.json\";\r\n      case ProjectItemType.featureBehavior:\r\n        return \"bp/features/index.schema.json\";\r\n      case ProjectItemType.featureRuleBehavior:\r\n        return \"bp/feature_rules/index.schema.json\";\r\n      case ProjectItemType.tradingBehaviorJson:\r\n        return \"bp/trading/index.schema.json\";\r\n      case ProjectItemType.biomeBehavior:\r\n        return \"bp/biomes/index.schema.json\";\r\n\r\n      // Animation types\r\n      case ProjectItemType.animationBehaviorJson:\r\n        return \"bp/animations/index.schema.json\";\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n        return \"bp/animation_controllers/index.schema.json\";\r\n      case ProjectItemType.animationResourceJson:\r\n        return \"bp/animations/index.schema.json\";\r\n      case ProjectItemType.animationControllerResourceJson:\r\n        return \"bp/animation_controllers/index.schema.json\";\r\n\r\n      // Resource pack types\r\n      case ProjectItemType.attachableResourceJson:\r\n        return \"rp/attachables/index.schema.json\";\r\n      case ProjectItemType.fogResourceJson:\r\n        return \"rp/fogs/index.schema.json\";\r\n      case ProjectItemType.particleJson:\r\n        return \"rp/particles/index.schema.json\";\r\n      case ProjectItemType.renderControllerJson:\r\n        return \"rp/render_controllers/index.schema.json\";\r\n      case ProjectItemType.blocksCatalogResourceJson:\r\n        return \"rp/textures/blocks_resource.schema.json\";\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n        return \"rp/sounds/index.schema.json\";\r\n      case ProjectItemType.terrainTextureCatalogResourceJson:\r\n        return \"rp/textures/terrain_texture.schema.json\";\r\n      case ProjectItemType.itemTextureJson:\r\n        return \"rp/textures/item_texture.schema.json\";\r\n      case ProjectItemType.flipbookTexturesJson:\r\n        return \"rp/textures/flipbook_textures.schema.json\";\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n        return \"rp/biomes_client/index.schema.json\";\r\n      case ProjectItemType.entityTypeResource:\r\n        return \"rp/entity/index.schema.json\";\r\n      case ProjectItemType.modelGeometryJson:\r\n        return \"rp/models/index.schema.json\";\r\n      case ProjectItemType.textureSetJson:\r\n        return \"rp/textures/texture_set.schema.json\";\r\n\r\n      // UI types\r\n      case ProjectItemType.uiJson:\r\n        return \"rp/ui/index.schema.json\";\r\n      case ProjectItemType.globalVariablesJson:\r\n        return \"rp/ui/global_variables.schema.json\";\r\n\r\n      // Manifest types\r\n      case ProjectItemType.behaviorPackManifestJson:\r\n        return \"bp/manifest/index.schema.json\";\r\n      case ProjectItemType.resourcePackManifestJson:\r\n        return \"rp/manifest/index.schema.json\";\r\n\r\n      // Block culling\r\n      case ProjectItemType.blockCulling:\r\n        return \"rp/block_culling/index.schema.json\";\r\n\r\n      // Resource pack catalog types\r\n      case ProjectItemType.languagesCatalogJson:\r\n        return \"rp/texts/languages.schema.json\";\r\n      case ProjectItemType.musicDefinitionJson:\r\n        return \"rp/sounds/music_definitions.schema.json\";\r\n\r\n      // Behavior pack types\r\n      case ProjectItemType.tickJson:\r\n        return \"bp/functions/tick.schema.json\";\r\n\r\n      // Voxel shapes\r\n      case ProjectItemType.voxelShapeBehavior:\r\n        return \"bp/voxel_shapes/index.schema.json\";\r\n\r\n      // World types\r\n      case ProjectItemType.behaviorPackListJson:\r\n      case ProjectItemType.resourcePackListJson:\r\n        return \"world/world_packs.schema.json\";\r\n\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  static inferTypeFromJsonContent(\r\n    jsonContent: string,\r\n    fileName: string\r\n  ): { itemType: ProjectItemType; packType?: PackType; path?: string } {\r\n    const fileBaseName = StorageUtilities.getBaseFromName(fileName);\r\n\r\n    if (fileBaseName) {\r\n      if (fileBaseName.endsWith(\".mci\")) {\r\n        return { itemType: ProjectItemType.contentIndexJson };\r\n      } else if (fileBaseName.endsWith(\".mcr\")) {\r\n        return { itemType: ProjectItemType.contentReportJson };\r\n      }\r\n    }\r\n\r\n    const firstHundred = jsonContent.substring(0, 100);\r\n\r\n    if (\r\n      firstHundred.indexOf('\"minecraft:recipe_shaped\"') >= 0 ||\r\n      firstHundred.indexOf('\"minecraft:recipe_shapeless\"') >= 0\r\n    ) {\r\n      return { itemType: ProjectItemType.recipeBehavior };\r\n    } else if (firstHundred.indexOf('\"minecraft:entity\"') >= 0) {\r\n      return { itemType: ProjectItemType.entityTypeBehavior };\r\n    } else if (firstHundred.indexOf('\"minecraft:item\"') >= 0) {\r\n      return { itemType: ProjectItemType.itemTypeBehavior };\r\n    } else if (firstHundred.indexOf('\"pools\"') >= 0) {\r\n      return { itemType: ProjectItemType.itemTypeBehavior };\r\n    } else if (firstHundred.indexOf('\"minecraft:spawn_rules\"') >= 0) {\r\n      return { itemType: ProjectItemType.spawnRuleBehavior };\r\n    } else if (firstHundred.indexOf('\"tiers\"') >= 0) {\r\n      return { itemType: ProjectItemType.tradingBehaviorJson };\r\n    } else if (firstHundred.indexOf('\"animation_controllers\"') >= 0) {\r\n      return { itemType: ProjectItemType.animationControllerResourceJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"animations\"') >= 0) {\r\n      return { itemType: ProjectItemType.animationResourceJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"animations\"') >= 0) {\r\n      return { itemType: ProjectItemType.animationResourceJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"minecraft:attachable\"') >= 0) {\r\n      return { itemType: ProjectItemType.attachableResourceJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"minecraft:client_entity\"') >= 0) {\r\n      return { itemType: ProjectItemType.entityTypeResource, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"minecraft:fog_settings\"') >= 0) {\r\n      return { itemType: ProjectItemType.fogResourceJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"minecraft:geometry\"') >= 0) {\r\n      return { itemType: ProjectItemType.modelGeometryJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"particle_effect\"') >= 0) {\r\n      return { itemType: ProjectItemType.particleJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"render_controllers\"') >= 0) {\r\n      return { itemType: ProjectItemType.renderControllerJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"block_culling\"') >= 0) {\r\n      return { itemType: ProjectItemType.blockCulling, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"item_catalog\"') >= 0) {\r\n      return { itemType: ProjectItemType.craftingItemCatalog, packType: PackType.behavior };\r\n    } else if (firstHundred.indexOf('\"namespace\"') >= 0) {\r\n      return { itemType: ProjectItemType.uiJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"sound_definitions\"') >= 0) {\r\n      return { itemType: ProjectItemType.soundDefinitionCatalog, packType: PackType.resource };\r\n    } else if (fileBaseName === \"manifest\") {\r\n      const jsonO = Utilities.getJsonObject(jsonContent);\r\n\r\n      if (jsonO !== undefined && jsonO[\"modules\"]) {\r\n        for (const mod of jsonO[\"modules\"]) {\r\n          if (mod && mod[\"type\"]) {\r\n            switch (mod[\"type\"]) {\r\n              case \"script\":\r\n              case \"data\":\r\n                return { itemType: ProjectItemType.behaviorPackManifestJson };\r\n              case \"resources\":\r\n                return { itemType: ProjectItemType.resourcePackManifestJson };\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return { itemType: ProjectItemType.unknown };\r\n  }\r\n\r\n  static isDescendentOfPath(projectItem: ProjectItem, projectPath: string) {\r\n    if (projectItem.projectPath === projectPath) {\r\n      return true;\r\n    }\r\n\r\n    if (!projectItem.parentItems) {\r\n      return false;\r\n    }\r\n\r\n    for (const relationship of projectItem.parentItems) {\r\n      if (this.isDescendentOfPath(relationship.parentItem, projectPath)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static getSortOrder(itemType: ProjectItemType): number {\r\n    for (let i = 0; i < ProjectItemSortOrder.length; i++) {\r\n      if (ProjectItemSortOrder[i] === itemType) {\r\n        return i;\r\n      }\r\n    }\r\n\r\n    return ProjectItemSortOrder.length + itemType;\r\n  }\r\n\r\n  static getItemByTypeAndName(project: Project, name: string, projectItemType: ProjectItemType) {\r\n    const itemsCopy = project.getItemsByType(projectItemType);\r\n\r\n    for (const item of itemsCopy) {\r\n      if (item.itemType === projectItemType && (item.name === name || item.name.startsWith(name.toLowerCase() + \".\"))) {\r\n        return item;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getAccessoryFolderPathFromFilePath(projectItem: ProjectItem): string {\r\n    let relativePath = projectItem.projectPath;\r\n\r\n    if (!relativePath) {\r\n      return projectItem.name + \" \" + ProjectItemUtilities.getDescriptionForType(projectItem.itemType);\r\n    }\r\n\r\n    relativePath = relativePath.replace(/\\./gi, \"_\");\r\n\r\n    return relativePath;\r\n  }\r\n\r\n  static getCategory(itemType: ProjectItemType) {\r\n    switch (itemType) {\r\n      case ProjectItemType.MCFunction:\r\n      case ProjectItemType.testJs:\r\n      case ProjectItemType.actionSet:\r\n      case ProjectItemType.animationBehaviorJson:\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n      case ProjectItemType.tickJson:\r\n      case ProjectItemType.js:\r\n      case ProjectItemType.ts:\r\n      case ProjectItemType.buildProcessedJs:\r\n      case ProjectItemType.catalogIndexJs:\r\n        return ProjectItemCategory.logic;\r\n\r\n      case ProjectItemType.image:\r\n      case ProjectItemType.texture:\r\n      case ProjectItemType.storeAssetImage:\r\n      case ProjectItemType.marketingAssetImage:\r\n      case ProjectItemType.designTexture:\r\n      case ProjectItemType.uiTexture:\r\n      case ProjectItemType.packIconImage:\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n      case ProjectItemType.soundCatalog:\r\n      case ProjectItemType.resourcePackManifestJson:\r\n      case ProjectItemType.resourcePackListJson:\r\n      case ProjectItemType.renderControllerJson:\r\n      case ProjectItemType.lightingJson:\r\n      case ProjectItemType.textureSetJson:\r\n      case ProjectItemType.modelGeometryJson:\r\n      case ProjectItemType.material:\r\n      case ProjectItemType.materialSetJson:\r\n      case ProjectItemType.animationControllerResourceJson:\r\n      case ProjectItemType.animationResourceJson:\r\n      case ProjectItemType.itemTextureJson:\r\n      case ProjectItemType.flipbookTexturesJson:\r\n      case ProjectItemType.terrainTextureCatalogResourceJson:\r\n      case ProjectItemType.globalVariablesJson:\r\n      case ProjectItemType.uiJson:\r\n      case ProjectItemType.lang:\r\n      case ProjectItemType.languagesCatalogJson:\r\n      case ProjectItemType.ninesliceJson:\r\n      case ProjectItemType.attachableResourceJson:\r\n      case ProjectItemType.audio:\r\n      case ProjectItemType.designPackManifestJson:\r\n      case ProjectItemType.designPackFolder:\r\n        return ProjectItemCategory.assets;\r\n\r\n      case ProjectItemType.entityTypeBehavior:\r\n      case ProjectItemType.entityTypeResource:\r\n      case ProjectItemType.entityTypeBaseJs:\r\n      case ProjectItemType.entityTypeBaseTs:\r\n      case ProjectItemType.blockTypeBehavior:\r\n      case ProjectItemType.blocksCatalogResourceJson:\r\n      case ProjectItemType.blockTypeResourceJsonDoNotUse:\r\n      case ProjectItemType.itemTypeBehavior:\r\n      case ProjectItemType.fogResourceJson:\r\n      case ProjectItemType.tradingBehaviorJson:\r\n      case ProjectItemType.particleJson:\r\n      case ProjectItemType.structure:\r\n      case ProjectItemType.recipeBehavior:\r\n      case ProjectItemType.biomeBehavior:\r\n      case ProjectItemType.biomeResource:\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n      case ProjectItemType.lootTableBehavior:\r\n      case ProjectItemType.spawnRuleBehavior:\r\n      case ProjectItemType.dialogueBehaviorJson:\r\n      case ProjectItemType.MCWorld:\r\n      case ProjectItemType.worldTemplateManifestJson:\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n      case ProjectItemType.featureBehavior:\r\n      case ProjectItemType.featureRuleBehavior:\r\n      case ProjectItemType.voxelShapeBehavior:\r\n        return ProjectItemCategory.types;\r\n\r\n      case ProjectItemType.esLintConfigMjs:\r\n      case ProjectItemType.env:\r\n      case ProjectItemType.justConfigTs:\r\n      case ProjectItemType.packageLockJson:\r\n      case ProjectItemType.jsconfigJson:\r\n      case ProjectItemType.prettierRcJson:\r\n      case ProjectItemType.tsconfigJson:\r\n      case ProjectItemType.docfxJson:\r\n      case ProjectItemType.jsMap:\r\n      case ProjectItemType.jsdocJson:\r\n      case ProjectItemType.vsCodeExtensionsJson:\r\n      case ProjectItemType.vsCodeLaunchJson:\r\n      case ProjectItemType.vsCodeSettingsJson:\r\n      case ProjectItemType.vsCodeTasksJson:\r\n        return ProjectItemCategory.build;\r\n\r\n      case ProjectItemType.mcToolsProjectPreferences:\r\n        return ProjectItemCategory.mctools;\r\n\r\n      case ProjectItemType.zip:\r\n      case ProjectItemType.MCAddon:\r\n      case ProjectItemType.MCPack:\r\n      case ProjectItemType.MCTemplate:\r\n      case ProjectItemType.MCProject:\r\n      case ProjectItemType.personaPackFolder:\r\n      case ProjectItemType.behaviorPackFolder:\r\n      case ProjectItemType.resourcePackFolder:\r\n      case ProjectItemType.skinPackFolder:\r\n        return ProjectItemCategory.package;\r\n    }\r\n\r\n    return ProjectItemCategory.unknown;\r\n  }\r\n  static isTextureType(itemType: ProjectItemType) {\r\n    if (\r\n      itemType === ProjectItemType.texture ||\r\n      itemType === ProjectItemType.designTexture ||\r\n      itemType === ProjectItemType.uiTexture\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isImageType(itemType: ProjectItemType) {\r\n    if (\r\n      ProjectItemUtilities.isTextureType(itemType) ||\r\n      itemType === ProjectItemType.image ||\r\n      itemType === ProjectItemType.storeAssetImage ||\r\n      itemType === ProjectItemType.marketingAssetImage ||\r\n      itemType === ProjectItemType.packIconImage\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isAudioType(itemType: ProjectItemType) {\r\n    if (itemType === ProjectItemType.audio) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isPackageType(itemType: ProjectItemType) {\r\n    if (\r\n      itemType === ProjectItemType.zip ||\r\n      itemType === ProjectItemType.MCAddon ||\r\n      itemType === ProjectItemType.MCPack ||\r\n      itemType === ProjectItemType.MCProject ||\r\n      itemType === ProjectItemType.MCWorld ||\r\n      itemType === ProjectItemType.MCTemplate\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isBinaryType(itemType: ProjectItemType) {\r\n    if (this.isImageType(itemType) || this.isPackageType(itemType) || this.isAudioType(itemType)) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isVibrantVisualsTypeRelated(itemType: ProjectItemType) {\r\n    if (\r\n      itemType === ProjectItemType.atmosphericsJson ||\r\n      itemType === ProjectItemType.colorGradingJson ||\r\n      itemType === ProjectItemType.lightingJson ||\r\n      itemType === ProjectItemType.shadowsJson ||\r\n      itemType === ProjectItemType.pbrJson ||\r\n      itemType === ProjectItemType.pointLightsJson ||\r\n      itemType === ProjectItemType.waterJson ||\r\n      itemType ===\r\n        ProjectItemType.textureSetJson /* not 100% sure there might not be some legit usages of this outside of VV */\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isVibrantVisualsRelated(item: ProjectItem) {\r\n    if (this.isVibrantVisualsTypeRelated(item.itemType)) {\r\n      return true;\r\n    }\r\n\r\n    if (item.itemType === ProjectItemType.texture) {\r\n      const fileName = item.name.toLowerCase();\r\n\r\n      for (const ext of VibrantVisualsFileExtensionVariants) {\r\n        if (fileName.endsWith(ext)) {\r\n          return true;\r\n        }\r\n      }\r\n\r\n      if (this.isTextureSetTexture(item)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static getMimeTypes(item: ProjectItem) {\r\n    switch (item.itemType) {\r\n      case ProjectItemType.js:\r\n      case ProjectItemType.testJs:\r\n      case ProjectItemType.entityTypeBaseJs:\r\n      case ProjectItemType.buildProcessedJs:\r\n      case ProjectItemType.catalogIndexJs:\r\n      case ProjectItemType.entityTypeBaseTs:\r\n      case ProjectItemType.esLintConfigMjs:\r\n      case ProjectItemType.blockTypeBaseJs:\r\n        return [\"application/javascript\"];\r\n\r\n      case ProjectItemType.justConfigTs:\r\n      case ProjectItemType.ts:\r\n      case ProjectItemType.blockTypeBaseTs:\r\n        return [\"application/typescript\"];\r\n\r\n      case ProjectItemType.personaJson:\r\n      case ProjectItemType.tsconfigJson:\r\n      case ProjectItemType.prettierRcJson:\r\n      case ProjectItemType.jsconfigJson:\r\n      case ProjectItemType.docfxJson:\r\n      case ProjectItemType.jsdocJson:\r\n      case ProjectItemType.packageJson:\r\n      case ProjectItemType.packageLockJson:\r\n      case ProjectItemType.docInfoJson:\r\n      case ProjectItemType.scriptTypesJson:\r\n      case ProjectItemType.vanillaDataJson:\r\n      case ProjectItemType.engineOrderingJson:\r\n      case ProjectItemType.commandSetDefinitionJson:\r\n      case ProjectItemType.skinPackManifestJson:\r\n      case ProjectItemType.blockCulling:\r\n      case ProjectItemType.craftingItemCatalog:\r\n      case ProjectItemType.personaManifestJson:\r\n      case ProjectItemType.vsCodeLaunchJson:\r\n      case ProjectItemType.vsCodeTasksJson:\r\n      case ProjectItemType.vsCodeSettingsJson:\r\n      case ProjectItemType.vsCodeExtensionsJson:\r\n      case ProjectItemType.designPackManifestJson:\r\n      case ProjectItemType.sdlLayout:\r\n      case ProjectItemType.splashesJson:\r\n      case ProjectItemType.loadingMessagesJson:\r\n      case ProjectItemType.fontMetadataJson:\r\n      case ProjectItemType.emoticonsJson:\r\n      case ProjectItemType.unknownJson:\r\n      case ProjectItemType.behaviorPackManifestJson:\r\n      case ProjectItemType.resourcePackManifestJson:\r\n      case ProjectItemType.entityTypeBehavior:\r\n      case ProjectItemType.tickJson:\r\n      case ProjectItemType.aimAssistPresetJson:\r\n      case ProjectItemType.waterJson:\r\n      case ProjectItemType.shadowsJson:\r\n      case ProjectItemType.pbrJson:\r\n      case ProjectItemType.atmosphericsJson:\r\n      case ProjectItemType.pointLightsJson:\r\n      case ProjectItemType.colorGradingJson:\r\n      case ProjectItemType.cameraBehaviorJson:\r\n      case ProjectItemType.actionSet:\r\n      case ProjectItemType.worldTest:\r\n      case ProjectItemType.behaviorPackListJson:\r\n      case ProjectItemType.resourcePackListJson:\r\n      case ProjectItemType.animationBehaviorJson:\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n      case ProjectItemType.blockTypeBehavior:\r\n      case ProjectItemType.blockMaterialsBehaviorJson:\r\n      case ProjectItemType.itemTypeBehavior:\r\n      case ProjectItemType.lootTableBehavior:\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n      case ProjectItemType.fileListArrayJson:\r\n      case ProjectItemType.blocksCatalogResourceJson:\r\n      case ProjectItemType.soundCatalog:\r\n      case ProjectItemType.animationResourceJson:\r\n      case ProjectItemType.animationControllerResourceJson:\r\n      case ProjectItemType.entityTypeResource:\r\n      case ProjectItemType.fogResourceJson:\r\n      case ProjectItemType.modelGeometryJson:\r\n      case ProjectItemType.particleJson:\r\n      case ProjectItemType.renderControllerJson:\r\n      case ProjectItemType.ninesliceJson:\r\n      case ProjectItemType.uiJson:\r\n      case ProjectItemType.languagesCatalogJson:\r\n      case ProjectItemType.biomeBehavior:\r\n      case ProjectItemType.biomeResource:\r\n      case ProjectItemType.dialogueBehaviorJson:\r\n      case ProjectItemType.featureRuleBehavior:\r\n      case ProjectItemType.featureBehavior:\r\n      case ProjectItemType.functionEventJson:\r\n      case ProjectItemType.recipeBehavior:\r\n      case ProjectItemType.spawnRuleBehavior:\r\n      case ProjectItemType.tradingBehaviorJson:\r\n      case ProjectItemType.volumeBehaviorJson:\r\n      case ProjectItemType.attachableResourceJson:\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n      case ProjectItemType.materialsResourceJson:\r\n      case ProjectItemType.musicDefinitionJson:\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n      case ProjectItemType.contentIndexJson:\r\n      case ProjectItemType.contentReportJson:\r\n      case ProjectItemType.worldTemplateManifestJson:\r\n      case ProjectItemType.textureSetJson:\r\n      case ProjectItemType.textureListJson:\r\n      case ProjectItemType.lightingJson:\r\n      case ProjectItemType.flipbookTexturesJson:\r\n      case ProjectItemType.itemTextureJson:\r\n      case ProjectItemType.terrainTextureCatalogResourceJson:\r\n      case ProjectItemType.globalVariablesJson:\r\n      case ProjectItemType.dataForm:\r\n      case ProjectItemType.mcToolsProjectPreferences:\r\n      case ProjectItemType.dimensionJson:\r\n      case ProjectItemType.behaviorPackHistoryListJson:\r\n      case ProjectItemType.resourcePackHistoryListJson:\r\n      case ProjectItemType.contentsJson:\r\n      case ProjectItemType.jigsawProcessorList:\r\n      case ProjectItemType.jigsawStructure:\r\n      case ProjectItemType.jigsawTemplatePool:\r\n      case ProjectItemType.jigsawStructureSet:\r\n      case ProjectItemType.educationJson:\r\n      case ProjectItemType.voxelShapeBehavior:\r\n        return [\"application/json\"];\r\n\r\n      case ProjectItemType.MCWorld:\r\n      case ProjectItemType.MCTemplate:\r\n      case ProjectItemType.MCProject:\r\n      case ProjectItemType.MCAddon:\r\n      case ProjectItemType.MCPack:\r\n      case ProjectItemType.zip:\r\n        return [\"application/zip\"];\r\n\r\n      case ProjectItemType.structure:\r\n        return [\"application/octet-stream\"];\r\n\r\n      case ProjectItemType.MCFunction:\r\n      case ProjectItemType.material:\r\n      case ProjectItemType.materialGeometry:\r\n      case ProjectItemType.materialFragment:\r\n      case ProjectItemType.materialSetJson:\r\n      case ProjectItemType.materialVertex:\r\n      case ProjectItemType.env:\r\n      case ProjectItemType.lang:\r\n        return [\"text/plain\"];\r\n\r\n      case ProjectItemType.audio:\r\n        return [\"audio/wav\", \"audio/mp3\", \"audio/ogg\"];\r\n\r\n      case ProjectItemType.image:\r\n      case ProjectItemType.texture:\r\n      case ProjectItemType.uiTexture:\r\n      case ProjectItemType.designTexture:\r\n      case ProjectItemType.packIconImage:\r\n      case ProjectItemType.marketingAssetImage:\r\n      case ProjectItemType.storeAssetImage:\r\n        return [\"image/png\", \"image/tiff\"];\r\n\r\n      default:\r\n        return [\"application/octet-stream\"];\r\n    }\r\n  }\r\n\r\n  static getDescriptionForType(type: ProjectItemType) {\r\n    switch (type) {\r\n      case ProjectItemType.skinCatalogJson:\r\n        return \"Skins Catalog\";\r\n      case ProjectItemType.personaJson:\r\n        return \"Persona\";\r\n      case ProjectItemType.sdlLayout:\r\n        return \"SDL Layout\";\r\n      case ProjectItemType.rendererJson:\r\n        return \"Renderer\";\r\n      case ProjectItemType.splashesJson:\r\n        return \"Splashes\";\r\n      case ProjectItemType.loadingMessagesJson:\r\n        return \"Loading Messages\";\r\n      case ProjectItemType.fontMetadataJson:\r\n        return \"Font Metadata\";\r\n      case ProjectItemType.emoticonsJson:\r\n        return \"Emoticons\";\r\n      case ProjectItemType.js:\r\n        return \"JavaScript\";\r\n      case ProjectItemType.buildProcessedJs:\r\n        return \"Built JavaScript\";\r\n      case ProjectItemType.ts:\r\n        return \"TypeScript\";\r\n      case ProjectItemType.unknownJson:\r\n        return \"General json file\";\r\n      case ProjectItemType.designPackManifestJson:\r\n        return \"Design pack manifest\";\r\n      case ProjectItemType.behaviorPackManifestJson:\r\n        return \"Behavior pack manifest\";\r\n      case ProjectItemType.resourcePackManifestJson:\r\n        return \"Resource pack manifest\";\r\n      case ProjectItemType.testJs:\r\n        return \"Test JavaScript file\";\r\n      case ProjectItemType.entityTypeBaseJs:\r\n        return \"Entity type JavaScript\";\r\n      case ProjectItemType.entityTypeBaseTs:\r\n        return \"Entity type TypeScript\";\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return \"Entity type\";\r\n      case ProjectItemType.MCTemplate:\r\n        return \"Minecraft template\";\r\n      case ProjectItemType.MCWorld:\r\n        return \"Minecraft world\";\r\n      case ProjectItemType.MCProject:\r\n        return \"Minecraft project\";\r\n      case ProjectItemType.MCAddon:\r\n        return \"Minecraft addon\";\r\n      case ProjectItemType.MCPack:\r\n        return \"Minecraft pack\";\r\n      case ProjectItemType.zip:\r\n        return \"Minecraft zip\";\r\n      case ProjectItemType.worldFolder:\r\n        return \"Minecraft world\";\r\n      case ProjectItemType.structure:\r\n        return \"Structure\";\r\n      case ProjectItemType.MCFunction:\r\n        return \"Function\";\r\n      case ProjectItemType.tickJson:\r\n        return \"Tick\";\r\n      case ProjectItemType.material:\r\n        return \"Material\";\r\n      case ProjectItemType.materialSetJson:\r\n        return \"Material Set\";\r\n      case ProjectItemType.materialGeometry:\r\n        return \"Geometry\";\r\n      case ProjectItemType.materialFragment:\r\n        return \"Fragment\";\r\n      case ProjectItemType.materialVertex:\r\n        return \"Vertex\";\r\n      case ProjectItemType.shadowsJson:\r\n        return \"Shadow\";\r\n      case ProjectItemType.waterJson:\r\n        return \"Water\";\r\n      case ProjectItemType.jigsawProcessorList:\r\n        return \"Jigsaw Processor List\";\r\n      case ProjectItemType.jigsawStructure:\r\n        return \"Jigsaw Structure\";\r\n      case ProjectItemType.jigsawTemplatePool:\r\n        return \"Jigsaw Template Pool\";\r\n      case ProjectItemType.contentsJson:\r\n        return \"Contents Catalog\";\r\n      case ProjectItemType.jigsawStructureSet:\r\n        return \"Jigsaw Structure Set\";\r\n      case ProjectItemType.pbrJson:\r\n        return \"PBR\";\r\n      case ProjectItemType.atmosphericsJson:\r\n        return \"Atmospherics\";\r\n      case ProjectItemType.pointLightsJson:\r\n        return \"Point Light\";\r\n      case ProjectItemType.colorGradingJson:\r\n        return \"Color Grading\";\r\n      case ProjectItemType.cameraBehaviorJson:\r\n        return \"Camera\";\r\n      case ProjectItemType.aimAssistPresetJson:\r\n        return \"Aim Assist Preset\";\r\n      case ProjectItemType.aimAssistCategoryJson:\r\n        return \"Aim Assist Category\";\r\n      case ProjectItemType.behaviorTreeJson:\r\n        return \"Behavior Tree\";\r\n      case ProjectItemType.spawnGroupJson:\r\n        return \"Spawn Group\";\r\n      case ProjectItemType.catalogIndexJs:\r\n        return \"Catalog index\";\r\n      case ProjectItemType.personaPackFolder:\r\n        return \"Persona pack\";\r\n      case ProjectItemType.designPackFolder:\r\n        return \"Design pack\";\r\n      case ProjectItemType.behaviorPackFolder:\r\n        return \"Behavior pack folder\";\r\n      case ProjectItemType.resourcePackFolder:\r\n        return \"Resource pack folder\";\r\n      case ProjectItemType.skinPackFolder:\r\n        return \"Skin pack\";\r\n      case ProjectItemType.actionSet:\r\n        return \"Action Set\";\r\n      case ProjectItemType.worldTest:\r\n        return \"World test\";\r\n      case ProjectItemType.behaviorPackListJson:\r\n        return \"World behavior pack list\";\r\n      case ProjectItemType.resourcePackListJson:\r\n        return \"World resource pack list\";\r\n      case ProjectItemType.animationBehaviorJson:\r\n        return \"Behavior pack animation\";\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n        return \"Behavior pack animation controller\";\r\n      case ProjectItemType.blockTypeBehavior:\r\n        return \"Block type\";\r\n      case ProjectItemType.itemTypeBehavior:\r\n        return \"Item type\";\r\n      case ProjectItemType.lootTableBehavior:\r\n        return \"Loot table\";\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n        return \"Biome resources\";\r\n      case ProjectItemType.fileListArrayJson:\r\n        return \"File list\";\r\n      case ProjectItemType.craftingItemCatalog:\r\n        return \"Crafting Item catalog\";\r\n      case ProjectItemType.blocksCatalogResourceJson:\r\n        return \"Block resource catalog\";\r\n      case ProjectItemType.soundCatalog:\r\n        return \"Sound catalog\";\r\n      case ProjectItemType.animationResourceJson:\r\n        return \"Animation\";\r\n      case ProjectItemType.animationControllerResourceJson:\r\n        return \"Animation controller\";\r\n      case ProjectItemType.entityTypeResource:\r\n        return \"Entity type visuals/audio\";\r\n      case ProjectItemType.fogResourceJson:\r\n        return \"Fog\";\r\n      case ProjectItemType.modelGeometryJson:\r\n        return \"Model\";\r\n      case ProjectItemType.particleJson:\r\n        return \"Particle\";\r\n      case ProjectItemType.renderControllerJson:\r\n        return \"Render controller\";\r\n      case ProjectItemType.blockCulling:\r\n        return \"Block culling\";\r\n      case ProjectItemType.uiJson:\r\n        return \"User interface\";\r\n      case ProjectItemType.languagesCatalogJson:\r\n        return \"Language catalog\";\r\n      case ProjectItemType.biomeBehavior:\r\n        return \"Biome\";\r\n      case ProjectItemType.biomeResource:\r\n        return \"Biome Resources\";\r\n      case ProjectItemType.dialogueBehaviorJson:\r\n        return \"Entity dialogue\";\r\n      case ProjectItemType.featureRuleBehavior:\r\n        return \"World feature rule\";\r\n      case ProjectItemType.featureBehavior:\r\n        return \"Feature\";\r\n      case ProjectItemType.functionEventJson:\r\n        return \"Function event\";\r\n      case ProjectItemType.recipeBehavior:\r\n        return \"Recipe\";\r\n      case ProjectItemType.spawnRuleBehavior:\r\n        return \"Spawn rule\";\r\n      case ProjectItemType.tradingBehaviorJson:\r\n        return \"Trading\";\r\n      case ProjectItemType.volumeBehaviorJson:\r\n        return \"Volume\";\r\n      case ProjectItemType.attachableResourceJson:\r\n        return \"Attachable\";\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n        return \"Item type resources\";\r\n      case ProjectItemType.materialsResourceJson:\r\n        return \"Materials\";\r\n      case ProjectItemType.musicDefinitionJson:\r\n        return \"Music catalog\";\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n        return \"Sound catalog\";\r\n      case ProjectItemType.audio:\r\n        return \"Audio\";\r\n      case ProjectItemType.contentIndexJson:\r\n        return \"Content Description\";\r\n      case ProjectItemType.contentReportJson:\r\n        return \"Content Report\";\r\n      case ProjectItemType.tsconfigJson:\r\n        return \"TypeScript config\";\r\n      case ProjectItemType.prettierRcJson:\r\n        return \"Prettier JavaScript/JSON style config\";\r\n      case ProjectItemType.jsconfigJson:\r\n        return \"JavaScript config\";\r\n      case ProjectItemType.docfxJson:\r\n        return \"DocFX definition\";\r\n      case ProjectItemType.jsdocJson:\r\n        return \"JSDoc definition\";\r\n      case ProjectItemType.packageJson:\r\n        return \"NPM package definition\";\r\n      case ProjectItemType.packageLockJson:\r\n        return \"NPM package lock definition\";\r\n      case ProjectItemType.env:\r\n        return \"Environment File\";\r\n      case ProjectItemType.levelDatOld:\r\n        return \"Legacy Level Data\";\r\n      case ProjectItemType.levelDat:\r\n        return \"Level Data\";\r\n      case ProjectItemType.jsMap:\r\n        return \"JavaScript Map\";\r\n      case ProjectItemType.esLintConfigMjs:\r\n        return \"ESLint config\";\r\n      case ProjectItemType.justConfigTs:\r\n        return \"Just config\";\r\n      case ProjectItemType.docInfoJson:\r\n        return \"Doc info json\";\r\n      case ProjectItemType.ninesliceJson:\r\n        return \"Nine-slice scaling config\";\r\n      case ProjectItemType.scriptTypesJson:\r\n        return \"Script types definition\";\r\n      case ProjectItemType.vanillaDataJson:\r\n        return \"Vanilla data definition\";\r\n      case ProjectItemType.engineOrderingJson:\r\n        return \"Engine ordering definition\";\r\n      case ProjectItemType.commandSetDefinitionJson:\r\n        return \"Command definition\";\r\n      case ProjectItemType.skinPackManifestJson:\r\n        return \"Skin pack manifest\";\r\n      case ProjectItemType.personaManifestJson:\r\n        return \"Persona manifest\";\r\n      case ProjectItemType.blockTypeBaseJs:\r\n        return \"Block type base JavaScript\";\r\n      case ProjectItemType.blockTypeBaseTs:\r\n        return \"Block type base TypeScript\";\r\n      case ProjectItemType.image:\r\n        return \"Image\";\r\n      case ProjectItemType.texture:\r\n        return \"Texture\";\r\n      case ProjectItemType.uiTexture:\r\n        return \"UI texture\";\r\n      case ProjectItemType.designTexture:\r\n        return \"Design texture\";\r\n      case ProjectItemType.packIconImage:\r\n        return \"Icon\";\r\n      case ProjectItemType.marketingAssetImage:\r\n        return \"Marketing image\";\r\n      case ProjectItemType.storeAssetImage:\r\n        return \"Store image\";\r\n      case ProjectItemType.vsCodeLaunchJson:\r\n        return \"VS Code launch file\";\r\n      case ProjectItemType.vsCodeTasksJson:\r\n        return \"VS Code tasks\";\r\n      case ProjectItemType.vsCodeSettingsJson:\r\n        return \"VS Code settings\";\r\n      case ProjectItemType.vsCodeExtensionsJson:\r\n        return \"VS Code extensions\";\r\n      case ProjectItemType.lang:\r\n        return \"Language translations\";\r\n      case ProjectItemType.worldTemplateManifestJson:\r\n        return \"World template manifest\";\r\n      case ProjectItemType.textureSetJson:\r\n        return \"Texture set\";\r\n      case ProjectItemType.textureListJson:\r\n        return \"Texture list\";\r\n      case ProjectItemType.lightingJson:\r\n        return \"Lighting\";\r\n      case ProjectItemType.flipbookTexturesJson:\r\n        return \"Flipbook texture set\";\r\n      case ProjectItemType.itemTextureJson:\r\n        return \"Item texture\";\r\n      case ProjectItemType.terrainTextureCatalogResourceJson:\r\n        return \"Terrain texture\";\r\n      case ProjectItemType.globalVariablesJson:\r\n        return \"UI global variables\";\r\n      case ProjectItemType.dataForm:\r\n        return \"Form\";\r\n      case ProjectItemType.dimensionJson:\r\n        return \"Dimension\";\r\n      case ProjectItemType.mcToolsProjectPreferences:\r\n        return \"MCTools preferences\";\r\n      case ProjectItemType.behaviorPackHistoryListJson:\r\n        return \"Behavior pack history\";\r\n      case ProjectItemType.resourcePackHistoryListJson:\r\n        return \"Resource pack history\";\r\n      case ProjectItemType.educationJson:\r\n        return \"Education manifest\";\r\n      case ProjectItemType.voxelShapeBehavior:\r\n        return \"Voxel shape\";\r\n      default:\r\n        return \"Unknown\";\r\n    }\r\n  }\r\n\r\n  static getTooltipForType(type: ProjectItemType): string {\r\n    const group = getProjectItemTypeGroup(type);\r\n\r\n    switch (group) {\r\n      case ProjectItemTypeGroup.design:\r\n        return \"Planning assets and placeholders used to prototype ideas.\";\r\n      case ProjectItemTypeGroup.scriptsLogic:\r\n        return \"Scripts and command logic that drive gameplay behavior.\";\r\n      case ProjectItemTypeGroup.entityTypes:\r\n        return \"Definitions for mobs and NPCs, including behavior and spawn rules.\";\r\n      case ProjectItemTypeGroup.itemTypes:\r\n        return \"Definitions for custom items, loot, recipes, and trading.\";\r\n      case ProjectItemTypeGroup.blockTypes:\r\n        return \"Definitions for blocks, materials, and terrain behavior.\";\r\n      case ProjectItemTypeGroup.worldWorldgen:\r\n        return \"World data, biomes, features, and structure generation settings.\";\r\n      case ProjectItemTypeGroup.modelsAnimations:\r\n        return \"3D models, animations, and render controllers for visuals.\";\r\n      case ProjectItemTypeGroup.texturesAudio:\r\n        return \"Textures, images, particles, and audio used by the pack.\";\r\n      case ProjectItemTypeGroup.vibrantVisuals:\r\n        return \"Lighting, PBR, and Vibrant Visuals rendering settings.\";\r\n      case ProjectItemTypeGroup.uiUx:\r\n        return \"UI layouts, localization strings, and UI textures.\";\r\n      case ProjectItemTypeGroup.configDev:\r\n        return \"Configuration and metadata files used by tools and Minecraft to load the pack.\";\r\n      case ProjectItemTypeGroup.packaging:\r\n        return \"Packaged outputs for exporting or sharing.\";\r\n      case ProjectItemTypeGroup.skinPersona:\r\n        return \"Player skins and persona customization data.\";\r\n      case ProjectItemTypeGroup.meta:\r\n        return \"Documentation, reports, and tool metadata.\";\r\n      default:\r\n        return \"Other files used by this project.\";\r\n    }\r\n  }\r\n\r\n  static wouldBeCircular(\r\n    candidate: ProjectItem,\r\n    considering?: ProjectItem,\r\n    visitedPaths?: Set<string>,\r\n    dontGoUpward?: boolean,\r\n    dontGoDownward?: boolean\r\n  ) {\r\n    if (!visitedPaths) {\r\n      visitedPaths = new Set<string>();\r\n    }\r\n\r\n    if (!candidate.projectPath) {\r\n      return false;\r\n    }\r\n\r\n    if (!considering) {\r\n      considering = candidate;\r\n    }\r\n\r\n    if (considering.projectPath) {\r\n      if (visitedPaths.has(considering.projectPath)) {\r\n        return true;\r\n      }\r\n\r\n      visitedPaths.add(considering.projectPath);\r\n    } else {\r\n      return false;\r\n    }\r\n\r\n    if (considering.parentItems && !dontGoUpward) {\r\n      for (const parentItem of considering.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.wouldBeCircular(candidate, parentItem.parentItem, visitedPaths, false, true)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (considering.childItems && !dontGoDownward) {\r\n      for (const childItem of considering.childItems) {\r\n        if (childItem.childItem) {\r\n          if (this.wouldBeCircular(candidate, childItem.childItem, visitedPaths, true, false)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Recursively collects all descendant items reachable via childItems relationships.\r\n   * Includes the starting item itself. Uses cycle detection to prevent infinite loops.\r\n   * This is used to discover the full \"tree\" of files that make up an entity/block/item\r\n   * (e.g., BP entity \u2192 RP entity \u2192 model, textures, animations, spawn rules, loot tables).\r\n   */\r\n  static collectAllDescendantItems(item: ProjectItem): ProjectItem[] {\r\n    const visited = new Set<string>();\r\n    const result: ProjectItem[] = [];\r\n\r\n    ProjectItemUtilities._collectDescendantsRecursive(item, visited, result);\r\n\r\n    return result;\r\n  }\r\n\r\n  private static _collectDescendantsRecursive(item: ProjectItem, visited: Set<string>, result: ProjectItem[]) {\r\n    const path = item.projectPath;\r\n    if (!path || visited.has(path)) {\r\n      return;\r\n    }\r\n\r\n    visited.add(path);\r\n    result.push(item);\r\n\r\n    if (item.childItems) {\r\n      for (const rel of item.childItems) {\r\n        if (rel.childItem) {\r\n          ProjectItemUtilities._collectDescendantsRecursive(rel.childItem, visited, result);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static isTextureSetTexture(projectItem: ProjectItem) {\r\n    if (projectItem.parentItems) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (parentItem.parentItem.itemType === ProjectItemType.textureSetJson) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isBlock(type: ProjectItemType) {\r\n    return (\r\n      type === ProjectItemType.blockCulling ||\r\n      type === ProjectItemType.terrainTextureCatalogResourceJson ||\r\n      type === ProjectItemType.blockTypeBehavior ||\r\n      type === ProjectItemType.blocksCatalogResourceJson ||\r\n      type === ProjectItemType.blockMaterialsBehaviorJson\r\n    );\r\n  }\r\n\r\n  static isBlockRelated(projectItem: ProjectItem, dontGoUpward?: boolean, dontGoDownward?: boolean) {\r\n    if (projectItem.parentItems && !dontGoUpward) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.isBlock(parentItem.parentItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isBlockRelated(parentItem.parentItem, false, true)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.childItems && !dontGoDownward) {\r\n      for (const parentItem of projectItem.childItems) {\r\n        if (parentItem.childItem) {\r\n          if (this.isBlock(parentItem.childItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isBlockRelated(parentItem.childItem, true, false)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isUI(type: ProjectItemType) {\r\n    return type === ProjectItemType.uiJson || type === ProjectItemType.uiTexture;\r\n  }\r\n\r\n  static isUIRelated(\r\n    projectItem: ProjectItem,\r\n    goUpwardOnly?: boolean,\r\n    goDownwardOnly?: boolean,\r\n    visited?: Set<ProjectItem>\r\n  ) {\r\n    // Track visited items to prevent infinite recursion from circular dependencies\r\n    if (visited === undefined) {\r\n      visited = new Set<ProjectItem>();\r\n    }\r\n\r\n    if (visited.has(projectItem)) {\r\n      return false; // Already visited, avoid infinite loop\r\n    }\r\n    visited.add(projectItem);\r\n\r\n    if (projectItem.parentItems && (goUpwardOnly || goUpwardOnly === undefined)) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.isUI(parentItem.parentItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isUIRelated(parentItem.parentItem, true, false, visited)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.childItems && (goDownwardOnly || goDownwardOnly === undefined)) {\r\n      for (const childItem of projectItem.childItems) {\r\n        if (childItem.childItem) {\r\n          if (this.isUI(childItem.childItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isUIRelated(childItem.childItem, false, true, visited)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isBehaviorRelated(itemType: ProjectItemType) {\r\n    if (\r\n      itemType === ProjectItemType.entityTypeBehavior ||\r\n      itemType === ProjectItemType.blockTypeBehavior ||\r\n      itemType === ProjectItemType.itemTypeBehavior ||\r\n      itemType === ProjectItemType.spawnRuleBehavior ||\r\n      itemType === ProjectItemType.lootTableBehavior ||\r\n      itemType === ProjectItemType.tradingBehaviorJson ||\r\n      itemType === ProjectItemType.recipeBehavior ||\r\n      itemType === ProjectItemType.biomeBehavior ||\r\n      itemType === ProjectItemType.featureBehavior ||\r\n      itemType === ProjectItemType.featureRuleBehavior ||\r\n      itemType === ProjectItemType.jigsawProcessorList ||\r\n      itemType === ProjectItemType.jigsawStructure ||\r\n      itemType === ProjectItemType.jigsawStructureSet ||\r\n      itemType === ProjectItemType.jigsawTemplatePool ||\r\n      itemType === ProjectItemType.voxelShapeBehavior\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static getRootAncestorItems(item: ProjectItem, ancestorList?: ProjectItem[]) {\r\n    if (ancestorList === undefined) {\r\n      ancestorList = [];\r\n    }\r\n\r\n    if (item.parentItems) {\r\n      for (const parentItem of item.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          this.getRootAncestorItems(parentItem.parentItem, ancestorList);\r\n        }\r\n      }\r\n    } else {\r\n      ancestorList.push(item);\r\n    }\r\n\r\n    return ancestorList;\r\n  }\r\n\r\n  static getRelationshipDescription(itemRel: IProjectItemRelationship) {\r\n    if (!itemRel.parentItem || !itemRel.childItem) {\r\n      return undefined;\r\n    }\r\n\r\n    if (\r\n      itemRel.parentItem.itemType === ProjectItemType.entityTypeBehavior &&\r\n      itemRel.childItem.itemType === ProjectItemType.entityTypeResource\r\n    ) {\r\n      return StorageUtilities.getBaseFromName(itemRel.parentItem.name) + \" visuals/audio\";\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static isDesignRelated(itemType: ProjectItemType) {\r\n    if (\r\n      itemType === ProjectItemType.designTexture ||\r\n      itemType === ProjectItemType.designPackFolder ||\r\n      itemType === ProjectItemType.actionSet ||\r\n      itemType === ProjectItemType.designPackManifestJson\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isResourceRelated(itemType: ProjectItemType) {\r\n    if (ProjectItemUtilities.isVibrantVisualsTypeRelated(itemType)) {\r\n      return true;\r\n    }\r\n\r\n    if (\r\n      itemType === ProjectItemType.attachableResourceJson ||\r\n      itemType === ProjectItemType.animationControllerResourceJson ||\r\n      itemType === ProjectItemType.animationResourceJson ||\r\n      itemType === ProjectItemType.entityTypeResource ||\r\n      itemType === ProjectItemType.renderControllerJson ||\r\n      itemType === ProjectItemType.modelGeometryJson ||\r\n      itemType === ProjectItemType.biomeResource ||\r\n      itemType === ProjectItemType.biomesClientCatalogResource ||\r\n      itemType === ProjectItemType.texture ||\r\n      itemType === ProjectItemType.uiJson ||\r\n      itemType === ProjectItemType.uiTexture ||\r\n      itemType === ProjectItemType.audio ||\r\n      itemType === ProjectItemType.itemTypeLegacyResource ||\r\n      itemType === ProjectItemType.blocksCatalogResourceJson ||\r\n      itemType === ProjectItemType.blockCulling\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isItem(type: ProjectItemType) {\r\n    return (\r\n      type === ProjectItemType.itemTextureJson ||\r\n      type === ProjectItemType.itemTypeBehavior ||\r\n      type === ProjectItemType.attachableResourceJson ||\r\n      type === ProjectItemType.itemTypeLegacyResource\r\n    );\r\n  }\r\n\r\n  static isItemRelated(projectItem: ProjectItem, dontGoUpward?: boolean, dontGoDownward?: boolean) {\r\n    if (projectItem.parentItems && !dontGoUpward) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.isItem(parentItem.parentItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isItemRelated(parentItem.parentItem, false, true)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.childItems && !dontGoDownward) {\r\n      for (const parentItem of projectItem.childItems) {\r\n        if (parentItem.childItem) {\r\n          if (this.isItem(parentItem.childItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isItemRelated(parentItem.childItem, true, false)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isEntity(type: ProjectItemType) {\r\n    return (\r\n      type === ProjectItemType.entityTypeBehavior ||\r\n      type === ProjectItemType.entityTypeResource ||\r\n      type === ProjectItemType.renderControllerJson\r\n    );\r\n  }\r\n\r\n  static isEntityRelated(projectItem: ProjectItem, dontGoUpward?: boolean, dontGoDownward?: boolean) {\r\n    if (projectItem.parentItems && !dontGoUpward) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.isEntity(parentItem.parentItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isEntityRelated(parentItem.parentItem, false, true)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.childItems && !dontGoDownward) {\r\n      for (const parentItem of projectItem.childItems) {\r\n        if (parentItem.childItem) {\r\n          if (this.isEntity(parentItem.childItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isEntityRelated(parentItem.childItem, true, false)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isParticle(type: ProjectItemType) {\r\n    return type === ProjectItemType.particleJson;\r\n  }\r\n\r\n  static isParticleRelated(projectItem: ProjectItem, dontGoUpward?: boolean, dontGoDownward?: boolean) {\r\n    if (projectItem.parentItems && !dontGoUpward) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.isParticle(parentItem.parentItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isParticleRelated(parentItem.parentItem, false, true)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.childItems && !dontGoDownward) {\r\n      for (const parentItem of projectItem.childItems) {\r\n        if (parentItem.childItem) {\r\n          if (this.isParticle(parentItem.childItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isParticleRelated(parentItem.childItem, true, false)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static getNewItemName(type: ProjectItemType) {\r\n    return ProjectItemUtilities.getDescriptionForType(type).toLowerCase();\r\n  }\r\n\r\n  /**\r\n   * Gets the semantic color for a project item type based on its category group.\r\n   * Uses the Minecraft-themed color palette from ProjectItemTypeInfo.\r\n   */\r\n  static getColorForType(type: ProjectItemType): IColor {\r\n    return getColorForProjectItemType(type);\r\n  }\r\n\r\n  /**\r\n   * Gets the type group (semantic category) for a project item type.\r\n   */\r\n  static getTypeGroup(type: ProjectItemType): ProjectItemTypeGroup {\r\n    return getProjectItemTypeGroup(type);\r\n  }\r\n\r\n  static getPluralDescriptionForType(type: ProjectItemType) {\r\n    // override non-\"plus s\" plural-ifications here\r\n    switch (type) {\r\n      case ProjectItemType.audio:\r\n        return \"Audio\";\r\n      case ProjectItemType.ts:\r\n        return \"Scripts\";\r\n      case ProjectItemType.js:\r\n        return \"JavaScript files\";\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n        return \"Item type visuals and audio\";\r\n      case ProjectItemType.entityTypeResource:\r\n        return \"Entity type visuals/audio\";\r\n      case ProjectItemType.catalogIndexJs:\r\n        return \"Catalog indexes\";\r\n      case ProjectItemType.behaviorPackHistoryListJson:\r\n        return \"Behavior pack histories\";\r\n      case ProjectItemType.resourcePackHistoryListJson:\r\n        return \"Resource pack histories\";\r\n      case ProjectItemType.globalVariablesJson:\r\n      case ProjectItemType.materialGeometry:\r\n      case ProjectItemType.atmosphericsJson:\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n      case ProjectItemType.vsCodeTasksJson:\r\n      case ProjectItemType.vsCodeSettingsJson:\r\n      case ProjectItemType.vsCodeExtensionsJson:\r\n      case ProjectItemType.mcToolsProjectPreferences:\r\n      case ProjectItemType.materialsResourceJson:\r\n      case ProjectItemType.lang:\r\n      case ProjectItemType.levelDat:\r\n      case ProjectItemType.levelDatOld:\r\n        return this.getDescriptionForType(type);\r\n      default:\r\n        const str = this.getDescriptionForType(type);\r\n\r\n        if (!str.endsWith(\"s\")) {\r\n          return str + \"s\";\r\n        }\r\n\r\n        return str;\r\n    }\r\n  }\r\n\r\n  static getCousinOfType(projectItem: ProjectItem, itemType: ProjectItemType): ProjectItem | undefined {\r\n    if (!projectItem.parentItems) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const parentRel of projectItem.parentItems) {\r\n      const result = this.getFirstDescendentOfType(parentRel.parentItem, itemType);\r\n      if (result) {\r\n        return result;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getFirstDescendentOfType(projectItem: ProjectItem, itemType: ProjectItemType): ProjectItem | undefined {\r\n    if (!projectItem.childItems) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const rel of projectItem.childItems) {\r\n      if (rel.childItem.itemType === itemType) {\r\n        return rel.childItem;\r\n      }\r\n    }\r\n\r\n    for (const rel of projectItem.childItems) {\r\n      const found = this.getFirstDescendentOfType(rel.childItem, itemType);\r\n\r\n      if (found) {\r\n        return found;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getDefaultFolderForType(project: Project, itemType: ProjectItemType) {\r\n    const paths = [...ProjectItemUtilities.getFolderRootsForType(itemType)];\r\n\r\n    if (paths === undefined || paths.length === 0) {\r\n      return undefined;\r\n    }\r\n\r\n    await project.ensureLoadedProjectFolder();\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    switch (itemType) {\r\n      case ProjectItemType.js:\r\n      case ProjectItemType.ts:\r\n        const scriptsFolder = await project.getMainScriptsFolder();\r\n\r\n        return scriptsFolder;\r\n\r\n      case ProjectItemType.entityTypeBehavior:\r\n      case ProjectItemType.MCFunction:\r\n        const defaultBpFolder = await project.getDefaultBehaviorPackFolder();\r\n\r\n        if (!defaultBpFolder) {\r\n          return undefined;\r\n        }\r\n\r\n        return defaultBpFolder.ensureFolderFromRelativePath(paths[0]);\r\n\r\n      case ProjectItemType.entityTypeResource:\r\n      case ProjectItemType.modelGeometryJson:\r\n        const defaultRpFolder = await project.getDefaultResourcePackFolder();\r\n\r\n        if (!defaultRpFolder) {\r\n          return undefined;\r\n        }\r\n\r\n        return defaultRpFolder.ensureFolderFromRelativePath(paths[0]);\r\n\r\n      case ProjectItemType.spawnRuleBehavior:\r\n      case ProjectItemType.lootTableBehavior:\r\n      case ProjectItemType.recipeBehavior:\r\n      case ProjectItemType.featureBehavior:\r\n      case ProjectItemType.featureRuleBehavior:\r\n      case ProjectItemType.jigsawProcessorList:\r\n      case ProjectItemType.jigsawStructure:\r\n      case ProjectItemType.jigsawTemplatePool:\r\n      case ProjectItemType.jigsawStructureSet:\r\n        return await ProjectUtilities.getDefaultBehaviorPackFolder(project, paths);\r\n\r\n      case ProjectItemType.designTexture:\r\n        const defaultDpFolder = await project.getDefaultDesignPackFolder();\r\n\r\n        if (!defaultDpFolder) {\r\n          return undefined;\r\n        }\r\n\r\n        return defaultDpFolder.ensureFolderFromRelativePath(StorageUtilities.ensureStartsWithDelimiter(paths[0]));\r\n\r\n      case ProjectItemType.uiTexture:\r\n        const defaultRpFolderA = await project.getDefaultResourcePackFolder();\r\n\r\n        if (!defaultRpFolderA) {\r\n          return undefined;\r\n        }\r\n\r\n        return defaultRpFolderA.ensureFolderFromRelativePath(paths.join(\"/\"));\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getNewItemTechnicalName(type: ProjectItemType) {\r\n    const roots = this.getFolderRootsForType(type);\r\n\r\n    if (roots.length > 0) {\r\n      let str = roots[roots.length - 1];\r\n\r\n      if (str === \"entities\") {\r\n        str = \"entity\";\r\n      } else if (str.endsWith(\"s\")) {\r\n        str = str.substring(0, str.length - 1);\r\n      }\r\n\r\n      return str;\r\n    }\r\n\r\n    return \"item\";\r\n  }\r\n\r\n  static getFolderRootsForType(itemType: ProjectItemType): readonly string[] {\r\n    return getProjectItemDefaults(itemType).folderRoots;\r\n  }\r\n}\r\n\r\nexport function getEnsuredFile(items: readonly ProjectItem[], predicate: (item: ProjectItem) => boolean) {\r\n  const foundItem = items.find(predicate);\r\n\r\n  return foundItem ? foundItem.loadFileContent() : Promise.resolve(undefined);\r\n}\r\n\r\nexport const getEnsuredFileOfType = (items: readonly ProjectItem[], type: ProjectItemType) =>\r\n  getEnsuredFile(items, (item) => item.itemType === type);\r\n\r\nexport function findEnsuredFiles(items: readonly ProjectItem[], predicate: (item: ProjectItem) => boolean) {\r\n  const filteredItems = items.filter(predicate);\r\n\r\n  return Promise.all(filteredItems.map((item) => item.loadFileContent()));\r\n}\r\n\r\nexport const findEnsuredFilesOfType = (items: readonly ProjectItem[], type: ProjectItemType) =>\r\n  findEnsuredFiles(items, (item) => item.itemType === type);\r\n\r\nexport function getNeighborFiles(items: readonly ProjectItem[], subject: ProjectItem): ProjectItem[] {\r\n  const projectPath = subject.projectPath?.toLowerCase();\r\n  if (!projectPath) {\r\n    throw new Error(`No Project path found for project item: ${subject.name}`);\r\n  }\r\n  const folderProjectPath = projectPath.substring(0, projectPath.length - subject.name.length);\r\n\r\n  const neighbors =\r\n    folderProjectPath && items.filter((item) => item.projectPath?.toLocaleLowerCase().startsWith(folderProjectPath));\r\n  return neighbors || [];\r\n}\r\n\r\nexport function getWorldTemplates(items: readonly ProjectItem[]) {\r\n  return items\r\n    .filter((item) => item.itemType === ProjectItemType.worldTemplateManifestJson)\r\n    .map((worldManifest) => ({ name: worldManifest.name, items: getNeighborFiles(items, worldManifest) }));\r\n}\r\n\r\nexport function getMarketContent(items: readonly ProjectItem[]) {\r\n  const marketContentTypes = new Set([ProjectItemType.storeAssetImage, ProjectItemType.marketingAssetImage]);\r\n\r\n  return items.filter((item) => marketContentTypes.has(item.itemType));\r\n}\r\n\r\nexport async function tryEnsureFiles(items: ProjectItem[], predicate: (item: ProjectItem) => boolean = () => true) {\r\n  const filteredItems = items.filter(predicate);\r\n\r\n  const fileReads = await Promise.all(filteredItems.map(async (item) => [item, await item.loadFileContent()] as const));\r\n\r\n  const success: ProjectItem[] = [];\r\n  const failed: ProjectItem[] = [];\r\n\r\n  for (const [item, file] of fileReads) {\r\n    if (!file) {\r\n      failed.push(item);\r\n    } else {\r\n      success.push(item);\r\n    }\r\n  }\r\n\r\n  return [success, failed] as const;\r\n}\r\n", "import IColor from \"../core/IColor\";\r\n\r\nexport enum ImageItemType {\r\n  pixelSet = 0,\r\n  line = 1,\r\n  rectangle = 2,\r\n  circle = 3,\r\n  triangle = 4,\r\n  text = 5,\r\n  image = 6,\r\n}\r\n\r\nexport enum ImageOutputType {\r\n  blockTexture = 1,\r\n  itemTexture = 2,\r\n  painting = 3,\r\n  blockBillboard3x3 = 11,\r\n  blockBillboard4x6 = 12,\r\n  blockBillboard5x8 = 13,\r\n}\r\n\r\nexport enum PaintingSize {\r\n  oneBlock = 1,\r\n  threeByThree = 3,\r\n  threeByFourPortrait = 4,\r\n}\r\n\r\nexport default interface IImageEdits {\r\n  items: IImageItem[];\r\n  backgroundItem?: IImageItem;\r\n  stackPosition?: number;\r\n  width?: number;\r\n  height?: number;\r\n  outputs?: IImageOutput[];\r\n}\r\n\r\nexport interface IImageOutput {\r\n  type: ImageOutputType;\r\n  name: string;\r\n  paintingOverrideName: string;\r\n  paintingSize: PaintingSize;\r\n}\r\n\r\nexport interface IImageItem {\r\n  origin: IImageXY;\r\n  type: ImageItemType;\r\n  strokeColor?: IColor;\r\n  imageData?: string;\r\n  isFilled?: boolean;\r\n  fillColor?: IColor;\r\n  fixedWidth?: number;\r\n  fixedHeight?: number;\r\n  coords: IImageXY[];\r\n}\r\n\r\nexport interface IImageXY {\r\n  x: number;\r\n  y: number;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IColor from \"./IColor\";\r\n\r\nexport default class ColorUtilities {\r\n  static fromCss(colorStr: string): IColor {\r\n    if (colorStr.startsWith(\"#\") && colorStr.length === 7) {\r\n      return {\r\n        red: ColorUtilities.fromTwoHexit(colorStr.substring(1, 3)),\r\n        green: ColorUtilities.fromTwoHexit(colorStr.substring(3, 5)),\r\n        blue: ColorUtilities.fromTwoHexit(colorStr.substring(5, 7)),\r\n      };\r\n    } else if (colorStr.startsWith(\"#\") && colorStr.length === 9) {\r\n      return {\r\n        red: ColorUtilities.fromTwoHexit(colorStr.substring(1, 3)),\r\n        green: ColorUtilities.fromTwoHexit(colorStr.substring(3, 5)),\r\n        blue: ColorUtilities.fromTwoHexit(colorStr.substring(5, 7)),\r\n        alpha: ColorUtilities.fromTwoHexit(colorStr.substring(7, 9)),\r\n      };\r\n    } else if (colorStr.length === 6) {\r\n      return {\r\n        red: ColorUtilities.fromTwoHexit(colorStr.substring(0, 2)),\r\n        green: ColorUtilities.fromTwoHexit(colorStr.substring(2, 4)),\r\n        blue: ColorUtilities.fromTwoHexit(colorStr.substring(4, 6)),\r\n      };\r\n    } else if (colorStr.length === 8) {\r\n      return {\r\n        red: ColorUtilities.fromTwoHexit(colorStr.substring(0, 2)),\r\n        green: ColorUtilities.fromTwoHexit(colorStr.substring(2, 4)),\r\n        blue: ColorUtilities.fromTwoHexit(colorStr.substring(4, 6)),\r\n        alpha: ColorUtilities.fromTwoHexit(colorStr.substring(6, 8)),\r\n      };\r\n    }\r\n\r\n    return {\r\n      red: 0,\r\n      green: 0,\r\n      blue: 0,\r\n    };\r\n  }\r\n\r\n  static fromTwoHexit(hexitChar: string) {\r\n    try {\r\n      return parseInt(hexitChar, 16);\r\n    } catch {\r\n      return 0;\r\n    }\r\n  }\r\n\r\n  static toCss(color: IColor) {\r\n    if (color.alpha !== undefined) {\r\n      return `rgba(${color.red}, ${color.green}, ${color.blue}, ${color.alpha})`;\r\n    }\r\n\r\n    return `rgb(${color.red}, ${color.green}, ${color.blue})`;\r\n  }\r\n\r\n  static lighter(color: IColor, multiplier: number): IColor {\r\n    return {\r\n      red: Math.min(255, color.red + color.red * multiplier),\r\n      green: Math.min(255, color.green + color.green * multiplier),\r\n      blue: Math.min(255, color.blue + color.blue * multiplier),\r\n      alpha: color.alpha,\r\n    };\r\n  }\r\n\r\n  static darker(color: IColor, multiplier: number): IColor {\r\n    return {\r\n      red: Math.max(0, color.red - color.red * multiplier),\r\n      green: Math.max(0, color.green - color.green * multiplier),\r\n      blue: Math.max(0, color.blue - color.blue * multiplier),\r\n      alpha: color.alpha,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Alpha-composite `foreground` over an opaque `background`, returning an\r\n   * opaque RGB color.\r\n   *\r\n   * Why not just rely on CSS `rgba(...)` backgrounds?\r\n   * Accessibility scanners (e.g. axe-core) cannot reliably compute contrast\r\n   * for translucent backgrounds. When the foreground sits over an `rgba(...)`\r\n   * fill, axe walks up the DOM looking for the next opaque ancestor and\r\n   * frequently falls back to the page default (white) \u2014 which produces false\r\n   * \"1.06:1\" contrast failures even when the rendered pixels look fine.\r\n   *\r\n   * Pre-compositing on our side gives the element a SOLID `rgb(...)`\r\n   * background that axe can evaluate directly, so contrast scoring matches\r\n   * what the user actually sees.\r\n   *\r\n   * @param foreground The translucent color (must define `alpha` 0..1).\r\n   *                   If `alpha` is undefined or 1, the foreground is returned unchanged.\r\n   * @param background The opaque background it sits over.\r\n   *                   If alpha is supplied here it is treated as 1.\r\n   */\r\n  static composite(foreground: IColor, background: IColor): IColor {\r\n    const alpha = foreground.alpha ?? 1;\r\n    if (alpha >= 1) {\r\n      return { red: foreground.red, green: foreground.green, blue: foreground.blue };\r\n    }\r\n    if (alpha <= 0) {\r\n      return { red: background.red, green: background.green, blue: background.blue };\r\n    }\r\n    return {\r\n      red: Math.round(foreground.red * alpha + background.red * (1 - alpha)),\r\n      green: Math.round(foreground.green * alpha + background.green * (1 - alpha)),\r\n      blue: Math.round(foreground.blue * alpha + background.blue * (1 - alpha)),\r\n    };\r\n  }\r\n}\r\n", "import ColorUtilities from \"../core/ColorUtilities\";\r\nimport { IImageItem, IImageXY, ImageItemType } from \"./IImageEdits\";\r\n\r\nexport class ImageItem {\r\n  data: IImageItem;\r\n  imageElement?: object;\r\n  isImageElementLoaded?: boolean;\r\n\r\n  constructor(_data: IImageItem) {\r\n    this.data = _data;\r\n  }\r\n\r\n  public get isFilled() {\r\n    if (!this.data || !this.data.isFilled) {\r\n      return false;\r\n    }\r\n\r\n    return this.data.isFilled;\r\n  }\r\n\r\n  public set isFilled(filled: boolean) {\r\n    this.data.isFilled = filled;\r\n  }\r\n\r\n  public get coords() {\r\n    return this.data.coords;\r\n  }\r\n\r\n  public get fixedWidth() {\r\n    if (this.data) {\r\n      return this.data.fixedWidth;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set fixedWidth(fixedWidth: number | undefined) {\r\n    this.data.fixedWidth = fixedWidth;\r\n  }\r\n\r\n  public get fixedHeight() {\r\n    if (this.data) {\r\n      return this.data.fixedHeight;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set fixedHeight(fixedHeight: number | undefined) {\r\n    this.data.fixedHeight = fixedHeight;\r\n  }\r\n\r\n  public get strokeColor() {\r\n    if (!this.data || !this.data.strokeColor) {\r\n      return {\r\n        red: 0,\r\n        green: 0,\r\n        blue: 0,\r\n      };\r\n    }\r\n\r\n    return this.data.strokeColor;\r\n  }\r\n\r\n  public get strokeColorCss() {\r\n    return ColorUtilities.toCss(this.strokeColor);\r\n  }\r\n\r\n  public get imageData() {\r\n    return this.data.imageData;\r\n  }\r\n\r\n  public set imageData(imageData: string | undefined) {\r\n    this.data.imageData = imageData;\r\n  }\r\n\r\n  public get x() {\r\n    return this.data.origin.x;\r\n  }\r\n\r\n  public get y() {\r\n    return this.data.origin.y;\r\n  }\r\n\r\n  public get coord0x() {\r\n    if (!this.data || !this.data.coords || this.data.coords.length <= 0) {\r\n      return this.x;\r\n    }\r\n\r\n    return this.data.coords[0].x;\r\n  }\r\n\r\n  public set coord0x(newX: number) {\r\n    if (!this.data.coords) {\r\n      this.data.coords = [];\r\n    }\r\n\r\n    if (this.data.coords.length < 1) {\r\n      this.data.coords.push({ x: newX, y: this.y });\r\n    } else {\r\n      this.data.coords[0].x = newX;\r\n    }\r\n  }\r\n\r\n  public get coord0y() {\r\n    if (!this.data || !this.data.coords || this.data.coords.length <= 0) {\r\n      return this.y;\r\n    }\r\n\r\n    return this.data.coords[0].y;\r\n  }\r\n\r\n  public set coord0y(newY: number) {\r\n    if (!this.data.coords) {\r\n      this.data.coords = [];\r\n    }\r\n\r\n    if (this.data.coords.length < 1) {\r\n      this.data.coords.push({ x: this.x, y: newY });\r\n    } else {\r\n      this.data.coords[0].y = newY;\r\n    }\r\n  }\r\n\r\n  public get type() {\r\n    return this.data.type;\r\n  }\r\n\r\n  public get allPixels() {\r\n    let pixels: IImageXY[] = [];\r\n\r\n    if (this.data.type === ImageItemType.pixelSet && this.data.coords.length === 1) {\r\n      pixels.push({ x: this.x, y: this.y });\r\n    } else if (this.data.type === ImageItemType.line && this.data.coords.length === 1) {\r\n      let x0 = this.x;\r\n      let y0 = this.y;\r\n      let x1 = this.data.coords[0].x;\r\n      let y1 = this.data.coords[0].y;\r\n\r\n      let dx: number = Math.abs(x1 - x0),\r\n        sx = x0 < x1 ? 1 : -1;\r\n\r\n      let dy: number = -Math.abs(y1 - y0),\r\n        sy = y0 < y1 ? 1 : -1;\r\n\r\n      let err: number = dx + dy,\r\n        e2;\r\n\r\n      while (true) {\r\n        pixels.push({ x: x0, y: y0 });\r\n\r\n        if (x0 === x1 && y0 === y1) {\r\n          break;\r\n        }\r\n\r\n        e2 = 2 * err;\r\n\r\n        if (e2 >= dy) {\r\n          err += dy;\r\n          x0 += sx;\r\n        }\r\n        if (e2 <= dx) {\r\n          err += dx;\r\n          y0 += sy;\r\n        }\r\n      }\r\n    }\r\n\r\n    return pixels;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport IImageEditor, { IImageItem, IImageOutput, ImageOutputType, PaintingSize } from \"./IImageEdits\";\r\nimport { ImageItem } from \"./ImageItem\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ProjectItemCreateManager from \"../app/ProjectItemCreateManager\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IImageEdits from \"./IImageEdits\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\n\r\nexport default class ImageEditsDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public items: ImageItem[] = [];\r\n  public _backgroundItem?: ImageItem;\r\n  public data?: IImageEditor;\r\n\r\n  private _onLoaded = new EventDispatcher<ImageEditsDefinition, ImageEditsDefinition>();\r\n\r\n  public project: Project | undefined = undefined;\r\n\r\n  public get stackPosition() {\r\n    return this.data?.stackPosition;\r\n  }\r\n\r\n  public set stackPosition(newStackPosition: number | undefined) {\r\n    if (!this.data) {\r\n      return;\r\n    }\r\n\r\n    this.data.stackPosition = newStackPosition;\r\n  }\r\n\r\n  public get backgroundItem() {\r\n    let backgroundItem = this._backgroundItem;\r\n    if (backgroundItem) {\r\n      return backgroundItem;\r\n    }\r\n\r\n    if (!this.data) {\r\n      return undefined;\r\n    }\r\n\r\n    backgroundItem = new ImageItem({\r\n      origin: { x: 0, y: 0 },\r\n      type: 2,\r\n      coords: [],\r\n    });\r\n\r\n    this._backgroundItem = backgroundItem;\r\n\r\n    return backgroundItem;\r\n  }\r\n\r\n  public ensureBackgroundItem(imageData: IImageItem) {\r\n    if (!this._backgroundItem) {\r\n      this._backgroundItem = new ImageItem(imageData);\r\n    } else {\r\n      this._backgroundItem.data = imageData;\r\n    }\r\n\r\n    if (!this.data) {\r\n      this.data = {\r\n        items: [],\r\n      };\r\n    }\r\n\r\n    this.data.backgroundItem = this._backgroundItem.data;\r\n\r\n    return this._backgroundItem;\r\n  }\r\n\r\n  public get height() {\r\n    if (!this.data || !this.data.height) {\r\n      return 64;\r\n    }\r\n\r\n    return this.data.height;\r\n  }\r\n\r\n  public set height(height: number) {\r\n    if (!this.data) {\r\n      return;\r\n    }\r\n\r\n    this.data.height = height;\r\n  }\r\n\r\n  public get width() {\r\n    if (!this.data || !this.data.width) {\r\n      return 64;\r\n    }\r\n\r\n    return this.data.width;\r\n  }\r\n\r\n  public set width(width: number) {\r\n    if (!this.data) {\r\n      return;\r\n    }\r\n\r\n    this.data.width = width;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get outputs() {\r\n    if (!this.data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.data.outputs;\r\n  }\r\n\r\n  private ensureData(): IImageEditor {\r\n    if (!this.data) {\r\n      this.data = {\r\n        items: [],\r\n      };\r\n    }\r\n\r\n    if (!this.data.items) {\r\n      this.data.items = [];\r\n    }\r\n\r\n    return this.data;\r\n  }\r\n\r\n  async updateOutputs(project: Project) {\r\n    if (!this.data?.outputs) {\r\n      return;\r\n    }\r\n\r\n    for (const output of this.data.outputs) {\r\n      await this.updateOutput(project, output);\r\n    }\r\n  }\r\n\r\n  async getCorrespondingResourcePackFolder() {\r\n    if (!this.project) {\r\n      return undefined;\r\n    }\r\n\r\n    let rpFolder = await this.project?.getDefaultResourcePackFolder();\r\n\r\n    return rpFolder;\r\n  }\r\n\r\n  async getPaintingOverrideFolder() {\r\n    let rpFolder = await this.getCorrespondingResourcePackFolder();\r\n\r\n    if (!rpFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._file) {\r\n      return undefined;\r\n    }\r\n\r\n    rpFolder = await rpFolder.ensureFolderFromRelativePath(\"/textures/painting/\");\r\n\r\n    return rpFolder;\r\n  }\r\n\r\n  async getCorrespondingBlockTextureFolder() {\r\n    let rpFolder = await this.getCorrespondingResourcePackFolder();\r\n\r\n    if (!rpFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._file) {\r\n      return undefined;\r\n    }\r\n\r\n    rpFolder = await rpFolder.ensureFolderFromRelativePath(\"/textures/blocks/\");\r\n\r\n    const subPath = StorageUtilities.getBaseFromName(this._file?.name);\r\n\r\n    rpFolder = rpFolder?.ensureFolder(subPath);\r\n\r\n    return rpFolder;\r\n  }\r\n\r\n  async updateOutput(project: Project, output: IImageOutput) {\r\n    if (output.name) {\r\n      if (output.type === ImageOutputType.blockBillboard3x3) {\r\n        await this.updateBlocks(project, output.name, 3, 3);\r\n      } else if (output.type === ImageOutputType.blockBillboard4x6) {\r\n        await this.updateBlocks(project, output.name, 6, 4);\r\n      } else if (output.type === ImageOutputType.blockBillboard5x8) {\r\n        await this.updateBlocks(project, output.name, 8, 5);\r\n      }\r\n    }\r\n  }\r\n\r\n  async setFromCreationData(creationData: IImageEdits) {\r\n    if (!this.data) {\r\n      if (creationData.items === undefined) {\r\n        creationData.items = [];\r\n      }\r\n\r\n      this.data = creationData;\r\n    }\r\n\r\n    if (creationData.outputs) {\r\n      this.data.outputs = creationData.outputs;\r\n    }\r\n\r\n    if (creationData.width) {\r\n      this.data.width = creationData.width;\r\n    }\r\n\r\n    if (creationData.height) {\r\n      this.data.height = creationData.height;\r\n    }\r\n\r\n    await this.persist();\r\n  }\r\n\r\n  static getPaintingWidth(paintingSize: PaintingSize) {\r\n    switch (paintingSize) {\r\n      case PaintingSize.threeByThree:\r\n      case PaintingSize.threeByFourPortrait:\r\n        return 48;\r\n    }\r\n\r\n    return 16;\r\n  }\r\n\r\n  static getPaintingHeight(paintingSize: PaintingSize) {\r\n    switch (paintingSize) {\r\n      case PaintingSize.oneBlock:\r\n        return 16;\r\n      case PaintingSize.threeByThree:\r\n        return 48;\r\n      case PaintingSize.threeByFourPortrait:\r\n        return 64;\r\n    }\r\n\r\n    return 16;\r\n  }\r\n\r\n  async updateBlocks(project: Project, name: string, width: number, height: number) {\r\n    const blockTextureFolder = await this.getCorrespondingBlockTextureFolder();\r\n\r\n    if (!blockTextureFolder) {\r\n      return;\r\n    }\r\n    for (let i = 0; i < height; i++) {\r\n      for (let j = 0; j < width; j++) {\r\n        const targetName = name + \"_r\" + String(i + 1) + \"c\" + String(j + 1);\r\n\r\n        let item = ProjectItemUtilities.getItemByTypeAndName(project, targetName, ProjectItemType.blockTypeBehavior);\r\n\r\n        if (!item) {\r\n          const galleryItem = await project.creatorTools.getGalleryProjectById(\"basicDieBlock\");\r\n\r\n          if (galleryItem) {\r\n            await ProjectItemCreateManager.addFromGallery(project, targetName, galleryItem);\r\n          }\r\n\r\n          item = ProjectItemUtilities.getItemByTypeAndName(project, targetName, ProjectItemType.blockTypeBehavior);\r\n        }\r\n\r\n        if (item) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (item.primaryFile) {\r\n            const blockType = await BlockTypeDefinition.ensureOnFile(item.primaryFile);\r\n\r\n            if (blockType && blockTextureFolder.parentFolder) {\r\n              const imageFile = blockTextureFolder.ensureFile(targetName + \".png\");\r\n\r\n              let parentFolder = blockTextureFolder;\r\n\r\n              while (\r\n                parentFolder.parentFolder !== undefined &&\r\n                parentFolder.parentFolder !== null &&\r\n                parentFolder.name.toLowerCase() !== \"textures\"\r\n              ) {\r\n                parentFolder = parentFolder.parentFolder;\r\n              }\r\n\r\n              // go one above textures if possible\r\n              if (parentFolder.parentFolder) {\r\n                parentFolder = parentFolder.parentFolder;\r\n              }\r\n\r\n              let frPath = imageFile.getFolderRelativePath(parentFolder);\r\n\r\n              if (frPath) {\r\n                await blockType.setBlockCatalogTexture(project, \"north\", targetName);\r\n                await blockType.setBlockCatalogTexture(project, \"east\", targetName);\r\n                await blockType.setBlockCatalogTexture(project, \"south\", targetName);\r\n                await blockType.setBlockCatalogTexture(project, \"west\", targetName);\r\n                await blockType.setBlockCatalogTexture(project, \"up\", targetName);\r\n                await blockType.setBlockCatalogTexture(project, \"down\", targetName);\r\n\r\n                if (frPath.endsWith(\".png\")) {\r\n                  frPath = frPath.substring(0, frPath.length - 4);\r\n                }\r\n\r\n                frPath = Utilities.ensureNotStartsWithSlash(frPath);\r\n\r\n                await blockType.setTerrainTexture(project, targetName, {\r\n                  textures: [{ path: frPath, overlay_color: \"#8ab689\" }],\r\n                });\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  addNewDrawingItem(item: ImageItem) {\r\n    let data = this.data;\r\n\r\n    if (!data) {\r\n      data = this.ensureData();\r\n    }\r\n\r\n    if (data.stackPosition !== undefined) {\r\n      this.items = this.items.slice(0, data.stackPosition);\r\n      data.items = data.items.slice(0, data.stackPosition);\r\n\r\n      this.stackPosition = undefined;\r\n    }\r\n\r\n    data.items.push(item.data);\r\n    this.items.push(item);\r\n  }\r\n\r\n  static async ensureAsAccessoryOnImageProjectItem(projectItem: ProjectItem) {\r\n    const accessoryFolder = await projectItem.ensureAccessoryFolder();\r\n\r\n    const imageFile = accessoryFolder.ensureFile(\"image_edits.json\");\r\n\r\n    return await ImageEditsDefinition.ensureOnFile(imageFile, projectItem.project);\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    project: Project,\r\n    loadHandler?: IEventHandler<ImageEditsDefinition, ImageEditsDefinition>\r\n  ) {\r\n    let imageEdits: ImageEditsDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      imageEdits = new ImageEditsDefinition();\r\n\r\n      imageEdits.project = project;\r\n      imageEdits.file = file;\r\n\r\n      file.manager = imageEdits;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ImageEditsDefinition) {\r\n      imageEdits = file.manager as ImageEditsDefinition;\r\n\r\n      if (!imageEdits.isLoaded && loadHandler) {\r\n        imageEdits.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await imageEdits.load();\r\n\r\n      return imageEdits;\r\n    }\r\n\r\n    return imageEdits;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.persist();\r\n\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  _loadFromItems() {\r\n    this.items = [];\r\n\r\n    if (this.data?.backgroundItem) {\r\n      this._backgroundItem = new ImageItem(this.data.backgroundItem);\r\n    }\r\n\r\n    if (this.data?.items) {\r\n      for (const dataItem of this.data?.items) {\r\n        this.items.push(new ImageItem(dataItem));\r\n      }\r\n    }\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    this.data = StorageUtilities.getJsonObject(this._file);\r\n    this._loadFromItems();\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport SemanticVersion from \"../core/versioning/SemanticVersion\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport DesignManifestDefinition from \"../minecraft/DesignManifestDefinition\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport { PackType } from \"../minecraft/Pack\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport SkinManifestDefinition from \"../minecraft/SkinManifestDefinition\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ProjectRole } from \"./IProjectData\";\r\nimport { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport Project, { AUTOGENERATED_CONTENT_TOKEN, FolderContext } from \"./Project\";\r\nimport ProjectUtilities from \"./ProjectUtilities\";\r\n\r\nexport default class ProjectItemInference {\r\n  static async inferProjectItemsFromFolder(\r\n    project: Project,\r\n    folder: IFolder,\r\n    fileSystemPrefix: string,\r\n    folderContext: FolderContext,\r\n    variantLabel: string | undefined,\r\n    isInWorld: boolean,\r\n    rootFolder: IFolder,\r\n    depth: number,\r\n    source?: string,\r\n    force?: boolean,\r\n    processingCallback?: (area: string) => void\r\n  ) {\r\n    if (\r\n      project.projectFolder === null ||\r\n      (folder.name.startsWith(\".\") && !folder.name.startsWith(\".vscode\") && !folder.name.startsWith(\".mct\"))\r\n    ) {\r\n      Log.debugAlert(\"Could not process folder: \" + folder.storageRelativePath);\r\n      return;\r\n    }\r\n\r\n    if (processingCallback) {\r\n      processingCallback(\"Scanning '\" + folder.storageRelativePath + \"' for Minecraft project items.\");\r\n    }\r\n\r\n    await folder.load(force ? force : false);\r\n\r\n    let parentFolder = folder.parentFolder;\r\n\r\n    if (parentFolder === project.projectFolder.parentFolder) {\r\n      parentFolder = null;\r\n    }\r\n\r\n    const folderPathCanon = StorageUtilities.canonicalizePath(\r\n      StorageUtilities.getFolderPath(folder.storageRelativePath)\r\n    );\r\n\r\n    // if we're inside of an MCPack or zip, the folder is \"/\" but the name of the mcpack file potentially\r\n    // provides hints, so scoop out the name of the parent zip\r\n    let basePathName = folderPathCanon;\r\n\r\n    if (basePathName === \"/\" && folder.extendedPath.length > 1) {\r\n      basePathName = StorageUtilities.getAvailableFolderName(folder);\r\n    }\r\n\r\n    const parentIsPacksRoot =\r\n      parentFolder !== null &&\r\n      parentFolder.name.indexOf(\"_packs\") >= 0 &&\r\n      (folderContext === FolderContext.behaviorPack ||\r\n        folderContext === FolderContext.resourcePack ||\r\n        folderContext === FolderContext.skinPack);\r\n\r\n    const lastUnderscore = folder.storageRelativePath.lastIndexOf(\"_\");\r\n\r\n    if (!variantLabel && lastUnderscore >= 0 && parentIsPacksRoot) {\r\n      // vanilla stores folders like:\r\n      // chemistry\r\n      // chemistry_1.20.50\r\n      // chemistry_1.20.60\r\n      // unify version variants with their parent\r\n\r\n      let potentialVersionSection = folder.storageRelativePath.substring(lastUnderscore + 1);\r\n\r\n      if (potentialVersionSection.endsWith(\"/\")) {\r\n        potentialVersionSection = potentialVersionSection.substring(0, potentialVersionSection.length - 1);\r\n      }\r\n\r\n      if (Utilities.isNumericIsh(potentialVersionSection) && potentialVersionSection.indexOf(\".\") > 0) {\r\n        variantLabel = potentialVersionSection;\r\n      }\r\n    }\r\n\r\n    if (\r\n      folderPathCanon.indexOf(\"/checkpoint_input\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/metadata\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/type_definitions\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/typedefs\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/script_modules/\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/vanilladata_modules/\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/engine_modules/\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/command_modules/\") >= 0\r\n    ) {\r\n      folderContext = FolderContext.typeDefs;\r\n    } else if (folderPathCanon.indexOf(\"/data/\") >= 0 || folderPathCanon.indexOf(\"/forms/\") >= 0) {\r\n      folderContext = FolderContext.metaData;\r\n    } else if (folderPathCanon.indexOf(\"/.vscode\") >= 0) {\r\n      folderContext = FolderContext.vscodeFolder;\r\n    } else if (folderPathCanon.indexOf(\"/.mct\") >= 0) {\r\n      folderContext = FolderContext.mctoolsWorkingFolder;\r\n    } else if (MinecraftUtilities.pathLooksLikeBehaviorPackName(basePathName)) {\r\n      folderContext = FolderContext.behaviorPack;\r\n    } else if (MinecraftUtilities.pathLooksLikeDesignPackName(basePathName)) {\r\n      folderContext = FolderContext.designPack;\r\n    } else if (MinecraftUtilities.pathLooksLikeSubPacksFolderName(basePathName)) {\r\n      // note this check must be above the .resourcePack check\r\n      folderContext = FolderContext.resourcePackSubPack;\r\n    } else if (MinecraftUtilities.pathLooksLikeResourcePackName(basePathName)) {\r\n      folderContext = FolderContext.resourcePack;\r\n    } else if (MinecraftUtilities.pathLooksLikeSkinPackName(basePathName) && folderContext === FolderContext.unknown) {\r\n      folderContext = FolderContext.skinPack;\r\n    } else if (\r\n      MinecraftUtilities.pathLooksLikePersonaPackName(basePathName) &&\r\n      folderContext === FolderContext.unknown\r\n    ) {\r\n      folderContext = FolderContext.persona;\r\n    } else if (\r\n      MinecraftUtilities.pathLooksLikeWorldFolderName(basePathName) &&\r\n      folderContext === FolderContext.unknown\r\n    ) {\r\n      folderContext = FolderContext.world;\r\n      isInWorld = true;\r\n    } else if (\r\n      (folderPathCanon.indexOf(\"/docs/\") >= 0 ||\r\n        folderPathCanon.indexOf(\"/@minecraft/\") >= 0 ||\r\n        folderPathCanon.indexOf(\"/mojang-commands\") >= 0) &&\r\n      folderContext === FolderContext.unknown\r\n    ) {\r\n      folderContext = FolderContext.docs;\r\n\r\n      if (project.docsContainer === null) {\r\n        project.docsContainer = folder.parentFolder;\r\n      }\r\n    }\r\n\r\n    if (\r\n      folderContext === FolderContext.unknown &&\r\n      (folder.files[\"manifest.json\"] || folder.files[\"pack_manifest.json\"]) &&\r\n      folder.files[\"skins.json\"]\r\n    ) {\r\n      folderContext = FolderContext.skinPack;\r\n    }\r\n\r\n    if (\r\n      folderContext === FolderContext.unknown &&\r\n      (folder.files[\"manifest.json\"] || folder.files[\"pack_manifest.json\"]) &&\r\n      !folder.files[\"level.dat\"] &&\r\n      !folder.files[\"levelname.txt\"]\r\n    ) {\r\n      for (const folderName in folder.folders) {\r\n        if (folderName) {\r\n          if (folderName.toLowerCase() === \"persona\" || folderName.toLowerCase().startsWith(\"persona_\")) {\r\n            folderContext = FolderContext.persona;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (\r\n      folderContext === FolderContext.unknown &&\r\n      (folder.files[\"manifest.json\"] || folder.files[\"pack_manifest.json\"]) &&\r\n      !folder.files[\"level.dat\"] &&\r\n      !folder.files[\"levelname.txt\"]\r\n    ) {\r\n      if (\r\n        folder.folders[\"models\"] ||\r\n        folder.folders[\"textures\"] ||\r\n        folder.folders[\"lighting\"] ||\r\n        folder.folders[\"subpacks\"] ||\r\n        folder.folders[\"assets\"] ||\r\n        folder.folders[\"sounds\"] ||\r\n        folder.folders[\"texture_sets\"] ||\r\n        folder.folders[\"sounds\"] ||\r\n        folder.folders[\"ui\"]\r\n      ) {\r\n        folderContext = FolderContext.resourcePack;\r\n      } else if (\r\n        folder.folders[\"scripts\"] ||\r\n        folder.folders[\"features\"] ||\r\n        folder.folders[\"entities\"] ||\r\n        folder.folders[\"loot_tables\"] ||\r\n        folder.folders[\"spawn_rules\"] ||\r\n        folder.folders[\"functions\"] ||\r\n        folder.folders[\"structures\"] ||\r\n        folder.folders[\"recipes\"] ||\r\n        folder.folders[\"trading\"] ||\r\n        folder.folders[\"feature_rules\"] ||\r\n        MinecraftUtilities.pathLooksLikeBehaviorPackName(basePathName)\r\n      ) {\r\n        folderContext = FolderContext.behaviorPack;\r\n      } else if (MinecraftUtilities.pathLooksLikeResourcePackName(basePathName)) {\r\n        folderContext = FolderContext.resourcePack;\r\n      } else if (MinecraftUtilities.pathLooksLikeDesignPackName(basePathName)) {\r\n        folderContext = FolderContext.designPack;\r\n      } else {\r\n        const manifestFile = folder.files[\"manifest.json\"];\r\n\r\n        if (manifestFile) {\r\n          if (!manifestFile?.isContentLoaded) {\r\n            await manifestFile?.loadContent();\r\n          }\r\n\r\n          const obj = StorageUtilities.getJsonObject(manifestFile);\r\n\r\n          if (obj) {\r\n            let modules = obj[\"modules\"];\r\n\r\n            if (modules) {\r\n              for (const module of modules) {\r\n                if (module.type === \"resources\") {\r\n                  folderContext = FolderContext.resourcePack;\r\n                } else if (module.type === \"script\") {\r\n                  folderContext = FolderContext.behaviorPack;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (\r\n      folder.files[\"world_behavior_packs.json\"] ||\r\n      folder.files[\"world_resource_packs.json\"] ||\r\n      folder.files[\"levelname.txt\"]\r\n    ) {\r\n      if (folderContext === FolderContext.unknown) {\r\n        folderContext = FolderContext.world;\r\n      }\r\n\r\n      if (folder.parentFolder && !project.worldContainer) {\r\n        project.worldContainer = folder.parentFolder;\r\n      }\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const canonFileName = StorageUtilities.canonicalizeName(fileName);\r\n      // console.log(\"Considering \" + canonFileName + \" in folder \" + folder.storageRelativePath);\r\n\r\n      if (canonFileName !== \"gulpfile.js\" && canonFileName !== \"package-lock.json\") {\r\n        const candidateFile = folder.files[fileName];\r\n\r\n        if (candidateFile !== undefined) {\r\n          let pi = null;\r\n          let projectPath = undefined;\r\n\r\n          if (fileSystemPrefix.length > 0) {\r\n            projectPath = fileSystemPrefix + candidateFile.fullPath;\r\n            pi = project.getItemByProjectPath(projectPath);\r\n          } else {\r\n            const frPath = candidateFile.getFolderRelativePath(rootFolder);\r\n\r\n            if (frPath !== undefined) {\r\n              projectPath = StorageUtilities.canonicalizePath(frPath);\r\n\r\n              pi = project.getItemByProjectPath(projectPath);\r\n            }\r\n          }\r\n\r\n          if ((pi === undefined || pi === null) && projectPath !== undefined) {\r\n            const fileExtension = candidateFile.type ? candidateFile.type.toLowerCase() : candidateFile.type;\r\n            const baseName = StorageUtilities.getBaseFromName(candidateFile.name);\r\n            const folderPath = StorageUtilities.canonicalizePath(StorageUtilities.getFolderPath(projectPath));\r\n            const folderPathLower = folderPath.toLowerCase();\r\n            const projectPathLower = projectPath.toLowerCase();\r\n            const isResourcePack =\r\n              folderContext === FolderContext.resourcePack || folderContext === FolderContext.resourcePackSubPack;\r\n\r\n            if (canonFileName === \"manifest.json\" || canonFileName === \"pack_manifest.json\") {\r\n              if (folderContext === FolderContext.world) {\r\n                project.defaultWorldFolder = folder;\r\n                project.worldContainer = parentFolder;\r\n              }\r\n\r\n              if (!candidateFile.isContentLoaded) {\r\n                await candidateFile.loadContent(false);\r\n              }\r\n\r\n              let newPiType = ProjectItemType.unknown;\r\n              let tag = \"\";\r\n\r\n              if (folderContext === FolderContext.behaviorPack) {\r\n                newPiType = ProjectItemType.behaviorPackManifestJson;\r\n                tag = \"behaviorpackmanifest\";\r\n              } else if (folderContext === FolderContext.resourcePack) {\r\n                newPiType = ProjectItemType.resourcePackManifestJson;\r\n                tag = \"resourcepackmanifest\";\r\n              } else if (folderContext === FolderContext.designPack) {\r\n                newPiType = ProjectItemType.designPackManifestJson;\r\n                tag = \"designpackmanifest\";\r\n              } else if (folderContext === FolderContext.skinPack) {\r\n                newPiType = ProjectItemType.skinPackManifestJson;\r\n                tag = \"skinpackmanifest\";\r\n              } else if (folderContext === FolderContext.persona) {\r\n                newPiType = ProjectItemType.personaManifestJson;\r\n                tag = \"personapackmanifest\";\r\n              } else if (folderContext === FolderContext.world) {\r\n                newPiType = ProjectItemType.worldTemplateManifestJson;\r\n                tag = \"worldtemplatemanifest\";\r\n              }\r\n\r\n              if (\r\n                candidateFile.content !== undefined &&\r\n                candidateFile.content !== \"\" &&\r\n                !variantLabel &&\r\n                typeof candidateFile.content === \"string\"\r\n              ) {\r\n                if (newPiType === ProjectItemType.behaviorPackManifestJson) {\r\n                  const bpManifest = await BehaviorManifestDefinition.ensureOnFile(candidateFile);\r\n                  if (bpManifest && bpManifest.id) {\r\n                    project.defaultBehaviorPackUniqueId = bpManifest.id;\r\n\r\n                    if (bpManifest.name && !Utilities.isLikelyLocalizationKey(bpManifest.name)) {\r\n                      project.title = bpManifest.name;\r\n                    }\r\n\r\n                    if (bpManifest.description && !Utilities.isLikelyLocalizationKey(bpManifest.description)) {\r\n                      project.description = bpManifest.description;\r\n                    }\r\n\r\n                    if (bpManifest.version) {\r\n                      const sv = SemanticVersion.from(bpManifest.version);\r\n\r\n                      if (sv) {\r\n                        project.defaultBehaviorPackVersion = sv.asArray();\r\n\r\n                        if (\r\n                          project.defaultBehaviorPackVersion !== undefined &&\r\n                          project.defaultBehaviorPackVersion.length >= 3\r\n                        ) {\r\n                          project.versionMajor = project.defaultBehaviorPackVersion[0];\r\n                          project.versionMinor = project.defaultBehaviorPackVersion[1];\r\n                          project.versionPatch = project.defaultBehaviorPackVersion[2];\r\n                        }\r\n                      }\r\n                    }\r\n                    project.defaultBehaviorPackFolder = folder;\r\n                    project.behaviorPacksContainer = parentFolder;\r\n\r\n                    const scriptModuleId = bpManifest.getScriptModule()?.uuid;\r\n                    if (scriptModuleId) {\r\n                      project.defaultScriptModuleUniqueId = scriptModuleId;\r\n                    }\r\n\r\n                    project.ensurePackByFolder(folder, PackType.behavior, isInWorld);\r\n                  }\r\n                } else if (newPiType === ProjectItemType.resourcePackManifestJson) {\r\n                  const rpManifest = await ResourceManifestDefinition.ensureOnFile(candidateFile);\r\n                  if (rpManifest && rpManifest.id) {\r\n                    project.defaultResourcePackUniqueId = rpManifest.id;\r\n\r\n                    if (rpManifest.name && !Utilities.isLikelyLocalizationKey(rpManifest.name)) {\r\n                      project.title = rpManifest.name;\r\n                    }\r\n\r\n                    if (rpManifest.description && !Utilities.isLikelyLocalizationKey(rpManifest.description)) {\r\n                      project.description = rpManifest.description;\r\n                    }\r\n\r\n                    if (rpManifest.version) {\r\n                      const sv = SemanticVersion.from(rpManifest.version);\r\n\r\n                      if (sv) {\r\n                        project.defaultResourcePackVersion = sv.asArray();\r\n\r\n                        if (\r\n                          project.defaultResourcePackVersion !== undefined &&\r\n                          project.defaultResourcePackVersion.length >= 3\r\n                        ) {\r\n                          project.versionMajor = project.defaultResourcePackVersion[0];\r\n                          project.versionMinor = project.defaultResourcePackVersion[1];\r\n                          project.versionPatch = project.defaultResourcePackVersion[2];\r\n                        }\r\n                      }\r\n                    }\r\n                    project.defaultResourcePackFolder = folder;\r\n                    project.resourcePacksContainer = parentFolder;\r\n\r\n                    const subpacks = rpManifest.subpacks;\r\n\r\n                    if (subpacks) {\r\n                      for (const subpack of subpacks) {\r\n                        if (subpack.folder_name) {\r\n                          const pv = project.ensureVariant(subpack.folder_name);\r\n\r\n                          if (subpack.memory_performance_tier !== undefined) {\r\n                            pv.memoryPerformanceTier = subpack.memory_performance_tier;\r\n                          }\r\n\r\n                          if (subpack.memory_tier !== undefined) {\r\n                            pv.memoryTier = subpack.memory_tier;\r\n                          }\r\n\r\n                          if (subpack.name) {\r\n                            pv.title = subpack.name;\r\n                          }\r\n                        }\r\n                      }\r\n                    }\r\n\r\n                    project.ensurePackByFolder(folder, PackType.resource, isInWorld);\r\n                  }\r\n                } else if (newPiType === ProjectItemType.skinPackManifestJson) {\r\n                  const spManifest = await SkinManifestDefinition.ensureOnFile(candidateFile);\r\n                  if (spManifest) {\r\n                    if (spManifest.name && !Utilities.isLikelyLocalizationKey(spManifest.name)) {\r\n                      project.title = spManifest.name;\r\n                    }\r\n\r\n                    if (spManifest.description && !Utilities.isLikelyLocalizationKey(spManifest.description)) {\r\n                      project.description = spManifest.description;\r\n                    }\r\n\r\n                    project.defaultSkinPackFolder = folder;\r\n                    project.skinPacksContainer = parentFolder;\r\n\r\n                    project.ensurePackByFolder(folder, PackType.skin, isInWorld);\r\n                  }\r\n                } else if (newPiType === ProjectItemType.designPackManifestJson) {\r\n                  const dpManifest = await DesignManifestDefinition.ensureOnFile(candidateFile);\r\n                  if (dpManifest) {\r\n                    if (dpManifest.name && !Utilities.isLikelyLocalizationKey(dpManifest.name)) {\r\n                      project.title = dpManifest.name;\r\n                    }\r\n\r\n                    if (dpManifest.description && !Utilities.isLikelyLocalizationKey(dpManifest.description)) {\r\n                      project.description = dpManifest.description;\r\n                    }\r\n\r\n                    project.defaultDesignPackFolder = folder;\r\n                    project.designPacksContainer = parentFolder;\r\n\r\n                    project.ensurePackByFolder(folder, PackType.design, isInWorld);\r\n                  }\r\n                }\r\n              }\r\n\r\n              // Log.assert(newPiType !== ProjectItemType.unknown, \"Unknown manifest.json file found.\");\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                newPiType,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                tag,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"/scripts/index.js\")) {\r\n              if (!candidateFile.isContentLoaded) {\r\n                await candidateFile.loadContent();\r\n              }\r\n\r\n              let creationType = ProjectItemCreationType.normal;\r\n\r\n              if (\r\n                candidateFile.content === undefined ||\r\n                candidateFile.content === \"\" ||\r\n                (typeof candidateFile.content === \"string\" &&\r\n                  candidateFile.content.indexOf(AUTOGENERATED_CONTENT_TOKEN) >= 0)\r\n              ) {\r\n                creationType = ProjectItemCreationType.generated;\r\n              }\r\n\r\n              project.ensureItemByTag(\r\n                \"jsindex\",\r\n                \"index.js\",\r\n                ProjectItemType.catalogIndexJs,\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                creationType,\r\n                candidateFile,\r\n                isInWorld\r\n              );\r\n            } else if (\r\n              projectPathLower.endsWith(\".mctp.json\") &&\r\n              folderContext === FolderContext.mctoolsWorkingFolder\r\n            ) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.mcToolsProjectPreferences,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"tasks.json\") && folderContext === FolderContext.vscodeFolder) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.vsCodeTasksJson,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"launch.json\") && folderContext === FolderContext.vscodeFolder) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.vsCodeLaunchJson,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"settings.json\") && folderContext === FolderContext.vscodeFolder) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.vsCodeSettingsJson,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"extensions.json\") && folderContext === FolderContext.vscodeFolder) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.vsCodeExtensionsJson,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"/tick.json\")) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.tickJson,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (\r\n              projectPathLower.endsWith(\"/levelname.txt\") ||\r\n              projectPathLower.endsWith(\"/current\") ||\r\n              projectPathLower.endsWith(\"/log\") ||\r\n              projectPathLower.endsWith(\"/log.old\") ||\r\n              projectPathLower.endsWith(\"/lock\") ||\r\n              projectPathLower.indexOf(\"/db/manifest\") >= 0 ||\r\n              projectPathLower.indexOf(\"/db/lost/manifest\") >= 0\r\n            ) {\r\n              // don't explicitly create an item for constituent world files at the moment\r\n            } else if (fileExtension === \"ldb\" || fileExtension === \"log\") {\r\n              // don't explicitly create an item for ldb or log files at the moment.\r\n            } else if (fileExtension === \"mcstructure\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.structure,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"mcfunction\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCFunction,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"material\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.material,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"vertex\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.materialVertex,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"md\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.markdownDocumentation,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"fragment\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.materialFragment,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"fragment\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.materialFragment,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"geometry\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.materialGeometry,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (\r\n              canonFileName === \"level.dat\" &&\r\n              fileSystemPrefix.indexOf(\".mcworld\") < 0 && // don't create a project item if we're inside of a mcworld/mctemplate since that broader item has a link already\r\n              fileSystemPrefix.indexOf(\".mctemplate\") < 0 &&\r\n              folderContext !== FolderContext.behaviorPack\r\n            ) {\r\n              isInWorld = true;\r\n              project.ensureItemByProjectPath(\r\n                folderPath,\r\n                ProjectItemStorageType.folder,\r\n                candidateFile.name,\r\n                ProjectItemType.worldFolder,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (canonFileName === \"level.dat_old\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.levelDatOld,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (canonFileName.endsWith(\".js.map\")) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.jsMap,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (canonFileName === \"just.config.ts\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.justConfigTs,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (canonFileName === \"eslint.config.mjs\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.esLintConfigMjs,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"js\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.js,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"ts\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.ts,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"mcworld\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCWorld,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (fileExtension === \"mcproject\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCProject,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (fileExtension === \"mctemplate\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCTemplate,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (fileExtension === \"mcaddon\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCAddon,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (fileExtension === \"mcpack\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCPack,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (fileExtension === \"zip\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.zip,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (\r\n              fileExtension === \"png\" ||\r\n              fileExtension === \"jpg\" ||\r\n              fileExtension === \"gif\" ||\r\n              fileExtension === \"psd\" ||\r\n              fileExtension === \"hdr\" ||\r\n              fileExtension === \"jpeg\" ||\r\n              fileExtension === \"tga\"\r\n            ) {\r\n              let imageType = ProjectItemType.image;\r\n\r\n              if (folderPathLower.indexOf(\"/marketing art/\") >= 0) {\r\n                imageType = ProjectItemType.marketingAssetImage;\r\n              } else if (folderPathLower.indexOf(\"/store art/\") >= 0) {\r\n                imageType = ProjectItemType.storeAssetImage;\r\n              } else if (folderPathLower.indexOf(\"/textures/ui/\") >= 0) {\r\n                imageType = ProjectItemType.uiTexture;\r\n              } else if (folderPathLower.indexOf(\"/design_textures/\") >= 0) {\r\n                imageType = ProjectItemType.designTexture;\r\n              } else if (folderPathLower.indexOf(\"/textures/\") >= 0 || folderContext === FolderContext.skinPack) {\r\n                imageType = ProjectItemType.texture;\r\n              } else if (baseName === \"pack_icon\" || folder.files[\"manifest.json\"]) {\r\n                imageType = ProjectItemType.packIconImage;\r\n              }\r\n\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                imageType,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (\r\n              fileExtension === \"ogg\" ||\r\n              fileExtension === \"flac\" ||\r\n              fileExtension === \"fsb\" ||\r\n              fileExtension === \"mp3\" ||\r\n              fileExtension === \"wav\"\r\n            ) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.audio,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"env\" && baseName === \"\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.env,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"lang\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.lang,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"json\") {\r\n              let newJsonType = ProjectItemType.unknownJson;\r\n              let itemName = candidateFile.name;\r\n\r\n              if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/loot_tables/\") >= 0) {\r\n                newJsonType = ProjectItemType.lootTableBehavior;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/dialogue/\") >= 0) {\r\n                newJsonType = ProjectItemType.dialogueBehaviorJson;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/recipes/\") >= 0) {\r\n                newJsonType = ProjectItemType.recipeBehavior;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/spawn_rules/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.spawnRuleBehavior;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/cameras/\") >= 0 &&\r\n                folderPathLower.indexOf(\"aim_assist_preset\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.aimAssistPresetJson;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/aim_assist/categories/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.aimAssistCategoryJson;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/aim_assist/presets/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.aimAssistPresetJson;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/behavior_trees/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.behaviorTreeJson;\r\n              } else if (folderPathLower.indexOf(\"/spawn_groups/\") >= 0) {\r\n                newJsonType = ProjectItemType.spawnGroupJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/atmospherics/\") >= 0) {\r\n                newJsonType = ProjectItemType.atmosphericsJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/point_lights/\") >= 0) {\r\n                newJsonType = ProjectItemType.pointLightsJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/color_grading/\") >= 0) {\r\n                newJsonType = ProjectItemType.colorGradingJson;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/cameras/\") >= 0) {\r\n                newJsonType = ProjectItemType.cameraBehaviorJson;\r\n              } else if (folderContext === FolderContext.resourcePack && folderPathLower.indexOf(\"/cameras/\") >= 0) {\r\n                newJsonType = ProjectItemType.cameraResourceJson;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/trading/\") >= 0) {\r\n                newJsonType = ProjectItemType.tradingBehaviorJson;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/animation_controllers/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.animationControllerBehaviorJson;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/animations/\") >= 0) {\r\n                newJsonType = ProjectItemType.animationBehaviorJson;\r\n              } else if (isResourcePack && projectPathLower.endsWith(\".texture_set.json\")) {\r\n                // Check for texture_set.json BEFORE /models/ check - texture_set files can exist in /models/ folders\r\n                // (e.g., /textures/models/armor/chain_1.texture_set.json)\r\n                newJsonType = ProjectItemType.textureSetJson;\r\n              } else if (\r\n                isResourcePack &&\r\n                !baseName.endsWith(\"index\") && // Skip index.json files - they're directory indices, not geometry\r\n                (folderPathLower.indexOf(\"/models/\") >= 0 ||\r\n                  baseName.endsWith(\".geo\") ||\r\n                  baseName.endsWith(\".geometry\"))\r\n              ) {\r\n                newJsonType = ProjectItemType.modelGeometryJson;\r\n              } else if (baseName.endsWith(\".mci\")) {\r\n                newJsonType = ProjectItemType.contentIndexJson;\r\n              } else if (baseName.endsWith(\".mcr\")) {\r\n                newJsonType = ProjectItemType.contentReportJson;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/dimension/\") >= 0) {\r\n                newJsonType = ProjectItemType.dimensionJson;\r\n              } else if (\r\n                (folderContext === FolderContext.behaviorPack || folderContext === FolderContext.unknown) &&\r\n                folderPathLower.indexOf(\"/features/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.featureBehavior;\r\n              } else if (\r\n                (folderContext === FolderContext.behaviorPack || folderContext === FolderContext.unknown) &&\r\n                folderPathLower.indexOf(\"/feature_rules/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.featureRuleBehavior;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/shapes/\") >= 0) {\r\n                newJsonType = ProjectItemType.voxelShapeBehavior;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/animation_controllers/\") >= 0) {\r\n                newJsonType = ProjectItemType.animationControllerResourceJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/animations/\") >= 0) {\r\n                newJsonType = ProjectItemType.animationResourceJson;\r\n              } else if (folderPathLower.indexOf(\"/attachables/\") >= 0) {\r\n                newJsonType = ProjectItemType.attachableResourceJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/fogs/\") >= 0) {\r\n                newJsonType = ProjectItemType.fogResourceJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/particles/\") >= 0) {\r\n                newJsonType = ProjectItemType.particleJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/render_controllers/\") >= 0) {\r\n                newJsonType = ProjectItemType.renderControllerJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/block_culling/\") >= 0) {\r\n                newJsonType = ProjectItemType.blockCulling;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                projectPathLower.indexOf(\"/item_catalog/crafting_item_catalog\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.craftingItemCatalog;\r\n              } else if (\r\n                isResourcePack &&\r\n                (projectPathLower.endsWith(\"terrain_texture.json\") ||\r\n                  projectPathLower.endsWith(\"terrain_textures.json\"))\r\n              ) {\r\n                newJsonType = ProjectItemType.terrainTextureCatalogResourceJson;\r\n              } else if (isResourcePack && projectPathLower.endsWith(\"_global_variables.json\")) {\r\n                newJsonType = ProjectItemType.globalVariablesJson;\r\n              } else if (isResourcePack && projectPathLower.endsWith(\"flipbook_textures.json\")) {\r\n                newJsonType = ProjectItemType.flipbookTexturesJson;\r\n              } else if (\r\n                isResourcePack &&\r\n                (projectPathLower.endsWith(\"item_texture.json\") || projectPathLower.endsWith(\"item_textures.json\"))\r\n              ) {\r\n                newJsonType = ProjectItemType.itemTextureJson;\r\n              } else if (baseName === \"contents\") {\r\n                newJsonType = ProjectItemType.contentsJson;\r\n              } else if (folderContext === FolderContext.skinPack && projectPathLower.endsWith(\"skins.json\")) {\r\n                newJsonType = ProjectItemType.skinCatalogJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/materials/\") >= 0) {\r\n                newJsonType = ProjectItemType.materialSetJson;\r\n              } else if (\r\n                isResourcePack &&\r\n                folderPathLower.indexOf(\"/sounds/\") >= 0 &&\r\n                baseName === \"sound_definitions\"\r\n              ) {\r\n                newJsonType = ProjectItemType.soundDefinitionCatalog;\r\n              } else if (\r\n                isResourcePack &&\r\n                folderPathLower.indexOf(\"/sounds/\") >= 0 &&\r\n                baseName === \"music_definitions\"\r\n              ) {\r\n                newJsonType = ProjectItemType.musicDefinitionJson;\r\n              } else if (folderPathLower.indexOf(\"/texts/\") >= 0 && baseName === \"languages\") {\r\n                newJsonType = ProjectItemType.languagesCatalogJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/textures/ui/\") >= 0) {\r\n                newJsonType = ProjectItemType.ninesliceJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/texture_sets/\") >= 0) {\r\n                newJsonType = ProjectItemType.textureSetJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/lighting/\") >= 0) {\r\n                newJsonType = ProjectItemType.lightingJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/point_lights/\") >= 0) {\r\n                newJsonType = ProjectItemType.lightingJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/pbr/\") >= 0) {\r\n                newJsonType = ProjectItemType.pbrJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/water/\") >= 0) {\r\n                newJsonType = ProjectItemType.waterJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/shadows/\") >= 0) {\r\n                newJsonType = ProjectItemType.shadowsJson;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/worldgen/jigsaw_structures/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.jigsawStructure;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/worldgen/structure_sets/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.jigsawStructureSet;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/worldgen/template_pools/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.jigsawTemplatePool;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/worldgen/processors/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.jigsawProcessorList;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/ui/\") >= 0) {\r\n                newJsonType = ProjectItemType.uiJson;\r\n              } else if (folderContext === FolderContext.docs && baseName === \"example_files\") {\r\n                newJsonType = ProjectItemType.fileListArrayJson;\r\n              } else if (isResourcePack && baseName === \"biomes_client\") {\r\n                newJsonType = ProjectItemType.biomesClientCatalogResource;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/biomes/\") >= 0) {\r\n                newJsonType = ProjectItemType.biomeResource;\r\n              } else if (folderPathLower.indexOf(\"/biomes/\") >= 0) {\r\n                newJsonType = ProjectItemType.biomeBehavior;\r\n              } else if (isResourcePack && baseName === \"blocks\") {\r\n                newJsonType = ProjectItemType.blocksCatalogResourceJson;\r\n              } else if (\r\n                isResourcePack &&\r\n                (projectPathLower.endsWith(\"texture_list.json\") || projectPathLower.endsWith(\"textures_list.json\"))\r\n              ) {\r\n                newJsonType = ProjectItemType.textureListJson;\r\n              } else if (isResourcePack && projectPathLower.endsWith(\"texture_set.json\")) {\r\n                newJsonType = ProjectItemType.textureSetJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/items/\") >= 0) {\r\n                newJsonType = ProjectItemType.itemTypeLegacyResource;\r\n              } else if (isResourcePack && baseName === \"sounds\") {\r\n                newJsonType = ProjectItemType.soundCatalog;\r\n              } else if (baseName === \"education\") {\r\n                newJsonType = ProjectItemType.educationJson;\r\n              } else if (baseName === \"world_behavior_packs\") {\r\n                newJsonType = ProjectItemType.behaviorPackListJson;\r\n              } else if (baseName === \"world_resource_packs\") {\r\n                newJsonType = ProjectItemType.resourcePackListJson;\r\n              } else if (baseName === \"world_behavior_pack_history\") {\r\n                newJsonType = ProjectItemType.behaviorPackHistoryListJson;\r\n              } else if (baseName === \"world_resource_pack_history\") {\r\n                newJsonType = ProjectItemType.resourcePackHistoryListJson;\r\n              } else if (baseName === \"tsconfig\") {\r\n                newJsonType = ProjectItemType.tsconfigJson;\r\n              } else if (baseName === \"docfx\") {\r\n                newJsonType = ProjectItemType.docfxJson;\r\n              } else if (baseName === \"jsdoc\") {\r\n                newJsonType = ProjectItemType.jsdocJson;\r\n              } else if (baseName === \"jsconfig\") {\r\n                newJsonType = ProjectItemType.jsconfigJson;\r\n              } else if (baseName === \"package\") {\r\n                newJsonType = ProjectItemType.packageJson;\r\n              } else if (baseName === \"package.lock\") {\r\n                newJsonType = ProjectItemType.packageLockJson;\r\n              } else if (baseName === \".prettierrc\") {\r\n                newJsonType = ProjectItemType.prettierRcJson;\r\n              } else if (folderPathLower.indexOf(\"/persona/\") >= 0) {\r\n                newJsonType = ProjectItemType.personaJson;\r\n              } else if (folderPathLower.indexOf(\"/sdl_layouts/\") >= 0) {\r\n                newJsonType = ProjectItemType.sdlLayout;\r\n              } else if (folderPathLower.indexOf(\"/renderer/\") >= 0) {\r\n                newJsonType = ProjectItemType.rendererJson;\r\n              } else if (folderPathLower.indexOf(\"/sdl_layouts/\") >= 0) {\r\n                newJsonType = ProjectItemType.sdlLayout;\r\n              } else if (baseName === \"splashes\") {\r\n                newJsonType = ProjectItemType.splashesJson;\r\n              } else if (baseName === \"loading_messages\") {\r\n                newJsonType = ProjectItemType.loadingMessagesJson;\r\n              } else if (isResourcePack && baseName === \"font_metadata\") {\r\n                newJsonType = ProjectItemType.fontMetadataJson;\r\n              } else if (isResourcePack && baseName === \"emoticons\") {\r\n                newJsonType = ProjectItemType.emoticonsJson;\r\n              } else if (folderContext === FolderContext.skinPack && baseName === \"geometry\") {\r\n                newJsonType = ProjectItemType.skinPackGeometryJson;\r\n              } else if (baseName === \"texture_backwards_compatibility_mapping\") {\r\n                newJsonType = ProjectItemType.skinPackTextureBackCompatJson;\r\n              } else if (baseName === \"uniforms\") {\r\n                newJsonType = ProjectItemType.uniformsJson;\r\n              } else if (folderContext === FolderContext.docs && baseName === \"info\") {\r\n                newJsonType = ProjectItemType.docInfoJson;\r\n                project.role = ProjectRole.documentation;\r\n\r\n                itemName = StorageUtilities.getLeafName(folderPath);\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/textures/\") >= 0) {\r\n                newJsonType = ProjectItemType.ninesliceJson;\r\n              } else if (\r\n                folderContext === FolderContext.docs &&\r\n                (baseName === \"_example_files\" || baseName === \"example_files\")\r\n              ) {\r\n                newJsonType = ProjectItemType.fileListArrayJson;\r\n                project.role = ProjectRole.documentation;\r\n\r\n                itemName = StorageUtilities.getLeafName(folderPath);\r\n              } else if (folderContext === FolderContext.typeDefs && folderPathLower.indexOf(\"/command_modules\") >= 0) {\r\n                newJsonType = ProjectItemType.commandSetDefinitionJson;\r\n                project.role = ProjectRole.documentation;\r\n              } else if (\r\n                (folderContext === FolderContext.metaData && folderPathLower.indexOf(\"/forms\") >= 0) ||\r\n                projectPathLower.endsWith(\".form.json\")\r\n              ) {\r\n                newJsonType = ProjectItemType.dataForm;\r\n                project.role = ProjectRole.meta;\r\n              } else if (folderContext === FolderContext.typeDefs && folderPathLower.indexOf(\"/script_modules\") >= 0) {\r\n                newJsonType = ProjectItemType.scriptTypesJson;\r\n                project.role = ProjectRole.documentation;\r\n              } else if (\r\n                folderContext === FolderContext.typeDefs &&\r\n                folderPathLower.indexOf(\"/vanilladata_modules\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.vanillaDataJson;\r\n                project.role = ProjectRole.documentation;\r\n              } else if (folderContext === FolderContext.typeDefs && folderPathLower.indexOf(\"/engine_modules\") >= 0) {\r\n                newJsonType = ProjectItemType.engineOrderingJson;\r\n                project.role = ProjectRole.documentation;\r\n              }\r\n              // these need to be near the bottom since URL segments like /items/, /blocks/, /entities etc. could theoretically be used in loot_tables, etc. and that should take precedence in detection\r\n              else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/items/\") >= 0) {\r\n                newJsonType = ProjectItemType.itemTypeBehavior;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/blocks/\") >= 0) {\r\n                newJsonType = ProjectItemType.blockTypeBehavior;\r\n              } else if (\r\n                isResourcePack &&\r\n                (folderPathLower.indexOf(\"/entities/\") >= 0 || folderPathLower.indexOf(\"/entity/\") >= 0)\r\n              ) {\r\n                newJsonType = ProjectItemType.entityTypeResource;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                (folderPathLower.indexOf(\"/entities/\") >= 0 || folderPathLower.indexOf(\"/entity/\") >= 0)\r\n              ) {\r\n                newJsonType = ProjectItemType.entityTypeBehavior;\r\n              }\r\n\r\n              if (newJsonType === ProjectItemType.unknownJson) {\r\n                await candidateFile.loadContent();\r\n\r\n                const storageObject = StorageUtilities.getJsonObject(candidateFile);\r\n\r\n                if (storageObject !== undefined) {\r\n                  const inferredType = ProjectUtilities.inferJsonProjectItemTypeFromContent(storageObject);\r\n\r\n                  if (inferredType !== ProjectItemType.unknownJson) {\r\n                    newJsonType = inferredType;\r\n                  }\r\n                }\r\n              }\r\n\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                itemName,\r\n                newJsonType,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else {\r\n              project.addUnknownFile(candidateFile);\r\n            }\r\n          } else if (pi && projectPath !== undefined) {\r\n            if (\r\n              pi.itemType === ProjectItemType.MCWorld ||\r\n              pi.itemType === ProjectItemType.MCProject ||\r\n              pi.itemType === ProjectItemType.MCTemplate ||\r\n              pi.itemType === ProjectItemType.MCAddon ||\r\n              pi.itemType === ProjectItemType.MCPack ||\r\n              pi.itemType === ProjectItemType.zip\r\n            ) {\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const childFolder = folder.folders[folderName];\r\n\r\n      if (childFolder && !childFolder.errorStatus) {\r\n        const name = StorageUtilities.canonicalizeName(folderName);\r\n\r\n        if (name === \"build\" || name === \"out\" || name === \"dist\") {\r\n          project.distBuildFolder = folder;\r\n        } else if (name === \"lib\") {\r\n          project.libFolder = folder;\r\n        } else if (name === \"project_item_data\" && folderContext === FolderContext.designPack) {\r\n          if (!project.projectItemAccessoryFolder) {\r\n            project.projectItemAccessoryFolder = folder;\r\n          }\r\n        } else if (\r\n          (name.startsWith(\".mct\") || name.startsWith(\".vscode\") || !name.startsWith(\".\")) && // disallow any \".\" folders, except for .mct or .vscode\r\n          name !== \"project_item_data\" &&\r\n          name !== \"node_modules\" &&\r\n          !childFolder.canIgnore &&\r\n          (folderContext !== FolderContext.unknown || depth < 4) &&\r\n          depth < 10\r\n        ) {\r\n          if (childFolder !== undefined) {\r\n            await ProjectItemInference.inferProjectItemsFromFolder(\r\n              project,\r\n              childFolder,\r\n              fileSystemPrefix,\r\n              folderContext,\r\n              variantLabel,\r\n              isInWorld,\r\n              rootFolder,\r\n              depth + 1,\r\n              source,\r\n              force,\r\n              processingCallback\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport { MinecraftFeatureBase } from \"./jsoncommon\";\r\nimport Log from \"../core/Log\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport FeatureDefinition from \"./FeatureDefinition\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\n\r\nexport default class FeatureRuleDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: MinecraftFeatureBase;\r\n\r\n  private _onLoaded = new EventDispatcher<FeatureRuleDefinition, FeatureRuleDefinition>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data || !(this._data as MinecraftFeatureBase).format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom((this._data as MinecraftFeatureBase).format_version);\r\n  }\r\n\r\n  setResourcePackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this._data) {\r\n      (this._data as MinecraftFeatureBase).format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        format_version: \"1.21.0\",\r\n      };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<FeatureRuleDefinition, FeatureRuleDefinition>) {\r\n    let fd: FeatureRuleDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      fd = new FeatureRuleDefinition();\r\n\r\n      fd.file = file;\r\n\r\n      file.manager = fd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof FeatureRuleDefinition) {\r\n      fd = file.manager as FeatureRuleDefinition;\r\n\r\n      if (!fd.isLoaded) {\r\n        if (loadHandler) {\r\n          fd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await fd.load();\r\n      }\r\n    }\r\n\r\n    return fd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._data !== null, \"ITDP\");\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    // Extract the identifier from the feature rule description\r\n    const featureRulesData = (this._data as any)?.[\"minecraft:feature_rules\"];\r\n    if (featureRulesData?.description?.identifier) {\r\n      this._id = featureRulesData.description.identifier;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  /**\r\n   * Gets the feature identifier that this feature rule places.\r\n   * Feature rules reference their target feature via description.places_feature\r\n   */\r\n  getPlacesFeatureId(): string | undefined {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const featureRulesData = (this._data as any)?.[\"minecraft:feature_rules\"];\r\n    if (featureRulesData?.description?.places_feature) {\r\n      return featureRulesData.description.places_feature;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    const placesFeatureId = this.getPlacesFeatureId();\r\n\r\n    if (!placesFeatureId) {\r\n      return;\r\n    }\r\n\r\n    let foundMatch = false;\r\n\r\n    // Use index for O(1) lookup when available\r\n    if (index) {\r\n      const matchingItems = index.getItemsById(index.featureBehaviorsById, placesFeatureId);\r\n      if (matchingItems.length > 0) {\r\n        for (const matchItem of matchingItems) {\r\n          item.addChildItem(matchItem);\r\n        }\r\n        foundMatch = true;\r\n      }\r\n    } else {\r\n      const featureItems = project.getItemsByType(ProjectItemType.featureBehavior);\r\n\r\n      // Look for the matching feature item in the project\r\n      for (const candItem of featureItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const featureDef = await FeatureDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (featureDef) {\r\n            const candFeatureId = featureDef.id;\r\n\r\n            if (candFeatureId === placesFeatureId) {\r\n              item.addChildItem(candItem);\r\n              foundMatch = true;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // If no matching feature was found, add as unfulfilled relationship\r\n    if (!foundMatch) {\r\n      const isVanilla = await Database.isVanillaToken(placesFeatureId);\r\n      item.addUnfulfilledRelationship(placesFeatureId, ProjectItemType.featureBehavior, isVanilla);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ILootTableBehavior from \"./ILootTableBehavior\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport ItemTypeDefinition from \"./ItemTypeDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class LootTableBehaviorDefinition {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public data?: ILootTableBehavior;\r\n\r\n  private _onLoaded = new EventDispatcher<LootTableBehaviorDefinition, LootTableBehaviorDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this.data === undefined) {\r\n      this.data = { pools: [] };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<LootTableBehaviorDefinition, LootTableBehaviorDefinition>\r\n  ) {\r\n    let ltb: LootTableBehaviorDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      ltb = new LootTableBehaviorDefinition();\r\n\r\n      ltb.file = file;\r\n\r\n      file.manager = ltb;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof LootTableBehaviorDefinition) {\r\n      ltb = file.manager as LootTableBehaviorDefinition;\r\n\r\n      if (!ltb.isLoaded) {\r\n        if (loadHandler) {\r\n          ltb.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await ltb.load();\r\n      }\r\n    }\r\n\r\n    return ltb;\r\n  }\r\n\r\n  getTargetItemTypeIdList() {\r\n    if (!this.data || !this.data.pools || !Array.isArray(this.data.pools)) {\r\n      return;\r\n    }\r\n\r\n    const targetItems: string[] = [];\r\n\r\n    for (const pool of this.data.pools) {\r\n      if (pool.entries && Array.isArray(pool.entries)) {\r\n        for (const entry of pool.entries) {\r\n          if (entry.type === \"item\" && entry.name) {\r\n            targetItems.push(entry.name);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return targetItems;\r\n  }\r\n\r\n  getTargetLootTablePathList() {\r\n    if (!this.data || !this.data.pools || !Array.isArray(this.data.pools)) {\r\n      return;\r\n    }\r\n\r\n    const targetLootTablePaths: string[] = [];\r\n\r\n    for (const pool of this.data.pools) {\r\n      if (pool.entries && Array.isArray(pool.entries)) {\r\n        for (const entry of pool.entries) {\r\n          if (entry.type === \"loot_table\" && entry.name) {\r\n            targetLootTablePaths.push(this.canonicalizeLootTablePath(entry.name));\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return targetLootTablePaths;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.data) {\r\n      Log.unexpectedUndefined(\"ITRDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  canonicalizeLootTablePath(lootTablePath: string) {\r\n    lootTablePath = Utilities.ensureNotStartsWithSlash(lootTablePath);\r\n\r\n    const lastPeriod = lootTablePath.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod > 0) {\r\n      lootTablePath = lootTablePath.substring(0, lastPeriod);\r\n    }\r\n\r\n    return lootTablePath.toLowerCase();\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let itemList = this.getTargetItemTypeIdList();\r\n    let lootTableList = this.getTargetLootTablePathList();\r\n\r\n    if (index) {\r\n      // Use pre-built index for O(1) lookups\r\n      if (itemList) {\r\n        for (const itemTypeId of itemList) {\r\n          if (typeof itemTypeId === \"string\") {\r\n            const matchingItems = index.getItemsById(index.itemTypesById, itemTypeId);\r\n            if (matchingItems.length > 0) {\r\n              for (const candItem of matchingItems) {\r\n                item.addChildItem(candItem);\r\n              }\r\n              itemList = Utilities.removeItemInArray(itemTypeId, itemList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // TODO: lootTablesByPath index stores by exact projectPath, but lookup needs\r\n      // endsWith() matching. Fall back to scanning for now until a suffix-based index is added.\r\n      if (lootTableList) {\r\n        const lootTableItems = project.getItemsByType(ProjectItemType.lootTableBehavior);\r\n        for (const candItem of lootTableItems) {\r\n          if (candItem.primaryFile) {\r\n            let lootTablePath = await candItem.getPackRelativePath();\r\n\r\n            if (lootTablePath) {\r\n              lootTablePath = this.canonicalizeLootTablePath(lootTablePath);\r\n              if (lootTableList.includes(lootTablePath)) {\r\n                item.addChildItem(candItem);\r\n                lootTableList = Utilities.removeItemInArray(lootTablePath, lootTableList);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      // Fallback: scan all items\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const candItem of itemsCopy) {\r\n        if (candItem.itemType === ProjectItemType.itemTypeBehavior && itemList) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const itemType = await ItemTypeDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (itemType) {\r\n              if (itemList.includes(itemType.id)) {\r\n                item.addChildItem(candItem);\r\n                itemList = Utilities.removeItemInArray(itemType.id, itemList);\r\n                continue;\r\n              }\r\n            }\r\n          }\r\n        } else if (candItem.itemType === ProjectItemType.lootTableBehavior && lootTableList) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            let lootTablePath = await candItem.getPackRelativePath();\r\n\r\n            if (lootTablePath) {\r\n              lootTablePath = this.canonicalizeLootTablePath(lootTablePath);\r\n              if (lootTableList.includes(lootTablePath)) {\r\n                item.addChildItem(candItem);\r\n                lootTableList = Utilities.removeItemInArray(lootTablePath, lootTableList);\r\n                continue;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (itemList && Array.isArray(itemList)) {\r\n      for (const itemTypeId of itemList) {\r\n        if (typeof itemTypeId === \"string\") {\r\n          const isVanilla = await Database.isVanillaToken(itemTypeId);\r\n          item.addUnfulfilledRelationship(itemTypeId, ProjectItemType.itemTypeBehavior, isVanilla);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (lootTableList && Array.isArray(lootTableList)) {\r\n      for (const lootTablePath of lootTableList) {\r\n        const isVanilla = await Database.matchesVanillaPathFromIndex(lootTablePath);\r\n        item.addUnfulfilledRelationship(lootTablePath, ProjectItemType.lootTableBehavior, isVanilla);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\nimport ISkinCatalog from \"./ISkinCatalog\";\r\n\r\nexport default class SkinCatalogDefinition {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n  private _data?: ISkinCatalog;\r\n\r\n  private _onLoaded = new EventDispatcher<SkinCatalogDefinition, SkinCatalogDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.serialize_name;\r\n  }\r\n\r\n  public get skins() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._data.skins === undefined) {\r\n      this._data.skins = [];\r\n    }\r\n\r\n    return this._data.skins;\r\n  }\r\n\r\n  public getCanonicalizedTexturesList() {\r\n    if (!this._data || !this._data.skins || !Array.isArray(this._data.skins)) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const skin of this._data.skins) {\r\n      if (skin.texture) {\r\n        const texturePath = TextureDefinition.canonicalizeTexturePath(skin.texture);\r\n\r\n        if (texturePath) {\r\n          textureList.push(texturePath);\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get skinNameList() {\r\n    if (!this._data || !this._data.skins || !Array.isArray(this._data.skins)) {\r\n      return undefined;\r\n    }\r\n\r\n    const skinNameList = [];\r\n\r\n    for (const skin of this._data.skins) {\r\n      if (skin.localization_name) {\r\n        skinNameList.push(skin.localization_name);\r\n      }\r\n    }\r\n\r\n    return skinNameList;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<SkinCatalogDefinition, SkinCatalogDefinition>) {\r\n    let et: SkinCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new SkinCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof SkinCatalogDefinition) {\r\n      et = file.manager as SkinCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  ensureData() {\r\n    if (this._data) {\r\n      return this._data;\r\n    }\r\n\r\n    this._data = {\r\n      skins: [],\r\n    };\r\n\r\n    return this._data;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"SKCDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"SSDL\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    const pack = await item.getPack();\r\n\r\n    if (!pack) {\r\n      return;\r\n    }\r\n\r\n    let packRootFolder = pack.folder;\r\n\r\n    let textureList = this.getCanonicalizedTexturesList();\r\n\r\n    for (const candItem of textureItems) {\r\n      if (packRootFolder && textureList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n            StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n          );\r\n\r\n          if (relativePath) {\r\n            if (textureList && textureList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        item.addUnfulfilledRelationship(texturePath, ProjectItemType.texture, false);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * RelationsIndex: Pre-built lookup indexes for fast project item relation resolution.\r\n *\r\n * ## Problem\r\n * Without an index, each definition's `addChildItems()` method iterates ALL items of\r\n * cross-referenced types (e.g., each entity behavior scans ALL entity resources to find\r\n * matching IDs). With ~500 entities and ~500 entity resources, this is 250K iterations\r\n * with file loading \u2014 O(n\u00B2) behavior that causes relations to take 4+ minutes on vanilla.\r\n *\r\n * ## Solution\r\n * Build ID\u2192ProjectItem[] maps in a single O(n) pass before processing relations.\r\n * Handlers then do O(1) lookups instead of O(n) scans.\r\n *\r\n * ## Indexed Types\r\n * - Entity type resources by ID (minecraft:pig \u2192 ProjectItem)\r\n * - Spawn rules by entity ID (minecraft:pig \u2192 ProjectItem)\r\n * - Entity behaviors by ID (minecraft:pig \u2192 ProjectItem)\r\n * - Attachable resources by ID\r\n * - Item types by ID\r\n * - Animations by animation ID (one file \u2192 multiple IDs)\r\n * - Animation controllers by controller ID\r\n * - Render controllers by controller ID\r\n * - Models by geometry identifier (one file \u2192 multiple identifiers)\r\n * - Loot tables by pack-relative path\r\n * - Textures by canonicalized relative path\r\n *\r\n * ## Usage\r\n * ```typescript\r\n * const index = new RelationsIndex();\r\n * await index.build(project);\r\n * // Then pass to calculateForItem\r\n * await handler.addChildItems(project, item, index);\r\n * ```\r\n */\r\n\r\nimport AnimationControllerResourceDefinition from \"../minecraft/AnimationControllerResourceDefinition\";\r\nimport AnimationResourceDefinition from \"../minecraft/AnimationResourceDefinition\";\r\nimport AttachableResourceDefinition from \"../minecraft/AttachableResourceDefinition\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport EntityTypeResourceDefinition from \"../minecraft/EntityTypeResourceDefinition\";\r\nimport FeatureDefinition from \"../minecraft/FeatureDefinition\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\nimport ModelGeometryDefinition from \"../minecraft/ModelGeometryDefinition\";\r\nimport RenderControllerSetDefinition from \"../minecraft/RenderControllerSetDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"../minecraft/SpawnRulesBehaviorDefinition\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport Project from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\n\r\n/** Batch size for parallel content loading */\r\nconst PRELOAD_BATCH_SIZE = 100;\r\n\r\nexport default class RelationsIndex {\r\n  /** Entity type resources indexed by their definition ID (e.g., \"minecraft:pig\") */\r\n  entityResourcesById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Spawn rules indexed by their entity ID (e.g., \"minecraft:pig\") */\r\n  spawnRulesById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Entity type behaviors indexed by their definition ID */\r\n  entityBehaviorsById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Attachable resources indexed by their ID */\r\n  attachablesById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Item type behaviors indexed by their ID */\r\n  itemTypesById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Feature behaviors indexed by their ID */\r\n  featureBehaviorsById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Animation resources indexed by individual animation IDs (one file can have multiple) */\r\n  animationsById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Animation controller resources indexed by individual controller IDs */\r\n  animationControllersById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Render controllers indexed by individual controller IDs */\r\n  renderControllersById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Model geometry items indexed by individual geometry identifiers */\r\n  modelsById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Loot tables indexed by canonicalized pack-relative path */\r\n  lootTablesByPath = new Map<string, ProjectItem>();\r\n\r\n  /** Whether the index has been built */\r\n  isBuilt = false;\r\n\r\n  /**\r\n   * Build all indexes from the project's items.\r\n   * Batch-loads content for all relatable item types, parses definitions,\r\n   * and populates lookup maps.\r\n   */\r\n  async build(project: Project, onProgress?: (message: string) => void): Promise<void> {\r\n    // Collect all item types that participate in relations\r\n    const typesToPreload: ProjectItemType[] = [\r\n      ProjectItemType.entityTypeBehavior,\r\n      ProjectItemType.entityTypeResource,\r\n      ProjectItemType.spawnRuleBehavior,\r\n      ProjectItemType.attachableResourceJson,\r\n      ProjectItemType.itemTypeBehavior,\r\n      ProjectItemType.featureBehavior,\r\n      ProjectItemType.animationResourceJson,\r\n      ProjectItemType.animationControllerResourceJson,\r\n      ProjectItemType.renderControllerJson,\r\n      ProjectItemType.modelGeometryJson,\r\n      ProjectItemType.lootTableBehavior,\r\n    ];\r\n\r\n    // Phase 1: Batch-load all file contents in parallel chunks\r\n    const allItems: ProjectItem[] = [];\r\n    for (const itemType of typesToPreload) {\r\n      const items = project.getItemsByType(itemType);\r\n      allItems.push(...items);\r\n    }\r\n\r\n    if (onProgress) {\r\n      onProgress(`Pre-loading ${allItems.length} items for relations...`);\r\n    }\r\n\r\n    // Load content in batches to avoid overwhelming I/O.\r\n    // PRELOAD_BATCH_SIZE is a fixed constant rather than dynamic based on hardware\r\n    // because the bottleneck is file I/O (disk and network storage), not CPU or memory.\r\n    // 100 concurrent loads is a reasonable ceiling for any system.\r\n    for (let i = 0; i < allItems.length; i += PRELOAD_BATCH_SIZE) {\r\n      const batch = allItems.slice(i, i + PRELOAD_BATCH_SIZE);\r\n\r\n      await Promise.all(\r\n        batch.map(async (item) => {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n          // Also resolve file storage for ensureOnFile\r\n          await item.ensureStorage();\r\n        })\r\n      );\r\n    }\r\n\r\n    if (onProgress) {\r\n      onProgress(`Building relation indexes...`);\r\n    }\r\n\r\n    // Phase 2: Parse definitions and build indexes.\r\n    // Each method reads from a distinct item type and writes to a distinct map,\r\n    // so they can safely run in parallel via Promise.all().\r\n    await Promise.all([\r\n      this._indexEntityResources(project),\r\n      this._indexSpawnRules(project),\r\n      this._indexEntityBehaviors(project),\r\n      this._indexAttachables(project),\r\n      this._indexItemTypes(project),\r\n      this._indexFeatureBehaviors(project),\r\n      this._indexAnimations(project),\r\n      this._indexAnimationControllers(project),\r\n      this._indexRenderControllers(project),\r\n      this._indexModels(project),\r\n      this._indexLootTables(project),\r\n    ]);\r\n    // Note: textures are not indexed here because they require pack-root-relative\r\n    // path resolution that varies per handler. Handlers fall back to getItemsByType().\r\n\r\n    this.isBuilt = true;\r\n  }\r\n\r\n  private static readonly EMPTY_ITEMS: ProjectItem[] = [];\r\n\r\n  /** Look up items in a map, returning empty array if not found */\r\n  getItemsById(map: Map<string, ProjectItem[]>, id: string): ProjectItem[] {\r\n    return map.get(id) || RelationsIndex.EMPTY_ITEMS;\r\n  }\r\n\r\n  /**\r\n   * Add unique child items from the index to a parent item.\r\n   * Deduplicates when multiple IDs in `idList` resolve to the same ProjectItem.\r\n   * Returns the set of IDs from `idList` that were successfully matched, so callers\r\n   * can determine which IDs remain unfulfilled.\r\n   */\r\n  addUniqueChildItems(parentItem: ProjectItem, indexMap: Map<string, ProjectItem[]>, idList: string[]): Set<string> {\r\n    const addedItems = new Set<ProjectItem>();\r\n    const matchedIds = new Set<string>();\r\n    for (const id of idList) {\r\n      const matchingItems = this.getItemsById(indexMap, id);\r\n      if (matchingItems.length > 0) {\r\n        matchedIds.add(id);\r\n      }\r\n      for (const candItem of matchingItems) {\r\n        if (!addedItems.has(candItem)) {\r\n          addedItems.add(candItem);\r\n          parentItem.addChildItem(candItem);\r\n        }\r\n      }\r\n    }\r\n    return matchedIds;\r\n  }\r\n\r\n  private _addToIndex(map: Map<string, ProjectItem[]>, key: string, item: ProjectItem): void {\r\n    let arr = map.get(key);\r\n    if (!arr) {\r\n      arr = [];\r\n      map.set(key, arr);\r\n    }\r\n    arr.push(item);\r\n  }\r\n\r\n  private async _indexEntityResources(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await EntityTypeResourceDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.entityResourcesById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexSpawnRules(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.spawnRuleBehavior);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await SpawnRulesBehaviorDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.spawnRulesById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexEntityBehaviors(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.entityTypeBehavior);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await EntityTypeDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.entityBehaviorsById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexAttachables(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.attachableResourceJson);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await AttachableResourceDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.attachablesById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexItemTypes(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.itemTypeBehavior);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await ItemTypeDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.itemTypesById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexAnimations(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.animationResourceJson);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await AnimationResourceDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.idList) {\r\n          for (const id of def.idList) {\r\n            this._addToIndex(this.animationsById, id, item);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexAnimationControllers(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.animationControllerResourceJson);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await AnimationControllerResourceDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.idList) {\r\n          for (const id of def.idList) {\r\n            this._addToIndex(this.animationControllersById, id, item);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexRenderControllers(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.renderControllerJson);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await RenderControllerSetDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.idList) {\r\n          for (const id of def.idList) {\r\n            this._addToIndex(this.renderControllersById, id, item);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexModels(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.modelGeometryJson);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await ModelGeometryDefinition.ensureOnFile(item.primaryFile);\r\n        if (def) {\r\n          for (const id of def.identifiers) {\r\n            this._addToIndex(this.modelsById, id, item);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexLootTables(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.lootTableBehavior);\r\n    for (const item of items) {\r\n      if (item.projectPath) {\r\n        this.lootTablesByPath.set(item.projectPath, item);\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexFeatureBehaviors(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.featureBehavior);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await FeatureDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.featureBehaviorsById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport AttachableResourceDefinition from \"../minecraft/AttachableResourceDefinition\";\r\nimport BiomeBehaviorDefinition from \"../minecraft/BiomeBehaviorDefinition\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport EntityTypeResourceDefinition from \"../minecraft/EntityTypeResourceDefinition\";\r\nimport FeatureDefinition from \"../minecraft/FeatureDefinition\";\r\nimport FeatureRuleDefinition from \"../minecraft/FeatureRuleDefinition\";\r\nimport FlipbookTextureCatalogDefinition from \"../minecraft/FlipbookTextureCatalogDefinition\";\r\nimport ItemTextureCatalogDefinition from \"../minecraft/ItemTextureCatalogDefinition\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\nimport JigsawProcessorListDefinition from \"../minecraft/JigsawProcessorListDefinition\";\r\nimport JigsawStructureDefinition from \"../minecraft/JigsawStructureDefinition\";\r\nimport JigsawStructureSetDefinition from \"../minecraft/JigsawStructureSetDefinition\";\r\nimport JigsawTemplatePoolDefinition from \"../minecraft/JigsawTemplatePoolDefinition\";\r\nimport JsonUIResourceDefinition from \"../minecraft/JsonUIResourceDefinition\";\r\nimport LootTableBehaviorDefinition from \"../minecraft/LootTableBehaviorDefinition\";\r\nimport MusicDefinitionCatalogDefinition from \"../minecraft/MusicDefinitionCatalogDefinition\";\r\nimport ParticleEffectResourceDefinition from \"../minecraft/ParticleEffectResourceDefinition\";\r\nimport RecipeBehaviorDefinition from \"../minecraft/RecipeBehaviorDefinition\";\r\nimport SkinCatalogDefinition from \"../minecraft/SkinCatalogDefinition\";\r\nimport SoundCatalogDefinition from \"../minecraft/SoundCatalogDefinition\";\r\nimport SoundDefinitionCatalogDefinition from \"../minecraft/SoundDefinitionCatalogDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"../minecraft/SpawnRulesBehaviorDefinition\";\r\nimport TerrainTextureCatalogDefinition from \"../minecraft/TerrainTextureCatalogDefinition\";\r\nimport TextureDefinition from \"../minecraft/TextureDefinition\";\r\nimport TextureSetDefinition from \"../minecraft/TextureSetDefinition\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport Project from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport RelationsIndex from \"./RelationsIndex\";\r\nimport Log from \"../core/Log\";\r\n\r\ninterface IDefinitionHandler {\r\n  addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex): Promise<void>;\r\n}\r\n\r\ntype EnsureOnFileMethod<T> = (file: any) => Promise<T | undefined>;\r\n\r\nconst ITEM_TYPE_CONFIG = new Map<ProjectItemType, { ensureOnFile: EnsureOnFileMethod<IDefinitionHandler> }>([\r\n  [ProjectItemType.entityTypeBehavior, EntityTypeDefinition],\r\n  [ProjectItemType.itemTypeBehavior, ItemTypeDefinition],\r\n  [ProjectItemType.blockTypeBehavior, BlockTypeDefinition],\r\n  [ProjectItemType.entityTypeResource, EntityTypeResourceDefinition],\r\n  [ProjectItemType.skinCatalogJson, SkinCatalogDefinition],\r\n  [ProjectItemType.lootTableBehavior, LootTableBehaviorDefinition],\r\n  [ProjectItemType.particleJson, ParticleEffectResourceDefinition],\r\n  [ProjectItemType.uiJson, JsonUIResourceDefinition],\r\n  [ProjectItemType.attachableResourceJson, AttachableResourceDefinition],\r\n  [ProjectItemType.itemTextureJson, ItemTextureCatalogDefinition],\r\n  [ProjectItemType.terrainTextureCatalogResourceJson, TerrainTextureCatalogDefinition],\r\n  [ProjectItemType.soundDefinitionCatalog, SoundDefinitionCatalogDefinition],\r\n  [ProjectItemType.musicDefinitionJson, MusicDefinitionCatalogDefinition],\r\n  [ProjectItemType.soundCatalog, SoundCatalogDefinition],\r\n  [ProjectItemType.recipeBehavior, RecipeBehaviorDefinition],\r\n  [ProjectItemType.spawnRuleBehavior, SpawnRulesBehaviorDefinition],\r\n  [ProjectItemType.jigsawStructureSet, JigsawStructureSetDefinition],\r\n  [ProjectItemType.jigsawStructure, JigsawStructureDefinition],\r\n  [ProjectItemType.jigsawTemplatePool, JigsawTemplatePoolDefinition],\r\n  [ProjectItemType.jigsawProcessorList, JigsawProcessorListDefinition],\r\n  [ProjectItemType.flipbookTexturesJson, FlipbookTextureCatalogDefinition],\r\n  [ProjectItemType.textureSetJson, TextureSetDefinition],\r\n  [ProjectItemType.texture, TextureDefinition],\r\n  [ProjectItemType.biomeBehavior, BiomeBehaviorDefinition],\r\n  [ProjectItemType.featureBehavior, FeatureDefinition],\r\n  [ProjectItemType.featureRuleBehavior, FeatureRuleDefinition],\r\n]);\r\n\r\nexport type RelationsProgressCallback = (message: string, percent?: number) => void;\r\n\r\nexport default class ProjectItemRelations {\r\n  static clearDependencies(project: Project) {\r\n    ProjectItemRelations.clearDependenciesForItems(project.getItemsCopy());\r\n  }\r\n\r\n  static clearDependenciesForItems(items: ProjectItem[]) {\r\n    // clear all existing relations\r\n    for (const item of items) {\r\n      item.childItems = undefined;\r\n      item.parentItems = undefined;\r\n    }\r\n  }\r\n\r\n  static async calculate(project: Project, onProgress?: RelationsProgressCallback) {\r\n    const items = project.getItemsCopy();\r\n\r\n    // clear all existing relations\r\n    for (const item of items) {\r\n      item.childItems = undefined;\r\n      item.parentItems = undefined;\r\n    }\r\n\r\n    // Only process items that have relation handlers - skip the rest\r\n    const itemsToProcess = items.filter((item) => ITEM_TYPE_CONFIG.has(item.itemType));\r\n    const totalItems = itemsToProcess.length;\r\n\r\n    if (totalItems === 0) {\r\n      return;\r\n    }\r\n\r\n    // Pre-build the relations index for O(1) lookups instead of O(n\u00B2) scanning\r\n    const index = new RelationsIndex();\r\n    if (onProgress) {\r\n      onProgress(\"Building relations index...\", 0);\r\n    }\r\n    const indexStartTime = Date.now();\r\n    await index.build(project);\r\n    const indexBuildTime = Date.now() - indexStartTime;\r\n    Log.verbose(\r\n      `[RelationsIndex] Index built in ${indexBuildTime}ms, isBuilt=${index.isBuilt}, entityResources=${index.entityResourcesById.size}, animations=${index.animationsById.size}, models=${index.modelsById.size}`\r\n    );\r\n\r\n    // Report progress at most ~20 times total (every 5% of progress)\r\n    const progressInterval = Math.max(100, Math.floor(totalItems / 20));\r\n    let lastReportedPercent = -1;\r\n\r\n    const processStartTime = Date.now();\r\n    for (let i = 0; i < itemsToProcess.length; i++) {\r\n      const item = itemsToProcess[i];\r\n      await this.calculateForItem(item, index);\r\n\r\n      // Report progress only when percent changes by at least 5%\r\n      if (onProgress && (i % progressInterval === 0 || i === totalItems - 1)) {\r\n        const percent = Math.floor((i / totalItems) * 100);\r\n        if (percent !== lastReportedPercent) {\r\n          lastReportedPercent = percent;\r\n          onProgress(`Calculating relations... (${percent}%)`, percent);\r\n        }\r\n      }\r\n    }\r\n    const processTime = Date.now() - processStartTime;\r\n    Log.verbose(\r\n      `[RelationsIndex] Relations processing completed in ${processTime}ms for ${itemsToProcess.length} items`\r\n    );\r\n\r\n    project.computeIsVanillaEditSession();\r\n  }\r\n\r\n  static async calculateForItems(items: ProjectItem[], onProgress?: RelationsProgressCallback) {\r\n    // Only process items that have relation handlers\r\n    const itemsToProcess = items.filter((item) => ITEM_TYPE_CONFIG.has(item.itemType));\r\n    const totalItems = itemsToProcess.length;\r\n\r\n    if (totalItems === 0) {\r\n      return;\r\n    }\r\n\r\n    // Pre-build the relations index if we have enough items to justify the overhead\r\n    let index: RelationsIndex | undefined;\r\n    if (itemsToProcess.length > 0 && itemsToProcess[0].project) {\r\n      index = new RelationsIndex();\r\n      if (onProgress) {\r\n        onProgress(\"Building relations index...\", 0);\r\n      }\r\n      await index.build(itemsToProcess[0].project);\r\n    }\r\n\r\n    // Report progress at most ~20 times total\r\n    const progressInterval = Math.max(100, Math.floor(totalItems / 20));\r\n    let lastReportedPercent = -1;\r\n\r\n    for (let i = 0; i < itemsToProcess.length; i++) {\r\n      const item = itemsToProcess[i];\r\n      await this.calculateForItem(item, index);\r\n\r\n      // Report progress only when percent changes\r\n      if (onProgress && (i % progressInterval === 0 || i === totalItems - 1)) {\r\n        const percent = Math.floor((i / totalItems) * 100);\r\n        if (percent !== lastReportedPercent) {\r\n          lastReportedPercent = percent;\r\n          onProgress(`Calculating relations... (${percent}%)`, percent);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async calculateForItem(item: ProjectItem, index?: RelationsIndex) {\r\n    const project = item.project;\r\n\r\n    const handlerClass = ITEM_TYPE_CONFIG.get(item.itemType);\r\n\r\n    if (handlerClass) {\r\n      await item.ensureStorage();\r\n\r\n      if (item.primaryFile) {\r\n        const handler = await handlerClass.ensureOnFile(item.primaryFile);\r\n\r\n        if (handler) {\r\n          await handler.addChildItems(project, item, index);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async deleteLinksFromParents(item: ProjectItem) {\r\n    if (!item.parentItems || item.parentItems.length === 0) {\r\n      return;\r\n    }\r\n\r\n    for (const rel of item.parentItems) {\r\n      if (rel.parentItem && rel.childItem) {\r\n        if (rel.parentItem.itemType === ProjectItemType.entityTypeResource) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (rel.parentItem.primaryFile) {\r\n            const entityTypeResource = await EntityTypeResourceDefinition.ensureOnFile(rel.parentItem.primaryFile);\r\n\r\n            if (entityTypeResource) {\r\n              await entityTypeResource.deleteLinkToChild(rel);\r\n            }\r\n          }\r\n        } else if (rel.parentItem.itemType === ProjectItemType.particleJson) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (rel.parentItem.primaryFile) {\r\n            const particleResource = await ParticleEffectResourceDefinition.ensureOnFile(rel.parentItem.primaryFile);\r\n\r\n            if (particleResource) {\r\n              await particleResource.deleteLinkToChild(rel);\r\n            }\r\n          }\r\n        } else if (rel.parentItem.itemType === ProjectItemType.attachableResourceJson) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (rel.parentItem.primaryFile) {\r\n            const attachableResource = await AttachableResourceDefinition.ensureOnFile(rel.parentItem.primaryFile);\r\n\r\n            if (attachableResource) {\r\n              await attachableResource.deleteLinkToChild(rel);\r\n            }\r\n          }\r\n        } else if (rel.parentItem.itemType === ProjectItemType.soundCatalog) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (rel.parentItem.primaryFile) {\r\n            const soundCat = await SoundDefinitionCatalogDefinition.ensureOnFile(rel.parentItem.primaryFile);\r\n\r\n            if (soundCat) {\r\n              await soundCat.deleteLinkToChild(rel.childItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    await this.calculate(item.project);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport MinecraftDefinitions from \"../minecraft/MinecraftDefinitions\";\r\nimport ModelDesignUtilities from \"../minecraft/ModelDesignUtilities\";\r\nimport HttpStorage from \"../storage/HttpStorage\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport CreatorToolsHost from \"./CreatorToolsHost\";\r\nimport IGalleryItem, { GalleryItemType } from \"./IGalleryItem\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport Project, { FolderContext } from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport ProjectItemInference from \"./ProjectItemInference\";\r\nimport ProjectItemUtilities from \"./ProjectItemUtilities\";\r\nimport { NewEntityTypeAddMode } from \"./ProjectUtilities\";\r\n\r\nexport const STANDARD_NAME_TOKEN = \"_name_\";\r\n\r\nexport const MATERIAL_NAMES_TO_FIXUP = [\r\n  \"cold\",\r\n  \"warm\",\r\n  \"body\",\r\n  \"head\",\r\n  \"legs\",\r\n  \"eyes\",\r\n  \"flower\",\r\n  \"charging\",\r\n  \"masked\",\r\n  \"bioluminescent_layer\",\r\n  \"armor\",\r\n  \"charged\",\r\n  \"ghost\",\r\n  \"cape\",\r\n  \"body_layer\",\r\n  \"outer\",\r\n  \"animated\",\r\n  \"spectator\",\r\n  \"overlay\",\r\n  \"limbs\",\r\n  \"breeze_eyes\",\r\n  \"breeze_wind\",\r\n  \"invisible\",\r\n];\r\n\r\nexport default class ProjectCreateManager {\r\n  /**\r\n   * Checks whether a name already exists in the project for the given item type.\r\n   * Comparison is case-insensitive and normalizes underscores/spaces/hyphens.\r\n   * Also handles file extensions (e.g., \"frost_moose.behavior\" matches \"frost_moose\").\r\n   */\r\n  static nameExistsInProject(project: Project, name: string, itemType: ProjectItemType): boolean {\r\n    const normalized = name.toLowerCase().replace(/[- ]/g, \"_\");\r\n    const items = project.getItemsByType(itemType);\r\n\r\n    for (const item of items) {\r\n      const itemName = item.name.toLowerCase().replace(/[- ]/g, \"_\");\r\n      if (\r\n        itemName === normalized ||\r\n        itemName.startsWith(normalized + \".\") ||\r\n        itemName === normalized + \".json\" ||\r\n        itemName === normalized + \".behavior\"\r\n      ) {\r\n        return true;\r\n      }\r\n\r\n      // Also compare after stripping common extensions from item name\r\n      const dotIndex = itemName.indexOf(\".\");\r\n      if (dotIndex > 0) {\r\n        const baseName = itemName.substring(0, dotIndex);\r\n        if (baseName === normalized) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Generates a unique name for a new item by appending \" 2\", \" 3\", etc. if the\r\n   * base name already exists in the project.\r\n   */\r\n  static getUniqueName(project: Project, baseName: string, itemType: ProjectItemType): string {\r\n    if (!ProjectCreateManager.nameExistsInProject(project, baseName, itemType)) {\r\n      return baseName;\r\n    }\r\n\r\n    for (let i = 2; i < 100; i++) {\r\n      const candidate = baseName + \" \" + i;\r\n      if (!ProjectCreateManager.nameExistsInProject(project, candidate, itemType)) {\r\n        return candidate;\r\n      }\r\n    }\r\n\r\n    return baseName + \" \" + Date.now();\r\n  }\r\n\r\n  /**\r\n   * Maps a ProjectItemType to the corresponding GalleryItemType for entity/block/item.\r\n   */\r\n  static galleryItemTypeForProjectItemType(itemType: ProjectItemType): GalleryItemType | undefined {\r\n    switch (itemType) {\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return GalleryItemType.entityType;\r\n      case ProjectItemType.blockTypeBehavior:\r\n        return GalleryItemType.blockType;\r\n      case ProjectItemType.itemTypeBehavior:\r\n        return GalleryItemType.itemType;\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Collects the file paths (project-relative) for all related files of a project item,\r\n   * using the relationship graph built by project.processRelations().\r\n   * Returns paths relative to the project root (e.g., \"behavior_packs/mypack_bp/entities/zombie.json\").\r\n   */\r\n  static collectRelatedFilePaths(item: ProjectItem): string[] {\r\n    const descendants = ProjectItemUtilities.collectAllDescendantItems(item);\r\n    const paths: string[] = [];\r\n\r\n    for (const descendant of descendants) {\r\n      if (descendant.projectPath) {\r\n        paths.push(descendant.projectPath);\r\n      }\r\n    }\r\n\r\n    Log.debug(\r\n      `[ProjectCreateManager] collectRelatedFilePaths for '${item.name}': ` +\r\n        `${descendants.length} descendants, ${paths.length} paths` +\r\n        (paths.length > 0 ? \": \" + paths.join(\", \") : \"\") +\r\n        ` (childItems: ${item.childItems ? item.childItems.length : \"undefined\"})`\r\n    );\r\n\r\n    return paths;\r\n  }\r\n\r\n  /**\r\n   * Extracts the short identifier from a project item's name. For entities/blocks/items,\r\n   * this is the base name without any file extensions or suffixes like .behavior, .entity, .geo.\r\n   * E.g., \"biceson.behavior.json\" \u2192 \"biceson\", \"frost_moose.json\" \u2192 \"frost_moose\".\r\n   */\r\n  static getShortIdFromProjectItem(item: ProjectItem): string {\r\n    if (item.projectPath) {\r\n      let leaf = StorageUtilities.getLeafName(item.projectPath);\r\n\r\n      // Strip ALL dot-suffixes to get the bare entity/block/item name.\r\n      // Entity files have compound extensions like .behavior.json, .entity.json, .geo.json.\r\n      // We want just the base name (e.g., \"biceson\" from \"biceson.behavior.json\").\r\n      const firstDot = leaf.indexOf(\".\");\r\n      if (firstDot > 0) {\r\n        leaf = leaf.substring(0, firstDot);\r\n      }\r\n\r\n      if (leaf) {\r\n        return leaf.toLowerCase().replace(/[- ]/g, \"_\");\r\n      }\r\n    }\r\n\r\n    const name = item.name;\r\n    // Also strip dot-suffixes from the name\r\n    const firstDot = name.indexOf(\".\");\r\n    if (firstDot > 0) {\r\n      return name.substring(0, firstDot).toLowerCase().replace(/[- ]/g, \"_\");\r\n    }\r\n\r\n    return name.toLowerCase().replace(/[- ]/g, \"_\");\r\n  }\r\n\r\n  /**\r\n   * Builds an IGalleryItem from an existing ProjectItem in the current project.\r\n   * This allows project items to be displayed in the same gallery UI as vanilla items\r\n   * and fed into the same copy pipeline.\r\n   */\r\n  static buildGalleryItemFromProjectItem(item: ProjectItem, project: Project): IGalleryItem {\r\n    const galleryType = ProjectCreateManager.galleryItemTypeForProjectItemType(item.itemType);\r\n    const shortId = ProjectCreateManager.getShortIdFromProjectItem(item);\r\n    const friendlyName = Utilities.humanifyMinecraftName(shortId) as string;\r\n\r\n    // Prefer the rendered 3D model snapshot (cachedThumbnail) which is propagated\r\n    // up from geometry items to entity RP and entity BP items by ProjectWorkerManager.\r\n    let thumbnailDataUrl: string | undefined = item.cachedThumbnail;\r\n\r\n    // Fall back to the item's own imageUrl (which also checks cachedThumbnail internally)\r\n    if (!thumbnailDataUrl) {\r\n      thumbnailDataUrl = item.imageUrl;\r\n    }\r\n\r\n    // Skip expensive descendant traversal at gallery-build time.\r\n    // The file list is rebuilt fresh at copy time via _resolveProjectItemFilePaths.\r\n\r\n    return {\r\n      gitHubOwner: \"\",\r\n      gitHubRepoName: \"\",\r\n      thumbnailImage: \"\",\r\n      localLogo: thumbnailDataUrl,\r\n      title: friendlyName,\r\n      description: \"Project \" + ProjectItemUtilities.getDescriptionForType(item.itemType).toLowerCase(),\r\n      type: galleryType ?? GalleryItemType.entityType,\r\n      id: shortId,\r\n      nameReplacers: [shortId],\r\n      fileList: [],\r\n      isProjectItem: true,\r\n      tags: [\"project\"],\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Returns an array of IGalleryItem adapters for all project items of a given gallery type.\r\n   * Used to populate the \"Your Project\" section in the template picker.\r\n   */\r\n  static getProjectItemsAsGalleryItems(project: Project, galleryType: GalleryItemType): IGalleryItem[] {\r\n    let projectItemType: ProjectItemType;\r\n\r\n    switch (galleryType) {\r\n      case GalleryItemType.entityType:\r\n        projectItemType = ProjectItemType.entityTypeBehavior;\r\n        break;\r\n      case GalleryItemType.blockType:\r\n        projectItemType = ProjectItemType.blockTypeBehavior;\r\n        break;\r\n      case GalleryItemType.itemType:\r\n        projectItemType = ProjectItemType.itemTypeBehavior;\r\n        break;\r\n      default:\r\n        return [];\r\n    }\r\n\r\n    const items = project.getItemsByType(projectItemType);\r\n    const galleryItems: IGalleryItem[] = [];\r\n\r\n    for (const item of items) {\r\n      // Skip vanilla/accessory items \u2014 only include items from the project's own packs.\r\n      // Items loaded from accessory folders have source starting with \"o.\"\r\n      if (item.source && item.source.startsWith(\"o.\")) {\r\n        continue;\r\n      }\r\n\r\n      galleryItems.push(ProjectCreateManager.buildGalleryItemFromProjectItem(item, project));\r\n    }\r\n\r\n    return galleryItems;\r\n  }\r\n\r\n  /**\r\n   * Discovers newly created files by re-scanning only the project's BP and RP folders,\r\n   * rather than the entire project tree. This prevents OOM on large projects (21K+ items).\r\n   */\r\n  private static async _inferNewItems(project: Project) {\r\n    const projectFolder = project.projectFolder;\r\n    if (!projectFolder) {\r\n      return;\r\n    }\r\n\r\n    const bpFolder = project.defaultBehaviorPackFolder;\r\n    const rpFolder = project.defaultResourcePackFolder;\r\n\r\n    if (bpFolder) {\r\n      await ProjectItemInference.inferProjectItemsFromFolder(\r\n        project,\r\n        bpFolder,\r\n        \"\",\r\n        FolderContext.behaviorPack,\r\n        undefined,\r\n        false,\r\n        projectFolder,\r\n        0,\r\n        undefined,\r\n        true // force re-scan this folder\r\n      );\r\n    }\r\n\r\n    if (rpFolder) {\r\n      await ProjectItemInference.inferProjectItemsFromFolder(\r\n        project,\r\n        rpFolder,\r\n        \"\",\r\n        FolderContext.resourcePack,\r\n        undefined,\r\n        false,\r\n        projectFolder,\r\n        0,\r\n        undefined,\r\n        true // force re-scan this folder\r\n      );\r\n    }\r\n  }\r\n\r\n  static async addEntityTypeFromGallery(\r\n    project: Project,\r\n    entityTypeProject: IGalleryItem,\r\n    entityTypeName?: string,\r\n    addMode?: NewEntityTypeAddMode,\r\n    messageUpdater?: (message: string) => Promise<void>,\r\n    dontOverwriteExistingFiles?: boolean\r\n  ) {\r\n    await ProjectCreateManager.copyGalleryPackFilesAndFixupIds(\r\n      project,\r\n      entityTypeProject,\r\n      entityTypeName,\r\n      messageUpdater,\r\n      dontOverwriteExistingFiles\r\n    );\r\n\r\n    // Discover the newly created files without re-scanning the entire project\r\n    await ProjectCreateManager._inferNewItems(project);\r\n\r\n    // Set runtimeIdentifier on the newly created entity\r\n    if (!entityTypeProject.isProjectItem) {\r\n      // For vanilla gallery items, scan for the new entity and set its runtimeIdentifier\r\n      const items = project.getItemsCopy();\r\n\r\n      for (const item of items) {\r\n        if (item.itemType === ProjectItemType.entityTypeBehavior) {\r\n          let minecraftEntityType = (await MinecraftDefinitions.get(item)) as EntityTypeDefinition | undefined;\r\n\r\n          if (minecraftEntityType) {\r\n            const targetId = entityTypeName ? entityTypeName : entityTypeProject.id;\r\n\r\n            if (minecraftEntityType.id?.endsWith(targetId)) {\r\n              minecraftEntityType.runtimeIdentifier = entityTypeProject.targetRuntimeIdentifier\r\n                ? entityTypeProject.targetRuntimeIdentifier\r\n                : \"minecraft:\" + entityTypeProject.id;\r\n\r\n              minecraftEntityType.persist();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    // For project items, runtimeIdentifier is already correct from the content copy.\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static getReplacedCreationData(project: Project, galleryItem: IGalleryItem, newName: string) {\r\n    if (galleryItem.creationData === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    try {\r\n      let creationDataStr = JSON.stringify(galleryItem.creationData);\r\n\r\n      creationDataStr = this.replaceNamesInContent(creationDataStr, project, galleryItem, newName, []);\r\n\r\n      return JSON.parse(creationDataStr);\r\n    } catch (e) {\r\n      return galleryItem.creationData;\r\n    }\r\n  }\r\n\r\n  static getReplacedCreationDataInObject(project: Project, creationObject: object, newName: string) {\r\n    if (creationObject === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    try {\r\n      let creationDataStr = JSON.stringify(creationObject);\r\n\r\n      creationDataStr = this.replaceNamesInContentFromReplacers(\r\n        creationDataStr,\r\n        project,\r\n        [STANDARD_NAME_TOKEN],\r\n        newName,\r\n        []\r\n      );\r\n\r\n      return JSON.parse(creationDataStr);\r\n    } catch (e) {\r\n      return creationObject;\r\n    }\r\n  }\r\n  static async addBlockTypeFromGallery(project: Project, blockTypeProject: IGalleryItem, blockTypeName?: string) {\r\n    blockTypeName = await ProjectCreateManager.copyGalleryPackFilesAndFixupIds(\r\n      project,\r\n      blockTypeProject,\r\n      blockTypeName\r\n    );\r\n\r\n    await ProjectCreateManager._inferNewItems(project);\r\n\r\n    const blockTypeItem = ProjectItemUtilities.getItemByTypeAndName(\r\n      project,\r\n      blockTypeName,\r\n      ProjectItemType.blockTypeBehavior\r\n    );\r\n\r\n    if (blockTypeItem) {\r\n      if (!blockTypeItem.isContentLoaded) {\r\n        await blockTypeItem.loadContent();\r\n      }\r\n\r\n      if (blockTypeItem.primaryFile) {\r\n        const blockType = await BlockTypeDefinition.ensureOnFile(blockTypeItem.primaryFile);\r\n\r\n        const creationData = this.getReplacedCreationData(project, blockTypeProject, blockTypeName);\r\n\r\n        if (blockType) {\r\n          await blockType.ensureBlockAndTerrainLinks(project, creationData);\r\n        }\r\n      }\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static async addItemTypeFromGallery(project: Project, itemTypeProject: IGalleryItem, itemTypeName?: string) {\r\n    await ProjectCreateManager.copyGalleryPackFilesAndFixupIds(project, itemTypeProject, itemTypeName);\r\n\r\n    await ProjectCreateManager._inferNewItems(project);\r\n\r\n    await project.save();\r\n  }\r\n\r\n  /**\r\n   * Adds a model design template to a project.\r\n   * Creates both a .model.json file and the exported .geo.json + texture.png in the resource pack.\r\n   * @param project The project to add the model design to\r\n   * @param modelDesignItem The gallery item containing the model design template info\r\n   * @param modelName The name for the new model\r\n   */\r\n  static async addModelDesignFromGallery(\r\n    project: Project,\r\n    modelDesignItem: IGalleryItem,\r\n    modelName?: string\r\n  ): Promise<void> {\r\n    if (!modelName) {\r\n      modelName = modelDesignItem.id;\r\n    }\r\n\r\n    // Get the model template from the gallery item\r\n    // The template ID is stored in the gallery item's id field\r\n    const templateId = modelDesignItem.id;\r\n    const modelDesign = await Database.ensureModelTemplateLoaded(templateId);\r\n\r\n    if (!modelDesign) {\r\n      Log.fail(`Could not load model template: ${templateId}`);\r\n      return;\r\n    }\r\n\r\n    // Clone the design and update the identifier with the new name\r\n    const designCopy = JSON.parse(JSON.stringify(modelDesign));\r\n    designCopy.identifier = modelName;\r\n\r\n    // Ensure we have a resource pack\r\n    const rpFolder = await project.ensureDefaultResourcePackFolder();\r\n    if (!rpFolder) {\r\n      Log.fail(\"Could not ensure resource pack folder for model design\");\r\n      return;\r\n    }\r\n\r\n    // Create the model templates folder and save the model design JSON\r\n    const modelTemplatesFolder = rpFolder.ensureFolder(\"model_templates\");\r\n    await modelTemplatesFolder.ensureExists();\r\n\r\n    const modelJsonFile = modelTemplatesFolder.ensureFile(modelName + \".model.json\");\r\n    modelJsonFile.setContent(JSON.stringify(designCopy, null, 2));\r\n    await modelJsonFile.saveContent();\r\n\r\n    // Convert to geometry\r\n    const conversionResult = ModelDesignUtilities.convertToGeometry(designCopy);\r\n\r\n    if (conversionResult.geometry) {\r\n      // Create the models folder and save geometry\r\n      const modelsFolder = rpFolder.ensureFolder(\"models\");\r\n      await modelsFolder.ensureExists();\r\n      const entitiesFolder = modelsFolder.ensureFolder(\"entities\");\r\n      await entitiesFolder.ensureExists();\r\n\r\n      const geoFile = entitiesFolder.ensureFile(modelName + \".geo.json\");\r\n      geoFile.setContent(JSON.stringify(conversionResult.geometry, null, 2));\r\n      await geoFile.saveContent();\r\n    }\r\n\r\n    // Note: Texture generation requires platform-specific code (ImageGenerationUtilities)\r\n    // The model design JSON file in model_templates/ contains all the texture info\r\n    // and can be used to regenerate textures using the MCP tools or export commands.\r\n\r\n    await project.inferProjectItemsFromFiles(true);\r\n    await project.save();\r\n  }\r\n\r\n  static async copyGalleryPackFilesAndFixupIds(\r\n    project: Project,\r\n    galleryProject: IGalleryItem,\r\n    newTypeName?: string,\r\n    messagerUpdater?: (message: string) => Promise<void>,\r\n    dontOverwriteExistingFiles?: boolean\r\n  ): Promise<string> {\r\n    const files = galleryProject.fileList;\r\n\r\n    if (newTypeName === undefined) {\r\n      newTypeName = galleryProject.id;\r\n    }\r\n\r\n    if (files === undefined) {\r\n      Log.unexpectedUndefined(\"AETFLS\");\r\n      return newTypeName;\r\n    }\r\n\r\n    let sourceBpFolder = undefined;\r\n    let sourceRpFolder = undefined;\r\n\r\n    // Project-local source: filePaths are project-relative, read from project's own folders.\r\n    // Rebuild the file list fresh from the relationship graph since it may have been\r\n    // stale when the gallery item was constructed (processRelations uses setTimeout batching\r\n    // in the browser, so the fileList built at dialog-open time may be incomplete).\r\n    if (galleryProject.isProjectItem) {\r\n      // Find the source ProjectItem by matching the gallery item's id against project items\r\n      const freshFilePaths = await ProjectCreateManager._resolveProjectItemFilePaths(project, galleryProject);\r\n\r\n      return ProjectCreateManager._copyProjectItemFiles(\r\n        project,\r\n        galleryProject,\r\n        freshFilePaths.length > 0 ? freshFilePaths : files,\r\n        newTypeName,\r\n        messagerUpdater,\r\n        dontOverwriteExistingFiles\r\n      );\r\n    } else if (galleryProject.gitHubRepoName === \"bedrock-samples\") {\r\n      sourceBpFolder = await Database.getReleaseVanillaBehaviorPackFolder();\r\n      sourceRpFolder = await Database.getReleaseVanillaResourcePackFolder();\r\n    } else {\r\n      // Map GitHub repo names to local folder names. When samples are downloaded\r\n      // during preparedevenv, the zip's root folder is renamed via the\r\n      // \"replaceFirstFolderWith\" field in reslist/*.resources.json. The local\r\n      // folder name doesn't match the \"{repoName}-{branch}\" pattern that GitHub\r\n      // uses, so we need an explicit mapping here.\r\n      const repoFolderMap: Record<string, string> = {\r\n        \"minecraft-samples\": \"samples\",\r\n        \"minecraft-gametests\": \"gametests\",\r\n        \"minecraft-scripting-samples\": \"script-samples\",\r\n      };\r\n\r\n      const repoFolder =\r\n        repoFolderMap[galleryProject.gitHubRepoName] ||\r\n        galleryProject.gitHubRepoName + \"-\" + (galleryProject.gitHubBranch ? galleryProject.gitHubBranch : \"main\");\r\n\r\n      const relativePath =\r\n        \"res/samples/\" +\r\n        Utilities.ensureEndsWithSlash(galleryProject.gitHubOwner) +\r\n        Utilities.ensureEndsWithSlash(repoFolder) +\r\n        (galleryProject.gitHubFolder ? Utilities.ensureNotStartsWithSlash(galleryProject.gitHubFolder) : \"\");\r\n\r\n      let rootFolder: IFolder | undefined;\r\n\r\n      // Prefer local storage (CLI/Electron) over HTTP to avoid 404s on static hosts\r\n      // that don't serve directory indexes.\r\n      if (Database.local) {\r\n        const storage = Database.local.createStorage(relativePath);\r\n        if (storage) {\r\n          const candidateFolder = storage.rootFolder;\r\n          await candidateFolder.load();\r\n\r\n          // Only use local storage if it actually contains the expected content;\r\n          // otherwise fall back to HTTP.\r\n          if (candidateFolder.folders[\"behavior_packs\"] && candidateFolder.folders[\"resource_packs\"]) {\r\n            rootFolder = candidateFolder;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!rootFolder) {\r\n        const url = Utilities.ensureEndsWithSlash(CreatorToolsHost.getVanillaContentRoot()) + relativePath;\r\n        const gh = HttpStorage.get(url);\r\n        rootFolder = gh.rootFolder;\r\n      }\r\n\r\n      if (!rootFolder.isLoaded) {\r\n        await rootFolder.load();\r\n      }\r\n\r\n      const bps = rootFolder.folders[\"behavior_packs\"];\r\n      const rps = rootFolder.folders[\"resource_packs\"];\r\n\r\n      if (!bps || !rps) {\r\n        Log.unexpectedUndefined(\"AETFLT\");\r\n        return newTypeName;\r\n      }\r\n\r\n      if (!rps.isLoaded) {\r\n        await rps.load();\r\n      }\r\n\r\n      if (!bps.isLoaded) {\r\n        await bps.load();\r\n      }\r\n\r\n      if (rps.folderCount < 1 || bps.folderCount < 1) {\r\n        Log.unexpectedUndefined(\"AETFLY\");\r\n        return newTypeName;\r\n      }\r\n\r\n      sourceBpFolder = bps.getFolderByIndex(0);\r\n      sourceRpFolder = rps.getFolderByIndex(0);\r\n    }\r\n\r\n    const targetBpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n    const targetRpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    if (\r\n      !sourceBpFolder ||\r\n      !sourceRpFolder ||\r\n      !sourceBpFolder ||\r\n      !sourceRpFolder ||\r\n      !targetBpFolder ||\r\n      !targetRpFolder\r\n    ) {\r\n      Log.unexpectedUndefined(\"AETVA\");\r\n      return newTypeName;\r\n    }\r\n\r\n    // note: '\"identifier\"', was in this list for entity types, but was removed.\r\n    let contentReplacements = ['\"materials\"'];\r\n\r\n    for (const filePath of files) {\r\n      if (filePath.startsWith(\"/behavior_pack\")) {\r\n        let subPath = undefined;\r\n\r\n        if (filePath.startsWith(\"/behavior_pack/\")) {\r\n          subPath = filePath.substring(14);\r\n        } else {\r\n          const nextSlash = filePath.indexOf(\"/\", 16);\r\n\r\n          if (nextSlash < 0) {\r\n            Log.unexpectedUndefined(\"AETVB\");\r\n            return newTypeName;\r\n          }\r\n\r\n          subPath = filePath.substring(nextSlash);\r\n        }\r\n\r\n        const targetPath = ProjectCreateManager.replaceNamesInPath(subPath, project, galleryProject, newTypeName);\r\n\r\n        const sourceFile = await sourceBpFolder.getFileFromRelativePath(subPath);\r\n\r\n        if (!sourceFile) {\r\n          Log.debugAlert(\"Could not find file '\" + subPath + \"'  (GPFFIA)\");\r\n        } else {\r\n          const targetFile = await targetBpFolder.ensureFileFromRelativePath(targetPath);\r\n          let update = true;\r\n\r\n          if (dontOverwriteExistingFiles) {\r\n            const targetExists = await targetFile.exists();\r\n\r\n            if (targetExists) {\r\n              update = false;\r\n            }\r\n          }\r\n\r\n          if (update) {\r\n            if (!sourceFile.isContentLoaded) {\r\n              await sourceFile.loadContent();\r\n            }\r\n\r\n            let content = sourceFile.content;\r\n\r\n            if (typeof content === \"string\") {\r\n              content = ProjectCreateManager.replaceNamesInContent(\r\n                content,\r\n                project,\r\n                galleryProject,\r\n                newTypeName,\r\n                contentReplacements\r\n              );\r\n            }\r\n\r\n            if (content !== null) {\r\n              if (messagerUpdater) {\r\n                messagerUpdater(\"Updating '\" + targetFile.fullPath + \"'\");\r\n              }\r\n\r\n              targetFile.setContent(content);\r\n            }\r\n          }\r\n        }\r\n      } else if (filePath.startsWith(\"/resource_pack\")) {\r\n        let subPath = undefined;\r\n\r\n        if (filePath.startsWith(\"/resource_pack/\")) {\r\n          subPath = filePath.substring(14);\r\n        } else {\r\n          const nextSlash = filePath.indexOf(\"/\", 16);\r\n\r\n          if (nextSlash < 0) {\r\n            Log.unexpectedUndefined(\"AETVC\");\r\n            return newTypeName;\r\n          }\r\n\r\n          subPath = filePath.substring(nextSlash);\r\n        }\r\n\r\n        const targetPath = ProjectCreateManager.replaceNamesInPath(subPath, project, galleryProject, newTypeName);\r\n\r\n        if (subPath.indexOf(\"cow.v2.render_controllers\") >= 0) {\r\n          subPath = subPath.replace(\"cow.v2.render_controllers\", \"cow.v2.render_controllres\"); // misspelling in source\r\n        }\r\n\r\n        const sourceFile = await sourceRpFolder.getFileFromRelativePath(subPath);\r\n\r\n        if (!sourceFile) {\r\n          Log.debugAlert(\"Could not find file '\" + subPath + \"' (GPFFIB)\");\r\n        } else {\r\n          const targetFile = await targetRpFolder.ensureFileFromRelativePath(targetPath);\r\n          let update = true;\r\n\r\n          if (update) {\r\n            if (dontOverwriteExistingFiles) {\r\n              const targetExists = await targetFile.exists();\r\n\r\n              if (targetExists) {\r\n                update = false;\r\n              }\r\n            }\r\n\r\n            if (!sourceFile.isContentLoaded) {\r\n              await sourceFile.loadContent();\r\n            }\r\n\r\n            let content = sourceFile.content;\r\n\r\n            if (typeof content === \"string\") {\r\n              content = ProjectCreateManager.replaceNamesInContent(\r\n                content,\r\n                project,\r\n                galleryProject,\r\n                newTypeName,\r\n                contentReplacements\r\n              );\r\n            }\r\n\r\n            if (content !== null) {\r\n              if (messagerUpdater) {\r\n                messagerUpdater(\"Updating '\" + targetFile.fullPath + \"'\");\r\n              }\r\n\r\n              targetFile.setContent(content);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return newTypeName;\r\n  }\r\n\r\n  /**\r\n   * Resolves the complete file list for a project item at copy time by finding the\r\n   * source ProjectItem, ensuring its content and relations are loaded, and collecting\r\n   * all descendant file paths. This avoids stale file lists from dialog-open time.\r\n   */\r\n  private static async _resolveProjectItemFilePaths(project: Project, galleryProject: IGalleryItem): Promise<string[]> {\r\n    const sourceId = galleryProject.id;\r\n\r\n    // Map gallery type to project item type\r\n    let itemType: ProjectItemType;\r\n    switch (galleryProject.type) {\r\n      case GalleryItemType.entityType:\r\n        itemType = ProjectItemType.entityTypeBehavior;\r\n        break;\r\n      case GalleryItemType.blockType:\r\n        itemType = ProjectItemType.blockTypeBehavior;\r\n        break;\r\n      case GalleryItemType.itemType:\r\n        itemType = ProjectItemType.itemTypeBehavior;\r\n        break;\r\n      default:\r\n        return [];\r\n    }\r\n\r\n    // Find the source item by matching the short ID against project items\r\n    const candidates = project.getItemsByType(itemType);\r\n    let sourceItem: ProjectItem | undefined;\r\n\r\n    for (const item of candidates) {\r\n      const shortId = ProjectCreateManager.getShortIdFromProjectItem(item);\r\n      if (shortId === sourceId) {\r\n        sourceItem = item;\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (!sourceItem) {\r\n      Log.debug(`[ProjectCreateManager] Could not find source project item for '${sourceId}'`);\r\n      return [];\r\n    }\r\n\r\n    // Check if relations are already built (from worker pipeline or previous processRelations call).\r\n    // If so, just traverse the existing relationship graph \u2014 no expensive rebuild needed.\r\n    if (sourceItem.childItems && sourceItem.childItems.length > 0) {\r\n      const filePaths = ProjectCreateManager.collectRelatedFilePaths(sourceItem);\r\n      Log.debug(`[ProjectCreateManager] Resolved ${filePaths.length} files using existing relations for '${sourceId}'`);\r\n      return filePaths;\r\n    }\r\n\r\n    // Do a targeted relations calculation for just the source item and its children.\r\n    // This is fast even for large projects since we only process a handful of items,\r\n    // rather than waiting for the full project processRelations (which can take minutes for 21K+ items).\r\n    Log.debug(`[ProjectCreateManager] Doing targeted relations calculation for '${sourceId}'`);\r\n\r\n    // Ensure content is loaded for the source item\r\n    if (!sourceItem.isContentLoaded) {\r\n      await sourceItem.loadContent();\r\n    }\r\n\r\n    const { default: ProjectItemRelations } = await import(\"./ProjectItemRelations\");\r\n    await ProjectItemRelations.calculateForItem(sourceItem);\r\n\r\n    // The entity BP's addChildItems finds entity RP items. Now process those children too.\r\n    if (sourceItem.childItems) {\r\n      for (const rel of sourceItem.childItems) {\r\n        if (rel.childItem) {\r\n          await ProjectItemRelations.calculateForItem(rel.childItem);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Now collect related file paths\r\n    const filePaths = ProjectCreateManager.collectRelatedFilePaths(sourceItem);\r\n\r\n    Log.debug(\r\n      `[ProjectCreateManager] Resolved ${filePaths.length} files via targeted calculation for '${sourceId}': ${filePaths.join(\", \")}`\r\n    );\r\n\r\n    return filePaths;\r\n  }\r\n\r\n  /**\r\n   * Copies files from the current project (project-item source) to new locations in the same project\r\n   * with renamed IDs. Used when creating a new entity/block/item based on an existing one in the project.\r\n   *\r\n   * filePaths are project-relative (e.g., \"behavior_packs/mypack_bp/entities/zombie.json\").\r\n   * For each file, we determine whether it's in a BP or RP folder, extract the sub-path within\r\n   * that pack, apply name replacements, and write to the project's default BP or RP folder.\r\n   */\r\n  private static async _copyProjectItemFiles(\r\n    project: Project,\r\n    galleryProject: IGalleryItem,\r\n    filePaths: string[],\r\n    newTypeName: string,\r\n    messagerUpdater?: (message: string) => Promise<void>,\r\n    dontOverwriteExistingFiles?: boolean\r\n  ): Promise<string> {\r\n    const projectFolder = project.projectFolder;\r\n\r\n    Log.debug(\r\n      `[ProjectCreateManager] _copyProjectItemFiles: copying ${filePaths.length} files for '${galleryProject.id}' \u2192 '${newTypeName}'`\r\n    );\r\n\r\n    if (!projectFolder) {\r\n      Log.unexpectedUndefined(\"CPIF_PF\");\r\n      return newTypeName;\r\n    }\r\n\r\n    const defaultBpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n    const defaultRpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    if (!defaultBpFolder || !defaultRpFolder) {\r\n      Log.unexpectedUndefined(\"CPIF_TR\");\r\n      return newTypeName;\r\n    }\r\n\r\n    const contentReplacements = ['\"materials\"'];\r\n\r\n    // Detect source pack folders from the file paths so we write to the same pack.\r\n    // If we can find the source BP/RP pack folder, use it as target; otherwise fall back to defaults.\r\n    let targetBpFolder = defaultBpFolder;\r\n    let targetRpFolder = defaultRpFolder;\r\n\r\n    for (const fp of filePaths) {\r\n      const norm = fp.replace(/\\\\/g, \"/\");\r\n      const bpFolderMatch = norm.match(/^\\/?(behavior_packs?)\\/([^/]+)\\//i);\r\n      const rpFolderMatch = norm.match(/^\\/?(resource_packs?)\\/([^/]+)\\//i);\r\n      // Also detect base-packs layout: /base-packs/vanilla/behavior/...\r\n      const altBpFolderMatch = !bpFolderMatch\r\n        ? norm.match(/^\\/?((?:base-packs|experimental-packs)\\/[^/]+)\\/behavior\\//i)\r\n        : null;\r\n      const altRpFolderMatch = !rpFolderMatch\r\n        ? norm.match(/^\\/?((?:base-packs|experimental-packs)\\/[^/]+)\\/resource\\//i)\r\n        : null;\r\n\r\n      if (bpFolderMatch && targetBpFolder === defaultBpFolder) {\r\n        const packName = bpFolderMatch[2];\r\n        const bpContainer = projectFolder.folders[\"behavior_packs\"] || projectFolder.folders[\"behavior_pack\"];\r\n        if (bpContainer) {\r\n          const packFolder = bpContainer.folders[packName];\r\n          if (packFolder) {\r\n            targetBpFolder = packFolder;\r\n            Log.debug(`[ProjectCreateManager] Using source BP pack folder: ${packName}`);\r\n          }\r\n        }\r\n      } else if (altBpFolderMatch && targetBpFolder === defaultBpFolder) {\r\n        // For base-packs layout, resolve the behavior subfolder as the BP target\r\n        const basePath = altBpFolderMatch[1]; // e.g., \"base-packs/vanilla\"\r\n        const behaviorFolder = await projectFolder.getFolderFromRelativePath(\"/\" + basePath + \"/behavior\");\r\n        if (behaviorFolder) {\r\n          targetBpFolder = behaviorFolder;\r\n          Log.debug(`[ProjectCreateManager] Using base-packs BP folder: ${basePath}/behavior`);\r\n        }\r\n      }\r\n\r\n      if (rpFolderMatch && targetRpFolder === defaultRpFolder) {\r\n        const packName = rpFolderMatch[2];\r\n        const rpContainer = projectFolder.folders[\"resource_packs\"] || projectFolder.folders[\"resource_pack\"];\r\n        if (rpContainer) {\r\n          const packFolder = rpContainer.folders[packName];\r\n          if (packFolder) {\r\n            targetRpFolder = packFolder;\r\n            Log.debug(`[ProjectCreateManager] Using source RP pack folder: ${packName}`);\r\n          }\r\n        }\r\n      } else if (altRpFolderMatch && targetRpFolder === defaultRpFolder) {\r\n        const basePath = altRpFolderMatch[1];\r\n        const resourceFolder = await projectFolder.getFolderFromRelativePath(\"/\" + basePath + \"/resource\");\r\n        if (resourceFolder) {\r\n          targetRpFolder = resourceFolder;\r\n          Log.debug(`[ProjectCreateManager] Using base-packs RP folder: ${basePath}/resource`);\r\n        }\r\n      }\r\n    }\r\n\r\n    // We need to classify each file path as BP or RP and extract its sub-path within the pack.\r\n    // Project-relative paths look like \"behavior_packs/mypack_bp/entities/zombie.json\"\r\n    // or \"resource_packs/mypack_rp/entity/zombie.entity.json\".\r\n    for (const filePath of filePaths) {\r\n      let normalizedPath = filePath.replace(/\\\\/g, \"/\");\r\n\r\n      // Ensure the path starts with / for getFileFromRelativePath\r\n      if (!normalizedPath.startsWith(\"/\")) {\r\n        normalizedPath = \"/\" + normalizedPath;\r\n      }\r\n\r\n      let isBp = false;\r\n      let isRp = false;\r\n      let subPath: string | undefined;\r\n\r\n      // Determine if this is a BP or RP file and extract the sub-path within the pack.\r\n      // Handles multiple path formats:\r\n      //   /behavior_packs/mypack_bp/entities/agent.json  (standard project layout)\r\n      //   /base-packs/vanilla/behavior/entities/agent.json  (vanilla/sample project layout)\r\n      //   /resource_packs/mypack_rp/entity/agent.entity.json\r\n      //   /base-packs/vanilla/resource/entity/agent.entity.json\r\n      const bpMatch = normalizedPath.match(/^\\/?(behavior_packs?)\\/[^/]+\\/(.*)/i);\r\n      const rpMatch = normalizedPath.match(/^\\/?(resource_packs?)\\/[^/]+\\/(.*)/i);\r\n      // Also match paths like /base-packs/vanilla/behavior/... or /experimental-packs/.../behavior/...\r\n      const altBpMatch = !bpMatch ? normalizedPath.match(/\\/behavior\\/(.*)/i) : null;\r\n      const altRpMatch = !rpMatch ? normalizedPath.match(/\\/resource\\/(.*)/i) : null;\r\n\r\n      if (bpMatch) {\r\n        isBp = true;\r\n        subPath = \"/\" + bpMatch[2];\r\n      } else if (rpMatch) {\r\n        isRp = true;\r\n        subPath = \"/\" + rpMatch[2];\r\n      } else if (altBpMatch) {\r\n        isBp = true;\r\n        subPath = \"/\" + altBpMatch[1];\r\n      } else if (altRpMatch) {\r\n        isRp = true;\r\n        subPath = \"/\" + altRpMatch[1];\r\n      }\r\n\r\n      if (!subPath || (!isBp && !isRp)) {\r\n        Log.debug(\"Skipping non-pack file in project item copy: \" + filePath);\r\n        continue;\r\n      }\r\n\r\n      const targetPath = ProjectCreateManager.replaceNamesInPath(subPath, project, galleryProject, newTypeName);\r\n      const targetFolder = isBp ? targetBpFolder : targetRpFolder;\r\n\r\n      const sourceFile = await projectFolder.getFileFromRelativePath(normalizedPath);\r\n\r\n      if (!sourceFile) {\r\n        Log.debugAlert(\"Could not find project file '\" + normalizedPath + \"' (CPIF_SF)\");\r\n        continue;\r\n      }\r\n\r\n      Log.debug(`[ProjectCreateManager] Copying: ${normalizedPath} \u2192 ${targetPath} (${isBp ? \"BP\" : \"RP\"})`);\r\n\r\n      const targetFile = await targetFolder.ensureFileFromRelativePath(targetPath);\r\n      let update = true;\r\n\r\n      if (dontOverwriteExistingFiles) {\r\n        const targetExists = await targetFile.exists();\r\n        if (targetExists) {\r\n          update = false;\r\n        }\r\n      }\r\n\r\n      if (update) {\r\n        if (!sourceFile.isContentLoaded) {\r\n          await sourceFile.loadContent();\r\n        }\r\n\r\n        let content = sourceFile.content;\r\n\r\n        if (typeof content === \"string\") {\r\n          content = ProjectCreateManager.replaceNamesInContent(\r\n            content,\r\n            project,\r\n            galleryProject,\r\n            newTypeName,\r\n            contentReplacements\r\n          );\r\n        }\r\n\r\n        if (content !== null) {\r\n          if (messagerUpdater) {\r\n            messagerUpdater(\"Updating '\" + targetFile.fullPath + \"'\");\r\n          }\r\n\r\n          targetFile.setContent(content);\r\n        }\r\n      }\r\n    }\r\n\r\n    return newTypeName;\r\n  }\r\n\r\n  static replaceNamesInPath(path: string, project: Project, galleryProject: IGalleryItem, newName: string) {\r\n    let pathReplacers = galleryProject.nameReplacers;\r\n\r\n    if (!pathReplacers) {\r\n      pathReplacers = [galleryProject.id];\r\n    }\r\n\r\n    newName = newName.toLowerCase();\r\n    newName = newName.replace(/[- ]/g, \"_\");\r\n\r\n    const tempName = Utilities.createRandomId(10);\r\n\r\n    for (const pathReplacer of pathReplacers) {\r\n      path = Utilities.replaceAll(path, \"/\" + pathReplacer + \".\", \"/\" + tempName + \".\");\r\n      path = Utilities.replaceAll(path, \"\\\\\" + pathReplacer + \".\", \"\\\\\" + tempName + \".\");\r\n      path = Utilities.replaceAll(path, \"/\" + pathReplacer + \"/\", \"/\" + tempName + \"/\");\r\n      path = Utilities.replaceAll(path, \"\\\\\" + pathReplacer + \"\\\\\", \"\\\\\" + tempName + \"\\\\\");\r\n      path = Utilities.replaceAll(path, \"\\\\\" + pathReplacer + \"_\", \"\\\\\" + tempName + \"_\");\r\n      path = Utilities.replaceAll(path, \"/\" + pathReplacer + \"_\", \"/\" + tempName + \"_\");\r\n\r\n      path = Utilities.replaceAll(path, \"/\" + pathReplacer + \"_ico.\", \"/\" + tempName + \"_ico.\");\r\n      path = Utilities.replaceAll(path, \"\\\\\" + pathReplacer + \"_ico.\", \"\\\\\" + tempName + \"_ico.\");\r\n      path = Utilities.replaceAll(path, \"/\" + pathReplacer + \"_ico/\", \"/\" + tempName + \"_ico/\");\r\n      path = Utilities.replaceAll(path, \"\\\\\" + pathReplacer + \"_ico\\\\\", \"\\\\\" + tempName + \"_ico\\\\\");\r\n    }\r\n\r\n    path = Utilities.replaceAll(path, tempName, newName);\r\n\r\n    return path;\r\n  }\r\n\r\n  static replaceNamesInContent(\r\n    content: string,\r\n    project: Project,\r\n    galleryProject: IGalleryItem,\r\n    newName: string,\r\n    replaceAllExclusions: string[]\r\n  ) {\r\n    let replacers = galleryProject.nameReplacers;\r\n\r\n    if (!replacers) {\r\n      replacers = [galleryProject.id];\r\n    }\r\n\r\n    // copy & extend\r\n    replacers = replacers.slice();\r\n    replacers.push(STANDARD_NAME_TOKEN);\r\n\r\n    return this.replaceNamesInContentFromReplacers(content, project, replacers, newName, replaceAllExclusions);\r\n  }\r\n\r\n  static replaceNamesInContentFromReplacers(\r\n    content: string,\r\n    project: Project,\r\n    replacers: string[],\r\n    newName: string,\r\n    replaceAllExclusions: string[]\r\n  ) {\r\n    newName = newName.toLowerCase();\r\n    newName = newName.replace(/-/g, \"_\");\r\n    newName = newName.replace(/ /g, \"_\");\r\n\r\n    const tempName = Utilities.createRandomLowerId(10);\r\n\r\n    for (const replacer of replacers) {\r\n      content = Utilities.replaceAll(\r\n        content,\r\n        \"minecraft:\" + replacer,\r\n        project.effectiveDefaultNamespace + \":\" + tempName\r\n      );\r\n\r\n      content = Utilities.replaceAll(content, \"demo:\" + replacer, project.effectiveDefaultNamespace + \":\" + tempName);\r\n      content = Utilities.replaceAll(\r\n        content,\r\n        \"starter:\" + replacer,\r\n        project.effectiveDefaultNamespace + \":\" + tempName\r\n      );\r\n      content = Utilities.replaceAll(content, \"sample:\" + replacer, project.effectiveDefaultNamespace + \":\" + tempName);\r\n\r\n      content = Utilities.replaceAllExceptInLines(content, \":\" + replacer, \":\" + tempName, replaceAllExclusions);\r\n\r\n      content = Utilities.replaceAllExceptInLines(content, \"/\" + replacer, \"/\" + tempName, replaceAllExclusions);\r\n\r\n      content = Utilities.replaceAllExceptInLines(content, \".\" + replacer, \".\" + tempName, replaceAllExclusions);\r\n\r\n      content = Utilities.replaceAllExceptInLines(content, replacer + \"_\", tempName + \"_\", replaceAllExclusions);\r\n\r\n      content = Utilities.replaceAllExceptInLines(\r\n        content,\r\n        '\"' + replacer + '\"',\r\n        '\"' + tempName + '\"',\r\n        replaceAllExclusions\r\n      );\r\n\r\n      for (const materialName of MATERIAL_NAMES_TO_FIXUP) {\r\n        content = Utilities.replaceAll(content, materialName + '\": \"' + tempName, materialName + '\": \"' + replacer);\r\n      }\r\n    }\r\n\r\n    content = Utilities.replaceAll(content, tempName, newName);\r\n\r\n    return content;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Project, { FolderContext } from \"./Project\";\r\nimport ProjectContent from \"./ProjectContent\";\r\nimport { ProjectScriptLanguage } from \"./IProjectData\";\r\nimport { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport StorageUtilities from \"./../storage/StorageUtilities\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport IProjectItemSeed from \"./IProjectItemSeed\";\r\nimport ProjectItemUtilities from \"./ProjectItemUtilities\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport ProjectAutogeneration from \"./ProjectAutogeneration\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport Database from \"../minecraft/Database\";\r\nimport Log from \"../core/Log\";\r\nimport SoundDefinitionCatalogDefinition from \"../minecraft/SoundDefinitionCatalogDefinition\";\r\nimport SoundCatalogDefinition from \"../minecraft/SoundCatalogDefinition\";\r\nimport IFile from \"../storage/IFile\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport IGalleryItem, { GalleryItemType } from \"./IGalleryItem\";\r\nimport { NewEntityTypeAddMode } from \"./ProjectUtilities\";\r\nimport ImageEditsDefinition from \"../design/ImageEditsDefinition\";\r\nimport IImageEdits from \"../design/IImageEdits\";\r\nimport ProjectCreateManager from \"./ProjectCreateManager\";\r\n\r\n/// Does create operations for project items.\r\n\r\nexport default class ProjectItemCreateManager {\r\n  private static async _getDefaultBehaviorPackPath(project: Project) {\r\n    const bpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const defaultPath = bpFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  private static async _getDefaultBehaviorPackFolderPath(project: Project, name: string) {\r\n    const bpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const subfolder = bpFolder.ensureFolder(name);\r\n    await subfolder.ensureExists();\r\n\r\n    const defaultPath = subfolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  private static async _getDefaultDesignPackFolderPath(project: Project, name: string) {\r\n    const dpFolder = await project.ensureDefaultDesignPackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const subfolder = dpFolder.ensureFolder(name);\r\n    await subfolder.ensureExists();\r\n\r\n    const defaultPath = subfolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  private static async _getDefaultResourcePackPath(project: Project) {\r\n    const rpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const defaultPath = rpFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  private static async _getDefaultResourcePackFolderPath(project: Project, name: string) {\r\n    const rpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const subfolder = rpFolder.ensureFolder(name);\r\n    await subfolder.ensureExists();\r\n\r\n    const defaultPath = subfolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  private static async _getDefaultScriptsFolderPath(project: Project) {\r\n    const scriptsFolder = await project.ensureMainScriptsFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const defaultPath = scriptsFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  static async createNewItem(project: Project, itemSeed: IProjectItemSeed): Promise<ProjectItem | undefined> {\r\n    if (itemSeed.name === \"\" || itemSeed.name === undefined) {\r\n      itemSeed.name = ProjectItemUtilities.getNewItemName(itemSeed.itemType);\r\n    }\r\n    let creationData = itemSeed.creationData;\r\n\r\n    if (creationData) {\r\n      creationData = ProjectCreateManager.getReplacedCreationDataInObject(project, creationData, itemSeed.name);\r\n    }\r\n\r\n    if (itemSeed.itemType) {\r\n      switch (itemSeed.itemType) {\r\n        case ProjectItemType.js:\r\n        case ProjectItemType.ts:\r\n          return ProjectItemCreateManager.createNewScript(project, itemSeed.itemType, itemSeed.name, itemSeed.folder);\r\n\r\n        case ProjectItemType.dataForm:\r\n          return ProjectItemCreateManager.createNewForm(project, itemSeed.name, itemSeed.folder);\r\n\r\n        case ProjectItemType.audio:\r\n          return ProjectItemCreateManager.createNewAudio(project, itemSeed.name, itemSeed.folder);\r\n\r\n        case ProjectItemType.texture:\r\n          return ProjectItemCreateManager.createNewTexture(project, itemSeed.name, itemSeed.folder);\r\n\r\n        case ProjectItemType.designTexture:\r\n          return ProjectItemCreateManager.createNewDesignTexture(project, itemSeed.name, itemSeed.folder, creationData);\r\n      }\r\n    }\r\n\r\n    if (ProjectItemUtilities.isBehaviorRelated(itemSeed.itemType)) {\r\n      return await ProjectItemCreateManager.createBehaviorPackJsonItem(project, itemSeed);\r\n    } else if (ProjectItemUtilities.isResourceRelated(itemSeed.itemType)) {\r\n      return await ProjectItemCreateManager.createResourcePackJsonItem(project, itemSeed);\r\n    } else if (ProjectItemUtilities.isDesignRelated(itemSeed.itemType)) {\r\n      return await ProjectItemCreateManager.createDesignPackJsonItem(project, itemSeed);\r\n    }\r\n\r\n    Log.error(\"No creation handler for item type: \" + itemSeed.itemType);\r\n    return undefined;\r\n  }\r\n\r\n  static async createNewScript(project: Project, itemType: ProjectItemType, name: string, folder: IFolder | undefined) {\r\n    let defaultPath = undefined;\r\n\r\n    if (folder && project.projectFolder) {\r\n      defaultPath = folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      defaultPath = await ProjectItemCreateManager._getDefaultScriptsFolderPath(project);\r\n    }\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      name,\r\n      itemType === ProjectItemType.js ? \"js\" : \"ts\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemType === ProjectItemType.js ? ProjectItemType.js : ProjectItemType.ts,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const baseName = StorageUtilities.getBaseFromName(file.name);\r\n\r\n      if (project.preferredScriptLanguage === ProjectScriptLanguage.typeScript) {\r\n        file.setContent(ProjectContent.getEmptyTypeScript(project.name, baseName));\r\n      } else {\r\n        file.setContent(ProjectContent.getEmptyJavaScript(project.name, baseName));\r\n      }\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async _generateFolderNameForNewItem(project: Project, basePath: string, baseName: string) {\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    let index = 0;\r\n\r\n    let candidateFolderPath = \"\";\r\n    let finalPathPrefix = \"\";\r\n    const projectFolder = project.projectFolder;\r\n    let candidateFolder = null;\r\n\r\n    let hash = basePath.indexOf(\"#\");\r\n    let targetFolder = projectFolder;\r\n\r\n    while (hash > 0) {\r\n      // dig into container files if needed.\r\n      let containerFilePath = basePath.substring(0, hash);\r\n      basePath = basePath.substring(hash + 1);\r\n      hash = basePath.indexOf(\"#\");\r\n\r\n      if (containerFilePath.startsWith(targetFolder.fullPath)) {\r\n        containerFilePath = containerFilePath.substring(targetFolder.fullPath.length);\r\n      }\r\n\r\n      finalPathPrefix += containerFilePath + \"#\";\r\n\r\n      const containerFile = await targetFolder.getFileFromRelativePath(containerFilePath);\r\n\r\n      if (!containerFile) {\r\n        return undefined;\r\n      }\r\n\r\n      const extension = containerFile.type;\r\n\r\n      if (extension !== \"zip\" && extension !== \"mcworld\" && extension !== \"mctemplate\") {\r\n        return undefined;\r\n      }\r\n\r\n      if (!containerFile.fileContainerStorage) {\r\n        const zipStorage = new ZipStorage();\r\n\r\n        if (!containerFile.isContentLoaded) {\r\n          await containerFile.loadContent();\r\n        }\r\n\r\n        if (!containerFile.content || !(containerFile.content instanceof Uint8Array)) {\r\n          return undefined;\r\n        }\r\n\r\n        await zipStorage.loadFromUint8Array(containerFile.content, containerFile.name);\r\n\r\n        zipStorage.containerFile = containerFile;\r\n        containerFile.fileContainerStorage = zipStorage;\r\n        containerFile.fileContainerStorage.storagePath = containerFilePath + \"#\";\r\n      }\r\n\r\n      targetFolder = containerFile.fileContainerStorage.rootFolder;\r\n    }\r\n\r\n    await targetFolder.ensureFolderFromRelativePath(basePath);\r\n    await targetFolder.ensureExists();\r\n\r\n    // find a folder name not in use\r\n    do {\r\n      index++;\r\n      candidateFolderPath = basePath + baseName + index;\r\n      candidateFolder = await targetFolder.getFolderFromRelativePath(candidateFolderPath);\r\n    } while (candidateFolder !== null && candidateFolder !== undefined);\r\n\r\n    return finalPathPrefix + candidateFolderPath;\r\n  }\r\n\r\n  static async _generateFileNameForNewItem(project: Project, basePath: string, baseName: string, extension: string) {\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    let index = 0;\r\n\r\n    let candidateFilePath = \"\";\r\n    let finalPathPrefix = \"\";\r\n    const projectFolder = project.projectFolder;\r\n    let candidateFile = null;\r\n\r\n    let hash = basePath.indexOf(\"#\");\r\n    let targetFolder = projectFolder;\r\n\r\n    while (hash > 0) {\r\n      // dig into container files if needed.\r\n      let containerFilePath = basePath.substring(0, hash);\r\n      basePath = basePath.substring(hash + 1);\r\n      hash = basePath.indexOf(\"#\");\r\n\r\n      if (containerFilePath.startsWith(targetFolder.fullPath)) {\r\n        containerFilePath = containerFilePath.substring(targetFolder.fullPath.length);\r\n      }\r\n\r\n      finalPathPrefix += containerFilePath + \"#\";\r\n\r\n      const containerFile = await targetFolder.getFileFromRelativePath(containerFilePath);\r\n\r\n      if (!containerFile) {\r\n        return undefined;\r\n      }\r\n\r\n      const extension = containerFile.type;\r\n\r\n      if (extension !== \"zip\" && extension !== \"mcworld\" && extension !== \"mctemplate\") {\r\n        return undefined;\r\n      }\r\n\r\n      if (!containerFile.fileContainerStorage) {\r\n        const zipStorage = new ZipStorage();\r\n\r\n        if (!containerFile.isContentLoaded) {\r\n          await containerFile.loadContent();\r\n        }\r\n\r\n        if (!containerFile.content || !(containerFile.content instanceof Uint8Array)) {\r\n          return undefined;\r\n        }\r\n\r\n        await zipStorage.loadFromUint8Array(containerFile.content);\r\n\r\n        zipStorage.containerFile = containerFile;\r\n        containerFile.fileContainerStorage = zipStorage;\r\n        containerFile.fileContainerStorage.storagePath = containerFilePath + \"#\";\r\n      }\r\n\r\n      targetFolder = containerFile.fileContainerStorage.rootFolder;\r\n    }\r\n\r\n    await targetFolder.ensureFolderFromRelativePath(basePath);\r\n    await targetFolder.ensureExists();\r\n\r\n    candidateFilePath = basePath + baseName + \".\" + extension;\r\n    candidateFile = await targetFolder.getFileFromRelativePath(candidateFilePath);\r\n\r\n    if (candidateFile) {\r\n      // find a filename not in use\r\n      do {\r\n        index++;\r\n        candidateFilePath = basePath + baseName + index + \".\" + extension;\r\n        candidateFile = await targetFolder.getFileFromRelativePath(candidateFilePath);\r\n      } while (candidateFile !== null && candidateFile !== undefined);\r\n    }\r\n\r\n    return finalPathPrefix + candidateFilePath;\r\n  }\r\n\r\n  static async createNewGameTestScript(project: Project) {\r\n    const defaultPath = await ProjectItemCreateManager._getDefaultBehaviorPackFolderPath(project, \"scripts\");\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      \"test\",\r\n      \"js\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.testJs,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const baseName = StorageUtilities.getBaseFromName(file.name);\r\n\r\n      if (project.preferredScriptLanguage === ProjectScriptLanguage.typeScript) {\r\n        const tsFile = file.parentFolder.ensureFile(baseName + \".ts\");\r\n\r\n        if (tsFile !== null) {\r\n          const content = ProjectContent.getEmptyTestTypeScript(project.name, baseName);\r\n\r\n          tsFile.setContent(content);\r\n        }\r\n      }\r\n\r\n      const content = ProjectContent.getEmptyTestJavaScript(project.name, baseName);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static async createNewFunction(project: Project) {\r\n    const defaultPath = await this._getDefaultBehaviorPackFolderPath(project, \"functions\");\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      \"action\",\r\n      \"mcfunction\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.MCFunction,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const content = \"say hello\";\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static async createNewStructure(project: Project) {\r\n    const defaultPath = await ProjectItemCreateManager._getDefaultBehaviorPackFolderPath(project, \"structures\");\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      \"structure\",\r\n      \"mcstructure\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.structure,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const structureBytes = ProjectContent.generateDefaultStructure();\r\n\r\n      if (structureBytes !== undefined) {\r\n        file.setContent(structureBytes);\r\n      }\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n\r\n  /**\r\n   * \"Empty file\" / \"Open as Raw\" companion: drops a minimally-valid stub at the\r\n   * conventional sub-folder for `contentType` under the project's default\r\n   * behavior or resource pack. Used by the Add dialog's \"Empty File (advanced)\"\r\n   * path so power users can author files that don't fit an existing wizard.\r\n   *\r\n   * If `desiredName` is omitted or already taken, a numeric suffix is appended\r\n   * (handled by `_generateFileNameForNewItem`). Returns the created\r\n   * `ProjectItem` so callers can select/open it.\r\n   */\r\n  static async createNewEmptyStubFile(\r\n    project: Project,\r\n    contentType: ProjectItemType,\r\n    desiredName?: string\r\n  ): Promise<ProjectItem | undefined> {\r\n    const config = ProjectItemCreateManager._getEmptyStubConfig(contentType);\r\n    if (!config) {\r\n      Log.error(\"createNewEmptyStubFile: unsupported contentType \" + contentType);\r\n      return undefined;\r\n    }\r\n\r\n    const baseFileName = (desiredName && desiredName.trim()) || config.defaultBaseName;\r\n\r\n    let defaultPath: string | undefined;\r\n    if (config.folderContext === FolderContext.resourcePack) {\r\n      defaultPath = await ProjectItemCreateManager._getDefaultResourcePackFolderPath(project, config.subfolder);\r\n    } else {\r\n      defaultPath = await ProjectItemCreateManager._getDefaultBehaviorPackFolderPath(project, config.subfolder);\r\n    }\r\n\r\n    if (defaultPath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      baseFileName,\r\n      config.extension\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      contentType,\r\n      config.folderContext,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null && config.stubContent !== undefined) {\r\n      file.setContent(config.stubContent);\r\n    }\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  /**\r\n   * Map a content type to the sub-folder, default file name, extension, and\r\n   * minimally-valid stub content used by `createNewEmptyStubFile`. Stubs are\r\n   * intentionally tiny \u2014 the goal is to land an editable file at the right\r\n   * path, not to template a fully-valid definition (the wizards do that).\r\n   *\r\n   * TODO: the `format_version` in JSON stubs is hardcoded to `STUB_FORMAT_VERSION`\r\n   * below. The rest of the codebase resolves the latest format version\r\n   * dynamically (see `FormatVersionManager` and `Database.getLatestVersionInfo`).\r\n   * When this method becomes async-friendly, pull the version from there so\r\n   * stubs don't go stale.\r\n   */\r\n  private static readonly STUB_FORMAT_VERSION = \"1.21.0\";\r\n\r\n  // Lazily built on first access. Building this eagerly via a static IIFE caused\r\n  // a \"Cannot read properties of undefined (reading 'behaviorPack')\" crash at\r\n  // module load when this file ended up earlier in a circular import chain than\r\n  // ./Project (which exports FolderContext).\r\n  private static _emptyStubConfigsCache:\r\n    | Partial<\r\n        Record<\r\n          ProjectItemType,\r\n          { subfolder: string; defaultBaseName: string; extension: string; folderContext: FolderContext; body: string }\r\n        >\r\n      >\r\n    | undefined;\r\n\r\n  private static get EMPTY_STUB_CONFIGS(): Partial<\r\n    Record<\r\n      ProjectItemType,\r\n      { subfolder: string; defaultBaseName: string; extension: string; folderContext: FolderContext; body: string }\r\n    >\r\n  > {\r\n    if (ProjectItemCreateManager._emptyStubConfigsCache) {\r\n      return ProjectItemCreateManager._emptyStubConfigsCache;\r\n    }\r\n    const v = ProjectItemCreateManager.STUB_FORMAT_VERSION;\r\n    const json = (body: string) => body;\r\n    const bp = FolderContext.behaviorPack;\r\n    ProjectItemCreateManager._emptyStubConfigsCache = {\r\n      [ProjectItemType.entityTypeBehavior]: {\r\n        subfolder: \"entities\",\r\n        defaultBaseName: \"entity\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: json(`{\\n  \"format_version\": \"${v}\",\\n  \"minecraft:entity\": {\\n    \"description\": {},\\n    \"components\": {}\\n  }\\n}\\n`),\r\n      },\r\n      [ProjectItemType.blockTypeBehavior]: {\r\n        subfolder: \"blocks\",\r\n        defaultBaseName: \"block\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: json(`{\\n  \"format_version\": \"${v}\",\\n  \"minecraft:block\": {\\n    \"description\": {},\\n    \"components\": {}\\n  }\\n}\\n`),\r\n      },\r\n      [ProjectItemType.itemTypeBehavior]: {\r\n        subfolder: \"items\",\r\n        defaultBaseName: \"item\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: json(`{\\n  \"format_version\": \"${v}\",\\n  \"minecraft:item\": {\\n    \"description\": {},\\n    \"components\": {}\\n  }\\n}\\n`),\r\n      },\r\n      [ProjectItemType.lootTableBehavior]: {\r\n        subfolder: \"loot_tables\",\r\n        defaultBaseName: \"loot_table\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: '{\\n  \"pools\": []\\n}\\n',\r\n      },\r\n      [ProjectItemType.recipeBehavior]: {\r\n        subfolder: \"recipes\",\r\n        defaultBaseName: \"recipe\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: json(`{\\n  \"format_version\": \"${v}\",\\n  \"minecraft:recipe_shapeless\": {\\n    \"description\": {},\\n    \"tags\": [],\\n    \"ingredients\": [],\\n    \"result\": {}\\n  }\\n}\\n`),\r\n      },\r\n      [ProjectItemType.spawnRuleBehavior]: {\r\n        subfolder: \"spawn_rules\",\r\n        defaultBaseName: \"spawn_rule\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: json(`{\\n  \"format_version\": \"${v}\",\\n  \"minecraft:spawn_rules\": {\\n    \"description\": {},\\n    \"conditions\": []\\n  }\\n}\\n`),\r\n      },\r\n      [ProjectItemType.MCFunction]: {\r\n        subfolder: \"functions\",\r\n        defaultBaseName: \"action\",\r\n        extension: \"mcfunction\",\r\n        folderContext: bp,\r\n        body: \"# New function \u2014 add commands below\\n\",\r\n      },\r\n      [ProjectItemType.unknownJson]: {\r\n        subfolder: \"\",\r\n        defaultBaseName: \"untitled\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: \"{}\\n\",\r\n      },\r\n    };\r\n    return ProjectItemCreateManager._emptyStubConfigsCache;\r\n  }\r\n\r\n  private static _getEmptyStubConfig(contentType: ProjectItemType):\r\n    | {\r\n        subfolder: string;\r\n        defaultBaseName: string;\r\n        extension: string;\r\n        folderContext: FolderContext;\r\n        stubContent?: string;\r\n      }\r\n    | undefined {\r\n    const entry = ProjectItemCreateManager.EMPTY_STUB_CONFIGS[contentType];\r\n    if (!entry) {\r\n      return undefined;\r\n    }\r\n    return {\r\n      subfolder: entry.subfolder,\r\n      defaultBaseName: entry.defaultBaseName,\r\n      extension: entry.extension,\r\n      folderContext: entry.folderContext,\r\n      stubContent: entry.body,\r\n    };\r\n  }\r\n\r\n  static async createNewActionSet(project: Project) {\r\n    const defaultPath = await this._getDefaultBehaviorPackFolderPath(project, \"actions\");\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      \"actionset\",\r\n      \"json\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.actionSet,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const baseName = StorageUtilities.getBaseFromName(file.name);\r\n\r\n      const content = ProjectContent.getEmptyActionSet(project.name, baseName);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n  }\r\n\r\n  static async createNewDocumentedType(project: Project) {\r\n    const defaultPath = await this._getDefaultBehaviorPackFolderPath(project, \"docs\");\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFolderPath = await ProjectItemCreateManager._generateFolderNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      \"type\"\r\n    );\r\n\r\n    if (candidateFolderPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFolderPath,\r\n      ProjectItemStorageType.folder,\r\n      candidateFolderPath,\r\n      ProjectItemType.documentedTypeFolder,\r\n      FolderContext.metaData,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    await pi.loadFolder();\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static getExistingPath(project: Project, itemType: ProjectItemType) {\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const item of project.items) {\r\n      if (item.itemType === itemType && item.primaryFile) {\r\n        return item.primaryFile.parentFolder.getFolderRelativePath(project.projectFolder);\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async createNewForm(project: Project, name?: string, folder?: IFolder) {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    if (folder) {\r\n      path = folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, ProjectItemType.dataForm);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultBehaviorPackFolderPath(project, \"forms\");\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!name) {\r\n      name = \"form\";\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path,\r\n      name,\r\n      \"form.json\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.dataForm,\r\n      FolderContext.metaData,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const content = \"{}\";\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async ensureSoundDefinitionCatalogDefinition(\r\n    project: Project\r\n  ): Promise<SoundDefinitionCatalogDefinition | undefined> {\r\n    const items = project.getItemsByType(ProjectItemType.soundDefinitionCatalog);\r\n\r\n    if (items.length > 0) {\r\n      if (!items[0].isContentLoaded) {\r\n        await items[0].loadContent();\r\n      }\r\n\r\n      const itemFile = items[0].primaryFile;\r\n\r\n      if (itemFile) {\r\n        if (!itemFile.isContentLoaded) {\r\n          await itemFile.loadContent();\r\n        }\r\n\r\n        if (!itemFile.content) {\r\n          this.setFileToDefaultContent(itemFile);\r\n        }\r\n\r\n        return await SoundDefinitionCatalogDefinition.ensureOnFile(itemFile);\r\n      }\r\n    }\r\n\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    path = await this._getDefaultResourcePackFolderPath(project, \"sounds\");\r\n\r\n    if (path === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path,\r\n      \"sound_definitions\",\r\n      \"json\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.soundDefinitionCatalog,\r\n      FolderContext.resourcePack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file === null) {\r\n      return undefined;\r\n    }\r\n\r\n    this.setFileToDefaultContent(file);\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return await SoundDefinitionCatalogDefinition.ensureOnFile(file);\r\n  }\r\n\r\n  static setFileToDefaultContent(file: IFile) {\r\n    const content = '{\\n   \"format_version\" : \"1.20.20\",\\n   \"sound_definitions\" : {}\\n}';\r\n\r\n    file.setContent(content);\r\n    file.saveContent();\r\n  }\r\n\r\n  static async addFromGallery(project: Project, newName: string, galleryItem: IGalleryItem) {\r\n    if (galleryItem.type === GalleryItemType.entityType) {\r\n      await ProjectCreateManager.addEntityTypeFromGallery(\r\n        project,\r\n        galleryItem,\r\n        newName,\r\n        NewEntityTypeAddMode.baseId,\r\n        async (message: string) => {\r\n          Log.message(message);\r\n        }\r\n      );\r\n    } else if (galleryItem.type === GalleryItemType.itemType) {\r\n      await ProjectCreateManager.addItemTypeFromGallery(project, galleryItem, newName);\r\n    } else if (galleryItem.type === GalleryItemType.blockType) {\r\n      await ProjectCreateManager.addBlockTypeFromGallery(project, galleryItem, newName);\r\n    } else if (galleryItem.type === GalleryItemType.modelDesign) {\r\n      await ProjectCreateManager.addModelDesignFromGallery(project, galleryItem, newName);\r\n    } else if (galleryItem.type >= GalleryItemType.spawnLootRecipes && galleryItem.targetType) {\r\n      await ProjectItemCreateManager.createNewItem(project, {\r\n        itemType: galleryItem.targetType,\r\n        contentTemplateName: galleryItem.id,\r\n        name: newName,\r\n        folder: undefined,\r\n      });\r\n    }\r\n  }\r\n\r\n  static async ensureSoundCatalogDefinition(project: Project): Promise<SoundCatalogDefinition | undefined> {\r\n    const items = project.getItemsByType(ProjectItemType.soundCatalog);\r\n\r\n    if (items.length > 0) {\r\n      if (!items[0].isContentLoaded) {\r\n        await items[0].loadContent();\r\n      }\r\n\r\n      if (items[0].primaryFile) {\r\n        return await SoundCatalogDefinition.ensureOnFile(items[0].primaryFile);\r\n      }\r\n    }\r\n\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    path = await this._getDefaultResourcePackFolderPath(project, \"sounds\");\r\n\r\n    if (path === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path,\r\n      \"sounds\",\r\n      \"json\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.soundCatalog,\r\n      FolderContext.resourcePack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const content = \"{\\n}\";\r\n\r\n    file.setContent(content);\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return await SoundCatalogDefinition.ensureOnFile(file);\r\n  }\r\n\r\n  static async createDesignPackJsonItem(\r\n    project: Project,\r\n    itemSeed: IProjectItemSeed\r\n  ): Promise<ProjectItem | undefined> {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const folderRootsForType = ProjectItemUtilities.getFolderRootsForType(itemSeed.itemType);\r\n\r\n    Log.assert(folderRootsForType.length > 0, \"No folder roots for item type: \" + itemSeed.itemType);\r\n\r\n    if (itemSeed.folder) {\r\n      path = itemSeed.folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, itemSeed.itemType);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultDesignPackFolderPath(project, folderRootsForType[0]);\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    let namespacedId = itemSeed.name;\r\n    let name = namespacedId;\r\n\r\n    if (!namespacedId || !name) {\r\n      name = ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n      namespacedId = name;\r\n    }\r\n\r\n    name = MinecraftUtilities.getNamespacedIdName(name);\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(project, path, name, \"json\");\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemSeed.itemType,\r\n      FolderContext.designPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      let content = \"{}\";\r\n\r\n      await Database.loadContent();\r\n\r\n      if (Database.contentFolder !== null) {\r\n        const contentTemplate = itemSeed.contentTemplateName\r\n          ? itemSeed.contentTemplateName\r\n          : ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n\r\n        const sourceFile = await Database.contentFolder.getFileFromRelativePath(\r\n          \"/newitemjson/\" + contentTemplate + \".json\"\r\n        );\r\n\r\n        if (sourceFile) {\r\n          if (!sourceFile.isContentLoaded) {\r\n            await sourceFile.loadContent();\r\n          }\r\n\r\n          if (sourceFile.content) {\r\n            content = sourceFile.content.toString();\r\n          }\r\n        }\r\n      }\r\n\r\n      content = content.replace(/examplens:examplename/g, namespacedId);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async createBehaviorPackJsonItem(\r\n    project: Project,\r\n    itemSeed: IProjectItemSeed\r\n  ): Promise<ProjectItem | undefined> {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const folderRootsForType = ProjectItemUtilities.getFolderRootsForType(itemSeed.itemType);\r\n\r\n    Log.assert(folderRootsForType.length > 0, \"No folder roots for item type: \" + itemSeed.itemType);\r\n\r\n    if (itemSeed.folder) {\r\n      path = itemSeed.folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, itemSeed.itemType);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultBehaviorPackFolderPath(project, folderRootsForType[0]);\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    let namespacedId = itemSeed.name;\r\n    let name = namespacedId;\r\n\r\n    if (!namespacedId || !name) {\r\n      name = ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n      namespacedId = name;\r\n    }\r\n\r\n    name = MinecraftUtilities.getNamespacedIdName(name);\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(project, path, name, \"json\");\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemSeed.itemType,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      let content = \"{}\";\r\n\r\n      await Database.loadContent();\r\n\r\n      if (Database.contentFolder !== null) {\r\n        const contentTemplate = itemSeed.contentTemplateName\r\n          ? itemSeed.contentTemplateName\r\n          : ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n\r\n        const path = \"/newitemjson/\" + contentTemplate + \".json\";\r\n        const sourceFile = await Database.contentFolder.getFileFromRelativePath(path);\r\n\r\n        if (sourceFile) {\r\n          if (!sourceFile.isContentLoaded) {\r\n            await sourceFile.loadContent();\r\n          }\r\n\r\n          if (sourceFile.content) {\r\n            content = sourceFile.content.toString();\r\n          }\r\n        }\r\n      }\r\n\r\n      content = content.replace(/examplens:examplename/g, namespacedId);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async createResourcePackJsonItem(\r\n    project: Project,\r\n    itemSeed: IProjectItemSeed\r\n  ): Promise<ProjectItem | undefined> {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const folderRootsForType = ProjectItemUtilities.getFolderRootsForType(itemSeed.itemType);\r\n\r\n    Log.assert(folderRootsForType.length > 0, \"No folder roots for item type: \" + itemSeed.itemType);\r\n\r\n    if (itemSeed.folder) {\r\n      path = itemSeed.folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, itemSeed.itemType);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultResourcePackFolderPath(project, folderRootsForType[0]);\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    let namespacedId = itemSeed.name;\r\n    let name = namespacedId;\r\n\r\n    if (!namespacedId || !name) {\r\n      name = ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n      namespacedId = name;\r\n    }\r\n\r\n    name = MinecraftUtilities.getNamespacedIdName(name);\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(project, path, name, \"json\");\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemSeed.itemType,\r\n      FolderContext.resourcePack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      let content = \"{}\";\r\n\r\n      await Database.loadContent();\r\n\r\n      if (Database.contentFolder !== null) {\r\n        const contentTemplate = itemSeed.contentTemplateName\r\n          ? itemSeed.contentTemplateName\r\n          : ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n\r\n        const sourceFile = await Database.contentFolder.getFileFromRelativePath(\r\n          \"/newitemjson/\" + contentTemplate + \".json\"\r\n        );\r\n\r\n        if (sourceFile) {\r\n          if (!sourceFile.isContentLoaded) {\r\n            await sourceFile.loadContent();\r\n          }\r\n\r\n          if (sourceFile.content) {\r\n            content = sourceFile.content.toString();\r\n          }\r\n        }\r\n      }\r\n\r\n      content = content.replace(/examplens:examplename/g, namespacedId);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async createNewResourcePackBinaryItem(\r\n    project: Project,\r\n    sourceFileName: string,\r\n    extension: string,\r\n    defaultFolderPath: string,\r\n    exampleName: string,\r\n    itemType: ProjectItemType,\r\n    name?: string,\r\n    folder?: IFolder\r\n  ): Promise<ProjectItem | undefined> {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    const sourceFile = Database.contentFolder.ensureFile(sourceFileName);\r\n\r\n    if (!sourceFile.isContentLoaded) {\r\n      await sourceFile.loadContent();\r\n    }\r\n\r\n    if (!(sourceFile.content instanceof Uint8Array)) {\r\n      Log.error(\"Could not find source \" + extension + \" file content.\");\r\n      return;\r\n    }\r\n\r\n    if (folder) {\r\n      path = folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, itemType);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultResourcePackFolderPath(project, defaultFolderPath);\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!name) {\r\n      name = exampleName;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path,\r\n      name,\r\n      extension\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemType,\r\n      FolderContext.resourcePack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      file.setContent(sourceFile.content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async createNewDesignPackBinaryItem(\r\n    project: Project,\r\n    sourceFileName: string,\r\n    extension: string,\r\n    defaultFolderPath: string,\r\n    exampleName: string,\r\n    itemType: ProjectItemType,\r\n    name?: string,\r\n    folder?: IFolder\r\n  ): Promise<ProjectItem | undefined> {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    const sourceFile = Database.contentFolder.ensureFile(sourceFileName);\r\n\r\n    if (!sourceFile.isContentLoaded) {\r\n      await sourceFile.loadContent();\r\n    }\r\n\r\n    if (!(sourceFile.content instanceof Uint8Array)) {\r\n      Log.error(\"Could not find source \" + extension + \" file content.\");\r\n      return;\r\n    }\r\n\r\n    if (folder) {\r\n      path = folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, itemType);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultDesignPackFolderPath(project, defaultFolderPath);\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!name) {\r\n      name = exampleName;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path,\r\n      name,\r\n      extension\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemType,\r\n      FolderContext.designPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      file.setContent(sourceFile.content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async createNewDesignTexture(\r\n    project: Project,\r\n    name?: string,\r\n    folder?: IFolder,\r\n    creationData?: object\r\n  ): Promise<ProjectItem | undefined> {\r\n    const projectItem = await this.createNewDesignPackBinaryItem(\r\n      project,\r\n      \"blank64.png\",\r\n      \"png\",\r\n      \"design_textures\",\r\n      \"design_texture\",\r\n      ProjectItemType.designTexture,\r\n      name,\r\n      folder\r\n    );\r\n\r\n    if (projectItem && creationData) {\r\n      const imageEdits = await ImageEditsDefinition.ensureAsAccessoryOnImageProjectItem(projectItem);\r\n\r\n      if (imageEdits) {\r\n        await imageEdits.setFromCreationData(creationData as IImageEdits);\r\n      }\r\n    }\r\n\r\n    return projectItem;\r\n  }\r\n  static async createNewTexture(project: Project, name?: string, folder?: IFolder): Promise<ProjectItem | undefined> {\r\n    return await this.createNewResourcePackBinaryItem(\r\n      project,\r\n      \"blank64.png\",\r\n      \"png\",\r\n      \"textures\",\r\n      \"texture\",\r\n      ProjectItemType.texture,\r\n      name,\r\n      folder\r\n    );\r\n  }\r\n\r\n  static async createNewAudio(project: Project, name?: string, folder?: IFolder): Promise<ProjectItem | undefined> {\r\n    return await this.createNewResourcePackBinaryItem(\r\n      project,\r\n      \"blank.ogg\",\r\n      \"ogg\",\r\n      \"sounds\",\r\n      \"sound\",\r\n      ProjectItemType.audio,\r\n      name,\r\n      folder\r\n    );\r\n  }\r\n\r\n  static async createNewWorldTest(project: Project, name?: string, folder?: IFolder) {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return;\r\n    }\r\n\r\n    if (folder) {\r\n      path = folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, ProjectItemType.dataForm);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultBehaviorPackFolderPath(project, \"forms\");\r\n\r\n        if (path === undefined) {\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return;\r\n    }\r\n\r\n    if (!name) {\r\n      name = \"form\";\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path + \"tests/\",\r\n      \"worldtest\",\r\n      \"json\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.worldTest,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const baseName = StorageUtilities.getBaseFromName(file.name);\r\n\r\n      const content = ProjectContent.getEmptyWorldTest(project.name, baseName);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItemCreateManager from \"../app/ProjectItemCreateManager\";\r\nimport { AllowedExtensionsSet } from \"../storage/StorageUtilities\";\r\n\r\nexport default class AudioDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<AudioDefinition, AudioDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._file) {\r\n      return this._file.name;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<AudioDefinition, AudioDefinition>) {\r\n    let afd: AudioDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      afd = new AudioDefinition();\r\n\r\n      afd.file = file;\r\n\r\n      file.manager = afd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AudioDefinition) {\r\n      afd = file.manager as AudioDefinition;\r\n\r\n      if (!afd.isLoaded) {\r\n        if (loadHandler) {\r\n          afd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await afd.load();\r\n      }\r\n    }\r\n\r\n    return afd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    return false;\r\n  }\r\n\r\n  static canonicalizeAudioPath(projectPath: string | undefined) {\r\n    if (projectPath === undefined) {\r\n      return undefined;\r\n    }\r\n    projectPath = projectPath.toLowerCase();\r\n\r\n    const lastPeriod = projectPath.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod >= 0) {\r\n      const removedPart = projectPath.substring(lastPeriod + 1);\r\n\r\n      if (AllowedExtensionsSet.has(removedPart)) {\r\n        projectPath = projectPath.substring(0, lastPeriod);\r\n      }\r\n    }\r\n    /*\r\n    Log.assert(\r\n      projectPath.startsWith(\"sounds/\") || projectPath.startsWith(\"music/\") || projectPath.startsWith(\"$\"),\r\n      \"Unexpected audio path: \" + projectPath\r\n    );*/\r\n\r\n    return projectPath;\r\n  }\r\n\r\n  async ensureSoundDefinitionsForFile(project: Project) {\r\n    if (!this._file) {\r\n      return;\r\n    }\r\n\r\n    let soundDefinitionCat = await ProjectItemCreateManager.ensureSoundDefinitionCatalogDefinition(project);\r\n\r\n    if (this._file && soundDefinitionCat) {\r\n      let matches = soundDefinitionCat.getSoundDefinitionMatchesByPath(this._file);\r\n\r\n      if (matches) {\r\n        let keyCount = 0;\r\n\r\n        for (const key in matches) {\r\n          if (key) {\r\n            keyCount++;\r\n          }\r\n        }\r\n\r\n        if (keyCount === 0) {\r\n          soundDefinitionCat.ensureDefintionForFile(project, this._file);\r\n        }\r\n      }\r\n\r\n      soundDefinitionCat.persist();\r\n    }\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ISoundReference, ISoundDefinitionCatalog, ISoundDefinition } from \"./ISoundDefinitionCatalog\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Database from \"./Database\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport AudioDefinition from \"./AudioDefinition\";\r\n\r\nexport default class SoundDefinitionCatalogDefinition {\r\n  public _data?: ISoundDefinitionCatalog;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public id: string | undefined;\r\n\r\n  private _onLoaded = new EventDispatcher<SoundDefinitionCatalogDefinition, SoundDefinitionCatalogDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public getSoundDefinitionSoundInstanceList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const soundList = [];\r\n\r\n    if (this._data.sound_definitions) {\r\n      for (const key in this._data.sound_definitions) {\r\n        const soundDefSet = this._data.sound_definitions[key];\r\n\r\n        if (soundDefSet.sounds && Array.isArray(soundDefSet.sounds)) {\r\n          for (const sound of soundDefSet.sounds) {\r\n            soundList.push(sound);\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      for (const key in this._data) {\r\n        if (key !== \"format_version\" && key !== \"sound_definitions\") {\r\n          const soundDefSet = (this._data as any)[key] as ISoundDefinition;\r\n\r\n          if (soundDefSet && soundDefSet.sounds && Array.isArray(soundDefSet.sounds)) {\r\n            for (const sound of soundDefSet.sounds) {\r\n              soundList.push(sound);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return soundList;\r\n  }\r\n\r\n  public getCanonincalizedSoundPathList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const soundList: string[] = [];\r\n\r\n    if (this._data.sound_definitions) {\r\n      for (const key in this._data.sound_definitions) {\r\n        const soundDefSet = this._data.sound_definitions[key];\r\n\r\n        if (soundDefSet.sounds && Array.isArray(soundDefSet.sounds)) {\r\n          for (const sound of soundDefSet.sounds) {\r\n            if (typeof sound === \"string\") {\r\n              let path = AudioDefinition.canonicalizeAudioPath(sound);\r\n\r\n              if (path) {\r\n                soundList.push(path);\r\n              }\r\n            } else if (typeof sound.name === \"string\") {\r\n              let path = AudioDefinition.canonicalizeAudioPath(sound.name);\r\n\r\n              if (path) {\r\n                soundList.push(path);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      for (const key in this._data) {\r\n        if (key !== \"format_version\" && key !== \"sound_definitions\") {\r\n          const soundDefSet = (this._data as any)[key] as ISoundDefinition;\r\n\r\n          if (soundDefSet && soundDefSet.sounds && Array.isArray(soundDefSet.sounds)) {\r\n            for (const sound of soundDefSet.sounds) {\r\n              if (typeof sound === \"string\") {\r\n                let path = AudioDefinition.canonicalizeAudioPath(sound);\r\n\r\n                if (path) {\r\n                  soundList.push(path);\r\n                }\r\n              } else if (typeof sound.name === \"string\") {\r\n                let path = AudioDefinition.canonicalizeAudioPath(sound.name);\r\n\r\n                if (path) {\r\n                  soundList.push(path);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return soundList;\r\n  }\r\n\r\n  public get soundDefinitionPathList() {\r\n    if (!this._data || !this._data.sound_definitions) {\r\n      return undefined;\r\n    }\r\n\r\n    const soundDefPathList = [];\r\n\r\n    for (const key in this._data.sound_definitions) {\r\n      const soundDefSet = this._data.sound_definitions[key];\r\n\r\n      for (const sound of soundDefSet.sounds) {\r\n        if (typeof sound === \"string\") {\r\n          soundDefPathList.push(sound);\r\n        } else {\r\n          soundDefPathList.push(sound.name);\r\n        }\r\n      }\r\n    }\r\n\r\n    return soundDefPathList;\r\n  }\r\n\r\n  public getSoundDefinitionSetNameList() {\r\n    if (!this._data || !this._data.sound_definitions) {\r\n      return undefined;\r\n    }\r\n\r\n    const soundDefSetNameList = [];\r\n\r\n    for (const key in this._data.sound_definitions) {\r\n      soundDefSetNameList.push(key);\r\n    }\r\n\r\n    // this seems like a legacy mode?\r\n    for (const key in this._data) {\r\n      if (key !== \"sound_definitions\" && key !== \"format_version\") {\r\n        soundDefSetNameList.push(key);\r\n      }\r\n    }\r\n\r\n    return soundDefSetNameList;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<SoundDefinitionCatalogDefinition, SoundDefinitionCatalogDefinition>\r\n  ) {\r\n    let et: SoundDefinitionCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new SoundDefinitionCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof SoundDefinitionCatalogDefinition) {\r\n      et = file.manager as SoundDefinitionCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"SDCDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async deleteLinkToChild(childItem: ProjectItem) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (this._data === undefined) {\r\n      await this.load();\r\n    }\r\n\r\n    if (childItem.itemType === ProjectItemType.texture && this._data && this._data.sound_definitions) {\r\n      if (!childItem.isContentLoaded) {\r\n        await childItem.loadContent();\r\n      }\r\n\r\n      if (childItem.primaryFile && packRootFolder) {\r\n        let relativePath = this.getRelativePath(childItem.primaryFile, packRootFolder);\r\n\r\n        if (relativePath) {\r\n          for (const key in this._data.sound_definitions) {\r\n            const soundDef = this._data.sound_definitions[key];\r\n\r\n            for (const sound of soundDef.sounds) {\r\n              if (typeof sound === \"string\") {\r\n                if (sound === relativePath) {\r\n                  soundDef.sounds = Utilities.removeItemInArray(sound, soundDef.sounds);\r\n                }\r\n              } else if (sound.name === relativePath) {\r\n                soundDef.sounds = Utilities.removeItemInArray(sound, soundDef.sounds);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"sounds\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  getRelativePath(file: IFile, packRootFolder: IFolder) {\r\n    let relativePath = file.getFolderRelativePath(packRootFolder);\r\n\r\n    if (relativePath) {\r\n      relativePath = StorageUtilities.ensureNotStartsWithDelimiter(relativePath);\r\n    }\r\n\r\n    relativePath = AudioDefinition.canonicalizeAudioPath(relativePath);\r\n\r\n    return relativePath;\r\n  }\r\n\r\n  ensureDefintionForFile(project: Project, file: IFile) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (!packRootFolder || !this._data) {\r\n      return;\r\n    }\r\n\r\n    let relativePath = this.getRelativePath(file, packRootFolder);\r\n\r\n    if (!relativePath) {\r\n      return;\r\n    }\r\n\r\n    const soundDefName = StorageUtilities.getBaseFromName(file.name).toLowerCase();\r\n\r\n    if (Utilities.isUsableAsObjectKey(soundDefName)) {\r\n      let soundDef: ISoundDefinition | undefined = this._data.sound_definitions[soundDefName];\r\n\r\n      if (!soundDef) {\r\n        soundDef = {\r\n          category: \"neutral\",\r\n          sounds: [],\r\n        };\r\n\r\n        this._data.sound_definitions[soundDefName] = soundDef;\r\n      }\r\n\r\n      if (soundDef && !this.hasSoundByPath(soundDef, relativePath)) {\r\n        soundDef.sounds.push({\r\n          is3D: false,\r\n          name: relativePath,\r\n          volume: 1,\r\n          weight: 10,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  hasSoundByPath(soundDefSet: ISoundDefinition, path: string) {\r\n    for (const sound of soundDefSet.sounds) {\r\n      if (typeof sound === \"string\" && sound === path) {\r\n        return sound;\r\n      } else if (typeof sound !== \"string\" && sound.name === path) {\r\n        return sound;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getSoundReferenceMatchesByPath(file: IFile) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n    if (!packRootFolder) {\r\n      return;\r\n    }\r\n\r\n    let relativePath = this.getRelativePath(file, packRootFolder);\r\n\r\n    const retSoundRefs: { [name: string]: ISoundReference[] } = {};\r\n\r\n    if (relativePath && this._data) {\r\n      const keys = this.getSoundDefinitionSetNameList();\r\n\r\n      for (const key in keys) {\r\n        if (Utilities.isUsableAsObjectKey(key)) {\r\n          let soundDefSet = this._data.sound_definitions[key];\r\n\r\n          if (!soundDefSet) {\r\n            soundDefSet = (this._data as any)[key];\r\n          }\r\n\r\n          if (soundDefSet && soundDefSet.sounds) {\r\n            for (const soundInstance of soundDefSet.sounds) {\r\n              if (typeof soundInstance === \"string\") {\r\n                if (StorageUtilities.isPathEqual(soundInstance, relativePath)) {\r\n                  if (!retSoundRefs[key]) {\r\n                    retSoundRefs[key] = [];\r\n                  }\r\n                  retSoundRefs[key].push({ name: soundInstance });\r\n                }\r\n              } else if (StorageUtilities.isPathEqual(soundInstance.name, relativePath)) {\r\n                if (!retSoundRefs[key]) {\r\n                  retSoundRefs[key] = [];\r\n                }\r\n                retSoundRefs[key].push(soundInstance);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return retSoundRefs;\r\n  }\r\n\r\n  getSoundDefinitionMatchesByPath(file: IFile) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n    if (!packRootFolder) {\r\n      return;\r\n    }\r\n\r\n    let relativePath = this.getRelativePath(file, packRootFolder);\r\n\r\n    const retSoundDefs: { [name: string]: ISoundDefinition } = {};\r\n\r\n    if (relativePath && this._data) {\r\n      for (const key in this._data.sound_definitions) {\r\n        const soundDefSet = this._data.sound_definitions[key];\r\n\r\n        if (soundDefSet && soundDefSet.sounds) {\r\n          for (const soundInstance of soundDefSet.sounds) {\r\n            if (typeof soundInstance === \"string\") {\r\n              if (StorageUtilities.isPathEqual(soundInstance, relativePath)) {\r\n                retSoundDefs[key] = soundDefSet;\r\n              }\r\n            } else if (StorageUtilities.isPathEqual(soundInstance.name, relativePath)) {\r\n              retSoundDefs[key] = soundDefSet;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return retSoundDefs;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const audioItems = project.getItemsByType(ProjectItemType.audio);\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let soundPathList = this.getCanonincalizedSoundPathList();\r\n\r\n    for (const candItem of audioItems) {\r\n      if (packRootFolder && soundPathList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = this.getRelativePath(candItem.primaryFile, packRootFolder);\r\n\r\n          if (relativePath) {\r\n            if (soundPathList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              const nextSound: string[] = [];\r\n\r\n              for (const sound of soundPathList) {\r\n                if (sound !== relativePath) {\r\n                  nextSound.push(sound);\r\n                }\r\n              }\r\n\r\n              soundPathList = nextSound;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (soundPathList) {\r\n      for (const soundDef of soundPathList) {\r\n        const isVanilla = await Database.isVanillaToken(soundDef);\r\n        item.addUnfulfilledRelationship(soundDef, ProjectItemType.audio, isVanilla);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "/**\r\n * VanillaGeometryTransforms\r\n *\r\n * This module provides transforms for vanilla Minecraft geometry files that need\r\n * manual corrections because Minecraft's rendering code has hardcoded optimizations\r\n * that affect how certain models appear.\r\n *\r\n * The Minecraft game engine contains special rendering logic for certain entities\r\n * that isn't represented in the geometry files themselves. This transform system\r\n * allows MCTools to replicate those visual adjustments so models render correctly.\r\n *\r\n * Last Updated: December 2025\r\n */\r\n\r\nimport { IGeometry } from \"./IModelGeometry\";\r\nimport Log from \"../core/Log\";\r\n\r\n/**\r\n * Represents a transform operation that can be applied to a bone\r\n */\r\nexport interface IBoneTransform {\r\n  /**\r\n   * Name of the bone to transform. Use \"*\" for all bones.\r\n   */\r\n  boneName: string;\r\n\r\n  /**\r\n   * If set, adds this rotation (in degrees) to the bone's bind_pose_rotation\r\n   */\r\n  addBindPoseRotation?: [number, number, number];\r\n\r\n  /**\r\n   * If set, replaces the bone's bind_pose_rotation\r\n   */\r\n  setBindPoseRotation?: [number, number, number];\r\n\r\n  /**\r\n   * If set, adds this offset (in pixels) to the bone's pivot\r\n   */\r\n  addPivotOffset?: [number, number, number];\r\n\r\n  /**\r\n   * If set, replaces the bone's pivot\r\n   */\r\n  setPivot?: [number, number, number];\r\n\r\n  /**\r\n   * If set, adds this offset (in pixels) to all cube origins in this bone\r\n   */\r\n  addCubeOriginOffset?: [number, number, number];\r\n\r\n  /**\r\n   * If set, changes the parent of this bone\r\n   */\r\n  setParent?: string | null;\r\n\r\n  /**\r\n   * If set, removes the parent (makes bone a root bone)\r\n   */\r\n  removeParent?: boolean;\r\n\r\n  /**\r\n   * If set, adds a per-cube rotation (in degrees) to every cube in this bone.\r\n   * Unlike setBindPoseRotation, this does NOT rotate the bone's TransformNode,\r\n   * so child bones keep their world-space positions.\r\n   * The cube's rotation pivot is set to the bone's pivot.\r\n   */\r\n  setCubeRotation?: [number, number, number];\r\n}\r\n\r\n/**\r\n * Represents all transforms to apply to a specific vanilla geometry\r\n */\r\nexport interface IVanillaGeometryTransform {\r\n  /**\r\n   * Geometry identifier patterns this transform applies to.\r\n   * Supports wildcards: \"geometry.cow.*\" matches any cow geometry variant\r\n   */\r\n  geometryPatterns: string[];\r\n\r\n  /**\r\n   * Human-readable description of why this transform is needed\r\n   */\r\n  reason: string;\r\n\r\n  /**\r\n   * Array of bone transforms to apply in order\r\n   */\r\n  boneTransforms: IBoneTransform[];\r\n}\r\n\r\n/**\r\n * Registry of all vanilla geometry transforms.\r\n *\r\n * When adding new transforms:\r\n * 1. Document why Minecraft renders this model differently\r\n * 2. Specify the exact geometry patterns that need correction\r\n * 3. Apply minimal transforms to achieve correct appearance\r\n *\r\n * IMPORTANT: Most vanilla entities now use v2/v3 geometry formats that have correct\r\n * cube-level rotations and don't need bone-level transforms. Only add transforms for\r\n * specific legacy geometry IDs that are still actively used and have issues.\r\n *\r\n * Geometry format evolution:\r\n * - Legacy (v1.8 format): Uses bind_pose_rotation on bones, which affects child bones\r\n *   and requires Minecraft's renderer to apply hardcoded compensations\r\n * - Modern (v2/v3 format): Uses per-cube rotation, which doesn't affect bone hierarchy\r\n *   and renders correctly without special handling\r\n *\r\n * Entity geometry usage (as of Jan 2026):\r\n * - cow.entity.json uses geometry.cow.v2 (modern format, no transform needed)\r\n * - pig.entity.json uses geometry.pig.v3 (modern format, no transform needed)\r\n * - sheep.entity.json uses geometry.sheep.v1.8 (legacy format, but has bind_pose_rotation)\r\n * - cat.entity.json uses geometry.cat (legacy v1.21.0 format \u2014 body cube is modeled\r\n *   vertically [4,16,6] with NO rotation. Minecraft applies a hardcoded 90\u00B0 X rotation.)\r\n * - wolf.entity.json uses geometry.wolf (legacy flat hierarchy \u2014 body and upperBody\r\n *   cubes modeled vertically, all bones root-level with no parent chain.)\r\n * - fox.entity.json uses geometry.fox (hierarchical \u2014 body cube [6,11,6] modeled\r\n *   vertically with children parented to body. Needs 90\u00B0 X on body.)\r\n * - ocelot.entity.json uses geometry.ocelot.v1.8 (identical structure to geometry.cat.)\r\n * - chicken.entity.json uses geometry.chicken.v1.12 (modern, has per-cube rotation.)\r\n */\r\nconst VANILLA_GEOMETRY_TRANSFORMS: IVanillaGeometryTransform[] = [\r\n  // \u2500\u2500 Cat / Ocelot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // geometry.cat and geometry.ocelot.v1.8 model the body cube as a tall\r\n  // vertical column [4,16,6] but Minecraft's engine hardcodes a 90\u00B0 X\r\n  // rotation on the body cube only (matching cow.v2's per-cube approach).\r\n  //\r\n  // Comparison with geometry.ocelot v1.0 (which has bind_pose_rotation):\r\n  //   v1.0:  body pivot [0,12,-10], cube [-2,-7,-18], bind_pose_rotation [90,0,0]\r\n  //   v1.8:  body pivot [0,7,1],    cube [-2,-1,-2],  NO rotation\r\n  //\r\n  // All child bones (head, legs, tail) already have correct world-space\r\n  // positions \u2014 only the body cube needs rotation.  Tail cubes are vertical\r\n  // at rest; the curve comes from animation, not static geometry.\r\n  {\r\n    geometryPatterns: [\"geometry.cat\", \"geometry.ocelot.v1.8\"],\r\n    reason: \"Body cube modeled vertically [4,16,6] \u2014 Minecraft hardcodes per-cube 90\u00B0 X rotation (matches cow.v2 convention)\",\r\n    boneTransforms: [\r\n      { boneName: \"body\", setCubeRotation: [90, 0, 0] },\r\n    ],\r\n  },\r\n\r\n  // \u2500\u2500 Sheep \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // Sheep geometry has bind_pose_rotation [90,0,0] on the body bone, with\r\n  // legs as children. The sheep's leg cube positions are in WORLD coordinates\r\n  // (Y=0 to Y=12, ground to hip). Applying the body's 90\u00B0 rotation to these\r\n  // world-space legs scatters them.\r\n  //\r\n  // Fix: detach the legs from the body so they render at their world-space\r\n  // positions. The body's bind_pose_rotation correctly rotates its own cubes;\r\n  // the head is already a root bone (no parent).\r\n  {\r\n    geometryPatterns: [\"geometry.sheep.sheared.v1.8\", \"geometry.sheep.v1.8*\"],\r\n    reason: \"Sheep legs are in world coordinates \u2014 detach from rotated body bone\",\r\n    boneTransforms: [\r\n      { boneName: \"leg0\", removeParent: true },\r\n      { boneName: \"leg1\", removeParent: true },\r\n      { boneName: \"leg2\", removeParent: true },\r\n      { boneName: \"leg3\", removeParent: true },\r\n    ],\r\n  },\r\n\r\n  // \u2500\u2500 Turtle \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // The turtle body has bind_pose_rotation [90,0,0] but ALL child bone cubes\r\n  // (head, flippers) are in world coordinates, not the body's rotated local\r\n  // space. The body rotation correctly orients the shell, but applying it to\r\n  // children pushes the head up through the shell and scatters the flippers.\r\n  //\r\n  // Fix: detach head and flippers so they render at world coordinates.\r\n  // The head at Y=1-6, Z=-13 to -7 naturally sits in front of the shell.\r\n  // Back flippers need Z-correction because the shell is rendered through\r\n  // the rotation node while detached bones use Babylon's Z-negation.\r\n  {\r\n    geometryPatterns: [\"geometry.turtle\", \"geometry.turtle.*\"],\r\n    reason: \"Turtle head/flippers are in world coordinates \u2014 detach from rotated body\",\r\n    boneTransforms: [\r\n      { boneName: \"head\", removeParent: true },\r\n      { boneName: \"leg0\", removeParent: true, addCubeOriginOffset: [0, 0, -27] },\r\n      { boneName: \"leg1\", removeParent: true, addCubeOriginOffset: [0, 0, -27] },\r\n      { boneName: \"leg2\", removeParent: true, addCubeOriginOffset: [0, 0, -23] },\r\n      { boneName: \"leg3\", removeParent: true, addCubeOriginOffset: [0, 0, -23] },\r\n    ],\r\n  },\r\n\r\n  // \u2500\u2500 Enderman \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // The enderman geometry defines bones at \"animation-ready\" positions that\r\n  // Minecraft corrects via `animation.enderman.base_pose` (always-on loop).\r\n  // Without the base_pose offsets, the head is inside the body, the hat\r\n  // floats detached above, arms overlap the body, and legs clip underground.\r\n  //\r\n  // base_pose offsets (from animation.enderman.base_pose):\r\n  //   body:     position [0, +11, 0]     \u2014 raises entire model\r\n  //   head:     position [0,   0, 0]     \u2014 moves with body (+11) via bone hierarchy\r\n  //   hat:      position [0,   0, 0]     \u2014 moves with body via head (+11) via hierarchy\r\n  //   rightArm: position [-4,  0, 0]     \u2014 spread outward, moves with body (+11)\r\n  //   leftArm:  position [+4,  0, 0]     \u2014 spread outward, moves with body (+11)\r\n  //   rightLeg: position [0,  -5, 0]     \u2014 moves with body (+11), then -5 = net +6\r\n  //   leftLeg:  position [0,  -5, 0]     \u2014 moves with body (+11), then -5 = net +6\r\n  //\r\n  // Our renderer positions cubes at world coordinates (not through bone hierarchy),\r\n  // so the head doesn't automatically follow the body's offset. Additionally, the\r\n  // head pivot (Y=24) is 14 units below the body pivot (Y=38). In Minecraft's bone\r\n  // hierarchy rendering, the head ends up inside the body \u2014 it's the look_at_target\r\n  // animation that tilts the head up to sit on the shoulders. For our static render,\r\n  // we move the head to sit on top of the body (body top = Y=38 +11 = Y=49).\r\n  //\r\n  // Head total offset: +11 (body base_pose) +14 (lift to body top) = +25\r\n  // Hat stays at +11 because its geometry origin (Y=37.5) is already designed to\r\n  // surround the head at the body-top position (Y=49\u219257, hat Y=48.5\u219256.5).\r\n  {\r\n    geometryPatterns: [\"geometry.enderman*\"],\r\n    reason: \"Replicates animation.enderman.base_pose offsets + head-to-top lift\",\r\n    boneTransforms: [\r\n      { boneName: \"body\", addCubeOriginOffset: [0, 11, 0] },\r\n      { boneName: \"head\", addCubeOriginOffset: [0, 25, 0] },\r\n      { boneName: \"hat\", addCubeOriginOffset: [0, 11, 0] },\r\n      { boneName: \"rightArm\", addCubeOriginOffset: [-4, 11, 0] },\r\n      { boneName: \"leftArm\", addCubeOriginOffset: [4, 11, 0] },\r\n      { boneName: \"rightLeg\", addCubeOriginOffset: [0, 6, 0] },\r\n      { boneName: \"leftLeg\", addCubeOriginOffset: [0, 6, 0] },\r\n    ],\r\n  },\r\n];\r\n\r\n/**\r\n * Checks if a geometry identifier matches a pattern.\r\n * Supports simple wildcards: \"*\" matches any characters\r\n */\r\nfunction matchesPattern(geometryId: string, pattern: string): boolean {\r\n  // Normalize both to lowercase for comparison\r\n  const normalizedId = geometryId.toLowerCase();\r\n  const normalizedPattern = pattern.toLowerCase();\r\n\r\n  // Simple wildcard matching\r\n  if (normalizedPattern.includes(\"*\")) {\r\n    // Convert pattern to regex: escape special regex characters, then replace * with .*\r\n    // Must escape backslash first, then other special characters\r\n    const regexPattern = normalizedPattern.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\./g, \"\\\\.\").replace(/\\*/g, \".*\");\r\n    const regex = new RegExp(\"^\" + regexPattern + \"$\");\r\n    return regex.test(normalizedId);\r\n  }\r\n\r\n  return normalizedId === normalizedPattern;\r\n}\r\n\r\n/**\r\n * Finds the transform configuration for a given geometry identifier\r\n */\r\nexport function findGeometryTransform(geometryId: string): IVanillaGeometryTransform | undefined {\r\n  for (const transform of VANILLA_GEOMETRY_TRANSFORMS) {\r\n    for (const pattern of transform.geometryPatterns) {\r\n      if (matchesPattern(geometryId, pattern)) {\r\n        Log.verbose(`VanillaGeometryTransforms: Found transform for ${geometryId} (pattern: ${pattern})`);\r\n        return transform;\r\n      }\r\n    }\r\n  }\r\n  return undefined;\r\n}\r\n\r\n/**\r\n * Applies transforms to a geometry definition.\r\n * Returns a deep copy with transforms applied - does not modify the original.\r\n *\r\n * @param geometry The original geometry definition\r\n * @param geometryId The geometry identifier (e.g., \"geometry.cow.v1.8\")\r\n * @returns A transformed copy of the geometry, or the original if no transforms apply\r\n */\r\nexport function applyGeometryTransforms(geometry: IGeometry, geometryId: string): IGeometry {\r\n  const transformConfig = findGeometryTransform(geometryId);\r\n\r\n  if (!transformConfig) {\r\n    return geometry;\r\n  }\r\n\r\n  Log.verbose(`VanillaGeometryTransforms: Applying transforms to ${geometryId}: ${transformConfig.reason}`);\r\n\r\n  // Deep clone the geometry to avoid modifying the original\r\n  const transformed = JSON.parse(JSON.stringify(geometry)) as IGeometry;\r\n\r\n  if (!transformed.bones) {\r\n    return transformed;\r\n  }\r\n\r\n  // Apply each bone transform\r\n  for (const boneTransform of transformConfig.boneTransforms) {\r\n    for (const bone of transformed.bones) {\r\n      // Check if this transform applies to this bone\r\n      const matches = boneTransform.boneName === \"*\" || bone.name === boneTransform.boneName;\r\n\r\n      if (!matches) {\r\n        continue;\r\n      }\r\n\r\n      Log.verbose(`VanillaGeometryTransforms: Transforming bone \"${bone.name}\"`);\r\n\r\n      // Apply bind_pose_rotation modifications\r\n      if (boneTransform.setBindPoseRotation !== undefined) {\r\n        bone.bind_pose_rotation = [...boneTransform.setBindPoseRotation];\r\n        Log.verbose(`  - Set bind_pose_rotation to [${bone.bind_pose_rotation.join(\", \")}]`);\r\n      }\r\n\r\n      if (boneTransform.addBindPoseRotation !== undefined) {\r\n        const current = bone.bind_pose_rotation || [0, 0, 0];\r\n        bone.bind_pose_rotation = [\r\n          current[0] + boneTransform.addBindPoseRotation[0],\r\n          current[1] + boneTransform.addBindPoseRotation[1],\r\n          current[2] + boneTransform.addBindPoseRotation[2],\r\n        ];\r\n        Log.verbose(`  - Added to bind_pose_rotation, now [${bone.bind_pose_rotation.join(\", \")}]`);\r\n      }\r\n\r\n      // Apply pivot modifications\r\n      if (boneTransform.setPivot !== undefined) {\r\n        bone.pivot = [...boneTransform.setPivot];\r\n        Log.verbose(`  - Set pivot to [${bone.pivot.join(\", \")}]`);\r\n      }\r\n\r\n      if (boneTransform.addPivotOffset !== undefined) {\r\n        const current = bone.pivot || [0, 0, 0];\r\n        bone.pivot = [\r\n          current[0] + boneTransform.addPivotOffset[0],\r\n          current[1] + boneTransform.addPivotOffset[1],\r\n          current[2] + boneTransform.addPivotOffset[2],\r\n        ];\r\n        Log.verbose(`  - Added to pivot, now [${bone.pivot.join(\", \")}]`);\r\n      }\r\n\r\n      // Apply cube origin offsets\r\n      if (boneTransform.addCubeOriginOffset !== undefined && bone.cubes) {\r\n        for (const cube of bone.cubes) {\r\n          if (cube.origin) {\r\n            cube.origin = [\r\n              cube.origin[0] + boneTransform.addCubeOriginOffset[0],\r\n              cube.origin[1] + boneTransform.addCubeOriginOffset[1],\r\n              cube.origin[2] + boneTransform.addCubeOriginOffset[2],\r\n            ];\r\n          }\r\n        }\r\n        Log.verbose(`  - Added offset to ${bone.cubes.length} cube origins`);\r\n      }\r\n\r\n      // Apply per-cube rotation (rotates cube geometry only, not the bone TransformNode)\r\n      if (boneTransform.setCubeRotation !== undefined && bone.cubes) {\r\n        const bonePivot = bone.pivot || [0, 0, 0];\r\n        for (const cube of bone.cubes) {\r\n          cube.rotation = [...boneTransform.setCubeRotation];\r\n          cube.pivot = [...bonePivot];\r\n        }\r\n        Log.verbose(`  - Set per-cube rotation [${boneTransform.setCubeRotation.join(\", \")}] on ${bone.cubes.length} cubes (pivot: [${bonePivot.join(\", \")}])`);\r\n      }\r\n\r\n      // Apply parent modifications\r\n      if (boneTransform.removeParent) {\r\n        delete bone.parent;\r\n        Log.verbose(`  - Removed parent`);\r\n      }\r\n\r\n      if (boneTransform.setParent !== undefined) {\r\n        if (boneTransform.setParent === null) {\r\n          delete bone.parent;\r\n        } else {\r\n          bone.parent = boneTransform.setParent;\r\n        }\r\n        Log.verbose(`  - Set parent to \"${bone.parent || \"(none)\"}\"`);\r\n      }\r\n    }\r\n  }\r\n\r\n  return transformed;\r\n}\r\n\r\n/**\r\n * Returns a list of all registered geometry patterns that have transforms\r\n */\r\nexport function getRegisteredTransformPatterns(): string[] {\r\n  const patterns: string[] = [];\r\n  for (const transform of VANILLA_GEOMETRY_TRANSFORMS) {\r\n    patterns.push(...transform.geometryPatterns);\r\n  }\r\n  return patterns;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE: MolangEvaluator\r\n *\r\n * Evaluates Molang expressions used in Minecraft render controllers, animations,\r\n * and entity definitions. This is a subset evaluator focused on the expression\r\n * patterns found in render controllers:\r\n *\r\n * - Literals: `1.0`, `0`, `42`\r\n * - Query references: `query.is_baby`, `q.variant`\r\n * - Variable references: `variable.index`, `v.armor_texture_slot`\r\n * - Ternary conditionals: `query.is_baby ? Texture.baby : Texture.default`\r\n * - Nested ternary: `query.is_angry ? A : (query.is_tamed ? B : C)`\r\n * - Comparison operators: `==`, `!=`, `<`, `>`, `<=`, `>=`\r\n * - Logical operators: `&&`, `||`, `!`\r\n * - Arithmetic: `+`, `-`, `*`, `/`\r\n * - String references: `Texture.default`, `Geometry.baby`, `Array.geos`\r\n * - Array indexing: `Array.geos[query.is_sheared]`\r\n *\r\n * This evaluator uses a recursive descent parser rather than the existing\r\n * Molang.ts shunting-yard parser, because render controller expressions\r\n * contain string references (Texture.*, Geometry.*) and ternary operators\r\n * that the basic parser doesn't support.\r\n *\r\n * Related files:\r\n * - IMolangContext.ts \u2014 query/variable context for evaluation\r\n * - RenderControllerResolver.ts \u2014 uses this to resolve render controller fields\r\n * - IRenderControllerSet.ts \u2014 render controller data structures\r\n */\r\n\r\nimport IMolangContext from \"./IMolangContext\";\r\n\r\n/**\r\n * Result of evaluating a Molang expression. Can be a number (for arithmetic/boolean)\r\n * or a string (for reference resolution like \"Texture.default\").\r\n */\r\nexport type MolangValue = number | string;\r\n\r\n/**\r\n * Evaluates Molang expressions against an entity context.\r\n *\r\n * Design: stateless evaluator \u2014 create once, call evaluate() many times with\r\n * different expressions and contexts. Array definitions are passed per-call\r\n * since they come from the render controller, not the entity.\r\n */\r\nexport default class MolangEvaluator {\r\n  /**\r\n   * Evaluate a Molang expression string and return the result.\r\n   *\r\n   * @param expression The Molang expression (e.g., \"query.is_baby ? Texture.baby : Texture.default\")\r\n   * @param context Entity state context (query values, variables)\r\n   * @param arrays Optional array definitions from render controller (e.g., {\"Array.geos\": [\"Geometry.default\", \"Geometry.sheared\"]})\r\n   * @returns The evaluated result \u2014 a number or a string reference\r\n   */\r\n  evaluate(\r\n    expression: string,\r\n    context: IMolangContext,\r\n    arrays?: Map<string, string[]>\r\n  ): MolangValue {\r\n    const trimmed = expression.trim();\r\n    if (trimmed.length === 0) {\r\n      return 0;\r\n    }\r\n\r\n    const parser = new ExpressionParser(trimmed, context, arrays);\r\n    return parser.parseTernary();\r\n  }\r\n\r\n  /**\r\n   * Evaluate a Molang expression and return only the numeric result.\r\n   * String references resolve to 0.\r\n   */\r\n  evaluateNumber(\r\n    expression: string,\r\n    context: IMolangContext,\r\n    arrays?: Map<string, string[]>\r\n  ): number {\r\n    const result = this.evaluate(expression, context, arrays);\r\n    return typeof result === \"number\" ? result : 0;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a Molang expression and return only the string result.\r\n   * Numeric results resolve to empty string.\r\n   */\r\n  evaluateString(\r\n    expression: string,\r\n    context: IMolangContext,\r\n    arrays?: Map<string, string[]>\r\n  ): string {\r\n    const result = this.evaluate(expression, context, arrays);\r\n    return typeof result === \"string\" ? result : \"\";\r\n  }\r\n}\r\n\r\n/**\r\n * Recursive descent parser/evaluator for a single Molang expression.\r\n * Handles operator precedence via grammar rules:\r\n *\r\n *   ternary    \u2192 logicalOr ('?' ternary ':' ternary)?\r\n *   logicalOr  \u2192 logicalAnd ('||' logicalAnd)*\r\n *   logicalAnd \u2192 equality ('&&' equality)*\r\n *   equality   \u2192 comparison (('==' | '!=') comparison)*\r\n *   comparison \u2192 additive (('<' | '>' | '<=' | '>=') additive)*\r\n *   additive   \u2192 multiplicative (('+' | '-') multiplicative)*\r\n *   multiplicative \u2192 unary (('*' | '/') unary)*\r\n *   unary      \u2192 '!' unary | primary\r\n *   primary    \u2192 NUMBER | REFERENCE | '(' ternary ')' | arrayAccess\r\n */\r\nclass ExpressionParser {\r\n  private _expr: string;\r\n  private _pos: number;\r\n  private _context: IMolangContext;\r\n  private _arrays: Map<string, string[]> | undefined;\r\n\r\n  constructor(\r\n    expr: string,\r\n    context: IMolangContext,\r\n    arrays?: Map<string, string[]>\r\n  ) {\r\n    this._expr = expr;\r\n    this._pos = 0;\r\n    this._context = context;\r\n    this._arrays = arrays;\r\n  }\r\n\r\n  parseTernary(): MolangValue {\r\n    const condition = this.parseLogicalOr();\r\n\r\n    this.skipWhitespace();\r\n    if (this.peek() === \"?\") {\r\n      this.advance(); // skip '?'\r\n      const trueBranch = this.parseTernary();\r\n      this.skipWhitespace();\r\n      this.expect(\":\");\r\n      const falseBranch = this.parseTernary();\r\n      return this.isTruthy(condition) ? trueBranch : falseBranch;\r\n    }\r\n\r\n    return condition;\r\n  }\r\n\r\n  private parseLogicalOr(): MolangValue {\r\n    let left = this.parseLogicalAnd();\r\n\r\n    this.skipWhitespace();\r\n    while (this.matchStr(\"||\")) {\r\n      const right = this.parseLogicalAnd();\r\n      left = (this.isTruthy(left) || this.isTruthy(right)) ? 1 : 0;\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseLogicalAnd(): MolangValue {\r\n    let left = this.parseEquality();\r\n\r\n    this.skipWhitespace();\r\n    while (this.matchStr(\"&&\")) {\r\n      const right = this.parseEquality();\r\n      left = (this.isTruthy(left) && this.isTruthy(right)) ? 1 : 0;\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseEquality(): MolangValue {\r\n    let left = this.parseComparison();\r\n\r\n    this.skipWhitespace();\r\n    if (this.matchStr(\"==\")) {\r\n      const right = this.parseComparison();\r\n      return this.toNumber(left) === this.toNumber(right) ? 1 : 0;\r\n    }\r\n    if (this.matchStr(\"!=\")) {\r\n      const right = this.parseComparison();\r\n      return this.toNumber(left) !== this.toNumber(right) ? 1 : 0;\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseComparison(): MolangValue {\r\n    let left = this.parseAdditive();\r\n\r\n    this.skipWhitespace();\r\n    if (this.matchStr(\"<=\")) {\r\n      return this.toNumber(left) <= this.toNumber(this.parseAdditive()) ? 1 : 0;\r\n    }\r\n    if (this.matchStr(\">=\")) {\r\n      return this.toNumber(left) >= this.toNumber(this.parseAdditive()) ? 1 : 0;\r\n    }\r\n    if (this.matchStr(\"<\")) {\r\n      return this.toNumber(left) < this.toNumber(this.parseAdditive()) ? 1 : 0;\r\n    }\r\n    if (this.matchStr(\">\")) {\r\n      return this.toNumber(left) > this.toNumber(this.parseAdditive()) ? 1 : 0;\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseAdditive(): MolangValue {\r\n    let left = this.parseMultiplicative();\r\n\r\n    this.skipWhitespace();\r\n    while (true) {\r\n      if (this.matchStr(\"+\")) {\r\n        left = this.toNumber(left) + this.toNumber(this.parseMultiplicative());\r\n      } else if (this.matchStr(\"-\")) {\r\n        left = this.toNumber(left) - this.toNumber(this.parseMultiplicative());\r\n      } else {\r\n        break;\r\n      }\r\n      this.skipWhitespace();\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseMultiplicative(): MolangValue {\r\n    let left = this.parseUnary();\r\n\r\n    this.skipWhitespace();\r\n    while (true) {\r\n      if (this.matchStr(\"*\")) {\r\n        left = this.toNumber(left) * this.toNumber(this.parseUnary());\r\n      } else if (this.matchStr(\"/\")) {\r\n        const right = this.toNumber(this.parseUnary());\r\n        left = right !== 0 ? this.toNumber(left) / right : 0;\r\n      } else {\r\n        break;\r\n      }\r\n      this.skipWhitespace();\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseUnary(): MolangValue {\r\n    this.skipWhitespace();\r\n    if (this.matchStr(\"!\")) {\r\n      const val = this.parseUnary();\r\n      return this.isTruthy(val) ? 0 : 1;\r\n    }\r\n    return this.parsePrimary();\r\n  }\r\n\r\n  private parsePrimary(): MolangValue {\r\n    this.skipWhitespace();\r\n\r\n    // Parenthesized expression\r\n    if (this.peek() === \"(\") {\r\n      this.advance();\r\n      const val = this.parseTernary();\r\n      this.skipWhitespace();\r\n      if (this.peek() === \")\") {\r\n        this.advance();\r\n      }\r\n      return val;\r\n    }\r\n\r\n    // Number literal (including negative and decimal)\r\n    if (this.isDigit(this.peek()) || (this.peek() === \"-\" && this.isDigit(this.peekAt(1)))) {\r\n      return this.parseNumber();\r\n    }\r\n\r\n    // Identifier/reference (query.x, variable.y, Texture.default, Array.geos, etc.)\r\n    if (this.isIdentStart(this.peek())) {\r\n      return this.parseReference();\r\n    }\r\n\r\n    // Single-quoted string literal\r\n    if (this.peek() === \"'\") {\r\n      return this.parseStringLiteral();\r\n    }\r\n\r\n    // Unknown \u2014 return 0\r\n    return 0;\r\n  }\r\n\r\n  private parseNumber(): number {\r\n    let numStr = \"\";\r\n    if (this.peek() === \"-\") {\r\n      numStr += \"-\";\r\n      this.advance();\r\n    }\r\n    while (this._pos < this._expr.length && (this.isDigit(this.peek()) || this.peek() === \".\")) {\r\n      numStr += this.peek();\r\n      this.advance();\r\n    }\r\n    return parseFloat(numStr) || 0;\r\n  }\r\n\r\n  private parseStringLiteral(): string {\r\n    this.advance(); // skip opening '\r\n    let str = \"\";\r\n    while (this._pos < this._expr.length && this.peek() !== \"'\") {\r\n      str += this.peek();\r\n      this.advance();\r\n    }\r\n    if (this.peek() === \"'\") {\r\n      this.advance(); // skip closing '\r\n    }\r\n    return str;\r\n  }\r\n\r\n  private parseReference(): MolangValue {\r\n    let ident = this.parseIdentifier();\r\n\r\n    // Expand short forms\r\n    if (ident === \"q\") ident = \"query\";\r\n    else if (ident === \"v\") ident = \"variable\";\r\n    else if (ident === \"t\") ident = \"temp\";\r\n    else if (ident === \"c\") ident = \"context\";\r\n\r\n    // Check for dot-notation: query.is_baby, Texture.default, Array.geos\r\n    if (this.peek() === \".\") {\r\n      this.advance(); // skip '.'\r\n      const member = this.parseIdentifier();\r\n      const fullRef = ident + \".\" + member;\r\n\r\n      // Handle query lookups\r\n      if (ident === \"query\") {\r\n        return this._context.queries.get(fullRef) ?? this._context.queries.get(\"query.\" + member) ?? 0;\r\n      }\r\n\r\n      // Handle variable lookups\r\n      if (ident === \"variable\") {\r\n        return this._context.variables.get(fullRef) ?? this._context.variables.get(\"variable.\" + member) ?? 0;\r\n      }\r\n\r\n      // Handle temp lookups\r\n      if (ident === \"temp\") {\r\n        return this._context.temps.get(fullRef) ?? this._context.temps.get(\"temp.\" + member) ?? 0;\r\n      }\r\n\r\n      // Handle Array access: Array.geos[index]\r\n      if (ident === \"Array\" || ident === \"array\") {\r\n        this.skipWhitespace();\r\n        if (this.peek() === \"[\") {\r\n          this.advance(); // skip '['\r\n          const indexVal = this.parseTernary();\r\n          this.skipWhitespace();\r\n          if (this.peek() === \"]\") {\r\n            this.advance(); // skip ']'\r\n          }\r\n          return this.resolveArrayAccess(fullRef, this.toNumber(indexVal));\r\n        }\r\n        // Array reference without index \u2014 return as string\r\n        return fullRef;\r\n      }\r\n\r\n      // Anything else (Texture.default, Geometry.baby, Material.body) \u2014 return as string reference\r\n      return fullRef;\r\n    }\r\n\r\n    // Check for function call: math.sin(x) \u2014 simplified, just skip args for now\r\n    if (this.peek() === \"(\") {\r\n      // For now, evaluate function arguments but return 0 for unsupported functions\r\n      this.advance(); // skip '('\r\n      if (this.peek() !== \")\") {\r\n        this.parseTernary(); // evaluate argument (discard result)\r\n      }\r\n      if (this.peek() === \")\") {\r\n        this.advance(); // skip ')'\r\n      }\r\n      return 0;\r\n    }\r\n\r\n    // Bare identifier \u2014 try as variable\r\n    const queryVal = this._context.queries.get(\"query.\" + ident);\r\n    if (queryVal !== undefined) return queryVal;\r\n\r\n    const varVal = this._context.variables.get(\"variable.\" + ident);\r\n    if (varVal !== undefined) return varVal;\r\n\r\n    // Could be \"this\" keyword (passthrough in color context)\r\n    if (ident === \"this\") return \"this\";\r\n\r\n    return ident;\r\n  }\r\n\r\n  private resolveArrayAccess(arrayName: string, index: number): MolangValue {\r\n    if (!this._arrays) return arrayName;\r\n\r\n    const arr = this._arrays.get(arrayName);\r\n    if (!arr || arr.length === 0) return arrayName;\r\n\r\n    // Molang uses integer index, clamp to valid range\r\n    const idx = Math.max(0, Math.min(Math.floor(index), arr.length - 1));\r\n    return arr[idx];\r\n  }\r\n\r\n  private parseIdentifier(): string {\r\n    let id = \"\";\r\n    while (this._pos < this._expr.length && this.isIdentChar(this.peek())) {\r\n      id += this.peek();\r\n      this.advance();\r\n    }\r\n    return id;\r\n  }\r\n\r\n  // -- Helpers --\r\n\r\n  private isTruthy(val: MolangValue): boolean {\r\n    if (typeof val === \"number\") return val !== 0;\r\n    if (typeof val === \"string\") return val.length > 0;\r\n    return false;\r\n  }\r\n\r\n  private toNumber(val: MolangValue): number {\r\n    if (typeof val === \"number\") return val;\r\n    return 0;\r\n  }\r\n\r\n  private peek(): string {\r\n    return this._pos < this._expr.length ? this._expr[this._pos] : \"\";\r\n  }\r\n\r\n  private peekAt(offset: number): string {\r\n    const idx = this._pos + offset;\r\n    return idx < this._expr.length ? this._expr[idx] : \"\";\r\n  }\r\n\r\n  private advance(): void {\r\n    this._pos++;\r\n  }\r\n\r\n  private skipWhitespace(): void {\r\n    while (this._pos < this._expr.length && /\\s/.test(this._expr[this._pos])) {\r\n      this._pos++;\r\n    }\r\n  }\r\n\r\n  private matchStr(s: string): boolean {\r\n    this.skipWhitespace();\r\n    if (this._expr.substring(this._pos, this._pos + s.length) === s) {\r\n      // For multi-char operators, make sure next char isn't part of a longer operator\r\n      if (s.length === 1 && (s === \"<\" || s === \">\" || s === \"!\")) {\r\n        const next = this.peekAt(s.length);\r\n        if (next === \"=\") return false;\r\n      }\r\n      this._pos += s.length;\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  private expect(s: string): void {\r\n    this.skipWhitespace();\r\n    if (this._expr.substring(this._pos, this._pos + s.length) === s) {\r\n      this._pos += s.length;\r\n    }\r\n    // Silently skip if missing \u2014 defensive for malformed expressions\r\n  }\r\n\r\n  private isDigit(ch: string): boolean {\r\n    return ch >= \"0\" && ch <= \"9\";\r\n  }\r\n\r\n  private isIdentStart(ch: string): boolean {\r\n    return (ch >= \"a\" && ch <= \"z\") || (ch >= \"A\" && ch <= \"Z\") || ch === \"_\";\r\n  }\r\n\r\n  private isIdentChar(ch: string): boolean {\r\n    return this.isIdentStart(ch) || this.isDigit(ch) || ch === \"_\";\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE: RenderControllerResolver\r\n *\r\n * Resolves a Minecraft render controller into concrete geometry IDs, texture paths,\r\n * and tint colors by evaluating Molang expressions against an entity context.\r\n *\r\n * Pipeline:\r\n *   IRenderController (from .render_controllers.json)\r\n *   + EntityTypeResourceDefinition (texture/geometry key maps)\r\n *   + IMolangContext (entity state: is_baby, variant, etc.)\r\n *   \u2192 IRenderResolvedState (concrete geometry ID, texture paths, tint)\r\n *\r\n * Reference resolution:\r\n *   \"Texture.default\" \u2192 look up \"default\" key in entity's textures map \u2192 \"textures/entity/sheep/sheep\"\r\n *   \"Geometry.baby\"   \u2192 look up \"baby\" key in entity's geometry map \u2192 \"geometry.sheep.baby\"\r\n *   \"Array.geos[query.is_sheared]\" \u2192 evaluate index, look up in render controller arrays\r\n *\r\n * Related files:\r\n * - MolangEvaluator.ts \u2014 expression evaluation engine\r\n * - IMolangContext.ts \u2014 entity state context\r\n * - IRenderControllerSet.ts \u2014 render controller data structures\r\n * - IRenderResolvedState.ts \u2014 output interface\r\n * - EntityTypeResourceDefinition.ts \u2014 entity texture/geometry key maps\r\n */\r\n\r\nimport { IRenderController, RenderControllerArrayLists } from \"./IRenderControllerSet\";\r\nimport IMolangContext from \"./IMolangContext\";\r\nimport IRenderResolvedState, { IRenderTextureLayer } from \"./IRenderResolvedState\";\r\nimport MolangEvaluator from \"./MolangEvaluator\";\r\n\r\nexport default class RenderControllerResolver {\r\n  private _evaluator: MolangEvaluator;\r\n\r\n  constructor() {\r\n    this._evaluator = new MolangEvaluator();\r\n  }\r\n\r\n  /**\r\n   * Resolve a render controller to concrete geometry/texture/material values.\r\n   *\r\n   * @param rc The render controller data from the .render_controllers.json file\r\n   * @param textureMap Entity's texture key map: {\"default\": \"textures/entity/sheep/sheep\", \"baby\": \"...\"}\r\n   * @param geometryMap Entity's geometry key map: {\"default\": \"geometry.sheep.v1.8\", \"sheared\": \"...\"}\r\n   * @param context Molang evaluation context (entity state)\r\n   * @returns Resolved geometry ID, texture layers, and optional tint\r\n   */\r\n  resolve(\r\n    rc: IRenderController,\r\n    textureMap: { [key: string]: string | undefined },\r\n    geometryMap: { [key: string]: string | undefined },\r\n    context: IMolangContext\r\n  ): IRenderResolvedState {\r\n    const arrays = this._buildArrayMap(rc.arrays);\r\n\r\n    // Resolve geometry\r\n    let geometryId: string | undefined;\r\n    if (rc.geometry) {\r\n      const geoRef = this._evaluator.evaluateString(rc.geometry, context, arrays);\r\n      geometryId = this._resolveReference(geoRef, \"Geometry\", geometryMap);\r\n    }\r\n\r\n    // Resolve texture layers\r\n    const textureLayers: IRenderTextureLayer[] = [];\r\n    if (rc.textures) {\r\n      for (const texExpr of rc.textures) {\r\n        const texRef = this._evaluator.evaluateString(texExpr, context, arrays);\r\n        const texPath = this._resolveReference(texRef, \"Texture\", textureMap);\r\n        if (texPath) {\r\n          textureLayers.push({ texturePath: texPath });\r\n        }\r\n      }\r\n    }\r\n\r\n    // If no layers resolved, try fallback to \"default\" texture\r\n    if (textureLayers.length === 0 && textureMap[\"default\"]) {\r\n      textureLayers.push({ texturePath: textureMap[\"default\"] });\r\n    }\r\n\r\n    return {\r\n      geometryId,\r\n      textureLayers,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Resolve a reference like \"Texture.default\" or \"Geometry.baby\" to the actual\r\n   * path/ID using the entity's key maps.\r\n   */\r\n  private _resolveReference(\r\n    ref: string,\r\n    prefix: string,\r\n    keyMap: { [key: string]: string | undefined }\r\n  ): string | undefined {\r\n    if (!ref) return undefined;\r\n\r\n    // Check if it's a prefixed reference: \"Texture.default\" \u2192 key \"default\"\r\n    const prefixDot = prefix + \".\";\r\n    if (ref.startsWith(prefixDot)) {\r\n      const key = ref.substring(prefixDot.length);\r\n      return keyMap[key] ?? keyMap[\"default\"];\r\n    }\r\n\r\n    // Check case-insensitive prefix match\r\n    const lowerRef = ref.toLowerCase();\r\n    const lowerPrefix = prefix.toLowerCase() + \".\";\r\n    if (lowerRef.startsWith(lowerPrefix)) {\r\n      const key = ref.substring(lowerPrefix.length);\r\n      return keyMap[key] ?? keyMap[\"default\"];\r\n    }\r\n\r\n    // It might already be a direct path (e.g., \"textures/entity/sheep/sheep\")\r\n    if (ref.includes(\"/\")) {\r\n      return ref;\r\n    }\r\n\r\n    // Try as a key directly\r\n    if (keyMap[ref]) {\r\n      return keyMap[ref];\r\n    }\r\n\r\n    return keyMap[\"default\"];\r\n  }\r\n\r\n  /**\r\n   * Build a flat Map<string, string[]> from the render controller's nested array definitions.\r\n   * Converts: { textures: { \"Array.skins\": [\"Texture.a\", \"Texture.b\"] }, geometries: {...} }\r\n   * To: Map { \"Array.skins\" \u2192 [\"Texture.a\", \"Texture.b\"], \"Array.geos\" \u2192 [...] }\r\n   */\r\n  private _buildArrayMap(arrays: RenderControllerArrayLists | undefined): Map<string, string[]> | undefined {\r\n    if (!arrays) return undefined;\r\n\r\n    const map = new Map<string, string[]>();\r\n\r\n    for (const category of [\"textures\", \"geometries\", \"materials\"] as const) {\r\n      const categoryArrays = arrays[category];\r\n      if (categoryArrays) {\r\n        for (const arrayName in categoryArrays) {\r\n          const entries = categoryArrays[arrayName];\r\n          if (entries) {\r\n            map.set(arrayName, entries);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return map.size > 0 ? map : undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Context for evaluating Molang expressions. Provides query values, variables,\r\n * and temporary values that Molang expressions can reference.\r\n *\r\n * Used by MolangEvaluator to resolve `query.*`, `variable.*`, and `temp.*` references\r\n * during render controller evaluation.\r\n */\r\nexport default interface IMolangContext {\r\n  queries: Map<string, number>;\r\n  variables: Map<string, number>;\r\n  temps: Map<string, number>;\r\n}\r\n\r\n/**\r\n * Creates a default entity context for gallery/preview rendering.\r\n * Represents an adult entity with default variant (not baby, not sheared, variant 0).\r\n */\r\nexport function createDefaultEntityContext(): IMolangContext {\r\n  const queries = new Map<string, number>();\r\n\r\n  // Common entity state queries - default to adult, normal appearance\r\n  queries.set(\"query.is_baby\", 0);\r\n  queries.set(\"query.is_sheared\", 0);\r\n  queries.set(\"query.is_tamed\", 0);\r\n  queries.set(\"query.is_angry\", 0);\r\n  queries.set(\"query.is_saddled\", 0);\r\n  queries.set(\"query.is_charged\", 0);\r\n  queries.set(\"query.is_powered\", 0);\r\n  queries.set(\"query.is_ignited\", 0);\r\n  queries.set(\"query.is_swimming\", 0);\r\n  queries.set(\"query.is_sleeping\", 0);\r\n  queries.set(\"query.variant\", 0);\r\n  queries.set(\"query.mark_variant\", 0);\r\n  queries.set(\"query.skin_id\", 0);\r\n\r\n  return {\r\n    queries,\r\n    variables: new Map<string, number>(),\r\n    temps: new Map<string, number>(),\r\n  };\r\n}\r\n", "import Database from \"./Database\";\r\nimport ItemTextureCatalogDefinition from \"./ItemTextureCatalogDefinition\";\r\nimport SoundDefinitionCatalogDefinition from \"./SoundDefinitionCatalogDefinition\";\r\nimport BlocksCatalogDefinition from \"./BlocksCatalogDefinition\";\r\nimport TerrainTextureCatalogDefinition from \"./TerrainTextureCatalogDefinition\";\r\nimport EntityTypeResourceDefinition from \"./EntityTypeResourceDefinition\";\r\nimport AttachableResourceDefinition from \"./AttachableResourceDefinition\";\r\nimport ModelGeometryDefinition from \"./ModelGeometryDefinition\";\r\nimport { IGeometry, IGeometryBone } from \"./IModelGeometry\";\r\nimport Log from \"../core/Log\";\r\nimport { applyGeometryTransforms } from \"./VanillaGeometryTransforms\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport RenderControllerSetDefinition from \"./RenderControllerSetDefinition\";\r\nimport RenderControllerResolver from \"./RenderControllerResolver\";\r\nimport { createDefaultEntityContext } from \"./IMolangContext\";\r\n\r\nexport interface IVanillaEntityModelData {\r\n  entityTypeId: string;\r\n  geometryId?: string;\r\n  texturePath?: string;\r\n  textureUrl?: string;\r\n  geometry?: IGeometry;\r\n  textureData?: Uint8Array;\r\n  modelDefinition?: ModelGeometryDefinition;\r\n  /** Optional tint color for entities with colored overlays (e.g., sheep wool). RGBA 0-1 range. */\r\n  tintColor?: { r: number; g: number; b: number; a: number };\r\n  /** When true, render texture as fully opaque (ignore alpha channel). Used for entities\r\n   *  whose textures have near-zero alpha body pixels designed for multi-layer overlay. */\r\n  ignoreAlpha?: boolean;\r\n}\r\n\r\nexport interface IVanillaAttachableModelData {\r\n  attachableTypeId: string;\r\n  geometryId?: string;\r\n  texturePath?: string;\r\n  textureUrl?: string;\r\n  geometry?: IGeometry;\r\n  textureData?: Uint8Array;\r\n  modelDefinition?: ModelGeometryDefinition;\r\n  /** Base humanoid geometry for armor attachables (Steve model) */\r\n  baseGeometry?: IGeometry;\r\n  baseModelDefinition?: ModelGeometryDefinition;\r\n  baseTextureUrl?: string;\r\n  baseTextureData?: Uint8Array;\r\n}\r\n\r\nexport default class VanillaProjectManager {\r\n  static blocksCatalog: BlocksCatalogDefinition | null = null;\r\n  static itemTextureCatalog: ItemTextureCatalogDefinition | null = null;\r\n  static terrainTextureCatalog: TerrainTextureCatalogDefinition | null = null;\r\n  static soundDefinitionCatalog: SoundDefinitionCatalogDefinition | null = null;\r\n\r\n  // Cache for entity resource definitions\r\n  private static _entityResourceCache: Map<string, EntityTypeResourceDefinition> = new Map();\r\n  private static _entityModelDataCache: Map<string, IVanillaEntityModelData> = new Map();\r\n\r\n  // Cache for attachable resource definitions\r\n  private static _attachableResourceCache: Map<string, AttachableResourceDefinition> = new Map();\r\n  private static _attachableModelDataCache: Map<string, IVanillaAttachableModelData> = new Map();\r\n\r\n  /**\r\n   * Get a list of all vanilla entity type IDs\r\n   */\r\n  static async getVanillaEntityTypeIds(): Promise<string[]> {\r\n    const vanillaFolder = await Database.getPreviewVanillaFolder();\r\n    if (!vanillaFolder) return [];\r\n\r\n    const entityFolder = await vanillaFolder.getFolderFromRelativePath(\"/resource_pack/entity/\");\r\n    if (!entityFolder) return [];\r\n\r\n    await entityFolder.load();\r\n\r\n    const entityIds: string[] = [];\r\n    for (const fileName in entityFolder.files) {\r\n      if (\r\n        fileName.endsWith(\".entity.json\") &&\r\n        !fileName.includes(\"v1.0\") &&\r\n        !fileName.includes(\".v2.\") &&\r\n        !fileName.includes(\".v3.\") &&\r\n        !fileName.includes(\"_v1.\") &&\r\n        !fileName.includes(\"_v2.\") &&\r\n        !fileName.includes(\"_v3.\")\r\n      ) {\r\n        const entityId = fileName.replace(\".entity.json\", \"\");\r\n        entityIds.push(entityId);\r\n      }\r\n    }\r\n\r\n    entityIds.sort();\r\n    return entityIds;\r\n  }\r\n\r\n  /**\r\n   * Get entity resource definition for a vanilla entity by type ID\r\n   */\r\n  static async getVanillaEntityResource(typeId: string): Promise<EntityTypeResourceDefinition | null> {\r\n    // Remove minecraft: prefix if present\r\n    const shortId = typeId.replace(\"minecraft:\", \"\");\r\n\r\n    // Check cache first\r\n    if (this._entityResourceCache.has(shortId)) {\r\n      return this._entityResourceCache.get(shortId) || null;\r\n    }\r\n\r\n    const file = await Database.getPreviewVanillaFile(`/resource_pack/entity/${shortId}.entity.json`);\r\n    if (!file) return null;\r\n\r\n    const etrd = await EntityTypeResourceDefinition.ensureOnFile(file);\r\n    if (etrd) {\r\n      this._entityResourceCache.set(shortId, etrd);\r\n      return etrd;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Get complete model data for a vanilla entity, including geometry and texture.\r\n   * Uses the \"default\" variant by default, ensuring geometry and texture are properly matched.\r\n   * @param typeId - Entity type ID (e.g., \"cow\" or \"minecraft:cow\")\r\n   * @param variantKey - Optional variant key (e.g., \"default\", \"warm\", \"cold\"). Defaults to \"default\".\r\n   */\r\n  static async getVanillaEntityModelData(\r\n    typeId: string,\r\n    variantKey: string = \"default\"\r\n  ): Promise<IVanillaEntityModelData | null> {\r\n    const shortId = typeId.replace(\"minecraft:\", \"\");\r\n    const cacheKey = `${shortId}_${variantKey}`;\r\n\r\n    // Check cache first\r\n    if (this._entityModelDataCache.has(cacheKey)) {\r\n      const cached = this._entityModelDataCache.get(cacheKey) || null;\r\n      // If cached but missing texture, try reloading\r\n      if (cached && !cached.textureData && !cached.textureUrl) {\r\n        this._entityModelDataCache.delete(cacheKey);\r\n      } else {\r\n        return cached;\r\n      }\r\n    }\r\n\r\n    const entityResource = await this.getVanillaEntityResource(shortId);\r\n    if (!entityResource) {\r\n      // Not a vanilla entity, return null - this is expected for custom entities\r\n      return null;\r\n    }\r\n\r\n    const modelData: IVanillaEntityModelData = {\r\n      entityTypeId: shortId,\r\n    };\r\n\r\n    // Try render controller-based resolution first\r\n    let rcResolved: { geometryId?: string; textureLayers: { texturePath: string; tintColor?: { r: number; g: number; b: number; a: number } }[] } | null = null;\r\n    try {\r\n      rcResolved = await this._resolveViaRenderController(shortId, entityResource);\r\n    } catch {\r\n      // Render controller resolution is optional \u2014 fall back to key-based matching\r\n    }\r\n\r\n    // Get geometry and texture \u2014 prefer render controller resolution, fall back to key-based matching\r\n    let geometryId: string | undefined;\r\n    let texturePath: string | undefined;\r\n\r\n    if (rcResolved) {\r\n      geometryId = rcResolved.geometryId;\r\n      if (rcResolved.textureLayers.length > 0) {\r\n        texturePath = rcResolved.textureLayers[0].texturePath;\r\n        // Propagate tint color from first layer if present\r\n        if (rcResolved.textureLayers[0].tintColor) {\r\n          modelData.tintColor = rcResolved.textureLayers[0].tintColor;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Fall back to variant-key matching if render controller didn't resolve\r\n    if (!geometryId || !texturePath) {\r\n      const matched = entityResource.getMatchedGeometryAndTexture(variantKey);\r\n      if (!geometryId) geometryId = matched.geometryId;\r\n      if (!texturePath) texturePath = matched.texturePath;\r\n    }\r\n\r\n    // Per-material rendering adjustments.\r\n    // Most vanilla entity materials use alpha TEST (binary: alpha > 0.5 = opaque,\r\n    // alpha \u2264 0.5 = invisible). This is set in ModelMeshFactory via MATERIAL_ALPHATEST.\r\n    // A few specific materials render fully OPAQUE (ignoring alpha entirely):\r\n    const materials = entityResource.data?.materials;\r\n    const defaultMaterial = materials?.[\"default\"];\r\n\r\n    const opaqueMaterials = new Set([\r\n      \"enderman\",  // Head texture has alpha=0 pixels that should render as opaque black\r\n      \"sheep\",     // Wool overlay texture has near-zero alpha body pixels\r\n    ]);\r\n\r\n    if (defaultMaterial && opaqueMaterials.has(defaultMaterial)) {\r\n      modelData.ignoreAlpha = true;\r\n    }\r\n\r\n    // Sheep-specific: apply wool tint color\r\n    if (defaultMaterial === \"sheep\") {\r\n      // White sheep wool color from Minecraft's color palette (#E7E7E7 / 0.906 per channel)\r\n      modelData.tintColor = { r: 0.906, g: 0.906, b: 0.906, a: 1.0 };\r\n    }\r\n\r\n    // Load geometry\r\n    if (geometryId) {\r\n      modelData.geometryId = geometryId;\r\n\r\n      const geometry = await this._loadVanillaGeometry(geometryId);\r\n      if (geometry) {\r\n        // Apply VanillaGeometryTransforms to correct for Minecraft's hardcoded renderer quirks\r\n        // (e.g., cow and sheep body bone rotation corrections)\r\n        modelData.geometry = applyGeometryTransforms(geometry.geometry, geometryId);\r\n        modelData.modelDefinition = geometry.definition;\r\n      } else {\r\n        Log.debugAlert(`Failed to load geometry for ${shortId}: ${geometryId}`);\r\n      }\r\n    }\r\n\r\n    // Load texture - use the matched texture path to ensure it corresponds to the geometry\r\n    if (texturePath) {\r\n      // Remove file extension if present\r\n      if (texturePath.endsWith(\".png\") || texturePath.endsWith(\".tga\")) {\r\n        texturePath = texturePath.substring(0, texturePath.lastIndexOf(\".\"));\r\n      }\r\n\r\n      modelData.texturePath = texturePath;\r\n\r\n      // Set texture URL - use serve folder which has PNG versions\r\n      // The URL is relative to the public folder and will be served at runtime\r\n      modelData.textureUrl = CreatorToolsHost.contentWebRoot + `res/latest/van/serve/resource_pack/${texturePath}.png`;\r\n\r\n      // Also try to load texture data for entities that may have it available\r\n      const textureData = await this.loadVanillaTexture(texturePath);\r\n      if (textureData) {\r\n        modelData.textureData = textureData;\r\n      }\r\n    }\r\n\r\n    // Cache the result\r\n    this._entityModelDataCache.set(cacheKey, modelData);\r\n\r\n    return modelData;\r\n  }\r\n\r\n  /**\r\n   * Attempt to resolve an entity's geometry and texture via its render controller.\r\n   * Falls back to null if no render controller is found or resolution fails.\r\n   */\r\n  private static async _resolveViaRenderController(\r\n    shortId: string,\r\n    entityResource: EntityTypeResourceDefinition\r\n  ): Promise<{ geometryId?: string; textureLayers: { texturePath: string; tintColor?: { r: number; g: number; b: number; a: number } }[] } | null> {\r\n    try {\r\n      const rcIds = entityResource.renderControllerIdList;\r\n      if (!rcIds || rcIds.length === 0) return null;\r\n\r\n      const textureMap = entityResource.data?.textures;\r\n      const geometryMap = entityResource.data?.geometry;\r\n      if (!textureMap || !geometryMap) return null;\r\n\r\n      const rcId = typeof rcIds[0] === \"string\" ? rcIds[0] : String(rcIds[0]);\r\n\r\n      const rcDef = await this._loadVanillaRenderController(shortId, rcId);\r\n      if (!rcDef) return null;\r\n\r\n      const resolver = new RenderControllerResolver();\r\n      const context = createDefaultEntityContext();\r\n\r\n      const result = resolver.resolve(rcDef, textureMap, geometryMap, context);\r\n\r\n      // For sheep, the render controller resolves to the woolly default geometry\r\n      // (geometry.sheep.v1.8). The geometry transform system now handles the\r\n      // body bind_pose_rotation \u2192 per-cube rotation conversion, so we no longer\r\n      // need to force the \"sheared\" geometry. Let the render controller resolution\r\n      // stand as-is.\r\n\r\n      return result;\r\n    } catch (err) {\r\n      Log.verbose(`Render controller resolution failed for ${shortId}: ${err}`);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Load a vanilla render controller by its ID (e.g., \"controller.render.sheep.v2\").\r\n   * Tries candidate filenames based on entity short ID via Database.getPreviewVanillaFile,\r\n   * which uses the IFile/IFolder storage abstractions and works across web, Node.js, etc.\r\n   */\r\n  private static async _loadVanillaRenderController(\r\n    entityShortId: string,\r\n    controllerId: string\r\n  ): Promise<import(\"./IRenderControllerSet\").IRenderController | null> {\r\n    const candidates = [\r\n      `/resource_pack/render_controllers/${entityShortId}.render_controllers.json`,\r\n      `/resource_pack/render_controllers/${entityShortId}.v2.render_controllers.json`,\r\n      `/resource_pack/render_controllers/${entityShortId}.v3.render_controllers.json`,\r\n      `/resource_pack/render_controllers/${entityShortId}.v4.render_controllers.json`,\r\n    ];\r\n\r\n    for (const filePath of candidates) {\r\n      const file = await Database.getPreviewVanillaFile(filePath);\r\n      if (file) {\r\n        const rcSetDef = new RenderControllerSetDefinition();\r\n        rcSetDef.file = file;\r\n        await rcSetDef.load();\r\n\r\n        const rcData = rcSetDef.data;\r\n        if (rcData?.render_controllers) {\r\n          const rc = rcData.render_controllers[controllerId];\r\n          if (rc) return rc;\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Get a list of all vanilla attachable type IDs (items with 3D models like armor, bow, shield).\r\n   * Filters out .player.json variants and index.json.\r\n   */\r\n  static async getVanillaAttachableTypeIds(): Promise<string[]> {\r\n    const vanillaFolder = await Database.getPreviewVanillaFolder();\r\n    if (!vanillaFolder) return [];\r\n\r\n    const attachableFolder = await vanillaFolder.getFolderFromRelativePath(\"/resource_pack/attachables/\");\r\n    if (!attachableFolder) return [];\r\n\r\n    await attachableFolder.load();\r\n\r\n    const attachableIds: string[] = [];\r\n    for (const fileName in attachableFolder.files) {\r\n      // Skip player variants (e.g., diamond_chestplate.player.json) and index\r\n      if (fileName.includes(\".player.\") || fileName === \"index.json\") {\r\n        continue;\r\n      }\r\n\r\n      if (fileName.endsWith(\".json\")) {\r\n        // Remove extensions: \"bow.json\" \u2192 \"bow\", \"crossbow.entity.json\" \u2192 \"crossbow\"\r\n        let id = fileName.replace(\".entity.json\", \"\").replace(\".json\", \"\");\r\n        attachableIds.push(id);\r\n      }\r\n    }\r\n\r\n    attachableIds.sort();\r\n    return attachableIds;\r\n  }\r\n\r\n  /**\r\n   * Get attachable resource definition for a vanilla attachable by type ID.\r\n   */\r\n  static async getVanillaAttachableResource(typeId: string): Promise<AttachableResourceDefinition | null> {\r\n    const shortId = typeId.replace(\"minecraft:\", \"\");\r\n\r\n    if (this._attachableResourceCache.has(shortId)) {\r\n      return this._attachableResourceCache.get(shortId) || null;\r\n    }\r\n\r\n    // Try multiple file name patterns\r\n    const possibleFiles = [`${shortId}.json`, `${shortId}.entity.json`];\r\n\r\n    for (const fileName of possibleFiles) {\r\n      const file = await Database.getPreviewVanillaFile(`/resource_pack/attachables/${fileName}`);\r\n      if (file) {\r\n        const ard = await AttachableResourceDefinition.ensureOnFile(file);\r\n        if (ard) {\r\n          this._attachableResourceCache.set(shortId, ard);\r\n          return ard;\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Get complete model data for a vanilla attachable, including geometry and texture.\r\n   * @param typeId - Attachable type ID (e.g., \"diamond_chestplate\" or \"minecraft:diamond_chestplate\")\r\n   */\r\n  static async getVanillaAttachableModelData(typeId: string): Promise<IVanillaAttachableModelData | null> {\r\n    const shortId = typeId.replace(\"minecraft:\", \"\");\r\n\r\n    if (this._attachableModelDataCache.has(shortId)) {\r\n      return this._attachableModelDataCache.get(shortId) || null;\r\n    }\r\n\r\n    const attachableResource = await this.getVanillaAttachableResource(shortId);\r\n    if (!attachableResource) {\r\n      return null;\r\n    }\r\n\r\n    const modelData: IVanillaAttachableModelData = {\r\n      attachableTypeId: shortId,\r\n    };\r\n\r\n    // Get default geometry\r\n    const geometry = attachableResource.geometry;\r\n    if (geometry && geometry[\"default\"]) {\r\n      let geometryId = geometry[\"default\"];\r\n      modelData.geometryId = geometryId;\r\n\r\n      // For armor attachables, the attachable references IDs like \"geometry.humanoid.armor.chestplate\"\r\n      // which live in mobs.json and use cross-file v1.8.0 inheritance (\u2192geometry.zombie).\r\n      // Instead, use the equivalent self-contained geometry from player_armor.json:\r\n      // \"geometry.humanoid.armor.X\" \u2192 \"geometry.player.armor.X\"\r\n      let armorGeoId: string | undefined;\r\n      if (geometryId.startsWith(\"geometry.humanoid.armor.\")) {\r\n        armorGeoId = geometryId.replace(\"geometry.humanoid.armor.\", \"geometry.player.armor.\");\r\n      }\r\n\r\n      let geoResult = null;\r\n      if (armorGeoId) {\r\n        // Try the player_armor.json version first (self-contained inheritance chain)\r\n        geoResult = await this._loadVanillaGeometry(armorGeoId);\r\n      }\r\n      if (!geoResult) {\r\n        geoResult = await this._loadVanillaGeometry(geometryId);\r\n      }\r\n\r\n      if (geoResult) {\r\n        modelData.geometry = applyGeometryTransforms(geoResult.geometry, geometryId);\r\n        modelData.modelDefinition = geoResult.definition;\r\n      } else {\r\n        Log.debugAlert(`Failed to load geometry for attachable ${shortId}: ${geometryId}`);\r\n      }\r\n    }\r\n\r\n    // Get default texture\r\n    const textures = attachableResource.textures;\r\n    if (textures && textures[\"default\"]) {\r\n      let texturePath = textures[\"default\"];\r\n\r\n      if (texturePath) {\r\n        // Remove file extension if present\r\n        if (texturePath.endsWith(\".png\") || texturePath.endsWith(\".tga\")) {\r\n          texturePath = texturePath.substring(0, texturePath.lastIndexOf(\".\"));\r\n        }\r\n\r\n        modelData.texturePath = texturePath;\r\n        modelData.textureUrl =\r\n          CreatorToolsHost.contentWebRoot + `res/latest/van/serve/resource_pack/${texturePath}.png`;\r\n\r\n        const textureData = await this.loadVanillaTexture(texturePath);\r\n        if (textureData) {\r\n          modelData.textureData = textureData;\r\n        }\r\n      }\r\n    }\r\n\r\n    // For armor-type attachables, load the humanoid base model (Steve) so\r\n    // the armor can be rendered on top of a body silhouette.\r\n    // Armor geometries reference identifiers containing \"humanoid\" or \"armor\".\r\n    const isArmorType =\r\n      modelData.geometryId && (modelData.geometryId.includes(\"humanoid\") || modelData.geometryId.includes(\"armor\"));\r\n\r\n    if (isArmorType) {\r\n      const baseGeoResult = await this._loadVanillaGeometry(\"geometry.humanoid.custom\");\r\n      if (baseGeoResult) {\r\n        modelData.baseGeometry = baseGeoResult.geometry;\r\n        modelData.baseModelDefinition = baseGeoResult.definition;\r\n        modelData.baseTextureUrl =\r\n          CreatorToolsHost.contentWebRoot + \"res/latest/van/serve/resource_pack/textures/entity/steve.png\";\r\n\r\n        const steveTexture = await this.loadVanillaTexture(\"textures/entity/steve\");\r\n        if (steveTexture) {\r\n          modelData.baseTextureData = steveTexture;\r\n        }\r\n      }\r\n    }\r\n\r\n    this._attachableModelDataCache.set(shortId, modelData);\r\n    return modelData;\r\n  }\r\n\r\n  private static async _loadVanillaGeometry(\r\n    geometryId: string\r\n  ): Promise<{ geometry: IGeometry; definition: ModelGeometryDefinition } | null> {\r\n    // Parse geometry ID to find the file\r\n    // Format is typically \"geometry.mob_name\" or \"geometry.mob_name.variant\"\r\n    const parts = geometryId.split(\".\");\r\n    if (parts.length < 2) return null;\r\n\r\n    const baseName = parts[1]; // e.g., \"pig\" from \"geometry.pig\" or \"tropicalfish_a\" from \"geometry.tropicalfish_a\"\r\n\r\n    // Generate possible file names to try\r\n    // Some entities use underscores in file names but not in geometry IDs, or vice versa\r\n    const baseNameWithUnderscore = this._addUnderscoreBeforeLastPart(baseName);\r\n    const baseNameWithoutSuffix = baseName.replace(/_[a-z]$/, \"\"); // Remove _a, _b suffixes\r\n    const baseNameWithUnderscoreNoSuffix = this._addUnderscoreBeforeLastPart(baseNameWithoutSuffix);\r\n\r\n    const possibleBaseNames = [baseName, baseNameWithUnderscore, baseNameWithoutSuffix, baseNameWithUnderscoreNoSuffix];\r\n\r\n    // Remove duplicates\r\n    const uniqueBaseNames = [...new Set(possibleBaseNames)];\r\n\r\n    const possibleFiles: string[] = [];\r\n    for (const name of uniqueBaseNames) {\r\n      possibleFiles.push(`${name}.geo.json`);\r\n      possibleFiles.push(`${name}.v3.geo.json`);\r\n      possibleFiles.push(`${name}.v2.geo.json`);\r\n    }\r\n\r\n    // First pass: look for exact geometry ID match\r\n    for (const fileName of possibleFiles) {\r\n      const file = await Database.getPreviewVanillaFile(`/resource_pack/models/entity/${fileName}`);\r\n      if (file) {\r\n        const geoDef = await ModelGeometryDefinition.ensureOnFile(file);\r\n        if (geoDef) {\r\n          const exactGeometry = geoDef.getById(geometryId);\r\n          if (exactGeometry) {\r\n            return { geometry: exactGeometry, definition: geoDef };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Second pass: if no exact match found, fall back to default geometry from first file with one\r\n    for (const fileName of possibleFiles) {\r\n      const file = await Database.getPreviewVanillaFile(`/resource_pack/models/entity/${fileName}`);\r\n      if (file) {\r\n        const geoDef = await ModelGeometryDefinition.ensureOnFile(file);\r\n        if (geoDef && geoDef.defaultGeometry) {\r\n          Log.debugAlert(\r\n            `VanillaProjectManager: No exact match for geometry \"${geometryId}\", falling back to default from ${fileName}`\r\n          );\r\n          return { geometry: geoDef.defaultGeometry, definition: geoDef };\r\n        }\r\n      }\r\n    }\r\n\r\n    // Third pass: scan all files in /models/entity/ for an exact geometry ID match.\r\n    // This handles attachable geometries (e.g., \"geometry.humanoid.armor.chestplate\"\r\n    // which lives in \"player_armor.json\") where the baseName heuristic fails.\r\n    const vanillaFolder = await Database.getPreviewVanillaFolder();\r\n    if (vanillaFolder) {\r\n      const modelsFolder = await vanillaFolder.getFolderFromRelativePath(\"/resource_pack/models/entity/\");\r\n      if (modelsFolder) {\r\n        await modelsFolder.load();\r\n\r\n        for (const fileName in modelsFolder.files) {\r\n          if (!fileName.endsWith(\".json\")) continue;\r\n          // Skip files we already tried in the first two passes\r\n          if (possibleFiles.includes(fileName)) continue;\r\n\r\n          const file = modelsFolder.files[fileName];\r\n          if (file) {\r\n            const geoDef = await ModelGeometryDefinition.ensureOnFile(file);\r\n            if (geoDef) {\r\n              const exactGeometry = geoDef.getById(geometryId);\r\n              if (exactGeometry) {\r\n                // Try v1.8.0 inheritance resolution first (e.g., player_armor.json)\r\n                const resolved = this._resolveV18Inheritance(geometryId, geoDef);\r\n                if (resolved) {\r\n                  return { geometry: resolved, definition: geoDef };\r\n                }\r\n                return { geometry: exactGeometry, definition: geoDef };\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Fourth pass: scan /models/ root directory (not just /models/entity/) for v1.8.0 format files.\r\n    // The mobs.json file in /models/ contains humanoid armor geometry with inheritance syntax.\r\n    if (vanillaFolder) {\r\n      const modelsRootFolder = await vanillaFolder.getFolderFromRelativePath(\"/resource_pack/models/\");\r\n      if (modelsRootFolder) {\r\n        await modelsRootFolder.load();\r\n\r\n        for (const fileName in modelsRootFolder.files) {\r\n          if (!fileName.endsWith(\".json\")) continue;\r\n\r\n          const file = modelsRootFolder.files[fileName];\r\n          if (file) {\r\n            const geoDef = await ModelGeometryDefinition.ensureOnFile(file);\r\n            if (geoDef) {\r\n              const exactGeometry = geoDef.getById(geometryId);\r\n              if (exactGeometry) {\r\n                // Check if this is a v1.8.0 format with inheritance that needs resolution\r\n                const resolved = this._resolveV18Inheritance(geometryId, geoDef);\r\n                if (resolved) {\r\n                  return { geometry: resolved, definition: geoDef };\r\n                }\r\n                return { geometry: exactGeometry, definition: geoDef };\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Resolve v1.8.0 geometry inheritance chain.\r\n   *\r\n   * V1.8.0 format uses keys like `\"geometry.X:geometry.Y\"` where Y is the parent.\r\n   * Each child provides bone overrides: `inflate` modifies cube inflation,\r\n   * `reset: true` removes all cubes from a bone (hides it), `neverRender` controls visibility.\r\n   *\r\n   * Example chain for chestplate:\r\n   *   geometry.humanoid.armor.chestplate:geometry.humanoid.armor1\r\n   *     \u2192 geometry.humanoid.armor1:geometry.zombie\r\n   *       \u2192 geometry.zombie (base with all cubes)\r\n   *\r\n   * Returns a flattened IGeometry with all inheritance resolved.\r\n   */\r\n  private static _resolveV18Inheritance(geometryId: string, geoDef: ModelGeometryDefinition): IGeometry | null {\r\n    const data = geoDef.data as any;\r\n    if (!data) return null;\r\n\r\n    // Find the key that matches this geometry ID (may include \":parent\" suffix)\r\n    let matchingKey: string | undefined;\r\n    let parentId: string | undefined;\r\n\r\n    for (const key of Object.keys(data)) {\r\n      if (key === geometryId || key.startsWith(geometryId + \":\")) {\r\n        matchingKey = key;\r\n        const colonIndex = key.indexOf(\":\");\r\n        if (colonIndex > 0) {\r\n          parentId = key.substring(colonIndex + 1);\r\n        }\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (!matchingKey) return null;\r\n    if (!parentId) {\r\n      // No inheritance \u2014 return as-is\r\n      return null;\r\n    }\r\n\r\n    // Resolve parentId recursively\r\n    const parentGeometry = this._resolveV18InheritanceFrom(parentId, data);\r\n    if (!parentGeometry || !parentGeometry.bones) return null;\r\n\r\n    // Get the child overrides\r\n    const childData = data[matchingKey];\r\n    if (!childData || !childData.bones) return null;\r\n\r\n    // Deep clone parent bones to avoid mutating the original\r\n    const resolvedBones: IGeometryBone[] = JSON.parse(JSON.stringify(parentGeometry.bones));\r\n\r\n    // Apply child bone overrides\r\n    for (const childBone of childData.bones) {\r\n      const parentBoneIndex = resolvedBones.findIndex((b: IGeometryBone) => b.name === childBone.name);\r\n\r\n      if (parentBoneIndex >= 0) {\r\n        const parentBone = resolvedBones[parentBoneIndex];\r\n\r\n        if (childBone.reset) {\r\n          // reset: true removes all cubes from this bone (makes it invisible)\r\n          parentBone.cubes = undefined;\r\n          parentBone.poly_mesh = undefined;\r\n          parentBone.texture_meshes = undefined;\r\n        } else if (childBone.cubes && childBone.cubes.length > 0) {\r\n          // Child provides complete cube definitions \u2014 replace parent cubes.\r\n          // This is used by sheep wool overlay: child bones have different UVs\r\n          // and inflate values that map to the wool section of the texture.\r\n          parentBone.cubes = JSON.parse(JSON.stringify(childBone.cubes));\r\n\r\n          // Preserve parent's bind_pose_rotation if child overrides it\r\n          if (childBone.bind_pose_rotation) {\r\n            parentBone.bind_pose_rotation = [...childBone.bind_pose_rotation];\r\n          }\r\n          // Preserve parent's pivot if child overrides it\r\n          if (childBone.pivot) {\r\n            parentBone.pivot = [...childBone.pivot];\r\n          }\r\n        } else {\r\n          // No cubes in child \u2014 apply property overrides to existing parent cubes\r\n          if (childBone.inflate !== undefined && parentBone.cubes) {\r\n            for (const cube of parentBone.cubes) {\r\n              cube.inflate = childBone.inflate;\r\n            }\r\n          }\r\n          if (childBone.neverRender !== undefined) {\r\n            (parentBone as any).neverRender = childBone.neverRender;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Filter out neverRender bones and bones with no visual content\r\n    const visibleBones = resolvedBones.filter((b: any) => {\r\n      if (b.neverRender === true) return false;\r\n      return true;\r\n    });\r\n\r\n    return {\r\n      description: parentGeometry.description || {\r\n        identifier: geometryId,\r\n        texture_width: childData.texturewidth || parentGeometry.texturewidth || 64,\r\n        texture_height: childData.textureheight || parentGeometry.textureheight || 32,\r\n        visible_bounds_width: 2,\r\n        visible_bounds_height: 2,\r\n        visible_bounds_offset: [0, 1, 0],\r\n      },\r\n      bones: visibleBones,\r\n      texturewidth: childData.texturewidth || parentGeometry.texturewidth,\r\n      textureheight: childData.textureheight || parentGeometry.textureheight,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Recursively resolve a v1.8.0 geometry ID within a single file's data.\r\n   */\r\n  private static _resolveV18InheritanceFrom(geoId: string, data: any): any | null {\r\n    // Find the key for this geometry ID\r\n    let matchingKey: string | undefined;\r\n    let parentId: string | undefined;\r\n\r\n    for (const key of Object.keys(data)) {\r\n      if (key === \"format_version\") continue;\r\n\r\n      if (key === geoId || key.startsWith(geoId + \":\")) {\r\n        matchingKey = key;\r\n        const colonIndex = key.indexOf(\":\");\r\n        if (colonIndex > 0) {\r\n          parentId = key.substring(colonIndex + 1);\r\n        }\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (!matchingKey) return null;\r\n\r\n    const geoData = data[matchingKey];\r\n    if (!parentId) {\r\n      // Base geometry \u2014 no parent, return directly\r\n      return geoData;\r\n    }\r\n\r\n    // Recursively resolve parent\r\n    const parentGeo = this._resolveV18InheritanceFrom(parentId, data);\r\n    if (!parentGeo || !parentGeo.bones) return geoData;\r\n\r\n    // Deep clone parent bones\r\n    const resolvedBones: IGeometryBone[] = JSON.parse(JSON.stringify(parentGeo.bones));\r\n\r\n    // Apply child overrides\r\n    if (geoData.bones) {\r\n      for (const childBone of geoData.bones) {\r\n        const parentBoneIndex = resolvedBones.findIndex((b: IGeometryBone) => b.name === childBone.name);\r\n\r\n        if (parentBoneIndex >= 0) {\r\n          const parentBone = resolvedBones[parentBoneIndex];\r\n\r\n          if (childBone.reset) {\r\n            parentBone.cubes = undefined;\r\n            parentBone.poly_mesh = undefined;\r\n            parentBone.texture_meshes = undefined;\r\n          } else {\r\n            if (childBone.inflate !== undefined && parentBone.cubes) {\r\n              for (const cube of parentBone.cubes) {\r\n                cube.inflate = childBone.inflate;\r\n              }\r\n            }\r\n            if (childBone.neverRender !== undefined) {\r\n              (parentBone as any).neverRender = childBone.neverRender;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return {\r\n      ...parentGeo,\r\n      ...geoData,\r\n      bones: resolvedBones,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Adds an underscore before the last \"word\" in a name.\r\n   * e.g., \"tropicalfish\" -> \"tropical_fish\", \"tropicalfish_a\" -> \"tropical_fish_a\"\r\n   */\r\n  private static _addUnderscoreBeforeLastPart(name: string): string {\r\n    // Common suffixes that indicate a word boundary\r\n    const commonWords = [\r\n      \"fish\",\r\n      \"spawner\",\r\n      \"golem\",\r\n      \"spider\",\r\n      \"skeleton\",\r\n      \"zombie\",\r\n      \"creeper\",\r\n      \"slime\",\r\n      \"cube\",\r\n      \"guardian\",\r\n      \"shulker\",\r\n      \"villager\",\r\n      \"illager\",\r\n      \"pillager\",\r\n      \"witch\",\r\n      \"horse\",\r\n      \"donkey\",\r\n      \"mule\",\r\n      \"llama\",\r\n      \"wolf\",\r\n      \"cat\",\r\n      \"ocelot\",\r\n      \"fox\",\r\n      \"panda\",\r\n      \"bee\",\r\n      \"hoglin\",\r\n      \"piglin\",\r\n      \"strider\",\r\n      \"axolotl\",\r\n      \"goat\",\r\n      \"frog\",\r\n      \"warden\",\r\n      \"sniffer\",\r\n      \"camel\",\r\n      \"breeze\",\r\n      \"bogged\",\r\n      \"armadillo\",\r\n    ];\r\n\r\n    for (const word of commonWords) {\r\n      const index = name.indexOf(word);\r\n      if (index > 0 && name[index - 1] !== \"_\") {\r\n        return name.substring(0, index) + \"_\" + name.substring(index);\r\n      }\r\n    }\r\n    return name;\r\n  }\r\n\r\n  /**\r\n   * Load a vanilla texture by its resource path (e.g., \"textures/entity/pig/pig\").\r\n   * Returns the raw PNG bytes from the serve vanilla folder, or null if not found.\r\n   */\r\n  static async loadVanillaTexture(texturePath: string): Promise<Uint8Array | null> {\r\n    // texturePath is like \"textures/entity/pig/pig\"\r\n    // Use serve folder which has PNG versions of all textures (including those that are TGA in preview/release)\r\n    const vanillaFolder = await Database.getServeVanillaFolder();\r\n    if (!vanillaFolder) {\r\n      Log.debugAlert(\"Could not get serve vanilla folder\");\r\n      return null;\r\n    }\r\n\r\n    const fullPath = `/resource_pack/${texturePath}.png`;\r\n\r\n    const file = await vanillaFolder.getFileFromRelativePath(fullPath);\r\n    if (!file) {\r\n      Log.debugAlert(`Vanilla texture file not found: ${fullPath}`);\r\n      // Try to list the directory to see what's there\r\n      const dirPath = `/resource_pack/${texturePath.substring(0, texturePath.lastIndexOf(\"/\"))}`;\r\n      return null;\r\n    }\r\n\r\n    await file.loadContent();\r\n\r\n    if (file.content instanceof Uint8Array) {\r\n      return file.content;\r\n    }\r\n\r\n    Log.debugAlert(`Vanilla texture file content is not Uint8Array: ${typeof file.content}`);\r\n    return null;\r\n  }\r\n\r\n  static getBlocksCatalogDirect() {\r\n    return this.blocksCatalog;\r\n  }\r\n\r\n  static async getBlocksCatalog() {\r\n    if (!VanillaProjectManager.blocksCatalog) {\r\n      const file = await Database.getPreviewVanillaFile(\"/resource_pack/blocks.json\");\r\n\r\n      if (file) {\r\n        const blockCat = new BlocksCatalogDefinition();\r\n        blockCat.file = file;\r\n\r\n        await blockCat.load();\r\n\r\n        this.blocksCatalog = blockCat;\r\n      }\r\n    }\r\n\r\n    return this.blocksCatalog;\r\n  }\r\n\r\n  static getTerrainTexturesCatalogDirect() {\r\n    return this.terrainTextureCatalog;\r\n  }\r\n\r\n  static async getTerrainTexturesCatalog() {\r\n    if (!VanillaProjectManager.terrainTextureCatalog) {\r\n      const file = await Database.getPreviewVanillaFile(\"/resource_pack/textures/terrain_texture.json\");\r\n\r\n      if (file) {\r\n        const terrainCat = new TerrainTextureCatalogDefinition();\r\n        terrainCat.file = file;\r\n\r\n        await terrainCat.load();\r\n\r\n        VanillaProjectManager.terrainTextureCatalog = terrainCat;\r\n      }\r\n    }\r\n\r\n    return VanillaProjectManager.terrainTextureCatalog;\r\n  }\r\n\r\n  static async getItemTexturesCatalog() {\r\n    if (!VanillaProjectManager.itemTextureCatalog) {\r\n      const file = await Database.getPreviewVanillaFile(\"/resource_pack/textures/item_texture.json\");\r\n\r\n      if (file) {\r\n        const itemCat = new ItemTextureCatalogDefinition();\r\n        itemCat.file = file;\r\n\r\n        await itemCat.load();\r\n\r\n        VanillaProjectManager.itemTextureCatalog = itemCat;\r\n      }\r\n    }\r\n\r\n    return VanillaProjectManager.itemTextureCatalog;\r\n  }\r\n\r\n  static async getSoundDefinitionCatalog() {\r\n    if (!VanillaProjectManager.soundDefinitionCatalog) {\r\n      const file = await Database.getPreviewVanillaFile(\"/resource_pack/sounds/sound_definitions.json\");\r\n\r\n      if (file) {\r\n        const soundDefinitionCat = new SoundDefinitionCatalogDefinition();\r\n        soundDefinitionCat.file = file;\r\n\r\n        await soundDefinitionCat.load();\r\n\r\n        VanillaProjectManager.soundDefinitionCatalog = soundDefinitionCat;\r\n      }\r\n    }\r\n\r\n    return VanillaProjectManager.soundDefinitionCatalog;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport DifferenceSet from \"../storage/DifferenceSet\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\nimport VanillaProjectManager from \"./VanillaProjectManager\";\r\nimport { CreatorToolsMinecraftState } from \"../app/CreatorTools\";\r\n\r\n/**\r\n * Minecraft server port constants for multi-slot architecture.\r\n * Slot 0 = 19132, Slot 1 = 19164, Slot 2 = 19196, etc. (32-port spacing)\r\n * Debug ports follow the same pattern starting at 19144 (19132 + 12)\r\n */\r\nexport const MINECRAFT_BASE_PORT = 19132;\r\nexport const MINECRAFT_PORT_INCREMENT = 32;\r\nexport const MINECRAFT_DEBUG_PORT_OFFSET = 12; // Debug port is base port + 12\r\n\r\nexport default class MinecraftUtilities {\r\n  /**\r\n   * Get the Minecraft UDP port for a given slot number.\r\n   * Slot 0 = 19132, Slot 1 = 19164, Slot 2 = 19196, etc.\r\n   * @param slotNumber The slot number (0-based)\r\n   * @returns The UDP port for Minecraft connections\r\n   */\r\n  static getPortForSlot(slotNumber: number): number {\r\n    return MINECRAFT_BASE_PORT + slotNumber * MINECRAFT_PORT_INCREMENT;\r\n  }\r\n\r\n  /**\r\n   * Get the slot number from a Minecraft UDP port.\r\n   * @param port The UDP port\r\n   * @returns The slot number (0-based)\r\n   */\r\n  static getSlotFromPort(port: number): number {\r\n    return Math.floor((port - MINECRAFT_BASE_PORT) / MINECRAFT_PORT_INCREMENT);\r\n  }\r\n\r\n  /**\r\n   * Get the script debugger port for a given slot number.\r\n   * The debug port is the base port + 12 for each slot.\r\n   * Slot 0 = 19144, Slot 1 = 19176, Slot 2 = 19208, etc.\r\n   * @param slotNumber The slot number (0-based)\r\n   * @returns The debug port for the script debugger\r\n   */\r\n  static getDebugPortForSlot(slotNumber: number): number {\r\n    return MinecraftUtilities.getPortForSlot(slotNumber) + MINECRAFT_DEBUG_PORT_OFFSET;\r\n  }\r\n\r\n  static isReloadableSetOfChanges(differenceSet: DifferenceSet) {\r\n    return differenceSet.hasFileOnlyOfExtension(\"js\", \"ts\", \"map\") && !differenceSet.getHasDeletions();\r\n  }\r\n\r\n  static removeSubTypeExtensionFromName(name: string) {\r\n    let canonId = name.trim();\r\n\r\n    if (name.endsWith(\".json\")) {\r\n      canonId = canonId.substring(0, canonId.length - 5);\r\n    }\r\n\r\n    const lastPeriod = name.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod >= 0) {\r\n      canonId = canonId.substring(0, lastPeriod);\r\n    }\r\n\r\n    return canonId;\r\n  }\r\n\r\n  static getServerStatusFromState(state: CreatorToolsMinecraftState) {\r\n    switch (state) {\r\n      case CreatorToolsMinecraftState.stopped:\r\n        return \"stopped\";\r\n      case CreatorToolsMinecraftState.error:\r\n        return \"error\";\r\n      case CreatorToolsMinecraftState.starting:\r\n        return \"starting\";\r\n      case CreatorToolsMinecraftState.preparing:\r\n        return \"preparing\";\r\n      case CreatorToolsMinecraftState.started:\r\n        return \"running\";\r\n      case CreatorToolsMinecraftState.stopping:\r\n        return \"stopping\";\r\n      case CreatorToolsMinecraftState.disconnected:\r\n        return \"disconnected\";\r\n      case CreatorToolsMinecraftState.initializing:\r\n        return \"initializing\";\r\n      case CreatorToolsMinecraftState.initialized:\r\n        return \"initialized\";\r\n      case CreatorToolsMinecraftState.prepared:\r\n        return \"prepared\";\r\n      case CreatorToolsMinecraftState.newMinecraft:\r\n        return \"new minecraft\";\r\n      case CreatorToolsMinecraftState.none:\r\n        return \"none\";\r\n      default:\r\n        return \"unknown\";\r\n    }\r\n  }\r\n\r\n  static getIsBuiltIn(eventId: string) {\r\n    return (\r\n      eventId === \"minecraft:entity_spawned\" ||\r\n      eventId === \"minecraft:entity_born\" ||\r\n      eventId === \"minecraft:transformed\" ||\r\n      eventId === \"minecraft:on_prime\"\r\n    );\r\n  }\r\n\r\n  static getAfterPackPath(path: string) {\r\n    const hashIndex = path.indexOf(\"#\");\r\n\r\n    if (hashIndex >= 0) {\r\n      path = path.substring(hashIndex + 1);\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  static getNamespacedIdNamspace(name: string) {\r\n    let canonId = name.toLowerCase().trim();\r\n\r\n    let colonIndex = canonId.indexOf(\":\");\r\n\r\n    if (colonIndex >= 0) {\r\n      canonId = canonId.substring(0, colonIndex);\r\n    }\r\n\r\n    return canonId;\r\n  }\r\n\r\n  static getNamespacedIdName(name: string) {\r\n    let canonId = name.toLowerCase().trim();\r\n\r\n    let colonIndex = canonId.indexOf(\":\");\r\n\r\n    if (colonIndex >= 0) {\r\n      canonId = canonId.substring(colonIndex + 1);\r\n    }\r\n\r\n    return canonId;\r\n  }\r\n\r\n  static pathLooksLikeSkinPackContainerName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"skin_packs\") >= 0 ||\r\n      pathCanon.indexOf(\"_sps\") >= 0 ||\r\n      pathCanon.indexOf(\"/sps_\") >= 0 ||\r\n      pathCanon.endsWith(\"sps/\") ||\r\n      pathCanon === \"/sps/\" ||\r\n      pathCanon === \"/sp/\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeBehaviorPackContainerName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"behavior_packs\") >= 0 ||\r\n      pathCanon.indexOf(\"_bps\") >= 0 ||\r\n      pathCanon.indexOf(\"/bps_\") >= 0 ||\r\n      pathCanon.endsWith(\"bps/\") ||\r\n      pathCanon === \"/bps/\" ||\r\n      pathCanon === \"/bp/\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeDesignPackContainerName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"design_packs\") >= 0 ||\r\n      pathCanon.indexOf(\"_dps\") >= 0 ||\r\n      pathCanon.indexOf(\"/dps_\") >= 0 ||\r\n      pathCanon.endsWith(\"dps/\") ||\r\n      pathCanon === \"/dps/\" ||\r\n      pathCanon === \"/dp/\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeResourcePackContainerName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"resource_packs\") >= 0 ||\r\n      pathCanon.indexOf(\"_rps\") >= 0 ||\r\n      pathCanon.indexOf(\"/rps_\") >= 0 ||\r\n      pathCanon.endsWith(\"rps/\") ||\r\n      pathCanon === \"/rps/\" ||\r\n      pathCanon === \"/rp/\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikePackContainerName(path: string) {\r\n    return (\r\n      this.pathLooksLikeBehaviorPackContainerName(path) ||\r\n      this.pathLooksLikeResourcePackContainerName(path) ||\r\n      this.pathLooksLikeResourcePackContainerName(path) ||\r\n      this.pathLooksLikeSkinPackContainerName(path)\r\n    );\r\n  }\r\n\r\n  static pathLooksLikeDesignPackName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"/design\") >= 0 ||\r\n      pathCanon.indexOf(\"design_pack\") >= 0 ||\r\n      pathCanon.indexOf(\"_dp\") >= 0 || // bp is uncommon as the start of a word\r\n      pathCanon.indexOf(\"/dp_\") >= 0 ||\r\n      pathCanon.indexOf(\"/dp/\") >= 0\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeBehaviorPackName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"/behavior\") >= 0 ||\r\n      pathCanon.indexOf(\"behavior_pack\") >= 0 ||\r\n      pathCanon.indexOf(\"_bp\") >= 0 || // bp is uncommon as the start of a word\r\n      pathCanon.indexOf(\"/bp_\") >= 0 ||\r\n      pathCanon.indexOf(\"/bp/\") >= 0\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public static isBedrockItem(itemId: string) {\r\n    if (itemId.indexOf(\"element\") >= 0) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n  public static getBlockDefaultTexturePath(blockId: string) {\r\n    let blockCat = VanillaProjectManager.getBlocksCatalogDirect();\r\n    let textureCat = VanillaProjectManager.getTerrainTexturesCatalogDirect();\r\n\r\n    if (!blockCat || !textureCat) {\r\n      return undefined;\r\n    }\r\n\r\n    const blockTextureId = blockCat.getDefaultTextureId(blockId);\r\n\r\n    if (!blockTextureId) {\r\n      return undefined;\r\n    }\r\n\r\n    return textureCat.getDefaultTexturePath(blockTextureId);\r\n  }\r\n\r\n  static shortenFilterDescription(descript: string) {\r\n    descript = descript.replace(\"Returns true if \", \"\");\r\n    descript = descript.replace(\"True if \", \"\");\r\n    descript = descript.replace(\"Returns true when \", \"\");\r\n    descript = descript.replace(\"Tests the \", \"\");\r\n    descript = descript.replace(\"Tests if \", \"\");\r\n    descript = descript.replace(\"Tests whether \", \"\");\r\n    descript = descript.replace(\"Tests for \", \"\");\r\n    descript = descript.replace(\"Returns \", \"\");\r\n    if (descript.startsWith(\"the \")) {\r\n      descript = descript.substring(4);\r\n    }\r\n\r\n    descript = Utilities.ensureLooksLikeSentence(descript);\r\n\r\n    return descript;\r\n  }\r\n\r\n  static clearCommonTerms(path: string) {\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/resource_packs/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/behavior_packs/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/design_packs/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/skin_packs/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/resource_pack/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/behavior_pack/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/design_pack/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/skin_pack/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/behavior/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/resource/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/design/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/static-assets/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/zips/\", \"/\");\r\n\r\n    path = path.replace(/\\/\\//gi, \"/\");\r\n\r\n    return path;\r\n  }\r\n\r\n  static pathLooksLikeResourcePackName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"/resource\") >= 0 ||\r\n      pathCanon.indexOf(\"resource_pack\") >= 0 ||\r\n      pathCanon.indexOf(\"_rp\") >= 0 || // rp is uncommon as the start of a word\r\n      pathCanon.indexOf(\"/rp_\") >= 0 ||\r\n      pathCanon.indexOf(\"/rp/\") >= 0\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeSkinPackName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    // because sp might common in english as an abbreviation, be less tolerant\r\n    // compared to behavior/resource packs in assuming \"sp\" means skin pack\r\n    if (pathCanon.indexOf(\"/skin\") >= 0 || pathCanon.indexOf(\"skin_pack\") >= 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikePersonaPackName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (pathCanon.indexOf(\"/persona/\") >= 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeWorldFolderName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (pathCanon.indexOf(\"/world\") >= 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeSubPacksFolderName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (pathCanon.indexOf(\"/subpacks\") >= 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n  static pathLooksLikePackName(path: string) {\r\n    return (\r\n      this.pathLooksLikeBehaviorPackName(path) ||\r\n      this.pathLooksLikeResourcePackName(path) ||\r\n      this.pathLooksLikeSkinPackName(path)\r\n    );\r\n  }\r\n\r\n  static replaceMinecraftPathTokens(tokenizePath: string) {\r\n    if (tokenizePath.startsWith(\"<RPME>\")) {\r\n      tokenizePath += \".geo.json\";\r\n    } else if (\r\n      tokenizePath.startsWith(\"<BPE>\") ||\r\n      tokenizePath.startsWith(\"<BPLE>\") ||\r\n      tokenizePath.startsWith(\"<BPSR>\")\r\n    ) {\r\n      tokenizePath += \".json\";\r\n    } else if (tokenizePath.startsWith(\"<RPE>\")) {\r\n      tokenizePath += \".entity.json\";\r\n    } else if (tokenizePath.startsWith(\"<RPAC>\")) {\r\n      tokenizePath += \".animation_controllers.json\";\r\n    } else if (tokenizePath.startsWith(\"<RPRC>\")) {\r\n      tokenizePath += \".render_controllers.json\";\r\n    } else if (tokenizePath.startsWith(\"<RPA>\")) {\r\n      tokenizePath += \".animation.json\";\r\n    } else if (tokenizePath.startsWith(\"<RPTE>\")) {\r\n      if (tokenizePath.indexOf(\".\") < 0) {\r\n        tokenizePath += \".png\";\r\n      }\r\n    }\r\n    tokenizePath = tokenizePath.replace(/<RPTE>/gi, \"/resource_pack/textures/entity/\");\r\n    tokenizePath = tokenizePath.replace(/<RPME>/gi, \"/resource_pack/models/entity/\");\r\n    tokenizePath = tokenizePath.replace(/<RPAC>/gi, \"/resource_pack/animation_controllers/\");\r\n    tokenizePath = tokenizePath.replace(/<RPRC>/gi, \"/resource_pack/render_controllers/\");\r\n    tokenizePath = tokenizePath.replace(/<RPA>/gi, \"/resource_pack/animations/\");\r\n    tokenizePath = tokenizePath.replace(/<RPE>/gi, \"/resource_pack/entity/\");\r\n    tokenizePath = tokenizePath.replace(/<BPE>/gi, \"/behavior_pack/entities/\");\r\n    tokenizePath = tokenizePath.replace(/<BPLE>/gi, \"/behavior_pack/loot_tables/entities/\");\r\n    tokenizePath = tokenizePath.replace(/<BPSR>/gi, \"/behavior_pack/spawn_rules/\");\r\n\r\n    return tokenizePath;\r\n  }\r\n\r\n  static makeNameScriptSafe(tokenName: string) {\r\n    tokenName = tokenName.replace(/[^a-z0-9_]/gi, \"-\").replace(/\\s+/g, \"-\");\r\n\r\n    while (tokenName.length > 1 && !Utilities.isAlpha(tokenName.substring(0, 1))) {\r\n      tokenName = tokenName.substring(1);\r\n    }\r\n\r\n    if (!Utilities.isAlpha(tokenName.substring(0, 1))) {\r\n      tokenName = \"a\" + tokenName;\r\n    }\r\n\r\n    return tokenName;\r\n  }\r\n\r\n  static makeNameFolderSafe(tokenName: string) {\r\n    tokenName = Utilities.replaceAll(tokenName, \" \", \"-\").toLowerCase();\r\n\r\n    if (tokenName.length > 16) {\r\n      tokenName = tokenName.substring(0, 16);\r\n    }\r\n\r\n    return tokenName;\r\n  }\r\n\r\n  static getVersionArrayFrom(ver: string | number | number[] | undefined) {\r\n    if (typeof ver === \"number\") {\r\n      if (Math.floor(ver) !== ver) {\r\n        // deal with decimal numbers that have been observed, e.g., 1.1\r\n        return [Math.floor(ver), Math.floor((ver - Math.floor(ver)) * 10), 0];\r\n      } else {\r\n        return [ver, 0, 0];\r\n      }\r\n    }\r\n\r\n    if (ver === undefined) {\r\n      return [0, 0, 0];\r\n    }\r\n\r\n    if (typeof ver === \"string\") {\r\n      let fvArr = ver.split(\".\");\r\n\r\n      let fvArrInt: number[] = [];\r\n      for (let i = 0; i < fvArr.length; i++) {\r\n        try {\r\n          const num = parseInt(fvArr[i]);\r\n\r\n          if (isNaN(num)) {\r\n            return [0, 0, 0];\r\n          }\r\n\r\n          fvArrInt.push(num);\r\n        } catch (e) {}\r\n      }\r\n\r\n      while (fvArrInt.length < 3) {\r\n        fvArrInt.push(0);\r\n      }\r\n\r\n      return fvArrInt;\r\n    }\r\n\r\n    return ver;\r\n  }\r\n\r\n  static getVersionNumber(ver: string): number {\r\n    if (ver === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    let fvArr = ver.split(\".\");\r\n\r\n    let fvArrInt: number[] = [];\r\n    for (let i = 0; i < fvArr.length; i++) {\r\n      try {\r\n        const num = parseInt(fvArr[i]);\r\n\r\n        if (isNaN(num)) {\r\n          return 0;\r\n        }\r\n\r\n        fvArrInt.push(num);\r\n      } catch (e) {}\r\n    }\r\n\r\n    while (fvArrInt.length < 3) {\r\n      fvArrInt.push(0);\r\n    }\r\n\r\n    if (fvArrInt.length < 3) {\r\n      return 0;\r\n    }\r\n\r\n    let verNum = fvArrInt[0] * 1000000 + 10000000;\r\n    verNum += fvArrInt[1] * 1000 + fvArrInt[2];\r\n\r\n    return verNum;\r\n  }\r\n\r\n  static cleanUpScriptDescription(scriptDescription: string) {\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"/*\", \"\");\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"*/\\n\", \"\");\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"*\\n\", \"\");\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"*/\", \"\");\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"*\", \"\");\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"@beta\", \"\");\r\n\r\n    scriptDescription = scriptDescription.trim();\r\n\r\n    return scriptDescription;\r\n  }\r\n\r\n  static getIdsAndVersions(packStr: string): { uuid: string; version: number[] }[] {\r\n    const refs: { uuid: string; version: number[] }[] = [];\r\n\r\n    const packRefStrs = packStr.split(\",\");\r\n\r\n    for (const packRefStr of packRefStrs) {\r\n      const packRefStrParts = packRefStr.split(\"@\");\r\n      let wasAdded = false;\r\n\r\n      if (packRefStrParts.length === 2) {\r\n        const versionNumberParts = packRefStrParts[1].split(\".\");\r\n\r\n        if (versionNumberParts.length === 3) {\r\n          const verNumber: number[] = [];\r\n\r\n          for (let i = 0; i < versionNumberParts.length; i++) {\r\n            let num = undefined;\r\n\r\n            try {\r\n              num = parseInt(versionNumberParts[i]);\r\n            } catch (e) {}\r\n\r\n            if (num !== undefined) {\r\n              verNumber.push(num);\r\n            }\r\n          }\r\n\r\n          if (verNumber.length === 3 && this.isValidUuid(packRefStrParts[0])) {\r\n            refs.push({\r\n              uuid: packRefStrParts[0],\r\n              version: verNumber,\r\n            });\r\n            wasAdded = true;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!wasAdded) {\r\n        Log.fail(\"UUID/version is not in a good form (uuid@x.y.z) - is '\" + packRefStr + \"'\");\r\n      }\r\n    }\r\n\r\n    return refs;\r\n  }\r\n\r\n  static isValidUuid(uuid: string) {\r\n    // sample uuid: 414a42cd-98d4-4e0d-8e3f-e34ab8a0c05e\r\n    //              xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\r\n\r\n    if (uuid.length === 36) {\r\n      const parts = uuid.split(\"-\");\r\n\r\n      if (\r\n        parts.length === 5 &&\r\n        parts[0].length === 8 &&\r\n        parts[1].length === 4 &&\r\n        parts[2].length === 4 &&\r\n        parts[3].length === 4 &&\r\n        parts[4].length === 12\r\n      ) {\r\n        for (let i = 0; i < parts.length; i++) {\r\n          for (let j = 0; j < parts[i].length; j++) {\r\n            if (!Utilities.isAlphaNumeric(parts[i][j])) {\r\n              return false;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static fixupJson(json: string) {\r\n    json = json.replace(/([, ;}\\]])0b([, ;}\\]])/gi, \"$1false$2\");\r\n    json = json.replace(/([, ;}\\]])1b([, ;}\\]])/gi, \"$1true$2\");\r\n\r\n    json = json.replace(/(\\d)b([, ;\\]])/gi, \"$1$2\");\r\n    json = json.replace(/(\\d)d([, ;\\]])/gi, \"$1$2\");\r\n    json = json.replace(/(\\d)f([, ;\\]])/gi, \"$1$2\");\r\n    json = json.replace(/(\\d)s([, ;\\]])/gi, \"$1$2\");\r\n\r\n    json = json.replace(/\\[I;/gi, \"[\");\r\n\r\n    json = json.replace(/\u2026/gi, \"\");\r\n    /*      \r\n        json = json.replace(/([, ;\\]])none([, ;\\]])/gi, \"$1\\\"none\\\"$2\");\r\n        json = json.replace(/([, ;\\]])south([, ;\\]])/gi, \"$1\\\"south\\\"$2\");\r\n        json = json.replace(/([, ;\\]])north([, ;\\]])/gi, \"$1\\\"north\\\"$2\");\r\n        json = json.replace(/([, ;\\]])east([, ;\\]])/gi, \"$1\\\"east\\\"$2\");\r\n        json = json.replace(/([, ;\\]])west([, ;\\]])/gi, \"$1\\\"west\\\"$2\");\r\n        json = json.replace(/([, ;\\]])side([, ;\\]])/gi, \"$1\\\"side\\\"$2\");\r\n*/\r\n\r\n    return json;\r\n  }\r\n\r\n  static canonicalizeName(id: string) {\r\n    if (id === undefined || id === null) {\r\n      Log.debug(\"canonicalizeName called with undefined/null id\");\r\n      return \"\";\r\n    }\r\n\r\n    let canonId = id.toLowerCase().trim();\r\n\r\n    if (canonId.startsWith(\"minecraft:\")) {\r\n      canonId = canonId.substring(10, canonId.length);\r\n    }\r\n\r\n    return canonId;\r\n  }\r\n\r\n  static canonicalizeFullName(id: string) {\r\n    if (id === undefined || id === null) {\r\n      Log.debug(\"canonicalizeFullName called with undefined/null id\");\r\n      return \"\";\r\n    }\r\n\r\n    let canonId = id.toLowerCase().trim();\r\n\r\n    if (canonId.indexOf(\":\") < 0) {\r\n      canonId = \"minecraft:\" + canonId;\r\n    }\r\n\r\n    return canonId;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockBaseType from \"./BlockBaseType\";\r\nimport { BlockRenderType } from \"./BlockRenderType\";\r\nimport IBlockTypeData from \"./IBlockTypeData\";\r\nimport IJavaBlockTypeData from \"./IJavaBlockTypeData\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Database from \"./Database\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IComponent from \"./IComponent\";\r\nimport IBlockTypeBehaviorPack from \"./IBlockTypeBehaviorPack\";\r\nimport IBlockTypeWrapper from \"./IBlockTypeWrapper\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IBlocksMetadataBlockProperty } from \"./IBlocksMetadata\";\r\nimport { IBlockResource } from \"./IBlocksCatalog\";\r\n\r\nexport default class BlockType implements IManagedComponentSetItem {\r\n  public data: IBlockTypeData;\r\n  public javaData: IJavaBlockTypeData | null;\r\n\r\n  private _baseType?: BlockBaseType;\r\n  private _baseTypeId = \"\";\r\n\r\n  private _isCustom = false;\r\n  private _behaviorPackData: IBlockTypeWrapper | null = null;\r\n  private _behaviorPackFile?: IFile;\r\n  private _blockResource?: IBlockResource;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n  private _properties: { [name: string]: IBlocksMetadataBlockProperty } = {};\r\n\r\n  public behaviorPackBlockTypeDef?: IBlockTypeBehaviorPack;\r\n  private _managed: { [id: string]: IManagedComponent | undefined } = {};\r\n  private _onLoaded = new EventDispatcher<BlockType, BlockType>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<BlockType, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<BlockType, string>();\r\n  private _onComponentChanged = new EventDispatcher<BlockType, IManagedComponent>();\r\n\r\n  public get numericId() {\r\n    return this.data.lid;\r\n  }\r\n\r\n  public set numericId(newId: number | undefined) {\r\n    this.data.lid = newId;\r\n  }\r\n\r\n  public get baseTypeId() {\r\n    return this._baseTypeId;\r\n  }\r\n\r\n  public get mapColor(): string | undefined {\r\n    // First check if this specific block type has a map color\r\n    if (this.data.mc) {\r\n      return this.data.mc;\r\n    }\r\n\r\n    // Fall back to the base type's map color from mccat.json\r\n    if (this._baseType && this._baseType.mapColor) {\r\n      return this._baseType.mapColor;\r\n    }\r\n\r\n    // Check the default base type\r\n    const defaultBaseType = Database.defaultBlockBaseType;\r\n    if (defaultBaseType && defaultBaseType.mapColor) {\r\n      return defaultBaseType.mapColor;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get isCustom() {\r\n    return this._isCustom;\r\n  }\r\n\r\n  public get baseType() {\r\n    if (this._baseType !== undefined) {\r\n      return this._baseType;\r\n    }\r\n\r\n    return Database.defaultBlockBaseType;\r\n  }\r\n\r\n  public get catalogResource(): IBlockResource | undefined {\r\n    if (this._blockResource) {\r\n      return this._blockResource;\r\n    }\r\n\r\n    if (Database.blocksCatalog) {\r\n      // First try with shortId (full block name like \"acacia_button\")\r\n      let lookupId = this.shortId;\r\n\r\n      if (lookupId) {\r\n        this._blockResource = Database.blocksCatalog.getCatalogResource(lookupId);\r\n      }\r\n\r\n      // Fall back to material if shortId lookup fails\r\n      if (!this._blockResource) {\r\n        let mat = this.material;\r\n        if (mat && mat !== lookupId) {\r\n          this._blockResource = Database.blocksCatalog.getCatalogResource(mat);\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._blockResource;\r\n  }\r\n\r\n  public set baseType(baseType: BlockBaseType) {\r\n    this._baseType = baseType;\r\n    this._baseTypeId = baseType.name;\r\n  }\r\n\r\n  public get material() {\r\n    if (this.data.m) {\r\n      return this.data.m;\r\n    }\r\n\r\n    return this.data.n;\r\n  }\r\n\r\n  public renderType: BlockRenderType = BlockRenderType.Custom;\r\n\r\n  get icon() {\r\n    let val = this.data.ic;\r\n\r\n    if (val === undefined && this.baseType !== undefined) {\r\n      val = this.baseType.icon;\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  get title() {\r\n    let id = this.shortId;\r\n\r\n    // For custom blocks, strip the namespace prefix (e.g., \"ec_vv:bushy_cherry\" -> \"bushy_cherry\")\r\n    const colonIndex = id.indexOf(\":\");\r\n    if (colonIndex >= 0) {\r\n      id = id.substring(colonIndex + 1);\r\n    }\r\n\r\n    return Utilities.humanifyMinecraftName(id);\r\n  }\r\n\r\n  get friendlyName(): string {\r\n    // First check if the base type has a friendly name from mccat.json\r\n    if (this._baseType && this._baseType.friendlyName) {\r\n      return this._baseType.friendlyName;\r\n    }\r\n\r\n    // Fall back to humanified shortId\r\n    return this.title;\r\n  }\r\n\r\n  constructor(typeId: string) {\r\n    this.javaData = null;\r\n\r\n    this.data = {\r\n      n: typeId,\r\n    };\r\n\r\n    if (typeId.indexOf(\":\") >= 0 && !typeId.startsWith(\"minecraft:\")) {\r\n      this._isCustom = true;\r\n    }\r\n  }\r\n\r\n  getIcon(): string {\r\n    const icon = this.icon;\r\n\r\n    if (icon === undefined) {\r\n      return this.shortId;\r\n    }\r\n\r\n    const typeName = MinecraftUtilities.canonicalizeName(this.id);\r\n\r\n    const lastUnder = typeName.lastIndexOf(\"_\");\r\n\r\n    let allButLast = typeName;\r\n\r\n    if (lastUnder >= 0) {\r\n      allButLast = allButLast.substring(0, lastUnder);\r\n    }\r\n\r\n    switch (icon) {\r\n      case \"st_\":\r\n        return \"stone_\" + allButLast;\r\n\r\n      case \"le_\":\r\n        return \"leaves_acacia_carried\";\r\n\r\n      case \"pl_\":\r\n        return \"planks_\" + allButLast;\r\n\r\n      case \"_car\":\r\n        return allButLast + \"_carried\";\r\n\r\n      case \"plant_\":\r\n        return typeName + \"_fern_carried\";\r\n      case \"_\":\r\n        return typeName;\r\n\r\n      case \"_t\":\r\n        return allButLast + \"_top\";\r\n\r\n      case \"_br\":\r\n        return allButLast + \"_bricks\";\r\n\r\n      case \"_carr\":\r\n        return typeName + \"_carried\";\r\n\r\n      case \"_bl\":\r\n        return allButLast + \"_block\";\r\n\r\n      case \"_n\":\r\n        return allButLast + \"_normal\";\r\n\r\n      case \"_blt\":\r\n        return allButLast + \"_block_top\";\r\n\r\n      case \"mshblk\":\r\n        const lastmb = allButLast.split(\"_\");\r\n\r\n        return \"mushroom_block_skin_\" + lastmb[0];\r\n\r\n      case \"ml_sm\":\r\n        const lastml = allButLast.split(\"_\");\r\n\r\n        return lastml[lastml.length - 2] + \"_\" + lastml[lastml.length - 1] + \"_smooth\";\r\n\r\n      case \"l_blt\":\r\n        const lastbt = allButLast.split(\"_\");\r\n\r\n        return lastbt[lastbt.length - 1] + \"_block_top\";\r\n\r\n      case \"|\":\r\n        return allButLast;\r\n\r\n      case \"|s\":\r\n        return allButLast + \"s\";\r\n\r\n      case \"l\":\r\n        const last = allButLast.split(\"_\");\r\n\r\n        return last[last.length - 1];\r\n\r\n      case \"sb_\":\r\n        const fu = allButLast.split(\"_\");\r\n\r\n        return \"stonebricks_\" + fu[0];\r\n\r\n      case \"st_l_sm\":\r\n        const lasta = allButLast.split(\"_\");\r\n\r\n        return \"stone_\" + lasta[lasta.length - 1] + \"_smooth\";\r\n\r\n      case \"|rv\":\r\n        // dark_prismarine_stairs => prismarine_dark_stairs\r\n        let result = \"\";\r\n\r\n        const rv = allButLast.split(\"_\");\r\n\r\n        for (let i = rv.length - 1; i > 0; i--) {\r\n          if (result.length > 0) {\r\n            result += \"_\";\r\n          }\r\n\r\n          result += rv[i];\r\n        }\r\n\r\n        return result;\r\n\r\n      case \"2rv\":\r\n        // yellow_glazed_terracotta => glazed_terracotta_yellow\r\n        // dark_blue_glazed_terracotta => glazed_terracotta_dark_blue\r\n        let resultF = \"\";\r\n\r\n        const rvF = typeName.split(\"_\");\r\n\r\n        if (rvF.length >= 2) {\r\n          resultF = rvF[rvF.length - 2] + \"_\" + rvF[rvF.length - 1];\r\n\r\n          for (let i = 0; i < rvF.length - 2; i++) {\r\n            resultF += \"_\" + rvF[i];\r\n          }\r\n        } else {\r\n          resultF = typeName;\r\n        }\r\n\r\n        return resultF;\r\n\r\n      case \"rv\":\r\n        // dark_prismarine => prismarine_dark\r\n        let resultA = \"\";\r\n\r\n        const rvA = typeName.split(\"_\");\r\n\r\n        for (let i = rvA.length - 1; i >= 0; i--) {\r\n          if (resultA.length > 0) {\r\n            resultA += \"_\";\r\n          }\r\n\r\n          resultA += rvA[i];\r\n        }\r\n\r\n        return resultA;\r\n    }\r\n\r\n    if (this.icon !== undefined) {\r\n      return this.icon;\r\n    }\r\n\r\n    return this.shortId;\r\n  }\r\n\r\n  public get id() {\r\n    if (this.behaviorPackBlockTypeDef && this.behaviorPackBlockTypeDef.description) {\r\n      return this.behaviorPackBlockTypeDef.description.identifier;\r\n    }\r\n\r\n    if (this.data.n === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    if (this.data.n.endsWith(\"_\")) {\r\n      return this.data.n + this.baseTypeId;\r\n    }\r\n\r\n    return this.data.n;\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this.data.n = newId;\r\n\r\n    if (this.behaviorPackBlockTypeDef && this.behaviorPackBlockTypeDef.description && newId) {\r\n      this.behaviorPackBlockTypeDef.description.identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get behaviorPackFile() {\r\n    return this._behaviorPackFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set behaviorPackFile(newFile: IFile | undefined) {\r\n    this._behaviorPackFile = newFile;\r\n  }\r\n\r\n  public get shortId() {\r\n    let id = this.id;\r\n    if (id.startsWith(\"minecraft:\")) {\r\n      return id.substring(10, id.length);\r\n    }\r\n\r\n    return id;\r\n  }\r\n\r\n  getComponent(id: string) {\r\n    if (this.behaviorPackBlockTypeDef === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      const comp = this.behaviorPackBlockTypeDef.components[id];\r\n\r\n      if (comp) {\r\n        this._managed[id] = new ManagedComponent(this.behaviorPackBlockTypeDef.components, id, comp);\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"BTNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents() {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this.behaviorPackBlockTypeDef !== undefined) {\r\n      for (const componentName in this.behaviorPackBlockTypeDef.components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  ensurePropertyDefinition(propertyName: string, propertyDef: IBlocksMetadataBlockProperty) {\r\n    if (!this._properties[propertyName]) {\r\n      this._properties[propertyName] = propertyDef;\r\n    }\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    const bpData = this.behaviorPackBlockTypeDef as IBlockTypeBehaviorPack;\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(bpData.components, id, componentOrData);\r\n\r\n    bpData.components[id] = mc.getData();\r\n    this._managed[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this.behaviorPackBlockTypeDef === undefined) {\r\n      return;\r\n    }\r\n\r\n    const newBehaviorPacks: {\r\n      [name: string]: IComponent | string | string[] | boolean | number[] | number | undefined;\r\n    } = {};\r\n    const newComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this.behaviorPackBlockTypeDef.components) {\r\n      if (name !== id) {\r\n        const component = this.behaviorPackBlockTypeDef.components[name];\r\n\r\n        newBehaviorPacks[name] = component;\r\n      }\r\n    }\r\n\r\n    for (const name in this._managed) {\r\n      if (name !== id) {\r\n        newComponents[name] = this._managed[name];\r\n      }\r\n    }\r\n\r\n    this.behaviorPackBlockTypeDef.components = newBehaviorPacks;\r\n    this._managed = newComponents;\r\n  }\r\n\r\n  _ensureBehaviorPackDataInitialized() {\r\n    if (this.behaviorPackBlockTypeDef === undefined) {\r\n      this.behaviorPackBlockTypeDef = {\r\n        description: {\r\n          identifier: \"unknown\",\r\n        },\r\n        components: {},\r\n        events: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._behaviorPackFile === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._behaviorPackData !== null, \"BTP\");\r\n\r\n    if (!this._behaviorPackData) {\r\n      return false;\r\n    }\r\n\r\n    return this._behaviorPackFile.setObjectContentIfSemanticallyDifferent(this._behaviorPackData);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._behaviorPackFile === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._behaviorPackFile.isContentLoaded) {\r\n      await this._behaviorPackFile.loadContent();\r\n    }\r\n\r\n    if (!this._behaviorPackFile.content || this._behaviorPackFile.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._behaviorPackFile)\r\n      : StorageUtilities.getJsonObject(this._behaviorPackFile);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._behaviorPackData = data;\r\n\r\n    const block = data[\"minecraft:block\"];\r\n\r\n    if (block.description) {\r\n      this.id = block.description.identifier;\r\n    }\r\n\r\n    this.behaviorPackBlockTypeDef = block;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IBlockTypeData from \"./IBlockTypeData\";\r\nimport IBlockTypePropertyData from \"./IBlockTypePropertyData\";\r\n\r\n/**\r\n * Defines the geometric shape/mesh type for block rendering.\r\n * Used to drive data-driven block mesh creation in BlockMeshFactory.\r\n */\r\nexport enum BlockShape {\r\n  custom = 0,\r\n  unitCube = 1,\r\n  stairs = 2,\r\n  slab = 3,\r\n  fence = 4,\r\n  fenceGate = 5,\r\n  wall = 6,\r\n  door = 7,\r\n  trapdoor = 8,\r\n  button = 9,\r\n  pressurePlate = 10,\r\n  torch = 11,\r\n  lantern = 12,\r\n  chain = 13,\r\n  ladder = 14,\r\n  rail = 15,\r\n  lever = 16,\r\n  anvil = 17,\r\n  candle = 18,\r\n  endRod = 19,\r\n  glassPaneOrBars = 20,\r\n  billboard = 21, // Cross/X shape (saplings, flowers, mushrooms, etc.)\r\n  carpet = 22,\r\n  crop = 23, // Wheat, carrots, potatoes, etc.\r\n  leaves = 24,\r\n  log = 25,\r\n  water = 26,\r\n  redstoneWire = 27,\r\n  sign = 28,\r\n  hangingSign = 29,\r\n  bed = 30,\r\n  chest = 31,\r\n  campfire = 32,\r\n  bell = 33,\r\n  hopper = 34,\r\n  brewingStand = 35,\r\n  enchantingTable = 36,\r\n  cauldron = 37,\r\n  dripleaf = 38, // Big dripleaf with tilted leaf head and stem\r\n}\r\n\r\nexport default interface IBlockBaseTypeData {\r\n  id?: number;\r\n  n: string;\r\n  t?: string; // friendly title/display name\r\n  mc?: string; // map color\r\n  m?: string; // material\r\n  ic?: string;\r\n  abstract?: boolean;\r\n  isOpaque?: boolean;\r\n  sh?: BlockShape; // shape (abbreviated)\r\n  properties?: IBlockTypePropertyData[];\r\n  variants?: IBlockTypeData[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IBlockBaseTypeData, { BlockShape } from \"./IBlockBaseTypeData\";\r\n\r\nexport default class BlockBaseType {\r\n  private _name = \"\";\r\n\r\n  public data: IBlockBaseTypeData;\r\n\r\n  get icon() {\r\n    return this.data.ic;\r\n  }\r\n\r\n  getProperty(name: string) {\r\n    if (this.data.properties === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    for (let i = 0; i < this.data.properties.length; i++) {\r\n      if (this.data.properties[i].name === name) {\r\n        return this.data.properties[i];\r\n      }\r\n    }\r\n\r\n    throw new Error();\r\n  }\r\n\r\n  get isOpaque() {\r\n    if (this.data.isOpaque !== undefined) {\r\n      return this.data.isOpaque;\r\n    }\r\n\r\n    // Shapes that are inherently non-opaque (transparent, partial, or see-through)\r\n    const nonOpaqueShapes = [\r\n      BlockShape.fence,\r\n      BlockShape.fenceGate,\r\n      BlockShape.door,\r\n      BlockShape.trapdoor,\r\n      BlockShape.button,\r\n      BlockShape.pressurePlate,\r\n      BlockShape.torch,\r\n      BlockShape.lantern,\r\n      BlockShape.chain,\r\n      BlockShape.ladder,\r\n      BlockShape.rail,\r\n      BlockShape.lever,\r\n      BlockShape.candle,\r\n      BlockShape.endRod,\r\n      BlockShape.glassPaneOrBars,\r\n      BlockShape.billboard,\r\n      BlockShape.carpet,\r\n      BlockShape.crop,\r\n      BlockShape.leaves,\r\n      BlockShape.water,\r\n      BlockShape.redstoneWire,\r\n      BlockShape.sign,\r\n      BlockShape.hangingSign,\r\n      BlockShape.campfire,\r\n      BlockShape.bell,\r\n      BlockShape.hopper,\r\n      BlockShape.brewingStand,\r\n      BlockShape.enchantingTable,\r\n      BlockShape.cauldron,\r\n      BlockShape.dripleaf,\r\n    ];\r\n\r\n    // Non-opaque shapes should not hide adjacent faces\r\n    if (nonOpaqueShapes.includes(this.shape)) {\r\n      return false;\r\n    }\r\n\r\n    // Default: solid blocks (custom, unitCube, stairs, slab, wall, anvil, bed, chest, etc.)\r\n    // are opaque and correctly cull hidden faces between adjacent blocks\r\n    return true;\r\n  }\r\n\r\n  get mapColor(): string | undefined {\r\n    return this.data.mc;\r\n  }\r\n\r\n  get shape(): BlockShape {\r\n    // Support both abbreviated (sh) and full (shape) property names\r\n    const shapeValue = this.data.sh;\r\n    if (shapeValue === undefined) {\r\n      return BlockShape.custom;\r\n    }\r\n\r\n    return shapeValue;\r\n  }\r\n\r\n  get friendlyName(): string | undefined {\r\n    return this.data.t;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  constructor(name: string) {\r\n    this._name = name;\r\n\r\n    this.data = {\r\n      n: name,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { Packument } from \"@npm/types\";\r\n\r\nexport default class NpmModule {\r\n  packument: Packument;\r\n\r\n  latest: string | undefined;\r\n  beta: string | undefined;\r\n  betaVersion: string | undefined;\r\n  betaProductVersion: string | undefined;\r\n  latestPreviewVersion: string | undefined;\r\n  latestRetailVersion: string | undefined;\r\n\r\n  constructor(packument: Packument) {\r\n    this.packument = packument;\r\n\r\n    if (this.packument[\"dist-tags\"]) {\r\n      this.latest = this.packument[\"dist-tags\"].latest;\r\n      this.beta = this.packument[\"dist-tags\"].beta;\r\n    }\r\n\r\n    if (this.beta) {\r\n      // e.g., 1.3.0-beta.1.20.0-preview.23;\r\n      const betaTag = this.beta.indexOf(\"-beta.\");\r\n\r\n      if (betaTag > 0) {\r\n        this.betaVersion = this.beta.substring(0, betaTag);\r\n        this.betaProductVersion = this.beta.substring(betaTag + 6);\r\n        const dash = this.betaProductVersion.indexOf(\"-\");\r\n\r\n        if (dash >= 0) {\r\n          this.latestPreviewVersion = this.betaProductVersion.substring(0, dash);\r\n\r\n          const nums = this.latestPreviewVersion.split(\".\");\r\n\r\n          if (nums.length === 3) {\r\n            if (nums[2] === \"0\") {\r\n              this.latestRetailVersion = nums[0] + \".\" + (parseInt(nums[1]) - 1).toString() + \".0\";\r\n            } else {\r\n              this.latestRetailVersion = nums[0] + \".\" + nums[1] + \".\" + (parseInt(nums[2]) - 10).toString();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ScriptModuleInfo - Minecraft Script API module information\r\n *\r\n * Contains version information, API documentation, and metadata for\r\n * Minecraft Script API modules.\r\n */\r\n\r\n/**\r\n * Script module stability level\r\n */\r\nexport enum ModuleStability {\r\n  Stable = \"stable\",\r\n  Beta = \"beta\",\r\n  Internal = \"internal\",\r\n}\r\n\r\n/**\r\n * Information about a script module\r\n */\r\nexport interface IScriptModuleInfo {\r\n  /** Module name (e.g., \"@minecraft/server\") */\r\n  name: string;\r\n  /** Latest stable version */\r\n  latestStableVersion: string;\r\n  /** Latest beta version */\r\n  latestBetaVersion: string;\r\n  /** Minimum supported Minecraft version */\r\n  minMinecraftVersion: string;\r\n  /** Short description */\r\n  description: string;\r\n  /** Stability level */\r\n  stability: ModuleStability;\r\n  /** NPM package name for type definitions */\r\n  typesPackage: string;\r\n  /** Documentation URL */\r\n  docsUrl: string;\r\n}\r\n\r\n/**\r\n * Known Minecraft Script API modules\r\n */\r\nexport const SCRIPT_MODULES: IScriptModuleInfo[] = [\r\n  {\r\n    name: \"@minecraft/server\",\r\n    latestStableVersion: \"1.17.0\",\r\n    latestBetaVersion: \"1.18.0-beta\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"Core Minecraft server APIs for entities, blocks, dimensions, and world manipulation\",\r\n    stability: ModuleStability.Stable,\r\n    typesPackage: \"@minecraft/server\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/minecraft-server\",\r\n  },\r\n  {\r\n    name: \"@minecraft/server-ui\",\r\n    latestStableVersion: \"1.4.0\",\r\n    latestBetaVersion: \"1.5.0-beta\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"UI APIs for creating forms, dialogs, and player interactions\",\r\n    stability: ModuleStability.Stable,\r\n    typesPackage: \"@minecraft/server-ui\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-ui/minecraft-server-ui\",\r\n  },\r\n  {\r\n    name: \"@minecraft/server-admin\",\r\n    latestStableVersion: \"1.0.0-beta\",\r\n    latestBetaVersion: \"1.0.0-beta\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"Administrative APIs for Bedrock Dedicated Server\",\r\n    stability: ModuleStability.Beta,\r\n    typesPackage: \"@minecraft/server-admin\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-admin/minecraft-server-admin\",\r\n  },\r\n  {\r\n    name: \"@minecraft/server-gametest\",\r\n    latestStableVersion: \"1.0.0-beta\",\r\n    latestBetaVersion: \"1.0.0-beta\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"GameTest Framework APIs for automated testing\",\r\n    stability: ModuleStability.Beta,\r\n    typesPackage: \"@minecraft/server-gametest\",\r\n    docsUrl:\r\n      \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-gametest/minecraft-server-gametest\",\r\n  },\r\n  {\r\n    name: \"@minecraft/server-net\",\r\n    latestStableVersion: \"1.0.0-beta\",\r\n    latestBetaVersion: \"1.0.0-beta\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"Networking APIs for HTTP requests (Dedicated Server only)\",\r\n    stability: ModuleStability.Beta,\r\n    typesPackage: \"@minecraft/server-net\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-net/minecraft-server-net\",\r\n  },\r\n  {\r\n    name: \"@minecraft/server-editor\",\r\n    latestStableVersion: \"0.1.0-beta\",\r\n    latestBetaVersion: \"0.1.0-beta\",\r\n    minMinecraftVersion: \"1.21.0\",\r\n    description: \"Editor extension APIs for Minecraft Editor\",\r\n    stability: ModuleStability.Beta,\r\n    typesPackage: \"@minecraft/server-editor\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/documents/editoroverview\",\r\n  },\r\n  {\r\n    name: \"@minecraft/vanilla-data\",\r\n    latestStableVersion: \"1.20.80\",\r\n    latestBetaVersion: \"1.21.40\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"Type definitions for vanilla Minecraft identifiers (blocks, items, entities)\",\r\n    stability: ModuleStability.Stable,\r\n    typesPackage: \"@minecraft/vanilla-data\",\r\n    docsUrl: \"https://www.npmjs.com/package/@minecraft/vanilla-data\",\r\n  },\r\n  {\r\n    name: \"@minecraft/common\",\r\n    latestStableVersion: \"1.2.0\",\r\n    latestBetaVersion: \"1.2.0\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"Common types and utilities used across Minecraft modules\",\r\n    stability: ModuleStability.Stable,\r\n    typesPackage: \"@minecraft/common\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/common/minecraft-common\",\r\n  },\r\n  {\r\n    name: \"@minecraft/debug-utilities\",\r\n    latestStableVersion: \"1.0.0-beta\",\r\n    latestBetaVersion: \"1.0.0-beta\",\r\n    minMinecraftVersion: \"1.21.0\",\r\n    description: \"Debugging utilities for script development\",\r\n    stability: ModuleStability.Beta,\r\n    typesPackage: \"@minecraft/debug-utilities\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/\",\r\n  },\r\n];\r\n\r\n/**\r\n * Utility class for script module information\r\n */\r\nexport class ScriptModuleInfoProvider {\r\n  private static moduleMap: Map<string, IScriptModuleInfo> | null = null;\r\n\r\n  /**\r\n   * Get module map (lazy initialization)\r\n   */\r\n  private static getModuleMap(): Map<string, IScriptModuleInfo> {\r\n    if (!this.moduleMap) {\r\n      this.moduleMap = new Map();\r\n      for (const module of SCRIPT_MODULES) {\r\n        this.moduleMap.set(module.name, module);\r\n      }\r\n    }\r\n    return this.moduleMap;\r\n  }\r\n\r\n  /**\r\n   * Get info for a specific module\r\n   */\r\n  public static getModuleInfo(moduleName: string): IScriptModuleInfo | undefined {\r\n    return this.getModuleMap().get(moduleName);\r\n  }\r\n\r\n  /**\r\n   * Gets the latest version for a Minecraft module.\r\n   * @param moduleName Module name (with or without @minecraft/ prefix)\r\n   * @param preferBeta If true, returns the latest beta version; otherwise returns stable\r\n   * @returns The version string, or undefined if module is not known\r\n   */\r\n  public static getLatestVersion(moduleName: string, preferBeta: boolean = true): string | undefined {\r\n    // Normalize: add @minecraft/ prefix if not present\r\n    const fullName = moduleName.startsWith(\"@minecraft/\") ? moduleName : `@minecraft/${moduleName}`;\r\n    const info = this.getModuleInfo(fullName);\r\n    if (!info) {\r\n      return undefined;\r\n    }\r\n    return preferBeta ? info.latestBetaVersion : info.latestStableVersion;\r\n  }\r\n\r\n  /**\r\n   * Gets version info for a Minecraft module.\r\n   * @param moduleName Module name (with or without @minecraft/ prefix)\r\n   * @returns Version info object, or undefined if module is not known\r\n   */\r\n  public static getVersionInfo(\r\n    moduleName: string\r\n  ): { latestStableVersion: string; latestBetaVersion: string; minMinecraftVersion: string } | undefined {\r\n    // Normalize: add @minecraft/ prefix if not present\r\n    const fullName = moduleName.startsWith(\"@minecraft/\") ? moduleName : `@minecraft/${moduleName}`;\r\n    const info = this.getModuleInfo(fullName);\r\n    if (!info) {\r\n      return undefined;\r\n    }\r\n    return {\r\n      latestStableVersion: info.latestStableVersion,\r\n      latestBetaVersion: info.latestBetaVersion,\r\n      minMinecraftVersion: info.minMinecraftVersion,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Get all module names\r\n   */\r\n  public static getAllModuleNames(): string[] {\r\n    return SCRIPT_MODULES.map((m) => m.name);\r\n  }\r\n\r\n  /**\r\n   * Check if a module name is a valid Minecraft module\r\n   */\r\n  public static isMinecraftModule(moduleName: string): boolean {\r\n    return this.getModuleMap().has(moduleName);\r\n  }\r\n\r\n  /**\r\n   * Parse a module version from package.json dependency\r\n   */\r\n  public static parseModuleVersion(versionSpec: string): { version: string; isBeta: boolean } {\r\n    // Handle version specs like \"^1.0.0\", \"~1.0.0\", \"1.0.0-beta\", etc.\r\n    const cleanVersion = versionSpec.replace(/^[\\^~>=<]+/, \"\").trim();\r\n    const isBeta = cleanVersion.includes(\"beta\") || cleanVersion.includes(\"alpha\");\r\n\r\n    return { version: cleanVersion, isBeta };\r\n  }\r\n\r\n  /**\r\n   * Check if a module version is outdated\r\n   */\r\n  public static isVersionOutdated(\r\n    moduleName: string,\r\n    currentVersion: string\r\n  ): { isOutdated: boolean; latestVersion: string; isBetaAvailable: boolean } {\r\n    const info = this.getModuleInfo(moduleName);\r\n    if (!info) {\r\n      return { isOutdated: false, latestVersion: currentVersion, isBetaAvailable: false };\r\n    }\r\n\r\n    const { version, isBeta } = this.parseModuleVersion(currentVersion);\r\n    const targetVersion = isBeta ? info.latestBetaVersion : info.latestStableVersion;\r\n\r\n    // Simple version comparison (works for semver)\r\n    const isOutdated = this.compareVersions(version, targetVersion) < 0;\r\n    const isBetaAvailable = this.compareVersions(info.latestStableVersion, info.latestBetaVersion) < 0;\r\n\r\n    return {\r\n      isOutdated,\r\n      latestVersion: targetVersion,\r\n      isBetaAvailable,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Compare two semver versions\r\n   * Returns: -1 if a < b, 0 if a == b, 1 if a > b\r\n   */\r\n  public static compareVersions(a: string, b: string): number {\r\n    // Strip beta/alpha suffixes for comparison\r\n    const cleanA = a.replace(/-.*$/, \"\");\r\n    const cleanB = b.replace(/-.*$/, \"\");\r\n\r\n    const partsA = cleanA.split(\".\").map((n) => parseInt(n, 10) || 0);\r\n    const partsB = cleanB.split(\".\").map((n) => parseInt(n, 10) || 0);\r\n\r\n    for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {\r\n      const numA = partsA[i] || 0;\r\n      const numB = partsB[i] || 0;\r\n\r\n      if (numA < numB) return -1;\r\n      if (numA > numB) return 1;\r\n    }\r\n\r\n    // If base versions are equal, non-beta > beta\r\n    const isBetaA = a.includes(\"beta\") || a.includes(\"alpha\");\r\n    const isBetaB = b.includes(\"beta\") || b.includes(\"alpha\");\r\n\r\n    if (isBetaA && !isBetaB) return -1;\r\n    if (!isBetaA && isBetaB) return 1;\r\n\r\n    return 0;\r\n  }\r\n\r\n  /**\r\n   * Get recommended dependency entries for manifest.json\r\n   */\r\n  public static getRecommendedDependency(\r\n    moduleName: string,\r\n    useBeta: boolean = false\r\n  ): { module_name: string; version: string } | null {\r\n    const info = this.getModuleInfo(moduleName);\r\n    if (!info) {\r\n      return null;\r\n    }\r\n\r\n    return {\r\n      module_name: moduleName,\r\n      version: useBeta ? info.latestBetaVersion : info.latestStableVersion,\r\n    };\r\n  }\r\n}\r\n\r\n/**\r\n * Common Script API types that need special handling\r\n */\r\nexport const COMMON_SCRIPT_TYPES = {\r\n  // Core types\r\n  world: {\r\n    module: \"@minecraft/server\",\r\n    description: \"The global World object - access to dimensions, players, and world state\",\r\n  },\r\n  system: {\r\n    module: \"@minecraft/server\",\r\n    description: \"The System object - timing, events, and script lifecycle\",\r\n  },\r\n  Entity: {\r\n    module: \"@minecraft/server\",\r\n    description: \"Base class for all entities (players, mobs, items)\",\r\n  },\r\n  Player: {\r\n    module: \"@minecraft/server\",\r\n    description: \"Represents a player in the world\",\r\n  },\r\n  Block: {\r\n    module: \"@minecraft/server\",\r\n    description: \"Represents a block in the world\",\r\n  },\r\n  Dimension: {\r\n    module: \"@minecraft/server\",\r\n    description: \"Represents a dimension (overworld, nether, end)\",\r\n  },\r\n  ItemStack: {\r\n    module: \"@minecraft/server\",\r\n    description: \"Represents an item stack\",\r\n  },\r\n  Vector3: {\r\n    module: \"@minecraft/server\",\r\n    description: \"3D vector with x, y, z coordinates\",\r\n  },\r\n\r\n  // UI types\r\n  ActionFormData: {\r\n    module: \"@minecraft/server-ui\",\r\n    description: \"Button-based form for player selection\",\r\n  },\r\n  MessageFormData: {\r\n    module: \"@minecraft/server-ui\",\r\n    description: \"Simple message with two buttons\",\r\n  },\r\n  ModalFormData: {\r\n    module: \"@minecraft/server-ui\",\r\n    description: \"Complex form with multiple input types\",\r\n  },\r\n};\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Catalog from \"./ICatalog\";\r\nimport axios from \"axios\";\r\nimport BlockType from \"./BlockType\";\r\nimport BlockBaseType from \"./BlockBaseType\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IJavaBlockTypeData from \"./IJavaBlockTypeData\";\r\nimport IBlockTypeData from \"./IBlockTypeData\";\r\nimport { BlockShape } from \"./IBlockBaseTypeData\";\r\nimport Log from \"./../core/Log\";\r\nimport HttpStorage from \"../storage/HttpStorage\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IFormField from \"../dataform/IFormField\";\r\nimport ILocalUtilities from \"../core/ILocalUtilities\";\r\nimport ITypeDefCatalog from \"./ITypeDefCatalog\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport NpmModule from \"../devproject/NpmModule\";\r\nimport IMainInfoVersions from \"./IMainInfoVersions\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\nimport FieldUtilities from \"../dataform/FieldUtilities\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport IProjectInfoData from \"../info/IProjectInfoData\";\r\nimport Project, { FolderContext } from \"../app/Project\";\r\nimport { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"../app/IProjectItemData\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ISnippet from \"../app/ISnippet\";\r\nimport IGalleryItem from \"../app/IGalleryItem\";\r\nimport { MinecraftTrack } from \"../app/ICreatorToolsData\";\r\nimport IBiomesMetadata from \"./IBiomesMetadata\";\r\nimport IBlocksMetadata from \"./IBlocksMetadata\";\r\nimport ILegacyDocumentationNode from \"./docs/ILegacyDocumentation\";\r\nimport IEntitiesMetadata from \"./IEntitiesMetadata\";\r\nimport IItemsMetadata from \"./IItemsMetadata\";\r\nimport IDocCommandSet from \"./docs/IDocCommandSet\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport { HashCatalog } from \"../core/HashUtilities\";\r\nimport IFile from \"../storage/IFile\";\r\nimport TerrainTextureCatalogDefinition from \"./TerrainTextureCatalogDefinition\";\r\nimport BlocksCatalogDefinition from \"./BlocksCatalogDefinition\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport IContentSource from \"../app/IContentSource\";\r\nimport { ScriptModuleInfoProvider } from \"../langcore/javascript/ScriptModuleInfo\";\r\n\r\nexport default class Database {\r\n  static isVanillaLoaded = false;\r\n  static isScriptTypesLoaded = false;\r\n  static isContentSourcesLoaded = false;\r\n  static vanillaCatalog: Catalog | null = null;\r\n  static loadedFormCount = 0;\r\n  static _creatorToolsIngameFile: IFile | null = null;\r\n  static _creatorToolsIngameProject: Project | null = null;\r\n  static uxCatalog: { [formName: string]: IFormDefinition } = {};\r\n  private static _missingForms: Set<string> = new Set();\r\n  static formsFolders: { [folderName: string]: IFolder } = {};\r\n  static modelTemplateCatalog: { [templateName: string]: object } = {};\r\n  static loadedModelTemplateCount = 0;\r\n  static stable20TypeDefs: ITypeDefCatalog | null = null;\r\n  static libs: ITypeDefCatalog | null = null;\r\n  static stable10TypeDefs: ITypeDefCatalog | null = null;\r\n  static contentFolder: IFolder | null = null;\r\n  static snippetsFolder: IFolder | null = null;\r\n  static previewMetadataFolder: IFolder | null = null;\r\n  static releaseMetadataFolder: IFolder | null = null;\r\n  static previewVanillaFolder: IFolder | null = null;\r\n  static releaseVanillaFolder: IFolder | null = null;\r\n  static serveVanillaFolder: IFolder | null = null;\r\n  static samplesFolder: IFolder | null = null;\r\n  static releaseVanillaBehaviorPackFolder: IFolder | null = null;\r\n  static releaseVanillaResourcePackFolder: IFolder | null = null;\r\n  static local: ILocalUtilities | null = null;\r\n  static vanillaInfoData: IProjectInfoData | null = null;\r\n  static vanillaContentIndex: ContentIndex | null = null;\r\n\r\n  static blocksCatalog: BlocksCatalogDefinition | undefined = undefined;\r\n  static terrainTextureCatalog: TerrainTextureCatalogDefinition | undefined = undefined;\r\n\r\n  static previewVanillaInfoData: IProjectInfoData | null = null;\r\n  static previewVanillaContentIndex: ContentIndex | null = null;\r\n  static releaseVanillaContentHashes: HashCatalog | null = null;\r\n  private static _isLoadingReleaseVanillaHashes: boolean = false;\r\n  private static _pendingLoadReleaseVanillaHashRequests: ((value: unknown) => void)[] = [];\r\n\r\n  static samplesInfoData: IProjectInfoData | null = null;\r\n  static samplesContentIndex: ContentIndex | null = null;\r\n  static addonsDocs: ILegacyDocumentationNode | null = null;\r\n  static biomesMetadata: IBiomesMetadata | null = null;\r\n  static blocksMetadata: IBlocksMetadata | null = null;\r\n  static entitiesMetadata: IEntitiesMetadata | null = null;\r\n  static itemsMetadata: IItemsMetadata | null = null;\r\n  static commandsMetadata: IDocCommandSet | null = null;\r\n\r\n  static latestVersion: string | undefined;\r\n  static latestPreviewVersion: string | undefined;\r\n\r\n  private static _isLoadingSnippets: boolean = false;\r\n  private static _pendingLoadSnippetsRequests: ((value: unknown) => void)[] = [];\r\n  private static _isLoadingVanillaResourceDefinition: boolean = false;\r\n  private static _pendingLoadVanillaResourceDefinitionRequests: ((value: unknown) => void)[] = [];\r\n  private static _isLoadingVanillaInfoData: boolean = false;\r\n  private static _pendingLoadVanillaInfoDataRequests: ((value: unknown) => void)[] = [];\r\n  private static _isLoadingPreviewVanillaInfoData: boolean = false;\r\n  private static _pendingLoadPreviewVanillaInfoDataRequests: ((value: unknown) => void)[] = [];\r\n  private static _isLoadingSamples: boolean = false;\r\n  private static _pendingLoadSamplesRequests: ((value: unknown) => void)[] = [];\r\n\r\n  static dataPath: string = \"res/latest/\";\r\n\r\n  static creatorToolsIngameBehaviorPackUUID = \"37355e25-5c48-43be-ad24-107d6cf2ea74\";\r\n  static creatorToolsIngameBehaviorPackVersion = [1, 0, 0];\r\n  static creatorToolsIngameResourcePackUUID = \"a49a75c0-d3a1-47c5-adcd-70394b0fe749\";\r\n  static creatorToolsIngameResourcePackVersion = [1, 0, 0];\r\n\r\n  static minecraftEduVersion = \"1.21.90\";\r\n  static minecraftEduPreviewVersion = \"1.21.110\";\r\n  static fallbackMinecraftVersion = \"1.26.0\"; // used if we fail to retrieve the latest version from the network\r\n  static fallbackMinecraftPreviewVersion = \"1.26.10.27\"; // should be occasionally statically updated.\r\n\r\n  static defaultContentSources: IContentSource[] = [\r\n    {\r\n      id: \"minecraftBedrockComMojang\",\r\n      localFolderPath: \"<BDRK>\",\r\n    },\r\n    {\r\n      id: \"minecraftBedrockPreviewComMojang\",\r\n      localFolderPath: \"<BDPV>\",\r\n    },\r\n    {\r\n      id: \"minecraftEducationComMojang\",\r\n      localFolderPath: \"<EDUR>\",\r\n    },\r\n    {\r\n      id: \"minecraftEducationPreviewComMojang\",\r\n      localFolderPath: \"<EDUP>\",\r\n    },\r\n  ];\r\n\r\n  static contentSources: IContentSource[] = [];\r\n\r\n  /**\r\n   * Gets all known Minecraft script module names.\r\n   * Delegates to ScriptModuleInfoProvider which is the single source of truth.\r\n   */\r\n  static get minecraftModuleNames(): string[] {\r\n    return ScriptModuleInfoProvider.getAllModuleNames();\r\n  }\r\n\r\n  static maxMinecraftPatchVersions = {\r\n    \"1.19\": \"80\",\r\n    \"1.20\": \"80\",\r\n    \"1.21\": \"120\",\r\n  };\r\n\r\n  static moduleDescriptors: { [id: string]: NpmModule } = {};\r\n\r\n  static blockTypes: { [id: string]: BlockType } = {};\r\n  static schemaContents: { [id: string]: object } = {};\r\n  static officialSchemaContents: { [id: string]: object } = {};\r\n  static blockBaseTypes: { [id: string]: BlockBaseType } = {};\r\n  static _blockTypesByLegacyId: BlockType[] | undefined;\r\n\r\n  static javaBlockTypeData: { [id: string]: IJavaBlockTypeData } = {};\r\n\r\n  static _defaultBlockBaseType?: BlockBaseType;\r\n\r\n  static get defaultBlockBaseType() {\r\n    if (Database._defaultBlockBaseType === undefined) {\r\n      Database._defaultBlockBaseType = Database.ensureBlockBaseType(\"block\");\r\n    }\r\n\r\n    return Database._defaultBlockBaseType;\r\n  }\r\n\r\n  static async ensureFormLoadedByPath(path: string): Promise<IFormDefinition | undefined> {\r\n    const lastSlash = path.lastIndexOf(\"/\");\r\n\r\n    if (lastSlash >= 0) {\r\n      return await Database.ensureFormLoaded(path.substring(0, lastSlash), path.substring(lastSlash + 1));\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Clears cached folder references for bulk content (vanilla, samples) to free memory.\r\n   * This should be called after bulk operations like documentation generation are complete.\r\n   */\r\n  static clearBulkContentCaches() {\r\n    Database.previewVanillaFolder = null;\r\n    Database.releaseVanillaFolder = null;\r\n    Database.serveVanillaFolder = null;\r\n    Database.samplesFolder = null;\r\n    Database.previewVanillaContentIndex = null;\r\n    Database.samplesContentIndex = null;\r\n    Database.previewVanillaInfoData = null;\r\n    Database.samplesInfoData = null;\r\n  }\r\n\r\n  /**\r\n   * Reads a JSON file directly from the preview vanilla content without using the folder abstraction.\r\n   * This avoids caching File/Folder objects in memory, which is important for batch processing.\r\n   * @param relativePath Path relative to the vanilla preview root (e.g., \"/behavior_pack/entities/pig.json\")\r\n   * @returns The parsed JSON object, or null if the file doesn't exist or can't be parsed\r\n   */\r\n  static async readPreviewVanillaJsonFile(relativePath: string): Promise<object | null> {\r\n    if (!Database.local) {\r\n      return null;\r\n    }\r\n\r\n    // Normalize the path - remove leading slash if present\r\n    if (relativePath.startsWith(\"/\")) {\r\n      relativePath = relativePath.substring(1);\r\n    }\r\n\r\n    const fullPath = \"res/latest/van/preview/\" + relativePath;\r\n    return await Database.local.readJsonFile(fullPath);\r\n  }\r\n\r\n  /**\r\n   * Reads a JSON file directly from the samples content without using the folder abstraction.\r\n   * This avoids caching File/Folder objects in memory, which is important for batch processing.\r\n   * @param relativePath Path relative to the samples root (e.g., \"/behavior_packs/example/entities/pig.json\")\r\n   * @returns The parsed JSON object, or null if the file doesn't exist or can't be parsed\r\n   */\r\n  static async readSamplesJsonFile(relativePath: string): Promise<object | null> {\r\n    if (!Database.local) {\r\n      return null;\r\n    }\r\n\r\n    // Normalize the path - remove leading slash if present\r\n    if (relativePath.startsWith(\"/\")) {\r\n      relativePath = relativePath.substring(1);\r\n    }\r\n\r\n    const fullPath = \"res/samples/\" + relativePath;\r\n    return await Database.local.readJsonFile(fullPath);\r\n  }\r\n\r\n  static getFormName(subFolder: string, name: string) {\r\n    name = name.toLowerCase();\r\n\r\n    return (subFolder ? subFolder + \".\" : \"\") + name;\r\n  }\r\n\r\n  static isFormLoaded(subFolder: string, name: string) {\r\n    const extendedName = Database.getFormName(subFolder, name);\r\n\r\n    if (Database.uxCatalog[extendedName] !== undefined) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Forms are loaded from a single canonical location: `data/forms/`.\r\n   *\r\n   * Generation: the `gulp copybedrockschemas` task lays down\r\n   * `@minecraft/bedrock-schemas`'s upstream forms first, then OVERLAYS our\r\n   * checked-in overrides from `app/public_supplemental/data/local_forms/`\r\n   * directly on top of them (same-named files replace upstream copies).\r\n   *\r\n   * The result is a single merged tree at `public/data/forms/` (or\r\n   * `toolbuild/vsc/data/forms/` for the VSC extension), so this loader does\r\n   * not need a runtime fallback chain \u2014 there is only one place to look.\r\n   *\r\n   * To extend or replace an upstream form, drop a same-pathed file under\r\n   * `app/public_supplemental/data/local_forms/<sub>/<name>.form.json` and\r\n   * rebuild. To unsticky an override (e.g. because upstream caught up), just\r\n   * delete that file and rebuild.\r\n   */\r\n  private static readonly DEFAULT_FORMS_PATH = \"data/forms/\";\r\n\r\n  static ensureFormLoadedSync(subFolder: string, name: string): IFormDefinition | undefined {\r\n    name = name.toLowerCase();\r\n\r\n    const extendedName = Database.getFormName(subFolder, name);\r\n\r\n    if (Database.uxCatalog[extendedName] !== undefined) {\r\n      return Database.uxCatalog[extendedName];\r\n    }\r\n\r\n    return Database._tryLoadFormSync(Database.DEFAULT_FORMS_PATH, subFolder, name);\r\n  }\r\n\r\n  private static _tryLoadFormSync(basePath: string, subFolder: string, name: string): IFormDefinition | undefined {\r\n    let path = basePath;\r\n    if (subFolder) {\r\n      path += subFolder + \"/\";\r\n    }\r\n\r\n    if (!Database.local) {\r\n      return undefined;\r\n    }\r\n\r\n    const storage = Database.local.createStorage(path);\r\n\r\n    if (!storage) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!storage.rootFolder.isLoaded) {\r\n      if ((storage.rootFolder as any).loadSync) {\r\n        (storage.rootFolder as any).loadSync();\r\n      }\r\n    }\r\n\r\n    const file = storage.rootFolder.files[name + \".form.json\"];\r\n    if (!file) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!file.isContentLoaded) {\r\n      if ((file as any).loadContentSync) {\r\n        (file as any).loadContentSync();\r\n      }\r\n    }\r\n\r\n    const res = StorageUtilities.getJsonObject(file) as IFormDefinition;\r\n    if (res) {\r\n      FieldUtilities.normalizeFormFieldDataTypes(res);\r\n    }\r\n    return res;\r\n  }\r\n\r\n  static async ensureFormLoaded(subFolder: string, name: string): Promise<IFormDefinition | undefined> {\r\n    name = name.toLowerCase();\r\n\r\n    const extendedName = Database.getFormName(subFolder, name);\r\n\r\n    if (Database.uxCatalog[extendedName] !== undefined) {\r\n      return Database.uxCatalog[extendedName];\r\n    }\r\n\r\n    // Skip re-fetching forms that were previously not found\r\n    if (Database._missingForms.has(extendedName)) {\r\n      return undefined;\r\n    }\r\n\r\n    const res = await Database._tryLoadForm(Database.DEFAULT_FORMS_PATH, subFolder, name);\r\n\r\n    if (res) {\r\n      Database.uxCatalog[extendedName] = res;\r\n      Database.loadedFormCount++;\r\n      return res;\r\n    }\r\n\r\n    Database._missingForms.add(extendedName);\r\n    return undefined;\r\n  }\r\n\r\n  private static async _tryLoadForm(\r\n    basePath: string,\r\n    subFolder: string,\r\n    name: string\r\n  ): Promise<IFormDefinition | undefined> {\r\n    let path = basePath;\r\n    if (subFolder) {\r\n      path += subFolder + \"/\";\r\n    }\r\n\r\n    if (Database.local) {\r\n      const storage = Database.local.createStorage(path);\r\n\r\n      if (!storage) {\r\n        return undefined;\r\n      }\r\n\r\n      if (!storage.rootFolder.isLoaded) {\r\n        await storage.rootFolder.load();\r\n      }\r\n\r\n      const file = storage.rootFolder.files[name + \".form.json\"];\r\n\r\n      if (!file) {\r\n        return undefined;\r\n      }\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent();\r\n      }\r\n\r\n      const res = StorageUtilities.getJsonObject(file) as IFormDefinition;\r\n      if (res) {\r\n        FieldUtilities.normalizeFormFieldDataTypes(res);\r\n      }\r\n      return res;\r\n    }\r\n\r\n    // HTTP fallback: fetch directly. We swallow 404s silently because the local\r\n    // override directory is expected to be sparse (most forms have no override).\r\n    const httpPath = CreatorToolsHost.contentWebRoot + path + name + \".form.json\";\r\n\r\n    try {\r\n      const response = await axios.get(httpPath);\r\n\r\n      const res = response.data as IFormDefinition;\r\n      if (res) {\r\n        FieldUtilities.normalizeFormFieldDataTypes(res);\r\n      }\r\n      return res;\r\n    } catch {\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  static isModelTemplateLoaded(name: string): boolean {\r\n    const normalizedName = name.toLowerCase();\r\n    return Database.modelTemplateCatalog[normalizedName] !== undefined;\r\n  }\r\n\r\n  static getModelTemplate(name: string): object | undefined {\r\n    const normalizedName = name.toLowerCase();\r\n    return Database.modelTemplateCatalog[normalizedName];\r\n  }\r\n\r\n  static async ensureModelTemplateLoaded(name: string): Promise<object | undefined> {\r\n    const normalizedName = name.toLowerCase();\r\n\r\n    if (Database.modelTemplateCatalog[normalizedName] !== undefined) {\r\n      return Database.modelTemplateCatalog[normalizedName];\r\n    }\r\n\r\n    let path = \"data/model_templates/\";\r\n\r\n    if (Database.local) {\r\n      const storage = Database.local.createStorage(path);\r\n\r\n      if (storage) {\r\n        if (!storage.rootFolder.isLoaded) {\r\n          await storage.rootFolder.load();\r\n        }\r\n\r\n        const file = storage.rootFolder.files[normalizedName + \".model.json\"];\r\n        if (file) {\r\n          if (!file.isContentLoaded) {\r\n            await file.loadContent();\r\n          }\r\n\r\n          const res = StorageUtilities.getJsonObject(file);\r\n          if (res) {\r\n            Database.modelTemplateCatalog[normalizedName] = res;\r\n            Database.loadedModelTemplateCount++;\r\n            return res;\r\n          }\r\n        }\r\n\r\n        Log.fail(\"Could not load model template locally for '\" + normalizedName + \"'.\");\r\n        return undefined;\r\n      }\r\n    } else {\r\n      path = CreatorToolsHost.contentWebRoot + path + normalizedName + \".model.json\";\r\n\r\n      try {\r\n        const response = await axios.get(path);\r\n\r\n        Database.modelTemplateCatalog[normalizedName] = response.data;\r\n        Database.loadedModelTemplateCount++;\r\n\r\n        return response.data;\r\n      } catch {\r\n        Log.fail(\"Could not load model template for '\" + path + \"'.\");\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getModelTemplateNames(): Promise<string[]> {\r\n    const templateNames: string[] = [];\r\n    const path = \"data/model_templates/\";\r\n\r\n    if (Database.local) {\r\n      const storage = Database.local.createStorage(path);\r\n\r\n      if (storage) {\r\n        if (!storage.rootFolder.isLoaded) {\r\n          await storage.rootFolder.load();\r\n        }\r\n\r\n        for (const fileName of Object.keys(storage.rootFolder.files)) {\r\n          if (fileName.endsWith(\".model.json\")) {\r\n            templateNames.push(fileName.replace(\".model.json\", \"\"));\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.contentWebRoot + path);\r\n\r\n      if (!storage.rootFolder.isLoaded) {\r\n        await storage.rootFolder.load();\r\n      }\r\n\r\n      for (const fileName of Object.keys(storage.rootFolder.files)) {\r\n        if (fileName.endsWith(\".model.json\")) {\r\n          templateNames.push(fileName.replace(\".model.json\", \"\"));\r\n        }\r\n      }\r\n    }\r\n\r\n    return templateNames;\r\n  }\r\n\r\n  static async getFormsFolder(subFolder: string) {\r\n    if (this.formsFolders[subFolder]) {\r\n      return this.formsFolders[subFolder];\r\n    }\r\n\r\n    const folderPath = \"data/forms/\" + subFolder + \"/\";\r\n\r\n    if (\r\n      Database.local &&\r\n      (CreatorToolsHost.fullLocalStorage ||\r\n        !CreatorToolsHost.contentWebRoot ||\r\n        !CreatorToolsHost.retrieveDataFromWebContentRoot)\r\n    ) {\r\n      const storage = Database.local.createStorage(folderPath);\r\n\r\n      if (storage) {\r\n        if (!storage.rootFolder.isLoaded) {\r\n          await storage.rootFolder.load();\r\n        }\r\n\r\n        this.formsFolders[subFolder] = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.contentWebRoot + folderPath);\r\n\r\n      if (!storage.rootFolder.isLoaded) {\r\n        await storage.rootFolder.load();\r\n      }\r\n\r\n      this.formsFolders[subFolder] = storage.rootFolder;\r\n    }\r\n\r\n    return this.formsFolders[subFolder];\r\n  }\r\n\r\n  static getFormByPath(path: string): IFormDefinition | undefined {\r\n    const lastSlash = path.lastIndexOf(\"/\");\r\n\r\n    if (lastSlash >= 0) {\r\n      return Database.getForm(path.substring(0, lastSlash), path.substring(lastSlash + 1));\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getForm(subFolder: string, name: string): IFormDefinition | undefined {\r\n    name = Database.getFormName(subFolder, name);\r\n\r\n    return Database.uxCatalog[name];\r\n  }\r\n\r\n  static getBlockType(name: string) {\r\n    name = MinecraftUtilities.canonicalizeName(name);\r\n\r\n    const blockType = Database.blockTypes[name];\r\n\r\n    return blockType;\r\n  }\r\n\r\n  static populateBlockTypesByLegacyId() {\r\n    this._blockTypesByLegacyId = [];\r\n\r\n    for (const blockTypeName in this.blockTypes) {\r\n      const blockType = this.blockTypes[blockTypeName];\r\n\r\n      if (blockType.numericId !== undefined) {\r\n        Log.assert(\r\n          this._blockTypesByLegacyId[blockType.numericId] === undefined,\r\n          \"Multiple block types registered for the same ID:\" + blockType.id\r\n        );\r\n        this._blockTypesByLegacyId[blockType.numericId] = blockType;\r\n      }\r\n    }\r\n  }\r\n\r\n  static async getModuleDescriptor(moduleId: string) {\r\n    if (Database.moduleDescriptors[moduleId]) {\r\n      return Database.moduleDescriptors[moduleId];\r\n    }\r\n\r\n    const url = \"https://registry.npmjs.org/\" + moduleId;\r\n\r\n    try {\r\n      const response = await axios.get(url);\r\n\r\n      Database.moduleDescriptors[moduleId] = new NpmModule(response.data);\r\n    } catch (e: any) {\r\n      if (e && (!e.message || !e.message.indexOf || e.message.indexOf(\"etwork \") < 0)) {\r\n        Log.debugAlert(\"Could not load registry for '\" + moduleId + \"': \" + e.toString());\r\n      } else {\r\n        CreatorToolsHost.getCreatorTools()?.notifyStatusUpdate(\r\n          \"Could not connect to network to retrieve latest script package details. Url: \" + url\r\n        );\r\n      }\r\n    }\r\n\r\n    return Database.moduleDescriptors[moduleId];\r\n  }\r\n\r\n  static async getNextMinecraftPreviewVersion() {\r\n    const latestMinecraftPreviewVersion = await Database.getLatestMinecraftPreviewVersion();\r\n\r\n    if (!latestMinecraftPreviewVersion) {\r\n      return undefined;\r\n    }\r\n\r\n    const ver = latestMinecraftPreviewVersion.split(\".\");\r\n\r\n    if (!ver || !ver.length || ver.length < 3) {\r\n      return undefined;\r\n    }\r\n\r\n    let triplet = undefined;\r\n\r\n    try {\r\n      triplet = [parseInt(ver[0]), parseInt(ver[1]), parseInt(ver[2]) + 10];\r\n    } catch (e) {\r\n      return undefined;\r\n    }\r\n\r\n    return triplet.join(\".\");\r\n  }\r\n\r\n  static async getLatestMinecraftPreviewVersion() {\r\n    const moduleDescriptor = await this.getModuleDescriptor(\"@minecraft/server\");\r\n\r\n    if (!moduleDescriptor || !moduleDescriptor.latestPreviewVersion) {\r\n      return \"1.21.0\";\r\n    }\r\n\r\n    return moduleDescriptor.latestPreviewVersion;\r\n  }\r\n\r\n  static async getLatestMinecraftRetailVersion() {\r\n    const moduleDescriptor = await this.getModuleDescriptor(\"@minecraft/server\");\r\n\r\n    if (!moduleDescriptor || !moduleDescriptor.latestRetailVersion) {\r\n      return \"1.21.0\";\r\n    }\r\n\r\n    return moduleDescriptor.latestRetailVersion;\r\n  }\r\n\r\n  static async isRecentVersionFromVersionArray(version: number[] | undefined) {\r\n    if (version === undefined || version.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    const ver = await this.getLatestVersionInfo(MinecraftTrack.main);\r\n\r\n    if (!ver) {\r\n      return false;\r\n    }\r\n\r\n    const verArr = MinecraftUtilities.getVersionArrayFrom(ver);\r\n    if (!verArr || verArr.length < 3) {\r\n      return false;\r\n    }\r\n\r\n    const majorVersion = verArr[0];\r\n    const minorVersion = verArr[1];\r\n\r\n    if (version[0] < majorVersion) {\r\n      return false;\r\n    }\r\n\r\n    if (majorVersion === version[0] && minorVersion - version[1] > 1) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static async getContentFolderFile(fileRelativePath: string) {\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null || !CreatorToolsHost.getCreatorTools()) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    fileRelativePath = StorageUtilities.ensureStartsWithDelimiter(fileRelativePath);\r\n\r\n    return await Database.contentFolder.ensureFileFromRelativePath(fileRelativePath);\r\n  }\r\n\r\n  static async getContentFolderContent(fileRelativePath: string) {\r\n    const file = await Database.getContentFolderFile(fileRelativePath);\r\n\r\n    if (!file) {\r\n      return;\r\n    }\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    return file.content;\r\n  }\r\n\r\n  static async ensureCreatorToolsIngameFile() {\r\n    if (Database._creatorToolsIngameFile) {\r\n      return Database._creatorToolsIngameFile;\r\n    }\r\n\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null || !CreatorToolsHost.getCreatorTools()) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    const file = Database.contentFolder.ensureFile(\"creator_tools_ingame.mcaddon\");\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    Database._creatorToolsIngameFile = file;\r\n\r\n    return file;\r\n  }\r\n\r\n  static async ensureCreatorToolsIngameProject() {\r\n    if (Database._creatorToolsIngameProject) {\r\n      return Database._creatorToolsIngameProject;\r\n    }\r\n\r\n    const file = await Database.ensureCreatorToolsIngameFile();\r\n    const ct = CreatorToolsHost.getCreatorTools();\r\n\r\n    if (Database.contentFolder === null || !file || !ct) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    if (file.content instanceof Uint8Array) {\r\n      Database._creatorToolsIngameProject = new Project(ct, \"Creator Tools\", null);\r\n\r\n      const projectFolder = await Database._creatorToolsIngameProject.ensureProjectFolder();\r\n\r\n      const folder = projectFolder.ensureFolder(\"addons\");\r\n\r\n      const contentFile = folder.ensureFile(file.name);\r\n\r\n      contentFile.setContent(file.content);\r\n\r\n      contentFile.saveContent();\r\n\r\n      const relPath = contentFile.getFolderRelativePath(Database._creatorToolsIngameProject.projectFolder as IFolder);\r\n\r\n      if (relPath !== undefined) {\r\n        Database._creatorToolsIngameProject.ensureItemByProjectPath(\r\n          relPath,\r\n          ProjectItemStorageType.singleFile,\r\n          file.name,\r\n          ProjectItemType.MCAddon,\r\n          FolderContext.unknown,\r\n          undefined,\r\n          ProjectItemCreationType.normal\r\n        );\r\n\r\n        await Database._creatorToolsIngameProject.inferProjectItemsFromZipFile(relPath, contentFile, false);\r\n      }\r\n\r\n      return Database._creatorToolsIngameProject;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getLatestVersionInfo(track: MinecraftTrack, force?: boolean) {\r\n    if (track === MinecraftTrack.edu) {\r\n      return Database.minecraftEduVersion;\r\n    }\r\n\r\n    if (track === MinecraftTrack.eduPreview) {\r\n      return Database.minecraftEduPreviewVersion;\r\n    }\r\n\r\n    // Test pinning hook: if MCT_TEST_PINNED_MC_VERSION (or _PREVIEW_VERSION) is set\r\n    // in the environment, treat it as the canonical \"current Minecraft version\" for\r\n    // this process. This insulates test baselines from upstream version drift \u2014\r\n    // every validator that pulls \"latest\" from here (FormatVersionManager,\r\n    // MinEngineVersionManager, BaseGameVersionManager, etc.) will produce stable,\r\n    // deterministic output regardless of when the bedrock-samples version.json\r\n    // changes. Honors `force` so callers that explicitly want a refresh can bypass.\r\n    if (!force && typeof process !== \"undefined\" && process.env) {\r\n      if (track === MinecraftTrack.preview && process.env.MCT_TEST_PINNED_MC_PREVIEW_VERSION) {\r\n        Database.latestPreviewVersion = process.env.MCT_TEST_PINNED_MC_PREVIEW_VERSION;\r\n        return Database.latestPreviewVersion;\r\n      }\r\n\r\n      if (track === MinecraftTrack.main && process.env.MCT_TEST_PINNED_MC_VERSION) {\r\n        Database.latestVersion = process.env.MCT_TEST_PINNED_MC_VERSION;\r\n        return Database.latestVersion;\r\n      }\r\n    }\r\n\r\n    if (track === MinecraftTrack.preview && Database.latestPreviewVersion && !force) {\r\n      return Database.latestPreviewVersion;\r\n    }\r\n\r\n    if (track === MinecraftTrack.main && Database.latestVersion && !force) {\r\n      return Database.latestVersion;\r\n    }\r\n\r\n    let minecraftInfoResponse: any = undefined;\r\n\r\n    let versionUrl = \"https://raw.githubusercontent.com/Mojang/bedrock-samples/main/version.json\";\r\n\r\n    if (track === MinecraftTrack.preview) {\r\n      versionUrl = \"https://raw.githubusercontent.com/Mojang/bedrock-samples/preview/version.json\";\r\n    }\r\n\r\n    try {\r\n      minecraftInfoResponse = await axios.get(versionUrl);\r\n    } catch (e: any) {\r\n      if (e && (!e.message || !e.message.indexOf || e.message.indexOf(\"etwork \") < 0)) {\r\n        Log.debugAlert(\"Could not load version info from '\" + versionUrl + \"': \" + e.toString());\r\n      } else {\r\n        CreatorToolsHost.getCreatorTools()?.notifyStatusUpdate(\r\n          \"Could not connect to network to retrieve latest Minecraft version details. Url: \" + versionUrl\r\n        );\r\n      }\r\n\r\n      if (track === MinecraftTrack.preview) {\r\n        Database.latestPreviewVersion = Database.fallbackMinecraftPreviewVersion;\r\n        return Database.fallbackMinecraftPreviewVersion;\r\n      }\r\n\r\n      if (track === MinecraftTrack.main) {\r\n        Database.latestVersion = Database.fallbackMinecraftVersion;\r\n        return Database.fallbackMinecraftVersion;\r\n      }\r\n    }\r\n\r\n    let latestVersionIndex = 0;\r\n    let latestVerStr = \"\";\r\n    try {\r\n      if (minecraftInfoResponse === undefined || minecraftInfoResponse.data === undefined) {\r\n        throw new Error(\"Unexpected empty response.\");\r\n      }\r\n\r\n      const responseJson: IMainInfoVersions = JSON.parse(JSON.stringify(minecraftInfoResponse.data));\r\n\r\n      if (!responseJson) {\r\n        throw new Error(\"Improperly formatted response (source: \" + minecraftInfoResponse.data + \")\");\r\n      }\r\n\r\n      for (const verId in responseJson) {\r\n        const ver = responseJson[verId].version;\r\n\r\n        if (ver) {\r\n          const isPreview = Database.getVersionIsPreview(ver); // version ends with .20 or higher\r\n\r\n          const versionIndex = Database.getVersionIndexFromVersionStr(ver);\r\n\r\n          if (\r\n            versionIndex > 0 &&\r\n            versionIndex > latestVersionIndex &&\r\n            ((isPreview && track === MinecraftTrack.preview) || (!isPreview && track === MinecraftTrack.main))\r\n          ) {\r\n            latestVersionIndex = versionIndex;\r\n\r\n            // re-constitute the version number ourselves\r\n            const verNums = ver.split(\".\");\r\n\r\n            latestVerStr =\r\n              verNums[0] + \".\" + verNums[1] + \".\" + verNums[2] + \".\" + Utilities.frontPadToLength(verNums[3], 2, \"0\");\r\n          }\r\n        }\r\n      }\r\n    } catch (e: any) {\r\n      Log.error(\"Could not process Minecraft version details.\" + e);\r\n      throw new Error(e.toString());\r\n    }\r\n\r\n    if (latestVerStr && latestVerStr.length > 0) {\r\n      if (track === MinecraftTrack.preview) {\r\n        Database.latestPreviewVersion = latestVerStr;\r\n      } else {\r\n        Database.latestVersion = latestVerStr;\r\n      }\r\n    }\r\n\r\n    return latestVerStr;\r\n  }\r\n\r\n  static getVersionIsPreview(ver: string) {\r\n    const verNums = ver.split(\".\");\r\n\r\n    if (verNums.length !== 4) {\r\n      return false;\r\n    }\r\n\r\n    for (let j = 0; j < verNums.length; j++) {\r\n      if (!Utilities.isNumeric(verNums[j])) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return parseInt(verNums[3]) > 19;\r\n  }\r\n\r\n  static getVersionIndexFromVersionStr(ver: string) {\r\n    const verNums = ver.split(\".\");\r\n\r\n    if (verNums.length !== 4 && verNums.length !== 3) {\r\n      return -1;\r\n    }\r\n\r\n    for (let j = 0; j < verNums.length; j++) {\r\n      if (!Utilities.isNumeric(verNums[j])) {\r\n        return -1;\r\n      }\r\n    }\r\n\r\n    let versionIndex = parseInt(verNums[0]) * 16777216 + parseInt(verNums[1]) * 65536 + parseInt(verNums[2]) * 256;\r\n\r\n    if (verNums.length === 4) {\r\n      versionIndex += parseInt(verNums[3]);\r\n    }\r\n\r\n    return versionIndex;\r\n  }\r\n\r\n  static getBlockTypeByLegacyId(id: number) {\r\n    if (!this._blockTypesByLegacyId) {\r\n      this._blockTypesByLegacyId = [];\r\n      this.populateBlockTypesByLegacyId();\r\n    }\r\n\r\n    const result = this._blockTypesByLegacyId[id];\r\n    Log.assert(result !== undefined);\r\n    // Return undefined for unknown legacy IDs rather than asserting,\r\n    // as worlds may contain blocks with IDs not in our catalog\r\n    return result;\r\n  }\r\n\r\n  static getMatchingBlocks(searchTerm: string) {\r\n    searchTerm = searchTerm.toLowerCase().trim();\r\n    searchTerm = searchTerm.replace(/_/gi, \" \");\r\n\r\n    const searchTerms = searchTerm.split(\" \");\r\n\r\n    let exactMatch = undefined;\r\n\r\n    let matches = [];\r\n\r\n    for (const name in this.blockTypes) {\r\n      const bt = this.blockTypes[name];\r\n\r\n      const titleCanon = bt.title.toLowerCase();\r\n\r\n      if (titleCanon === searchTerm && exactMatch === undefined) {\r\n        exactMatch = bt;\r\n      } else {\r\n        for (let i = 0; i < searchTerms.length; i++) {\r\n          if (titleCanon.indexOf(searchTerms[i]) >= 0) {\r\n            matches.push(bt);\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (exactMatch !== undefined) {\r\n      const newMatches = [exactMatch];\r\n\r\n      for (let i = 0; i < matches.length; i++) {\r\n        newMatches.push(matches[i]);\r\n      }\r\n\r\n      matches = newMatches;\r\n    }\r\n\r\n    return matches;\r\n  }\r\n\r\n  static ensureBlockType(name: string) {\r\n    name = MinecraftUtilities.canonicalizeName(name);\r\n\r\n    let blockType = Database.blockTypes[name];\r\n\r\n    if (blockType == null && Database.vanillaCatalog != null) {\r\n      blockType = new BlockType(name);\r\n\r\n      Database.blockTypes[name] = blockType;\r\n    }\r\n\r\n    return blockType;\r\n  }\r\n\r\n  static ensureBlockBaseType(name: string) {\r\n    name = MinecraftUtilities.canonicalizeName(name);\r\n\r\n    let blockBaseType = Database.blockBaseTypes[name];\r\n\r\n    if (blockBaseType == null) {\r\n      blockBaseType = new BlockBaseType(name);\r\n\r\n      Database.blockBaseTypes[name] = blockBaseType;\r\n    }\r\n\r\n    return blockBaseType;\r\n  }\r\n\r\n  static async loadContentSources() {\r\n    if (Database.isContentSourcesLoaded) {\r\n      return Database.contentSources;\r\n    }\r\n    Database.contentSources = [...Database.defaultContentSources];\r\n\r\n    if (AppServiceProxy.hasAppService) {\r\n      const contentSources = await AppServiceProxy.sendAsync(AppServiceProxyCommands.getContentSources, \"\");\r\n\r\n      if (contentSources) {\r\n        const contentSourcesO = JSON.parse(contentSources) as IContentSource[] | undefined;\r\n\r\n        if (contentSourcesO && Array.isArray(contentSourcesO)) {\r\n          Database.contentSources.push(...contentSourcesO);\r\n        }\r\n      }\r\n    }\r\n\r\n    Database.isContentSourcesLoaded = true;\r\n\r\n    return Database.contentSources;\r\n  }\r\n\r\n  static async loadContent() {\r\n    if (Database.contentFolder !== null) {\r\n      return;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.contentWebRoot)) {\r\n      const storage = Database.local.createStorage(\"data/content/\");\r\n\r\n      if (storage) {\r\n        if (!storage.rootFolder.isLoaded) {\r\n          await storage.rootFolder.load();\r\n        }\r\n\r\n        Database.contentFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.contentWebRoot + \"data/content/\");\r\n\r\n      if (!storage.rootFolder.isLoaded) {\r\n        await storage.rootFolder.load();\r\n      }\r\n\r\n      Database.contentFolder = storage.rootFolder;\r\n    }\r\n  }\r\n\r\n  static async initSnippetsFolder(): Promise<void> {\r\n    if (Database.snippetsFolder !== null) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoadingSnippets) {\r\n      const pendingLoad = this._pendingLoadSnippetsRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n\r\n      return;\r\n    } else {\r\n      this._isLoadingSnippets = true;\r\n\r\n      let folder: IFolder | undefined;\r\n\r\n      if (\r\n        Database.local &&\r\n        (CreatorToolsHost.fullLocalStorage ||\r\n          !CreatorToolsHost.contentWebRoot ||\r\n          !CreatorToolsHost.retrieveDataFromWebContentRoot)\r\n      ) {\r\n        const storage = Database.local.createStorage(\"data/snippets/\");\r\n\r\n        if (storage) {\r\n          folder = storage.rootFolder;\r\n        }\r\n      } else {\r\n        const storage = HttpStorage.get(CreatorToolsHost.contentWebRoot + \"data/snippets/\");\r\n\r\n        folder = storage.rootFolder;\r\n      }\r\n\r\n      if (folder === undefined) {\r\n        return;\r\n      }\r\n\r\n      if (!folder.isLoaded) {\r\n        await folder.load();\r\n      }\r\n\r\n      for (const fileName in folder.files) {\r\n        const file = folder.files[fileName];\r\n\r\n        if (file && !file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n      }\r\n\r\n      Database.snippetsFolder = folder;\r\n\r\n      this._isLoadingSnippets = false;\r\n\r\n      const pendingLoad = this._pendingLoadSnippetsRequests;\r\n      this._pendingLoadSnippetsRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  public static itemMatchesSearch(item: IGalleryItem, searchString?: string) {\r\n    if (!searchString || searchString.length < 3) {\r\n      return true;\r\n    }\r\n\r\n    const searchKey = searchString.toLowerCase();\r\n\r\n    if (\r\n      (item.title && item.title.toLowerCase().indexOf(searchKey) >= 0) ||\r\n      (item.description && item.description.toLowerCase().indexOf(searchKey) >= 0)\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    if (item.topics) {\r\n      for (const topic of item.topics) {\r\n        if (topic.toLowerCase().indexOf(searchKey) >= 0) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async getSnippet(sampleSet: string, snippetId: string) {\r\n    if (!Database.snippetsFolder) {\r\n      await Database.initSnippetsFolder();\r\n    }\r\n\r\n    if (!Database.snippetsFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    if (Database.snippetsFolder !== null && Database.snippetsFolder.files) {\r\n      const file = Database.snippetsFolder.files[sampleSet + \".json\"];\r\n\r\n      if (file) {\r\n        const snipSet = StorageUtilities.getJsonObject(file) as { [snippetName: string]: ISnippet };\r\n\r\n        if (snipSet && snipSet[snippetId]) {\r\n          return snipSet[snippetId];\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getAddonsDocs() {\r\n    if (!Database.addonsDocs) {\r\n      Database.addonsDocs = await Database.getMetadataObject(\"/doc_modules/addons.json\");\r\n    }\r\n\r\n    return Database.addonsDocs;\r\n  }\r\n\r\n  static async getBiomesMetadata() {\r\n    if (!Database.biomesMetadata) {\r\n      Database.biomesMetadata = await Database.getMetadataObject(\"/vanilladata_modules/mojang-biomes.json\");\r\n    }\r\n\r\n    return Database.biomesMetadata;\r\n  }\r\n\r\n  static async getBlocksMetadata() {\r\n    if (!Database.blocksMetadata) {\r\n      Database.blocksMetadata = await Database.getMetadataObject(\"/vanilladata_modules/mojang-blocks.json\");\r\n    }\r\n\r\n    return Database.blocksMetadata;\r\n  }\r\n\r\n  static async getEntitiesMetadata() {\r\n    if (!Database.entitiesMetadata) {\r\n      Database.entitiesMetadata = await Database.getMetadataObject(\"/vanilladata_modules/mojang-entities.json\");\r\n    }\r\n\r\n    return Database.entitiesMetadata;\r\n  }\r\n\r\n  static async getItemsMetadata() {\r\n    if (!Database.itemsMetadata) {\r\n      Database.itemsMetadata = await Database.getMetadataObject(\"/vanilladata_modules/mojang-items.json\");\r\n    }\r\n\r\n    return Database.itemsMetadata;\r\n  }\r\n\r\n  static async getCommandsMetadata(): Promise<IDocCommandSet | null> {\r\n    if (!Database.commandsMetadata) {\r\n      Database.commandsMetadata = await Database.getMetadataObject(\"/command_modules/mojang-commands.json\");\r\n    }\r\n\r\n    return Database.commandsMetadata;\r\n  }\r\n\r\n  static async getMetadataObject(metaPath: string) {\r\n    await Database.loadPreviewMetadataFolder();\r\n\r\n    if (!Database.previewMetadataFolder) {\r\n      return null;\r\n    }\r\n\r\n    const jsonFile = await Database.previewMetadataFolder.getFileFromRelativePath(metaPath);\r\n\r\n    if (!jsonFile) {\r\n      Log.debug(\"Could not find metadata file: \" + metaPath);\r\n      return null;\r\n    }\r\n\r\n    if (!jsonFile.isContentLoaded) {\r\n      await jsonFile.loadContent();\r\n    }\r\n\r\n    const jsonObj = StorageUtilities.getJsonObject(jsonFile);\r\n\r\n    if (!jsonObj) {\r\n      Log.debug(\"Could not parse metadata file: \" + metaPath);\r\n      return null;\r\n    }\r\n\r\n    return jsonObj;\r\n  }\r\n\r\n  static async getPreviewVanillaFile(filePath: string) {\r\n    const vanillaFolder = await Database.getPreviewVanillaFolder();\r\n\r\n    if (!vanillaFolder) {\r\n      return null;\r\n    }\r\n\r\n    const jsonFile = await vanillaFolder.getFileFromRelativePath(filePath);\r\n\r\n    if (!jsonFile) {\r\n      // File not found is expected for custom (non-vanilla) entities\r\n      // Callers should handle null gracefully\r\n      return null;\r\n    }\r\n\r\n    if (!jsonFile.isContentLoaded) {\r\n      await jsonFile.loadContent();\r\n    }\r\n\r\n    return jsonFile;\r\n  }\r\n\r\n  static async getPreviewVanillaObject(filePath: string) {\r\n    const jsonFile = await Database.getPreviewVanillaFile(filePath);\r\n\r\n    if (!jsonFile) {\r\n      Log.unexpectedUndefined(\"GPVO\" + filePath);\r\n      return null;\r\n    }\r\n\r\n    const jsonObj = StorageUtilities.getJsonObject(jsonFile);\r\n\r\n    if (!jsonObj) {\r\n      Log.unexpectedUndefined(\"GPVA\" + filePath);\r\n      return null;\r\n    }\r\n\r\n    return jsonObj;\r\n  }\r\n\r\n  static async loadPreviewMetadataFolder() {\r\n    if (!this.previewMetadataFolder) {\r\n      if (\r\n        Database.local &&\r\n        (CreatorToolsHost.fullLocalStorage ||\r\n          !CreatorToolsHost.getVanillaContentRoot() ||\r\n          !CreatorToolsHost.retrieveDataFromWebContentRoot)\r\n      ) {\r\n        const storage = Database.local.createStorage(\"res/latest/van/preview/metadata/\");\r\n\r\n        if (storage) {\r\n          this.previewMetadataFolder = storage.rootFolder;\r\n        }\r\n      } else {\r\n        const metadataStorage = HttpStorage.get(\r\n          CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/preview/metadata/\"\r\n        );\r\n\r\n        if (!metadataStorage.rootFolder.isLoaded) {\r\n          await metadataStorage.rootFolder.load();\r\n        }\r\n\r\n        this.previewMetadataFolder = metadataStorage.rootFolder;\r\n      }\r\n    }\r\n\r\n    return this.previewMetadataFolder;\r\n  }\r\n\r\n  static async loadReleaseMetadataFolder() {\r\n    if (!this.releaseMetadataFolder) {\r\n      if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n        const storage = Database.local.createStorage(\"res/latest/van/release/metadata/\");\r\n\r\n        if (storage) {\r\n          this.releaseMetadataFolder = storage.rootFolder;\r\n        }\r\n      } else {\r\n        const metadataStorage = HttpStorage.get(\r\n          CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/release/metadata/\"\r\n        );\r\n\r\n        await metadataStorage.rootFolder.load();\r\n\r\n        this.releaseMetadataFolder = metadataStorage.rootFolder;\r\n      }\r\n    }\r\n\r\n    return this.releaseMetadataFolder;\r\n  }\r\n\r\n  static async getReleaseVanillaFolder() {\r\n    if (Database.releaseVanillaFolder !== null) {\r\n      return Database.releaseVanillaFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/latest/van/release/\");\r\n\r\n      if (storage) {\r\n        Database.releaseVanillaFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/release/\");\r\n\r\n      Database.releaseVanillaFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.releaseVanillaFolder && !Database.releaseVanillaFolder.isLoaded) {\r\n      await Database.releaseVanillaFolder.load();\r\n    }\r\n\r\n    return Database.releaseVanillaFolder;\r\n  }\r\n\r\n  static async getPreviewVanillaFolder() {\r\n    if (Database.previewVanillaFolder !== null) {\r\n      return Database.previewVanillaFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/latest/van/preview/\");\r\n\r\n      if (storage) {\r\n        Database.previewVanillaFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/preview/\");\r\n\r\n      Database.previewVanillaFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.previewVanillaFolder && !Database.previewVanillaFolder.isLoaded) {\r\n      await Database.previewVanillaFolder.load();\r\n    }\r\n\r\n    return Database.previewVanillaFolder;\r\n  }\r\n\r\n  static async getServeVanillaFolder() {\r\n    if (Database.serveVanillaFolder !== null) {\r\n      return Database.serveVanillaFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/latest/van/serve/\");\r\n\r\n      if (storage) {\r\n        Database.serveVanillaFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/serve/\");\r\n\r\n      Database.serveVanillaFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.serveVanillaFolder && !Database.serveVanillaFolder.isLoaded) {\r\n      await Database.serveVanillaFolder.load();\r\n    }\r\n\r\n    return Database.serveVanillaFolder;\r\n  }\r\n\r\n  static async getSamplesFolder() {\r\n    if (Database.samplesFolder !== null) {\r\n      return Database.samplesFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/samples/microsoft/samples/\");\r\n\r\n      if (storage) {\r\n        Database.samplesFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.getVanillaContentRoot() + \"res/samples/microsoft/samples/\");\r\n\r\n      Database.samplesFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.samplesFolder) {\r\n      await Database.samplesFolder.load();\r\n    }\r\n\r\n    return Database.samplesFolder;\r\n  }\r\n\r\n  static async getReleaseVanillaBehaviorPackFolder() {\r\n    if (Database.releaseVanillaBehaviorPackFolder !== null) {\r\n      return Database.releaseVanillaBehaviorPackFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/latest/van/release/behavior_pack/\");\r\n\r\n      if (storage) {\r\n        Database.releaseVanillaBehaviorPackFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(\r\n        CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/release/behavior_pack/\"\r\n      );\r\n\r\n      Database.releaseVanillaBehaviorPackFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.releaseVanillaBehaviorPackFolder) {\r\n      await Database.releaseVanillaBehaviorPackFolder.load();\r\n    }\r\n\r\n    return Database.releaseVanillaBehaviorPackFolder;\r\n  }\r\n\r\n  static async getReleaseVanillaResourcePackFolder() {\r\n    if (Database.releaseVanillaResourcePackFolder !== null) {\r\n      return Database.releaseVanillaResourcePackFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/latest/van/release/resource_pack/\");\r\n\r\n      if (storage) {\r\n        Database.releaseVanillaResourcePackFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(\r\n        CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/release/resource_pack/\"\r\n      );\r\n\r\n      Database.releaseVanillaResourcePackFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.releaseVanillaResourcePackFolder) {\r\n      await Database.releaseVanillaResourcePackFolder.load();\r\n    }\r\n\r\n    return Database.releaseVanillaResourcePackFolder;\r\n  }\r\n\r\n  static async loadUx() {}\r\n\r\n  static getComponentFormField(propertyName: string): IFormField | undefined {\r\n    if (Database.uxCatalog === undefined || Database.uxCatalog === null) {\r\n      Log.unexpectedNull();\r\n\r\n      return undefined;\r\n    }\r\n    const componentForms = Database.uxCatalog;\r\n\r\n    for (const formName in componentForms) {\r\n      const form = componentForms[formName];\r\n\r\n      if (form === undefined) {\r\n        break;\r\n      }\r\n\r\n      for (let i = 0; i < form.fields.length; i++) {\r\n        const field = form.fields[i];\r\n\r\n        if (field.id === propertyName || field.altId === propertyName) {\r\n          return {\r\n            form: form,\r\n            field: field,\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getCommunitySchema(path: string) {\r\n    path = path.toLowerCase();\r\n\r\n    if (Database.schemaContents[path]) {\r\n      return Database.schemaContents[path];\r\n    }\r\n\r\n    const schemaPath = \"/\" + Database.dataPath + \"schemas/\" + path;\r\n\r\n    try {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const response = await axios.get(\r\n          Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) +\r\n            Utilities.ensureNotStartsWithSlash(schemaPath)\r\n        );\r\n\r\n        Database.schemaContents[path] = response.data as object;\r\n\r\n        if (!Database.schemaContents[path]) {\r\n          Log.fail(\"Could not load schema '\" + schemaPath + \"'\");\r\n        }\r\n        return Database.schemaContents[path];\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(schemaPath);\r\n\r\n        if (result !== null) {\r\n          Database.schemaContents[path] = result as object;\r\n          return Database.schemaContents[path];\r\n        } else {\r\n          Log.fail(\"Could not load schema '\" + schemaPath + \"'\");\r\n          return undefined;\r\n        }\r\n      } else {\r\n        Log.fail(\"Unexpected database config (no database available) when trying to load schema for:\" + path);\r\n        return undefined;\r\n      }\r\n    } catch (e: any) {\r\n      Log.fail(\r\n        \"Could not load Minecraft schema catalog: \" +\r\n          CreatorToolsHost.contentWebRoot +\r\n          \" - \" +\r\n          schemaPath +\r\n          \" \" +\r\n          e.toString()\r\n      );\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get a schema from the official schemas folder (public/schemas) rather than\r\n   * the community schemas folder (public/res/latest/schemas).\r\n   */\r\n  static async getOfficialSchema(path: string): Promise<object | undefined> {\r\n    path = path.toLowerCase();\r\n\r\n    if (Database.officialSchemaContents[path]) {\r\n      return Database.officialSchemaContents[path];\r\n    }\r\n\r\n    const schemaPath = \"/schemas/\" + path;\r\n\r\n    try {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const response = await axios.get(\r\n          Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) +\r\n            Utilities.ensureNotStartsWithSlash(schemaPath)\r\n        );\r\n\r\n        Database.officialSchemaContents[path] = response.data as object;\r\n\r\n        if (!Database.officialSchemaContents[path]) {\r\n          Log.verbose(\"Could not load official schema '\" + schemaPath + \"'\");\r\n        }\r\n        return Database.officialSchemaContents[path];\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(schemaPath);\r\n\r\n        if (result !== null) {\r\n          Database.officialSchemaContents[path] = result as object;\r\n          return Database.officialSchemaContents[path];\r\n        } else {\r\n          Log.verbose(\"Could not load official schema '\" + schemaPath + \"'\");\r\n          return undefined;\r\n        }\r\n      } else {\r\n        Log.verbose(\"Unexpected database config (no database available) when trying to load schema for:\" + path);\r\n        return undefined;\r\n      }\r\n    } catch (e: any) {\r\n      // Schema not found is expected for many file types - don't log as error\r\n      Log.verbose(\"Could not load official schema: \" + schemaPath);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  static async loadStable20ScriptTypes() {\r\n    if (Database.stable20TypeDefs) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Check for browser-like environment (works in both main thread and web workers)\r\n\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const url = CreatorToolsHost.contentWebRoot + \"data/typedefs.stable20.json\";\r\n\r\n        const response = await axios.get(url);\r\n\r\n        // Check if we got HTML instead of JSON (can happen if contentRoot is wrong)\r\n        if (typeof response.data === \"string\" && response.data.includes(\"<!DOCTYPE\")) {\r\n          throw new Error(\"Received HTML instead of JSON - check contentRoot: \" + CreatorToolsHost.contentWebRoot);\r\n        }\r\n\r\n        Database.stable20TypeDefs = response.data;\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(\"data/typedefs.stable20.json\");\r\n        if (result !== null) {\r\n          Database.stable20TypeDefs = result as ITypeDefCatalog;\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.fail(\"Could not load stable 2.0 Minecraft types catalog: \" + e);\r\n    }\r\n  }\r\n\r\n  static async loadStable10ScriptTypes() {\r\n    if (Database.stable10TypeDefs) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/typedefs.stable10.json\");\r\n\r\n        Database.stable10TypeDefs = response.data;\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(\"data/typedefs.stable10.json\");\r\n        if (result !== null) {\r\n          Database.stable10TypeDefs = result as ITypeDefCatalog;\r\n        }\r\n      }\r\n    } catch {\r\n      Log.fail(\"Could not load stable 1.0 Minecraft types catalog.\");\r\n    }\r\n  }\r\n\r\n  static async getLibs() {\r\n    if (Database.libs) {\r\n      return Database.libs;\r\n    }\r\n\r\n    try {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/libs.json\");\r\n\r\n        Database.libs = response.data;\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(\"data/libs.json\");\r\n        if (result !== null) {\r\n          Database.libs = result as ITypeDefCatalog;\r\n        }\r\n      }\r\n    } catch {\r\n      Log.fail(\"Could not load libraries catalog.\");\r\n    }\r\n\r\n    return Database.libs;\r\n  }\r\n\r\n  static async matchesVanillaPath(path: string) {\r\n    Log.assert(typeof path === \"string\");\r\n\r\n    const rpFolder = await Database.getReleaseVanillaResourcePackFolder();\r\n\r\n    if (rpFolder && rpFolder.folderCount > 0) {\r\n      path = Utilities.ensureStartsWithSlash(path);\r\n\r\n      const folder = await rpFolder.getFolderFromRelativePath(StorageUtilities.getFolderPath(path));\r\n\r\n      if (!folder) {\r\n        return false;\r\n      }\r\n\r\n      const exists = await folder.exists();\r\n\r\n      if (!exists) {\r\n        return false;\r\n      }\r\n\r\n      const itemName = StorageUtilities.getBaseFromName(StorageUtilities.getLeafName(path)).toLowerCase();\r\n\r\n      if (!folder.isLoaded) {\r\n        await folder.load();\r\n      }\r\n\r\n      for (let fileName in folder.files) {\r\n        if (fileName && StorageUtilities.getBaseFromName(fileName).toLowerCase() === itemName) {\r\n          return true;\r\n        }\r\n      }\r\n    } else {\r\n      let res = await Database.matchesVanillaPathFromIndex(path);\r\n\r\n      return res;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async getVanillaPathList() {\r\n    if (!Database.vanillaContentIndex) {\r\n      await this.loadVanillaInfoData();\r\n    }\r\n\r\n    if (!Database.vanillaContentIndex) {\r\n      return undefined;\r\n    }\r\n\r\n    const paths = [];\r\n\r\n    for (const path of Database.vanillaContentIndex.items) {\r\n      if (path.startsWith(\"/\")) {\r\n        paths.push(path);\r\n      }\r\n    }\r\n\r\n    return paths;\r\n  }\r\n\r\n  static async matchesVanillaPathFromIndex(path: string) {\r\n    if (!Database.vanillaContentIndex) {\r\n      await this.loadVanillaInfoData();\r\n    }\r\n\r\n    if (!Database.vanillaContentIndex) {\r\n      return false;\r\n    }\r\n\r\n    let result = Database.vanillaContentIndex.hasPathMatches(path);\r\n\r\n    if (!result) {\r\n      result = await Database.isVanillaToken(path);\r\n    }\r\n\r\n    if (!result) {\r\n      path = Utilities.ensureStartsWithSlash(path);\r\n\r\n      if (!path.startsWith(\"/resource_pack/\")) {\r\n        result = Database.vanillaContentIndex.hasPathMatches(\"/resource_pack\" + path);\r\n\r\n        if (!result) {\r\n          result = await Database.isVanillaToken(\"/resource_pack\" + path);\r\n\r\n          if (!result) {\r\n            if (!path.startsWith(\"/behavior_pack/\")) {\r\n              result = Database.vanillaContentIndex.hasPathMatches(\"/behavior_pack\" + path);\r\n\r\n              if (!result) {\r\n                result = await Database.isVanillaToken(\"/behavior_pack\" + path);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  static async isVanillaToken(path: string) {\r\n    const matches = await Database.getVanillaMatches(path, true);\r\n\r\n    if (matches && matches.length > 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async getVanillaAll(withAnnotation?: AnnotationCategory[]) {\r\n    if (!Database.vanillaContentIndex) {\r\n      await this.loadVanillaInfoData();\r\n    }\r\n\r\n    if (!Database.vanillaContentIndex) {\r\n      return undefined;\r\n    }\r\n\r\n    return Database.vanillaContentIndex.getAll(withAnnotation);\r\n  }\r\n\r\n  static async getVanillaMatches(path: string, wholeTermSearch?: boolean, withAnnotation?: AnnotationCategory[]) {\r\n    if (!Database.vanillaContentIndex) {\r\n      await this.loadVanillaInfoData();\r\n    }\r\n\r\n    if (!Database.vanillaContentIndex) {\r\n      return undefined;\r\n    }\r\n\r\n    return await Database.vanillaContentIndex.getMatches(path, wholeTermSearch, withAnnotation);\r\n  }\r\n\r\n  static async getPreviewVanillaMatches(\r\n    path: string,\r\n    wholeTermSearch?: boolean,\r\n    withAnnotation?: AnnotationCategory[]\r\n  ) {\r\n    if (!Database.previewVanillaContentIndex) {\r\n      await this.loadPreviewVanillaInfoData();\r\n    }\r\n\r\n    if (!Database.previewVanillaContentIndex) {\r\n      return undefined;\r\n    }\r\n\r\n    return await Database.previewVanillaContentIndex.getMatches(path, wholeTermSearch, withAnnotation);\r\n  }\r\n\r\n  static async getSamplesMatches(path: string, wholeTermSearch?: boolean, withAnnotation?: AnnotationCategory[]) {\r\n    if (!Database.samplesContentIndex) {\r\n      await this.loadSampleInfoData();\r\n    }\r\n\r\n    if (!Database.samplesContentIndex) {\r\n      return undefined;\r\n    }\r\n\r\n    return await Database.samplesContentIndex.getMatches(path, wholeTermSearch, withAnnotation);\r\n  }\r\n\r\n  static async loadVanillaInfoData() {\r\n    if (Database.vanillaInfoData) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoadingVanillaInfoData) {\r\n      const pendingLoad = this._pendingLoadVanillaInfoDataRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isLoadingVanillaInfoData = true;\r\n\r\n      try {\r\n        // @ts-ignore\r\n        if (typeof window !== \"undefined\") {\r\n          const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/mci/release.mci.json.zip\", {\r\n            responseType: \"arraybuffer\",\r\n            headers: {\r\n              Accept: \"application/octet-stream, application/json, text/plain, */*\",\r\n            },\r\n          });\r\n\r\n          if (response) {\r\n            Database.vanillaInfoData = await ZipStorage.fromZipBytesToJsonObject(response.data);\r\n          }\r\n        } else if (Database.local) {\r\n          const result = await Database.local.readJsonFile(\"data/mci/release.mci.json\");\r\n          if (result !== null) {\r\n            Database.vanillaInfoData = result as IProjectInfoData;\r\n          }\r\n        }\r\n\r\n        if (Database.vanillaInfoData && Database.vanillaInfoData.index && !Database.vanillaContentIndex) {\r\n          Database.vanillaContentIndex = new ContentIndex();\r\n          Database.vanillaContentIndex.loadFromData(Database.vanillaInfoData.index);\r\n        }\r\n      } catch (e) {\r\n        Log.debug(\"Could not load vanilla metadata: \" + e);\r\n      }\r\n\r\n      this._isLoadingVanillaInfoData = false;\r\n\r\n      const pendingLoad = this._pendingLoadVanillaInfoDataRequests;\r\n      this._pendingLoadVanillaInfoDataRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async loadVanillaResourceDefinitions() {\r\n    if (this._isLoadingVanillaResourceDefinition) {\r\n      const pendingLoad = this._pendingLoadVanillaResourceDefinitionRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isLoadingVanillaResourceDefinition = true;\r\n\r\n      const folder = await Database.getReleaseVanillaResourcePackFolder();\r\n\r\n      if (folder) {\r\n        const terrainTextureFile = await folder.getFileFromRelativePath(\"/textures/terrain_texture.json\");\r\n        const blocksFile = await folder.getFileFromRelativePath(\"/blocks.json\");\r\n\r\n        if (terrainTextureFile && blocksFile) {\r\n          this.terrainTextureCatalog = await TerrainTextureCatalogDefinition.ensureOnFile(terrainTextureFile);\r\n          this.blocksCatalog = await BlocksCatalogDefinition.ensureOnFile(blocksFile);\r\n        }\r\n      }\r\n\r\n      this._isLoadingVanillaResourceDefinition = false;\r\n\r\n      const pendingLoad = this._pendingLoadVanillaResourceDefinitionRequests;\r\n      this._pendingLoadVanillaResourceDefinitionRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async loadPreviewVanillaInfoData() {\r\n    if (Database.previewVanillaContentIndex) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoadingPreviewVanillaInfoData) {\r\n      const pendingLoad = this._pendingLoadPreviewVanillaInfoDataRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isLoadingPreviewVanillaInfoData = true;\r\n\r\n      try {\r\n        // @ts-ignore\r\n        if (typeof window !== \"undefined\") {\r\n          const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/mci/preview.mci.json.zip\", {\r\n            responseType: \"arraybuffer\",\r\n            headers: {\r\n              Accept: \"application/octet-stream, application/json, text/plain, */*\",\r\n            },\r\n          });\r\n\r\n          if (response) {\r\n            Database.previewVanillaInfoData = await ZipStorage.fromZipBytesToJsonObject(response.data);\r\n          }\r\n        } else if (Database.local) {\r\n          const result = await Database.local.readJsonFile(\"data/mci/preview.mci.json\");\r\n          if (result !== null) {\r\n            Database.previewVanillaInfoData = result as IProjectInfoData;\r\n          }\r\n        }\r\n\r\n        if (\r\n          Database.previewVanillaInfoData &&\r\n          Database.previewVanillaInfoData.index &&\r\n          !Database.previewVanillaContentIndex\r\n        ) {\r\n          Database.previewVanillaContentIndex = new ContentIndex();\r\n          Database.previewVanillaContentIndex.loadFromData(Database.previewVanillaInfoData.index);\r\n        }\r\n      } catch (e: any) {\r\n        Log.fail(\"Could not load preview vanilla metadata.\" + e.toString());\r\n      }\r\n\r\n      this._isLoadingPreviewVanillaInfoData = false;\r\n\r\n      const pendingLoad = this._pendingLoadPreviewVanillaInfoDataRequests;\r\n      this._pendingLoadPreviewVanillaInfoDataRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async loadReleaseVanillaInfoHashes() {\r\n    if (Database.releaseVanillaContentHashes) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoadingReleaseVanillaHashes) {\r\n      const pendingLoad = this._pendingLoadReleaseVanillaHashRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isLoadingReleaseVanillaHashes = true;\r\n\r\n      try {\r\n        // @ts-ignore\r\n        if (typeof window !== \"undefined\") {\r\n          const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/mch/release.mch.json\");\r\n\r\n          if (response) {\r\n            Database.releaseVanillaContentHashes = response.data;\r\n          }\r\n        } else if (Database.local) {\r\n          const result = await Database.local.readJsonFile(\"data/mch/preview.mch.json\");\r\n          if (result !== null) {\r\n            Database.releaseVanillaContentHashes = result as HashCatalog;\r\n          }\r\n        }\r\n      } catch {\r\n        // Log.fail(\"Could not load preview vanilla metadata.\");\r\n      }\r\n\r\n      this._isLoadingReleaseVanillaHashes = false;\r\n\r\n      const pendingLoad = this._pendingLoadReleaseVanillaHashRequests;\r\n      this._pendingLoadReleaseVanillaHashRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async loadSampleInfoData() {\r\n    if (Database.samplesContentIndex) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoadingSamples) {\r\n      const pendingLoad = this._pendingLoadSamplesRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isLoadingSamples = true;\r\n\r\n      try {\r\n        // @ts-ignore\r\n        if (typeof window !== \"undefined\") {\r\n          const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/mci/samples.mci.json\");\r\n\r\n          Database.samplesInfoData = response.data;\r\n        } else if (Database.local) {\r\n          const result = await Database.local.readJsonFile(\"data/mci/samples.mci.json\");\r\n\r\n          if (result !== null) {\r\n            Database.samplesInfoData = result as IProjectInfoData;\r\n          }\r\n        }\r\n\r\n        if (Database.samplesInfoData && Database.samplesInfoData.index && !Database.samplesContentIndex) {\r\n          Database.samplesContentIndex = new ContentIndex();\r\n          Database.samplesContentIndex.loadFromData(Database.samplesInfoData.index);\r\n        }\r\n      } catch {\r\n        // Log.fail(\"Could not load preview vanilla metadata.\");\r\n      }\r\n\r\n      this._isLoadingSamples = false;\r\n\r\n      const pendingLoad = this._pendingLoadSamplesRequests;\r\n      this._pendingLoadSamplesRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async loadVanillaCatalog() {\r\n    if (Database.isVanillaLoaded) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Check for browser-like environment (works in both main thread and web workers)\r\n\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const url = CreatorToolsHost.contentWebRoot + \"data/mccat.json\";\r\n\r\n        const response = await axios.get(url);\r\n\r\n        // Check if we got HTML instead of JSON (can happen if contentRoot is wrong)\r\n        if (typeof response.data === \"string\" && response.data.includes(\"<!DOCTYPE\")) {\r\n          throw new Error(\"Received HTML instead of JSON - check contentRoot: \" + CreatorToolsHost.contentWebRoot);\r\n        }\r\n\r\n        Database.vanillaCatalog = response.data;\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(\"data/mccat.json\");\r\n        if (result !== null) {\r\n          Database.vanillaCatalog = result as Catalog;\r\n          // Log.debugAlert(\"Loaded catalog: \" + Database.catalog.blockBaseTypes.length);\r\n        }\r\n      }\r\n\r\n      if (Database.vanillaCatalog !== null) {\r\n        Database.normalizeCatalog(Database.vanillaCatalog);\r\n\r\n        for (let i = 0; i < Database.vanillaCatalog.blockBaseTypes.length; i++) {\r\n          const blockBaseTypeData = Database.vanillaCatalog.blockBaseTypes[i];\r\n\r\n          if (!blockBaseTypeData.n) {\r\n            Log.debug(\r\n              \"Skipping blockBaseType at index \" +\r\n                i +\r\n                \" with missing name. Data: \" +\r\n                JSON.stringify(blockBaseTypeData).substring(0, 200)\r\n            );\r\n            continue; // Skip entries without a name\r\n          }\r\n\r\n          const baseTypeName = MinecraftUtilities.canonicalizeName(blockBaseTypeData.n);\r\n\r\n          const blockBaseType = new BlockBaseType(baseTypeName);\r\n          blockBaseType.data = blockBaseTypeData;\r\n\r\n          if (blockBaseTypeData.abstract === undefined || blockBaseTypeData.abstract === false) {\r\n            const newBlockType: IBlockTypeData = {\r\n              n: blockBaseTypeData.n,\r\n              lid: blockBaseTypeData.id,\r\n              ic: blockBaseTypeData.ic,\r\n              mc: blockBaseTypeData.mc,\r\n              m: blockBaseTypeData.m,\r\n            };\r\n\r\n            const blockType = this.ensureBlockType(baseTypeName);\r\n            blockType.data = newBlockType;\r\n            blockType.baseType = blockBaseType;\r\n          }\r\n\r\n          if (blockBaseTypeData.variants !== undefined) {\r\n            for (let j = 0; j < blockBaseTypeData.variants.length; j++) {\r\n              const variantBlockTypeData = blockBaseTypeData.variants[j];\r\n\r\n              let name = variantBlockTypeData.n;\r\n\r\n              if (!name) {\r\n                Log.debug(\r\n                  \"Skipping variant at index \" +\r\n                    j +\r\n                    \" of blockBaseType '\" +\r\n                    blockBaseTypeData.n +\r\n                    \"' with missing name. Data: \" +\r\n                    JSON.stringify(variantBlockTypeData).substring(0, 200)\r\n                );\r\n                continue; // Skip variants without a name\r\n              }\r\n\r\n              if (name.endsWith(\"_\")) {\r\n                name = name + (blockBaseTypeData.n || \"\");\r\n              }\r\n\r\n              const blockType = this.ensureBlockType(name);\r\n\r\n              // Check if this block type already has a proper baseType with shape data\r\n              // (i.e., it was created from a specific standalone entry like oak_stairs with sh:2)\r\n              const existingShape = blockType.baseType?.shape;\r\n              const hasSpecificBaseType = existingShape !== undefined && existingShape !== BlockShape.custom;\r\n\r\n              if (hasSpecificBaseType) {\r\n                // The block already has good shape data from a specific entry, skip this variant\r\n                continue;\r\n              }\r\n\r\n              // Apply variant data\r\n              if (!variantBlockTypeData.lid && blockBaseTypeData.id) {\r\n                variantBlockTypeData.lid = blockBaseTypeData.id;\r\n              }\r\n\r\n              if (!variantBlockTypeData.ic && blockBaseTypeData.ic) {\r\n                variantBlockTypeData.ic = blockBaseTypeData.ic;\r\n              }\r\n\r\n              if (!variantBlockTypeData.mc && blockBaseTypeData.mc) {\r\n                variantBlockTypeData.mc = blockBaseTypeData.mc;\r\n              }\r\n\r\n              blockType.data = variantBlockTypeData;\r\n              blockType.baseType = blockBaseType;\r\n            }\r\n          }\r\n        }\r\n\r\n        await Database.extendCatalog();\r\n\r\n        Database.isVanillaLoaded = true;\r\n      }\r\n    } catch (e) {\r\n      Log.fail(\"Could not load Minecraft types catalog. \" + e);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Normalizes a catalog from the old unabbreviated format (name, icon, mapColor, shape)\r\n   * to the current abbreviated format (n, ic, mc, sh). This allows loading catalogs\r\n   * produced by older tooling or external repos that haven't migrated yet.\r\n   */\r\n  private static normalizeCatalog(catalog: Catalog) {\r\n    for (const entry of catalog.blockBaseTypes) {\r\n      const e = entry as any;\r\n\r\n      if (!entry.n && e.name) {\r\n        entry.n = e.name;\r\n      }\r\n      if (!entry.ic && e.icon) {\r\n        entry.ic = e.icon;\r\n      }\r\n      if (!entry.mc && e.mapColor) {\r\n        entry.mc = e.mapColor;\r\n      }\r\n      if (entry.sh === undefined && e.shape !== undefined) {\r\n        entry.sh = e.shape;\r\n      }\r\n      if (!entry.t && e.title) {\r\n        entry.t = e.title;\r\n      }\r\n\r\n      if (entry.variants) {\r\n        for (const variant of entry.variants) {\r\n          const v = variant as any;\r\n\r\n          if (!variant.n && v.name) {\r\n            variant.n = v.name;\r\n          }\r\n          if (!variant.ic && v.icon) {\r\n            variant.ic = v.icon;\r\n          }\r\n          if (!variant.mc && v.mapColor) {\r\n            variant.mc = v.mapColor;\r\n          }\r\n          if (variant.lid === undefined && v.id !== undefined) {\r\n            variant.lid = v.id;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private static async extendCatalog() {\r\n    const blockMetatadata = await Database.getBlocksMetadata();\r\n\r\n    if (blockMetatadata && Database.vanillaCatalog) {\r\n      for (const blockMetaDef of blockMetatadata.data_items) {\r\n        const blockType = this.ensureBlockType(blockMetaDef.name);\r\n\r\n        if (blockType && blockMetaDef) {\r\n          if (blockMetaDef.raw_id !== undefined && blockType.numericId === undefined) {\r\n            blockType.numericId = blockMetaDef.raw_id;\r\n          }\r\n\r\n          if (blockMetaDef.properties) {\r\n            for (const prop of blockMetaDef.properties) {\r\n              let propName = prop.name;\r\n              if (propName && blockMetatadata.block_properties) {\r\n                for (const propDef of blockMetatadata.block_properties) {\r\n                  if (propDef.name === propName) {\r\n                    blockType.ensurePropertyDefinition(propName, propDef);\r\n                    break;\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IEntityTypeBehaviorPack from \"./IEntityTypeBehaviorPack\";\r\nimport IEntityTypeWrapper from \"./IEntityTypeWrapper\";\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IComponent from \"./IComponent\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport ScriptGen from \"../script/ScriptGen\";\r\nimport ManagedComponentGroup from \"./ManagedComponentGroup\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport IEventAction from \"./IEventAction\";\r\nimport IEventActionSet from \"./IEventActionSet\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport EntityTypeResourceDefinition from \"./EntityTypeResourceDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"./SpawnRulesBehaviorDefinition\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport IEventWrapper from \"./IEventWrapper\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IComponentGroup from \"./IComponentGroup\";\r\n\r\nexport enum EntityTypeComponentCategory {\r\n  attribute = 0,\r\n  complex = 1,\r\n  behavior = 2,\r\n  trigger = 3,\r\n}\r\n\r\nexport enum EntityTypeComponentExtendedCategory {\r\n  attribute = 0,\r\n  complex = 1,\r\n  movementComplex = 2,\r\n  combatAndHealthComplex = 3,\r\n  sensorComponents = 4,\r\n  trigger = 5,\r\n  behavior = 6,\r\n  movementBehavior = 7,\r\n  mobSpecificBehavior = 8,\r\n}\r\n\r\nexport const AttributeComponents: { [id: string]: string } = {\r\n  \"minecraft:body_rotation_blocked\": \"b\",\r\n  \"minecraft:can_climb\": \"b\",\r\n  \"minecraft:can_fly\": \"b\",\r\n  \"minecraft:can_power_jump\": \"b\",\r\n  \"minecraft:cannot_be_attacked\": \"b\",\r\n  \"minecraft:color\": \"s\",\r\n  \"minecraft:color2\": \"s\",\r\n  \"minecraft:default_look_angle\": \"f\",\r\n  \"minecraft:fire_immune\": \"b\",\r\n  \"minecraft:floats_in_liquid\": \"b\",\r\n  \"minecraft:flying_speed\": \"f\",\r\n  \"minecraft:friction_modifier\": \"f\",\r\n  \"minecraft:ground_offset\": \"f\",\r\n  \"minecraft:ignore_cannot_be_attacked\": \"b\",\r\n  \"minecraft:input_ground_controlled\": \"b\",\r\n  \"minecraft:is_baby\": \"b\",\r\n  \"minecraft:is_charged\": \"b\",\r\n  \"minecraft:is_chested\": \"b\",\r\n  \"minecraft:is_dyeable\": \"b\",\r\n  \"minecraft:is_hidden_when_invisible\": \"b\",\r\n  \"minecraft:is_ignited\": \"b\",\r\n  \"minecraft:is_illager_captain\": \"b\",\r\n  \"minecraft:is_pregnant\": \"b\",\r\n  \"minecraft:is_saddled\": \"b\",\r\n  \"minecraft:is_sheared\": \"b\",\r\n  \"minecraft:is_stackable\": \"b\",\r\n  \"minecraft:is_stunned\": \"b\",\r\n  \"minecraft:is_tamed\": \"b\",\r\n  \"minecraft:mark_variant\": \"i\",\r\n  \"minecraft:movement_sound_distance_offset\": \"f\",\r\n  \"minecraft:push_through\": \"f\",\r\n  \"minecraft:renders_when_invisible\": \"b\",\r\n  \"minecraft:scale\": \"f\",\r\n  \"minecraft:skin_id\": \"i\",\r\n  \"minecraft:sound_volume\": \"f\",\r\n  \"minecraft:type_family\": \"family\",\r\n  \"minecraft:variant\": \"i\",\r\n  \"minecraft:walk_animation_speed\": \"f\",\r\n  \"minecraft:wants_jockey\": \"b\",\r\n};\r\n\r\nexport enum EntityPropertyType {\r\n  enum = 0,\r\n  boolean = 1,\r\n  float = 2,\r\n  int = 3,\r\n}\r\n\r\nexport default class EntityTypeDefinition implements IManagedComponentSetItem, IDefinition {\r\n  private _wrapper?: IEntityTypeWrapper;\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n  /** Set during persist() so the resulting onFileContentUpdated event doesn't wipe our already-current in-memory state. */\r\n  private _isSelfPersisting: boolean = false;\r\n\r\n  private _managedComponents: { [id: string]: IManagedComponent | undefined } = {};\r\n\r\n  public _data?: IEntityTypeBehaviorPack;\r\n\r\n  public _componentGroups: { [name: string]: ManagedComponentGroup } = {};\r\n  public _events: { [name: string]: IEventAction | IEventActionSet } = {};\r\n\r\n  private _onLoaded = new EventDispatcher<EntityTypeDefinition, EntityTypeDefinition>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<EntityTypeDefinition, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<EntityTypeDefinition, string>();\r\n  private _onComponentChanged = new EventDispatcher<EntityTypeDefinition, IManagedComponent>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get componentGroups() {\r\n    return this._componentGroups;\r\n  }\r\n\r\n  public static getFormIdFromComponentId(componentId: string) {\r\n    return componentId.replace(/:/gi, \"_\").replace(/\\./gi, \"_\");\r\n  }\r\n\r\n  public static getComponentCategory(id: string) {\r\n    if (id.startsWith(\"minecraft:behavior\")) {\r\n      return EntityTypeComponentCategory.behavior;\r\n    } else if (id.startsWith(\"minecraft:on_\")) {\r\n      return EntityTypeComponentCategory.trigger;\r\n    } else if (AttributeComponents[id] !== undefined) {\r\n      return EntityTypeComponentCategory.attribute;\r\n    }\r\n\r\n    return EntityTypeComponentCategory.complex;\r\n  }\r\n\r\n  public static getExtendedComponentCategory(id: string) {\r\n    if (\r\n      id.startsWith(\"minecraft:behavior.move\") ||\r\n      id.startsWith(\"minecraft:behavior.jump\") ||\r\n      id.startsWith(\"minecraft:behavior.go\") ||\r\n      id.startsWith(\"minecraft:behavior.follow\") ||\r\n      id.startsWith(\"minecraft:behavior.circle\")\r\n    ) {\r\n      return EntityTypeComponentExtendedCategory.movementBehavior;\r\n    } else if (\r\n      id.startsWith(\"minecraft:behavior.dragon\") ||\r\n      id.startsWith(\"minecraft:behavior.enderman\") ||\r\n      id.startsWith(\"minecraft:behavior.guardian\") ||\r\n      id.startsWith(\"minecraft:behavior.ocelot\") ||\r\n      id.startsWith(\"minecraft:behavior.silverfish\") ||\r\n      id.startsWith(\"minecraft:behavior.skeleton\") ||\r\n      id.startsWith(\"minecraft:behavior.slime\") ||\r\n      id.startsWith(\"minecraft:behavior.squid\") ||\r\n      id.startsWith(\"minecraft:behavior.vex\") ||\r\n      id.startsWith(\"minecraft:behavior.wither\")\r\n    ) {\r\n      return EntityTypeComponentExtendedCategory.mobSpecificBehavior;\r\n    } else if (id.startsWith(\"minecraft:behavior\")) {\r\n      return EntityTypeComponentExtendedCategory.behavior;\r\n    } else if (id.startsWith(\"minecraft:on_\")) {\r\n      return EntityTypeComponentExtendedCategory.trigger;\r\n    } else if (AttributeComponents[id] !== undefined) {\r\n      return EntityTypeComponentExtendedCategory.attribute;\r\n    } else if (id.indexOf(\"sensor\") >= 0) {\r\n      return EntityTypeComponentExtendedCategory.sensorComponents;\r\n    } else if (\r\n      id.indexOf(\"jump\") >= 0 ||\r\n      id.indexOf(\"climb\") >= 0 ||\r\n      id.indexOf(\"move\") >= 0 ||\r\n      id.startsWith(\"minecraft:navigation\") ||\r\n      id.startsWith(\"minecraft:flying\") ||\r\n      id.startsWith(\"minecraft:friction\") ||\r\n      id.startsWith(\"minecraft:walk_animation\")\r\n    ) {\r\n      return EntityTypeComponentExtendedCategory.movementComplex;\r\n    } else if (\r\n      id.indexOf(\"attack\") >= 0 ||\r\n      id.indexOf(\"combat\") >= 0 ||\r\n      id.indexOf(\"damage\") >= 0 ||\r\n      id.startsWith(\"minecraft:health\") ||\r\n      id.startsWith(\"minecraft:healable\") ||\r\n      id.startsWith(\"minecraft:hurt_on\")\r\n    ) {\r\n      return EntityTypeComponentExtendedCategory.combatAndHealthComplex;\r\n    }\r\n    return EntityTypeComponentExtendedCategory.complex;\r\n  }\r\n\r\n  get formatVersion() {\r\n    return this._wrapper?.format_version;\r\n  }\r\n\r\n  static getComponentFromBaseFileName(name: string) {\r\n    let canonName = name;\r\n\r\n    if (canonName.startsWith(\"minecraft_\")) {\r\n      canonName = canonName.substring(10);\r\n      if (canonName.startsWith(\"behavior_\")) {\r\n        canonName = \"behavior.\" + canonName.substring(9);\r\n      }\r\n      if (canonName.startsWith(\"movement_\")) {\r\n        canonName = \"movement.\" + canonName.substring(9);\r\n      }\r\n      if (canonName.startsWith(\"navigation_\")) {\r\n        canonName = \"navigation.\" + canonName.substring(11);\r\n      }\r\n      if (canonName.startsWith(\"player_\")) {\r\n        canonName = \"player.\" + canonName.substring(7);\r\n      }\r\n      if (canonName.startsWith(\"jump_\")) {\r\n        canonName = \"jump.\" + canonName.substring(5);\r\n      }\r\n      if (canonName.startsWith(\"horse_\")) {\r\n        canonName = \"horse.\" + canonName.substring(6);\r\n      }\r\n      if (canonName.startsWith(\"annotation_\")) {\r\n        canonName = \"annotation.\" + canonName.substring(11);\r\n      }\r\n    }\r\n\r\n    return canonName;\r\n  }\r\n\r\n  public static getComponentCategoryDescription(category: EntityTypeComponentCategory) {\r\n    switch (category) {\r\n      case EntityTypeComponentCategory.behavior:\r\n        return \"Behavior\";\r\n      case EntityTypeComponentCategory.attribute:\r\n        return \"Attribute\";\r\n      case EntityTypeComponentCategory.trigger:\r\n        return \"Trigger\";\r\n      default:\r\n        return \"Component\";\r\n    }\r\n  }\r\n\r\n  public static getPluralComponentCategoryDescription(category: EntityTypeComponentCategory) {\r\n    switch (category) {\r\n      case EntityTypeComponentCategory.behavior:\r\n        return \"Behaviors (AI)\";\r\n      case EntityTypeComponentCategory.attribute:\r\n        return \"Attributes\";\r\n      case EntityTypeComponentCategory.trigger:\r\n        return \"Triggers\";\r\n      default:\r\n        return \"Components\";\r\n    }\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get behaviorPackFile() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set behaviorPackFile(newFile: IFile | undefined) {\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.unsubscribe(this._handleFileUpdated);\r\n    }\r\n\r\n    this._file = newFile;\r\n\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.subscribe(this._handleFileUpdated);\r\n    }\r\n  }\r\n\r\n  _handleFileUpdated(file: IFile, fileB: IFile) {\r\n    // Skip when this update came from our own persist() call \u2014 the in-memory\r\n    // state already matches what we just wrote, so resetting it (and forcing a\r\n    // re-parse) would leave the editor stuck on \"Loading mob definition...\"\r\n    // until the next prop change.\r\n    if (this._isSelfPersisting) {\r\n      return;\r\n    }\r\n    this._data = undefined;\r\n    this._isLoaded = false;\r\n    this._wrapper = undefined;\r\n    this._managedComponents = {};\r\n  }\r\n\r\n  public get id() {\r\n    if (this._id === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this._id = newId;\r\n\r\n    if (this._data && this._data.description) {\r\n      this._data.description.identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get runtimeIdentifier() {\r\n    if (this._data && this._data.description) {\r\n      return this._data.description.runtime_identifier;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set runtimeIdentifier(newId: string | undefined) {\r\n    if (this._data && this._data.description) {\r\n      this._data.description.runtime_identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get aliases() {\r\n    if (!this._data || !this._data.description) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.description.aliases;\r\n  }\r\n\r\n  public get properties() {\r\n    if (!this._data || !this._data.description) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.description.properties;\r\n  }\r\n\r\n  constructor() {\r\n    this._handleFileUpdated = this._handleFileUpdated.bind(this);\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersionAsNumberArray();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersionAsNumberArray(): number[] | undefined {\r\n    if (!this._wrapper) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._wrapper.format_version);\r\n  }\r\n\r\n  public removeProperty(propertyName: string) {\r\n    if (this._data?.description?.properties) {\r\n      this._data.description.properties[propertyName] = undefined;\r\n    }\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      let val = this._id;\r\n\r\n      if (val.startsWith(\"minecraft:\")) {\r\n        return val.substring(10, this._id.length);\r\n      }\r\n\r\n      const firstColon = val.indexOf(\":\");\r\n\r\n      if (firstColon >= 0) {\r\n        val = val.substring(firstColon + 1);\r\n      }\r\n\r\n      return val;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getComponent(id: string) {\r\n    if (this._data === undefined || this._data.components === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._managedComponents[id]) {\r\n      const comp = this._data.components[id];\r\n\r\n      if (comp) {\r\n        this._managedComponents[id] = new ManagedComponent(this._data.components, id, comp);\r\n      }\r\n    }\r\n\r\n    return this._managedComponents[id];\r\n  }\r\n\r\n  getComponentsInBaseAndGroups(id: string): IManagedComponent[] {\r\n    if (this._data === undefined) {\r\n      return [];\r\n    }\r\n\r\n    let results: IManagedComponent[] = [];\r\n\r\n    let comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      results.push(comp);\r\n    }\r\n\r\n    for (const componentGroupName in this._componentGroups) {\r\n      const group = this._componentGroups[componentGroupName];\r\n      if (group) {\r\n        comp = group.getComponent(id);\r\n\r\n        if (comp) {\r\n          results.push(comp);\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  public getCoreAndComponentGroupList() {\r\n    const componentSets: IManagedComponentSetItem[] = [this];\r\n\r\n    const cgs = this.getComponentGroups();\r\n\r\n    componentSets.push(...cgs);\r\n\r\n    return componentSets;\r\n  }\r\n\r\n  getAllComponents(): IManagedComponent[] {\r\n    if (this._data === undefined) {\r\n      return [];\r\n    }\r\n\r\n    let results: IManagedComponent[] = this.getComponents();\r\n\r\n    for (const componentGroupName in this._componentGroups) {\r\n      const group = this._componentGroups[componentGroupName];\r\n      if (group) {\r\n        for (const comp of group.getComponents()) {\r\n          if (comp) {\r\n            results.push(comp);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  get behaviorPackFormatVersion() {\r\n    if (!this._wrapper || !this._wrapper.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._wrapper.format_version;\r\n  }\r\n\r\n  setBehaviorPackFormatVersion(versionStr: string) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    if (this._wrapper) {\r\n      this._wrapper.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"ETNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._data !== undefined) {\r\n      for (const componentName in this._data.components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  getComponentGroupsComponentUsedIn(componentName: string): ManagedComponentGroup[] {\r\n    const componentGroups = this.getComponentGroups();\r\n    const cgsUsedIn: ManagedComponentGroup[] = [];\r\n\r\n    for (const cg of componentGroups) {\r\n      if (cg && cg.getComponent(componentName)) {\r\n        cgsUsedIn.push(cg);\r\n      }\r\n    }\r\n\r\n    return cgsUsedIn;\r\n  }\r\n\r\n  getComponentGroup(componentGroupName: string): ManagedComponentGroup | undefined {\r\n    if (this._data && this._data.component_groups) {\r\n      if (!this._componentGroups[componentGroupName] && this._data.component_groups[componentGroupName]) {\r\n        const componentGroupData = this._data.component_groups[componentGroupName];\r\n\r\n        const cg = new ManagedComponentGroup(componentGroupData, componentGroupName);\r\n\r\n        this._componentGroups[componentGroupName] = cg;\r\n      }\r\n\r\n      return this._componentGroups[componentGroupName];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getComponentGroups(): ManagedComponentGroup[] {\r\n    const componentGroups: ManagedComponentGroup[] = [];\r\n\r\n    if (this._data !== undefined) {\r\n      for (const componentGroupName in this._data.component_groups) {\r\n        if (!this._componentGroups[componentGroupName]) {\r\n          const componentGroupData = this._data.component_groups[componentGroupName];\r\n\r\n          const cg = new ManagedComponentGroup(componentGroupData, componentGroupName);\r\n\r\n          this._componentGroups[componentGroupName] = cg;\r\n\r\n          componentGroups.push(cg);\r\n        } else {\r\n          componentGroups.push(this._componentGroups[componentGroupName]);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentGroups;\r\n  }\r\n\r\n  getEvent(eventName: string): IEventActionSet | IEventAction | undefined {\r\n    try {\r\n      if (this._data !== undefined && Utilities.isUsableAsObjectKey(eventName)) {\r\n        if (!this._events[eventName]) {\r\n          const eventData = this._data.events[eventName];\r\n\r\n          this._events[eventName] = eventData;\r\n        }\r\n\r\n        return this._events[eventName];\r\n      }\r\n    } catch (e) {\r\n      Log.verbose(\"Error getting event \" + eventName + \": \" + e);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getEffectiveComponents(componentGroupAddRemoveList: string[]) {\r\n    const componentState = JSON.parse(JSON.stringify(this._data?.components)); // clone\r\n\r\n    for (let componentGroupId of componentGroupAddRemoveList) {\r\n      let isAdd = true;\r\n      if (componentGroupId.startsWith(\"-\")) {\r\n        componentGroupId = componentGroupId.substring(1);\r\n        isAdd = false;\r\n      } else if (componentGroupId.startsWith(\"+\")) {\r\n        componentGroupId = componentGroupId.substring(1);\r\n      }\r\n\r\n      const componentGroup = this.getComponentGroup(componentGroupId);\r\n\r\n      if (componentGroup) {\r\n        const cgComps = componentGroup.getComponents();\r\n        if (isAdd) {\r\n          for (const cgComp of cgComps) {\r\n            componentState[cgComp.id] = cgComp.getData();\r\n          }\r\n        } else if (!isAdd) {\r\n          for (const cgComp of cgComps) {\r\n            componentState[cgComp.id] = undefined;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return new ManagedComponentGroup(componentState, this.id);\r\n  }\r\n\r\n  getEvents(): IEventWrapper[] {\r\n    const events: IEventWrapper[] = [];\r\n\r\n    if (this._data !== undefined) {\r\n      for (const eventName in this._data.events) {\r\n        if (!this._events[eventName] && Utilities.isUsableAsObjectKey(eventName)) {\r\n          const eventData = this._data.events[eventName];\r\n\r\n          this._events[eventName] = eventData;\r\n\r\n          events.push({ id: eventName, event: eventData });\r\n        } else {\r\n          events.push({ id: eventName, event: this._events[eventName] });\r\n        }\r\n      }\r\n    }\r\n\r\n    return events;\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    const bpData = this._data as IEntityTypeBehaviorPack;\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(bpData.components, id, componentOrData);\r\n\r\n    bpData.components[id] = mc.getData();\r\n    this._managedComponents[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  addComponentGroup(id?: string, componentOrData?: ManagedComponentGroup | IComponentGroup | undefined) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    if (id === undefined) {\r\n      id = \"group\";\r\n      let increment = 0;\r\n\r\n      let cg = this.getComponentGroup(id);\r\n\r\n      while (cg !== undefined && increment < 100) {\r\n        increment++;\r\n        id = \"group\" + increment;\r\n\r\n        cg = this.getComponentGroup(id);\r\n      }\r\n    }\r\n\r\n    if (componentOrData === undefined) {\r\n      componentOrData = {};\r\n    }\r\n\r\n    const bpData = this._data as IEntityTypeBehaviorPack;\r\n\r\n    const mcg =\r\n      componentOrData instanceof ManagedComponentGroup\r\n        ? componentOrData\r\n        : new ManagedComponentGroup(componentOrData, id);\r\n\r\n    const cgData = mcg.getData();\r\n\r\n    if (cgData) {\r\n      bpData.component_groups[id] = cgData;\r\n    }\r\n\r\n    this._componentGroups[id] = mcg;\r\n\r\n    return mcg;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._data === undefined) {\r\n      return;\r\n    }\r\n\r\n    const newBehaviorPacks: {\r\n      [name: string]: string | string[] | boolean | number[] | number | IComponent | undefined;\r\n    } = {};\r\n    const newManagedComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this._data.components) {\r\n      if (name !== id && Utilities.isUsableAsObjectKey(name)) {\r\n        const componentData = this._data.components[name];\r\n\r\n        newBehaviorPacks[name] = componentData;\r\n      }\r\n    }\r\n\r\n    for (const name in this._managedComponents) {\r\n      if (name !== id && this._managedComponents[name] && Utilities.isUsableAsObjectKey(name)) {\r\n        newManagedComponents[name] = this._managedComponents[name];\r\n      }\r\n    }\r\n\r\n    this._data.components = newBehaviorPacks;\r\n    this._managedComponents = newManagedComponents;\r\n  }\r\n\r\n  _ensureBehaviorPackDataInitialized() {\r\n    if (!this._wrapper) {\r\n      this._wrapper = {\r\n        format_version: \"1.20.0\",\r\n      };\r\n    }\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        description: {\r\n          identifier: \"unknown\",\r\n          is_experimental: false,\r\n          is_spawnable: false,\r\n          is_summonable: false,\r\n        },\r\n        components: {},\r\n        component_groups: {},\r\n        events: {},\r\n      };\r\n\r\n      if (this._wrapper) {\r\n        //@ts-ignore\r\n        this._wrapper[\"minecraft:entity\"] = this._data;\r\n      }\r\n    }\r\n  }\r\n\r\n  public getProperties() {\r\n    if (!this._data || !this._data?.description) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.description.properties;\r\n  }\r\n\r\n  public getPropertyList() {\r\n    const props = this.getProperties();\r\n\r\n    if (!props) {\r\n      return [];\r\n    }\r\n\r\n    const propertyList = [];\r\n\r\n    for (const propName in props) {\r\n      if (props[propName] !== undefined) {\r\n        propertyList.push(propName);\r\n      }\r\n    }\r\n\r\n    return propertyList;\r\n  }\r\n\r\n  static getPropertyTypeString(stateType: EntityPropertyType) {\r\n    switch (stateType) {\r\n      case EntityPropertyType.boolean:\r\n        return \"bool\";\r\n      case EntityPropertyType.float:\r\n        return \"float\";\r\n      case EntityPropertyType.enum:\r\n        return \"enum\";\r\n    }\r\n\r\n    return \"int\";\r\n  }\r\n\r\n  public addProperty(propertyName: string, propertyType: EntityPropertyType) {\r\n    if (!this._data || !this._data.description) {\r\n      return;\r\n    }\r\n\r\n    let dataArr: string[] | number[] | undefined = undefined;\r\n    let typeStr = EntityTypeDefinition.getPropertyTypeString(propertyType);\r\n    let defaultValue: string | number | boolean = false;\r\n\r\n    if (propertyType === EntityPropertyType.float) {\r\n      dataArr = [0, 1, 2];\r\n      defaultValue = 0;\r\n    } else if (propertyType === EntityPropertyType.enum) {\r\n      dataArr = [\"value1\", \"value2\"];\r\n      defaultValue = \"value1\";\r\n    }\r\n\r\n    if (!this._data.description.properties) {\r\n      this._data.description.properties = {};\r\n    }\r\n\r\n    this._data.description.properties[propertyName] = {\r\n      type: typeStr,\r\n      values: dataArr,\r\n      default: defaultValue,\r\n    };\r\n  }\r\n\r\n  public addEvent(eventName?: string) {\r\n    if (!this._data) {\r\n      return;\r\n    }\r\n\r\n    if (!this._data.events) {\r\n      this._data.events = {};\r\n    }\r\n\r\n    if (eventName === undefined) {\r\n      eventName = \"eventName\";\r\n      let increment = 0;\r\n\r\n      let eve = this.getEvent(eventName);\r\n\r\n      while (eve !== undefined && increment < 100) {\r\n        increment++;\r\n        eventName = \"eventName\" + increment;\r\n\r\n        eve = this.getEvent(eventName);\r\n      }\r\n    }\r\n\r\n    this._data.events[eventName] = {};\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let lootTablePaths: string[] = [];\r\n\r\n    const comps = this.getComponentsInBaseAndGroups(\"minecraft:loot\");\r\n\r\n    for (const comp of comps) {\r\n      let lootTablePath = comp.getProperty(\"table\");\r\n\r\n      if (lootTablePath) {\r\n        lootTablePaths.push(lootTablePath);\r\n      }\r\n    }\r\n\r\n    // Use pre-built index for O(1) lookups when available\r\n    if (index && this.id) {\r\n      // Entity resources matching this entity's ID\r\n      const matchingResources = index.getItemsById(index.entityResourcesById, this.id);\r\n      for (const candItem of matchingResources) {\r\n        item.addChildItem(candItem);\r\n      }\r\n\r\n      // Spawn rules matching this entity's ID\r\n      const matchingSpawnRules = index.getItemsById(index.spawnRulesById, this.id);\r\n      for (const candItem of matchingSpawnRules) {\r\n        item.addChildItem(candItem);\r\n      }\r\n\r\n      // Loot tables by path suffix match\r\n      if (lootTablePaths.length > 0) {\r\n        const lootTableItems = project.getItemsByType(ProjectItemType.lootTableBehavior);\r\n        for (const candItem of lootTableItems) {\r\n          for (const lootTablePath of lootTablePaths) {\r\n            if (candItem.projectPath?.endsWith(lootTablePath)) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      // Fallback: scan items when index is not available\r\n      const entityResourceItems = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n      for (const candItem of entityResourceItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const etrd = await EntityTypeResourceDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (etrd) {\r\n            const id = etrd.id;\r\n\r\n            if (id === this.id) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      const spawnRuleItems = project.getItemsByType(ProjectItemType.spawnRuleBehavior);\r\n      for (const candItem of spawnRuleItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const srb = await SpawnRulesBehaviorDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (srb) {\r\n            const id = srb.id;\r\n\r\n            if (id === this.id) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (lootTablePaths.length > 0) {\r\n        const lootTableItems = project.getItemsByType(ProjectItemType.lootTableBehavior);\r\n        for (const candItem of lootTableItems) {\r\n          for (const lootTablePath of lootTablePaths) {\r\n            if (candItem.projectPath?.endsWith(lootTablePath)) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    behaviorPackFile: IFile,\r\n    loadHandler?: IEventHandler<EntityTypeDefinition, EntityTypeDefinition>,\r\n    preserveComments?: boolean\r\n  ) {\r\n    let et: EntityTypeDefinition | undefined;\r\n\r\n    if (behaviorPackFile.manager === undefined) {\r\n      et = new EntityTypeDefinition();\r\n\r\n      et.behaviorPackFile = behaviorPackFile;\r\n\r\n      behaviorPackFile.manager = et;\r\n    }\r\n\r\n    if (behaviorPackFile.manager !== undefined && behaviorPackFile.manager instanceof EntityTypeDefinition) {\r\n      et = behaviorPackFile.manager as EntityTypeDefinition;\r\n\r\n      if (!et.isLoaded || (preserveComments && !et._loadedWithComments)) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load(preserveComments);\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  getScript(isTypeScript: boolean) {\r\n    if (this.shortId === undefined) {\r\n      return;\r\n    }\r\n\r\n    const className = ScriptGen.getClassName(this.shortId);\r\n    const results = [];\r\n\r\n    results.push(\"import * as mc from '@minecraft/server';\");\r\n\r\n    results.push(\"export default class \" + className + \"Base\");\r\n    results.push(\"{\");\r\n\r\n    if (isTypeScript) {\r\n      results.push(\"  _entity : mc.Entity;\");\r\n      results.push(\"  constructor(entity : mc.Entity) {\");\r\n    } else {\r\n      results.push(\"  _entity;\\n\");\r\n      results.push(\"  constructor(entity) {\");\r\n    }\r\n\r\n    results.push(\"    this._entity = entity;\");\r\n    results.push(\"  }\\n\\n\");\r\n\r\n    if (isTypeScript) {\r\n      results.push(\"  static spawn(location : mc.Vector3) {\");\r\n    } else {\r\n      results.push(\"  static spawn(location) {\");\r\n    }\r\n\r\n    results.push('    const entity = world.getDimension(\"overworld\").spawnEntity(\"' + this.id + '\", location);');\r\n    results.push(\"    const \" + ScriptGen.getInstanceName(this.shortId) + \" = new \" + className + \"(entity);\");\r\n    results.push(\"    return \" + ScriptGen.getInstanceName(this.shortId) + \";\");\r\n    results.push(\"  }\\n\");\r\n\r\n    if (this._data !== undefined) {\r\n      const healthC = this._data.components[\"minecraft:health\"];\r\n\r\n      if (healthC !== undefined) {\r\n        results.push(\"  fullyHeal() {\");\r\n        results.push('    this._entity.getComponent(\"minecraft:health\").resetToMaxValue();');\r\n        results.push(\"  }\\n\");\r\n        if (isTypeScript) {\r\n          results.push(\"  setHealth(newValue : number) {\");\r\n        } else {\r\n          results.push(\"  setHealth(newValue) {\");\r\n        }\r\n\r\n        results.push('    this._entity.getComponent(\"minecraft:health\").setCurrent(newValue);');\r\n        results.push(\"  }\\n\");\r\n      }\r\n\r\n      const rideableC = this._data.components[\"minecraft:rideable\"];\r\n      if (rideableC !== undefined) {\r\n        if (isTypeScript) {\r\n          results.push(\"  addRider(newRider : mc.Entity) {\");\r\n        } else {\r\n          results.push(\"  addRider(newRider) {\");\r\n        }\r\n\r\n        results.push('    this._entity.getComponent(\"minecraft:rideable\").addRider(newRider);');\r\n        results.push(\"  }\\n\");\r\n\r\n        if (isTypeScript) {\r\n          results.push(\"  ejectRider(rider : mc.Entity) {\");\r\n        } else {\r\n          results.push(\"  ejectRider(rider) {\");\r\n        }\r\n        results.push('    this._entity.getComponent(\"minecraft:rideable\").addRider(rider);');\r\n        results.push(\"  }\\n\");\r\n      }\r\n\r\n      const tameableC = this._data.components[\"minecraft:tameable\"];\r\n      if (tameableC !== undefined) {\r\n        results.push(\"  tame() {\");\r\n        results.push('    return this._entity.getComponent(\"minecraft:tameable\").tame();');\r\n        results.push(\"  }\\n\");\r\n      }\r\n    }\r\n\r\n    results.push(\"}\");\r\n\r\n    return results.join(\"\\n\");\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n    Log.assert(!this._isLoaded || this._wrapper !== null, \"ETDP\");\r\n\r\n    if (!this._wrapper) {\r\n      return false;\r\n    }\r\n\r\n    this._isSelfPersisting = true;\r\n    try {\r\n      return this._file.setObjectContentIfSemanticallyDifferent(this._wrapper);\r\n    } finally {\r\n      this._isSelfPersisting = false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the entity type definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    // If we get here and _isLoaded is true, we need to \"upgrade\" from read-only to read/write\r\n    // by re-parsing with comment preservation\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"ETBPF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._wrapper = data;\r\n\r\n    const entity = data[\"minecraft:entity\"];\r\n\r\n    if (entity && entity.description) {\r\n      this.id = entity.description.identifier;\r\n    }\r\n\r\n    this._data = entity;\r\n\r\n    if (this._data) {\r\n      if (this._data.components) {\r\n        for (const compName in this._data.components) {\r\n          const comp = this._data.components[compName];\r\n\r\n          if (comp) {\r\n            this._managedComponents[compName] = new ManagedComponent(this._data.components, compName, comp);\r\n          }\r\n        }\r\n      }\r\n      if (this._data.component_groups) {\r\n        for (const compGroupName in this._data.component_groups) {\r\n          const compGroup = this._data.component_groups[compGroupName];\r\n\r\n          if (compGroup) {\r\n            this._componentGroups[compGroupName] = new ManagedComponentGroup(compGroup, compGroupName);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ProjectItemCreationType, ProjectItemErrorStatus } from \"./IProjectItemData\";\r\n\r\nexport enum ProjectItemVariantType {\r\n  general = 0,\r\n  subPack = 1,\r\n  versionSlice = 2,\r\n  versionSliceAlt = 3,\r\n  versionSliceAltPacks = 4,\r\n}\r\n\r\nexport const MaxVariantCounts = 4;\r\n\r\nexport default interface IProjectItemVariant {\r\n  label: string;\r\n  variantType: ProjectItemVariantType;\r\n  projectPath?: string;\r\n  creationType?: ProjectItemCreationType;\r\n  errorMessage?: string;\r\n  errorStatus?: ProjectItemErrorStatus;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IFile from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport { ProjectItemErrorStatus, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport IProjectItemVariant, { ProjectItemVariantType } from \"./IProjectItemVariant\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport ProjectVariant from \"./ProjectVariant\";\r\nimport Log from \"../core/Log\";\r\nimport MCWorld from \"../minecraft/MCWorld\";\r\nimport { StorageErrorStatus } from \"../storage/IStorage\";\r\nimport { PackType } from \"../minecraft/Pack\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\n\r\nexport default class ProjectItemVariant {\r\n  private _item: ProjectItem;\r\n  private _data: IProjectItemVariant;\r\n  private _file: IFile | null = null;\r\n  private _folder: IFolder | null = null;\r\n  private _projectVariant: ProjectVariant;\r\n  private _isFileContentProcessed = false;\r\n  private _isLoaded = false;\r\n  private _onFileRetrieved = new EventDispatcher<ProjectItemVariant, IFile>();\r\n  private _onFolderRetrieved = new EventDispatcher<ProjectItemVariant, IFolder>();\r\n  private _onLoaded = new EventDispatcher<ProjectItemVariant, ProjectItemVariant>();\r\n\r\n  private _isDefault: boolean;\r\n\r\n  constructor(parentItem: ProjectItem, data: IProjectItemVariant, projectVariant: ProjectVariant) {\r\n    this._item = parentItem;\r\n    this._data = data;\r\n    this._projectVariant = projectVariant;\r\n\r\n    this._isDefault = this._data.label === \"\";\r\n  }\r\n\r\n  get projectVariant() {\r\n    return this._projectVariant;\r\n  }\r\n\r\n  get errorMessage() {\r\n    return this._data.errorMessage;\r\n  }\r\n\r\n  set errorMessage(newErrorMessage: string | undefined) {\r\n    this._data.errorMessage = newErrorMessage;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onFileRetrieved() {\r\n    return this._onFileRetrieved.asEvent();\r\n  }\r\n\r\n  public get onFolderRetrieved() {\r\n    return this._onFolderRetrieved.asEvent();\r\n  }\r\n\r\n  get label() {\r\n    return this._data.label;\r\n  }\r\n\r\n  get variantType() {\r\n    return this._data.variantType;\r\n  }\r\n\r\n  get file() {\r\n    if (this._isDefault) {\r\n      return this._item.defaultFile;\r\n    }\r\n\r\n    return this._file;\r\n  }\r\n\r\n  setFile(file: IFile | null) {\r\n    this._file = file;\r\n  }\r\n\r\n  get itemType() {\r\n    return this._item.itemType;\r\n  }\r\n\r\n  get projectPath() {\r\n    return this._data.projectPath;\r\n  }\r\n\r\n  set variantType(newVariantType: ProjectItemVariantType) {\r\n    this._data.variantType = newVariantType;\r\n  }\r\n\r\n  set projectPath(newProjectPath: string | undefined) {\r\n    this._data.projectPath = newProjectPath;\r\n  }\r\n\r\n  get folder() {\r\n    if (this._isDefault) {\r\n      return this._item.defaultFolder;\r\n    }\r\n\r\n    return this._folder;\r\n  }\r\n\r\n  setFolder(file: IFolder | null) {\r\n    this._folder = file;\r\n  }\r\n\r\n  _handleMCWorldLoaded(world: MCWorld, worldA: MCWorld) {\r\n    this._fireLoadedEvent();\r\n  }\r\n\r\n  _fireLoadedEvent() {\r\n    if (this._onLoaded && this.isLoaded) {\r\n      this._onLoaded.dispatch(this, this);\r\n    }\r\n  }\r\n\r\n  get errorStatus() {\r\n    return this._data.errorStatus;\r\n  }\r\n\r\n  set errorStatus(errorStatus: ProjectItemErrorStatus | undefined) {\r\n    this._data.errorStatus = errorStatus;\r\n  }\r\n\r\n  async ensureFileStorage() {\r\n    if (\r\n      this._item.storageType === ProjectItemStorageType.singleFile &&\r\n      this._file === null &&\r\n      this.projectPath !== null &&\r\n      this.projectPath !== undefined &&\r\n      this.projectPath.startsWith(\"/\") &&\r\n      this._item.project.projectFolder !== null &&\r\n      this._item.project.projectFolder !== undefined\r\n    ) {\r\n      const prefixPaths = this.projectPath.split(\"#\");\r\n\r\n      if (prefixPaths.length > 1) {\r\n        let folderToLoadFrom: IFolder | undefined = this._item.project.projectFolder;\r\n\r\n        for (let i = 0; i < prefixPaths.length - 1; i++) {\r\n          if (folderToLoadFrom) {\r\n            const zipFile: IFile = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[i]);\r\n\r\n            await zipFile.loadContent();\r\n\r\n            if (zipFile.content && zipFile.content instanceof Uint8Array) {\r\n              if (!zipFile.fileContainerStorage) {\r\n                const zipStorage = new ZipStorage();\r\n\r\n                zipStorage.storagePath = zipFile.storageRelativePath + \"#\";\r\n\r\n                await zipStorage.loadFromUint8Array(zipFile.content, zipFile.name);\r\n\r\n                zipStorage.containerFile = zipFile;\r\n                zipFile.fileContainerStorage = zipStorage;\r\n              }\r\n\r\n              folderToLoadFrom = zipFile.fileContainerStorage.rootFolder;\r\n            } else {\r\n              folderToLoadFrom = undefined;\r\n            }\r\n          }\r\n        }\r\n\r\n        if (folderToLoadFrom) {\r\n          this._file = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[prefixPaths.length - 1]);\r\n          this._isFileContentProcessed = false;\r\n        } else {\r\n          Log.debugAlert(\"Unable to parse a containerized file path of '\" + this.projectPath + \"'\");\r\n          return null;\r\n        }\r\n      } else {\r\n        this._file = await this._item.project.projectFolder.ensureFileFromRelativePath(this.projectPath);\r\n        this._isFileContentProcessed = false;\r\n      }\r\n    } else if (\r\n      this._item.storageType === ProjectItemStorageType.singleFile &&\r\n      this._file === null &&\r\n      (this.projectPath === null || this.projectPath === undefined) &&\r\n      this.variantType === ProjectItemVariantType.subPack &&\r\n      this._item.project.projectFolder !== null &&\r\n      this._item.project.projectFolder !== undefined\r\n    ) {\r\n      await this._item.project.ensurePacksAsync();\r\n\r\n      const pack = await this._item.getPack();\r\n\r\n      if (pack && pack.packType === PackType.resource && this._item.projectPath) {\r\n        const manifest = (await pack.ensureManifest()) as ResourceManifestDefinition | undefined;\r\n        const folder = pack.folder;\r\n\r\n        if (manifest && folder) {\r\n          const subpack = manifest.getSubpackByFolderName(this.label);\r\n\r\n          if (subpack) {\r\n            const path = this._item.projectPath;\r\n\r\n            const resourcePacksRel = path.indexOf(\"/resource_packs/\");\r\n\r\n            if (resourcePacksRel > -1) {\r\n              const file = await folder.getFileFromRelativePath(path.substring(resourcePacksRel + 15));\r\n\r\n              if (file) {\r\n                this._file = file;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._file;\r\n  }\r\n\r\n  async loadFileStorage() {\r\n    if (!this._isFileContentProcessed && this._file) {\r\n      /*if (this._data.creationType === ProjectItemCreationType.generated) {\r\n        await ProjectAutogeneration.updateItemAutogeneration(this, true);\r\n      } else {*/\r\n      await this._file.loadContent();\r\n\r\n      // }\r\n\r\n      //await ProjectAutogeneration.updateItemAutogeneratedSideFiles(this);\r\n\r\n      this._isFileContentProcessed = true;\r\n\r\n      this._onFileRetrieved.dispatch(this, this._file);\r\n\r\n      if (this.itemType === ProjectItemType.MCWorld || this.itemType === ProjectItemType.MCTemplate) {\r\n        const mcworld = await MCWorld.ensureOnFile(this._file, this._item.project, this._handleMCWorldLoaded);\r\n\r\n        if (mcworld) {\r\n          this.errorMessage = mcworld.storageErrorMessage;\r\n\r\n          if (mcworld.storageErrorStatus === StorageErrorStatus.unprocessable) {\r\n            this.errorStatus = ProjectItemErrorStatus.unprocessable;\r\n          } else {\r\n            this.errorStatus = ProjectItemErrorStatus.none;\r\n          }\r\n        }\r\n      } else {\r\n        this._fireLoadedEvent();\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensureAndLoadFileStorage() {\r\n    await this.ensureFileStorage();\r\n\r\n    await this.loadFileStorage();\r\n\r\n    return this._file;\r\n  }\r\n\r\n  async ensureFolderStorage() {\r\n    if (this._item.storageType === ProjectItemStorageType.folder) {\r\n      if (\r\n        this._folder === null &&\r\n        this.projectPath !== null &&\r\n        this.projectPath !== undefined &&\r\n        this.projectPath.startsWith(\"/\") &&\r\n        this._item.project.projectFolder !== null &&\r\n        this._item.project.projectFolder !== undefined\r\n      ) {\r\n        const prefixPaths = this.projectPath.split(\"#\");\r\n\r\n        if (prefixPaths.length > 1) {\r\n          let folderToLoadFrom: IFolder | undefined = this._item.project.projectFolder;\r\n\r\n          for (let i = 0; i < prefixPaths.length - 1; i++) {\r\n            if (folderToLoadFrom) {\r\n              const zipFile: IFile = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[i]);\r\n\r\n              await zipFile.loadContent();\r\n\r\n              if (zipFile.content && zipFile.content instanceof Uint8Array) {\r\n                if (!zipFile.fileContainerStorage) {\r\n                  const zipStorage = new ZipStorage();\r\n\r\n                  zipStorage.storagePath = zipFile.storageRelativePath + \"#\";\r\n\r\n                  await zipStorage.loadFromUint8Array(zipFile.content, zipFile.name);\r\n\r\n                  zipStorage.containerFile = zipFile;\r\n                  zipFile.fileContainerStorage = zipStorage;\r\n                }\r\n\r\n                folderToLoadFrom = zipFile.fileContainerStorage.rootFolder;\r\n              } else {\r\n                folderToLoadFrom = undefined;\r\n              }\r\n            }\r\n          }\r\n\r\n          if (folderToLoadFrom) {\r\n            this._folder = await folderToLoadFrom.ensureFolderFromRelativePath(prefixPaths[prefixPaths.length - 1]);\r\n          } else {\r\n            // Log.debugAlert(\"Unable to parse a containerized file path of '\" + this.storagePath + \"'\");\r\n            return null;\r\n          }\r\n        } else {\r\n          this._folder = await this._item.project.projectFolder.ensureFolderFromRelativePath(this.projectPath);\r\n        }\r\n\r\n        await this._folder.load();\r\n\r\n        this._onFolderRetrieved.dispatch(this, this._folder);\r\n\r\n        if (this.itemType === ProjectItemType.worldFolder) {\r\n          const mcworld = await MCWorld.ensureMCWorldOnFolder(\r\n            this._folder,\r\n            this._item.project,\r\n            this._handleMCWorldLoaded\r\n          );\r\n\r\n          if (mcworld) {\r\n            this.errorMessage = mcworld.storageErrorMessage;\r\n\r\n            if (mcworld.storageErrorStatus === StorageErrorStatus.unprocessable) {\r\n              this.errorStatus = ProjectItemErrorStatus.unprocessable;\r\n            } else {\r\n              this.errorStatus = ProjectItemErrorStatus.none;\r\n            }\r\n          }\r\n        } else {\r\n          this._fireLoadedEvent();\r\n        }\r\n      }\r\n\r\n      return this._folder;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IProjectVariant from \"./IProjectVariant\";\r\nimport Project from \"./Project\";\r\n\r\nexport default class ProjectVariant {\r\n  private _data: IProjectVariant;\r\n\r\n  private _isDefault: boolean;\r\n  private _project: Project;\r\n\r\n  constructor(parent: Project, data: IProjectVariant) {\r\n    this._project = parent;\r\n    this._data = data;\r\n\r\n    this._isDefault = this._data.label === \"\";\r\n  }\r\n\r\n  static canonicalizeVariantLabel(variantLabel: string) {\r\n    return variantLabel.toLowerCase().trim();\r\n  }\r\n\r\n  get isDefault() {\r\n    return this._isDefault;\r\n  }\r\n\r\n  get effectiveUnifiedTier() {\r\n    if (this.memoryPerformanceTier !== undefined) {\r\n      return this.memoryPerformanceTier;\r\n    }\r\n\r\n    if (this.memoryTier === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    // per specified mappings of previous subpack tiers (where each number corresponds to 512mb of device memory)\r\n    // to updated, broader, unified tiers that adds in device profile info\r\n    if (this.memoryTier < 11) {\r\n      return 0;\r\n    }\r\n\r\n    if (this.memoryTier <= 11) {\r\n      return 1;\r\n    }\r\n\r\n    if (this.memoryTier <= 12) {\r\n      return 2;\r\n    }\r\n\r\n    if (this.memoryTier <= 18) {\r\n      return 3;\r\n    }\r\n\r\n    if (this.memoryTier <= 31) {\r\n      return 4;\r\n    }\r\n\r\n    return 5;\r\n  }\r\n\r\n  get memoryPerformanceTier() {\r\n    return this._data.memoryPerformanceTier;\r\n  }\r\n\r\n  set memoryPerformanceTier(newTier: number | undefined) {\r\n    this._data.memoryPerformanceTier = newTier;\r\n  }\r\n\r\n  get memoryTier() {\r\n    return this._data.memoryTier;\r\n  }\r\n\r\n  set memoryTier(newTier: number | undefined) {\r\n    this._data.memoryTier = newTier;\r\n  }\r\n\r\n  get title() {\r\n    return this._data.title;\r\n  }\r\n\r\n  set title(newTitle: string | undefined) {\r\n    this._data.title = newTitle;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IProjectItemData, {\r\n  ProjectItemCreationType,\r\n  ProjectItemEditPreference,\r\n  ProjectItemErrorStatus,\r\n  ProjectItemStorageType,\r\n} from \"./IProjectItemData\";\r\nimport Log from \"./../core/Log\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport Project from \"./Project\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IGitHubInfo from \"./IGitHubInfo\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport { ProjectEditPreference } from \"./IProjectData\";\r\nimport MCWorld from \"../minecraft/MCWorld\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { IFileUpdateEvent, StorageErrorStatus } from \"../storage/IStorage\";\r\nimport ProjectItemUtilities from \"./ProjectItemUtilities\";\r\nimport Pack from \"../minecraft/Pack\";\r\nimport ProjectAutogeneration from \"./ProjectAutogeneration\";\r\nimport ProjectItemRelationship from \"./IProjectItemRelationship\";\r\nimport IProjectItemRelationship from \"./IProjectItemRelationship\";\r\nimport IProjectItemUnfulfilledRelationship from \"./IProjectItemUnfulfilledRelationship\";\r\nimport ProjectItemRelations from \"./ProjectItemRelations\";\r\nimport ProjectItemVariant from \"./ProjectItemVariant\";\r\nimport { ProjectItemVariantType } from \"./IProjectItemVariant\";\r\nimport Database from \"../minecraft/Database\";\r\nimport ProjectVariant from \"./ProjectVariant\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\n\r\nexport interface IProjectItemContentUpdateEvent {\r\n  item: ProjectItem;\r\n  fileUpdate: IFileUpdateEvent;\r\n}\r\n\r\nexport default class ProjectItem {\r\n  private _data: IProjectItemData;\r\n  private _project: Project;\r\n  private _onPropertyChanged = new EventDispatcher<ProjectItem, string>();\r\n  private _onFileRetrieved = new EventDispatcher<ProjectItem, IFile>();\r\n  private _onFolderRetrieved = new EventDispatcher<ProjectItem, IFolder>();\r\n  private _onLoaded = new EventDispatcher<ProjectItem, ProjectItem>();\r\n  private _defaultFile: IFile | null;\r\n  private _defaultFolder: IFolder | null;\r\n  private _pendingLoadRequests: ((value: unknown) => void)[] = [];\r\n  private _isLoading: boolean = false;\r\n  private _isFileContentProcessed: boolean = false;\r\n  private _imageUrlBase64Cache: string | undefined | null;\r\n  private _pack: Pack | undefined;\r\n  private _primaryFile?: IFile;\r\n\r\n  private _accessoryFolder: IFolder | null;\r\n\r\n  public parentItems: ProjectItemRelationship[] | undefined;\r\n  public childItems: ProjectItemRelationship[] | undefined;\r\n  public unfulfilledRelationships: IProjectItemUnfulfilledRelationship[] | undefined;\r\n\r\n  private _variants: { [label: string]: ProjectItemVariant };\r\n\r\n  constructor(parent: Project, incomingData?: IProjectItemData) {\r\n    this._project = parent;\r\n    this._defaultFile = null;\r\n    this._defaultFolder = null;\r\n    this._accessoryFolder = null;\r\n    this._isFileContentProcessed = false;\r\n    this._variants = {};\r\n    this._handleMCWorldLoaded = this._handleMCWorldLoaded.bind(this);\r\n    this.sortVariantsMostImportantFirst = this.sortVariantsMostImportantFirst.bind(this);\r\n    this.sortVariantsMostImportantLast = this.sortVariantsMostImportantLast.bind(this);\r\n    if (incomingData) {\r\n      this._data = incomingData;\r\n      // Migration: older projects may have persisted an empty-label default variant\r\n      // (label: \"\", variantType: general). The empty-label variant is purely a runtime\r\n      // placeholder for the item's default file and should not be persisted; leaving\r\n      // it in #data.variants makes _getVariantList() report a phantom entry that other\r\n      // code paths (e.g. variant.ensureFileStorage subpack lookup) can mishandle.\r\n      if (this._data.variants && this._data.variants[\"\"] !== undefined) {\r\n        delete this._data.variants[\"\"];\r\n      }\r\n    } else {\r\n      this._data = {\r\n        variants: {},\r\n        itemType: ProjectItemType.unknown,\r\n        projectPath: null,\r\n        storageType: ProjectItemStorageType.singleFile,\r\n        tags: [],\r\n        name: \"\",\r\n      };\r\n    }\r\n  }\r\n\r\n  public get parentItemCount() {\r\n    if (this.parentItems === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.parentItems.length;\r\n  }\r\n\r\n  public get childItemCount() {\r\n    if (this.childItems === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.childItems.length;\r\n  }\r\n\r\n  public get unfulfilledRelationshipsCount() {\r\n    if (this.unfulfilledRelationships === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.unfulfilledRelationships.length;\r\n  }\r\n\r\n  public get isInWorld() {\r\n    return this._data.isInWorld;\r\n  }\r\n\r\n  public set isInWorld(isInWorld: boolean | undefined) {\r\n    this._data.isInWorld = isInWorld;\r\n  }\r\n\r\n  public get project() {\r\n    return this._project;\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onFileRetrieved() {\r\n    return this._onFileRetrieved.asEvent();\r\n  }\r\n\r\n  public get onFolderRetrieved() {\r\n    return this._onFolderRetrieved.asEvent();\r\n  }\r\n\r\n  public get gitHubReference() {\r\n    return this._data.gitHubReference;\r\n  }\r\n\r\n  public get isInFileContainer() {\r\n    if (!this.projectPath) {\r\n      return false;\r\n    }\r\n\r\n    return this.projectPath.indexOf(\"#\") >= 0;\r\n  }\r\n\r\n  public get isFileContainerStorageItem() {\r\n    return (\r\n      this.itemType === ProjectItemType.zip ||\r\n      this.itemType === ProjectItemType.MCWorld ||\r\n      this.itemType === ProjectItemType.MCProject ||\r\n      this.itemType === ProjectItemType.MCAddon ||\r\n      this.itemType === ProjectItemType.MCPack ||\r\n      this.itemType === ProjectItemType.MCTemplate\r\n    );\r\n  }\r\n\r\n  hasCustomVariants() {\r\n    for (const key in this._data.variants) {\r\n      if (key !== \"\") {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  hasVersionSliceCustomVariants() {\r\n    for (const key in this._data.variants) {\r\n      const varType = this._data.variants[key].variantType;\r\n      if (\r\n        key !== \"\" &&\r\n        (varType === ProjectItemVariantType.versionSliceAltPacks ||\r\n          varType === ProjectItemVariantType.versionSlice ||\r\n          varType === ProjectItemVariantType.versionSliceAlt)\r\n      ) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private _shouldEnsureDefaultVariant() {\r\n    return (this.defaultFile && (this.defaultFile.content || !this.hasCustomVariants())) || this.defaultFolder;\r\n  }\r\n\r\n  getVariant(variantName: string) {\r\n    if (variantName === \"\" && this._shouldEnsureDefaultVariant()) {\r\n      return this.ensureDefaultVariant();\r\n    }\r\n\r\n    return this._variants[variantName];\r\n  }\r\n\r\n  public get isWorld() {\r\n    return (\r\n      this.itemType === ProjectItemType.MCProject ||\r\n      this.itemType === ProjectItemType.MCWorld ||\r\n      this.itemType === ProjectItemType.MCTemplate ||\r\n      this.itemType === ProjectItemType.worldFolder\r\n    );\r\n  }\r\n\r\n  static getGitHubSignature(info: IGitHubInfo) {\r\n    let sig = info.owner + \"|\" + info.repoName + \"|\";\r\n\r\n    if (info.branch !== undefined) {\r\n      sig += info.branch;\r\n    }\r\n\r\n    if (info.folder !== undefined) {\r\n      sig += \"|\" + info.folder;\r\n    }\r\n\r\n    return sig;\r\n  }\r\n\r\n  get defaultVariant() {\r\n    if (this._shouldEnsureDefaultVariant()) {\r\n      return this.ensureDefaultVariant();\r\n    }\r\n\r\n    return this._variants[\"\"];\r\n  }\r\n\r\n  async ensureAccessoryFolder() {\r\n    if (this._accessoryFolder) {\r\n      return this._accessoryFolder;\r\n    }\r\n\r\n    const rootAccessoryFolder = await this.project.ensureProjectItemAccessoryFolder();\r\n\r\n    const folderPath = ProjectItemUtilities.getAccessoryFolderPathFromFilePath(this);\r\n\r\n    this._accessoryFolder = await rootAccessoryFolder.ensureFolderFromRelativePath(folderPath);\r\n\r\n    return this._accessoryFolder;\r\n  }\r\n\r\n  ensureDefaultVariant() {\r\n    return this.ensureVariant(\"\");\r\n  }\r\n\r\n  getVariantList() {\r\n    if (this.defaultFile || this.defaultFolder) {\r\n      this.ensureDefaultVariant();\r\n    }\r\n\r\n    return this._getVariantList();\r\n  }\r\n\r\n  _getVariantList() {\r\n    const vararr = [];\r\n\r\n    // The empty-label default variant is intentionally NOT persisted in\r\n    // _data.variants (see ensureVariant). If it has been instantiated as a\r\n    // runtime placeholder, include it first so callers iterating the variant\r\n    // list still see the item's default file/content.\r\n    if (this._variants[\"\"] !== undefined) {\r\n      vararr.push(this._variants[\"\"]);\r\n    }\r\n\r\n    for (const key in this._data.variants) {\r\n      if (key === \"\") {\r\n        continue;\r\n      }\r\n      const variant = this.ensureVariant(key);\r\n      vararr.push(variant);\r\n    }\r\n\r\n    return vararr;\r\n  }\r\n\r\n  getVariantListMostImportantLast() {\r\n    const vararr = [];\r\n\r\n    const varKeys = Object.keys(this._data.variants);\r\n    varKeys.sort(this.sortVariantsMostImportantLast);\r\n\r\n    for (const key of varKeys) {\r\n      const variant = this.ensureVariant(key);\r\n      vararr.push(variant);\r\n    }\r\n\r\n    return vararr;\r\n  }\r\n\r\n  getVariantListMostImportantFirst() {\r\n    const vararr = [];\r\n\r\n    const varKeys = Object.keys(this._data.variants);\r\n    varKeys.sort(this.sortVariantsMostImportantFirst);\r\n\r\n    for (const key of varKeys) {\r\n      const variant = this.ensureVariant(key);\r\n      vararr.push(variant);\r\n    }\r\n\r\n    return vararr;\r\n  }\r\n\r\n  hasNonDefaultVariant() {\r\n    const vararr = this._getVariantList();\r\n\r\n    if (vararr.length === 0) {\r\n      return false;\r\n    }\r\n\r\n    if (vararr.length > 1) {\r\n      return true;\r\n    }\r\n\r\n    if (vararr[0].label !== \"\") {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  ensureVariant(label: string) {\r\n    label = ProjectVariant.canonicalizeVariantLabel(label);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(label)) {\r\n      Log.unsupportedToken(label);\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._variants[label]) {\r\n      const pv = this.project.ensureVariant(label);\r\n\r\n      if (!this._data.variants) {\r\n        this._data.variants = {};\r\n      }\r\n\r\n      // The empty-label default variant is a runtime placeholder for the item's\r\n      // default file and is not persisted in #data.variants. Use a transient data\r\n      // object so the runtime ProjectItemVariant still works without leaking a\r\n      // phantom entry into the saved project (which historically caused\r\n      // _getVariantList() to report count=1 on items that have no real variants).\r\n      let variantData = this._data.variants[label];\r\n      if (variantData === undefined) {\r\n        variantData = { label: label, variantType: ProjectItemVariantType.general };\r\n        if (label !== \"\") {\r\n          this._data.variants[label] = variantData;\r\n        }\r\n      }\r\n\r\n      this._primaryFile = undefined;\r\n\r\n      this._variants[label] = new ProjectItemVariant(this, variantData, pv);\r\n    }\r\n\r\n    return this._variants[label];\r\n  }\r\n\r\n  /// NOTE: ProjectItem.ensureFileStorage or ensureStorage should be called before this method.\r\n  getFile(variantName?: string) {\r\n    if (variantName === undefined || variantName === \"\") {\r\n      return this._defaultFile;\r\n    }\r\n\r\n    const variant = this.ensureVariant(variantName);\r\n\r\n    return variant.file;\r\n  }\r\n\r\n  /// NOTE: ProjectItem.ensureFolderStorage or ensureStorage should be called before this method.\r\n  getFolder(variantName?: string) {\r\n    if (variantName === undefined || variantName === \"\") {\r\n      return this._defaultFolder;\r\n    }\r\n\r\n    const variant = this.ensureVariant(variantName);\r\n\r\n    return variant.folder;\r\n  }\r\n\r\n  /// NOTE: ProjectItem.ensure*Storage should be called before this method.\r\n  async getPack() {\r\n    if (this._pack) {\r\n      return this._pack;\r\n    }\r\n\r\n    let thisPath = undefined;\r\n\r\n    if (this._defaultFile) {\r\n      thisPath = this._defaultFile.storageRelativePath;\r\n    } else if (this._defaultFolder) {\r\n      thisPath = this._defaultFolder.storageRelativePath;\r\n    }\r\n\r\n    if (thisPath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    thisPath = StorageUtilities.canonicalizePath(thisPath);\r\n\r\n    await this.project.ensurePacks();\r\n\r\n    for (const pack of this.project.packs) {\r\n      if (thisPath.startsWith(StorageUtilities.canonicalizePath(pack.folder.storageRelativePath))) {\r\n        this._pack = pack;\r\n        return this._pack;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  addUnfulfilledRelationship(path: string, itemType: ProjectItemType, isVanillaDependent?: boolean) {\r\n    let pir: IProjectItemUnfulfilledRelationship = {\r\n      parentItem: this,\r\n      path: path,\r\n      itemType: itemType,\r\n      isVanillaDependent: isVanillaDependent === true,\r\n    };\r\n\r\n    if (this.unfulfilledRelationships === undefined) {\r\n      this.unfulfilledRelationships = [];\r\n    }\r\n\r\n    this.unfulfilledRelationships.push(pir);\r\n  }\r\n\r\n  async ensureDependencies() {\r\n    await ProjectItemRelations.calculateForItem(this);\r\n  }\r\n\r\n  addChildItem(childItem: ProjectItem) {\r\n    if (this.childItems) {\r\n      for (const rel of this.childItems) {\r\n        if (rel.childItem === childItem && rel.parentItem === this) {\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (childItem === this) {\r\n      return;\r\n    }\r\n\r\n    if (ProjectItemUtilities.wouldBeCircular(childItem)) {\r\n      return;\r\n    }\r\n\r\n    let hasChild = false;\r\n    let childHasParent = false;\r\n\r\n    if (this.childItems === undefined) {\r\n      this.childItems = [];\r\n    }\r\n\r\n    if (childItem.parentItems === undefined) {\r\n      childItem.parentItems = [];\r\n    }\r\n\r\n    for (const existingRelation of this.childItems) {\r\n      if (existingRelation.childItem === childItem && existingRelation.parentItem === this) {\r\n        hasChild = true;\r\n      }\r\n    }\r\n\r\n    for (const existingRelation of childItem.parentItems) {\r\n      if (existingRelation.childItem === childItem && existingRelation.parentItem === this) {\r\n        childHasParent = true;\r\n      }\r\n    }\r\n\r\n    const pir: IProjectItemRelationship = {\r\n      parentItem: this,\r\n      childItem: childItem,\r\n    };\r\n\r\n    if (!hasChild) {\r\n      this.childItems.push(pir);\r\n    }\r\n\r\n    if (!childHasParent) {\r\n      childItem.parentItems.push(pir);\r\n    }\r\n  }\r\n\r\n  addParentItem(parentItem: ProjectItem) {\r\n    if (ProjectItemUtilities.wouldBeCircular(parentItem)) {\r\n      return;\r\n    }\r\n\r\n    if (parentItem === this) {\r\n      return;\r\n    }\r\n\r\n    if (this.parentItems === undefined) {\r\n      this.parentItems = [];\r\n    }\r\n\r\n    if (parentItem.childItems === undefined) {\r\n      parentItem.childItems = [];\r\n    }\r\n\r\n    let hasParent = false;\r\n    let parentHasChild = false;\r\n\r\n    for (const existingRelation of this.parentItems) {\r\n      if (existingRelation.parentItem === parentItem && existingRelation.childItem === this) {\r\n        hasParent = true;\r\n      }\r\n    }\r\n\r\n    for (const existingRelation of parentItem.childItems) {\r\n      if (existingRelation.parentItem === parentItem && existingRelation.childItem === this) {\r\n        parentHasChild = true;\r\n      }\r\n    }\r\n\r\n    const pir: IProjectItemRelationship = {\r\n      parentItem: parentItem,\r\n      childItem: this,\r\n    };\r\n\r\n    if (!hasParent) {\r\n      this.parentItems.push(pir);\r\n    }\r\n\r\n    if (!parentHasChild) {\r\n      parentItem.childItems.push(pir);\r\n    }\r\n  }\r\n\r\n  toString() {\r\n    return this.itemType + \": \" + this.projectPath;\r\n  }\r\n\r\n  /// NOTE: ProjectItem.ensure*Storage should be called before this method.\r\n  async getPackRelativePath() {\r\n    const pack = await this.getPack();\r\n\r\n    if (!pack) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._defaultFile) {\r\n      return this._defaultFile.getFolderRelativePath(pack.folder);\r\n    } else if (this._defaultFolder) {\r\n      return this._defaultFolder.getFolderRelativePath(pack.folder);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static gitHubReferencesEqual(refA: IGitHubInfo | undefined, refB: IGitHubInfo | undefined) {\r\n    if (refA === refB) {\r\n      return true;\r\n    }\r\n\r\n    if (refA === undefined && refB === undefined) {\r\n      return true;\r\n    }\r\n\r\n    if (\r\n      refA !== undefined &&\r\n      refB !== undefined &&\r\n      refA.owner === refB.owner &&\r\n      refA.repoName === refB.repoName &&\r\n      refA.folder === refB.folder &&\r\n      refA.branch === refB.branch\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public set gitHubReference(value: IGitHubInfo | undefined) {\r\n    if (ProjectItem.gitHubReferencesEqual(this._data.gitHubReference, value)) {\r\n      return;\r\n    }\r\n\r\n    this._data.gitHubReference = value;\r\n\r\n    this._project.notifyProjectItemChanged(this);\r\n  }\r\n\r\n  get title() {\r\n    return (\r\n      StorageUtilities.getContaineredFileLeafPath(this.projectPath) +\r\n      \" (\" +\r\n      ProjectItemUtilities.getDescriptionForType(this._data.itemType).toLowerCase() +\r\n      \")\"\r\n    );\r\n  }\r\n\r\n  get typeTitle() {\r\n    return ProjectItemUtilities.getDescriptionForType(this._data.itemType);\r\n  }\r\n\r\n  getPackFolderName() {\r\n    if (this.projectPath === undefined || this.projectPath === null) {\r\n      return undefined;\r\n    }\r\n    let folderStoragePath = StorageUtilities.getFolderPath(this.projectPath);\r\n\r\n    if (folderStoragePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    let folderStoragePathLower = folderStoragePath.toLowerCase();\r\n\r\n    if (this.project.packs.length > 2) {\r\n      const endOfPacks = folderStoragePathLower.indexOf(\"_packs/\");\r\n\r\n      if (endOfPacks > 0) {\r\n        const endOfPacksSegment = folderStoragePathLower.indexOf(\"/\", endOfPacks + 7);\r\n\r\n        if (endOfPacksSegment > 0) {\r\n          return folderStoragePath.substring(endOfPacks + 7, endOfPacksSegment);\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get folderPath() {\r\n    if (this.projectPath === undefined || this.projectPath === null) {\r\n      return undefined;\r\n    }\r\n\r\n    return StorageUtilities.getFolderPath(this.projectPath);\r\n  }\r\n\r\n  getFolderGroupingPath() {\r\n    if (this.projectPath === undefined || this.projectPath === null) {\r\n      return undefined;\r\n    }\r\n\r\n    let folderStoragePath = StorageUtilities.getFolderPath(this.projectPath);\r\n\r\n    if (folderStoragePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    folderStoragePath = MinecraftUtilities.clearCommonTerms(folderStoragePath);\r\n    let folderStoragePathLower = folderStoragePath.toLowerCase();\r\n\r\n    const folderTypeRoots = [...ProjectItemUtilities.getFolderRootsForType(this.itemType)];\r\n\r\n    folderTypeRoots.push(\"zip\");\r\n\r\n    for (const folderTypeRoot of folderTypeRoots) {\r\n      if (this.project.hasMultiplePacksOfSameType) {\r\n        folderStoragePath = Utilities.replaceAllCaseInsensitive(folderStoragePath, \"/\" + folderTypeRoot + \"/\", \"/\");\r\n      } else {\r\n        const start = folderStoragePathLower.indexOf(\"/\" + folderTypeRoot + \"/\");\r\n\r\n        if (start >= 0) {\r\n          let packPrefix = this.getPackFolderName();\r\n\r\n          if (packPrefix === undefined) {\r\n            packPrefix = \"\";\r\n          } else {\r\n            packPrefix += \" \";\r\n          }\r\n\r\n          folderStoragePath = packPrefix + folderStoragePath.substring(start + 2 + folderTypeRoot.length);\r\n          folderStoragePathLower = folderStoragePath.toLowerCase();\r\n        }\r\n      }\r\n    }\r\n\r\n    folderStoragePath = folderStoragePath.replace(/#/gi, \" \").trim();\r\n\r\n    return folderStoragePath;\r\n  }\r\n\r\n  getCommunitySchemaPath() {\r\n    return ProjectItemUtilities.getCommunitySchemaPathForType(this.itemType);\r\n  }\r\n\r\n  getOfficialSchemaPath() {\r\n    return ProjectItemUtilities.getOfficialSchemaPathForType(this.itemType);\r\n  }\r\n\r\n  getFormPath() {\r\n    // For geometry files, check if this is a legacy format (format_version 1.8.0 with \"geometry.<name>\" keys)\r\n    // vs modern format (format_version 1.21.0 with \"minecraft:geometry\")\r\n    if (this.itemType === ProjectItemType.modelGeometryJson && this.primaryFile) {\r\n      const content = StorageUtilities.getJsonObject(this.primaryFile);\r\n      if (content) {\r\n        // Check if any root key starts with \"geometry.\" (legacy format)\r\n        const rootKeys = Object.keys(content);\r\n        const hasLegacyGeometry = rootKeys.some((key) => key.toLowerCase().startsWith(\"geometry.\"));\r\n        if (hasLegacyGeometry) {\r\n          return \"visual/geometry.v1.8.0\";\r\n        }\r\n      }\r\n    }\r\n\r\n    return ProjectItemUtilities.getFormPathForType(this.itemType);\r\n  }\r\n\r\n  get errorStatus() {\r\n    return this._data.errorStatus;\r\n  }\r\n\r\n  set errorStatus(newErrorStatus: ProjectItemErrorStatus | undefined) {\r\n    this._data.errorStatus = newErrorStatus;\r\n  }\r\n\r\n  get source() {\r\n    return this._data.source;\r\n  }\r\n\r\n  set source(newSource: string | undefined) {\r\n    this._data.source = newSource;\r\n  }\r\n\r\n  get errorMessage() {\r\n    return this._data.errorMessage;\r\n  }\r\n\r\n  set errorMessage(newErrorMessage: string | undefined) {\r\n    this._data.errorMessage = newErrorMessage;\r\n  }\r\n\r\n  get projectPath() {\r\n    if (this._data.projectPath === undefined && this._data.storagePath) {\r\n      this._data.projectPath = this._data.storagePath;\r\n\r\n      return this._data.storagePath;\r\n    }\r\n\r\n    return this._data.projectPath;\r\n  }\r\n\r\n  set projectPath(newBasePath: string | undefined | null) {\r\n    this._data.projectPath = newBasePath;\r\n  }\r\n\r\n  get effectiveEditPreference() {\r\n    const ep = this.editPreference;\r\n\r\n    if (ep === ProjectItemEditPreference.projectDefault) {\r\n      return this._project.effectiveEditPreference;\r\n    } else if (ep === ProjectItemEditPreference.forceRaw) {\r\n      return ProjectEditPreference.raw;\r\n    } else {\r\n      return ProjectEditPreference.summarized;\r\n    }\r\n  }\r\n\r\n  get editPreference() {\r\n    if (this._data.editPreference === undefined) {\r\n      return ProjectItemEditPreference.projectDefault;\r\n    }\r\n\r\n    return this._data.editPreference;\r\n  }\r\n\r\n  set editPreference(newEditPreference: ProjectItemEditPreference) {\r\n    this._data.editPreference = newEditPreference;\r\n  }\r\n\r\n  get storageType() {\r\n    if (this._data.storageType === undefined) {\r\n      return ProjectItemStorageType.singleFile;\r\n    }\r\n\r\n    return this._data.storageType;\r\n  }\r\n\r\n  set storageType(newStorageType: ProjectItemStorageType) {\r\n    this._data.storageType = newStorageType;\r\n  }\r\n\r\n  get creationType() {\r\n    return this._data.creationType;\r\n  }\r\n\r\n  set creationType(newCreationType: ProjectItemCreationType | undefined) {\r\n    this._data.creationType = newCreationType;\r\n  }\r\n\r\n  get itemType() {\r\n    return this._data.itemType;\r\n  }\r\n\r\n  get defaultFile() {\r\n    return this._defaultFile;\r\n  }\r\n\r\n  /**\r\n   * Get the cached thumbnail data URL for this item.\r\n   * Returns undefined if no thumbnail has been generated.\r\n   */\r\n  get cachedThumbnail(): string | undefined {\r\n    return this._data.cachedThumbnail;\r\n  }\r\n\r\n  /**\r\n   * Set the cached thumbnail for this item.\r\n   * Also updates the thumbnailGeneratedAt timestamp and clears the imageUrl cache.\r\n   */\r\n  set cachedThumbnail(value: string | undefined) {\r\n    this._data.cachedThumbnail = value;\r\n    this._data.thumbnailGeneratedAt = value ? Date.now() : undefined;\r\n    // Clear the cached imageUrl so it picks up the new thumbnail\r\n    this._imageUrlBase64Cache = undefined;\r\n  }\r\n\r\n  /**\r\n   * Get the timestamp when the thumbnail was last generated.\r\n   */\r\n  get thumbnailGeneratedAt(): number | undefined {\r\n    return this._data.thumbnailGeneratedAt;\r\n  }\r\n\r\n  /**\r\n   * Get the thumbnail link - path to another item whose thumbnail should be used.\r\n   */\r\n  get thumbnailLink(): string | undefined {\r\n    return this._data.thumbnailLink;\r\n  }\r\n\r\n  /**\r\n   * Set the thumbnail link - path to another item whose thumbnail should be used.\r\n   */\r\n  set thumbnailLink(value: string | undefined) {\r\n    this._data.thumbnailLink = value;\r\n  }\r\n\r\n  /**\r\n   * Check if this item type supports thumbnail generation.\r\n   */\r\n  get supportsThumbnail(): boolean {\r\n    return this.itemType === ProjectItemType.modelGeometryJson;\r\n  }\r\n\r\n  /**\r\n   * Clear the cached thumbnail and imageUrl cache.\r\n   * Call this when the file content changes.\r\n   */\r\n  clearThumbnailCache() {\r\n    this._data.cachedThumbnail = undefined;\r\n    this._data.thumbnailGeneratedAt = undefined;\r\n    this._imageUrlBase64Cache = undefined;\r\n  }\r\n\r\n  sortVariantsMostImportantLast(a: string, b: string) {\r\n    if (!this._variants) {\r\n      this._getVariantList();\r\n    }\r\n\r\n    if (!this._variants) {\r\n      return Utilities.staticCompare(a, b);\r\n    }\r\n\r\n    const va = this._variants[a];\r\n    const vb = this._variants[b];\r\n\r\n    if (!va || !vb || !va.label || !vb.label) {\r\n      return 0;\r\n    }\r\n\r\n    if (\r\n      (va.variantType === ProjectItemVariantType.versionSlice &&\r\n        vb.variantType === ProjectItemVariantType.versionSlice) ||\r\n      (va.variantType === ProjectItemVariantType.versionSliceAlt &&\r\n        vb.variantType === ProjectItemVariantType.versionSliceAlt) ||\r\n      (va.variantType === ProjectItemVariantType.versionSliceAltPacks &&\r\n        vb.variantType === ProjectItemVariantType.versionSliceAltPacks)\r\n    ) {\r\n      const versionIndexA = Database.getVersionIndexFromVersionStr(va.label);\r\n      const versionIndexB = Database.getVersionIndexFromVersionStr(vb.label);\r\n\r\n      return versionIndexA - versionIndexB;\r\n    }\r\n\r\n    return Utilities.staticCompare(va.label.toString(), vb.label.toString());\r\n  }\r\n\r\n  sortVariantsMostImportantFirst(a: string, b: string) {\r\n    if (!this._variants) {\r\n      this._getVariantList();\r\n    }\r\n\r\n    if (!this._variants) {\r\n      return Utilities.staticCompare(a, b);\r\n    }\r\n\r\n    const va = this._variants[a];\r\n    const vb = this._variants[b];\r\n\r\n    if (!va || !vb || !va.label || !vb.label) {\r\n      return 0;\r\n    }\r\n\r\n    if (\r\n      (va.variantType === ProjectItemVariantType.versionSlice &&\r\n        vb.variantType === ProjectItemVariantType.versionSlice) ||\r\n      (va.variantType === ProjectItemVariantType.versionSliceAlt &&\r\n        vb.variantType === ProjectItemVariantType.versionSliceAlt) ||\r\n      (va.variantType === ProjectItemVariantType.versionSliceAltPacks &&\r\n        vb.variantType === ProjectItemVariantType.versionSliceAltPacks)\r\n    ) {\r\n      const versionIndexA = Database.getVersionIndexFromVersionStr(va.label);\r\n      const versionIndexB = Database.getVersionIndexFromVersionStr(vb.label);\r\n\r\n      return versionIndexB - versionIndexA;\r\n    }\r\n\r\n    return vb.label.localeCompare(va.label);\r\n  }\r\n\r\n  get primaryVariantLabel(): string | undefined {\r\n    const variantKeys = Object.keys(this._variants);\r\n\r\n    // if we have version slices, return the latest one that has a file\r\n    if (this.hasVersionSliceCustomVariants()) {\r\n      variantKeys.sort(this.sortVariantsMostImportantFirst);\r\n\r\n      for (const variantName of variantKeys) {\r\n        const variant = this._variants[variantName];\r\n\r\n        if (\r\n          variant.variantType === ProjectItemVariantType.versionSlice ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAlt ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAltPacks\r\n        ) {\r\n          if (variant.file) {\r\n            return variant.label;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._defaultFile) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const variantName of variantKeys) {\r\n      if (variantName) {\r\n        const variant = this._variants[variantName];\r\n\r\n        if (variant.file) {\r\n          return variant.label;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get primaryFile(): IFile | null {\r\n    if (this._primaryFile) {\r\n      return this._primaryFile;\r\n    }\r\n\r\n    // if we have version slices, return the latest one that has a file\r\n    if (this.hasVersionSliceCustomVariants()) {\r\n      const variantKeys = Object.keys(this._variants);\r\n\r\n      variantKeys.sort(this.sortVariantsMostImportantFirst);\r\n\r\n      for (const variantName of variantKeys) {\r\n        const variant = this._variants[variantName];\r\n\r\n        if (\r\n          variant.variantType === ProjectItemVariantType.versionSlice ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAlt ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAltPacks\r\n        ) {\r\n          if (variant.file) {\r\n            this._primaryFile = variant.file;\r\n            return this._primaryFile;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._defaultFile && (!this._defaultFile.isContentLoaded || this._defaultFile.content)) {\r\n      return this._defaultFile;\r\n    }\r\n\r\n    const variantKeys = Object.keys(this._variants);\r\n\r\n    variantKeys.sort(this.sortVariantsMostImportantFirst);\r\n\r\n    for (const variantName of variantKeys) {\r\n      if (variantName) {\r\n        const variant = this._variants[variantName];\r\n\r\n        if (variant.file) {\r\n          this._primaryFile = variant.file;\r\n          return this._primaryFile;\r\n        }\r\n      }\r\n    }\r\n\r\n    // as a last fallback, return an assumedly content-less default file\r\n    if (this._defaultFile) {\r\n      this._primaryFile = this._defaultFile;\r\n      return this._primaryFile;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  get defaultFolder() {\r\n    return this._defaultFolder;\r\n  }\r\n\r\n  set itemType(newItemType) {\r\n    this._data.itemType = newItemType;\r\n\r\n    this._onPropertyChanged.dispatch(this, \"itemType\");\r\n\r\n    this._project.notifyProjectItemChanged(this);\r\n  }\r\n\r\n  get isContentLoaded() {\r\n    if (this.storageType === ProjectItemStorageType.folder) {\r\n      if (!this.defaultFolder) {\r\n        return false;\r\n      }\r\n\r\n      if (!this.defaultFolder.isLoaded) {\r\n        return false;\r\n      }\r\n\r\n      if (this.itemType === ProjectItemType.worldFolder) {\r\n        if (!this.defaultFolder.manager || !(this.defaultFolder.manager instanceof MCWorld)) {\r\n          return false;\r\n        }\r\n\r\n        const world = this.defaultFolder.manager as MCWorld;\r\n\r\n        return world.isLoaded;\r\n      }\r\n\r\n      return true;\r\n    } else if (this.storageType === ProjectItemStorageType.singleFile) {\r\n      const itemFile = this.primaryFile;\r\n\r\n      if (!itemFile) {\r\n        return false;\r\n      }\r\n\r\n      if (!itemFile.isContentLoaded) {\r\n        return false;\r\n      }\r\n\r\n      if (this.isWorld) {\r\n        if (!itemFile.manager || !(itemFile.manager instanceof MCWorld)) {\r\n          return false;\r\n        }\r\n\r\n        const world = itemFile.manager as MCWorld;\r\n\r\n        return world.isLoaded;\r\n      }\r\n\r\n      return this._isFileContentProcessed;\r\n    }\r\n\r\n    Log.unexpectedContentState();\r\n\r\n    return false;\r\n  }\r\n\r\n  get tags() {\r\n    return this._data.tags;\r\n  }\r\n\r\n  async setFile(file: IFile) {\r\n    if (file !== this._defaultFile) {\r\n      this._defaultFile = file;\r\n\r\n      this._isFileContentProcessed = false;\r\n    }\r\n  }\r\n\r\n  get needsSave() {\r\n    if (\r\n      this._defaultFile === null &&\r\n      this.creationType === ProjectItemCreationType.generated &&\r\n      this.storageType === ProjectItemStorageType.singleFile\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    if (this._defaultFile === null) {\r\n      return false;\r\n    }\r\n\r\n    let val = this._defaultFile.needsSave;\r\n\r\n    if (!val) {\r\n      if (\r\n        this.isFileContainerStorageItem &&\r\n        this._defaultFile.fileContainerStorage &&\r\n        this._defaultFile.fileContainerStorage instanceof ZipStorage\r\n      ) {\r\n        val = (this._defaultFile.fileContainerStorage as ZipStorage).isContentUpdated;\r\n      }\r\n\r\n      if (!val) {\r\n        const jsFile = this.getJavaScriptLibTwin();\r\n\r\n        if (jsFile !== undefined) {\r\n          val = jsFile.needsSave;\r\n        }\r\n      }\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  updateProjectPath() {\r\n    if (this._project && this._project.projectFolder) {\r\n      if (this._defaultFile) {\r\n        this.projectPath = this._defaultFile.getFolderRelativePath(this._project.projectFolder);\r\n      } else if (this._defaultFolder) {\r\n        this.projectPath = this._defaultFolder.getFolderRelativePath(this._project.projectFolder);\r\n      }\r\n    }\r\n  }\r\n\r\n  async rename(newFileBaseName: string) {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent();\r\n    }\r\n\r\n    await this._project.ensureProjectFolder();\r\n\r\n    if (this._project.projectFolder === undefined || this._project.projectFolder === null) {\r\n      return;\r\n    }\r\n\r\n    if (this._defaultFile !== null) {\r\n      await this._defaultFile.moveTo(\r\n        this._defaultFile.parentFolder.storageRelativePath + newFileBaseName + \".\" + this._defaultFile.type\r\n      );\r\n\r\n      this._data.name = newFileBaseName + \".\" + this._defaultFile.type;\r\n\r\n      this.projectPath = this._defaultFile.getFolderRelativePath(this._project.projectFolder);\r\n      this.storageType = ProjectItemStorageType.singleFile;\r\n    } else {\r\n      this._data.name = newFileBaseName;\r\n    }\r\n\r\n    this._onPropertyChanged.dispatch(this, \"name\");\r\n\r\n    this._project.notifyProjectItemChanged(this);\r\n  }\r\n\r\n  async deleteItem() {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent();\r\n    }\r\n    await ProjectItemRelations.deleteLinksFromParents(this);\r\n\r\n    if (this._defaultFile !== null) {\r\n      await this._defaultFile.deleteThisFile();\r\n    }\r\n\r\n    this._project.removeItem(this);\r\n  }\r\n\r\n  get imageUrl() {\r\n    if (this._imageUrlBase64Cache === null) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._imageUrlBase64Cache) {\r\n      return this._imageUrlBase64Cache;\r\n    }\r\n\r\n    // Check for cached thumbnail (generated by worker for geometry models, etc.)\r\n    if (this._data.cachedThumbnail) {\r\n      this._imageUrlBase64Cache = this._data.cachedThumbnail;\r\n      return this._imageUrlBase64Cache;\r\n    }\r\n\r\n    if (this.itemType === ProjectItemType.worldFolder) {\r\n      if (this.defaultFolder) {\r\n        if (this.defaultFolder.manager instanceof MCWorld) {\r\n          const world = this.defaultFolder.manager as MCWorld;\r\n\r\n          if (world.isLoaded) {\r\n            this._imageUrlBase64Cache = \"data:image/jpg;base64, \" + world.imageBase64;\r\n\r\n            return this._imageUrlBase64Cache;\r\n          }\r\n        }\r\n      }\r\n    } else if (this.isWorld) {\r\n      const itemFile = this.primaryFile;\r\n\r\n      if (itemFile) {\r\n        if (itemFile.manager instanceof MCWorld) {\r\n          const world = itemFile.manager as MCWorld;\r\n\r\n          if (world.isLoaded) {\r\n            return \"data:image/jpg;base64, \" + world.imageBase64;\r\n          }\r\n        }\r\n      }\r\n    } else if (this.projectPath && ProjectItemUtilities.isImageType(this.itemType)) {\r\n      if (this.projectPath && this.projectPath.endsWith(\".tga\")) {\r\n        // TGA files need async conversion, handled elsewhere\r\n        this._imageUrlBase64Cache = null;\r\n      } else if (this._defaultFile && this._defaultFile.content && this._defaultFile.content instanceof Uint8Array) {\r\n        if (this._defaultFile.content.length > 10000) {\r\n          this._imageUrlBase64Cache = null;\r\n          return undefined;\r\n        }\r\n\r\n        // Determine the correct MIME type based on file extension\r\n        const ext = StorageUtilities.getTypeFromName(this.projectPath || \"\");\r\n        let mimeType = \"image/png\"; // Default to PNG\r\n        if (ext === \"jpg\" || ext === \"jpeg\") {\r\n          mimeType = \"image/jpeg\";\r\n        } else if (ext === \"gif\") {\r\n          mimeType = \"image/gif\";\r\n        } else if (ext === \"webp\") {\r\n          mimeType = \"image/webp\";\r\n        }\r\n\r\n        this._imageUrlBase64Cache =\r\n          \"data:\" + mimeType + \";base64,\" + Utilities.uint8ArrayToBase64(this._defaultFile.content);\r\n\r\n        return this._imageUrlBase64Cache;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get name() {\r\n    if (this.itemType === ProjectItemType.worldFolder) {\r\n      if (this.defaultFolder) {\r\n        if (this.defaultFolder.manager instanceof MCWorld) {\r\n          const world = this.defaultFolder.manager as MCWorld;\r\n\r\n          if (world.isLoaded) {\r\n            return world.name;\r\n          }\r\n        }\r\n      }\r\n    } else if (this.itemType === ProjectItemType.MCWorld || this.itemType === ProjectItemType.MCTemplate) {\r\n      const itemFile = this.primaryFile;\r\n\r\n      if (itemFile) {\r\n        if (itemFile.manager instanceof MCWorld) {\r\n          const world = itemFile.manager as MCWorld;\r\n\r\n          if (world.isLoaded) {\r\n            return world.name;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // for certain types of project items, the name of the file is critical\r\n    if (\r\n      this.projectPath &&\r\n      (this.itemType === ProjectItemType.js ||\r\n        this.itemType === ProjectItemType.ts ||\r\n        this.itemType === ProjectItemType.testJs ||\r\n        this.itemType === ProjectItemType.structure)\r\n    ) {\r\n      return StorageUtilities.getLeafName(this.projectPath);\r\n    }\r\n\r\n    if (this._data.name !== undefined) {\r\n      return this._data.name;\r\n    }\r\n\r\n    if (this.projectPath) {\r\n      return StorageUtilities.getLeafName(this.projectPath);\r\n    }\r\n\r\n    return \"untitled\";\r\n  }\r\n\r\n  async loadFolder() {\r\n    if (this.storageType === ProjectItemStorageType.folder) {\r\n      if (\r\n        this._defaultFolder === null &&\r\n        this.projectPath !== null &&\r\n        this.projectPath !== undefined &&\r\n        this.projectPath.startsWith(\"/\") &&\r\n        this._project.projectFolder !== null &&\r\n        this._project.projectFolder !== undefined\r\n      ) {\r\n        const prefixPaths = this.projectPath.split(\"#\");\r\n\r\n        if (prefixPaths.length > 1) {\r\n          let folderToLoadFrom: IFolder | undefined = this._project.projectFolder;\r\n\r\n          for (let i = 0; i < prefixPaths.length - 1; i++) {\r\n            if (folderToLoadFrom) {\r\n              const zipFile: IFile = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[i]);\r\n\r\n              if (!zipFile.isContentLoaded) {\r\n                await zipFile.loadContent();\r\n              }\r\n\r\n              if (zipFile.content && zipFile.content instanceof Uint8Array) {\r\n                if (!zipFile.fileContainerStorage) {\r\n                  const zipStorage = new ZipStorage();\r\n\r\n                  zipStorage.storagePath = zipFile.storageRelativePath + \"#\";\r\n\r\n                  await zipStorage.loadFromUint8Array(zipFile.content, zipFile.name);\r\n\r\n                  zipStorage.containerFile = zipFile;\r\n                  zipFile.fileContainerStorage = zipStorage;\r\n                }\r\n\r\n                folderToLoadFrom = zipFile.fileContainerStorage.rootFolder;\r\n              } else {\r\n                folderToLoadFrom = undefined;\r\n              }\r\n            }\r\n          }\r\n\r\n          if (folderToLoadFrom) {\r\n            this._defaultFolder = await folderToLoadFrom.ensureFolderFromRelativePath(\r\n              prefixPaths[prefixPaths.length - 1]\r\n            );\r\n          } else {\r\n            // Log.debugAlert(\"Unable to parse a containerized file path of '\" + this.storagePath + \"'\");\r\n            return null;\r\n          }\r\n        } else {\r\n          this._defaultFolder = await this._project.projectFolder.ensureFolderFromRelativePath(this.projectPath);\r\n        }\r\n\r\n        await this._defaultFolder.load();\r\n\r\n        this._onFolderRetrieved.dispatch(this, this._defaultFolder);\r\n\r\n        if (this.itemType === ProjectItemType.worldFolder) {\r\n          const mcworld = await MCWorld.ensureMCWorldOnFolder(\r\n            this._defaultFolder,\r\n            this._project,\r\n            this._handleMCWorldLoaded\r\n          );\r\n\r\n          if (mcworld) {\r\n            this.errorMessage = mcworld.storageErrorMessage;\r\n\r\n            if (mcworld.storageErrorStatus === StorageErrorStatus.unprocessable) {\r\n              this.errorStatus = ProjectItemErrorStatus.unprocessable;\r\n            } else {\r\n              this.errorStatus = ProjectItemErrorStatus.none;\r\n            }\r\n          }\r\n        } else {\r\n          this._fireLoadedEvent();\r\n        }\r\n      }\r\n\r\n      return this._defaultFolder;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  _handleMCWorldLoaded(world: MCWorld, worldA: MCWorld) {\r\n    this._fireLoadedEvent();\r\n  }\r\n\r\n  _fireLoadedEvent() {\r\n    if (this._onLoaded && this.isContentLoaded) {\r\n      this._onLoaded.dispatch(this, this);\r\n    }\r\n  }\r\n\r\n  invalidateContentProcessedState() {\r\n    if (this._defaultFile) {\r\n      this._defaultFile.manager = undefined;\r\n    }\r\n\r\n    for (const varLabel in this._variants) {\r\n      const variant = this._variants[varLabel];\r\n\r\n      if (variant.file) {\r\n        variant.file.manager = undefined;\r\n      }\r\n    }\r\n\r\n    this._isFileContentProcessed = false;\r\n  }\r\n\r\n  async getManager() {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent();\r\n    }\r\n\r\n    if (this.storageType === ProjectItemStorageType.singleFile && this._defaultFile) {\r\n      return this._defaultFile.manager;\r\n    }\r\n\r\n    if (this.storageType === ProjectItemStorageType.folder && this._defaultFolder) {\r\n      return this._defaultFolder.manager;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async ensureStorage() {\r\n    if (this.storageType === ProjectItemStorageType.folder) {\r\n      await this.loadFolder();\r\n    } else if (this.storageType === ProjectItemStorageType.singleFile) {\r\n      await this.ensureFileStorage();\r\n    }\r\n  }\r\n\r\n  get isStorageEnsured() {\r\n    if (this.storageType === ProjectItemStorageType.folder) {\r\n      return !!this._defaultFolder;\r\n    }\r\n    return !!this.primaryFile;\r\n  }\r\n\r\n  async loadContentDirect() {\r\n    if (this.storageType === ProjectItemStorageType.folder) {\r\n      await this.loadFolder();\r\n    } else if (this.storageType === ProjectItemStorageType.singleFile) {\r\n      await this.loadFileContent();\r\n    }\r\n  }\r\n\r\n  async ensureFileStorage() {\r\n    if (\r\n      this.storageType === ProjectItemStorageType.singleFile &&\r\n      this._defaultFile === null &&\r\n      this.projectPath !== null &&\r\n      this.projectPath !== undefined &&\r\n      this.projectPath.startsWith(\"/\") &&\r\n      this._project.projectFolder !== null &&\r\n      this._project.projectFolder !== undefined\r\n    ) {\r\n      const prefixPaths = this.projectPath.split(\"#\");\r\n\r\n      if (prefixPaths.length > 1) {\r\n        let folderToLoadFrom: IFolder | undefined = this._project.projectFolder;\r\n\r\n        for (let i = 0; i < prefixPaths.length - 1; i++) {\r\n          if (folderToLoadFrom) {\r\n            const zipFile: IFile = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[i]);\r\n\r\n            if (!zipFile.isContentLoaded) {\r\n              await zipFile.loadContent();\r\n            }\r\n\r\n            if (zipFile.content && zipFile.content instanceof Uint8Array) {\r\n              if (!zipFile.fileContainerStorage) {\r\n                const zipStorage = new ZipStorage();\r\n\r\n                zipStorage.storagePath = zipFile.storageRelativePath + \"#\";\r\n\r\n                await zipStorage.loadFromUint8Array(zipFile.content, zipFile.name);\r\n\r\n                zipStorage.containerFile = zipFile;\r\n                zipFile.fileContainerStorage = zipStorage;\r\n              }\r\n\r\n              folderToLoadFrom = zipFile.fileContainerStorage.rootFolder;\r\n            } else {\r\n              folderToLoadFrom = undefined;\r\n            }\r\n          }\r\n        }\r\n\r\n        if (folderToLoadFrom) {\r\n          this._defaultFile = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[prefixPaths.length - 1]);\r\n\r\n          this._isFileContentProcessed = false;\r\n        } else {\r\n          Log.debugAlert(\"Unable to parse a containerized file path of '\" + this.projectPath + \"'\");\r\n          return null;\r\n        }\r\n      } else {\r\n        this._defaultFile = await this._project.projectFolder.ensureFileFromRelativePath(this.projectPath);\r\n\r\n        this._isFileContentProcessed = false;\r\n      }\r\n    }\r\n\r\n    return this._defaultFile;\r\n  }\r\n\r\n  async loadFileContent() {\r\n    if (this._isFileContentProcessed) {\r\n      return this._defaultFile;\r\n    }\r\n\r\n    if (!this._defaultFile) {\r\n      await this.ensureFileStorage();\r\n    }\r\n\r\n    const variants = this._getVariantList();\r\n\r\n    for (const variant of variants) {\r\n      await variant.ensureAndLoadFileStorage();\r\n    }\r\n\r\n    if (this._defaultFile) {\r\n      await this.loadFileStorage();\r\n    } else if (variants.length > 0 && !this._isFileContentProcessed) {\r\n      // For variant-only items (no default file), mark as processed after\r\n      // all variant files have been loaded. Without this, isContentLoaded\r\n      // stays false forever because loadFileStorage() requires _defaultFile.\r\n      this._isFileContentProcessed = true;\r\n      this._fireLoadedEvent();\r\n    }\r\n\r\n    return this._defaultFile;\r\n  }\r\n\r\n  async loadFileStorage() {\r\n    if (!this._isFileContentProcessed && this._defaultFile) {\r\n      if (this._data.creationType === ProjectItemCreationType.generated) {\r\n        await ProjectAutogeneration.updateItemAutogeneration(this, true);\r\n      } else {\r\n        if (!this._defaultFile.isContentLoaded) {\r\n          await this._defaultFile.loadContent();\r\n        }\r\n      }\r\n\r\n      await ProjectAutogeneration.updateItemAutogeneratedSideFiles(this);\r\n\r\n      this._isFileContentProcessed = true;\r\n\r\n      this._onFileRetrieved.dispatch(this, this._defaultFile);\r\n\r\n      if (this.itemType === ProjectItemType.MCWorld || this.itemType === ProjectItemType.MCTemplate) {\r\n        const mcworld = await MCWorld.ensureOnFile(this._defaultFile, this._project, this._handleMCWorldLoaded);\r\n\r\n        if (mcworld) {\r\n          this.errorMessage = mcworld.storageErrorMessage;\r\n\r\n          if (mcworld.storageErrorStatus === StorageErrorStatus.unprocessable) {\r\n            this.errorStatus = ProjectItemErrorStatus.unprocessable;\r\n          } else {\r\n            this.errorStatus = ProjectItemErrorStatus.none;\r\n          }\r\n        }\r\n      } else if (this.itemType === ProjectItemType.entityTypeBehavior) {\r\n        await EntityTypeDefinition.ensureOnFile(this._defaultFile);\r\n\r\n        this._fireLoadedEvent();\r\n      } else {\r\n        this._fireLoadedEvent();\r\n      }\r\n    }\r\n  }\r\n\r\n  async getJsonObject(): Promise<object | undefined> {\r\n    let strContent = await this.getStringContent();\r\n\r\n    if (!strContent) {\r\n      return undefined;\r\n    }\r\n\r\n    let obj = undefined;\r\n\r\n    try {\r\n      strContent = Utilities.fixJsonContent(strContent);\r\n      obj = JSON.parse(strContent);\r\n    } catch (e) {\r\n      Log.debug(\"Could not parse content '\" + strContent + \"': \" + e, this.project.name);\r\n    }\r\n\r\n    return obj;\r\n  }\r\n\r\n  async getStringContent(): Promise<string | undefined> {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent();\r\n    }\r\n\r\n    const pf = this.primaryFile;\r\n\r\n    if (!pf) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!pf.isContentLoaded) {\r\n      await pf.loadContent();\r\n    }\r\n\r\n    if (pf.content instanceof Uint8Array || pf.content === null) {\r\n      return undefined;\r\n    }\r\n\r\n    return pf.content;\r\n  }\r\n\r\n  async getContentAsJson(): Promise<any | null> {\r\n    const file = await this.loadFileContent();\r\n    return file && (await StorageUtilities.getJsonObject(file));\r\n  }\r\n\r\n  async loadContent() {\r\n    if (this.isContentLoaded) {\r\n      return true;\r\n    }\r\n\r\n    if (this._isLoading) {\r\n      const pendingLoad = this._pendingLoadRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n\r\n      return true;\r\n    } else {\r\n      this._isLoading = true;\r\n\r\n      await this.loadContentDirect();\r\n\r\n      this._isLoading = false;\r\n\r\n      const pendingLoad = this._pendingLoadRequests;\r\n      this._pendingLoadRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }\r\n\r\n  async prepareToSave() {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent();\r\n    }\r\n\r\n    await ProjectAutogeneration.updateItemAutogeneration(this);\r\n    await ProjectAutogeneration.updateItemAutogeneratedSideFiles(this);\r\n\r\n    if (\r\n      !this.isInFileContainer &&\r\n      this.isFileContainerStorageItem &&\r\n      this.primaryFile &&\r\n      this.primaryFile.fileContainerStorage &&\r\n      this.primaryFile.fileContainerStorage instanceof ZipStorage\r\n    ) {\r\n      const zs = this.primaryFile.fileContainerStorage as ZipStorage;\r\n\r\n      if (zs.isContentUpdated && (zs.errorStatus === undefined || zs.errorStatus === StorageErrorStatus.none)) {\r\n        const op = await this._project.creatorTools.notifyOperationStarted(\r\n          \"Zipping file '\" + this.primaryFile.storageRelativePath + \"'...\"\r\n        );\r\n        const bytes = await zs.generateUint8ArrayAsync();\r\n        await this._project.creatorTools.notifyOperationEnded(\r\n          op,\r\n          \"Done zipping file '\" + this.primaryFile.storageRelativePath + \"'.\"\r\n        );\r\n\r\n        this.primaryFile.setContent(bytes, FileUpdateType.versionlessEdit);\r\n      }\r\n    }\r\n  }\r\n\r\n  getJavaScriptLibTwin() {\r\n    if (!this._defaultFile) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.itemType === ProjectItemType.ts) {\r\n      const libScriptsFolder = this.project.getLibScriptsFolder();\r\n\r\n      if (!libScriptsFolder) {\r\n        return undefined;\r\n      }\r\n\r\n      const jsTwinName = StorageUtilities.canonicalizeName(\r\n        StorageUtilities.getBaseFromName(this._defaultFile.name) + \".js\"\r\n      );\r\n\r\n      return libScriptsFolder.ensureFile(jsTwinName);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getFunctionTwin() {\r\n    if (!this._defaultFile) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.itemType === ProjectItemType.actionSet) {\r\n      const functionTwinName = StorageUtilities.canonicalizeName(\r\n        StorageUtilities.getBaseFromName(this._defaultFile.name) + \".mcfunction\"\r\n      );\r\n\r\n      let functionFolder = this._defaultFile.parentFolder;\r\n\r\n      if (functionFolder.name === \"scripts\" && functionFolder.parentFolder) {\r\n        functionFolder = functionFolder.parentFolder.ensureFolder(\"functions\");\r\n      }\r\n\r\n      return functionFolder.files[functionTwinName];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async saveContent() {\r\n    if (this._defaultFile) {\r\n      await this._defaultFile.saveContent();\r\n\r\n      // these next two are associated with action set\r\n      const jsFile = this.getJavaScriptLibTwin();\r\n\r\n      if (jsFile !== undefined && jsFile.needsSave) {\r\n        await jsFile.saveContent();\r\n      }\r\n\r\n      const functionFile = this.getFunctionTwin();\r\n\r\n      if (functionFile !== undefined && functionFile.needsSave) {\r\n        await functionFile.saveContent();\r\n      }\r\n    }\r\n  }\r\n\r\n  hasTag(name: string) {\r\n    return this.tags.includes(name);\r\n  }\r\n\r\n  ensureTag(name: string) {\r\n    if (this.hasTag(name)) {\r\n      return;\r\n    }\r\n\r\n    this.tags.push(name);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { Difficulty, GameType, Generator, PlayerPermissionsLevel } from \"./WorldLevelDat\";\r\n\r\nexport enum BackupType {\r\n  none,\r\n  startStopOnly,\r\n  every5Minutes,\r\n  every2Minutes,\r\n}\r\n\r\nexport interface IPackageReference {\r\n  name: string;\r\n  hash?: string;\r\n  behaviorPackReferences: { uuid: string; version: number[]; priority?: number }[];\r\n  resourcePackReferences: { uuid: string; version: number[]; priority?: number }[];\r\n}\r\n\r\nexport interface IWorldSettings {\r\n  gameType?: GameType;\r\n  generator?: Generator;\r\n  difficulty?: Difficulty;\r\n  maxPlayerCount?: number;\r\n  cheatsEnabled?: boolean;\r\n  permissionLevel?: PlayerPermissionsLevel;\r\n  playerPermissionLevel?: PlayerPermissionsLevel;\r\n  randomSeed?: string;\r\n  worldContentPath?: string;\r\n  name?: string;\r\n  commandsEnabled?: boolean; // same as 'cheats enabled'.\r\n  backupType?: BackupType;\r\n  useCustomSettings?: boolean;\r\n  betaApisExperiment?: boolean;\r\n  lastPlayed?: bigint;\r\n  deferredTechnicalPreviewExperiment?: boolean;\r\n  isEditor?: boolean;\r\n  deployCreatorToolsInfrastructure?: boolean;\r\n  worldTemplateReferences?: IPackageReference[];\r\n  packageReferences?: IPackageReference[];\r\n  onlineMode?: boolean;\r\n  emitServerTelemetry?: boolean;\r\n  enableDebugger?: boolean;\r\n  enableDebuggerStreaming?: boolean;\r\n  /**\r\n   * When true, the world is treated as transient/ephemeral:\r\n   * - World data is not backed up on reprovisioning\r\n   * - Each deployment starts with a fresh world (no leveldb copied)\r\n   * - Useful for development scenarios where you always want a clean slate\r\n   */\r\n  transientWorld?: boolean;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\n\r\nimport LocToken from \"./LocToken\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class Lang {\r\n  private _file?: IFile;\r\n  private _containerName?: string;\r\n  private _language?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public tokens: { [name: string]: LocToken } = {};\r\n\r\n  private _onLoaded = new EventDispatcher<Lang, Lang>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get containerName() {\r\n    return this._containerName;\r\n  }\r\n\r\n  public get language() {\r\n    return this._language;\r\n  }\r\n\r\n  public getLocKeys(): string[] {\r\n    return Object.keys(this.tokens);\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<Lang, Lang>) {\r\n    let lang: Lang | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      lang = new Lang();\r\n\r\n      lang.file = file;\r\n\r\n      file.manager = lang;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof Lang) {\r\n      lang = file.manager as Lang;\r\n\r\n      if (!lang.isLoaded) {\r\n        if (loadHandler) {\r\n          lang.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await lang.load();\r\n      }\r\n    }\r\n\r\n    return lang;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    let content = this._file.content;\r\n\r\n    if (content === undefined || content === null || content instanceof Uint8Array) {\r\n      content = \"\";\r\n    }\r\n\r\n    for (const tokName in this.tokens) {\r\n      const tok = this.tokens[tokName];\r\n\r\n      if (tok && tok.isModified) {\r\n        const tokStart: number = content.indexOf(tokName + \"=\");\r\n\r\n        if (tokStart >= 0) {\r\n          const tokEndR = content.indexOf(\"\\r\", tokStart + tokName.length + 1);\r\n          let tokEnd = content.indexOf(\"\\n\", tokStart + tokName.length + 1);\r\n\r\n          if (tokEndR > tokStart && tokEndR === tokEnd - 1) {\r\n            tokEnd = tokEndR;\r\n          }\r\n\r\n          if (tokEnd < 0) {\r\n            tokEnd = content.length;\r\n          }\r\n\r\n          content = content.substring(0, tokStart + tokName.length + 1) + tok.value + content.substring(tokEnd);\r\n        } else {\r\n          // Try to insert a new token into areas that are similarly named.\r\n          const periodInName = tokName.lastIndexOf(\".\");\r\n          let wasInserted = false;\r\n\r\n          if (periodInName >= 0) {\r\n            const findSimilar: number = content.lastIndexOf(\"\\n\" + tokName.substring(0, periodInName + 1));\r\n\r\n            if (findSimilar >= 0) {\r\n              content =\r\n                content.substring(0, findSimilar + 1) +\r\n                tokName +\r\n                \"=\" +\r\n                tok.value +\r\n                \"\\n\" +\r\n                content.substring(findSimilar + 1);\r\n              wasInserted = true;\r\n            }\r\n          }\r\n\r\n          if (!wasInserted) {\r\n            content += \"\\n\" + tokName + \"=\" + tok.value;\r\n          }\r\n        }\r\n\r\n        tok.isModified = false;\r\n      }\r\n    }\r\n\r\n    return this._file.setContent(content);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    const content = this._file.content;\r\n\r\n    this._language = StorageUtilities.getBaseFromName(this._file.name);\r\n    let dir = this._file.parentFolder;\r\n\r\n    if (dir) {\r\n      if (dir.name === \"texts\" && dir.parentFolder) {\r\n        dir = dir.parentFolder;\r\n      }\r\n\r\n      if (dir.name === \"\" && !dir.parentFolder && (dir.storage as ZipStorage).name) {\r\n        this._containerName = (dir.storage as ZipStorage).name;\r\n      } else {\r\n        this._containerName = dir.name;\r\n      }\r\n    }\r\n\r\n    const lines = content.split(\"\\n\");\r\n\r\n    for (let line of lines) {\r\n      line = line.trim();\r\n      const lastEqual = line.indexOf(\"=\");\r\n\r\n      if (lastEqual > 0 && lastEqual < line.length - 1) {\r\n        const tokenName = line.substring(0, lastEqual);\r\n        let tokenVal = line.substring(lastEqual + 1);\r\n\r\n        let comment = undefined;\r\n        let lastHash = tokenVal.indexOf(\"#\");\r\n\r\n        if (lastHash >= 0) {\r\n          comment = tokenVal.substring(lastHash + 1);\r\n          tokenVal = tokenVal.substring(0, lastHash).trim();\r\n        }\r\n\r\n        if (Utilities.isUsableAsObjectKey(tokenName)) {\r\n          this.tokens[tokenName] = {\r\n            value: tokenVal,\r\n            comment: comment,\r\n            isModified: false,\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Project from \"../app/Project\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\nimport Lang from \"./Lang\";\r\nimport LocToken from \"./LocToken\";\r\n\r\nexport default class LocManager {\r\n  private _project: Project;\r\n  private _isLoaded: boolean;\r\n  private _languages: { [language: string]: Lang[] } = {};\r\n\r\n  public tokens: { [name: string]: { [locale: string]: { [packContainer: string]: LocToken } } } = {};\r\n\r\n  constructor(project: Project) {\r\n    this._project = project;\r\n    this._isLoaded = false;\r\n  }\r\n\r\n  async getTokenValue(tokenName: string) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    return this.getTokenValueOrDefault(tokenName);\r\n  }\r\n\r\n  getAllTokenKeys() {\r\n    return Object.keys(this.tokens);\r\n  }\r\n\r\n  getAllLanguages(): Lang[] {\r\n    let langs: Lang[] = [];\r\n\r\n    for (const langKey in this._languages) {\r\n      langs.push(...this._languages[langKey]);\r\n    }\r\n\r\n    return langs;\r\n  }\r\n\r\n  static canonicalizeLanguageKey(locKey: string) {\r\n    return locKey.toLowerCase().trim();\r\n  }\r\n\r\n  getEnUsLang(): Lang[] | undefined {\r\n    const primary = this._languages[\"en_us\"];\r\n\r\n    Log.assert(!!primary, \"No en-us language found.\");\r\n\r\n    return primary;\r\n  }\r\n\r\n  getNonEnUsLangs(): Lang[] {\r\n    let langs: Lang[] = [];\r\n\r\n    for (const langKey in this._languages) {\r\n      if (LocManager.canonicalizeLanguageKey(langKey) !== \"en_us\") {\r\n        langs.push(...this._languages[langKey]);\r\n      }\r\n    }\r\n\r\n    return langs;\r\n  }\r\n\r\n  getExpandedValue(tokenName: string): string {\r\n    if (!this._isLoaded) {\r\n      return tokenName;\r\n    }\r\n\r\n    const tok = this.getToken(tokenName);\r\n\r\n    if (!tok) {\r\n      return tokenName;\r\n    }\r\n\r\n    return tok.value + \" - (\" + tokenName + \")\";\r\n  }\r\n\r\n  getTokenValueOrDefault(tokenName: string): string {\r\n    if (!this._isLoaded) {\r\n      return tokenName;\r\n    }\r\n\r\n    const tok = this.getToken(tokenName);\r\n\r\n    if (!tok) {\r\n      return tokenName;\r\n    }\r\n\r\n    return tok.value;\r\n  }\r\n\r\n  getToken(tokenName: string, locale?: string, packContainer?: string): LocToken | undefined {\r\n    const tokenSets = this.tokens[tokenName];\r\n\r\n    if (tokenSets) {\r\n      if (!locale) {\r\n        locale = \"en_US\";\r\n      }\r\n\r\n      const tokenSetByLocale = tokenSets[LocManager.canonicalizeLanguageKey(locale)];\r\n\r\n      if (tokenSetByLocale) {\r\n        if (packContainer) {\r\n          return tokenSetByLocale[packContainer];\r\n        }\r\n\r\n        // return the first available token\r\n        for (const containerName in tokenSetByLocale) {\r\n          return tokenSetByLocale[containerName];\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async load(force?: boolean) {\r\n    if (this._isLoaded && !force) {\r\n      return;\r\n    }\r\n\r\n    await this._project.ensureLoadedProjectFolder();\r\n\r\n    this.tokens = {};\r\n\r\n    const itemsCopy = this._project.getItemsCopy();\r\n\r\n    for (const pi of itemsCopy) {\r\n      if (pi.itemType === ProjectItemType.lang) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const lang = await Lang.ensureOnFile(pi.primaryFile);\r\n\r\n          if (lang) {\r\n            await lang.load();\r\n\r\n            if (lang.language && lang.containerName !== undefined && Utilities.isUsableAsObjectKey(lang.language)) {\r\n              const language = LocManager.canonicalizeLanguageKey(lang.language);\r\n\r\n              if (!this._languages[language]) {\r\n                this._languages[language] = [];\r\n              }\r\n\r\n              this._languages[language].push(lang);\r\n\r\n              for (const tokenName in lang.tokens) {\r\n                if (Utilities.isUsableAsObjectKey(tokenName)) {\r\n                  if (this.tokens[tokenName] === undefined) {\r\n                    this.tokens[tokenName] = {};\r\n                  }\r\n\r\n                  if (Utilities.isUsableAsObjectKey(lang.containerName)) {\r\n                    if (this.tokens[tokenName][language] === undefined) {\r\n                      this.tokens[tokenName][language] = {};\r\n                    }\r\n\r\n                    this.tokens[tokenName][language][lang.containerName] = lang.tokens[tokenName];\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Stub telemetry service for non-vscweb builds\r\n * All methods are no-ops to ensure telemetry is disabled\r\n */\r\n\r\nimport type {\r\n  TelemetryEventName,\r\n  TelemetryPropertyKey,\r\n  TelemetryMeasurementKey,\r\n  TelemetrySeverityLevel,\r\n} from \"./TelemetryConstants\";\r\n\r\nexport interface TelemetryEvent {\r\n  name: TelemetryEventName;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  measurements?: Partial<Record<TelemetryMeasurementKey, number>>;\r\n}\r\n\r\nexport interface TelemetryException {\r\n  exception: Error;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  severityLevel?: TelemetrySeverityLevel;\r\n}\r\n\r\nexport interface TelemetryPageView {\r\n  name: string;\r\n  uri?: string;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  measurements?: Partial<Record<TelemetryMeasurementKey, number>>;\r\n}\r\n\r\nclass TelemetryStubService {\r\n  public setActiveProjectCount(_count: number): void {}\r\n  public isEnabled(): boolean {\r\n    return false;\r\n  }\r\n  public trackEvent(_event: TelemetryEvent): void {}\r\n  public trackPageView(_pageView: TelemetryPageView): void {}\r\n  public trackException(_exception: TelemetryException): void {}\r\n  public trackMetric(\r\n    _name: TelemetryMeasurementKey,\r\n    _value: number,\r\n    _properties?: Partial<Record<TelemetryPropertyKey, any>>\r\n  ): void {}\r\n  public trackTrace(\r\n    _message: string,\r\n    _severityLevel?: TelemetrySeverityLevel,\r\n    _properties?: Partial<Record<TelemetryPropertyKey, any>>\r\n  ): void {}\r\n  public flush(): void {}\r\n  public setAuthenticatedUserContext(_authenticatedUserId: string, _accountId?: string): void {}\r\n  public clearAuthenticatedUserContext(): void {}\r\n}\r\n\r\nexport default new TelemetryStubService();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"./Project\";\r\n\r\nexport default class ProjectDeploySync {\r\n  private project: Project;\r\n  private folder: IFolder;\r\n  public constructor(project: Project, folder: IFolder) {\r\n    this.project = project;\r\n    this.folder = folder;\r\n  }\r\n\r\n  async fullIngestIntoProject() {\r\n    if (!this.project.projectFolder) {\r\n      return;\r\n    }\r\n\r\n    await StorageUtilities.syncFolderTo(this.folder, this.project.projectFolder, true, true, false);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { IAnnotatedValue } from \"../core/AnnotatedValue\";\r\nimport { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport ISimpleReference from \"../dataform/ISimpleReference\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport VanillaProjectManager from \"../minecraft/VanillaProjectManager\";\r\nimport Database from \"../minecraft/Database\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\n\r\nexport default class LookupUtilities {\r\n  static blockTypeRefs: ISimpleReference[] | undefined = undefined;\r\n  static entityTypeRefs: ISimpleReference[] | undefined = undefined;\r\n  static itemTypeRefs: ISimpleReference[] | undefined = undefined;\r\n  static soundDefRefs: ISimpleReference[] | undefined = undefined;\r\n  static terrainTextureRefs: ISimpleReference[] | undefined = undefined;\r\n  static itemTextureRefs: ISimpleReference[] | undefined = undefined;\r\n\r\n  static async getLookup(lookupId: string): Promise<ISimpleReference[] | undefined> {\r\n    switch (lookupId) {\r\n      case \"blockType\":\r\n        return await this.getBlockTypeReferences();\r\n\r\n      case \"entityType\":\r\n        return await this.getEntityTypeReferences();\r\n\r\n      case \"itemType\":\r\n        return await this.getItemTypeReferences();\r\n\r\n      case \"soundDefinition\":\r\n        return await this.getSoundDefinitionReferences();\r\n\r\n      case \"terrainTexture\":\r\n        return await this.getTerrainTextureReferences();\r\n\r\n      case \"entityTypeEvents\":\r\n        break;\r\n\r\n      case \"difficulty\":\r\n        break;\r\n\r\n      case \"damageCause\":\r\n        break;\r\n\r\n      case \"lootTable\":\r\n        break;\r\n\r\n      case \"entityTypePlusVariants\":\r\n        break;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getSoundDefinitionReferences() {\r\n    if (this.soundDefRefs) {\r\n      return this.soundDefRefs;\r\n    }\r\n\r\n    const soundData = await VanillaProjectManager.getSoundDefinitionCatalog();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (soundData) {\r\n      const soundSets = soundData.getSoundDefinitionSetNameList();\r\n\r\n      if (soundSets) {\r\n        for (const soundSet of soundSets) {\r\n          refs.push({\r\n            id: soundSet,\r\n            title: Utilities.humanifyMinecraftName(soundSet),\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    this.soundDefRefs = refs;\r\n\r\n    return this.soundDefRefs;\r\n  }\r\n\r\n  static async getItemTextureReferences() {\r\n    if (this.itemTextureRefs) {\r\n      return this.itemTextureRefs;\r\n    }\r\n\r\n    const itemData = await VanillaProjectManager.getItemTexturesCatalog();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (itemData) {\r\n      const textureRefs = itemData.getTextureReferences();\r\n\r\n      if (textureRefs) {\r\n        for (const textureRef of textureRefs) {\r\n          refs.push({\r\n            id: textureRef,\r\n            title: Utilities.humanifyMinecraftName(textureRef),\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    this.itemTextureRefs = refs;\r\n\r\n    return this.itemTextureRefs;\r\n  }\r\n\r\n  static async getTerrainTextureReferences() {\r\n    if (this.terrainTextureRefs) {\r\n      return this.terrainTextureRefs;\r\n    }\r\n\r\n    const terrainData = await VanillaProjectManager.getTerrainTexturesCatalog();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (terrainData) {\r\n      const textureRefs = terrainData.getTextureReferences();\r\n\r\n      if (textureRefs) {\r\n        for (const textureRef of textureRefs) {\r\n          refs.push({\r\n            id: textureRef,\r\n            title: Utilities.humanifyMinecraftName(textureRef),\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    this.terrainTextureRefs = refs;\r\n\r\n    return this.terrainTextureRefs;\r\n  }\r\n\r\n  static async getBlockTypeReferences() {\r\n    if (this.blockTypeRefs) {\r\n      return this.blockTypeRefs;\r\n    }\r\n\r\n    const blockData = await Database.getBlocksMetadata();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (blockData && blockData.data_items) {\r\n      for (const dataItem of blockData.data_items) {\r\n        if (dataItem.name && MinecraftUtilities.isBedrockItem(dataItem.name)) {\r\n          const iconImage = MinecraftUtilities.getBlockDefaultTexturePath(dataItem.name);\r\n\r\n          refs.push({\r\n            id: dataItem.name,\r\n            title: Utilities.humanifyMinecraftName(dataItem.name),\r\n            iconImage: iconImage ? \"/res/latest/van/serve/resource_pack/\" + iconImage + \".png\" : undefined,\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    this.blockTypeRefs = refs;\r\n\r\n    return this.blockTypeRefs;\r\n  }\r\n\r\n  static async getEntityTypeReferences() {\r\n    if (this.entityTypeRefs) {\r\n      return this.entityTypeRefs;\r\n    }\r\n\r\n    const entitiesData = await Database.getEntitiesMetadata();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (entitiesData && entitiesData.data_items) {\r\n      for (const dataItem of entitiesData.data_items) {\r\n        if (dataItem.name && MinecraftUtilities.isBedrockItem(dataItem.name)) {\r\n          refs.push({\r\n            id: dataItem.name,\r\n            title: Utilities.humanifyMinecraftName(dataItem.name),\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    LookupUtilities.entityTypeRefs = refs;\r\n\r\n    return LookupUtilities.entityTypeRefs;\r\n  }\r\n\r\n  static async getItemTypeReferences() {\r\n    if (this.itemTypeRefs) {\r\n      return this.itemTypeRefs;\r\n    }\r\n\r\n    const itemsData = await Database.getItemsMetadata();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (itemsData && itemsData.data_items) {\r\n      for (const dataItem of itemsData.data_items) {\r\n        if (dataItem.name && MinecraftUtilities.isBedrockItem(dataItem.name)) {\r\n          refs.push({\r\n            id: dataItem.name,\r\n            title: Utilities.humanifyMinecraftName(dataItem.name),\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    LookupUtilities.itemTypeRefs = refs;\r\n\r\n    return LookupUtilities.itemTypeRefs;\r\n  }\r\n\r\n  static appendReferences(core: ISimpleReference[], references: ISimpleReference[] | undefined) {\r\n    if (references === undefined) {\r\n      return;\r\n    }\r\n\r\n    for (const ref of references) {\r\n      let foundRef = false;\r\n\r\n      for (const targetRef of core) {\r\n        if (targetRef.id === ref.id) {\r\n          foundRef = true;\r\n        }\r\n      }\r\n\r\n      if (!foundRef) {\r\n        core.push(ref);\r\n      }\r\n    }\r\n  }\r\n\r\n  static sortReferences(references: ISimpleReference[]) {\r\n    references.sort((a: ISimpleReference, b: ISimpleReference) => {\r\n      if (a.title && b.title) {\r\n        return a.title.localeCompare(b.title);\r\n      }\r\n\r\n      if (a.id && b.id) {\r\n        return Utilities.staticCompare(a.id.toString(), b.id.toString());\r\n      }\r\n\r\n      return 0;\r\n    });\r\n  }\r\n\r\n  static getReferencesFromAnnotatedValues(\r\n    paths: { [name: string]: IAnnotatedValue[] } | undefined,\r\n    annotationCategory?: AnnotationCategory,\r\n    description?: string,\r\n    startsWithFilter?: string\r\n  ) {\r\n    if (!paths) {\r\n      return undefined;\r\n    }\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    for (let path in paths) {\r\n      const val = paths[path];\r\n\r\n      if (path && val && (!startsWithFilter || path.startsWith(startsWithFilter))) {\r\n        if (startsWithFilter) {\r\n          path = path.substring(startsWithFilter.length);\r\n        }\r\n\r\n        for (const annotatedVal of val) {\r\n          if (annotatedVal.annotation === annotationCategory) {\r\n            simpleRefs.push({\r\n              id: path,\r\n              title: Utilities.humanifyMinecraftName(path),\r\n              description: description\r\n                ? Utilities.stringFormat(description, Utilities.humanifyMinecraftName(path))\r\n                : undefined,\r\n            });\r\n            continue;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (simpleRefs && simpleRefs.length === 0) {\r\n      return undefined;\r\n    }\r\n\r\n    return simpleRefs;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport ISimpleReference from \"../dataform/ISimpleReference\";\r\nimport FeatureDefinition from \"../minecraft/FeatureDefinition\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport LookupUtilities from \"./LookupUtilities\";\r\nimport Project from \"./Project\";\r\n\r\nexport default class ProjectLookupUtilities {\r\n  static referenceCache: { [key: string]: ISimpleReference[] | undefined } = {};\r\n  static cacheIteration: number = 0;\r\n\r\n  static async getLookup(project: Project, lookupId: string): Promise<ISimpleReference[] | undefined> {\r\n    switch (lookupId.toLowerCase()) {\r\n      case \"blocktype\":\r\n        return await this.getBlockTypeReferences(project);\r\n\r\n      case \"entitytype\":\r\n        return await this.getEntityTypeReferences(project);\r\n\r\n      case \"itemtype\":\r\n        return await this.getItemTypeReferences(project);\r\n\r\n      case \"entitytypeevents\":\r\n        break;\r\n\r\n      case \"difficulty\":\r\n        break;\r\n\r\n      case \"damagecause\":\r\n        break;\r\n\r\n      case \"loottable\":\r\n        break;\r\n\r\n      case \"sounddefinition\":\r\n        return await this.getSoundDefinitionReferences(project);\r\n\r\n      case \"itemtexture\":\r\n        return await this.getItemTextureReferences(project);\r\n\r\n      case \"terraintexture\":\r\n        return await this.getTerrainTextureReferences(project);\r\n\r\n      case \"feature\":\r\n        return await this.getFeatureReferences(project);\r\n\r\n      case \"entitytypeplusvariants\":\r\n        break;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getBlockTypeReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"blockType\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"blockType\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.blockTypeSource]),\r\n      AnnotationCategory.blockTypeSource,\r\n      \"{0} block type from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"blockType\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"blockType\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getEntityTypeReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"entityType\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"entityType\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.blockTypeSource]),\r\n      AnnotationCategory.entityTypeSource,\r\n      \"{0} entity type from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"entityType\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"entityType\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getItemTypeReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"itemType\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"itemType\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.blockTypeSource]),\r\n      AnnotationCategory.itemTypeSource,\r\n      \"{0} item type from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"itemType\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"itemType\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getSoundDefinitionReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"soundDefinition\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"soundDefinition\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.blockTypeSource]),\r\n      AnnotationCategory.blockTypeSource,\r\n      \"{0} sound from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"soundDefinition\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"soundDefinition\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getTerrainTextureReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"terrainTexture\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"terrainTexture\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.terrainTextureSource]),\r\n      AnnotationCategory.terrainTextureSource,\r\n      \"{0} terrain texture from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"terrainTexture\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"terrainTexture\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getItemTextureReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"itemTexture\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"itemTexture\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.itemTextureSource]),\r\n      AnnotationCategory.itemTextureSource,\r\n      \"{0} item texture from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"itemTexture\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"itemTexture\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getFeatureReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (ProjectLookupUtilities.referenceCache[\"feature\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"feature\"];\r\n    }\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    // Get features directly from project items\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const item of itemsCopy) {\r\n      if (item.itemType === ProjectItemType.featureBehavior) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        if (item.primaryFile) {\r\n          const featureDef = await FeatureDefinition.ensureOnFile(item.primaryFile);\r\n\r\n          if (featureDef && featureDef.id) {\r\n            simpleRefs.push({\r\n              id: featureDef.id,\r\n              description: featureDef.id + \" feature from \" + project.name,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(simpleRefs);\r\n\r\n    // Also append vanilla feature references\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"feature\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"feature\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport { ProjectInfoSuite } from \"../info/IProjectInfoData\";\r\nimport { IRelationsResultData, ISerializableInfoItem } from \"../workers/IProjectWorkerMessage\";\r\n\r\n/**\r\n * Result of combined relations + info set processing in worker.\r\n */\r\nexport interface IProcessRelationsAndInfoSetWorkerResult {\r\n  relationsApplied: boolean;\r\n  infoItems?: ProjectInfoItem[];\r\n  thumbnails?: { [projectPath: string]: string };\r\n  thumbnailLinks?: { [projectPath: string]: string };\r\n}\r\n\r\n/**\r\n * Progress callback type for worker operations.\r\n */\r\nexport type WorkerProgressCallback = (message: string, percent?: number) => void;\r\n\r\n/**\r\n * Callback when relations calculation completes (streaming).\r\n */\r\nexport type RelationsCompleteCallback = (relationsData: IRelationsResultData) => void;\r\n\r\n/**\r\n * Callback when validation completes (streaming).\r\n * Can be async to allow processing like preloading forms.\r\n */\r\nexport type ValidationCompleteCallback = (infoItems: ISerializableInfoItem[]) => void | Promise<void>;\r\n\r\n/**\r\n * Callback when a batch of thumbnails completes (streaming).\r\n */\r\nexport type ThumbnailBatchCallback = (\r\n  thumbnails: { [projectPath: string]: string },\r\n  thumbnailLinks: { [projectPath: string]: string } | undefined,\r\n  completed: number,\r\n  total: number\r\n) => void;\r\n\r\n/**\r\n * Callback when all thumbnails are finished (streaming).\r\n */\r\nexport type ThumbnailsFinishedCallback = (cancelled: boolean, totalGenerated: number) => void;\r\n\r\n/**\r\n * Streaming callbacks for combined worker operations.\r\n * Results are delivered via these callbacks as they complete,\r\n * rather than waiting for all operations to finish.\r\n */\r\nexport interface IStreamingCallbacks {\r\n  /**\r\n   * Called when relations calculation completes.\r\n   * This is the first callback to fire - allows UI to unblock early.\r\n   */\r\n  onRelationsComplete?: RelationsCompleteCallback;\r\n\r\n  /**\r\n   * Called when validation completes.\r\n   * Contains all info items (errors, warnings, recommendations).\r\n   */\r\n  onValidationComplete?: ValidationCompleteCallback;\r\n\r\n  /**\r\n   * Called when a batch of thumbnails completes.\r\n   * Thumbnails are generated in batches (default 20 at a time) to avoid blocking.\r\n   * This callback is for internal tracking only - NOT shown in user-visible progress.\r\n   */\r\n  onThumbnailBatch?: ThumbnailBatchCallback;\r\n\r\n  /**\r\n   * Called when all thumbnails have finished (or were cancelled).\r\n   */\r\n  onThumbnailsFinished?: ThumbnailsFinishedCallback;\r\n}\r\n\r\n/**\r\n * Minimal project interface for worker manager operations.\r\n * This avoids circular dependencies with the full Project class.\r\n */\r\nexport interface IProjectForWorker {\r\n  readonly name: string;\r\n  readonly projectFolder: import(\"../storage/IFolder\").default | null;\r\n  getItemsCopy(): import(\"./ProjectItem\").default[];\r\n}\r\n\r\n/**\r\n * Interface for project worker manager implementations.\r\n * This abstracts the web worker functionality so that Project.ts doesn't\r\n * have a direct dependency on the workers folder.\r\n *\r\n * Architecture notes:\r\n * - Single persistent worker instance per app\r\n * - Worker caches the project to avoid re-hydration on subsequent requests\r\n * - Results are streamed back: relations -> validation -> thumbnails (low-priority)\r\n * - Project is disposed on switch (new project) or after idle timeout (5 min)\r\n */\r\nexport interface IProjectWorkerManager {\r\n  /**\r\n   * Whether web workers are supported in the current environment\r\n   */\r\n  readonly isSupported: boolean;\r\n\r\n  /**\r\n   * Generate info set in a web worker.\r\n   * @returns Array of ProjectInfoItem if successful, undefined to fall back to main thread\r\n   */\r\n  generateInfoSetInWorker(\r\n    project: IProjectForWorker,\r\n    suite: ProjectInfoSuite,\r\n    onProgress?: WorkerProgressCallback\r\n  ): Promise<ProjectInfoItem[] | undefined>;\r\n\r\n  /**\r\n   * Process item relations AND generate info set in a single worker operation.\r\n   * Uses streaming architecture - results are delivered via callbacks as they complete:\r\n   * 1. onRelationsComplete - called as soon as relations are calculated (unblocks waiters)\r\n   * 2. onValidationComplete - called after validation finishes\r\n   * 3. onThumbnailBatch - called as thumbnail batches complete (silently in background)\r\n   * 4. onThumbnailsFinished - called when all thumbnails are done\r\n   *\r\n   * @param project The project to process\r\n   * @param suite The validation suite to run\r\n   * @param callbacks Streaming callbacks for receiving results as they complete\r\n   * @param onProgress Optional progress callback (for user-visible progress)\r\n   * @returns Promise that resolves when validation is complete (thumbnails may still be generating)\r\n   */\r\n  processRelationsAndGenerateInfoSetInWorker(\r\n    project: IProjectForWorker,\r\n    suite: ProjectInfoSuite,\r\n    callbacks?: IStreamingCallbacks,\r\n    onProgress?: WorkerProgressCallback\r\n  ): Promise<IProcessRelationsAndInfoSetWorkerResult | undefined>;\r\n\r\n  /**\r\n   * Cancel pending thumbnail generation in the worker.\r\n   * Called when switching projects to stop background thumbnail work.\r\n   */\r\n  cancelPendingThumbnails(): void;\r\n\r\n  /**\r\n   * Dispose the cached project in the worker to free memory.\r\n   * Called when switching projects or on idle timeout.\r\n   */\r\n  disposeWorkerProject(): void;\r\n\r\n  /**\r\n   * Terminate the worker.\r\n   */\r\n  terminate(): void;\r\n}\r\n\r\n/**\r\n * Singleton holder for the project worker manager instance.\r\n * This allows ProjectWorkerManager to register itself when loaded,\r\n * without Project.ts needing to import it directly.\r\n */\r\nlet _registeredWorkerManager: IProjectWorkerManager | undefined;\r\n\r\n/**\r\n * Register a project worker manager implementation.\r\n * Called by ProjectWorkerManager when it's loaded.\r\n */\r\nexport function registerProjectWorkerManager(manager: IProjectWorkerManager): void {\r\n  _registeredWorkerManager = manager;\r\n}\r\n\r\n/**\r\n * Get the registered project worker manager, if available.\r\n * Returns undefined if no worker manager has been registered or workers aren't supported.\r\n */\r\nexport function getProjectWorkerManager(): IProjectWorkerManager | undefined {\r\n  return _registeredWorkerManager;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n * ==========================================================================================\r\n * PROJECT - CORE PROJECT MANAGEMENT NOTES\r\n * ==========================================================================================\r\n *\r\n * OVERVIEW:\r\n * ---------\r\n * Project is the central class for managing a Minecraft content project. It handles:\r\n * - Project structure (behavior packs, resource packs, worlds, scripts)\r\n * - Item discovery and inference from folder structure\r\n * - Pack management (BehaviorManifest, ResourceManifest)\r\n * - Validation integration via ProjectInfoSet\r\n * - Export/deployment coordination\r\n *\r\n * PROJECT STRUCTURE:\r\n * ------------------\r\n * A project typically contains:\r\n * - behaviorPacksContainer/ - Behavior pack folders\r\n * - resourcePacksContainer/ - Resource pack folders\r\n * - worldContainer/ - World folders\r\n * - docsContainer/ - Documentation\r\n * - defaultBehaviorPackFolder, defaultResourcePackFolder - Primary packs\r\n *\r\n * KEY METHOD: _inferProjectItemsFromFolder():\r\n * -------------------------------------------\r\n * This is the monster recursive function that scans a folder tree and creates\r\n * ProjectItem objects based on file type and location. Logic includes:\r\n * - Path-based type inference (items/ folder \u2192 itemTypeBehaviorJson)\r\n * - Extension-based inference (.mcfunction, .json, .ts)\r\n * - Manifest detection for pack identification\r\n * - World detection from level.dat\r\n *\r\n * PROJECTITEM RELATIONSHIP:\r\n * -------------------------\r\n * - Project contains ProjectItem[] in #items\r\n * - Items indexed by #itemsByProjectPath (canonicalized storage path)\r\n * - Items grouped by #itemsByType for quick type lookups\r\n * - Each ProjectItem has storagePath relative to project root\r\n * - Items link to IFile via file property, with .manager for type-specific logic\r\n *\r\n * PACK MANAGEMENT:\r\n * ----------------\r\n * - #packs: Pack[] - All discovered packs (behavior, resource, skin, world)\r\n * - Pack objects wrap manifest files and provide pack-level operations\r\n * - hasMultiplePacksOfSameType affects folder structure assumptions\r\n *\r\n * VARIANTS:\r\n * ---------\r\n * - variants: { [label]: ProjectVariant } - Alternative configurations\r\n * - Used for multi-target builds (different Minecraft versions, platforms)\r\n * - ProjectItemVariantCreateManager handles variant-specific item creation\r\n *\r\n * LOADING SEQUENCE FOR EXTERNAL USERS:\r\n * ------------------------------------\r\n * 1. new Project(creatorTools, folder, prefsFile) - Basic setup\r\n * 2. loadPreferencesAndFolder() - Basic loading from prefsFile JSON (isLoaded)\r\n * 3. inferProjectItemsFromFolder() - Create ProjectItems from files.\r\n *     This is a somewhat expensive operation, and only needs to be done on\r\n *     first instantiation on a folder, or if the folder/file set structure\r\n *     changes\r\n * 4. ensureInflate() - Load file contents and initialize managers (isInflated)\r\n *\r\n * OPTIONAL ADDITION THINGS YOU SHOULD DO:\r\n * ---------------------------------------\r\n *\r\n * The web app, for example, does these asynchronously after first load.\r\n * These operations can take minutes to run, depending on project size.\r\n *\r\n * processRelations() - Build cross-item dependency graph (best done async)\r\n *\r\n *\r\n * INTERNAL FUNCTIONS\r\n * ------------------\r\n * loadFolderStructure() - Discover folder hierarchy and rough mapping\r\n *\r\n * EVENTS:\r\n * -------\r\n * - onPropertyChanged: Project metadata changed\r\n * - onLoaded: Folder structure loaded\r\n * - onInflated: All items loaded\r\n * - onItemChanged/Added/Removed: Item list modifications\r\n * - onItemContentChanged: Item file content changed\r\n * - onNeedsSaveChanged: Dirty state changed\r\n *\r\n * WORLD SETTINGS:\r\n * ---------------\r\n * - worldSettings: IWorldSettings - Default world configuration\r\n * - editorWorldSettings: Settings for Editor API worlds\r\n * - ensureWorldSettings() / ensureEditorWorldSettings() - Lazy initialization\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - ProjectItem.ts: Individual item management\r\n * - ProjectUtilities.ts: Static helper methods (moved from Project)\r\n * - ProjectExporter.ts: Export/packaging logic\r\n * - ProjectInfoSet.ts: Validation integration\r\n * - Pack.ts: Pack-level operations\r\n * - ProjectItemInference.ts: Item type inference logic\r\n *\r\n * FOLDER CONTEXTS (FolderContext enum):\r\n * -------------------------------------\r\n * Used to identify folder purpose during inference:\r\n * - behaviorPack (1), resourcePack (2), skinPack (3)\r\n * - world (5), docs (4), typeDefs (6)\r\n * - distBuildFolder (7), vscodeFolder (8)\r\n * - mctoolsWorkingFolder (13), designPack (14)\r\n *\r\n * COMMON PATTERNS:\r\n * ----------------\r\n * - Get item: project.getItemByProjectPath(storagePath)\r\n * - Get items by type: project.getItemsByType(ProjectItemType.entityTypeBehaviorJson)\r\n * - Ensure folder: project.ensureDefaultBehaviorPackFolder()\r\n * - Save project: project.save()\r\n *\r\n * ==========================================================================================\r\n */\r\n\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport CreatorTools from \"./CreatorTools\";\r\nimport IProjectData, {\r\n  ProjectEditPreference,\r\n  ProjectRole,\r\n  ProjectScriptLanguage,\r\n  ProjectScriptVersion,\r\n} from \"./IProjectData\";\r\nimport { ProjectDataType, ProjectFocus } from \"./IProjectData\";\r\nimport ProjectItem, { IProjectItemContentUpdateEvent } from \"./ProjectItem\";\r\nimport IProjectItemData, { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport Utilities from \"./../core/Utilities\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\nimport DifferenceSet from \"../storage/DifferenceSet\";\r\nimport IProjectScriptState from \"./IProjectScriptState\";\r\nimport ProjectUtilities from \"./ProjectUtilities\";\r\nimport IStorage, { IFileUpdateEvent, IFolderMove } from \"../storage/IStorage\";\r\nimport { GameType, Generator } from \"../minecraft/WorldLevelDat\";\r\nimport { BackupType } from \"../minecraft/IWorldSettings\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport LocManager from \"../minecraft/LocManager\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport ProjectUpdateRunner from \"../updates/ProjectUpdateRunner\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport InfoGeneratorTopicUtilities from \"../info/InfoGeneratorTopicUtilities\";\r\nimport GeneratorRegistrations from \"../info/registration/GeneratorRegistrations\";\r\n\r\nimport TelemetryImpl from \"../analytics/Telemetry\";\r\nimport TelemetryStub from \"../analytics/TelemetryStub\";\r\n\r\nlet telemetry = TelemetryStub;\r\n\r\n// @ts-ignore - ENABLE_ANALYTICS is injected by webpack and vite configs\r\nif (typeof ENABLE_ANALYTICS !== \"undefined\" && ENABLE_ANALYTICS === true) {\r\n  telemetry = TelemetryImpl;\r\n}\r\n\r\nimport { TelemetryEvents, TelemetryProperties } from \"../analytics/TelemetryConstants\";\r\nimport { StatusTopic, StatusType } from \"./Status\";\r\nimport { ProjectInfoSuite } from \"../info/IProjectInfoData\";\r\nimport Pack, { PackType } from \"../minecraft/Pack\";\r\nimport { IErrorable } from \"../core/IErrorable\";\r\nimport ProjectDeploySync from \"./ProjectDeploySync\";\r\nimport { CreatorToolsEditPreference, MinecraftTrack } from \"./ICreatorToolsData\";\r\nimport ProjectItemRelations from \"./ProjectItemRelations\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport ISimpleReference from \"../dataform/ISimpleReference\";\r\nimport ProjectLookupUtilities from \"./ProjectLookupUtilities\";\r\nimport ProjectVariant from \"./ProjectVariant\";\r\nimport { ProjectItemVariantType } from \"./IProjectItemVariant\";\r\nimport ProjectItemInference from \"./ProjectItemInference\";\r\nimport IVersionContent from \"../storage/IVersionContent\";\r\nimport { getProjectWorkerManager } from \"./IProjectWorkerManager\";\r\nimport { ScriptModuleInfoProvider } from \"../langcore/javascript/ScriptModuleInfo\";\r\n\r\nexport enum ProjectAutoDeploymentMode {\r\n  deployOnSave = 0,\r\n  noAutoDeployment = 1,\r\n}\r\n\r\nexport enum ProjectErrorState {\r\n  noError = 0,\r\n  projectFolderOrFileDoesNotExist = 1,\r\n  cabinetFileCouldNotBeProcessed = 2,\r\n}\r\n\r\nexport enum FolderContext {\r\n  unknown = 0,\r\n  behaviorPack = 1,\r\n  resourcePack = 2,\r\n  skinPack = 3,\r\n  docs = 4,\r\n  world = 5,\r\n  typeDefs = 6,\r\n  distBuildFolder = 7,\r\n  vscodeFolder = 8,\r\n  resourcePackSubPack = 9,\r\n  metaData = 10,\r\n  libFolder = 11,\r\n  persona = 12,\r\n  mctoolsWorkingFolder = 13,\r\n  designPack = 14,\r\n}\r\n\r\nexport const ProjectTargetStrings = [\r\n  \"<default>\",\r\n  \"Latest Minecraft Bedrock\",\r\n  \"Latest Minecraft Bedrock preview\",\r\n  \"Latest Minecraft Education\",\r\n  \"Latest Minecraft Education preview\",\r\n];\r\n\r\nexport const AUTOGENERATED_CONTENT_TOKEN = \"==== AUTOGENERATED\";\r\nexport const AUTOGENERATED_JS_SEPARATOR =\r\n  \"\\n// ===== AUTOGENERATED CONTENT ===== CONTENT AT OR BELOW THIS LINE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING\";\r\nexport const AUTOGENERATED_WHOLEFILE_JS_SEPARATOR =\r\n  \"// ===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING\";\r\nexport const AUTOGENERATED_WHOLEFILE_MCFUNCTION_SEPARATOR =\r\n  \"# ===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING\";\r\nexport const AUTOGENERATED_WHOLEFILE_GENERAL_SEPARATOR =\r\n  \"===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING\";\r\n\r\nexport const minecraftScriptModules: {\r\n  id: string;\r\n  module_name?: string;\r\n  uuid?: string;\r\n  preferredVersion: string | number[];\r\n}[] = [\r\n  {\r\n    id: \"@minecraft/server\",\r\n    module_name: \"@minecraft/server\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server\", true) || \"1.17.0-beta\",\r\n  },\r\n  {\r\n    id: \"@minecraft/server-gametest\",\r\n    module_name: \"@minecraft/server-gametest\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server-gametest\", true) || \"1.0.0-beta\",\r\n  },\r\n  {\r\n    id: \"@minecraft/server-ui\",\r\n    module_name: \"@minecraft/server-ui\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server-ui\", true) || \"1.5.0-beta\",\r\n  },\r\n  {\r\n    id: \"@minecraft/server-admin\",\r\n    module_name: \"@minecraft/server-admin\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server-admin\", true) || \"1.0.0-beta\",\r\n  },\r\n  {\r\n    id: \"@minecraft/server-net\",\r\n    module_name: \"@minecraft/server-net\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server-net\", true) || \"1.0.0-beta\",\r\n  },\r\n  {\r\n    id: \"@minecraft/server-editor\",\r\n    module_name: \"@minecraft/server-editor\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server-editor\", true) || \"0.1.0-beta\",\r\n  },\r\n];\r\n\r\nexport const remappedMinecraftScriptModules: { [oldModuleName: string]: string } = {\r\n  \"mojang-minecraft\": \"@minecraft/server\",\r\n  \"mojang-gametest\": \"@minecraft/server-gametest\",\r\n  \"mojang-minecraft-ui\": \"@minecraft/server-ui\",\r\n  \"mojang-server-admin\": \"@minecraft/server-admin\",\r\n  \"mojang-net\": \"@minecraft/server-net\",\r\n  \"@minecraft/server-editor-bindings\": \"@minecraft/server-editor\",\r\n};\r\n\r\nexport const vanillaSliceFolderSeeds = [\"vanilla\", \"chemistry\"];\r\nconst ProcessItemRelationsBatchSize = 400;\r\n\r\nexport default class Project {\r\n  #data: IProjectData;\r\n  #preferencesFile: IFile | null;\r\n  #creatorTools: CreatorTools;\r\n  loc: LocManager;\r\n  #errorState = ProjectErrorState.noError;\r\n  #errorMessage?: string | undefined;\r\n  #indevInfoSet: ProjectInfoSet | null = null;\r\n\r\n  public differencesFromGitHub?: DifferenceSet;\r\n\r\n  /** Transient action to perform after this project first opens in the editor (not persisted). */\r\n  public pendingPostCreateAction?: string;\r\n\r\n  /** Transient content definition to generate after this project first opens in the editor (not persisted). */\r\n  public pendingContentDefinition?: any;\r\n\r\n  #hasMultiplePacksOfSameType: boolean | undefined;\r\n  #relationsProcessed: boolean = false;\r\n\r\n  #folderStructureLoaded: boolean = false;\r\n  #indevInfoSetNeedsUpdating: boolean = false;\r\n\r\n  // Promise to track in-progress info set generation (allows callers to wait for existing operation)\r\n  #infoSetGenerationPromise: Promise<ProjectInfoSet> | null = null;\r\n\r\n  /**\r\n   * Debounce timer for batching external file changes.\r\n   * When files are added/removed externally (e.g., by MCP),\r\n   * we batch them into a single re-inference pass.\r\n   */\r\n  #externalChangeDebounceTimer: NodeJS.Timeout | ReturnType<typeof setTimeout> | null = null;\r\n\r\n  /** Pending external file additions, keyed by storage path */\r\n  #pendingExternalAdds: Set<string> = new Set();\r\n\r\n  /** Pending external file removals, keyed by storage path */\r\n  #pendingExternalRemoves: Set<string> = new Set();\r\n\r\n  /** Debounce time for external file changes in milliseconds */\r\n  static readonly EXTERNAL_CHANGE_DEBOUNCE_MS = 500;\r\n\r\n  #mainDeployFolder: IFolder | null = null;\r\n  #projectFolder: IFolder | null;\r\n  #projectCabinetFile: IFile | null = null;\r\n\r\n  #distBuildFolder: IFolder | null = null;\r\n  #libFolder: IFolder | null = null;\r\n\r\n  #distBuildScriptsFolder: IFolder | null = null;\r\n  #libScriptsFolder: IFolder | null = null;\r\n\r\n  docsContainer: IFolder | null;\r\n\r\n  worldContainer: IFolder | null = null;\r\n\r\n  #mainDeploySync: ProjectDeploySync | null = null;\r\n\r\n  #isDisposed: boolean = false;\r\n\r\n  behaviorPacksContainer: IFolder | null;\r\n  defaultBehaviorPackFolder: IFolder | null;\r\n\r\n  skinPacksContainer: IFolder | null;\r\n  defaultSkinPackFolder: IFolder | null;\r\n\r\n  personaPacksContainer: IFolder | null;\r\n  defaultPersonaPackFolder: IFolder | null;\r\n\r\n  designPacksContainer: IFolder | null;\r\n  defaultDesignPackFolder: IFolder | null;\r\n  projectItemAccessoryFolder: IFolder | null;\r\n\r\n  #packs: Pack[] = [];\r\n\r\n  #containerFiles: IFile[] = [];\r\n\r\n  defaultWorldFolder: IFolder | null;\r\n\r\n  #defaultScriptsFolder: IFolder | null;\r\n\r\n  resourcePacksContainer: IFolder | null;\r\n  defaultResourcePackFolder: IFolder | null;\r\n\r\n  creationTime: number;\r\n\r\n  #items: ProjectItem[];\r\n  #itemsByProjectPath: Map<string, ProjectItem | undefined> = new Map();\r\n  #itemsByType: Map<number, ProjectItem[] | undefined> = new Map();\r\n\r\n  public changedFilesSinceLastSaved: { [storagePath: string]: IFile | undefined } = {};\r\n\r\n  #isLoaded = false;\r\n  #isInflated = false;\r\n\r\n  #isProjectFolderEnsured = false;\r\n  #useProjectNameInProjectStorage = false;\r\n\r\n  #accessoryFilePaths: string[] | undefined;\r\n  #accessoryFoldersForFilePaths: IFolder[] | null = null;\r\n\r\n  #accessoryFolders: IFolder[] | null = null;\r\n\r\n  private _onPropertyChanged = new EventDispatcher<Project, string>();\r\n  private _onLoaded = new EventDispatcher<Project, Project>();\r\n  private _onInflated = new EventDispatcher<Project, Project>();\r\n  private _onSaved = new EventDispatcher<Project, Project>();\r\n  private _onNeedsSaveChanged = new EventDispatcher<Project, Project>();\r\n  private _onItemChanged = new EventDispatcher<Project, ProjectItem>();\r\n  private _onItemContentChanged = new EventDispatcher<Project, IProjectItemContentUpdateEvent>();\r\n  private _onItemAdded = new EventDispatcher<Project, ProjectItem>();\r\n  private _onItemRemoved = new EventDispatcher<Project, ProjectItem>();\r\n\r\n  #isProcessingRelations: boolean = false;\r\n  #relationsBatchOperId: number = -1;\r\n  #itemsToBeProcessed: number = 0;\r\n  #itemsProcessed: number = 0;\r\n  #pendingProcessingRelationsRequests: ((value: unknown) => void)[] = [];\r\n\r\n  public variants: { [label: string]: ProjectVariant };\r\n\r\n  hasInferredFiles = false;\r\n  #readOnlySafety = false;\r\n  #isVanillaEditSession: boolean | undefined;\r\n\r\n  get unknownFiles(): IFile[] {\r\n    return [...this._unknownFiles];\r\n  }\r\n\r\n  private _unknownFiles = new Set<IFile>();\r\n\r\n  addUnknownFile(file: IFile) {\r\n    this._unknownFiles.add(file);\r\n  }\r\n\r\n  get hasMultiplePacksOfSameType() {\r\n    if (this.#hasMultiplePacksOfSameType !== undefined) {\r\n      return this.#hasMultiplePacksOfSameType;\r\n    }\r\n\r\n    // Determine if there are multiple packs of the same type\r\n    const packTypes: number[] = [];\r\n    for (const pack of this.#packs) {\r\n      if (packTypes[pack.packType] !== undefined) {\r\n        this.#hasMultiplePacksOfSameType = true;\r\n        return true;\r\n      } else {\r\n        packTypes[pack.packType] = 1;\r\n      }\r\n    }\r\n\r\n    this.#hasMultiplePacksOfSameType = false;\r\n    return false;\r\n  }\r\n\r\n  public get readOnlySafety() {\r\n    return this.#readOnlySafety;\r\n  }\r\n\r\n  public set readOnlySafety(newReadOnly: boolean) {\r\n    this.#readOnlySafety = newReadOnly;\r\n\r\n    if (this.#projectFolder) {\r\n      this.#projectFolder.storage.readOnly = this.#readOnlySafety;\r\n    }\r\n  }\r\n\r\n  public get creatorTools() {\r\n    return this.#creatorTools;\r\n  }\r\n\r\n  /**\r\n   * Get the project data for persistence.\r\n   * This includes chat session and other project metadata.\r\n   */\r\n  public get projectData(): IProjectData {\r\n    return this.#data;\r\n  }\r\n\r\n  public get role() {\r\n    if (this.#data.role === undefined) {\r\n      return ProjectRole.general;\r\n    }\r\n\r\n    return this.#data.role;\r\n  }\r\n\r\n  public set role(newRole: ProjectRole) {\r\n    this.#data.role = newRole;\r\n  }\r\n\r\n  public get errorState() {\r\n    return this.#errorState;\r\n  }\r\n\r\n  public get errorMessage() {\r\n    return this.#errorMessage;\r\n  }\r\n\r\n  public get preferencesFile() {\r\n    return this.#preferencesFile;\r\n  }\r\n\r\n  public get accessoryFolders() {\r\n    return this.#accessoryFolders;\r\n  }\r\n\r\n  public set accessoryFolders(folders: IFolder[] | null) {\r\n    this.#accessoryFolders = folders;\r\n  }\r\n\r\n  public get accessoryFilePaths() {\r\n    return this.#accessoryFilePaths;\r\n  }\r\n\r\n  public set accessoryFilePaths(files: string[] | undefined) {\r\n    this.#accessoryFilePaths = files;\r\n  }\r\n\r\n  // This property is a maintained and updated \"in development\" info set\r\n  // that contains errors and validation information useful while a project is\r\n  // in develpoment. For other validator suites, instantiate a ProjectInfoSet\r\n  // with this project in its constructor\r\n  public get indevInfoSet() {\r\n    if (!this.#indevInfoSet) {\r\n      this.#indevInfoSet = new ProjectInfoSet(this, ProjectInfoSuite.defaultInDevelopment);\r\n    }\r\n\r\n    return this.#indevInfoSet;\r\n  }\r\n\r\n  public get collapsedStoragePaths() {\r\n    if (!this.#data.collapsedStoragePaths) {\r\n      this.#data.collapsedStoragePaths = [];\r\n    }\r\n\r\n    return this.#data.collapsedStoragePaths;\r\n  }\r\n\r\n  public set collapsedStoragePaths(newCollapsedPaths: string[]) {\r\n    this.#data.collapsedStoragePaths = newCollapsedPaths;\r\n  }\r\n\r\n  public get packs() {\r\n    return this.#packs;\r\n  }\r\n\r\n  public hasUnsavedChanges() {\r\n    for (const filePath in this.changedFilesSinceLastSaved) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public getBehaviorPackCount() {\r\n    let count = 0;\r\n    for (const projectItem of this.items) {\r\n      if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  public getResourcePackCount() {\r\n    let count = 0;\r\n\r\n    for (const projectItem of this.items) {\r\n      if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  public getIsPackFolderManaged() {\r\n    let rpCount = 0;\r\n    let bpCount = 0;\r\n\r\n    for (const projectItem of this.items) {\r\n      if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        bpCount++;\r\n      } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        rpCount++;\r\n      }\r\n    }\r\n\r\n    return bpCount < 2 && rpCount < 2;\r\n  }\r\n\r\n  public get key() {\r\n    if (this.localFilePath) {\r\n      return StorageUtilities.canonicalizePath(this.localFilePath);\r\n    }\r\n\r\n    if (this.#projectFolder) {\r\n      if (this.#projectFolder.name && this.#projectFolder.name.length > 0) {\r\n        return this.#projectFolder.name;\r\n      }\r\n\r\n      return StorageUtilities.canonicalizePath(this.#projectFolder.fullPath);\r\n    }\r\n\r\n    if (this.#preferencesFile) {\r\n      return StorageUtilities.canonicalizePath(this.#preferencesFile.name);\r\n    }\r\n\r\n    return this.title;\r\n  }\r\n\r\n  public get containerName() {\r\n    if (this.localFilePath) {\r\n      return StorageUtilities.getLeafName(this.localFilePath);\r\n    }\r\n\r\n    if (this.#projectFolder) {\r\n      if (this.#projectFolder.name && this.#projectFolder.name.length > 0) {\r\n        return this.#projectFolder.name;\r\n      }\r\n\r\n      return StorageUtilities.getLeafName(this.#projectFolder.fullPath);\r\n    }\r\n\r\n    if (this.#preferencesFile) {\r\n      return StorageUtilities.getBaseFromName(this.#preferencesFile.name);\r\n    }\r\n\r\n    return this.title;\r\n  }\r\n\r\n  public get defaultNamespace(): string | undefined {\r\n    return this.#data.defaultNamespace;\r\n  }\r\n\r\n  public get effectiveDefaultNamespace(): string {\r\n    if (this.#data.defaultNamespace || this.#data.defaultNamespace === \"\") {\r\n      return this.#data.defaultNamespace;\r\n    }\r\n\r\n    return this.effectiveShortName;\r\n  }\r\n\r\n  public set defaultNamespace(newDefaultNamespace: string | undefined) {\r\n    if (newDefaultNamespace !== this.#data.defaultNamespace) {\r\n      this.#data.defaultNamespace = newDefaultNamespace;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultNamespace\");\r\n    }\r\n  }\r\n\r\n  public get scriptEntryPoint(): string {\r\n    if (this.#data.scriptEntryPoint || this.#data.scriptEntryPoint === \"\") {\r\n      return this.#data.scriptEntryPoint;\r\n    }\r\n\r\n    return this.scriptEntryPoint;\r\n  }\r\n\r\n  public set scriptEntryPoint(newScriptEntryPoint: string) {\r\n    if (newScriptEntryPoint !== this.#data.scriptEntryPoint) {\r\n      this.#data.scriptEntryPoint = newScriptEntryPoint;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"scriptEntryPoint\");\r\n    }\r\n  }\r\n\r\n  public get worldSettings() {\r\n    return this.#data.worldSettings;\r\n  }\r\n\r\n  public get editorWorldSettings() {\r\n    return this.#data.editorWorldSettings;\r\n  }\r\n\r\n  public get isMinecraftCreator(): boolean {\r\n    return this.#data.creator?.toLowerCase() === \"minecraft\";\r\n  }\r\n\r\n  public async getLookupChoices(lookupId: string): Promise<ISimpleReference[] | undefined> {\r\n    return await ProjectLookupUtilities.getLookup(this, lookupId);\r\n  }\r\n\r\n  public ensureWorldSettings() {\r\n    if (this.#data.worldSettings === undefined) {\r\n      if (this.creatorTools.worldSettings) {\r\n        this.#data.worldSettings = this.creatorTools.worldSettings;\r\n      } else {\r\n        this.initializeWorldSettings();\r\n\r\n        if (this.#data.worldSettings === undefined) {\r\n          throw new Error();\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.#data.worldSettings;\r\n  }\r\n\r\n  public ensureEditorWorldSettings() {\r\n    if (this.#data.editorWorldSettings === undefined) {\r\n      if (this.creatorTools.editorWorldSettings) {\r\n        this.#data.editorWorldSettings = this.creatorTools.editorWorldSettings;\r\n      } else {\r\n        this.initializeEditorWorldSettings();\r\n\r\n        if (this.#data.editorWorldSettings === undefined) {\r\n          throw new Error();\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.#data.editorWorldSettings;\r\n  }\r\n\r\n  public get usesCustomWorldSettings() {\r\n    return this.#data.usesCustomWorldSettings;\r\n  }\r\n\r\n  public set usesCustomWorldSettings(newValue: boolean | undefined) {\r\n    this.#data.usesCustomWorldSettings = newValue;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this.#isLoaded;\r\n  }\r\n\r\n  public get isInflated() {\r\n    return this.#isInflated;\r\n  }\r\n\r\n  public get isRelationsProcessed() {\r\n    return this.#relationsProcessed;\r\n  }\r\n\r\n  public get distBuildFolder() {\r\n    return this.#distBuildFolder;\r\n  }\r\n\r\n  public set distBuildFolder(folder: IFolder | null) {\r\n    this.#distBuildFolder = folder;\r\n  }\r\n\r\n  public get libFolder() {\r\n    return this.#libFolder;\r\n  }\r\n\r\n  public set libFolder(folder: IFolder | null) {\r\n    this.#libFolder = folder;\r\n  }\r\n\r\n  public get distScriptsFolder() {\r\n    return this.#distBuildScriptsFolder;\r\n  }\r\n\r\n  public get libScriptsFolder() {\r\n    return this.#libScriptsFolder;\r\n  }\r\n\r\n  public get useProjectNameInRootProjectStorage() {\r\n    return this.#useProjectNameInProjectStorage;\r\n  }\r\n\r\n  public set useProjectNameInRootProjectStorage(newVal: boolean) {\r\n    this.#useProjectNameInProjectStorage = newVal;\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onInflated() {\r\n    return this._onInflated.asEvent();\r\n  }\r\n\r\n  public get onSaved() {\r\n    return this._onSaved.asEvent();\r\n  }\r\n\r\n  public get onNeedsSaveChanged() {\r\n    return this._onNeedsSaveChanged.asEvent();\r\n  }\r\n\r\n  public get onItemChanged() {\r\n    return this._onItemChanged.asEvent();\r\n  }\r\n\r\n  public get onItemContentChanged() {\r\n    return this._onItemContentChanged.asEvent();\r\n  }\r\n\r\n  public get onItemAdded() {\r\n    return this._onItemAdded.asEvent();\r\n  }\r\n\r\n  public get onItemRemoved() {\r\n    return this._onItemRemoved.asEvent();\r\n  }\r\n\r\n  get projectFolderTitle(): string | undefined {\r\n    return this.#data.projectFolderTitle;\r\n  }\r\n\r\n  set projectFolderTitle(newTitle: string | undefined) {\r\n    this.#data.projectFolderTitle = newTitle;\r\n  }\r\n\r\n  get projectFolder(): IFolder | null {\r\n    return this.#projectFolder;\r\n  }\r\n\r\n  get accessoryFoldersForFilePaths(): IFolder[] | null {\r\n    return this.#accessoryFoldersForFilePaths;\r\n  }\r\n\r\n  get localFolderPath(): string | undefined {\r\n    return this.#data.localFolderPath;\r\n  }\r\n\r\n  set localFolderPath(newPath: string | undefined) {\r\n    this.#data.localFolderPath = newPath;\r\n  }\r\n\r\n  get mainDeployFolderPath(): string | undefined {\r\n    return this.#data.mainDeployFolderPath;\r\n  }\r\n\r\n  set mainDeployFolderPath(newPath: string | undefined) {\r\n    this.#data.mainDeployFolderPath = newPath;\r\n  }\r\n\r\n  get localFilePath(): string | undefined {\r\n    return this.#data.localFilePath;\r\n  }\r\n\r\n  set localFilePath(newPath: string | undefined) {\r\n    this.#data.localFilePath = newPath;\r\n  }\r\n\r\n  get items(): ProjectItem[] {\r\n    return this.#items;\r\n  }\r\n\r\n  get gitHubReferences() {\r\n    if (this.#data.gitHubReferences === undefined) {\r\n      this.#data.gitHubReferences = [];\r\n    }\r\n\r\n    return this.#data.gitHubReferences;\r\n  }\r\n\r\n  async getBehaviorPackScriptsFolder() {\r\n    const bpFolder = await this.ensureDefaultBehaviorPackFolder();\r\n\r\n    return bpFolder.folders[\"scripts\"];\r\n  }\r\n\r\n  async ensureBehaviorPackScriptsFolder() {\r\n    const bpFolder = await this.ensureDefaultBehaviorPackFolder();\r\n\r\n    return bpFolder.ensureFolder(\"scripts\");\r\n  }\r\n\r\n  async getMainScriptsFolder() {\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    return this.#projectFolder.folders[\"scripts\"];\r\n  }\r\n\r\n  async ensureProjectItemAccessoryFolder() {\r\n    if (this.projectItemAccessoryFolder) {\r\n      return this.projectItemAccessoryFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    const defaultDesignFolder = await this.ensureDefaultDesignPackFolder();\r\n\r\n    this.projectItemAccessoryFolder = defaultDesignFolder.ensureFolder(\"project_item_data\");\r\n\r\n    return this.projectItemAccessoryFolder;\r\n  }\r\n\r\n  async ensureMainScriptsFolder() {\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    return this.#projectFolder.ensureFolder(\"scripts\");\r\n  }\r\n\r\n  async ensureScriptGenFolder() {\r\n    const scriptsFolder = await this.ensureMainScriptsFolder();\r\n\r\n    if (!scriptsFolder) {\r\n      throw new Error(\"Unexpectedly could not create a main scripts folder\");\r\n    }\r\n\r\n    return scriptsFolder.ensureFolder(\"_gen\");\r\n  }\r\n\r\n  get preferredScriptLanguage() {\r\n    if (\r\n      this.#data.preferredScriptLanguage === undefined ||\r\n      this.#data.preferredScriptLanguage === ProjectScriptLanguage.typeScript\r\n    ) {\r\n      return ProjectScriptLanguage.typeScript;\r\n    }\r\n\r\n    return this.#data.preferredScriptLanguage;\r\n  }\r\n\r\n  set preferredScriptLanguage(newLanguage: ProjectScriptLanguage) {\r\n    this.#data.preferredScriptLanguage = newLanguage;\r\n  }\r\n\r\n  get scriptVersion() {\r\n    if (this.#data.scriptVersion === undefined) {\r\n      return ProjectScriptVersion.latestStable;\r\n    }\r\n\r\n    return this.#data.scriptVersion;\r\n  }\r\n\r\n  get messages() {\r\n    return this.#data.messages;\r\n  }\r\n\r\n  set scriptVersion(newVersion: ProjectScriptVersion) {\r\n    this.#data.scriptVersion = newVersion;\r\n  }\r\n\r\n  get effectiveEditPreference() {\r\n    if (this.editPreference === ProjectEditPreference.default || !this.editPreference) {\r\n      if (this.creatorTools.editPreference === CreatorToolsEditPreference.raw) {\r\n        return ProjectEditPreference.raw;\r\n      } else if (this.creatorTools.editPreference === CreatorToolsEditPreference.editors) {\r\n        return ProjectEditPreference.editors;\r\n      } else if (this.creatorTools.editPreference === CreatorToolsEditPreference.summarized) {\r\n        if (this.isVanillaEditSession) {\r\n          return ProjectEditPreference.editors;\r\n        }\r\n        return ProjectEditPreference.summarized;\r\n      }\r\n\r\n      return ProjectEditPreference.editors;\r\n    }\r\n\r\n    return this.editPreference;\r\n  }\r\n\r\n  get editPreference() {\r\n    if (this.#data.editPreference === undefined) {\r\n      return ProjectEditPreference.default;\r\n    }\r\n\r\n    return this.#data.editPreference;\r\n  }\r\n\r\n  set editPreference(newEditPreference: ProjectEditPreference) {\r\n    this.#data.editPreference = newEditPreference;\r\n  }\r\n\r\n  get contentsModified() {\r\n    let val = this.#data.contentsModified;\r\n\r\n    if (val === null) {\r\n      return null;\r\n    }\r\n\r\n    if (!(val instanceof Date)) {\r\n      val = new Date(val);\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  get created() {\r\n    let val = this.#data.created;\r\n\r\n    if (!val) {\r\n      return null;\r\n    }\r\n\r\n    if (!(val instanceof Date)) {\r\n      val = new Date(val);\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  set created(value: Date | null) {\r\n    this.#data.created = value;\r\n  }\r\n\r\n  get lastOpened() {\r\n    let val = this.#data.lastOpened;\r\n\r\n    if (!val) {\r\n      return null;\r\n    }\r\n\r\n    if (!(val instanceof Date)) {\r\n      val = new Date(val);\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  set lastOpened(value: Date | null) {\r\n    this.#data.lastOpened = value;\r\n  }\r\n\r\n  getItemsCopy(): ProjectItem[] {\r\n    return this.#items.slice();\r\n  }\r\n\r\n  getItemsByType(itemType: ProjectItemType): ProjectItem[] {\r\n    let itemsByTypeArr: ProjectItem[] | undefined = this.#itemsByType.get(itemType);\r\n\r\n    if (itemsByTypeArr) {\r\n      return itemsByTypeArr;\r\n    }\r\n\r\n    itemsByTypeArr = [];\r\n\r\n    for (const item of this.#items) {\r\n      if (item.itemType === itemType) {\r\n        itemsByTypeArr.push(item);\r\n      }\r\n    }\r\n\r\n    this.#itemsByType.set(itemType, itemsByTypeArr);\r\n\r\n    return itemsByTypeArr;\r\n  }\r\n\r\n  public initializeWorldSettings() {\r\n    if (this.#data.worldSettings === undefined) {\r\n      this.#data.worldSettings = {\r\n        gameType: GameType.creative,\r\n        generator: Generator.infinite,\r\n        randomSeed: \"2000\",\r\n        isEditor: false,\r\n        backupType: BackupType.every5Minutes,\r\n        useCustomSettings: false,\r\n      };\r\n\r\n      this.ensureDefaultWorldName();\r\n    }\r\n  }\r\n\r\n  private ensureDefaultWorldName() {\r\n    if (this.worldSettings && this.worldSettings.name === undefined) {\r\n      this.worldSettings.name = this.name + \" \" + Utilities.getDateStr(new Date());\r\n    }\r\n  }\r\n\r\n  public initializeEditorWorldSettings() {\r\n    if (this.#data.editorWorldSettings === undefined) {\r\n      this.#data.editorWorldSettings = {\r\n        gameType: GameType.creative,\r\n        generator: Generator.infinite,\r\n        randomSeed: \"2000\",\r\n        isEditor: true,\r\n        backupType: BackupType.every5Minutes,\r\n        useCustomSettings: false,\r\n      };\r\n\r\n      this.ensureDefaultEditorWorldName();\r\n    }\r\n  }\r\n\r\n  private ensureDefaultEditorWorldName() {\r\n    if (this.editorWorldSettings && this.editorWorldSettings.name === undefined) {\r\n      this.editorWorldSettings.name = this.name + \" \" + Utilities.getDateStr(new Date());\r\n\r\n      this.save();\r\n    }\r\n  }\r\n\r\n  public addMessage(message: string, context?: string, operation?: string, type?: StatusType, topic?: StatusTopic) {\r\n    if (this.#data.messages === undefined) {\r\n      this.#data.messages = [];\r\n    }\r\n\r\n    if (type === undefined) {\r\n      type = StatusType.message;\r\n    }\r\n\r\n    const messageCanon = message.trim().toLowerCase();\r\n\r\n    if (messageCanon.length > 1) {\r\n      const status = {\r\n        time: new Date(),\r\n        message: message,\r\n        context: context,\r\n        operation: operation,\r\n        topic: topic,\r\n        type: type,\r\n      };\r\n\r\n      this.#data.messages.push(status);\r\n    }\r\n  }\r\n\r\n  public appendErrors(errorable: IErrorable, operation?: string) {\r\n    if (!errorable.errorMessages) {\r\n      return;\r\n    }\r\n\r\n    for (const err of errorable.errorMessages) {\r\n      this.creatorTools.notifyStatusUpdate(err.message, StatusTopic.general);\r\n\r\n      this.addMessage(err.message, err.context, operation, StatusType.message);\r\n    }\r\n  }\r\n\r\n  removeItem(item: ProjectItem) {\r\n    const newArr: ProjectItem[] = [];\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      if (this.items[i] !== item) {\r\n        newArr.push(this.items[i]);\r\n      }\r\n    }\r\n    const path = ProjectUtilities.canonicalizeStoragePath(item.projectPath);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(path)) {\r\n      return;\r\n    }\r\n\r\n    this.#itemsByProjectPath.delete(path);\r\n    this.#itemsByType.delete(item.itemType);\r\n\r\n    this.#items = newArr;\r\n\r\n    const newDataArr: IProjectItemData[] = [];\r\n\r\n    for (let i = 0; i < this.#data.items.length; i++) {\r\n      if (this.#data.items[i].projectPath !== item.projectPath) {\r\n        newDataArr.push(this.#data.items[i]);\r\n      }\r\n    }\r\n\r\n    this.#data.items = newDataArr;\r\n    this.#indevInfoSetNeedsUpdating = true;\r\n\r\n    this._onItemRemoved.dispatch(this, item);\r\n  }\r\n\r\n  updateContentsModified() {\r\n    this.#data.contentsModified = new Date();\r\n  }\r\n\r\n  get modified(): Date | null {\r\n    if (this.#preferencesFile != null && this.#preferencesFile.latestModified != null) {\r\n      if (this.contentsModified != null && this.contentsModified > this.#preferencesFile.latestModified) {\r\n        return this.contentsModified;\r\n      }\r\n\r\n      return this.#preferencesFile.latestModified;\r\n    } else {\r\n      return this.contentsModified;\r\n    }\r\n  }\r\n\r\n  get effectiveShowHiddenItems() {\r\n    if (\r\n      this.#data.showHiddenItems === true ||\r\n      this.effectiveEditPreference === ProjectEditPreference.raw ||\r\n      this.effectiveEditPreference === ProjectEditPreference.editors\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  get showDevFiles() {\r\n    return this.#data.showDevFiles === true;\r\n  }\r\n\r\n  set showDevFiles(show: boolean) {\r\n    if (show !== this.showDevFiles) {\r\n      this.#data.showDevFiles = show;\r\n      this._onPropertyChanged.dispatch(this, \"showDevFiles\");\r\n    }\r\n  }\r\n\r\n  get showHiddenItems() {\r\n    if (this.#data.showHiddenItems === true) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  set showHiddenItems(showItems: boolean) {\r\n    if (showItems !== this.showHiddenItems) {\r\n      this.#data.showHiddenItems = showItems;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"showHiddenItems\");\r\n    }\r\n  }\r\n\r\n  get showFunctions() {\r\n    if (this.#data.showFunctions === undefined) {\r\n      return true;\r\n    }\r\n\r\n    return this.#data.showFunctions;\r\n  }\r\n\r\n  set showFunctions(showFunctions: boolean) {\r\n    if (showFunctions !== this.showFunctions) {\r\n      this.#data.showFunctions = showFunctions;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"showFunctions\");\r\n    }\r\n  }\r\n\r\n  get showAssets() {\r\n    if (this.#data.showAssets === undefined) {\r\n      return true;\r\n    }\r\n\r\n    return this.#data.showAssets;\r\n  }\r\n\r\n  set showAssets(showAssets: boolean) {\r\n    if (showAssets !== this.showAssets) {\r\n      this.#data.showAssets = showAssets;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"showAssets\");\r\n    }\r\n  }\r\n\r\n  get showTypes() {\r\n    if (this.#data.showTypes === undefined) {\r\n      return true;\r\n    }\r\n\r\n    return this.#data.showTypes;\r\n  }\r\n\r\n  set showTypes(showTypes: boolean) {\r\n    if (showTypes !== this.showTypes) {\r\n      this.#data.showTypes = showTypes;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"showTypes\");\r\n    }\r\n  }\r\n\r\n  get name(): string {\r\n    return this.#data.name;\r\n  }\r\n\r\n  get simplifiedName() {\r\n    return ProjectUtilities.getSimplifiedProjectName(this.#data.name);\r\n  }\r\n\r\n  set name(newName: string) {\r\n    this.#data.name = newName;\r\n  }\r\n\r\n  get lastMapDeployedHash(): string | undefined {\r\n    return this.#data.lastMapDeployedHash;\r\n  }\r\n\r\n  get lastMapDeployedDate(): Date | undefined {\r\n    return this.#data.lastMapDeployedDate;\r\n  }\r\n\r\n  set lastMapDeployedHash(newValue: string | undefined) {\r\n    this.#data.lastMapDeployedHash = newValue;\r\n  }\r\n\r\n  set lastMapDeployedDate(newValue: Date | undefined) {\r\n    this.#data.lastMapDeployedDate = newValue;\r\n  }\r\n\r\n  get deployWorldId(): string {\r\n    if (!this.#data.deployWorldId) {\r\n      this.#data.deployWorldId = Utilities.createUuid();\r\n    }\r\n\r\n    return this.#data.deployWorldId;\r\n  }\r\n\r\n  set deployWorldId(newValue: string) {\r\n    this.#data.deployWorldId = newValue;\r\n  }\r\n\r\n  get previewImageBase64(): string | undefined {\r\n    return this.#data.previewImageBase64;\r\n  }\r\n\r\n  set previewImageBase64(newValue: string | undefined) {\r\n    this.#data.previewImageBase64 = newValue;\r\n  }\r\n\r\n  get effectiveCreator(): string {\r\n    if (this.#data.creator && this.#data.creator.length > 0) {\r\n      return this.#data.creator;\r\n    }\r\n\r\n    if (this.creatorTools.creator && this.creatorTools.creator.length > 0) {\r\n      return this.creatorTools.creator;\r\n    }\r\n\r\n    return \"contoso\";\r\n  }\r\n\r\n  get effectiveShortName(): string {\r\n    if (this.#data.shortName && this.#data.shortName.length > 0) {\r\n      return this.#data.shortName;\r\n    }\r\n    if (this.effectiveCreator.length > 0 && this.#data.name && this.#data.name.length > 0) {\r\n      return ProjectUtilities.getSuggestedProjectShortName(this.effectiveCreator, this.#data.name);\r\n    }\r\n\r\n    return \"cont_game\";\r\n  }\r\n\r\n  get shortName(): string | undefined {\r\n    return this.#data.shortName;\r\n  }\r\n\r\n  set shortName(newShortName: string | undefined) {\r\n    if (this.#data.shortName !== newShortName) {\r\n      this.#data.shortName = newShortName;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"shortName\");\r\n    }\r\n  }\r\n\r\n  get creator(): string | undefined {\r\n    return this.#data.creator;\r\n  }\r\n\r\n  set creator(newCreator: string | undefined) {\r\n    if (this.#data.creator !== newCreator) {\r\n      this.#data.creator = newCreator;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"creator\");\r\n    }\r\n  }\r\n\r\n  get title(): string {\r\n    if (this.#data.title) {\r\n      return this.#data.title;\r\n    }\r\n\r\n    return this.name;\r\n  }\r\n\r\n  set title(newTitle: string) {\r\n    if (this.#data.title !== newTitle) {\r\n      this.#data.title = newTitle;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"title\");\r\n    }\r\n  }\r\n\r\n  get track(): MinecraftTrack | undefined {\r\n    return this.#data.track;\r\n  }\r\n\r\n  set track(newTrack: MinecraftTrack | undefined) {\r\n    if (newTrack !== this.#data.track) {\r\n      this.#data.track = newTrack;\r\n      this._onPropertyChanged.dispatch(this, \"track\");\r\n    }\r\n  }\r\n\r\n  get effectiveTrack(): MinecraftTrack {\r\n    if (this.#data.track !== undefined) {\r\n      return this.#data.track;\r\n    }\r\n\r\n    return this.#creatorTools.effectiveTrack;\r\n  }\r\n\r\n  set originalFullPath(newOriginalPath: string | undefined) {\r\n    if (this.#data.originalFullPath !== newOriginalPath) {\r\n      this.#data.originalFullPath = newOriginalPath;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalFullPath\");\r\n    }\r\n  }\r\n\r\n  get originalFullPath(): string | undefined {\r\n    return this.#data.originalFullPath;\r\n  }\r\n\r\n  set originalFileList(newFileList: string[] | undefined) {\r\n    if (this.#data.originalFileList !== newFileList) {\r\n      this.#data.originalFileList = newFileList;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalFileList\");\r\n    }\r\n  }\r\n\r\n  get originalFileList(): string[] | undefined {\r\n    return this.#data.originalFileList;\r\n  }\r\n\r\n  set originalGitHubOwner(newGitHubOwner: string | undefined) {\r\n    if (this.#data.originalGitHubOwner !== newGitHubOwner) {\r\n      this.#data.originalGitHubOwner = newGitHubOwner;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalGitHubOwner\");\r\n    }\r\n  }\r\n\r\n  set originalGalleryId(newGalleryId: string | undefined) {\r\n    if (this.#data.originalGalleryId !== newGalleryId) {\r\n      this.#data.originalGalleryId = newGalleryId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalGalleryId\");\r\n    }\r\n  }\r\n\r\n  get originalGalleryId(): string | undefined {\r\n    return this.#data.originalGalleryId;\r\n  }\r\n\r\n  set originalSampleId(newSampleId: string | undefined) {\r\n    if (this.#data.originalSampleId !== newSampleId) {\r\n      this.#data.originalSampleId = newSampleId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalSampleId\");\r\n    }\r\n  }\r\n\r\n  get originalSampleId(): string | undefined {\r\n    return this.#data.originalSampleId;\r\n  }\r\n\r\n  get originalGitHubOwner(): string | undefined {\r\n    return this.#data.originalGitHubOwner;\r\n  }\r\n\r\n  set originalGitHubFolder(newGitHubFolder: string | undefined) {\r\n    if (this.#data.originalGitHubFolder !== newGitHubFolder) {\r\n      this.#data.originalGitHubFolder = newGitHubFolder;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalGitHubFolder\");\r\n    }\r\n  }\r\n\r\n  get originalGitHubFolder(): string | undefined {\r\n    return this.#data.originalGitHubFolder;\r\n  }\r\n\r\n  set originalGitHubRepoName(newGitHubRepoName: string | undefined) {\r\n    if (this.#data.originalGitHubRepoName !== newGitHubRepoName) {\r\n      this.#data.originalGitHubRepoName = newGitHubRepoName;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalGitHubRepoName\");\r\n    }\r\n  }\r\n\r\n  get originalGitHubRepoName(): string | undefined {\r\n    return this.#data.originalGitHubRepoName;\r\n  }\r\n\r\n  set originalGitHubBranch(newGitHubBranch: string | undefined) {\r\n    if (this.#data.originalGitHubBranch !== newGitHubBranch) {\r\n      this.#data.originalGitHubBranch = newGitHubBranch;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalGitHubBranch\");\r\n    }\r\n  }\r\n\r\n  get originalGitHubBranch(): string | undefined {\r\n    return this.#data.originalGitHubBranch;\r\n  }\r\n\r\n  set gitHubOwner(newGitHubOwner: string | undefined) {\r\n    if (this.#data.gitHubOwner !== newGitHubOwner) {\r\n      this.#data.gitHubOwner = newGitHubOwner;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"gitHubOwner\");\r\n    }\r\n  }\r\n\r\n  get gitHubOwner(): string | undefined {\r\n    return this.#data.gitHubOwner;\r\n  }\r\n\r\n  set gitHubFolder(newGitHubFolder: string | undefined) {\r\n    if (this.#data.gitHubFolder !== newGitHubFolder) {\r\n      this.#data.gitHubFolder = newGitHubFolder;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"gitHubFolder\");\r\n    }\r\n  }\r\n\r\n  get gitHubFolder(): string | undefined {\r\n    return this.#data.gitHubFolder;\r\n  }\r\n\r\n  set gitHubRepoName(newGitHubRepoName: string | undefined) {\r\n    if (this.#data.gitHubRepoName !== newGitHubRepoName) {\r\n      this.#data.gitHubRepoName = newGitHubRepoName;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"gitHubRepoName\");\r\n    }\r\n  }\r\n\r\n  get gitHubRepoName(): string | undefined {\r\n    return this.#data.gitHubRepoName;\r\n  }\r\n\r\n  set gitHubBranch(newGitHubBranch: string | undefined) {\r\n    if (this.#data.gitHubBranch !== newGitHubBranch) {\r\n      this.#data.gitHubBranch = newGitHubBranch;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"gitHubBranch\");\r\n    }\r\n  }\r\n\r\n  get gitHubBranch(): string | undefined {\r\n    return this.#data.gitHubBranch;\r\n  }\r\n\r\n  get description(): string {\r\n    return this.#data.description;\r\n  }\r\n\r\n  set description(newDescription: string) {\r\n    if (this.#data.description !== newDescription) {\r\n      this.#data.description = newDescription;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"description\");\r\n    }\r\n  }\r\n\r\n  public async applyDescription(newTitle: string) {\r\n    this.title = newTitle;\r\n\r\n    if (this.editPreference === ProjectEditPreference.summarized && this.defaultBehaviorPackUniqueId) {\r\n      for (const projectItem of this.items) {\r\n        const itemFile = projectItem.primaryFile;\r\n\r\n        if (itemFile && projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const manifestJson = await BehaviorManifestDefinition.ensureOnFile(itemFile);\r\n\r\n          if (\r\n            manifestJson &&\r\n            manifestJson.definition &&\r\n            Utilities.uuidEqual(manifestJson.definition.header.uuid, this.defaultBehaviorPackUniqueId)\r\n          ) {\r\n            const header = manifestJson.ensureHeader(this.title, this.description);\r\n\r\n            header.name = newTitle;\r\n\r\n            await manifestJson.save();\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  get autoDeploymentMode(): ProjectAutoDeploymentMode {\r\n    if (this.#data.autoDeploymentMode === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.#data.autoDeploymentMode as ProjectAutoDeploymentMode;\r\n  }\r\n\r\n  set autoDeploymentMode(newMode: ProjectAutoDeploymentMode) {\r\n    if (this.#data.autoDeploymentMode !== newMode) {\r\n      this.#data.autoDeploymentMode = newMode;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"autoDeploymentMode\");\r\n    }\r\n  }\r\n\r\n  get versionAsArray(): number[] {\r\n    let vmj = this.#data.versionMajor;\r\n    if (vmj === undefined) {\r\n      vmj = 0;\r\n    }\r\n\r\n    let vmi = this.#data.versionMinor;\r\n    if (vmi === undefined) {\r\n      vmi = 0;\r\n    }\r\n\r\n    let vmp = this.#data.versionPatch;\r\n    if (vmp === undefined) {\r\n      vmp = 0;\r\n    }\r\n\r\n    return [vmj, vmi, vmp];\r\n  }\r\n\r\n  get versionAsString(): string {\r\n    let vmj = this.#data.versionMajor;\r\n    if (vmj === undefined) {\r\n      vmj = 0;\r\n    }\r\n\r\n    let vmi = this.#data.versionMinor;\r\n    if (vmi === undefined) {\r\n      vmi = 0;\r\n    }\r\n\r\n    let vmp = this.#data.versionPatch;\r\n    if (vmp === undefined) {\r\n      vmp = 0;\r\n    }\r\n\r\n    return vmj + \".\" + vmi + \".\" + vmp;\r\n  }\r\n\r\n  get versionMajor(): number | undefined {\r\n    return this.#data.versionMajor;\r\n  }\r\n\r\n  set versionMajor(newVersion: number | undefined) {\r\n    if (this.#data.versionMajor !== newVersion) {\r\n      this.#data.versionMajor = newVersion;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"versionMajor\");\r\n    }\r\n  }\r\n\r\n  get versionMinor(): number | undefined {\r\n    return this.#data.versionMinor;\r\n  }\r\n\r\n  set versionMinor(newVersion: number | undefined) {\r\n    if (this.#data.versionMinor !== newVersion) {\r\n      this.#data.versionMinor = newVersion;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"versionMinor\");\r\n    }\r\n  }\r\n\r\n  get versionPatch(): number | undefined {\r\n    return this.#data.versionPatch;\r\n  }\r\n\r\n  set versionPatch(newVersion: number | undefined) {\r\n    if (this.#data.versionPatch !== newVersion) {\r\n      this.#data.versionPatch = newVersion;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"versionPatch\");\r\n    }\r\n  }\r\n\r\n  get defaultResourcePackUniqueId(): string {\r\n    return this.#data.defaultResourcePackUniqueId;\r\n  }\r\n\r\n  set defaultResourcePackUniqueId(newId: string) {\r\n    if (this.#data.defaultResourcePackUniqueId !== newId) {\r\n      this.#data.defaultResourcePackUniqueId = newId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultResourcePackUniqueId\");\r\n    }\r\n  }\r\n\r\n  async setDefaultResourcePackUniqueIdAndUpdateDependencies(newId: string) {\r\n    if (this.#data.defaultResourcePackUniqueId !== newId) {\r\n      const oldId = this.#data.defaultResourcePackUniqueId;\r\n\r\n      this.#data.defaultResourcePackUniqueId = newId;\r\n\r\n      if (oldId && oldId.length > 4) {\r\n        await ResourceManifestDefinition.setNewResourcePackId(this, newId, oldId);\r\n      }\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultResourcePackUniqueId\");\r\n    }\r\n  }\r\n\r\n  get defaultResourcePackVersion(): number[] {\r\n    if (this.#data.defaultResourcePackVersion === undefined) {\r\n      const vMajor = this.versionMajor ? this.versionMajor : 0;\r\n      const vMinor = this.versionMinor ? this.versionMinor : 0;\r\n      const vPatch = this.versionPatch ? this.versionPatch : 1;\r\n\r\n      return [vMajor, vMinor, vPatch];\r\n    }\r\n\r\n    return this.#data.defaultResourcePackVersion;\r\n  }\r\n\r\n  set defaultResourcePackVersion(newVersion: number[]) {\r\n    if (this.#data.defaultResourcePackVersion !== newVersion) {\r\n      this.#data.defaultResourcePackVersion = newVersion;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultResourcePackVersion\");\r\n    }\r\n  }\r\n\r\n  get defaultBehaviorPackUniqueId(): string {\r\n    return this.#data.defaultBehaviorPackUniqueId;\r\n  }\r\n\r\n  set defaultBehaviorPackUniqueId(newId: string) {\r\n    if (this.#data.defaultBehaviorPackUniqueId !== newId) {\r\n      this.#data.defaultBehaviorPackUniqueId = newId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultBehaviorPackUniqueId\");\r\n    }\r\n  }\r\n\r\n  async setDefaultBehaviorPackUniqueIdAndUpdateDependencies(newId: string) {\r\n    if (this.#data.defaultBehaviorPackUniqueId !== newId) {\r\n      const oldId = this.#data.defaultBehaviorPackUniqueId;\r\n      this.#data.defaultBehaviorPackUniqueId = newId;\r\n\r\n      if (oldId && oldId.length > 4) {\r\n        await BehaviorManifestDefinition.setNewBehaviorPackId(this, newId, oldId);\r\n      }\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultBehaviorPackUniqueId\");\r\n    }\r\n  }\r\n\r\n  get defaultBehaviorPackVersion(): number[] {\r\n    if (this.#data.defaultBehaviorPackVersion === undefined) {\r\n      const vMajor = this.versionMajor ? this.versionMajor : 0;\r\n      const vMinor = this.versionMinor ? this.versionMinor : 0;\r\n      const vPatch = this.versionPatch ? this.versionPatch : 1;\r\n\r\n      return [vMajor, vMinor, vPatch];\r\n    }\r\n\r\n    return this.#data.defaultBehaviorPackVersion;\r\n  }\r\n\r\n  set defaultBehaviorPackVersion(newVersion: number[]) {\r\n    if (this.#data.defaultBehaviorPackVersion !== newVersion) {\r\n      this.#data.defaultBehaviorPackVersion = newVersion;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultBehaviorPackVersion\");\r\n    }\r\n  }\r\n\r\n  get defaultDataUniqueId(): string {\r\n    return this.#data.defaultDataUniqueId;\r\n  }\r\n\r\n  set defaultDataUniqueId(newId: string) {\r\n    if (this.#data.defaultDataUniqueId !== newId) {\r\n      this.#data.defaultDataUniqueId = newId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultDataUniqueId\");\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns true if an info set generation is currently in progress.\r\n   * Can be used by UI to show waiting state.\r\n   */\r\n  public get isInfoSetGenerationInProgress(): boolean {\r\n    return this.#infoSetGenerationPromise !== null;\r\n  }\r\n\r\n  public async ensureIndevInfoSetGenerated() {\r\n    const infoSet = this.indevInfoSet;\r\n\r\n    if (infoSet.completedGeneration) {\r\n      return infoSet;\r\n    }\r\n\r\n    // If a generation is already in progress, wait for it instead of starting a new one\r\n    // This allows the Inspector view to wait for an existing worker operation\r\n    if (this.#infoSetGenerationPromise) {\r\n      Log.verbose(\"Info set generation already in progress, waiting for existing operation...\");\r\n      return this.#infoSetGenerationPromise;\r\n    }\r\n\r\n    // Create a promise that will be resolved when generation completes\r\n    // This allows other callers to wait for the same operation\r\n    this.#infoSetGenerationPromise = this._performInfoSetGeneration(infoSet);\r\n\r\n    try {\r\n      return await this.#infoSetGenerationPromise;\r\n    } finally {\r\n      // Clear the promise when done (success or failure)\r\n      this.#infoSetGenerationPromise = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Internal method that performs the actual info set generation.\r\n   * Separated from ensureInfoSetGenerated to allow tracking via promise.\r\n   */\r\n  private async _performInfoSetGeneration(infoSet: ProjectInfoSet): Promise<ProjectInfoSet> {\r\n    // Track the worker-tracked operation across the entire try/catch so we can\r\n    // guarantee it is ended in the finally block. Without this, edge cases where\r\n    // the worker resolves but doesn't fire both streaming callbacks (or where any\r\n    // statement between notifyOperationStarted and the success branch throws) would\r\n    // leak the operation, leaving the status-bar pickaxe progress indicator stuck\r\n    // visible \"forever\" with a stale tooltip from whatever last status got pushed\r\n    // (often \"Done loading project files for '<title>'\").\r\n    let workerOperationId: number | undefined;\r\n\r\n    // Try to use combined worker operation in browser environments\r\n    // @ts-ignore\r\n    if (typeof window !== \"undefined\" && !this.#relationsProcessed) {\r\n      try {\r\n        const workerManager = getProjectWorkerManager();\r\n        if (workerManager && workerManager.isSupported) {\r\n          // Start an operation on the main thread to track progress\r\n          workerOperationId = await this.#creatorTools.notifyOperationStarted(\r\n            `Validating '${this.simplifiedName}' (0%)`,\r\n            StatusTopic.validation\r\n          );\r\n          const operationId = workerOperationId;\r\n\r\n          // Create progress callback that forwards to CreatorTools status updates\r\n          const onProgress = (message: string, percent?: number) => {\r\n            // Floor the percent to ensure integer values for status bar regex matching\r\n            const statusMessage = percent !== undefined ? `${message} (${Math.floor(percent)}%)` : message;\r\n            this.#creatorTools.notifyOperationUpdate(operationId, statusMessage, StatusTopic.validation);\r\n          };\r\n\r\n          // Track if we received streamed results\r\n          let relationsComplete = false;\r\n          let validationComplete = false;\r\n\r\n          // Streaming callbacks for receiving results as they complete\r\n          const streamingCallbacks = {\r\n            onRelationsComplete: () => {\r\n              // Relations are applied automatically by the worker manager\r\n              this.#relationsProcessed = true;\r\n              relationsComplete = true;\r\n              Log.verbose(\"[Project] Relations streamed from worker\");\r\n              // Notify UI so data-relations-complete attribute updates immediately\r\n              this._onPropertyChanged.dispatch(this, \"relationsProcessed\");\r\n            },\r\n            onValidationComplete: async (\r\n              serializedInfoItems: import(\"../workers/IProjectWorkerMessage\").ISerializableInfoItem[]\r\n            ) => {\r\n              // Preload topic forms in main thread so aggregateFeatures can look up proper titles\r\n              const allGeneratorIds = [\r\n                ...GeneratorRegistrations.projectGenerators.map((g) => g.id),\r\n                ...GeneratorRegistrations.itemGenerators.map((g) => g.id),\r\n                ...GeneratorRegistrations.fileGenerators.map((g) => g.id),\r\n              ];\r\n              await InfoGeneratorTopicUtilities.preloadAllForms(allGeneratorIds);\r\n\r\n              // Deserialize info items and apply to infoSet\r\n              const items = this.getItemsCopy();\r\n              const itemsByPath = new Map<string, ProjectItem>();\r\n              for (const item of items) {\r\n                if (item.projectPath) {\r\n                  itemsByPath.set(item.projectPath, item);\r\n                }\r\n              }\r\n\r\n              infoSet.items = serializedInfoItems.map((s) => {\r\n                const infoItem = new ProjectInfoItem(\r\n                  s.itemType,\r\n                  s.generatorId,\r\n                  s.generatorIndex,\r\n                  s.message,\r\n                  s.projectItemStoragePath ? itemsByPath.get(s.projectItemStoragePath) : undefined,\r\n                  s.data,\r\n                  s.content\r\n                );\r\n                if (s.featureSets) {\r\n                  infoItem.featureSets = s.featureSets;\r\n                }\r\n                return infoItem;\r\n              });\r\n\r\n              await infoSet.markGenerationCompleteAsync();\r\n              validationComplete = true;\r\n              Log.verbose(`[Project] Validation streamed from worker: ${infoSet.items.length} items`);\r\n            },\r\n            onThumbnailBatch: (\r\n              thumbnails: { [projectPath: string]: string },\r\n              thumbnailLinks?: { [projectPath: string]: string }\r\n            ) => {\r\n              // Thumbnails are applied automatically by the worker manager.\r\n              // Notify the UI to re-render so thumbnails appear in the sidebar.\r\n              const thumbnailCount = Object.keys(thumbnails).length;\r\n              const linkCount = thumbnailLinks ? Object.keys(thumbnailLinks).length : 0;\r\n              Log.debug(`[Project] Thumbnail batch received: ${thumbnailCount} thumbnails, ${linkCount} links`);\r\n              if (thumbnailCount > 0 || linkCount > 0) {\r\n                // Fire a property change to trigger sidebar re-render\r\n                this._onPropertyChanged.dispatch(this, \"thumbnails\");\r\n              }\r\n            },\r\n            onThumbnailsFinished: (cancelled: boolean, totalGenerated: number) => {\r\n              Log.debug(`[Project] Thumbnails finished: ${totalGenerated} generated, cancelled=${cancelled}`);\r\n            },\r\n          };\r\n\r\n          try {\r\n            const result = await workerManager.processRelationsAndGenerateInfoSetInWorker(\r\n              this,\r\n              infoSet.suite,\r\n              streamingCallbacks,\r\n              onProgress\r\n            );\r\n            if (result && relationsComplete && validationComplete) {\r\n              // Worker successfully processed relations and validation via streaming\r\n              this.#indevInfoSetNeedsUpdating = false;\r\n\r\n              // End the operation - progress bar disappears immediately\r\n              await this.#creatorTools.notifyOperationEnded(operationId, \"\", StatusTopic.validation);\r\n              workerOperationId = undefined;\r\n\r\n              return infoSet;\r\n            } else if (!result) {\r\n              // Worker didn't support the operation - fall through to main thread\r\n              await this.#creatorTools.notifyOperationEnded(operationId, \"\", StatusTopic.validation);\r\n              workerOperationId = undefined;\r\n            } else {\r\n              // Edge case: worker resolved but at least one streaming callback\r\n              // (relationsComplete / validationComplete) didn't fire as expected.\r\n              // Treat as a partial failure and fall back to main-thread processing.\r\n              // The finally block below will end the operation so the status-bar\r\n              // progress indicator clears.\r\n              Log.verbose(\r\n                `[Project] Worker streaming incomplete (relations=${relationsComplete}, validation=${validationComplete}); falling back to main thread`\r\n              );\r\n            }\r\n          } catch (e) {\r\n            // End the operation with error\r\n            await this.#creatorTools.notifyOperationEnded(\r\n              operationId,\r\n              `Validation failed: ${e}`,\r\n              StatusTopic.validation,\r\n              true\r\n            );\r\n            workerOperationId = undefined;\r\n            throw e;\r\n          }\r\n        }\r\n      } catch (e) {\r\n        // Fall back to main thread processing if worker fails\r\n        Log.verbose(\"Combined worker operation not available, falling back to main thread: \" + e);\r\n      } finally {\r\n        // Safety net: if for any reason the worker-tracked operation wasn't\r\n        // already ended on a success / handled-failure path above, end it now\r\n        // so the status-bar progress indicator doesn't stay stuck visible\r\n        // forever. This protects against partial-streaming edge cases and any\r\n        // unexpected throw between notifyOperationStarted and the branches\r\n        // that end the operation explicitly.\r\n        if (workerOperationId !== undefined) {\r\n          await this.#creatorTools.notifyOperationEnded(workerOperationId, \"\", StatusTopic.validation);\r\n          workerOperationId = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Fallback: use the standard main-thread approach\r\n    await infoSet.generateForProject(this.#indevInfoSetNeedsUpdating);\r\n\r\n    this.#indevInfoSetNeedsUpdating = false;\r\n\r\n    return infoSet;\r\n  }\r\n\r\n  async ensureScriptInDestination() {\r\n    const bpScriptsFolder = await this.ensureBehaviorPackScriptsFolder();\r\n\r\n    if (bpScriptsFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    const coreScriptsFolderPath = StorageUtilities.canonicalizePath(bpScriptsFolder.storageRelativePath);\r\n\r\n    for (const pi of this.#items) {\r\n      if ((pi.itemType === ProjectItemType.testJs || pi.itemType === ProjectItemType.js) && pi.projectPath) {\r\n        let spath = StorageUtilities.canonicalizePath(pi.projectPath);\r\n        if (!spath.startsWith(coreScriptsFolderPath)) {\r\n          const scriptsTokenIndex = spath.indexOf(\"/scripts/\");\r\n          if (scriptsTokenIndex >= 0) {\r\n            spath = spath.substring(scriptsTokenIndex + 8);\r\n          }\r\n\r\n          if (!pi.isContentLoaded) {\r\n            await pi.loadContent();\r\n          }\r\n\r\n          const itemFile = pi.primaryFile;\r\n\r\n          if (itemFile && itemFile.content) {\r\n            const buildProcessedJsItem = this.ensureItemByProjectPath(\r\n              StorageUtilities.ensureEndsWithDelimiter(coreScriptsFolderPath) +\r\n                StorageUtilities.ensureNotStartsWithDelimiter(spath),\r\n              ProjectItemStorageType.singleFile,\r\n              StorageUtilities.getLeafName(spath),\r\n              ProjectItemType.buildProcessedJs,\r\n              FolderContext.behaviorPack,\r\n              undefined,\r\n              ProjectItemCreationType.normal\r\n            );\r\n\r\n            if (!buildProcessedJsItem.isContentLoaded) {\r\n              buildProcessedJsItem.loadContent();\r\n            }\r\n\r\n            if (buildProcessedJsItem.primaryFile) {\r\n              buildProcessedJsItem.primaryFile.setContentIfSemanticallyDifferent(itemFile.content);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async hasScript() {\r\n    for (const pi of this.#items) {\r\n      if (\r\n        pi.itemType === ProjectItemType.actionSet ||\r\n        pi.itemType === ProjectItemType.testJs ||\r\n        pi.itemType === ProjectItemType.js ||\r\n        pi.itemType === ProjectItemType.buildProcessedJs ||\r\n        pi.itemType === ProjectItemType.ts\r\n      ) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    const scriptsFolder = await this.getBehaviorPackScriptsFolder();\r\n    if (!scriptsFolder) {\r\n      return false;\r\n    }\r\n\r\n    await scriptsFolder.load();\r\n\r\n    if (scriptsFolder.fileCount > 0 || scriptsFolder.folderCount > 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  get projectCabinetFile() {\r\n    return this.#projectCabinetFile;\r\n  }\r\n\r\n  get defaultScriptModuleUniqueId(): string {\r\n    return this.#data.defaultScriptModuleUniqueId;\r\n  }\r\n\r\n  set defaultScriptModuleUniqueId(newId: string) {\r\n    if (this.#data.defaultScriptModuleUniqueId !== newId) {\r\n      this.#data.defaultScriptModuleUniqueId = newId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultScriptModuleUniqueId\");\r\n    }\r\n  }\r\n\r\n  get focus(): ProjectFocus {\r\n    return this.#data.focus;\r\n  }\r\n\r\n  set focus(newFocus: ProjectFocus) {\r\n    if (this.#data.focus !== newFocus) {\r\n      this.#data.focus = newFocus;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"focus\");\r\n    }\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools, name: string, preferencesFile: IFile | null, sanitizeName?: boolean) {\r\n    this.creationTime = Date.now();\r\n\r\n    this._handleDeployUpdated = this._handleDeployUpdated.bind(this);\r\n    this._handleProjectFileContentsUpdated = this._handleProjectFileContentsUpdated.bind(this);\r\n    this._handleProjectFileAdded = this._handleProjectFileAdded.bind(this);\r\n    this._handleProjectFileRemoved = this._handleProjectFileRemoved.bind(this);\r\n    this._flushExternalChanges = this._flushExternalChanges.bind(this);\r\n    this.applyUpdate = this.applyUpdate.bind(this);\r\n    this.loadPreferencesAndFolder = this.loadPreferencesAndFolder.bind(this);\r\n    this.ensureProjectFolder = this.ensureProjectFolder.bind(this);\r\n    this._handleProjectFolderMoved = this._handleProjectFolderMoved.bind(this);\r\n\r\n    this.loc = new LocManager(this);\r\n\r\n    let sanName = name;\r\n\r\n    if (sanitizeName) {\r\n      sanName = ProjectUtilities.sanitizeProjectName(sanName);\r\n    }\r\n\r\n    this.#data = {\r\n      dataType: ProjectDataType.clientStorage,\r\n      variants: {},\r\n      storageBasePath: \"\",\r\n      contentsModified: null,\r\n      created: new Date(),\r\n      lastOpened: new Date(),\r\n      dataStorageRelativePath: \"/\" + name + \"/\",\r\n      editPreference: ProjectEditPreference.default,\r\n      name: sanName,\r\n      title: sanName,\r\n      description: sanName + \" description\",\r\n      defaultBehaviorPackUniqueId: Utilities.createUuid(),\r\n      defaultResourcePackUniqueId: Utilities.createUuid(),\r\n      defaultScriptModuleUniqueId: Utilities.createUuid(),\r\n      defaultDataUniqueId: Utilities.createUuid(),\r\n      focus: ProjectFocus.general,\r\n      items: [],\r\n    };\r\n\r\n    this.#preferencesFile = preferencesFile;\r\n\r\n    this.#projectFolder = null;\r\n    this.defaultBehaviorPackFolder = null;\r\n    this.defaultWorldFolder = null;\r\n    this.defaultSkinPackFolder = null;\r\n    this.defaultDesignPackFolder = null;\r\n    this.#defaultScriptsFolder = null;\r\n    this.behaviorPacksContainer = null;\r\n    this.docsContainer = null;\r\n    this.defaultResourcePackFolder = null;\r\n    this.resourcePacksContainer = null;\r\n    this.designPacksContainer = null;\r\n    this.skinPacksContainer = null;\r\n    this.worldContainer = null;\r\n    this.defaultPersonaPackFolder = null;\r\n    this.personaPacksContainer = null;\r\n    this.projectItemAccessoryFolder = null;\r\n    this.#creatorTools = creatorTools;\r\n    this.#items = [];\r\n    this.variants = {};\r\n  }\r\n\r\n  notifyProjectItemChanged(item: ProjectItem) {\r\n    this._onItemChanged.dispatch(this, item);\r\n  }\r\n\r\n  notifyProjectItemContentChanged(item: ProjectItem, fileUpdate: IFileUpdateEvent) {\r\n    this._onItemContentChanged.dispatch(this, { item: item, fileUpdate: fileUpdate });\r\n  }\r\n\r\n  clearFolders() {\r\n    this._unapplyFromProjectFolder();\r\n\r\n    if (this.#projectFolder) {\r\n      this.#projectFolder.clearAllManagers();\r\n    }\r\n\r\n    this.#projectFolder = null;\r\n    this.defaultBehaviorPackFolder = null;\r\n    this.defaultWorldFolder = null;\r\n    this.defaultSkinPackFolder = null;\r\n    this.defaultDesignPackFolder = null;\r\n    this.#defaultScriptsFolder = null;\r\n    this.behaviorPacksContainer = null;\r\n    this.docsContainer = null;\r\n    this.defaultResourcePackFolder = null;\r\n    this.resourcePacksContainer = null;\r\n    this.skinPacksContainer = null;\r\n    this.worldContainer = null;\r\n\r\n    this.#packs = [];\r\n  }\r\n\r\n  ensureVariant(label: string) {\r\n    label = ProjectVariant.canonicalizeVariantLabel(label);\r\n\r\n    if (!this.variants[label]) {\r\n      if (!this.#data.variants) {\r\n        this.#data.variants = {};\r\n      }\r\n\r\n      if (Utilities.isUsableAsObjectKey(label)) {\r\n        if (this.#data.variants[label] === undefined) {\r\n          this.#data.variants[label] = { label: label };\r\n        }\r\n\r\n        this.variants[label] = new ProjectVariant(this, this.#data.variants[label]);\r\n      }\r\n    }\r\n\r\n    return this.variants[label];\r\n  }\r\n\r\n  async ensureWorldContainer() {\r\n    if (!this.worldContainer) {\r\n      const pf = await this.ensureProjectFolder();\r\n\r\n      if (pf) {\r\n        await pf.load(false);\r\n\r\n        if (pf.folders[\"worlds\"]) {\r\n          this.worldContainer = pf.folders[\"worlds\"];\r\n        } else if (pf.folders[\"minecraftWorlds\"]) {\r\n          this.worldContainer = pf.folders[\"minecraftWorlds\"];\r\n        } else {\r\n          this.worldContainer = pf;\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.worldContainer;\r\n  }\r\n\r\n  async ensureCatalogIndex() {\r\n    if (!this.hasScript) {\r\n      return;\r\n    }\r\n\r\n    const scriptsFolder = await this.ensureBehaviorPackScriptsFolder();\r\n\r\n    if (!scriptsFolder) {\r\n      return;\r\n    }\r\n\r\n    this.ensureItemByTag(\r\n      \"jsindex\",\r\n      \"index.js\",\r\n      ProjectItemType.catalogIndexJs,\r\n      StorageUtilities.ensureEndsWithDelimiter(scriptsFolder.storageRelativePath) + \"index.js\",\r\n      ProjectItemStorageType.singleFile,\r\n      ProjectItemCreationType.generated\r\n    );\r\n  }\r\n\r\n  async getDefaultScriptsFile() {\r\n    const defaultBehaviorPack = await this.getDefaultBehaviorPack();\r\n\r\n    if (defaultBehaviorPack) {\r\n      if (defaultBehaviorPack.manifest) {\r\n        const manifest = defaultBehaviorPack.manifest as BehaviorManifestDefinition;\r\n\r\n        const scriptMod = manifest.getScriptModule();\r\n\r\n        if (scriptMod && scriptMod.entry && scriptMod.entry.toLowerCase().startsWith(\"scripts/\")) {\r\n          let scriptsFolder = await this.getMainScriptsFolder();\r\n\r\n          let scriptsText = scriptMod.entry.substring(8);\r\n\r\n          if (scriptsText.toLowerCase().endsWith(\".js\")) {\r\n            scriptsText = scriptsText.substring(0, scriptsText.length - 3);\r\n          }\r\n\r\n          if (scriptsFolder) {\r\n            let file = scriptsFolder.files[scriptsText + \".ts\"];\r\n\r\n            if (!file) {\r\n              file = scriptsFolder.files[scriptsText + \".js\"];\r\n            }\r\n\r\n            return file;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async inferProjectItemsFromFilesRootFolder(force?: boolean, processingCallback?: (area: string) => void) {\r\n    const rootFolder = await this.ensureProjectFolder();\r\n\r\n    const operId = await this.creatorTools.notifyOperationStarted(\r\n      \"Loading project files for '\" + this.name + \"'\",\r\n      StatusTopic.projectLoad\r\n    );\r\n\r\n    if (this.#projectFolder) {\r\n      await ProjectItemInference.inferProjectItemsFromFolder(\r\n        this,\r\n        rootFolder,\r\n        \"\",\r\n        FolderContext.unknown,\r\n        undefined,\r\n        false,\r\n        this.#projectFolder,\r\n        0,\r\n        undefined,\r\n        force,\r\n        processingCallback\r\n      );\r\n\r\n      if (processingCallback) {\r\n        processingCallback(\"Analyzing \" + this.items.length + \" project items...\");\r\n      }\r\n    }\r\n\r\n    await this.creatorTools.notifyOperationEnded(\r\n      operId,\r\n      \"Done loading project files for '\" + this.title + \"'\",\r\n      StatusTopic.projectLoad\r\n    );\r\n\r\n    this.hasInferredFiles = true;\r\n  }\r\n\r\n  async ensureAutogeneratedBehaviorPackManifest() {\r\n    const bpFolder = await this.ensureDefaultBehaviorPackFolder();\r\n\r\n    if (!bpFolder) {\r\n      return;\r\n    }\r\n\r\n    this.ensureItemByTag(\r\n      \"manifestjson\",\r\n      \"behaviorpackmanifest\",\r\n      ProjectItemType.behaviorPackManifestJson,\r\n      StorageUtilities.ensureEndsWithDelimiter(bpFolder.storageRelativePath) + \"manifest.json\",\r\n      ProjectItemStorageType.singleFile,\r\n      ProjectItemCreationType.generated\r\n    );\r\n  }\r\n\r\n  dispose() {\r\n    if (this.#projectFolder) {\r\n      this._unapplyFromProjectFolder();\r\n      this.#projectFolder.dispose();\r\n      this.#projectFolder = null;\r\n    }\r\n\r\n    if (this.#projectCabinetFile) {\r\n      this.#projectCabinetFile.dispose();\r\n      this.#projectCabinetFile = null;\r\n    }\r\n\r\n    if (this.#distBuildFolder) {\r\n      this.#distBuildFolder.dispose();\r\n      this.#distBuildFolder = null;\r\n    }\r\n\r\n    if (this.#libFolder) {\r\n      this.#libFolder.dispose();\r\n      this.#libFolder = null;\r\n    }\r\n\r\n    if (this.#distBuildScriptsFolder) {\r\n      this.#distBuildScriptsFolder.dispose();\r\n      this.#distBuildScriptsFolder = null;\r\n    }\r\n\r\n    if (this.#libScriptsFolder) {\r\n      this.#libScriptsFolder.dispose();\r\n      this.#libScriptsFolder = null;\r\n    }\r\n\r\n    if (this.docsContainer) {\r\n      this.docsContainer.dispose();\r\n      this.docsContainer = null;\r\n    }\r\n\r\n    if (this.worldContainer) {\r\n      this.worldContainer.dispose();\r\n      this.worldContainer = null;\r\n    }\r\n\r\n    if (this.behaviorPacksContainer) {\r\n      this.behaviorPacksContainer.dispose();\r\n      this.behaviorPacksContainer = null;\r\n    }\r\n\r\n    if (this.defaultBehaviorPackFolder) {\r\n      this.defaultBehaviorPackFolder.dispose();\r\n      this.defaultBehaviorPackFolder = null;\r\n    }\r\n\r\n    if (this.#defaultScriptsFolder) {\r\n      this.#defaultScriptsFolder.dispose();\r\n      this.#defaultScriptsFolder = null;\r\n    }\r\n\r\n    if (this.resourcePacksContainer) {\r\n      this.resourcePacksContainer.dispose();\r\n      this.resourcePacksContainer = null;\r\n    }\r\n\r\n    if (this.defaultResourcePackFolder) {\r\n      this.defaultResourcePackFolder.dispose();\r\n      this.defaultResourcePackFolder = null;\r\n    }\r\n\r\n    this.#isDisposed = true;\r\n  }\r\n\r\n  resetProjectItems() {\r\n    const newProjectItems: ProjectItem[] = [];\r\n\r\n    for (const projectItem of this.items) {\r\n      if (projectItem.itemType !== ProjectItemType.unknown && projectItem.itemType !== ProjectItemType.unknownJson) {\r\n        newProjectItems.push(projectItem);\r\n      }\r\n    }\r\n\r\n    this.#items = newProjectItems;\r\n  }\r\n\r\n  ensureStoragePathIsCollapsed(storagePath: string) {\r\n    for (const pathCollapsed of this.collapsedStoragePaths) {\r\n      if (pathCollapsed === storagePath) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    this.collapsedStoragePaths.push(storagePath);\r\n  }\r\n\r\n  get isVanillaSourceProject() {\r\n    return this.defaultBehaviorPackUniqueId === \"ee649bcf-256c-4013-9068-6a802b89d756\";\r\n  }\r\n\r\n  get isVanillaEditSession(): boolean {\r\n    if (this.#isVanillaEditSession !== undefined) {\r\n      return this.#isVanillaEditSession;\r\n    }\r\n\r\n    this.computeIsVanillaEditSession();\r\n    return this.#isVanillaEditSession!;\r\n  }\r\n\r\n  computeIsVanillaEditSession() {\r\n    for (const pack of this.#packs) {\r\n      if (pack.folder && pack.folder.name === \"vanilla\") {\r\n        this.#isVanillaEditSession = true;\r\n        return;\r\n      }\r\n    }\r\n\r\n    for (const item of this.items) {\r\n      for (const variant of item.getVariantList()) {\r\n        if (\r\n          variant.variantType === ProjectItemVariantType.versionSlice ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAlt ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAltPacks\r\n        ) {\r\n          this.#isVanillaEditSession = true;\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    this.#isVanillaEditSession = false;\r\n  }\r\n\r\n  ensureStoragePathIsNotCollapsed(storagePath: string) {\r\n    const newCollapsedPaths: string[] = [];\r\n\r\n    for (const pathCollapsed of this.collapsedStoragePaths) {\r\n      if (pathCollapsed !== storagePath) {\r\n        newCollapsedPaths.push(pathCollapsed);\r\n      }\r\n    }\r\n\r\n    this.#data.collapsedStoragePaths = newCollapsedPaths;\r\n  }\r\n\r\n  async inferProjectItemsFromFiles(\r\n    force?: boolean,\r\n    processingCallback?: (area: string) => void,\r\n    deepScanJson?: boolean\r\n  ) {\r\n    if (!this.hasInferredFiles || force) {\r\n      // Reset cached vanilla-edit-session flag so it's recomputed after items are inferred\r\n      this.#isVanillaEditSession = undefined;\r\n\r\n      await this.ensureProjectFolder();\r\n\r\n      if (this.projectCabinetFile !== null) {\r\n        const operId = await this.creatorTools.notifyOperationStarted(\r\n          \"Loading project files for '\" + this.name + \"' from '\" + this.projectCabinetFile.fullPath + \"'\",\r\n          StatusTopic.projectLoad\r\n        );\r\n\r\n        await this.ensureProjectFolderFromCabinet();\r\n        /*await project._inferProjectItemsFromZipFile(\r\n          project.#projectCabinetFile.storageRelativePath,\r\n          project.#projectCabinetFile,\r\n          false\r\n        );*/\r\n\r\n        if (this.projectFolder) {\r\n          await ProjectItemInference.inferProjectItemsFromFolder(\r\n            this,\r\n            this.projectFolder,\r\n            \"\",\r\n            FolderContext.unknown,\r\n            undefined,\r\n            false,\r\n            this.projectFolder,\r\n            0,\r\n            undefined,\r\n            force\r\n          );\r\n        }\r\n\r\n        await this.creatorTools.notifyOperationEnded(\r\n          operId,\r\n          \"Done loading project files for '\" + this.title + \"' from file '\" + this.projectCabinetFile.fullPath + \"'\",\r\n          StatusTopic.projectLoad\r\n        );\r\n\r\n        this.hasInferredFiles = true;\r\n      } else {\r\n        await this.inferProjectItemsFromFilesRootFolder(false, processingCallback);\r\n      }\r\n\r\n      if (this.#accessoryFolders) {\r\n        for (let i = 0; i < this.#accessoryFolders.length; i++) {\r\n          await ProjectItemInference.inferProjectItemsFromFolder(\r\n            this,\r\n            this.#accessoryFolders[i],\r\n            \"\",\r\n            FolderContext.unknown,\r\n            undefined,\r\n            false,\r\n            this.#accessoryFolders[i],\r\n            0,\r\n            \"o.\" + this.#accessoryFolders[i].name,\r\n            force,\r\n            processingCallback\r\n          );\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensureProjectFolderFromCabinet() {\r\n    if (!this.#projectCabinetFile) {\r\n      Log.unexpectedUndefined(\"EPFFC\");\r\n      return;\r\n    }\r\n\r\n    if (!this.#projectCabinetFile.isContentLoaded) {\r\n      await this.#projectCabinetFile.loadContent();\r\n    }\r\n\r\n    const rootFolder = await StorageUtilities.getFileStorageFolder(this.#projectCabinetFile);\r\n\r\n    if (rootFolder && typeof rootFolder === \"string\") {\r\n      this.#errorState = ProjectErrorState.cabinetFileCouldNotBeProcessed;\r\n      this.#errorMessage = rootFolder;\r\n    } else if (rootFolder !== this.#projectFolder && typeof rootFolder !== \"string\") {\r\n      this._unapplyFromProjectFolder();\r\n      if (rootFolder) {\r\n        this.#projectFolder = rootFolder;\r\n\r\n        this._applyToProjectFolder();\r\n      } else {\r\n        this.#projectFolder = null;\r\n      }\r\n    }\r\n  }\r\n\r\n  async inferProjectItemsFromZipFile(projectPath: string, file: IFile, force?: boolean): Promise<string | undefined> {\r\n    let operId = await this.creatorTools.notifyOperationStarted(\"Loading package file \" + file.name);\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    const rootFolder = await StorageUtilities.getFileStorageFolder(file);\r\n\r\n    if (typeof rootFolder === \"string\") {\r\n      return rootFolder;\r\n    } else if (rootFolder) {\r\n      await ProjectItemInference.inferProjectItemsFromFolder(\r\n        this,\r\n        rootFolder,\r\n        projectPath + \"#\",\r\n        FolderContext.unknown,\r\n        undefined,\r\n        false,\r\n        rootFolder,\r\n        0,\r\n        undefined,\r\n        force\r\n      );\r\n    }\r\n\r\n    await this.creatorTools.notifyOperationEnded(operId, \"Done loading package file \" + file.name);\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async processRelations(force?: boolean) {\r\n    if (this.#relationsProcessed && !force) {\r\n      return;\r\n    }\r\n\r\n    if (this.#isProcessingRelations) {\r\n      const pendingProcessing = this.#pendingProcessingRelationsRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingProcessing.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n\r\n      return;\r\n    } else {\r\n      this.#isProcessingRelations = true;\r\n\r\n      this.#relationsBatchOperId = await this.creatorTools.notifyOperationStarted(\r\n        \"Processing relations for '\" + this.name + \"'\",\r\n        StatusTopic.processing\r\n      );\r\n\r\n      const items = this.getItemsCopy();\r\n\r\n      ProjectItemRelations.clearDependenciesForItems(items);\r\n\r\n      this.#itemsToBeProcessed = items.length;\r\n      this.#itemsProcessed = 0;\r\n\r\n      // Note: Relation processing in worker is now handled by the combined\r\n      // processRelationsAndGenerateInfoSetInWorker method when validation is requested.\r\n      // For standalone relation processing, we use the main thread to avoid complexity.\r\n\r\n      // Process on main thread\r\n      // @ts-ignore\r\n      if (items.length < ProcessItemRelationsBatchSize || typeof window === \"undefined\") {\r\n        await ProjectItemRelations.calculateForItems(items);\r\n        this.#itemsProcessed = this.#itemsToBeProcessed;\r\n        await this.completeProcessItemRelationsBatchProcessing();\r\n      } else {\r\n        // batch through setTimeout -- with small breaks in between -- to ensure the browser remains responsive\r\n        const batches = Math.floor(items.length / ProcessItemRelationsBatchSize);\r\n\r\n        for (let i = 0; i < batches; i++) {\r\n          // @ts-ignore\r\n          window.setTimeout(async () => {\r\n            await ProjectItemRelations.calculateForItems(\r\n              items.slice(i * ProcessItemRelationsBatchSize, (i + 1) * ProcessItemRelationsBatchSize)\r\n            );\r\n\r\n            this.#itemsProcessed += ProcessItemRelationsBatchSize;\r\n            await this.completeProcessItemRelationsBatchProcessing();\r\n          }, 0);\r\n        }\r\n\r\n        const leftOver = items.length % ProcessItemRelationsBatchSize;\r\n\r\n        if (leftOver > 0) {\r\n          // @ts-ignore\r\n          window.setTimeout(async () => {\r\n            await ProjectItemRelations.calculateForItems(items.slice(batches * ProcessItemRelationsBatchSize));\r\n\r\n            this.#itemsProcessed += leftOver;\r\n            await this.completeProcessItemRelationsBatchProcessing();\r\n          }, 0);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async completeProcessItemRelationsBatchProcessing() {\r\n    Log.verbose(\r\n      `[Thumbnails] completeProcessItemRelationsBatchProcessing called: ${this.#itemsProcessed}/${\r\n        this.#itemsToBeProcessed\r\n      }`\r\n    );\r\n    if (this.#itemsToBeProcessed > ProcessItemRelationsBatchSize * 2) {\r\n      await this.creatorTools.notifyOperationUpdate(\r\n        this.#relationsBatchOperId,\r\n        \"Processing relations for '\" +\r\n          this.name +\r\n          \"' (\" +\r\n          String(Math.floor((this.#itemsProcessed / this.#itemsToBeProcessed) * 100)) +\r\n          \"%)\",\r\n        StatusTopic.processing\r\n      );\r\n    }\r\n\r\n    if (this.#itemsProcessed >= this.#itemsToBeProcessed) {\r\n      this.#relationsProcessed = true;\r\n\r\n      if (this.#relationsBatchOperId !== undefined) {\r\n        await this.creatorTools.notifyOperationEnded(\r\n          this.#relationsBatchOperId,\r\n          \"Completed processing of '\" + this.name + \"'\",\r\n          StatusTopic.processing\r\n        );\r\n      }\r\n\r\n      this.#isProcessingRelations = false;\r\n\r\n      const pendingProcessing = this.#pendingProcessingRelationsRequests;\r\n      this.#pendingProcessingRelationsRequests = [];\r\n\r\n      for (const prom of pendingProcessing) {\r\n        prom(undefined);\r\n      }\r\n\r\n      // Note: Thumbnail generation is now handled in the combined relations+validation worker task\r\n      // (processRelationsAndGenerateInfoSet) as a low-priority background queue for efficiency.\r\n    }\r\n  }\r\n\r\n  async ensureJsIndexFile() {\r\n    if (this.projectFolder === null) {\r\n      throw new Error(\"Could not find project folder\");\r\n    }\r\n\r\n    const bpFolder = await this.ensureDefaultBehaviorPackFolder();\r\n\r\n    const defaultPath = bpFolder.getFolderRelativePath(this.projectFolder);\r\n\r\n    this.ensureItemByTag(\r\n      \"jsindex\",\r\n      \"index.js\",\r\n      ProjectItemType.catalogIndexJs,\r\n      defaultPath + \"scripts/index.js\",\r\n      ProjectItemStorageType.singleFile,\r\n      ProjectItemCreationType.generated\r\n    );\r\n  }\r\n\r\n  async applyUpdate(updaterId: string, updaterIndex: number): Promise<ProjectUpdateResult[]> {\r\n    const pur = new ProjectUpdateRunner(this);\r\n\r\n    return await pur.update(updaterId, updaterIndex);\r\n  }\r\n\r\n  async getScriptState() {\r\n    const state: IProjectScriptState = {\r\n      hasScript: false,\r\n      hasModule: {},\r\n    };\r\n\r\n    for (let i = 0; i < this.#items.length; i++) {\r\n      const pi = this.#items[i];\r\n\r\n      if (\r\n        pi.itemType === ProjectItemType.js ||\r\n        pi.itemType === ProjectItemType.buildProcessedJs ||\r\n        pi.itemType === ProjectItemType.testJs ||\r\n        pi.itemType === ProjectItemType.ts ||\r\n        pi.itemType === ProjectItemType.worldTest\r\n      ) {\r\n        state.hasScript = true;\r\n\r\n        if (\r\n          (pi.itemType === ProjectItemType.js ||\r\n            pi.itemType === ProjectItemType.buildProcessedJs ||\r\n            pi.itemType === ProjectItemType.testJs ||\r\n            pi.itemType === ProjectItemType.ts) &&\r\n          pi.primaryFile\r\n        ) {\r\n          if (!pi.primaryFile.isContentLoaded) {\r\n            await pi.primaryFile.loadContent();\r\n          }\r\n          const content = pi.primaryFile.content;\r\n\r\n          if (content && typeof content === \"string\") {\r\n            for (let i = 0; i < minecraftScriptModules.length; i++) {\r\n              const mod = minecraftScriptModules[i];\r\n\r\n              if (content.indexOf(mod.id) >= 0) {\r\n                if (Utilities.isUsableAsObjectKey(mod.id)) {\r\n                  state.hasModule[mod.id] = true;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return state;\r\n  }\r\n\r\n  getFirstItemByType(itemType: ProjectItemType) {\r\n    for (let i = 0; i < this.#items.length; i++) {\r\n      const pi = this.#items[i];\r\n\r\n      if (pi.itemType === itemType) {\r\n        return pi;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  hasAddonJson() {\r\n    return false;\r\n  }\r\n\r\n  private async loadFolderStructure() {\r\n    Log.assert(!this.#isDisposed, \"PLFS\");\r\n\r\n    if (this.#folderStructureLoaded) {\r\n      return;\r\n    }\r\n\r\n    const projectFolder = await this.ensureProjectFolder();\r\n\r\n    const containerFiles: IFile[] = [];\r\n\r\n    await this.processProjectFolder(projectFolder, containerFiles);\r\n\r\n    this.#containerFiles = containerFiles;\r\n\r\n    this.#folderStructureLoaded = true;\r\n  }\r\n\r\n  public setToVersion(versionId: string) {\r\n    if (this.#projectFolder?.storage) {\r\n      this.#projectFolder.storage.setToVersion(versionId);\r\n    }\r\n\r\n    for (const containerFile of this.#containerFiles) {\r\n      if (containerFile.fileContainerStorage) {\r\n        containerFile.fileContainerStorage.setToVersion(versionId);\r\n      }\r\n    }\r\n  }\r\n\r\n  public getChangeList(): IVersionContent[] {\r\n    if (!this.#projectFolder) {\r\n      return [];\r\n    }\r\n\r\n    if (this.#containerFiles.length === 0) {\r\n      return this.#projectFolder.storage.priorVersions;\r\n    }\r\n\r\n    const changeList: IVersionContent[] = [];\r\n\r\n    for (const change of this.#projectFolder.storage.priorVersions) {\r\n      if (!StorageUtilities.isContainerFile(change.file.fullPath)) {\r\n        changeList.push(change);\r\n      }\r\n    }\r\n\r\n    for (const containerFile of this.#containerFiles) {\r\n      if (containerFile.fileContainerStorage) {\r\n        changeList.push(...containerFile.fileContainerStorage.priorVersions);\r\n      }\r\n    }\r\n\r\n    StorageUtilities.sortChangeList(changeList);\r\n\r\n    return changeList;\r\n  }\r\n\r\n  private async processProjectFolder(folder: IFolder, containerFiles: IFile[]) {\r\n    await folder.load();\r\n\r\n    let manifest = folder.files[\"manifest.json\"];\r\n\r\n    if (manifest === undefined) {\r\n      manifest = folder.files[\"pack_manifest.json\"];\r\n    }\r\n\r\n    if (!this.#projectFolder) {\r\n      throw new Error(\"Unexpectedly could not find a project folder.\");\r\n    }\r\n\r\n    if (manifest) {\r\n      let parentFolder = folder.parentFolder;\r\n\r\n      if (parentFolder === this.#projectFolder.parentFolder) {\r\n        parentFolder = null;\r\n      }\r\n\r\n      let folderContext = FolderContext.behaviorPack;\r\n      let isWorld = false;\r\n\r\n      if (parentFolder !== null) {\r\n        if (MinecraftUtilities.pathLooksLikeResourcePackName(parentFolder.fullPath)) {\r\n          folderContext = FolderContext.resourcePack;\r\n        } else if (MinecraftUtilities.pathLooksLikeDesignPackName(parentFolder.fullPath)) {\r\n          folderContext = FolderContext.designPack;\r\n        } else if (MinecraftUtilities.pathLooksLikeSkinPackName(parentFolder.fullPath)) {\r\n          folderContext = FolderContext.skinPack;\r\n        } else if (MinecraftUtilities.pathLooksLikePersonaPackName(parentFolder.fullPath)) {\r\n          folderContext = FolderContext.persona;\r\n        } else if (MinecraftUtilities.pathLooksLikePersonaPackName(parentFolder.fullPath)) {\r\n          folderContext = FolderContext.persona;\r\n        }\r\n      }\r\n\r\n      const levelDat = folder.files[\"level.dat\"];\r\n\r\n      if (levelDat) {\r\n        isWorld = true;\r\n      }\r\n\r\n      if (isWorld && this.defaultWorldFolder === null) {\r\n        this.defaultWorldFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.worldContainer = parentFolder;\r\n        }\r\n      } else if (!isWorld && folderContext === FolderContext.resourcePack && this.defaultResourcePackFolder === null) {\r\n        this.defaultResourcePackFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.resourcePacksContainer = parentFolder;\r\n        }\r\n      } else if (!isWorld && folderContext === FolderContext.designPack && this.defaultDesignPackFolder === null) {\r\n        this.defaultDesignPackFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.designPacksContainer = parentFolder;\r\n        }\r\n      } else if (!isWorld && folderContext === FolderContext.skinPack && this.defaultSkinPackFolder === null) {\r\n        this.defaultSkinPackFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.skinPacksContainer = parentFolder;\r\n        }\r\n      } else if (!isWorld && folderContext === FolderContext.persona && this.defaultPersonaPackFolder === null) {\r\n        this.defaultPersonaPackFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.personaPacksContainer = parentFolder;\r\n        }\r\n      } else if (!isWorld && folderContext === FolderContext.behaviorPack && this.defaultBehaviorPackFolder === null) {\r\n        this.defaultBehaviorPackFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.behaviorPacksContainer = parentFolder;\r\n        }\r\n      }\r\n    } else {\r\n      for (const folderName in folder.folders) {\r\n        const childFolder = folder.folders[folderName];\r\n\r\n        if (childFolder !== undefined && !childFolder.errorStatus) {\r\n          await this.processProjectFolder(childFolder, containerFiles);\r\n        }\r\n      }\r\n\r\n      for (const fileName in folder.files) {\r\n        const childFile = folder.files[fileName];\r\n\r\n        if (childFile && StorageUtilities.isContainerFile(childFile.fullPath)) {\r\n          let storageFolder = undefined;\r\n\r\n          storageFolder = await StorageUtilities.getFileStorageFolder(childFile);\r\n\r\n          if (childFile.fileContainerStorage && storageFolder && typeof storageFolder !== \"string\") {\r\n            containerFiles.push(childFile);\r\n\r\n            childFile.fileContainerStorage.onFileContentsUpdated.subscribe(this._handleProjectFileContentsUpdated);\r\n\r\n            await this.processProjectFolder(storageFolder, containerFiles);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public getItemByFile(file: IFile) {\r\n    let projectItem = this.getItemByProjectPath(file.storageRelativePath);\r\n\r\n    if (projectItem !== undefined) {\r\n      return projectItem;\r\n    }\r\n\r\n    return this.getItemByExtendedOrProjectPath(file.extendedPath);\r\n  }\r\n\r\n  public getItemByProjectPath(projectPath: string): ProjectItem | undefined {\r\n    return this.#itemsByProjectPath.get(ProjectUtilities.canonicalizeStoragePath(projectPath));\r\n  }\r\n\r\n  public getItemByExtendedOrProjectPath(storagePath: string): ProjectItem | undefined {\r\n    let path = ProjectUtilities.canonicalizeStoragePath(storagePath);\r\n    let result = this.#itemsByProjectPath.get(path);\r\n\r\n    if (result) {\r\n      return result;\r\n    }\r\n\r\n    let nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash > 1) {\r\n      result = this.#itemsByProjectPath.get(path.substring(nextSlash));\r\n\r\n      if (result) {\r\n        return result;\r\n      }\r\n    }\r\n\r\n    nextSlash = path.indexOf(\"root/\", 1);\r\n\r\n    if (nextSlash > 1) {\r\n      nextSlash = path.indexOf(\"/\", nextSlash + 5);\r\n\r\n      if (nextSlash > 1) {\r\n        result = this.#itemsByProjectPath.get(path.substring(nextSlash));\r\n\r\n        if (result) {\r\n          return result;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public ensureItemFromFile(\r\n    file: IFile,\r\n    itemType: ProjectItemType,\r\n    folderContext: FolderContext,\r\n    creationType?: ProjectItemCreationType\r\n  ) {\r\n    if (this.projectFolder) {\r\n      const projectPath = file.getFolderRelativePath(this.projectFolder);\r\n\r\n      if (projectPath) {\r\n        return this.ensureItemByProjectPath(\r\n          projectPath,\r\n          ProjectItemStorageType.singleFile,\r\n          file.name,\r\n          itemType,\r\n          folderContext,\r\n          undefined,\r\n          creationType ? creationType : ProjectItemCreationType.normal,\r\n          file\r\n        );\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public ensureItemByProjectPath(\r\n    projectPath: string,\r\n    storageType: ProjectItemStorageType,\r\n    name: string,\r\n    itemType: ProjectItemType,\r\n    context: FolderContext,\r\n    source?: string,\r\n    creationType?: ProjectItemCreationType,\r\n    file?: IFile,\r\n    tag?: string,\r\n    isInWorld?: boolean\r\n  ) {\r\n    let variantName = undefined;\r\n    let originalPath = projectPath;\r\n    let targetVariantType: ProjectItemVariantType = ProjectItemVariantType.general;\r\n    const projectPathLower = projectPath.toLowerCase();\r\n\r\n    if (context === FolderContext.resourcePackSubPack) {\r\n      const indexOfSubpacks = projectPathLower.indexOf(\"/subpacks/\");\r\n\r\n      if (indexOfSubpacks >= 0) {\r\n        const nextSlash = projectPath.indexOf(\"/\", indexOfSubpacks + 10);\r\n\r\n        if (nextSlash >= 0) {\r\n          targetVariantType = ProjectItemVariantType.subPack;\r\n          variantName = projectPath.substring(indexOfSubpacks + 10, nextSlash);\r\n          projectPath = projectPath.substring(0, indexOfSubpacks) + projectPath.substring(nextSlash);\r\n        }\r\n      }\r\n    } else {\r\n      const staticAssetsPos = projectPathLower.indexOf(\"/static-assets\");\r\n      const packRootPos = projectPathLower.indexOf(\"_pack/\");\r\n      if (staticAssetsPos >= 0 && packRootPos >= 0) {\r\n        const previousSlash = projectPath.lastIndexOf(\"/\", staticAssetsPos - 1);\r\n\r\n        if (previousSlash >= 0) {\r\n          let packFolderName = projectPath.substring(previousSlash + 1, staticAssetsPos);\r\n\r\n          const lastUnderscore = packFolderName.lastIndexOf(\"_\");\r\n          if (lastUnderscore > 0) {\r\n            const potentialVersionSection = packFolderName.substring(lastUnderscore + 1);\r\n\r\n            if (Utilities.isNumericIsh(potentialVersionSection) && potentialVersionSection.indexOf(\".\") > 0) {\r\n              variantName = potentialVersionSection;\r\n              targetVariantType = ProjectItemVariantType.versionSliceAlt;\r\n              projectPath = projectPath.replace(\"_\" + potentialVersionSection + \"/\", \"/\");\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      const packsRoot = projectPathLower.indexOf(\"_packs/\");\r\n      if (packsRoot >= 0) {\r\n        const packFolderNameEnd = projectPathLower.indexOf(\"/\", packsRoot + 7);\r\n\r\n        if (packFolderNameEnd > 0) {\r\n          const packFolderName = projectPath.substring(packsRoot + 7, packFolderNameEnd);\r\n\r\n          const lastUnderscore = packFolderName.lastIndexOf(\"_\");\r\n          if (lastUnderscore > 0) {\r\n            const potentialVersionSection = packFolderName.substring(lastUnderscore + 1);\r\n\r\n            if (Utilities.isNumericIsh(potentialVersionSection) && potentialVersionSection.indexOf(\".\") > 0) {\r\n              variantName = potentialVersionSection;\r\n              targetVariantType = ProjectItemVariantType.versionSlice;\r\n\r\n              projectPath = projectPath.replace(\"_\" + potentialVersionSection + \"/\", \"/\");\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!variantName) {\r\n        for (const variantFolderSeed of vanillaSliceFolderSeeds) {\r\n          let variantSource = projectPathLower.indexOf(\"/\" + variantFolderSeed.toLowerCase() + \"_\");\r\n          if (variantSource >= 0) {\r\n            let startOfSection = variantSource + variantFolderSeed.length + 2;\r\n            let nextSlash = projectPath.indexOf(\"/\", startOfSection);\r\n\r\n            if (nextSlash >= startOfSection) {\r\n              {\r\n                const potentialVersionSection = projectPathLower.substring(startOfSection, nextSlash);\r\n\r\n                if (Utilities.isNumericIsh(potentialVersionSection) && potentialVersionSection.indexOf(\".\") > 0) {\r\n                  variantName = potentialVersionSection;\r\n                  targetVariantType = ProjectItemVariantType.versionSliceAltPacks;\r\n\r\n                  projectPath = projectPath.replace(\"_\" + potentialVersionSection + \"/\", \"/\");\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    let pi = this.getItemByProjectPath(projectPath);\r\n\r\n    if (pi !== undefined) {\r\n      if (variantName) {\r\n        const piv = pi.ensureVariant(variantName);\r\n\r\n        piv.projectPath = originalPath;\r\n        piv.variantType = targetVariantType;\r\n\r\n        if (!piv.file && file) {\r\n          piv.setFile(file);\r\n        }\r\n      } else {\r\n        if (!pi.defaultFile && file) {\r\n          pi.setFile(file);\r\n        }\r\n      }\r\n\r\n      return pi;\r\n    }\r\n\r\n    const tags = [];\r\n\r\n    if (tag) {\r\n      tags.push(tag);\r\n    }\r\n\r\n    pi = this.createItem({\r\n      itemType: itemType,\r\n      variants: {},\r\n      projectPath: projectPath,\r\n      storageType: storageType,\r\n      creationType: creationType,\r\n      source: source,\r\n      tags: tags,\r\n      name: name,\r\n    });\r\n\r\n    if (variantName) {\r\n      const piv = pi.ensureVariant(variantName);\r\n\r\n      piv.variantType = targetVariantType;\r\n      piv.projectPath = originalPath;\r\n\r\n      if (file) {\r\n        piv.setFile(file);\r\n      }\r\n    } else if (file) {\r\n      pi.setFile(file);\r\n    }\r\n\r\n    if (isInWorld !== undefined) {\r\n      pi.isInWorld = isInWorld;\r\n    }\r\n\r\n    if (pi.itemType === ProjectItemType.unknownJson && itemType !== ProjectItemType.unknownJson) {\r\n      pi.itemType = itemType;\r\n    }\r\n\r\n    return pi;\r\n  }\r\n\r\n  public getItemByTag(tag: string): ProjectItem | null {\r\n    for (const projectItem of this.#items) {\r\n      if (projectItem.hasTag(tag)) {\r\n        return projectItem;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  public hasItemOfType(type: ProjectItemType): boolean {\r\n    for (const projectItem of this.#items) {\r\n      if (projectItem.itemType === type) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public ensureItemByTag(\r\n    tag: string,\r\n    name: string,\r\n    itemType: ProjectItemType,\r\n    storagePath?: string,\r\n    storageType?: ProjectItemStorageType,\r\n    creationType?: ProjectItemCreationType,\r\n    file?: IFile,\r\n    isInWorld?: boolean\r\n  ) {\r\n    let pi = this.getItemByTag(tag);\r\n\r\n    if (pi != null) {\r\n      return pi;\r\n    }\r\n\r\n    pi = this.createItem({\r\n      itemType: itemType,\r\n      variants: {},\r\n      projectPath: storagePath,\r\n      storageType: storageType,\r\n      creationType: creationType,\r\n      tags: [tag],\r\n      name: name,\r\n    });\r\n\r\n    if (file) {\r\n      pi.setFile(file);\r\n    }\r\n\r\n    if (pi.itemType === ProjectItemType.unknownJson && itemType !== ProjectItemType.unknownJson) {\r\n      pi.itemType = itemType;\r\n    }\r\n\r\n    return pi;\r\n  }\r\n\r\n  async ensureWorkingFolderForFile(file: IFile) {\r\n    if (!this.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    let relativePath = file.getFolderRelativePath(this.projectFolder);\r\n\r\n    if (relativePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    relativePath = StorageUtilities.canonicalizePath(relativePath);\r\n\r\n    relativePath = StorageUtilities.ensureEndsWithDelimiter(relativePath.replace(/\\./gi, \"_\"));\r\n\r\n    const workingFolder = this.projectFolder.ensureFolder(\".working\");\r\n\r\n    return await workingFolder.ensureFolderFromRelativePath(relativePath);\r\n  }\r\n\r\n  createItem(initialSettings: IProjectItemData) {\r\n    this.#data.items.push(initialSettings);\r\n\r\n    const pi = new ProjectItem(this, initialSettings);\r\n\r\n    const path = ProjectUtilities.canonicalizeStoragePath(pi.projectPath);\r\n\r\n    if (Utilities.isUsableAsObjectKey(path)) {\r\n      this.#itemsByProjectPath.set(path, pi);\r\n      this.#itemsByType.set(initialSettings.itemType, undefined);\r\n\r\n      this.#items.push(pi);\r\n      this.#indevInfoSetNeedsUpdating = true;\r\n      this._onItemAdded.dispatch(this, pi);\r\n\r\n      const telemetryProperties: Record<string, any> = {\r\n        [TelemetryProperties.ITEM_TYPE]: initialSettings.itemType,\r\n      };\r\n\r\n      if (initialSettings.source) {\r\n        telemetryProperties[TelemetryProperties.TEMPLATE] = initialSettings.source;\r\n      }\r\n\r\n      telemetry.trackEvent({\r\n        name: TelemetryEvents.ADD_NEW_PROJECT_ITEM,\r\n        properties: telemetryProperties,\r\n      });\r\n    }\r\n\r\n    return pi;\r\n  }\r\n\r\n  async loadPreferencesAndFolder() {\r\n    Log.assert(!this.#isDisposed, \"PLF\");\r\n\r\n    if (this.#isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (this.#preferencesFile === null) {\r\n      return;\r\n    }\r\n\r\n    if (!this.#preferencesFile.isContentLoaded) {\r\n      await this.#preferencesFile.loadContent(false);\r\n    }\r\n\r\n    this.hasInferredFiles = false;\r\n    this.#items = [];\r\n    this.#itemsByProjectPath = new Map();\r\n    this.#data.items = [];\r\n\r\n    if (Utilities.isString(this.#preferencesFile.content) && this.#preferencesFile.content != null) {\r\n      try {\r\n        this.#data = JSON.parse(this.#preferencesFile.content as string);\r\n      } catch (e) {\r\n        Log.debug(\"Failed to parse project preferences JSON: \" + e);\r\n      }\r\n    }\r\n\r\n    await this.ensureProjectFolder();\r\n\r\n    this.#isLoaded = true;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  /**\r\n   * Loads just the project preferences file (lightweight - doesn't load project folder).\r\n   * Useful for displaying project metadata in lists without full project initialization.\r\n   */\r\n  async ensurePreferencesLoaded() {\r\n    if (this.#preferencesFile === null) {\r\n      return;\r\n    }\r\n\r\n    if (!this.#preferencesFile.isContentLoaded) {\r\n      await this.#preferencesFile.loadContent(false);\r\n    }\r\n\r\n    if (Utilities.isString(this.#preferencesFile.content) && this.#preferencesFile.content != null) {\r\n      try {\r\n        this.#data = JSON.parse(this.#preferencesFile.content as string);\r\n      } catch (e) {\r\n        Log.debug(\"Failed to parse project preferences JSON: \" + e);\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensureInflated() {\r\n    Log.assert(!this.#isDisposed, \"PLINF\");\r\n\r\n    if (this.#isInflated) {\r\n      return;\r\n    }\r\n\r\n    await this.loadPreferencesAndFolder();\r\n\r\n    this.#items = [];\r\n    this.#itemsByProjectPath = new Map();\r\n\r\n    if (this.#data) {\r\n      for (let i = 0; i < this.#data.items.length; i++) {\r\n        const projectItemData = this.#data.items[i];\r\n\r\n        const projectItem = new ProjectItem(this, projectItemData);\r\n        const path = ProjectUtilities.canonicalizeStoragePath(projectItem.projectPath);\r\n\r\n        if (Utilities.isUsableAsObjectKey(path)) {\r\n          this.#itemsByProjectPath.set(path, projectItem);\r\n          this.#itemsByType.set(projectItem.itemType, undefined);\r\n\r\n          this.#items.push(projectItem);\r\n\r\n          this._onItemAdded.dispatch(this, projectItem);\r\n        }\r\n      }\r\n    }\r\n\r\n    this._onInflated.dispatch(this, this);\r\n\r\n    this.initializeWorldSettings();\r\n    this.ensureDefaultWorldName();\r\n\r\n    this.#isInflated = true;\r\n\r\n    // Freshly loaded content is, by definition, not user-modified yet. Any file-update\r\n    // events that fired while subscriptions were being wired up during load/inflate\r\n    // (e.g., default-item generation, auto-migrations, template population) represent\r\n    // the loaded state, not user edits. Clear the change tracker so dirty/change\r\n    // indicators only light up in response to actual user actions after load.\r\n    this.changedFilesSinceLastSaved = {};\r\n  }\r\n\r\n  async deletePreferencesFile() {\r\n    if (this.#preferencesFile) {\r\n      await this.#preferencesFile.deleteThisFile();\r\n    }\r\n  }\r\n\r\n  async deleteThisProject() {\r\n    await this.deletePreferencesFile();\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.projectFolder) {\r\n      await this.#projectFolder?.deleteThisFolder();\r\n    }\r\n  }\r\n\r\n  async saveToFile() {\r\n    Log.assert(!this.#isDisposed, \"PSF\");\r\n\r\n    if (this.#preferencesFile === null) {\r\n      return;\r\n    }\r\n\r\n    if (this.#preferencesFile.setObjectContentIfSemanticallyDifferent(this.#data, FileUpdateType.versionlessEdit)) {\r\n      await this.#preferencesFile.saveContent();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates the project's preview image from available pack icons or textures.\r\n   * Priority: (1) behavior pack icon, (2) resource pack icon, (3) skin pack icon, (4) any texture\r\n   */\r\n  async updatePreviewImageIfNeeded(): Promise<boolean> {\r\n    // Skip if we already have a preview image\r\n    if (this.#data.previewImageBase64) {\r\n      return false;\r\n    }\r\n\r\n    // Ensure folder structure is loaded so we have access to all items\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    // Try to find a suitable preview image in priority order\r\n    let imageFile: IFile | undefined;\r\n\r\n    // 1. Look for pack icon images (behavior pack, resource pack, skin pack icons)\r\n    const packIconItems = this.getItemsByType(ProjectItemType.packIconImage);\r\n    for (const iconItem of packIconItems) {\r\n      if (!iconItem.isContentLoaded) {\r\n        await iconItem.loadContent();\r\n      }\r\n      if (iconItem.primaryFile && iconItem.primaryFile.content) {\r\n        // Prefer behavior pack icons first (check if in behavior_packs folder)\r\n        const path = iconItem.projectPath?.toLowerCase() || \"\";\r\n        if (path.includes(\"behavior_pack\") || path.includes(\"bp\")) {\r\n          imageFile = iconItem.primaryFile;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // 2. If no behavior pack icon, try resource pack icon\r\n    if (!imageFile) {\r\n      for (const iconItem of packIconItems) {\r\n        if (iconItem.primaryFile && iconItem.primaryFile.content) {\r\n          const path = iconItem.projectPath?.toLowerCase() || \"\";\r\n          if (path.includes(\"resource_pack\") || path.includes(\"rp\")) {\r\n            imageFile = iconItem.primaryFile;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // 3. If no resource pack icon, try skin pack icon\r\n    if (!imageFile) {\r\n      for (const iconItem of packIconItems) {\r\n        if (iconItem.primaryFile && iconItem.primaryFile.content) {\r\n          const path = iconItem.projectPath?.toLowerCase() || \"\";\r\n          if (path.includes(\"skin_pack\") || path.includes(\"skin\")) {\r\n            imageFile = iconItem.primaryFile;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // 4. If still no icon, use any pack icon we found\r\n    if (!imageFile) {\r\n      for (const iconItem of packIconItems) {\r\n        if (iconItem.primaryFile && iconItem.primaryFile.content) {\r\n          imageFile = iconItem.primaryFile;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // 5. If no pack icons at all, try to find any texture image\r\n    if (!imageFile) {\r\n      const textureItems = this.getItemsByType(ProjectItemType.texture);\r\n      for (const textureItem of textureItems) {\r\n        // Skip very large textures or non-PNG files\r\n        if (!textureItem.primaryFile?.name.toLowerCase().endsWith(\".png\")) {\r\n          continue;\r\n        }\r\n        if (!textureItem.isContentLoaded) {\r\n          await textureItem.loadContent();\r\n        }\r\n        if (textureItem.primaryFile && textureItem.primaryFile.content) {\r\n          // Only use reasonably sized textures (under 256KB) to avoid huge base64 strings\r\n          if (textureItem.primaryFile.content.length < 256 * 1024) {\r\n            imageFile = textureItem.primaryFile;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Convert the image to base64 if we found one\r\n    if (imageFile && imageFile.content) {\r\n      const content = imageFile.content;\r\n      if (content instanceof Uint8Array) {\r\n        this.#data.previewImageBase64 = Utilities.uint8ArrayToBase64(content);\r\n        return true;\r\n      } else if (typeof content === \"string\") {\r\n        // If content is already a string, it might already be base64 or we skip it\r\n        // For PNG files, binary content should always be Uint8Array after loading\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private _handleDeployUpdated(message: string) {\r\n    this.#creatorTools.notifyStatusUpdate(message);\r\n  }\r\n\r\n  async save(force?: boolean) {\r\n    Log.assert(!this.#isDisposed, \"PSFA\");\r\n\r\n    if (this.#readOnlySafety) {\r\n      throw new Error(\"Attempting to save project in read-only mode.\");\r\n    }\r\n\r\n    await this.ensureProjectFolder();\r\n\r\n    // Update preview image from pack icons/textures if not already set\r\n    await this.updatePreviewImageIfNeeded();\r\n\r\n    // save all things inside of file containers first\r\n    for (let i = 0; i < this.#items.length; i++) {\r\n      const projectItem = this.#items[i];\r\n\r\n      if ((projectItem.needsSave || force) && projectItem.isInFileContainer) {\r\n        await projectItem.prepareToSave();\r\n\r\n        this.updateContentsModified();\r\n\r\n        await this.#items[i].saveContent();\r\n      }\r\n    }\r\n\r\n    // save non container files\r\n    for (let i = 0; i < this.#items.length; i++) {\r\n      const projectItem = this.#items[i];\r\n\r\n      if ((projectItem.needsSave || force) && !projectItem.isInFileContainer) {\r\n        await projectItem.prepareToSave();\r\n\r\n        this.updateContentsModified();\r\n\r\n        await this.#items[i].saveContent();\r\n      }\r\n    }\r\n\r\n    await this.saveToFile();\r\n\r\n    this.changedFilesSinceLastSaved = {};\r\n\r\n    if (this.projectFolder) {\r\n      // we should have saved everything with individual project saves, but we should also allow folders to save their state.\r\n      await this.projectFolder.saveAll();\r\n    }\r\n\r\n    if (\r\n      this.autoDeploymentMode === ProjectAutoDeploymentMode.deployOnSave &&\r\n      this.#creatorTools.deploymentStorage !== null &&\r\n      this.#creatorTools.activeMinecraft\r\n    ) {\r\n      await this.#creatorTools.activeMinecraft.syncWithDeployment();\r\n    }\r\n\r\n    this._onSaved.dispatch(this, this);\r\n\r\n    if (this.#creatorTools.activeOperations.length === 0) {\r\n      await this.#creatorTools.notifyStatusUpdate(\"Save complete\");\r\n    }\r\n  }\r\n\r\n  async autoCompleteProject() {\r\n    await this.ensureScriptInDestination();\r\n    await this.ensureCatalogIndex();\r\n    await this.ensureAutogeneratedBehaviorPackManifest();\r\n  }\r\n\r\n  updateProjectItemsFromContent() {\r\n    this.#itemsByProjectPath = new Map();\r\n\r\n    for (const projectItem of this.items) {\r\n      if (projectItem && projectItem.projectPath) {\r\n        projectItem.updateProjectPath();\r\n\r\n        this.#itemsByProjectPath.set(ProjectUtilities.canonicalizeStoragePath(projectItem.projectPath), projectItem);\r\n      }\r\n    }\r\n  }\r\n\r\n  setProjectFolder(newFolder: IFolder) {\r\n    if (this.#projectFolder !== newFolder) {\r\n      this._unapplyFromProjectFolder();\r\n\r\n      this.#projectFolder = newFolder;\r\n      this.#folderStructureLoaded = false;\r\n      this._applyToProjectFolder();\r\n    }\r\n\r\n    this.#isProjectFolderEnsured = true;\r\n  }\r\n\r\n  async attemptToLoadPreferences() {\r\n    if (!this.#preferencesFile && this.#projectFolder) {\r\n      const file = await this.#projectFolder.getFileFromRelativePath(\"/.mct/prefs.mctp.json\");\r\n\r\n      if (file && (await file.exists())) {\r\n        this.#preferencesFile = file;\r\n\r\n        await this.loadPreferencesAndFolder();\r\n      }\r\n    }\r\n  }\r\n\r\n  _unapplyFromProjectFolder() {\r\n    if (this.#projectFolder) {\r\n      this.#projectFolder.storage.onFileContentsUpdated.unsubscribe(this._handleProjectFileContentsUpdated);\r\n      this.#projectFolder.storage.onFileAdded.unsubscribe(this._handleProjectFileAdded);\r\n      this.#projectFolder.storage.onFileRemoved.unsubscribe(this._handleProjectFileRemoved);\r\n      this.#projectFolder.onChildFolderMoved.unsubscribe(this._handleProjectFolderMoved);\r\n    }\r\n\r\n    // Clear any pending debounce timer\r\n    if (this.#externalChangeDebounceTimer) {\r\n      clearTimeout(this.#externalChangeDebounceTimer);\r\n      this.#externalChangeDebounceTimer = null;\r\n    }\r\n    this.#pendingExternalAdds.clear();\r\n    this.#pendingExternalRemoves.clear();\r\n  }\r\n\r\n  _applyToProjectFolder() {\r\n    if (this.#projectFolder) {\r\n      this.#projectFolder.storage.readOnly = this.#readOnlySafety;\r\n\r\n      this.#projectFolder.storage.onFileContentsUpdated.subscribe(this._handleProjectFileContentsUpdated);\r\n      this.#projectFolder.storage.onFileAdded.subscribe(this._handleProjectFileAdded);\r\n      this.#projectFolder.storage.onFileRemoved.subscribe(this._handleProjectFileRemoved);\r\n      this.#projectFolder.onChildFolderMoved.subscribe(this._handleProjectFolderMoved);\r\n    }\r\n  }\r\n\r\n  async ensureProjectFolder(force?: boolean): Promise<IFolder> {\r\n    if (!force && this.#projectFolder !== null && this.#isProjectFolderEnsured) {\r\n      return this.#projectFolder;\r\n    }\r\n\r\n    if (\r\n      this.#data.localFolderPath !== undefined &&\r\n      this.#creatorTools.ensureLocalFolder !== undefined &&\r\n      this.#creatorTools.localFolderExists !== undefined\r\n    ) {\r\n      const folderExists = await this.#creatorTools.localFolderExists(this.#data.localFolderPath);\r\n\r\n      if (folderExists) {\r\n        const folder = this.#creatorTools.ensureLocalFolder(this.#data.localFolderPath);\r\n\r\n        if (folder !== this.#projectFolder) {\r\n          this._unapplyFromProjectFolder();\r\n\r\n          await folder.ensureExists();\r\n\r\n          this.#projectFolder = folder;\r\n          this.#folderStructureLoaded = false;\r\n\r\n          this._applyToProjectFolder();\r\n        }\r\n      } else {\r\n        const folder = this.#creatorTools.projectsStorage.rootFolder.ensureFolder(\r\n          StorageUtilities.convertFolderPlaceholders(ProjectUtilities.canonicalizeStoragePath(this.#data.name))\r\n        );\r\n\r\n        if (folder !== this.#projectFolder) {\r\n          this._unapplyFromProjectFolder();\r\n\r\n          await folder.ensureExists();\r\n\r\n          this.#projectFolder = folder;\r\n          this.#folderStructureLoaded = false;\r\n\r\n          this._applyToProjectFolder();\r\n          Log.debug(\r\n            \"Using project storage root folder as a backup because local folder path \" +\r\n              this.#data.localFolderPath +\r\n              \" could not be found: \" +\r\n              this.#projectFolder.fullPath\r\n          );\r\n        }\r\n\r\n        this.#errorState = ProjectErrorState.projectFolderOrFileDoesNotExist;\r\n      }\r\n    } else if (\r\n      this.#data.mainDeployFolderPath !== undefined &&\r\n      this.#creatorTools.ensureLocalFolder !== undefined &&\r\n      this.#creatorTools.localFolderExists !== undefined\r\n    ) {\r\n      const folder = this.#creatorTools.projectsStorage.rootFolder.ensureFolder(\r\n        ProjectUtilities.canonicalizeStoragePath(this.#data.name)\r\n      );\r\n\r\n      if (folder !== this.#projectFolder) {\r\n        this._unapplyFromProjectFolder();\r\n\r\n        await folder.ensureExists();\r\n\r\n        this.#projectFolder = folder;\r\n        this.#folderStructureLoaded = false;\r\n\r\n        this._applyToProjectFolder();\r\n      }\r\n\r\n      const deployFolderExists = await this.#creatorTools.localFolderExists(this.#data.mainDeployFolderPath);\r\n\r\n      if (deployFolderExists) {\r\n        const folder = this.#creatorTools.ensureLocalFolder(this.#data.mainDeployFolderPath);\r\n\r\n        if (folder !== this.#mainDeployFolder) {\r\n          this.#mainDeployFolder = folder;\r\n\r\n          this.#mainDeploySync = new ProjectDeploySync(this, folder);\r\n\r\n          await this.#mainDeploySync.fullIngestIntoProject();\r\n        }\r\n      }\r\n    } else if (\r\n      this.#data.mainDeployFolderPath !== undefined &&\r\n      this.#creatorTools.isDeployingToMinecraft &&\r\n      this.#creatorTools.deploymentStorage\r\n    ) {\r\n      const folder = this.#creatorTools.projectsStorage.rootFolder.ensureFolder(\r\n        ProjectUtilities.canonicalizeStoragePath(this.#data.name)\r\n      );\r\n\r\n      if (folder !== this.#projectFolder) {\r\n        this._unapplyFromProjectFolder();\r\n        await folder.ensureExists();\r\n\r\n        this.#projectFolder = folder;\r\n        this.#folderStructureLoaded = false;\r\n\r\n        this._applyToProjectFolder();\r\n      }\r\n\r\n      const deployFolder = await this.#creatorTools.defaultDeploymentStorage.ensureFolderFromStorageRelativePath(\r\n        this.#data.mainDeployFolderPath\r\n      );\r\n\r\n      const deployFolderExists = await deployFolder.exists();\r\n\r\n      if (deployFolderExists) {\r\n        if (deployFolder !== this.#mainDeployFolder) {\r\n          this.#mainDeployFolder = folder;\r\n          this.#mainDeploySync = new ProjectDeploySync(this, deployFolder);\r\n\r\n          await this.#mainDeploySync.fullIngestIntoProject();\r\n        }\r\n      }\r\n    } else if (\r\n      this.#data.localFilePath !== undefined &&\r\n      this.#creatorTools.ensureLocalFolder !== undefined &&\r\n      this.#creatorTools.localFileExists !== undefined &&\r\n      this.#creatorTools.localFolderExists !== undefined\r\n    ) {\r\n      const folderPath = StorageUtilities.getFolderPath(this.#data.localFilePath);\r\n      const fileName = StorageUtilities.getLeafName(this.#data.localFilePath);\r\n\r\n      if (!fileName || fileName.length < 2 || !folderPath || folderPath.length < 2) {\r\n        throw new Error(\"Could not process file with path: `\" + this.#data.localFilePath + \"`\");\r\n      }\r\n\r\n      const containingFolder = this.#creatorTools.ensureLocalFolder(folderPath);\r\n\r\n      const file = containingFolder.ensureFile(fileName);\r\n\r\n      const fileExists = await file.exists();\r\n\r\n      if (fileExists) {\r\n        this.#projectCabinetFile = file;\r\n\r\n        await this.ensureProjectFolderFromCabinet();\r\n\r\n        Log.assert(\r\n          this.#projectFolder !== null && this.#projectFolder !== undefined,\r\n          \"Could not create a project folder from \" + this.#data.localFilePath + \".\" + this.errorMessage\r\n            ? \" \" + this.errorMessage\r\n            : \"\"\r\n        );\r\n\r\n        if (this.#accessoryFilePaths && this.#projectFolder) {\r\n          for (let i = 0; i < this.#accessoryFilePaths.length; i++) {\r\n            if (\r\n              (this.#accessoryFilePaths[i].startsWith(\"\\\\\") || this.#accessoryFilePaths[i].indexOf(\":\") >= 0) &&\r\n              this.creatorTools.localFileExists &&\r\n              this.creatorTools.ensureLocalFolder\r\n            ) {\r\n              if (StorageUtilities.isUsableFile(this.#accessoryFilePaths[i])) {\r\n                const exists = await this.creatorTools.localFileExists(this.#accessoryFilePaths[i]);\r\n\r\n                if (exists) {\r\n                  const folder = this.creatorTools.ensureLocalFolder(\r\n                    StorageUtilities.getFolderPath(this.#accessoryFilePaths[i])\r\n                  );\r\n\r\n                  if (folder) {\r\n                    folder.storage.readOnly = true;\r\n\r\n                    const fileName = StorageUtilities.getLeafName(this.#accessoryFilePaths[i]);\r\n                    await folder.load();\r\n                    const file = folder.files[fileName];\r\n\r\n                    if (file && (await file.exists())) {\r\n                      if (this.#accessoryFoldersForFilePaths === null) {\r\n                        this.#accessoryFoldersForFilePaths = [];\r\n                      }\r\n                      this.#accessoryFoldersForFilePaths.push(file.parentFolder);\r\n                      this._inferProjectItemFromFile(file, file.parentFolder, file.storageRelativePath);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            } else {\r\n              const addFile = containingFolder.ensureFile(this.#accessoryFilePaths[i]);\r\n\r\n              const additionalFileExists = await addFile.exists();\r\n              if (additionalFileExists) {\r\n                let isChildOfExistingFolder = false;\r\n\r\n                if (this.#accessoryFoldersForFilePaths === null) {\r\n                  this.#accessoryFoldersForFilePaths = [];\r\n                }\r\n\r\n                for (let j = 0; j < this.#accessoryFoldersForFilePaths.length; j++) {\r\n                  let addFileStoragePath = addFile.getFolderRelativePath(this.#accessoryFoldersForFilePaths[j]);\r\n\r\n                  if (addFileStoragePath) {\r\n                    isChildOfExistingFolder = true;\r\n                    this._inferProjectItemFromFile(addFile, this.#accessoryFoldersForFilePaths[j], addFileStoragePath);\r\n                  }\r\n                }\r\n\r\n                if (!isChildOfExistingFolder) {\r\n                  if (addFile.parentFolder) {\r\n                    let addFileStoragePath = addFile.getFolderRelativePath(addFile.parentFolder);\r\n                    if (addFileStoragePath) {\r\n                      this.#accessoryFoldersForFilePaths.push(addFile.parentFolder);\r\n                      this._inferProjectItemFromFile(addFile, addFile.parentFolder, addFileStoragePath);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!this.#projectFolder) {\r\n        const folder = this.#creatorTools.projectsStorage.rootFolder.ensureFolder(\r\n          ProjectUtilities.canonicalizeStoragePath(this.#data.name)\r\n        );\r\n        if (folder !== this.#projectFolder) {\r\n          this._unapplyFromProjectFolder();\r\n\r\n          this.#projectFolder = folder;\r\n          this.#folderStructureLoaded = false;\r\n\r\n          this._applyToProjectFolder();\r\n        }\r\n\r\n        this.#errorState = ProjectErrorState.projectFolderOrFileDoesNotExist;\r\n      }\r\n    } else if (this.#useProjectNameInProjectStorage) {\r\n      const folder = this.#creatorTools.projectsStorage.rootFolder.ensureFolder(this.name);\r\n\r\n      if (folder !== this.#projectFolder) {\r\n        this._unapplyFromProjectFolder();\r\n\r\n        this.#projectFolder = folder;\r\n        this.#folderStructureLoaded = false;\r\n\r\n        this._applyToProjectFolder();\r\n      }\r\n    } else {\r\n      // Log.debug(\"Using project storage root folder subfolder: \" + this.#data.dataStorageRelativePath);\r\n\r\n      const folder = await this.#creatorTools.projectsStorage.ensureFolderFromStorageRelativePath(\r\n        this.#data.dataStorageRelativePath\r\n      );\r\n\r\n      if (folder !== this.#projectFolder) {\r\n        this._unapplyFromProjectFolder();\r\n\r\n        this.#projectFolder = folder;\r\n        this.#folderStructureLoaded = false;\r\n\r\n        this._applyToProjectFolder();\r\n      }\r\n    }\r\n\r\n    const result = await this.#projectFolder.ensureExists();\r\n\r\n    this.#isProjectFolderEnsured = result;\r\n\r\n    return this.#projectFolder;\r\n  }\r\n\r\n  async _inferProjectItemFromFile(file: IFile, folder: IFolder, fileStoragePath: string) {\r\n    const fileName = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    if (fileName.endsWith(\".data.json\")) {\r\n      this.ensureItemByProjectPath(\r\n        fileStoragePath,\r\n        ProjectItemStorageType.singleFile,\r\n        file.name,\r\n        ProjectItemType.projectSummaryMetadata,\r\n        FolderContext.metaData,\r\n        undefined,\r\n        ProjectItemCreationType.normal,\r\n        file\r\n      );\r\n    } else if (fileName.endsWith(\".tags.json\")) {\r\n      this.ensureItemByProjectPath(\r\n        fileStoragePath,\r\n        ProjectItemStorageType.singleFile,\r\n        file.name,\r\n        ProjectItemType.tagsMetadata,\r\n        FolderContext.metaData,\r\n        undefined,\r\n        ProjectItemCreationType.normal,\r\n        file\r\n      );\r\n    }\r\n  }\r\n\r\n  _handleProjectFolderMoved(folder: IFolder, folderMove: IFolderMove) {\r\n    // refresh project paths from files/folders where possible\r\n    this.updateProjectItemsFromContent();\r\n\r\n    if (folderMove.previousStoragePath && this.#projectFolder) {\r\n      const newProjectPath = folderMove.folder.getFolderRelativePath(this.#projectFolder);\r\n\r\n      if (newProjectPath) {\r\n        const storageRelativeComponent = this.#projectFolder.fullPath.substring(\r\n          0,\r\n          folderMove.folder.fullPath.length - newProjectPath.length + 1\r\n        );\r\n\r\n        let previousPath = folderMove.previousStoragePath;\r\n\r\n        if (previousPath.startsWith(storageRelativeComponent)) {\r\n          previousPath = previousPath.substring(storageRelativeComponent.length);\r\n        }\r\n\r\n        for (const item of this.items) {\r\n          if (item && item.projectPath && item.projectPath.startsWith(previousPath)) {\r\n            item.projectPath = newProjectPath + item.projectPath.substring(previousPath.length);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async _handleProjectFileContentsUpdated(storage: IStorage, fileUpdate: IFileUpdateEvent) {\r\n    if (!this.#projectFolder) {\r\n      return;\r\n    }\r\n\r\n    let rootRelativePath = fileUpdate.file.storageRelativePath;\r\n    this.#indevInfoSetNeedsUpdating = true;\r\n\r\n    if (\r\n      this.#projectFolder.storageRelativePath.length > 0 &&\r\n      rootRelativePath.startsWith(this.#projectFolder.storageRelativePath)\r\n    ) {\r\n      rootRelativePath = rootRelativePath.substring(this.#projectFolder.storageRelativePath.length - 1);\r\n    }\r\n\r\n    let storagePath = ProjectUtilities.canonicalizeStoragePath(rootRelativePath);\r\n\r\n    if (storage.containerFile && this.projectFolder) {\r\n      storagePath = storage.containerFile.getFolderRelativePath(this.projectFolder) + \"#\" + storagePath;\r\n    }\r\n\r\n    if (Utilities.isUsableAsObjectKey(storagePath)) {\r\n      if (!this.changedFilesSinceLastSaved[storagePath]) {\r\n        this.changedFilesSinceLastSaved[storagePath] = fileUpdate.file;\r\n\r\n        this._onNeedsSaveChanged.dispatch(this, this);\r\n      }\r\n\r\n      const item = this.#itemsByProjectPath.get(storagePath);\r\n      if (item) {\r\n        if (\r\n          fileUpdate.updateType === FileUpdateType.versionRestorationRetainCurrent ||\r\n          fileUpdate.updateType === FileUpdateType.versionRestoration ||\r\n          fileUpdate.updateType === FileUpdateType.externalChange\r\n        ) {\r\n          item.invalidateContentProcessedState();\r\n        }\r\n\r\n        this.notifyProjectItemContentChanged(item, fileUpdate);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handles a file being added externally (e.g., by MCP saving a new model).\r\n   * Uses debouncing to batch multiple rapid additions into a single re-inference pass.\r\n   */\r\n  async _handleProjectFileAdded(storage: IStorage, file: IFile) {\r\n    if (!this.#projectFolder || this.#isDisposed) {\r\n      return;\r\n    }\r\n\r\n    const storagePath = ProjectUtilities.canonicalizeStoragePath(file.storageRelativePath);\r\n\r\n    // Add to pending set\r\n    this.#pendingExternalAdds.add(storagePath);\r\n\r\n    // If this path was pending removal, cancel the removal (quick delete+recreate)\r\n    this.#pendingExternalRemoves.delete(storagePath);\r\n\r\n    // Reset the debounce timer\r\n    this._scheduleExternalChangeFlush();\r\n  }\r\n\r\n  /**\r\n   * Handles a file being removed externally.\r\n   * Uses debouncing to batch multiple rapid removals into a single cleanup pass.\r\n   */\r\n  async _handleProjectFileRemoved(storage: IStorage, filePath: string) {\r\n    if (!this.#projectFolder || this.#isDisposed) {\r\n      return;\r\n    }\r\n\r\n    // Convert the full path to a storage-relative path\r\n    let relativePath = filePath;\r\n    if (this.#projectFolder.storage.rootFolder.fullPath) {\r\n      const rootPath = this.#projectFolder.storage.rootFolder.fullPath;\r\n      if (filePath.startsWith(rootPath)) {\r\n        relativePath = filePath.substring(rootPath.length);\r\n      }\r\n    }\r\n\r\n    const storagePath = ProjectUtilities.canonicalizeStoragePath(relativePath);\r\n\r\n    // If this path was pending addition, just remove from pending adds (never existed in project)\r\n    if (this.#pendingExternalAdds.has(storagePath)) {\r\n      this.#pendingExternalAdds.delete(storagePath);\r\n      return;\r\n    }\r\n\r\n    // Add to pending removals\r\n    this.#pendingExternalRemoves.add(storagePath);\r\n\r\n    // Reset the debounce timer\r\n    this._scheduleExternalChangeFlush();\r\n  }\r\n\r\n  /**\r\n   * Schedules the debounced flush of external file changes.\r\n   */\r\n  private _scheduleExternalChangeFlush() {\r\n    if (this.#externalChangeDebounceTimer) {\r\n      clearTimeout(this.#externalChangeDebounceTimer);\r\n    }\r\n\r\n    this.#externalChangeDebounceTimer = setTimeout(() => {\r\n      this._flushExternalChanges();\r\n    }, Project.EXTERNAL_CHANGE_DEBOUNCE_MS);\r\n  }\r\n\r\n  /**\r\n   * Processes all pending external file additions and removals.\r\n   * Called after the debounce timer expires.\r\n   */\r\n  async _flushExternalChanges() {\r\n    if (this.#isDisposed || !this.#projectFolder) {\r\n      return;\r\n    }\r\n\r\n    this.#externalChangeDebounceTimer = null;\r\n\r\n    const addedPaths = Array.from(this.#pendingExternalAdds);\r\n    const removedPaths = Array.from(this.#pendingExternalRemoves);\r\n\r\n    this.#pendingExternalAdds.clear();\r\n    this.#pendingExternalRemoves.clear();\r\n\r\n    // Handle removals first - find and remove corresponding ProjectItems\r\n    for (const removedPath of removedPaths) {\r\n      const item = this.#itemsByProjectPath.get(removedPath);\r\n      if (item) {\r\n        // Remove the item from the project\r\n        const index = this.#items.indexOf(item);\r\n        if (index >= 0) {\r\n          this.#items.splice(index, 1);\r\n        }\r\n        this.#itemsByProjectPath.delete(removedPath);\r\n\r\n        // Notify listeners\r\n        this._onItemRemoved.dispatch(this, item);\r\n      }\r\n    }\r\n\r\n    // Handle additions - re-infer project items from files\r\n    // Only if there were additions (don't re-scan if only removals)\r\n    if (addedPaths.length > 0) {\r\n      const itemCountBefore = this.#items.length;\r\n\r\n      // Re-infer project items from the root folder.\r\n      // Use force=true so that already-loaded folders are re-scanned from disk,\r\n      // picking up files created externally (e.g., by MCP tools or other processes).\r\n      await this.inferProjectItemsFromFilesRootFolder(true);\r\n\r\n      // Find the newly created items and notify listeners\r\n      let matchedCount = 0;\r\n      for (const addedPath of addedPaths) {\r\n        const item = this.#itemsByProjectPath.get(addedPath);\r\n        if (item) {\r\n          this._onItemAdded.dispatch(this, item);\r\n          matchedCount++;\r\n        }\r\n      }\r\n\r\n      // If inference added items but path-based lookup didn't find them\r\n      // (e.g., due to path format differences), dispatch a generic property\r\n      // change to ensure the UI still refreshes.\r\n      if (matchedCount === 0 && this.#items.length > itemCountBefore) {\r\n        this._onPropertyChanged.dispatch(this, \"items\");\r\n      }\r\n    }\r\n\r\n    // Mark info set as needing update\r\n    this.#indevInfoSetNeedsUpdating = true;\r\n  }\r\n\r\n  async ensureDistFolder(): Promise<IFolder> {\r\n    if (this.#distBuildFolder) {\r\n      return this.#distBuildFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.#distBuildFolder === null) {\r\n      this.#distBuildFolder = this.#projectFolder.ensureFolder(\"dist\");\r\n      await this.#distBuildFolder.ensureExists();\r\n    }\r\n\r\n    return this.#distBuildFolder;\r\n  }\r\n\r\n  async ensureDistBuildScriptsFolder(): Promise<IFolder> {\r\n    if (this.#distBuildScriptsFolder) {\r\n      return this.#distBuildScriptsFolder;\r\n    }\r\n\r\n    await this.ensureDistFolder();\r\n\r\n    if (this.#distBuildFolder === undefined || this.#distBuildFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create dist folder\");\r\n    }\r\n\r\n    if (this.#distBuildScriptsFolder === null) {\r\n      this.#distBuildScriptsFolder = this.#distBuildFolder.ensureFolder(\"scripts\");\r\n      await this.#distBuildScriptsFolder.ensureExists();\r\n    }\r\n\r\n    return this.#distBuildScriptsFolder;\r\n  }\r\n\r\n  getLibFolder(): IFolder | null {\r\n    if (this.#libFolder) {\r\n      return this.#libFolder;\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      return null;\r\n    }\r\n\r\n    if (this.#libFolder === null) {\r\n      this.#libFolder = this.#projectFolder.ensureFolder(\"lib\");\r\n    }\r\n\r\n    return this.#libFolder;\r\n  }\r\n\r\n  getDistBuildFolder(): IFolder | null {\r\n    if (this.#distBuildFolder) {\r\n      return this.#distBuildFolder;\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      return null;\r\n    }\r\n\r\n    if (this.#distBuildFolder === null) {\r\n      this.#distBuildFolder = this.#projectFolder.ensureFolder(\"dist\");\r\n    }\r\n\r\n    return this.#distBuildFolder;\r\n  }\r\n\r\n  async ensureLibFolder(): Promise<IFolder> {\r\n    if (this.#libFolder) {\r\n      return this.#libFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.#libFolder === null) {\r\n      this.#libFolder = this.#projectFolder.ensureFolder(\"lib\");\r\n      await this.#libFolder.ensureExists();\r\n    }\r\n\r\n    return this.#libFolder;\r\n  }\r\n\r\n  getLibScriptsFolder(): IFolder | null {\r\n    if (this.#libScriptsFolder) {\r\n      return this.#libScriptsFolder;\r\n    }\r\n\r\n    const libFolder = this.getLibFolder();\r\n\r\n    if (libFolder) {\r\n      this.#libScriptsFolder = libFolder.ensureFolder(\"scripts\");\r\n    }\r\n\r\n    return this.#libScriptsFolder;\r\n  }\r\n\r\n  getDistBuildScriptsFolder(): IFolder | null {\r\n    if (this.#distBuildScriptsFolder) {\r\n      return this.#distBuildScriptsFolder;\r\n    }\r\n\r\n    const distFolder = this.getDistBuildFolder();\r\n\r\n    if (distFolder) {\r\n      this.#distBuildScriptsFolder = distFolder.ensureFolder(\"scripts\");\r\n    }\r\n\r\n    return this.#distBuildScriptsFolder;\r\n  }\r\n\r\n  async ensureLibScriptsFolder(): Promise<IFolder> {\r\n    if (this.#libScriptsFolder) {\r\n      return this.#libScriptsFolder;\r\n    }\r\n\r\n    await this.ensureLibFolder();\r\n\r\n    if (this.#libFolder === undefined || this.#libFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create dist folder\");\r\n    }\r\n\r\n    if (this.#libScriptsFolder === null) {\r\n      this.#libScriptsFolder = this.#libFolder.ensureFolder(\"scripts\");\r\n      await this.#libScriptsFolder.ensureExists();\r\n    }\r\n\r\n    return this.#libScriptsFolder;\r\n  }\r\n\r\n  async ensureDocsFolder(): Promise<IFolder> {\r\n    if (this.docsContainer !== null) {\r\n      return this.docsContainer;\r\n    }\r\n\r\n    const rootFolder = await this.ensureProjectFolder();\r\n\r\n    this.docsContainer = rootFolder.ensureFolder(\"docs\");\r\n\r\n    return this.docsContainer;\r\n  }\r\n\r\n  async ensureDefaultScriptsFolder(): Promise<IFolder> {\r\n    if (this.#defaultScriptsFolder !== null) {\r\n      return this.#defaultScriptsFolder;\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const pi = this.items[i];\r\n\r\n      if (pi.itemType === ProjectItemType.js || pi.itemType === ProjectItemType.ts) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          this.#defaultScriptsFolder = pi.primaryFile.parentFolder;\r\n\r\n          if (this.#defaultScriptsFolder !== null) {\r\n            return this.#defaultScriptsFolder;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.#defaultScriptsFolder !== null) {\r\n      return this.#defaultScriptsFolder;\r\n    }\r\n\r\n    if (this.#defaultScriptsFolder === null) {\r\n      await this.#projectFolder.load();\r\n\r\n      const rootScriptsFolder = this.#projectFolder.folders[\"scripts\"];\r\n\r\n      if (rootScriptsFolder) {\r\n        const rootScriptsFolderExists = await rootScriptsFolder.exists();\r\n\r\n        if (rootScriptsFolderExists) {\r\n          this.#defaultScriptsFolder = rootScriptsFolder;\r\n          return this.#defaultScriptsFolder;\r\n        }\r\n      }\r\n    }\r\n\r\n    const defaultBehaviorPackFolder = await this.ensureDefaultBehaviorPackFolder();\r\n\r\n    if (!defaultBehaviorPackFolder) {\r\n      return this.#projectFolder.ensureFolder(\"scripts\");\r\n    }\r\n\r\n    const defaultBehaviorPackScriptsFolder = defaultBehaviorPackFolder.ensureFolder(\"scripts\");\r\n\r\n    await defaultBehaviorPackScriptsFolder.ensureExists();\r\n\r\n    this.#defaultScriptsFolder = defaultBehaviorPackScriptsFolder;\r\n\r\n    return this.#defaultScriptsFolder;\r\n  }\r\n\r\n  async getDefaultWorldFolder(): Promise<IFolder | null> {\r\n    if (this.defaultWorldFolder !== null) {\r\n      return this.defaultWorldFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    return this.defaultWorldFolder;\r\n  }\r\n\r\n  async ensurePacks() {\r\n    for (const item of this.items) {\r\n      if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.behavior, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.resource, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.skinPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.skin, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.designPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.design, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.personaManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.persona, item.isInWorld === true);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensurePacksAsync() {\r\n    for (const item of this.items) {\r\n      if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.behavior, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.resource, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.skinPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.skin, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.designPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.design, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.personaManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.persona, item.isInWorld === true);\r\n        }\r\n      }\r\n    }\r\n  }\r\n  async getDefaultBehaviorPackFolder(force?: boolean, preventEnsureFileStorage?: boolean): Promise<IFolder | null> {\r\n    if (this.defaultBehaviorPackFolder !== null && !force) {\r\n      return this.defaultBehaviorPackFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.defaultBehaviorPackFolder !== null && !force) {\r\n      return this.defaultBehaviorPackFolder;\r\n    }\r\n\r\n    if (force) {\r\n      this.defaultBehaviorPackFolder = null;\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const pi = this.items[i];\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!preventEnsureFileStorage) {\r\n          // this is an option to avoid stack overflows of ensureFileStorage -> updateAutogenerated -> ensureFileStorage\r\n          await pi.loadFileContent();\r\n        }\r\n\r\n        const itemFile = pi.primaryFile;\r\n\r\n        if (itemFile) {\r\n          this.defaultBehaviorPackFolder = itemFile.parentFolder;\r\n\r\n          this.ensurePackByFolder(this.defaultBehaviorPackFolder, PackType.behavior, pi.isInWorld === true);\r\n\r\n          if (this.defaultBehaviorPackFolder !== null) {\r\n            return this.defaultBehaviorPackFolder;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.defaultBehaviorPackFolder;\r\n  }\r\n\r\n  async getDefaultBehaviorPack(): Promise<Pack | undefined> {\r\n    const folder = await this.getDefaultBehaviorPackFolder(false, false);\r\n\r\n    if (!folder) {\r\n      return undefined;\r\n    }\r\n\r\n    return await this.ensurePackByFolder(folder, PackType.behavior, false);\r\n  }\r\n\r\n  async ensureDefaultBehaviorPackFolder(force?: boolean): Promise<IFolder> {\r\n    if (this.defaultBehaviorPackFolder !== null && !force) {\r\n      return this.defaultBehaviorPackFolder;\r\n    }\r\n\r\n    await this.getDefaultBehaviorPackFolder(force);\r\n\r\n    if (this.defaultBehaviorPackFolder !== null) {\r\n      return this.defaultBehaviorPackFolder;\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.behaviorPacksContainer === null) {\r\n      this.behaviorPacksContainer = this.#projectFolder.ensureFolder(\"behavior_packs\");\r\n      await this.behaviorPacksContainer.ensureExists();\r\n    }\r\n\r\n    this.defaultBehaviorPackFolder = this.behaviorPacksContainer.ensureFolder(\r\n      MinecraftUtilities.makeNameFolderSafe(this.effectiveShortName + \"_bp\")\r\n    );\r\n\r\n    await this.defaultBehaviorPackFolder.ensureExists();\r\n\r\n    const pack = await this.ensurePackByFolder(this.defaultBehaviorPackFolder, PackType.behavior, false);\r\n    await pack.ensureManifest();\r\n\r\n    return this.defaultBehaviorPackFolder;\r\n  }\r\n\r\n  async ensureDefaultDesignPackFolder(force?: boolean): Promise<IFolder> {\r\n    if (this.defaultDesignPackFolder !== null && !force) {\r\n      return this.defaultDesignPackFolder;\r\n    }\r\n\r\n    await this.getDefaultDesignPackFolder(force);\r\n\r\n    if (this.defaultDesignPackFolder !== null) {\r\n      return this.defaultDesignPackFolder;\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.designPacksContainer === null) {\r\n      this.designPacksContainer = this.#projectFolder.ensureFolder(\"design_packs\");\r\n      await this.designPacksContainer.ensureExists();\r\n    }\r\n\r\n    this.defaultDesignPackFolder = this.designPacksContainer.ensureFolder(\r\n      MinecraftUtilities.makeNameFolderSafe(this.effectiveShortName + \"_dp\")\r\n    );\r\n\r\n    await this.defaultDesignPackFolder.ensureExists();\r\n\r\n    await this.ensurePackByFolder(this.defaultDesignPackFolder, PackType.design, false);\r\n\r\n    return this.defaultDesignPackFolder;\r\n  }\r\n\r\n  async ensurePackByFolder(folder: IFolder, packType: PackType, isInWorld: boolean) {\r\n    const targetPath = StorageUtilities.canonicalizePath(folder.extendedPath);\r\n\r\n    if (!this.projectFolder) {\r\n      throw new Error(\"PEPBF\");\r\n    }\r\n\r\n    for (const pack of this.#packs) {\r\n      if (pack.folder === folder) {\r\n        return pack;\r\n      }\r\n\r\n      if (pack.folder && StorageUtilities.canonicalizePath(pack.folder.extendedPath) === targetPath) {\r\n        return pack;\r\n      }\r\n    }\r\n\r\n    let itemType = ProjectItemType.behaviorPackFolder;\r\n    let folderContext = FolderContext.behaviorPack;\r\n\r\n    if (packType === PackType.resource) {\r\n      itemType = ProjectItemType.resourcePackFolder;\r\n      folderContext = FolderContext.resourcePack;\r\n    } else if (packType === PackType.skin) {\r\n      itemType = ProjectItemType.skinPackFolder;\r\n      folderContext = FolderContext.skinPack;\r\n    } else if (packType === PackType.persona) {\r\n      itemType = ProjectItemType.personaPackFolder;\r\n      folderContext = FolderContext.persona;\r\n    } else if (packType === PackType.design) {\r\n      itemType = ProjectItemType.designPackFolder;\r\n      folderContext = FolderContext.designPack;\r\n    }\r\n\r\n    const folderPath = folder.getFolderRelativePath(this.projectFolder);\r\n\r\n    if (!folderPath) {\r\n      throw new Error(\"PEBBFA\");\r\n    }\r\n\r\n    const folderProjectItem = this.ensureItemByProjectPath(\r\n      folderPath,\r\n      ProjectItemStorageType.folder,\r\n      folder.name,\r\n      itemType,\r\n      folderContext,\r\n      undefined,\r\n      ProjectItemCreationType.normal,\r\n      undefined,\r\n      undefined,\r\n      isInWorld\r\n    );\r\n\r\n    const newPack = Pack.ensureOnFolder(folder, packType, this, folderProjectItem);\r\n\r\n    if (!this.#packs.includes(newPack)) {\r\n      this.#packs.push(newPack);\r\n    }\r\n\r\n    await newPack.ensureManifest();\r\n\r\n    return newPack;\r\n  }\r\n\r\n  async getDefaultDesignPackFolder(force?: boolean): Promise<IFolder | null> {\r\n    if (this.defaultDesignPackFolder !== null && !force) {\r\n      return this.defaultDesignPackFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.defaultDesignPackFolder !== null && !force) {\r\n      return this.defaultDesignPackFolder;\r\n    }\r\n\r\n    if (force) {\r\n      this.defaultDesignPackFolder = null;\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const pi = this.items[i];\r\n\r\n      if (pi.itemType === ProjectItemType.designPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          this.defaultDesignPackFolder = pi.primaryFile.parentFolder;\r\n\r\n          await this.ensurePackByFolder(this.defaultDesignPackFolder, PackType.design, pi.isInWorld === true);\r\n\r\n          if (this.defaultDesignPackFolder !== null) {\r\n            return this.defaultDesignPackFolder;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  async getDefaultSkinPackFolder(force?: boolean): Promise<IFolder | null> {\r\n    if (this.defaultSkinPackFolder !== null && !force) {\r\n      return this.defaultSkinPackFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.defaultSkinPackFolder !== null && !force) {\r\n      return this.defaultSkinPackFolder;\r\n    }\r\n\r\n    if (force) {\r\n      this.defaultSkinPackFolder = null;\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const pi = this.items[i];\r\n\r\n      if (pi.itemType === ProjectItemType.skinPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          this.defaultSkinPackFolder = pi.primaryFile.parentFolder;\r\n\r\n          await this.ensurePackByFolder(this.defaultSkinPackFolder, PackType.skin, pi.isInWorld === true);\r\n\r\n          if (this.defaultSkinPackFolder !== null) {\r\n            return this.defaultSkinPackFolder;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  async getDefaultResourcePackFolder(force?: boolean): Promise<IFolder | null> {\r\n    if (this.defaultResourcePackFolder !== null && !force) {\r\n      return this.defaultResourcePackFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.defaultResourcePackFolder !== null && !force) {\r\n      return this.defaultResourcePackFolder;\r\n    }\r\n\r\n    if (force) {\r\n      this.defaultResourcePackFolder = null;\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const pi = this.items[i];\r\n\r\n      if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          this.defaultResourcePackFolder = pi.primaryFile.parentFolder;\r\n\r\n          await this.ensurePackByFolder(this.defaultResourcePackFolder, PackType.resource, pi.isInWorld === true);\r\n\r\n          if (this.defaultResourcePackFolder !== null) {\r\n            return this.defaultResourcePackFolder;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  async ensureDefaultResourcePackFolder(force?: boolean): Promise<IFolder> {\r\n    if (this.defaultResourcePackFolder !== null && !force) {\r\n      return this.defaultResourcePackFolder;\r\n    }\r\n\r\n    if (force) {\r\n      this.defaultResourcePackFolder = null;\r\n    }\r\n\r\n    await this.getDefaultResourcePackFolder(force);\r\n\r\n    if (this.defaultResourcePackFolder !== null) {\r\n      return this.defaultResourcePackFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.defaultResourcePackFolder !== null) {\r\n      return this.defaultResourcePackFolder;\r\n    }\r\n\r\n    if (this.resourcePacksContainer === null) {\r\n      this.resourcePacksContainer = this.#projectFolder.ensureFolder(\"resource_packs\");\r\n      await this.resourcePacksContainer.ensureExists();\r\n    }\r\n\r\n    this.defaultResourcePackFolder = this.resourcePacksContainer.ensureFolder(\r\n      MinecraftUtilities.makeNameFolderSafe(this.effectiveShortName + \"_rp\")\r\n    );\r\n\r\n    await this.defaultResourcePackFolder.ensureExists();\r\n\r\n    await this.ensurePackByFolder(this.defaultResourcePackFolder, PackType.resource, false);\r\n\r\n    return this.defaultResourcePackFolder;\r\n  }\r\n\r\n  async ensureLoadedProjectFolder(force?: boolean): Promise<IFolder> {\r\n    const projectFolder = await this.ensureProjectFolder();\r\n\r\n    await projectFolder.load(force ? force : false);\r\n\r\n    if (!this.readOnlySafety) {\r\n      await this.save();\r\n    }\r\n\r\n    return projectFolder;\r\n  }\r\n}\r\n", "export function getUserAgent() {\n  if (typeof navigator === \"object\" && \"userAgent\" in navigator) {\n    return navigator.userAgent;\n  }\n\n  if (typeof process === \"object\" && process.version !== undefined) {\n    return `Node.js/${process.version.substr(1)} (${process.platform}; ${\n      process.arch\n    })`;\n  }\n\n  return \"<environment undetectable>\";\n}\n", "// @ts-check\n\nexport function register(state, name, method, options) {\n  if (typeof method !== \"function\") {\n    throw new Error(\"method for before hook must be a function\");\n  }\n\n  if (!options) {\n    options = {};\n  }\n\n  if (Array.isArray(name)) {\n    return name.reverse().reduce((callback, name) => {\n      return register.bind(null, state, name, callback, options);\n    }, method)();\n  }\n\n  return Promise.resolve().then(() => {\n    if (!state.registry[name]) {\n      return method(options);\n    }\n\n    return state.registry[name].reduce((method, registered) => {\n      return registered.hook.bind(null, method, options);\n    }, method)();\n  });\n}\n", "// @ts-check\n\nexport function addHook(state, kind, name, hook) {\n  const orig = hook;\n  if (!state.registry[name]) {\n    state.registry[name] = [];\n  }\n\n  if (kind === \"before\") {\n    hook = (method, options) => {\n      return Promise.resolve()\n        .then(orig.bind(null, options))\n        .then(method.bind(null, options));\n    };\n  }\n\n  if (kind === \"after\") {\n    hook = (method, options) => {\n      let result;\n      return Promise.resolve()\n        .then(method.bind(null, options))\n        .then((result_) => {\n          result = result_;\n          return orig(result, options);\n        })\n        .then(() => {\n          return result;\n        });\n    };\n  }\n\n  if (kind === \"error\") {\n    hook = (method, options) => {\n      return Promise.resolve()\n        .then(method.bind(null, options))\n        .catch((error) => {\n          return orig(error, options);\n        });\n    };\n  }\n\n  state.registry[name].push({\n    hook: hook,\n    orig: orig,\n  });\n}\n", "// @ts-check\n\nexport function removeHook(state, name, method) {\n  if (!state.registry[name]) {\n    return;\n  }\n\n  const index = state.registry[name]\n    .map((registered) => {\n      return registered.orig;\n    })\n    .indexOf(method);\n\n  if (index === -1) {\n    return;\n  }\n\n  state.registry[name].splice(index, 1);\n}\n", "// @ts-check\n\nimport { register } from \"./lib/register.js\";\nimport { addHook } from \"./lib/add.js\";\nimport { removeHook } from \"./lib/remove.js\";\n\n// bind with array of arguments: https://stackoverflow.com/a/21792913\nconst bind = Function.bind;\nconst bindable = bind.bind(bind);\n\nfunction bindApi(hook, state, name) {\n  const removeHookRef = bindable(removeHook, null).apply(\n    null,\n    name ? [state, name] : [state]\n  );\n  hook.api = { remove: removeHookRef };\n  hook.remove = removeHookRef;\n  [\"before\", \"error\", \"after\", \"wrap\"].forEach((kind) => {\n    const args = name ? [state, kind, name] : [state, kind];\n    hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args);\n  });\n}\n\nfunction Singular() {\n  const singularHookName = Symbol(\"Singular\");\n  const singularHookState = {\n    registry: {},\n  };\n  const singularHook = register.bind(null, singularHookState, singularHookName);\n  bindApi(singularHook, singularHookState, singularHookName);\n  return singularHook;\n}\n\nfunction Collection() {\n  const state = {\n    registry: {},\n  };\n\n  const hook = register.bind(null, state);\n  bindApi(hook, state);\n\n  return hook;\n}\n\nexport default { Singular, Collection };\n", "// pkg/dist-src/defaults.js\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/defaults.js\nvar userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`;\nvar DEFAULTS = {\n  method: \"GET\",\n  baseUrl: \"https://api.github.com\",\n  headers: {\n    accept: \"application/vnd.github.v3+json\",\n    \"user-agent\": userAgent\n  },\n  mediaType: {\n    format: \"\"\n  }\n};\n\n// pkg/dist-src/util/lowercase-keys.js\nfunction lowercaseKeys(object) {\n  if (!object) {\n    return {};\n  }\n  return Object.keys(object).reduce((newObj, key) => {\n    newObj[key.toLowerCase()] = object[key];\n    return newObj;\n  }, {});\n}\n\n// pkg/dist-src/util/is-plain-object.js\nfunction isPlainObject(value) {\n  if (typeof value !== \"object\" || value === null) return false;\n  if (Object.prototype.toString.call(value) !== \"[object Object]\") return false;\n  const proto = Object.getPrototypeOf(value);\n  if (proto === null) return true;\n  const Ctor = Object.prototype.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n  return typeof Ctor === \"function\" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);\n}\n\n// pkg/dist-src/util/merge-deep.js\nfunction mergeDeep(defaults, options) {\n  const result = Object.assign({}, defaults);\n  Object.keys(options).forEach((key) => {\n    if (isPlainObject(options[key])) {\n      if (!(key in defaults)) Object.assign(result, { [key]: options[key] });\n      else result[key] = mergeDeep(defaults[key], options[key]);\n    } else {\n      Object.assign(result, { [key]: options[key] });\n    }\n  });\n  return result;\n}\n\n// pkg/dist-src/util/remove-undefined-properties.js\nfunction removeUndefinedProperties(obj) {\n  for (const key in obj) {\n    if (obj[key] === void 0) {\n      delete obj[key];\n    }\n  }\n  return obj;\n}\n\n// pkg/dist-src/merge.js\nfunction merge(defaults, route, options) {\n  if (typeof route === \"string\") {\n    let [method, url] = route.split(\" \");\n    options = Object.assign(url ? { method, url } : { url: method }, options);\n  } else {\n    options = Object.assign({}, route);\n  }\n  options.headers = lowercaseKeys(options.headers);\n  removeUndefinedProperties(options);\n  removeUndefinedProperties(options.headers);\n  const mergedOptions = mergeDeep(defaults || {}, options);\n  if (options.url === \"/graphql\") {\n    if (defaults && defaults.mediaType.previews?.length) {\n      mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(\n        (preview) => !mergedOptions.mediaType.previews.includes(preview)\n      ).concat(mergedOptions.mediaType.previews);\n    }\n    mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, \"\"));\n  }\n  return mergedOptions;\n}\n\n// pkg/dist-src/util/add-query-parameters.js\nfunction addQueryParameters(url, parameters) {\n  const separator = /\\?/.test(url) ? \"&\" : \"?\";\n  const names = Object.keys(parameters);\n  if (names.length === 0) {\n    return url;\n  }\n  return url + separator + names.map((name) => {\n    if (name === \"q\") {\n      return \"q=\" + parameters.q.split(\"+\").map(encodeURIComponent).join(\"+\");\n    }\n    return `${name}=${encodeURIComponent(parameters[name])}`;\n  }).join(\"&\");\n}\n\n// pkg/dist-src/util/extract-url-variable-names.js\nvar urlVariableRegex = /\\{[^{}}]+\\}/g;\nfunction removeNonChars(variableName) {\n  return variableName.replace(/(?:^\\W+)|(?:(?<!\\W)\\W+$)/g, \"\").split(/,/);\n}\nfunction extractUrlVariableNames(url) {\n  const matches = url.match(urlVariableRegex);\n  if (!matches) {\n    return [];\n  }\n  return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);\n}\n\n// pkg/dist-src/util/omit.js\nfunction omit(object, keysToOmit) {\n  const result = { __proto__: null };\n  for (const key of Object.keys(object)) {\n    if (keysToOmit.indexOf(key) === -1) {\n      result[key] = object[key];\n    }\n  }\n  return result;\n}\n\n// pkg/dist-src/util/url-template.js\nfunction encodeReserved(str) {\n  return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) {\n    if (!/%[0-9A-Fa-f]/.test(part)) {\n      part = encodeURI(part).replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n    }\n    return part;\n  }).join(\"\");\n}\nfunction encodeUnreserved(str) {\n  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {\n    return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n  });\n}\nfunction encodeValue(operator, value, key) {\n  value = operator === \"+\" || operator === \"#\" ? encodeReserved(value) : encodeUnreserved(value);\n  if (key) {\n    return encodeUnreserved(key) + \"=\" + value;\n  } else {\n    return value;\n  }\n}\nfunction isDefined(value) {\n  return value !== void 0 && value !== null;\n}\nfunction isKeyOperator(operator) {\n  return operator === \";\" || operator === \"&\" || operator === \"?\";\n}\nfunction getValues(context, operator, key, modifier) {\n  var value = context[key], result = [];\n  if (isDefined(value) && value !== \"\") {\n    if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n      value = value.toString();\n      if (modifier && modifier !== \"*\") {\n        value = value.substring(0, parseInt(modifier, 10));\n      }\n      result.push(\n        encodeValue(operator, value, isKeyOperator(operator) ? key : \"\")\n      );\n    } else {\n      if (modifier === \"*\") {\n        if (Array.isArray(value)) {\n          value.filter(isDefined).forEach(function(value2) {\n            result.push(\n              encodeValue(operator, value2, isKeyOperator(operator) ? key : \"\")\n            );\n          });\n        } else {\n          Object.keys(value).forEach(function(k) {\n            if (isDefined(value[k])) {\n              result.push(encodeValue(operator, value[k], k));\n            }\n          });\n        }\n      } else {\n        const tmp = [];\n        if (Array.isArray(value)) {\n          value.filter(isDefined).forEach(function(value2) {\n            tmp.push(encodeValue(operator, value2));\n          });\n        } else {\n          Object.keys(value).forEach(function(k) {\n            if (isDefined(value[k])) {\n              tmp.push(encodeUnreserved(k));\n              tmp.push(encodeValue(operator, value[k].toString()));\n            }\n          });\n        }\n        if (isKeyOperator(operator)) {\n          result.push(encodeUnreserved(key) + \"=\" + tmp.join(\",\"));\n        } else if (tmp.length !== 0) {\n          result.push(tmp.join(\",\"));\n        }\n      }\n    }\n  } else {\n    if (operator === \";\") {\n      if (isDefined(value)) {\n        result.push(encodeUnreserved(key));\n      }\n    } else if (value === \"\" && (operator === \"&\" || operator === \"?\")) {\n      result.push(encodeUnreserved(key) + \"=\");\n    } else if (value === \"\") {\n      result.push(\"\");\n    }\n  }\n  return result;\n}\nfunction parseUrl(template) {\n  return {\n    expand: expand.bind(null, template)\n  };\n}\nfunction expand(template, context) {\n  var operators = [\"+\", \"#\", \".\", \"/\", \";\", \"?\", \"&\"];\n  template = template.replace(\n    /\\{([^\\{\\}]+)\\}|([^\\{\\}]+)/g,\n    function(_, expression, literal) {\n      if (expression) {\n        let operator = \"\";\n        const values = [];\n        if (operators.indexOf(expression.charAt(0)) !== -1) {\n          operator = expression.charAt(0);\n          expression = expression.substr(1);\n        }\n        expression.split(/,/g).forEach(function(variable) {\n          var tmp = /([^:\\*]*)(?::(\\d+)|(\\*))?/.exec(variable);\n          values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n        });\n        if (operator && operator !== \"+\") {\n          var separator = \",\";\n          if (operator === \"?\") {\n            separator = \"&\";\n          } else if (operator !== \"#\") {\n            separator = operator;\n          }\n          return (values.length !== 0 ? operator : \"\") + values.join(separator);\n        } else {\n          return values.join(\",\");\n        }\n      } else {\n        return encodeReserved(literal);\n      }\n    }\n  );\n  if (template === \"/\") {\n    return template;\n  } else {\n    return template.replace(/\\/$/, \"\");\n  }\n}\n\n// pkg/dist-src/parse.js\nfunction parse(options) {\n  let method = options.method.toUpperCase();\n  let url = (options.url || \"/\").replace(/:([a-z]\\w+)/g, \"{$1}\");\n  let headers = Object.assign({}, options.headers);\n  let body;\n  let parameters = omit(options, [\n    \"method\",\n    \"baseUrl\",\n    \"url\",\n    \"headers\",\n    \"request\",\n    \"mediaType\"\n  ]);\n  const urlVariableNames = extractUrlVariableNames(url);\n  url = parseUrl(url).expand(parameters);\n  if (!/^http/.test(url)) {\n    url = options.baseUrl + url;\n  }\n  const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat(\"baseUrl\");\n  const remainingParameters = omit(parameters, omittedParameters);\n  const isBinaryRequest = /application\\/octet-stream/i.test(headers.accept);\n  if (!isBinaryRequest) {\n    if (options.mediaType.format) {\n      headers.accept = headers.accept.split(/,/).map(\n        (format) => format.replace(\n          /application\\/vnd(\\.\\w+)(\\.v3)?(\\.\\w+)?(\\+json)?$/,\n          `application/vnd$1$2.${options.mediaType.format}`\n        )\n      ).join(\",\");\n    }\n    if (url.endsWith(\"/graphql\")) {\n      if (options.mediaType.previews?.length) {\n        const previewsFromAcceptHeader = headers.accept.match(/(?<![\\w-])[\\w-]+(?=-preview)/g) || [];\n        headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => {\n          const format = options.mediaType.format ? `.${options.mediaType.format}` : \"+json\";\n          return `application/vnd.github.${preview}-preview${format}`;\n        }).join(\",\");\n      }\n    }\n  }\n  if ([\"GET\", \"HEAD\"].includes(method)) {\n    url = addQueryParameters(url, remainingParameters);\n  } else {\n    if (\"data\" in remainingParameters) {\n      body = remainingParameters.data;\n    } else {\n      if (Object.keys(remainingParameters).length) {\n        body = remainingParameters;\n      }\n    }\n  }\n  if (!headers[\"content-type\"] && typeof body !== \"undefined\") {\n    headers[\"content-type\"] = \"application/json; charset=utf-8\";\n  }\n  if ([\"PATCH\", \"PUT\"].includes(method) && typeof body === \"undefined\") {\n    body = \"\";\n  }\n  return Object.assign(\n    { method, url, headers },\n    typeof body !== \"undefined\" ? { body } : null,\n    options.request ? { request: options.request } : null\n  );\n}\n\n// pkg/dist-src/endpoint-with-defaults.js\nfunction endpointWithDefaults(defaults, route, options) {\n  return parse(merge(defaults, route, options));\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(oldDefaults, newDefaults) {\n  const DEFAULTS2 = merge(oldDefaults, newDefaults);\n  const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2);\n  return Object.assign(endpoint2, {\n    DEFAULTS: DEFAULTS2,\n    defaults: withDefaults.bind(null, DEFAULTS2),\n    merge: merge.bind(null, DEFAULTS2),\n    parse\n  });\n}\n\n// pkg/dist-src/index.js\nvar endpoint = withDefaults(null, DEFAULTS);\nexport {\n  endpoint\n};\n", "'use strict'\n\nconst NullObject = function NullObject () { }\nNullObject.prototype = Object.create(null)\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter     = token \"=\" ( token / quoted-string )\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext        = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text      = %x80-FF\n * quoted-pair   = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nconst paramRE = /; *([!#$%&'*+.^\\w`|~-]+)=(\"(?:[\\v\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\v\\u0020-\\u00ff])*\"|[!#$%&'*+.^\\w`|~-]+) */gu\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text    = %x80-FF\n */\nconst quotedPairRE = /\\\\([\\v\\u0020-\\u00ff])/gu\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type       = token\n * subtype    = token\n */\nconst mediaTypeRE = /^[!#$%&'*+.^\\w|~-]+\\/[!#$%&'*+.^\\w|~-]+$/u\n\n// default ContentType to prevent repeated object creation\nconst defaultContentType = { type: '', parameters: new NullObject() }\nObject.freeze(defaultContentType.parameters)\nObject.freeze(defaultContentType)\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} header\n * @return {Object}\n * @public\n */\n\nfunction parse (header) {\n  if (typeof header !== 'string') {\n    throw new TypeError('argument header is required and must be a string')\n  }\n\n  let index = header.indexOf(';')\n  const type = index !== -1\n    ? header.slice(0, index).trim()\n    : header.trim()\n\n  if (mediaTypeRE.test(type) === false) {\n    throw new TypeError('invalid media type')\n  }\n\n  const result = {\n    type: type.toLowerCase(),\n    parameters: new NullObject()\n  }\n\n  // parse parameters\n  if (index === -1) {\n    return result\n  }\n\n  let key\n  let match\n  let value\n\n  paramRE.lastIndex = index\n\n  while ((match = paramRE.exec(header))) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .slice(1, value.length - 1)\n\n      quotedPairRE.test(value) && (value = value.replace(quotedPairRE, '$1'))\n    }\n\n    result.parameters[key] = value\n  }\n\n  if (index !== header.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  return result\n}\n\nfunction safeParse (header) {\n  if (typeof header !== 'string') {\n    return defaultContentType\n  }\n\n  let index = header.indexOf(';')\n  const type = index !== -1\n    ? header.slice(0, index).trim()\n    : header.trim()\n\n  if (mediaTypeRE.test(type) === false) {\n    return defaultContentType\n  }\n\n  const result = {\n    type: type.toLowerCase(),\n    parameters: new NullObject()\n  }\n\n  // parse parameters\n  if (index === -1) {\n    return result\n  }\n\n  let key\n  let match\n  let value\n\n  paramRE.lastIndex = index\n\n  while ((match = paramRE.exec(header))) {\n    if (match.index !== index) {\n      return defaultContentType\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .slice(1, value.length - 1)\n\n      quotedPairRE.test(value) && (value = value.replace(quotedPairRE, '$1'))\n    }\n\n    result.parameters[key] = value\n  }\n\n  if (index !== header.length) {\n    return defaultContentType\n  }\n\n  return result\n}\n\nmodule.exports.default = { parse, safeParse }\nmodule.exports.parse = parse\nmodule.exports.safeParse = safeParse\nmodule.exports.defaultContentType = defaultContentType\n", "class RequestError extends Error {\n  name;\n  /**\n   * http status code\n   */\n  status;\n  /**\n   * Request options that lead to the error.\n   */\n  request;\n  /**\n   * Response object if a response was received\n   */\n  response;\n  constructor(message, statusCode, options) {\n    super(message, { cause: options.cause });\n    this.name = \"HttpError\";\n    this.status = Number.parseInt(statusCode);\n    if (Number.isNaN(this.status)) {\n      this.status = 0;\n    }\n    /* v8 ignore else -- @preserve -- Bug with vitest coverage where it sees an else branch that doesn't exist */\n    if (\"response\" in options) {\n      this.response = options.response;\n    }\n    const requestCopy = Object.assign({}, options.request);\n    if (options.request.headers.authorization) {\n      requestCopy.headers = Object.assign({}, options.request.headers, {\n        authorization: options.request.headers.authorization.replace(\n          /(?<! ) .*$/,\n          \" [REDACTED]\"\n        )\n      });\n    }\n    requestCopy.url = requestCopy.url.replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\").replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n    this.request = requestCopy;\n  }\n}\nexport {\n  RequestError\n};\n", "// pkg/dist-src/index.js\nimport { endpoint } from \"@octokit/endpoint\";\n\n// pkg/dist-src/defaults.js\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"10.0.7\";\n\n// pkg/dist-src/defaults.js\nvar defaults_default = {\n  headers: {\n    \"user-agent\": `octokit-request.js/${VERSION} ${getUserAgent()}`\n  }\n};\n\n// pkg/dist-src/fetch-wrapper.js\nimport { safeParse } from \"fast-content-type-parse\";\n\n// pkg/dist-src/is-plain-object.js\nfunction isPlainObject(value) {\n  if (typeof value !== \"object\" || value === null) return false;\n  if (Object.prototype.toString.call(value) !== \"[object Object]\") return false;\n  const proto = Object.getPrototypeOf(value);\n  if (proto === null) return true;\n  const Ctor = Object.prototype.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n  return typeof Ctor === \"function\" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);\n}\n\n// pkg/dist-src/fetch-wrapper.js\nimport { RequestError } from \"@octokit/request-error\";\nvar noop = () => \"\";\nasync function fetchWrapper(requestOptions) {\n  const fetch = requestOptions.request?.fetch || globalThis.fetch;\n  if (!fetch) {\n    throw new Error(\n      \"fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing\"\n    );\n  }\n  const log = requestOptions.request?.log || console;\n  const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false;\n  const body = isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body) ? JSON.stringify(requestOptions.body) : requestOptions.body;\n  const requestHeaders = Object.fromEntries(\n    Object.entries(requestOptions.headers).map(([name, value]) => [\n      name,\n      String(value)\n    ])\n  );\n  let fetchResponse;\n  try {\n    fetchResponse = await fetch(requestOptions.url, {\n      method: requestOptions.method,\n      body,\n      redirect: requestOptions.request?.redirect,\n      headers: requestHeaders,\n      signal: requestOptions.request?.signal,\n      // duplex must be set if request.body is ReadableStream or Async Iterables.\n      // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.\n      ...requestOptions.body && { duplex: \"half\" }\n    });\n  } catch (error) {\n    let message = \"Unknown Error\";\n    if (error instanceof Error) {\n      if (error.name === \"AbortError\") {\n        error.status = 500;\n        throw error;\n      }\n      message = error.message;\n      if (error.name === \"TypeError\" && \"cause\" in error) {\n        if (error.cause instanceof Error) {\n          message = error.cause.message;\n        } else if (typeof error.cause === \"string\") {\n          message = error.cause;\n        }\n      }\n    }\n    const requestError = new RequestError(message, 500, {\n      request: requestOptions\n    });\n    requestError.cause = error;\n    throw requestError;\n  }\n  const status = fetchResponse.status;\n  const url = fetchResponse.url;\n  const responseHeaders = {};\n  for (const [key, value] of fetchResponse.headers) {\n    responseHeaders[key] = value;\n  }\n  const octokitResponse = {\n    url,\n    status,\n    headers: responseHeaders,\n    data: \"\"\n  };\n  if (\"deprecation\" in responseHeaders) {\n    const matches = responseHeaders.link && responseHeaders.link.match(/<([^<>]+)>; rel=\"deprecation\"/);\n    const deprecationLink = matches && matches.pop();\n    log.warn(\n      `[@octokit/request] \"${requestOptions.method} ${requestOptions.url}\" is deprecated. It is scheduled to be removed on ${responseHeaders.sunset}${deprecationLink ? `. See ${deprecationLink}` : \"\"}`\n    );\n  }\n  if (status === 204 || status === 205) {\n    return octokitResponse;\n  }\n  if (requestOptions.method === \"HEAD\") {\n    if (status < 400) {\n      return octokitResponse;\n    }\n    throw new RequestError(fetchResponse.statusText, status, {\n      response: octokitResponse,\n      request: requestOptions\n    });\n  }\n  if (status === 304) {\n    octokitResponse.data = await getResponseData(fetchResponse);\n    throw new RequestError(\"Not modified\", status, {\n      response: octokitResponse,\n      request: requestOptions\n    });\n  }\n  if (status >= 400) {\n    octokitResponse.data = await getResponseData(fetchResponse);\n    throw new RequestError(toErrorMessage(octokitResponse.data), status, {\n      response: octokitResponse,\n      request: requestOptions\n    });\n  }\n  octokitResponse.data = parseSuccessResponseBody ? await getResponseData(fetchResponse) : fetchResponse.body;\n  return octokitResponse;\n}\nasync function getResponseData(response) {\n  const contentType = response.headers.get(\"content-type\");\n  if (!contentType) {\n    return response.text().catch(noop);\n  }\n  const mimetype = safeParse(contentType);\n  if (isJSONResponse(mimetype)) {\n    let text = \"\";\n    try {\n      text = await response.text();\n      return JSON.parse(text);\n    } catch (err) {\n      return text;\n    }\n  } else if (mimetype.type.startsWith(\"text/\") || mimetype.parameters.charset?.toLowerCase() === \"utf-8\") {\n    return response.text().catch(noop);\n  } else {\n    return response.arrayBuffer().catch(\n      /* v8 ignore next -- @preserve */\n      () => new ArrayBuffer(0)\n    );\n  }\n}\nfunction isJSONResponse(mimetype) {\n  return mimetype.type === \"application/json\" || mimetype.type === \"application/scim+json\";\n}\nfunction toErrorMessage(data) {\n  if (typeof data === \"string\") {\n    return data;\n  }\n  if (data instanceof ArrayBuffer) {\n    return \"Unknown error\";\n  }\n  if (\"message\" in data) {\n    const suffix = \"documentation_url\" in data ? ` - ${data.documentation_url}` : \"\";\n    return Array.isArray(data.errors) ? `${data.message}: ${data.errors.map((v) => JSON.stringify(v)).join(\", \")}${suffix}` : `${data.message}${suffix}`;\n  }\n  return `Unknown error: ${JSON.stringify(data)}`;\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(oldEndpoint, newDefaults) {\n  const endpoint2 = oldEndpoint.defaults(newDefaults);\n  const newApi = function(route, parameters) {\n    const endpointOptions = endpoint2.merge(route, parameters);\n    if (!endpointOptions.request || !endpointOptions.request.hook) {\n      return fetchWrapper(endpoint2.parse(endpointOptions));\n    }\n    const request2 = (route2, parameters2) => {\n      return fetchWrapper(\n        endpoint2.parse(endpoint2.merge(route2, parameters2))\n      );\n    };\n    Object.assign(request2, {\n      endpoint: endpoint2,\n      defaults: withDefaults.bind(null, endpoint2)\n    });\n    return endpointOptions.request.hook(request2, endpointOptions);\n  };\n  return Object.assign(newApi, {\n    endpoint: endpoint2,\n    defaults: withDefaults.bind(null, endpoint2)\n  });\n}\n\n// pkg/dist-src/index.js\nvar request = withDefaults(endpoint, defaults_default);\nexport {\n  request\n};\n/* v8 ignore next -- @preserve */\n/* v8 ignore else -- @preserve */\n", "// pkg/dist-src/index.js\nimport { request } from \"@octokit/request\";\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/with-defaults.js\nimport { request as Request2 } from \"@octokit/request\";\n\n// pkg/dist-src/graphql.js\nimport { request as Request } from \"@octokit/request\";\n\n// pkg/dist-src/error.js\nfunction _buildMessageForResponseErrors(data) {\n  return `Request failed due to following response errors:\n` + data.errors.map((e) => ` - ${e.message}`).join(\"\\n\");\n}\nvar GraphqlResponseError = class extends Error {\n  constructor(request2, headers, response) {\n    super(_buildMessageForResponseErrors(response));\n    this.request = request2;\n    this.headers = headers;\n    this.response = response;\n    this.errors = response.errors;\n    this.data = response.data;\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, this.constructor);\n    }\n  }\n  name = \"GraphqlResponseError\";\n  errors;\n  data;\n};\n\n// pkg/dist-src/graphql.js\nvar NON_VARIABLE_OPTIONS = [\n  \"method\",\n  \"baseUrl\",\n  \"url\",\n  \"headers\",\n  \"request\",\n  \"query\",\n  \"mediaType\",\n  \"operationName\"\n];\nvar FORBIDDEN_VARIABLE_OPTIONS = [\"query\", \"method\", \"url\"];\nvar GHES_V3_SUFFIX_REGEX = /\\/api\\/v3\\/?$/;\nfunction graphql(request2, query, options) {\n  if (options) {\n    if (typeof query === \"string\" && \"query\" in options) {\n      return Promise.reject(\n        new Error(`[@octokit/graphql] \"query\" cannot be used as variable name`)\n      );\n    }\n    for (const key in options) {\n      if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue;\n      return Promise.reject(\n        new Error(\n          `[@octokit/graphql] \"${key}\" cannot be used as variable name`\n        )\n      );\n    }\n  }\n  const parsedOptions = typeof query === \"string\" ? Object.assign({ query }, options) : query;\n  const requestOptions = Object.keys(\n    parsedOptions\n  ).reduce((result, key) => {\n    if (NON_VARIABLE_OPTIONS.includes(key)) {\n      result[key] = parsedOptions[key];\n      return result;\n    }\n    if (!result.variables) {\n      result.variables = {};\n    }\n    result.variables[key] = parsedOptions[key];\n    return result;\n  }, {});\n  const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl;\n  if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {\n    requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, \"/api/graphql\");\n  }\n  return request2(requestOptions).then((response) => {\n    if (response.data.errors) {\n      const headers = {};\n      for (const key of Object.keys(response.headers)) {\n        headers[key] = response.headers[key];\n      }\n      throw new GraphqlResponseError(\n        requestOptions,\n        headers,\n        response.data\n      );\n    }\n    return response.data.data;\n  });\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(request2, newDefaults) {\n  const newRequest = request2.defaults(newDefaults);\n  const newApi = (query, options) => {\n    return graphql(newRequest, query, options);\n  };\n  return Object.assign(newApi, {\n    defaults: withDefaults.bind(null, newRequest),\n    endpoint: newRequest.endpoint\n  });\n}\n\n// pkg/dist-src/index.js\nvar graphql2 = withDefaults(request, {\n  headers: {\n    \"user-agent\": `octokit-graphql.js/${VERSION} ${getUserAgent()}`\n  },\n  method: \"POST\",\n  url: \"/graphql\"\n});\nfunction withCustomRequest(customRequest) {\n  return withDefaults(customRequest, {\n    method: \"POST\",\n    url: \"/graphql\"\n  });\n}\nexport {\n  GraphqlResponseError,\n  graphql2 as graphql,\n  withCustomRequest\n};\n", "// pkg/dist-src/is-jwt.js\nvar b64url = \"(?:[a-zA-Z0-9_-]+)\";\nvar sep = \"\\\\.\";\nvar jwtRE = new RegExp(`^${b64url}${sep}${b64url}${sep}${b64url}$`);\nvar isJWT = jwtRE.test.bind(jwtRE);\n\n// pkg/dist-src/auth.js\nasync function auth(token) {\n  const isApp = isJWT(token);\n  const isInstallation = token.startsWith(\"v1.\") || token.startsWith(\"ghs_\");\n  const isUserToServer = token.startsWith(\"ghu_\");\n  const tokenType = isApp ? \"app\" : isInstallation ? \"installation\" : isUserToServer ? \"user-to-server\" : \"oauth\";\n  return {\n    type: \"token\",\n    token,\n    tokenType\n  };\n}\n\n// pkg/dist-src/with-authorization-prefix.js\nfunction withAuthorizationPrefix(token) {\n  if (token.split(/\\./).length === 3) {\n    return `bearer ${token}`;\n  }\n  return `token ${token}`;\n}\n\n// pkg/dist-src/hook.js\nasync function hook(token, request, route, parameters) {\n  const endpoint = request.endpoint.merge(\n    route,\n    parameters\n  );\n  endpoint.headers.authorization = withAuthorizationPrefix(token);\n  return request(endpoint);\n}\n\n// pkg/dist-src/index.js\nvar createTokenAuth = function createTokenAuth2(token) {\n  if (!token) {\n    throw new Error(\"[@octokit/auth-token] No token passed to createTokenAuth\");\n  }\n  if (typeof token !== \"string\") {\n    throw new Error(\n      \"[@octokit/auth-token] Token passed to createTokenAuth is not a string\"\n    );\n  }\n  token = token.replace(/^(token|bearer) +/i, \"\");\n  return Object.assign(auth.bind(null, token), {\n    hook: hook.bind(null, token)\n  });\n};\nexport {\n  createTokenAuth\n};\n", "const VERSION = \"7.0.6\";\nexport {\n  VERSION\n};\n", "import { getUserAgent } from \"universal-user-agent\";\nimport Hook from \"before-after-hook\";\nimport { request } from \"@octokit/request\";\nimport { withCustomRequest } from \"@octokit/graphql\";\nimport { createTokenAuth } from \"@octokit/auth-token\";\nimport { VERSION } from \"./version.js\";\nconst noop = () => {\n};\nconst consoleWarn = console.warn.bind(console);\nconst consoleError = console.error.bind(console);\nfunction createLogger(logger = {}) {\n  if (typeof logger.debug !== \"function\") {\n    logger.debug = noop;\n  }\n  if (typeof logger.info !== \"function\") {\n    logger.info = noop;\n  }\n  if (typeof logger.warn !== \"function\") {\n    logger.warn = consoleWarn;\n  }\n  if (typeof logger.error !== \"function\") {\n    logger.error = consoleError;\n  }\n  return logger;\n}\nconst userAgentTrail = `octokit-core.js/${VERSION} ${getUserAgent()}`;\nclass Octokit {\n  static VERSION = VERSION;\n  static defaults(defaults) {\n    const OctokitWithDefaults = class extends this {\n      constructor(...args) {\n        const options = args[0] || {};\n        if (typeof defaults === \"function\") {\n          super(defaults(options));\n          return;\n        }\n        super(\n          Object.assign(\n            {},\n            defaults,\n            options,\n            options.userAgent && defaults.userAgent ? {\n              userAgent: `${options.userAgent} ${defaults.userAgent}`\n            } : null\n          )\n        );\n      }\n    };\n    return OctokitWithDefaults;\n  }\n  static plugins = [];\n  /**\n   * Attach a plugin (or many) to your Octokit instance.\n   *\n   * @example\n   * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)\n   */\n  static plugin(...newPlugins) {\n    const currentPlugins = this.plugins;\n    const NewOctokit = class extends this {\n      static plugins = currentPlugins.concat(\n        newPlugins.filter((plugin) => !currentPlugins.includes(plugin))\n      );\n    };\n    return NewOctokit;\n  }\n  constructor(options = {}) {\n    const hook = new Hook.Collection();\n    const requestDefaults = {\n      baseUrl: request.endpoint.DEFAULTS.baseUrl,\n      headers: {},\n      request: Object.assign({}, options.request, {\n        // @ts-ignore internal usage only, no need to type\n        hook: hook.bind(null, \"request\")\n      }),\n      mediaType: {\n        previews: [],\n        format: \"\"\n      }\n    };\n    requestDefaults.headers[\"user-agent\"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail;\n    if (options.baseUrl) {\n      requestDefaults.baseUrl = options.baseUrl;\n    }\n    if (options.previews) {\n      requestDefaults.mediaType.previews = options.previews;\n    }\n    if (options.timeZone) {\n      requestDefaults.headers[\"time-zone\"] = options.timeZone;\n    }\n    this.request = request.defaults(requestDefaults);\n    this.graphql = withCustomRequest(this.request).defaults(requestDefaults);\n    this.log = createLogger(options.log);\n    this.hook = hook;\n    if (!options.authStrategy) {\n      if (!options.auth) {\n        this.auth = async () => ({\n          type: \"unauthenticated\"\n        });\n      } else {\n        const auth = createTokenAuth(options.auth);\n        hook.wrap(\"request\", auth.hook);\n        this.auth = auth;\n      }\n    } else {\n      const { authStrategy, ...otherOptions } = options;\n      const auth = authStrategy(\n        Object.assign(\n          {\n            request: this.request,\n            log: this.log,\n            // we pass the current octokit instance as well as its constructor options\n            // to allow for authentication strategies that return a new octokit instance\n            // that shares the same internal state as the current one. The original\n            // requirement for this was the \"event-octokit\" authentication strategy\n            // of https://github.com/probot/octokit-auth-probot.\n            octokit: this,\n            octokitOptions: otherOptions\n          },\n          options.auth\n        )\n      );\n      hook.wrap(\"request\", auth.hook);\n      this.auth = auth;\n    }\n    const classConstructor = this.constructor;\n    for (let i = 0; i < classConstructor.plugins.length; ++i) {\n      Object.assign(this, classConstructor.plugins[i](this, options));\n    }\n  }\n  // assigned during constructor\n  request;\n  graphql;\n  log;\n  hook;\n  // TODO: type `octokit.auth` based on passed options.authStrategy\n  auth;\n}\nexport {\n  Octokit\n};\n", "const VERSION = \"6.0.0\";\nexport {\n  VERSION\n};\n", "import { VERSION } from \"./version.js\";\nfunction requestLog(octokit) {\n  octokit.hook.wrap(\"request\", (request, options) => {\n    octokit.log.debug(\"request\", options);\n    const start = Date.now();\n    const requestOptions = octokit.request.endpoint.parse(options);\n    const path = requestOptions.url.replace(options.baseUrl, \"\");\n    return request(options).then((response) => {\n      const requestId = response.headers[\"x-github-request-id\"];\n      octokit.log.info(\n        `${requestOptions.method} ${path} - ${response.status} with id ${requestId} in ${Date.now() - start}ms`\n      );\n      return response;\n    }).catch((error) => {\n      const requestId = error.response?.headers[\"x-github-request-id\"] || \"UNKNOWN\";\n      octokit.log.error(\n        `${requestOptions.method} ${path} - ${error.status} with id ${requestId} in ${Date.now() - start}ms`\n      );\n      throw error;\n    });\n  });\n}\nrequestLog.VERSION = VERSION;\nexport {\n  requestLog\n};\n", "// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/normalize-paginated-list-response.js\nfunction normalizePaginatedListResponse(response) {\n  if (!response.data) {\n    return {\n      ...response,\n      data: []\n    };\n  }\n  const responseNeedsNormalization = (\"total_count\" in response.data || \"total_commits\" in response.data) && !(\"url\" in response.data);\n  if (!responseNeedsNormalization) return response;\n  const incompleteResults = response.data.incomplete_results;\n  const repositorySelection = response.data.repository_selection;\n  const totalCount = response.data.total_count;\n  const totalCommits = response.data.total_commits;\n  delete response.data.incomplete_results;\n  delete response.data.repository_selection;\n  delete response.data.total_count;\n  delete response.data.total_commits;\n  const namespaceKey = Object.keys(response.data)[0];\n  const data = response.data[namespaceKey];\n  response.data = data;\n  if (typeof incompleteResults !== \"undefined\") {\n    response.data.incomplete_results = incompleteResults;\n  }\n  if (typeof repositorySelection !== \"undefined\") {\n    response.data.repository_selection = repositorySelection;\n  }\n  response.data.total_count = totalCount;\n  response.data.total_commits = totalCommits;\n  return response;\n}\n\n// pkg/dist-src/iterator.js\nfunction iterator(octokit, route, parameters) {\n  const options = typeof route === \"function\" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);\n  const requestMethod = typeof route === \"function\" ? route : octokit.request;\n  const method = options.method;\n  const headers = options.headers;\n  let url = options.url;\n  return {\n    [Symbol.asyncIterator]: () => ({\n      async next() {\n        if (!url) return { done: true };\n        try {\n          const response = await requestMethod({ method, url, headers });\n          const normalizedResponse = normalizePaginatedListResponse(response);\n          url = ((normalizedResponse.headers.link || \"\").match(\n            /<([^<>]+)>;\\s*rel=\"next\"/\n          ) || [])[1];\n          if (!url && \"total_commits\" in normalizedResponse.data) {\n            const parsedUrl = new URL(normalizedResponse.url);\n            const params = parsedUrl.searchParams;\n            const page = parseInt(params.get(\"page\") || \"1\", 10);\n            const per_page = parseInt(params.get(\"per_page\") || \"250\", 10);\n            if (page * per_page < normalizedResponse.data.total_commits) {\n              params.set(\"page\", String(page + 1));\n              url = parsedUrl.toString();\n            }\n          }\n          return { value: normalizedResponse };\n        } catch (error) {\n          if (error.status !== 409) throw error;\n          url = \"\";\n          return {\n            value: {\n              status: 200,\n              headers: {},\n              data: []\n            }\n          };\n        }\n      }\n    })\n  };\n}\n\n// pkg/dist-src/paginate.js\nfunction paginate(octokit, route, parameters, mapFn) {\n  if (typeof parameters === \"function\") {\n    mapFn = parameters;\n    parameters = void 0;\n  }\n  return gather(\n    octokit,\n    [],\n    iterator(octokit, route, parameters)[Symbol.asyncIterator](),\n    mapFn\n  );\n}\nfunction gather(octokit, results, iterator2, mapFn) {\n  return iterator2.next().then((result) => {\n    if (result.done) {\n      return results;\n    }\n    let earlyExit = false;\n    function done() {\n      earlyExit = true;\n    }\n    results = results.concat(\n      mapFn ? mapFn(result.value, done) : result.value.data\n    );\n    if (earlyExit) {\n      return results;\n    }\n    return gather(octokit, results, iterator2, mapFn);\n  });\n}\n\n// pkg/dist-src/compose-paginate.js\nvar composePaginateRest = Object.assign(paginate, {\n  iterator\n});\n\n// pkg/dist-src/generated/paginating-endpoints.js\nvar paginatingEndpoints = [\n  \"GET /advisories\",\n  \"GET /app/hook/deliveries\",\n  \"GET /app/installation-requests\",\n  \"GET /app/installations\",\n  \"GET /assignments/{assignment_id}/accepted_assignments\",\n  \"GET /classrooms\",\n  \"GET /classrooms/{classroom_id}/assignments\",\n  \"GET /enterprises/{enterprise}/code-security/configurations\",\n  \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories\",\n  \"GET /enterprises/{enterprise}/dependabot/alerts\",\n  \"GET /enterprises/{enterprise}/teams\",\n  \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships\",\n  \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations\",\n  \"GET /events\",\n  \"GET /gists\",\n  \"GET /gists/public\",\n  \"GET /gists/starred\",\n  \"GET /gists/{gist_id}/comments\",\n  \"GET /gists/{gist_id}/commits\",\n  \"GET /gists/{gist_id}/forks\",\n  \"GET /installation/repositories\",\n  \"GET /issues\",\n  \"GET /licenses\",\n  \"GET /marketplace_listing/plans\",\n  \"GET /marketplace_listing/plans/{plan_id}/accounts\",\n  \"GET /marketplace_listing/stubbed/plans\",\n  \"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts\",\n  \"GET /networks/{owner}/{repo}/events\",\n  \"GET /notifications\",\n  \"GET /organizations\",\n  \"GET /organizations/{org}/dependabot/repository-access\",\n  \"GET /orgs/{org}/actions/cache/usage-by-repository\",\n  \"GET /orgs/{org}/actions/hosted-runners\",\n  \"GET /orgs/{org}/actions/permissions/repositories\",\n  \"GET /orgs/{org}/actions/permissions/self-hosted-runners/repositories\",\n  \"GET /orgs/{org}/actions/runner-groups\",\n  \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners\",\n  \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories\",\n  \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners\",\n  \"GET /orgs/{org}/actions/runners\",\n  \"GET /orgs/{org}/actions/secrets\",\n  \"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n  \"GET /orgs/{org}/actions/variables\",\n  \"GET /orgs/{org}/actions/variables/{name}/repositories\",\n  \"GET /orgs/{org}/attestations/repositories\",\n  \"GET /orgs/{org}/attestations/{subject_digest}\",\n  \"GET /orgs/{org}/blocks\",\n  \"GET /orgs/{org}/campaigns\",\n  \"GET /orgs/{org}/code-scanning/alerts\",\n  \"GET /orgs/{org}/code-security/configurations\",\n  \"GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories\",\n  \"GET /orgs/{org}/codespaces\",\n  \"GET /orgs/{org}/codespaces/secrets\",\n  \"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n  \"GET /orgs/{org}/copilot/billing/seats\",\n  \"GET /orgs/{org}/copilot/metrics\",\n  \"GET /orgs/{org}/dependabot/alerts\",\n  \"GET /orgs/{org}/dependabot/secrets\",\n  \"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n  \"GET /orgs/{org}/events\",\n  \"GET /orgs/{org}/failed_invitations\",\n  \"GET /orgs/{org}/hooks\",\n  \"GET /orgs/{org}/hooks/{hook_id}/deliveries\",\n  \"GET /orgs/{org}/insights/api/route-stats/{actor_type}/{actor_id}\",\n  \"GET /orgs/{org}/insights/api/subject-stats\",\n  \"GET /orgs/{org}/insights/api/user-stats/{user_id}\",\n  \"GET /orgs/{org}/installations\",\n  \"GET /orgs/{org}/invitations\",\n  \"GET /orgs/{org}/invitations/{invitation_id}/teams\",\n  \"GET /orgs/{org}/issues\",\n  \"GET /orgs/{org}/members\",\n  \"GET /orgs/{org}/members/{username}/codespaces\",\n  \"GET /orgs/{org}/migrations\",\n  \"GET /orgs/{org}/migrations/{migration_id}/repositories\",\n  \"GET /orgs/{org}/organization-roles/{role_id}/teams\",\n  \"GET /orgs/{org}/organization-roles/{role_id}/users\",\n  \"GET /orgs/{org}/outside_collaborators\",\n  \"GET /orgs/{org}/packages\",\n  \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\",\n  \"GET /orgs/{org}/personal-access-token-requests\",\n  \"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories\",\n  \"GET /orgs/{org}/personal-access-tokens\",\n  \"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories\",\n  \"GET /orgs/{org}/private-registries\",\n  \"GET /orgs/{org}/projects\",\n  \"GET /orgs/{org}/projectsV2\",\n  \"GET /orgs/{org}/projectsV2/{project_number}/fields\",\n  \"GET /orgs/{org}/projectsV2/{project_number}/items\",\n  \"GET /orgs/{org}/properties/values\",\n  \"GET /orgs/{org}/public_members\",\n  \"GET /orgs/{org}/repos\",\n  \"GET /orgs/{org}/rulesets\",\n  \"GET /orgs/{org}/rulesets/rule-suites\",\n  \"GET /orgs/{org}/rulesets/{ruleset_id}/history\",\n  \"GET /orgs/{org}/secret-scanning/alerts\",\n  \"GET /orgs/{org}/security-advisories\",\n  \"GET /orgs/{org}/settings/immutable-releases/repositories\",\n  \"GET /orgs/{org}/settings/network-configurations\",\n  \"GET /orgs/{org}/team/{team_slug}/copilot/metrics\",\n  \"GET /orgs/{org}/teams\",\n  \"GET /orgs/{org}/teams/{team_slug}/discussions\",\n  \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\",\n  \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n  \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\",\n  \"GET /orgs/{org}/teams/{team_slug}/invitations\",\n  \"GET /orgs/{org}/teams/{team_slug}/members\",\n  \"GET /orgs/{org}/teams/{team_slug}/projects\",\n  \"GET /orgs/{org}/teams/{team_slug}/repos\",\n  \"GET /orgs/{org}/teams/{team_slug}/teams\",\n  \"GET /projects/{project_id}/collaborators\",\n  \"GET /repos/{owner}/{repo}/actions/artifacts\",\n  \"GET /repos/{owner}/{repo}/actions/caches\",\n  \"GET /repos/{owner}/{repo}/actions/organization-secrets\",\n  \"GET /repos/{owner}/{repo}/actions/organization-variables\",\n  \"GET /repos/{owner}/{repo}/actions/runners\",\n  \"GET /repos/{owner}/{repo}/actions/runs\",\n  \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\",\n  \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\",\n  \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\",\n  \"GET /repos/{owner}/{repo}/actions/secrets\",\n  \"GET /repos/{owner}/{repo}/actions/variables\",\n  \"GET /repos/{owner}/{repo}/actions/workflows\",\n  \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\",\n  \"GET /repos/{owner}/{repo}/activity\",\n  \"GET /repos/{owner}/{repo}/assignees\",\n  \"GET /repos/{owner}/{repo}/attestations/{subject_digest}\",\n  \"GET /repos/{owner}/{repo}/branches\",\n  \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\",\n  \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\",\n  \"GET /repos/{owner}/{repo}/code-scanning/alerts\",\n  \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n  \"GET /repos/{owner}/{repo}/code-scanning/analyses\",\n  \"GET /repos/{owner}/{repo}/codespaces\",\n  \"GET /repos/{owner}/{repo}/codespaces/devcontainers\",\n  \"GET /repos/{owner}/{repo}/codespaces/secrets\",\n  \"GET /repos/{owner}/{repo}/collaborators\",\n  \"GET /repos/{owner}/{repo}/comments\",\n  \"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n  \"GET /repos/{owner}/{repo}/commits\",\n  \"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n  \"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\",\n  \"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\",\n  \"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\",\n  \"GET /repos/{owner}/{repo}/commits/{ref}/status\",\n  \"GET /repos/{owner}/{repo}/commits/{ref}/statuses\",\n  \"GET /repos/{owner}/{repo}/compare/{basehead}\",\n  \"GET /repos/{owner}/{repo}/compare/{base}...{head}\",\n  \"GET /repos/{owner}/{repo}/contributors\",\n  \"GET /repos/{owner}/{repo}/dependabot/alerts\",\n  \"GET /repos/{owner}/{repo}/dependabot/secrets\",\n  \"GET /repos/{owner}/{repo}/deployments\",\n  \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n  \"GET /repos/{owner}/{repo}/environments\",\n  \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n  \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps\",\n  \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets\",\n  \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n  \"GET /repos/{owner}/{repo}/events\",\n  \"GET /repos/{owner}/{repo}/forks\",\n  \"GET /repos/{owner}/{repo}/hooks\",\n  \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\",\n  \"GET /repos/{owner}/{repo}/invitations\",\n  \"GET /repos/{owner}/{repo}/issues\",\n  \"GET /repos/{owner}/{repo}/issues/comments\",\n  \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n  \"GET /repos/{owner}/{repo}/issues/events\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/events\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\",\n  \"GET /repos/{owner}/{repo}/keys\",\n  \"GET /repos/{owner}/{repo}/labels\",\n  \"GET /repos/{owner}/{repo}/milestones\",\n  \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\",\n  \"GET /repos/{owner}/{repo}/notifications\",\n  \"GET /repos/{owner}/{repo}/pages/builds\",\n  \"GET /repos/{owner}/{repo}/projects\",\n  \"GET /repos/{owner}/{repo}/pulls\",\n  \"GET /repos/{owner}/{repo}/pulls/comments\",\n  \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n  \"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n  \"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\",\n  \"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\",\n  \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\",\n  \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\",\n  \"GET /repos/{owner}/{repo}/releases\",\n  \"GET /repos/{owner}/{repo}/releases/{release_id}/assets\",\n  \"GET /repos/{owner}/{repo}/releases/{release_id}/reactions\",\n  \"GET /repos/{owner}/{repo}/rules/branches/{branch}\",\n  \"GET /repos/{owner}/{repo}/rulesets\",\n  \"GET /repos/{owner}/{repo}/rulesets/rule-suites\",\n  \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history\",\n  \"GET /repos/{owner}/{repo}/secret-scanning/alerts\",\n  \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\",\n  \"GET /repos/{owner}/{repo}/security-advisories\",\n  \"GET /repos/{owner}/{repo}/stargazers\",\n  \"GET /repos/{owner}/{repo}/subscribers\",\n  \"GET /repos/{owner}/{repo}/tags\",\n  \"GET /repos/{owner}/{repo}/teams\",\n  \"GET /repos/{owner}/{repo}/topics\",\n  \"GET /repositories\",\n  \"GET /search/code\",\n  \"GET /search/commits\",\n  \"GET /search/issues\",\n  \"GET /search/labels\",\n  \"GET /search/repositories\",\n  \"GET /search/topics\",\n  \"GET /search/users\",\n  \"GET /teams/{team_id}/discussions\",\n  \"GET /teams/{team_id}/discussions/{discussion_number}/comments\",\n  \"GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n  \"GET /teams/{team_id}/discussions/{discussion_number}/reactions\",\n  \"GET /teams/{team_id}/invitations\",\n  \"GET /teams/{team_id}/members\",\n  \"GET /teams/{team_id}/projects\",\n  \"GET /teams/{team_id}/repos\",\n  \"GET /teams/{team_id}/teams\",\n  \"GET /user/blocks\",\n  \"GET /user/codespaces\",\n  \"GET /user/codespaces/secrets\",\n  \"GET /user/emails\",\n  \"GET /user/followers\",\n  \"GET /user/following\",\n  \"GET /user/gpg_keys\",\n  \"GET /user/installations\",\n  \"GET /user/installations/{installation_id}/repositories\",\n  \"GET /user/issues\",\n  \"GET /user/keys\",\n  \"GET /user/marketplace_purchases\",\n  \"GET /user/marketplace_purchases/stubbed\",\n  \"GET /user/memberships/orgs\",\n  \"GET /user/migrations\",\n  \"GET /user/migrations/{migration_id}/repositories\",\n  \"GET /user/orgs\",\n  \"GET /user/packages\",\n  \"GET /user/packages/{package_type}/{package_name}/versions\",\n  \"GET /user/public_emails\",\n  \"GET /user/repos\",\n  \"GET /user/repository_invitations\",\n  \"GET /user/social_accounts\",\n  \"GET /user/ssh_signing_keys\",\n  \"GET /user/starred\",\n  \"GET /user/subscriptions\",\n  \"GET /user/teams\",\n  \"GET /users\",\n  \"GET /users/{username}/attestations/{subject_digest}\",\n  \"GET /users/{username}/events\",\n  \"GET /users/{username}/events/orgs/{org}\",\n  \"GET /users/{username}/events/public\",\n  \"GET /users/{username}/followers\",\n  \"GET /users/{username}/following\",\n  \"GET /users/{username}/gists\",\n  \"GET /users/{username}/gpg_keys\",\n  \"GET /users/{username}/keys\",\n  \"GET /users/{username}/orgs\",\n  \"GET /users/{username}/packages\",\n  \"GET /users/{username}/projects\",\n  \"GET /users/{username}/projectsV2\",\n  \"GET /users/{username}/projectsV2/{project_number}/fields\",\n  \"GET /users/{username}/projectsV2/{project_number}/items\",\n  \"GET /users/{username}/received_events\",\n  \"GET /users/{username}/received_events/public\",\n  \"GET /users/{username}/repos\",\n  \"GET /users/{username}/social_accounts\",\n  \"GET /users/{username}/ssh_signing_keys\",\n  \"GET /users/{username}/starred\",\n  \"GET /users/{username}/subscriptions\"\n];\n\n// pkg/dist-src/paginating-endpoints.js\nfunction isPaginatingEndpoint(arg) {\n  if (typeof arg === \"string\") {\n    return paginatingEndpoints.includes(arg);\n  } else {\n    return false;\n  }\n}\n\n// pkg/dist-src/index.js\nfunction paginateRest(octokit) {\n  return {\n    paginate: Object.assign(paginate.bind(null, octokit), {\n      iterator: iterator.bind(null, octokit)\n    })\n  };\n}\npaginateRest.VERSION = VERSION;\nexport {\n  composePaginateRest,\n  isPaginatingEndpoint,\n  paginateRest,\n  paginatingEndpoints\n};\n", "export const VERSION = \"17.0.0\";\n", "import type { EndpointsDefaultsAndDecorations } from \"../types.js\";\nconst Endpoints: EndpointsDefaultsAndDecorations = {\n  actions: {\n    addCustomLabelsToSelfHostedRunnerForOrg: [\n      \"POST /orgs/{org}/actions/runners/{runner_id}/labels\",\n    ],\n    addCustomLabelsToSelfHostedRunnerForRepo: [\n      \"POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n    ],\n    addRepoAccessToSelfHostedRunnerGroupInOrg: [\n      \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}\",\n    ],\n    addSelectedRepoToOrgSecret: [\n      \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    addSelectedRepoToOrgVariable: [\n      \"PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\",\n    ],\n    approveWorkflowRun: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve\",\n    ],\n    cancelWorkflowRun: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel\",\n    ],\n    createEnvironmentVariable: [\n      \"POST /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n    ],\n    createHostedRunnerForOrg: [\"POST /orgs/{org}/actions/hosted-runners\"],\n    createOrUpdateEnvironmentSecret: [\n      \"PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n    ],\n    createOrUpdateOrgSecret: [\"PUT /orgs/{org}/actions/secrets/{secret_name}\"],\n    createOrUpdateRepoSecret: [\n      \"PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}\",\n    ],\n    createOrgVariable: [\"POST /orgs/{org}/actions/variables\"],\n    createRegistrationTokenForOrg: [\n      \"POST /orgs/{org}/actions/runners/registration-token\",\n    ],\n    createRegistrationTokenForRepo: [\n      \"POST /repos/{owner}/{repo}/actions/runners/registration-token\",\n    ],\n    createRemoveTokenForOrg: [\"POST /orgs/{org}/actions/runners/remove-token\"],\n    createRemoveTokenForRepo: [\n      \"POST /repos/{owner}/{repo}/actions/runners/remove-token\",\n    ],\n    createRepoVariable: [\"POST /repos/{owner}/{repo}/actions/variables\"],\n    createWorkflowDispatch: [\n      \"POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches\",\n    ],\n    deleteActionsCacheById: [\n      \"DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}\",\n    ],\n    deleteActionsCacheByKey: [\n      \"DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}\",\n    ],\n    deleteArtifact: [\n      \"DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\",\n    ],\n    deleteCustomImageFromOrg: [\n      \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\",\n    ],\n    deleteCustomImageVersionFromOrg: [\n      \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\",\n    ],\n    deleteEnvironmentSecret: [\n      \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n    ],\n    deleteEnvironmentVariable: [\n      \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n    ],\n    deleteHostedRunnerForOrg: [\n      \"DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n    ],\n    deleteOrgSecret: [\"DELETE /orgs/{org}/actions/secrets/{secret_name}\"],\n    deleteOrgVariable: [\"DELETE /orgs/{org}/actions/variables/{name}\"],\n    deleteRepoSecret: [\n      \"DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}\",\n    ],\n    deleteRepoVariable: [\n      \"DELETE /repos/{owner}/{repo}/actions/variables/{name}\",\n    ],\n    deleteSelfHostedRunnerFromOrg: [\n      \"DELETE /orgs/{org}/actions/runners/{runner_id}\",\n    ],\n    deleteSelfHostedRunnerFromRepo: [\n      \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}\",\n    ],\n    deleteWorkflowRun: [\"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n    deleteWorkflowRunLogs: [\n      \"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs\",\n    ],\n    disableSelectedRepositoryGithubActionsOrganization: [\n      \"DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}\",\n    ],\n    disableWorkflow: [\n      \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable\",\n    ],\n    downloadArtifact: [\n      \"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}\",\n    ],\n    downloadJobLogsForWorkflowRun: [\n      \"GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs\",\n    ],\n    downloadWorkflowRunAttemptLogs: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs\",\n    ],\n    downloadWorkflowRunLogs: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs\",\n    ],\n    enableSelectedRepositoryGithubActionsOrganization: [\n      \"PUT /orgs/{org}/actions/permissions/repositories/{repository_id}\",\n    ],\n    enableWorkflow: [\n      \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable\",\n    ],\n    forceCancelWorkflowRun: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel\",\n    ],\n    generateRunnerJitconfigForOrg: [\n      \"POST /orgs/{org}/actions/runners/generate-jitconfig\",\n    ],\n    generateRunnerJitconfigForRepo: [\n      \"POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig\",\n    ],\n    getActionsCacheList: [\"GET /repos/{owner}/{repo}/actions/caches\"],\n    getActionsCacheUsage: [\"GET /repos/{owner}/{repo}/actions/cache/usage\"],\n    getActionsCacheUsageByRepoForOrg: [\n      \"GET /orgs/{org}/actions/cache/usage-by-repository\",\n    ],\n    getActionsCacheUsageForOrg: [\"GET /orgs/{org}/actions/cache/usage\"],\n    getAllowedActionsOrganization: [\n      \"GET /orgs/{org}/actions/permissions/selected-actions\",\n    ],\n    getAllowedActionsRepository: [\n      \"GET /repos/{owner}/{repo}/actions/permissions/selected-actions\",\n    ],\n    getArtifact: [\"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\"],\n    getCustomImageForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\",\n    ],\n    getCustomImageVersionForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\",\n    ],\n    getCustomOidcSubClaimForRepo: [\n      \"GET /repos/{owner}/{repo}/actions/oidc/customization/sub\",\n    ],\n    getEnvironmentPublicKey: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key\",\n    ],\n    getEnvironmentSecret: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n    ],\n    getEnvironmentVariable: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n    ],\n    getGithubActionsDefaultWorkflowPermissionsOrganization: [\n      \"GET /orgs/{org}/actions/permissions/workflow\",\n    ],\n    getGithubActionsDefaultWorkflowPermissionsRepository: [\n      \"GET /repos/{owner}/{repo}/actions/permissions/workflow\",\n    ],\n    getGithubActionsPermissionsOrganization: [\n      \"GET /orgs/{org}/actions/permissions\",\n    ],\n    getGithubActionsPermissionsRepository: [\n      \"GET /repos/{owner}/{repo}/actions/permissions\",\n    ],\n    getHostedRunnerForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n    ],\n    getHostedRunnersGithubOwnedImagesForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/github-owned\",\n    ],\n    getHostedRunnersLimitsForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/limits\",\n    ],\n    getHostedRunnersMachineSpecsForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/machine-sizes\",\n    ],\n    getHostedRunnersPartnerImagesForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/partner\",\n    ],\n    getHostedRunnersPlatformsForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/platforms\",\n    ],\n    getJobForWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/jobs/{job_id}\"],\n    getOrgPublicKey: [\"GET /orgs/{org}/actions/secrets/public-key\"],\n    getOrgSecret: [\"GET /orgs/{org}/actions/secrets/{secret_name}\"],\n    getOrgVariable: [\"GET /orgs/{org}/actions/variables/{name}\"],\n    getPendingDeploymentsForRun: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\",\n    ],\n    getRepoPermissions: [\n      \"GET /repos/{owner}/{repo}/actions/permissions\",\n      {},\n      { renamed: [\"actions\", \"getGithubActionsPermissionsRepository\"] },\n    ],\n    getRepoPublicKey: [\"GET /repos/{owner}/{repo}/actions/secrets/public-key\"],\n    getRepoSecret: [\"GET /repos/{owner}/{repo}/actions/secrets/{secret_name}\"],\n    getRepoVariable: [\"GET /repos/{owner}/{repo}/actions/variables/{name}\"],\n    getReviewsForRun: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals\",\n    ],\n    getSelfHostedRunnerForOrg: [\"GET /orgs/{org}/actions/runners/{runner_id}\"],\n    getSelfHostedRunnerForRepo: [\n      \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}\",\n    ],\n    getWorkflow: [\"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}\"],\n    getWorkflowAccessToRepository: [\n      \"GET /repos/{owner}/{repo}/actions/permissions/access\",\n    ],\n    getWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n    getWorkflowRunAttempt: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}\",\n    ],\n    getWorkflowRunUsage: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing\",\n    ],\n    getWorkflowUsage: [\n      \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing\",\n    ],\n    listArtifactsForRepo: [\"GET /repos/{owner}/{repo}/actions/artifacts\"],\n    listCustomImageVersionsForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions\",\n    ],\n    listCustomImagesForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/custom\",\n    ],\n    listEnvironmentSecrets: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets\",\n    ],\n    listEnvironmentVariables: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n    ],\n    listGithubHostedRunnersInGroupForOrg: [\n      \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners\",\n    ],\n    listHostedRunnersForOrg: [\"GET /orgs/{org}/actions/hosted-runners\"],\n    listJobsForWorkflowRun: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\",\n    ],\n    listJobsForWorkflowRunAttempt: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\",\n    ],\n    listLabelsForSelfHostedRunnerForOrg: [\n      \"GET /orgs/{org}/actions/runners/{runner_id}/labels\",\n    ],\n    listLabelsForSelfHostedRunnerForRepo: [\n      \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n    ],\n    listOrgSecrets: [\"GET /orgs/{org}/actions/secrets\"],\n    listOrgVariables: [\"GET /orgs/{org}/actions/variables\"],\n    listRepoOrganizationSecrets: [\n      \"GET /repos/{owner}/{repo}/actions/organization-secrets\",\n    ],\n    listRepoOrganizationVariables: [\n      \"GET /repos/{owner}/{repo}/actions/organization-variables\",\n    ],\n    listRepoSecrets: [\"GET /repos/{owner}/{repo}/actions/secrets\"],\n    listRepoVariables: [\"GET /repos/{owner}/{repo}/actions/variables\"],\n    listRepoWorkflows: [\"GET /repos/{owner}/{repo}/actions/workflows\"],\n    listRunnerApplicationsForOrg: [\"GET /orgs/{org}/actions/runners/downloads\"],\n    listRunnerApplicationsForRepo: [\n      \"GET /repos/{owner}/{repo}/actions/runners/downloads\",\n    ],\n    listSelectedReposForOrgSecret: [\n      \"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n    ],\n    listSelectedReposForOrgVariable: [\n      \"GET /orgs/{org}/actions/variables/{name}/repositories\",\n    ],\n    listSelectedRepositoriesEnabledGithubActionsOrganization: [\n      \"GET /orgs/{org}/actions/permissions/repositories\",\n    ],\n    listSelfHostedRunnersForOrg: [\"GET /orgs/{org}/actions/runners\"],\n    listSelfHostedRunnersForRepo: [\"GET /repos/{owner}/{repo}/actions/runners\"],\n    listWorkflowRunArtifacts: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\",\n    ],\n    listWorkflowRuns: [\n      \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\",\n    ],\n    listWorkflowRunsForRepo: [\"GET /repos/{owner}/{repo}/actions/runs\"],\n    reRunJobForWorkflowRun: [\n      \"POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun\",\n    ],\n    reRunWorkflow: [\"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun\"],\n    reRunWorkflowFailedJobs: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs\",\n    ],\n    removeAllCustomLabelsFromSelfHostedRunnerForOrg: [\n      \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels\",\n    ],\n    removeAllCustomLabelsFromSelfHostedRunnerForRepo: [\n      \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n    ],\n    removeCustomLabelFromSelfHostedRunnerForOrg: [\n      \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}\",\n    ],\n    removeCustomLabelFromSelfHostedRunnerForRepo: [\n      \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}\",\n    ],\n    removeSelectedRepoFromOrgSecret: [\n      \"DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    removeSelectedRepoFromOrgVariable: [\n      \"DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\",\n    ],\n    reviewCustomGatesForRun: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule\",\n    ],\n    reviewPendingDeploymentsForRun: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\",\n    ],\n    setAllowedActionsOrganization: [\n      \"PUT /orgs/{org}/actions/permissions/selected-actions\",\n    ],\n    setAllowedActionsRepository: [\n      \"PUT /repos/{owner}/{repo}/actions/permissions/selected-actions\",\n    ],\n    setCustomLabelsForSelfHostedRunnerForOrg: [\n      \"PUT /orgs/{org}/actions/runners/{runner_id}/labels\",\n    ],\n    setCustomLabelsForSelfHostedRunnerForRepo: [\n      \"PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n    ],\n    setCustomOidcSubClaimForRepo: [\n      \"PUT /repos/{owner}/{repo}/actions/oidc/customization/sub\",\n    ],\n    setGithubActionsDefaultWorkflowPermissionsOrganization: [\n      \"PUT /orgs/{org}/actions/permissions/workflow\",\n    ],\n    setGithubActionsDefaultWorkflowPermissionsRepository: [\n      \"PUT /repos/{owner}/{repo}/actions/permissions/workflow\",\n    ],\n    setGithubActionsPermissionsOrganization: [\n      \"PUT /orgs/{org}/actions/permissions\",\n    ],\n    setGithubActionsPermissionsRepository: [\n      \"PUT /repos/{owner}/{repo}/actions/permissions\",\n    ],\n    setSelectedReposForOrgSecret: [\n      \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n    ],\n    setSelectedReposForOrgVariable: [\n      \"PUT /orgs/{org}/actions/variables/{name}/repositories\",\n    ],\n    setSelectedRepositoriesEnabledGithubActionsOrganization: [\n      \"PUT /orgs/{org}/actions/permissions/repositories\",\n    ],\n    setWorkflowAccessToRepository: [\n      \"PUT /repos/{owner}/{repo}/actions/permissions/access\",\n    ],\n    updateEnvironmentVariable: [\n      \"PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n    ],\n    updateHostedRunnerForOrg: [\n      \"PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n    ],\n    updateOrgVariable: [\"PATCH /orgs/{org}/actions/variables/{name}\"],\n    updateRepoVariable: [\n      \"PATCH /repos/{owner}/{repo}/actions/variables/{name}\",\n    ],\n  },\n  activity: {\n    checkRepoIsStarredByAuthenticatedUser: [\"GET /user/starred/{owner}/{repo}\"],\n    deleteRepoSubscription: [\"DELETE /repos/{owner}/{repo}/subscription\"],\n    deleteThreadSubscription: [\n      \"DELETE /notifications/threads/{thread_id}/subscription\",\n    ],\n    getFeeds: [\"GET /feeds\"],\n    getRepoSubscription: [\"GET /repos/{owner}/{repo}/subscription\"],\n    getThread: [\"GET /notifications/threads/{thread_id}\"],\n    getThreadSubscriptionForAuthenticatedUser: [\n      \"GET /notifications/threads/{thread_id}/subscription\",\n    ],\n    listEventsForAuthenticatedUser: [\"GET /users/{username}/events\"],\n    listNotificationsForAuthenticatedUser: [\"GET /notifications\"],\n    listOrgEventsForAuthenticatedUser: [\n      \"GET /users/{username}/events/orgs/{org}\",\n    ],\n    listPublicEvents: [\"GET /events\"],\n    listPublicEventsForRepoNetwork: [\"GET /networks/{owner}/{repo}/events\"],\n    listPublicEventsForUser: [\"GET /users/{username}/events/public\"],\n    listPublicOrgEvents: [\"GET /orgs/{org}/events\"],\n    listReceivedEventsForUser: [\"GET /users/{username}/received_events\"],\n    listReceivedPublicEventsForUser: [\n      \"GET /users/{username}/received_events/public\",\n    ],\n    listRepoEvents: [\"GET /repos/{owner}/{repo}/events\"],\n    listRepoNotificationsForAuthenticatedUser: [\n      \"GET /repos/{owner}/{repo}/notifications\",\n    ],\n    listReposStarredByAuthenticatedUser: [\"GET /user/starred\"],\n    listReposStarredByUser: [\"GET /users/{username}/starred\"],\n    listReposWatchedByUser: [\"GET /users/{username}/subscriptions\"],\n    listStargazersForRepo: [\"GET /repos/{owner}/{repo}/stargazers\"],\n    listWatchedReposForAuthenticatedUser: [\"GET /user/subscriptions\"],\n    listWatchersForRepo: [\"GET /repos/{owner}/{repo}/subscribers\"],\n    markNotificationsAsRead: [\"PUT /notifications\"],\n    markRepoNotificationsAsRead: [\"PUT /repos/{owner}/{repo}/notifications\"],\n    markThreadAsDone: [\"DELETE /notifications/threads/{thread_id}\"],\n    markThreadAsRead: [\"PATCH /notifications/threads/{thread_id}\"],\n    setRepoSubscription: [\"PUT /repos/{owner}/{repo}/subscription\"],\n    setThreadSubscription: [\n      \"PUT /notifications/threads/{thread_id}/subscription\",\n    ],\n    starRepoForAuthenticatedUser: [\"PUT /user/starred/{owner}/{repo}\"],\n    unstarRepoForAuthenticatedUser: [\"DELETE /user/starred/{owner}/{repo}\"],\n  },\n  apps: {\n    addRepoToInstallation: [\n      \"PUT /user/installations/{installation_id}/repositories/{repository_id}\",\n      {},\n      { renamed: [\"apps\", \"addRepoToInstallationForAuthenticatedUser\"] },\n    ],\n    addRepoToInstallationForAuthenticatedUser: [\n      \"PUT /user/installations/{installation_id}/repositories/{repository_id}\",\n    ],\n    checkToken: [\"POST /applications/{client_id}/token\"],\n    createFromManifest: [\"POST /app-manifests/{code}/conversions\"],\n    createInstallationAccessToken: [\n      \"POST /app/installations/{installation_id}/access_tokens\",\n    ],\n    deleteAuthorization: [\"DELETE /applications/{client_id}/grant\"],\n    deleteInstallation: [\"DELETE /app/installations/{installation_id}\"],\n    deleteToken: [\"DELETE /applications/{client_id}/token\"],\n    getAuthenticated: [\"GET /app\"],\n    getBySlug: [\"GET /apps/{app_slug}\"],\n    getInstallation: [\"GET /app/installations/{installation_id}\"],\n    getOrgInstallation: [\"GET /orgs/{org}/installation\"],\n    getRepoInstallation: [\"GET /repos/{owner}/{repo}/installation\"],\n    getSubscriptionPlanForAccount: [\n      \"GET /marketplace_listing/accounts/{account_id}\",\n    ],\n    getSubscriptionPlanForAccountStubbed: [\n      \"GET /marketplace_listing/stubbed/accounts/{account_id}\",\n    ],\n    getUserInstallation: [\"GET /users/{username}/installation\"],\n    getWebhookConfigForApp: [\"GET /app/hook/config\"],\n    getWebhookDelivery: [\"GET /app/hook/deliveries/{delivery_id}\"],\n    listAccountsForPlan: [\"GET /marketplace_listing/plans/{plan_id}/accounts\"],\n    listAccountsForPlanStubbed: [\n      \"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts\",\n    ],\n    listInstallationReposForAuthenticatedUser: [\n      \"GET /user/installations/{installation_id}/repositories\",\n    ],\n    listInstallationRequestsForAuthenticatedApp: [\n      \"GET /app/installation-requests\",\n    ],\n    listInstallations: [\"GET /app/installations\"],\n    listInstallationsForAuthenticatedUser: [\"GET /user/installations\"],\n    listPlans: [\"GET /marketplace_listing/plans\"],\n    listPlansStubbed: [\"GET /marketplace_listing/stubbed/plans\"],\n    listReposAccessibleToInstallation: [\"GET /installation/repositories\"],\n    listSubscriptionsForAuthenticatedUser: [\"GET /user/marketplace_purchases\"],\n    listSubscriptionsForAuthenticatedUserStubbed: [\n      \"GET /user/marketplace_purchases/stubbed\",\n    ],\n    listWebhookDeliveries: [\"GET /app/hook/deliveries\"],\n    redeliverWebhookDelivery: [\n      \"POST /app/hook/deliveries/{delivery_id}/attempts\",\n    ],\n    removeRepoFromInstallation: [\n      \"DELETE /user/installations/{installation_id}/repositories/{repository_id}\",\n      {},\n      { renamed: [\"apps\", \"removeRepoFromInstallationForAuthenticatedUser\"] },\n    ],\n    removeRepoFromInstallationForAuthenticatedUser: [\n      \"DELETE /user/installations/{installation_id}/repositories/{repository_id}\",\n    ],\n    resetToken: [\"PATCH /applications/{client_id}/token\"],\n    revokeInstallationAccessToken: [\"DELETE /installation/token\"],\n    scopeToken: [\"POST /applications/{client_id}/token/scoped\"],\n    suspendInstallation: [\"PUT /app/installations/{installation_id}/suspended\"],\n    unsuspendInstallation: [\n      \"DELETE /app/installations/{installation_id}/suspended\",\n    ],\n    updateWebhookConfigForApp: [\"PATCH /app/hook/config\"],\n  },\n  billing: {\n    getGithubActionsBillingOrg: [\"GET /orgs/{org}/settings/billing/actions\"],\n    getGithubActionsBillingUser: [\n      \"GET /users/{username}/settings/billing/actions\",\n    ],\n    getGithubBillingPremiumRequestUsageReportOrg: [\n      \"GET /organizations/{org}/settings/billing/premium_request/usage\",\n    ],\n    getGithubBillingPremiumRequestUsageReportUser: [\n      \"GET /users/{username}/settings/billing/premium_request/usage\",\n    ],\n    getGithubBillingUsageReportOrg: [\n      \"GET /organizations/{org}/settings/billing/usage\",\n    ],\n    getGithubBillingUsageReportUser: [\n      \"GET /users/{username}/settings/billing/usage\",\n    ],\n    getGithubPackagesBillingOrg: [\"GET /orgs/{org}/settings/billing/packages\"],\n    getGithubPackagesBillingUser: [\n      \"GET /users/{username}/settings/billing/packages\",\n    ],\n    getSharedStorageBillingOrg: [\n      \"GET /orgs/{org}/settings/billing/shared-storage\",\n    ],\n    getSharedStorageBillingUser: [\n      \"GET /users/{username}/settings/billing/shared-storage\",\n    ],\n  },\n  campaigns: {\n    createCampaign: [\"POST /orgs/{org}/campaigns\"],\n    deleteCampaign: [\"DELETE /orgs/{org}/campaigns/{campaign_number}\"],\n    getCampaignSummary: [\"GET /orgs/{org}/campaigns/{campaign_number}\"],\n    listOrgCampaigns: [\"GET /orgs/{org}/campaigns\"],\n    updateCampaign: [\"PATCH /orgs/{org}/campaigns/{campaign_number}\"],\n  },\n  checks: {\n    create: [\"POST /repos/{owner}/{repo}/check-runs\"],\n    createSuite: [\"POST /repos/{owner}/{repo}/check-suites\"],\n    get: [\"GET /repos/{owner}/{repo}/check-runs/{check_run_id}\"],\n    getSuite: [\"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}\"],\n    listAnnotations: [\n      \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\",\n    ],\n    listForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\"],\n    listForSuite: [\n      \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\",\n    ],\n    listSuitesForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\"],\n    rerequestRun: [\n      \"POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest\",\n    ],\n    rerequestSuite: [\n      \"POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest\",\n    ],\n    setSuitesPreferences: [\n      \"PATCH /repos/{owner}/{repo}/check-suites/preferences\",\n    ],\n    update: [\"PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}\"],\n  },\n  codeScanning: {\n    commitAutofix: [\n      \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits\",\n    ],\n    createAutofix: [\n      \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\",\n    ],\n    createVariantAnalysis: [\n      \"POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses\",\n    ],\n    deleteAnalysis: [\n      \"DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}\",\n    ],\n    deleteCodeqlDatabase: [\n      \"DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\",\n    ],\n    getAlert: [\n      \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\",\n      {},\n      { renamedParameters: { alert_id: \"alert_number\" } },\n    ],\n    getAnalysis: [\n      \"GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}\",\n    ],\n    getAutofix: [\n      \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\",\n    ],\n    getCodeqlDatabase: [\n      \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\",\n    ],\n    getDefaultSetup: [\"GET /repos/{owner}/{repo}/code-scanning/default-setup\"],\n    getSarif: [\"GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}\"],\n    getVariantAnalysis: [\n      \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}\",\n    ],\n    getVariantAnalysisRepoTask: [\n      \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}\",\n    ],\n    listAlertInstances: [\n      \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n    ],\n    listAlertsForOrg: [\"GET /orgs/{org}/code-scanning/alerts\"],\n    listAlertsForRepo: [\"GET /repos/{owner}/{repo}/code-scanning/alerts\"],\n    listAlertsInstances: [\n      \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n      {},\n      { renamed: [\"codeScanning\", \"listAlertInstances\"] },\n    ],\n    listCodeqlDatabases: [\n      \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases\",\n    ],\n    listRecentAnalyses: [\"GET /repos/{owner}/{repo}/code-scanning/analyses\"],\n    updateAlert: [\n      \"PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\",\n    ],\n    updateDefaultSetup: [\n      \"PATCH /repos/{owner}/{repo}/code-scanning/default-setup\",\n    ],\n    uploadSarif: [\"POST /repos/{owner}/{repo}/code-scanning/sarifs\"],\n  },\n  codeSecurity: {\n    attachConfiguration: [\n      \"POST /orgs/{org}/code-security/configurations/{configuration_id}/attach\",\n    ],\n    attachEnterpriseConfiguration: [\n      \"POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach\",\n    ],\n    createConfiguration: [\"POST /orgs/{org}/code-security/configurations\"],\n    createConfigurationForEnterprise: [\n      \"POST /enterprises/{enterprise}/code-security/configurations\",\n    ],\n    deleteConfiguration: [\n      \"DELETE /orgs/{org}/code-security/configurations/{configuration_id}\",\n    ],\n    deleteConfigurationForEnterprise: [\n      \"DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}\",\n    ],\n    detachConfiguration: [\n      \"DELETE /orgs/{org}/code-security/configurations/detach\",\n    ],\n    getConfiguration: [\n      \"GET /orgs/{org}/code-security/configurations/{configuration_id}\",\n    ],\n    getConfigurationForRepository: [\n      \"GET /repos/{owner}/{repo}/code-security-configuration\",\n    ],\n    getConfigurationsForEnterprise: [\n      \"GET /enterprises/{enterprise}/code-security/configurations\",\n    ],\n    getConfigurationsForOrg: [\"GET /orgs/{org}/code-security/configurations\"],\n    getDefaultConfigurations: [\n      \"GET /orgs/{org}/code-security/configurations/defaults\",\n    ],\n    getDefaultConfigurationsForEnterprise: [\n      \"GET /enterprises/{enterprise}/code-security/configurations/defaults\",\n    ],\n    getRepositoriesForConfiguration: [\n      \"GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories\",\n    ],\n    getRepositoriesForEnterpriseConfiguration: [\n      \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories\",\n    ],\n    getSingleConfigurationForEnterprise: [\n      \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}\",\n    ],\n    setConfigurationAsDefault: [\n      \"PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults\",\n    ],\n    setConfigurationAsDefaultForEnterprise: [\n      \"PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults\",\n    ],\n    updateConfiguration: [\n      \"PATCH /orgs/{org}/code-security/configurations/{configuration_id}\",\n    ],\n    updateEnterpriseConfiguration: [\n      \"PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}\",\n    ],\n  },\n  codesOfConduct: {\n    getAllCodesOfConduct: [\"GET /codes_of_conduct\"],\n    getConductCode: [\"GET /codes_of_conduct/{key}\"],\n  },\n  codespaces: {\n    addRepositoryForSecretForAuthenticatedUser: [\n      \"PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    addSelectedRepoToOrgSecret: [\n      \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    checkPermissionsForDevcontainer: [\n      \"GET /repos/{owner}/{repo}/codespaces/permissions_check\",\n    ],\n    codespaceMachinesForAuthenticatedUser: [\n      \"GET /user/codespaces/{codespace_name}/machines\",\n    ],\n    createForAuthenticatedUser: [\"POST /user/codespaces\"],\n    createOrUpdateOrgSecret: [\n      \"PUT /orgs/{org}/codespaces/secrets/{secret_name}\",\n    ],\n    createOrUpdateRepoSecret: [\n      \"PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n    ],\n    createOrUpdateSecretForAuthenticatedUser: [\n      \"PUT /user/codespaces/secrets/{secret_name}\",\n    ],\n    createWithPrForAuthenticatedUser: [\n      \"POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces\",\n    ],\n    createWithRepoForAuthenticatedUser: [\n      \"POST /repos/{owner}/{repo}/codespaces\",\n    ],\n    deleteForAuthenticatedUser: [\"DELETE /user/codespaces/{codespace_name}\"],\n    deleteFromOrganization: [\n      \"DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}\",\n    ],\n    deleteOrgSecret: [\"DELETE /orgs/{org}/codespaces/secrets/{secret_name}\"],\n    deleteRepoSecret: [\n      \"DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n    ],\n    deleteSecretForAuthenticatedUser: [\n      \"DELETE /user/codespaces/secrets/{secret_name}\",\n    ],\n    exportForAuthenticatedUser: [\n      \"POST /user/codespaces/{codespace_name}/exports\",\n    ],\n    getCodespacesForUserInOrg: [\n      \"GET /orgs/{org}/members/{username}/codespaces\",\n    ],\n    getExportDetailsForAuthenticatedUser: [\n      \"GET /user/codespaces/{codespace_name}/exports/{export_id}\",\n    ],\n    getForAuthenticatedUser: [\"GET /user/codespaces/{codespace_name}\"],\n    getOrgPublicKey: [\"GET /orgs/{org}/codespaces/secrets/public-key\"],\n    getOrgSecret: [\"GET /orgs/{org}/codespaces/secrets/{secret_name}\"],\n    getPublicKeyForAuthenticatedUser: [\n      \"GET /user/codespaces/secrets/public-key\",\n    ],\n    getRepoPublicKey: [\n      \"GET /repos/{owner}/{repo}/codespaces/secrets/public-key\",\n    ],\n    getRepoSecret: [\n      \"GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n    ],\n    getSecretForAuthenticatedUser: [\n      \"GET /user/codespaces/secrets/{secret_name}\",\n    ],\n    listDevcontainersInRepositoryForAuthenticatedUser: [\n      \"GET /repos/{owner}/{repo}/codespaces/devcontainers\",\n    ],\n    listForAuthenticatedUser: [\"GET /user/codespaces\"],\n    listInOrganization: [\n      \"GET /orgs/{org}/codespaces\",\n      {},\n      { renamedParameters: { org_id: \"org\" } },\n    ],\n    listInRepositoryForAuthenticatedUser: [\n      \"GET /repos/{owner}/{repo}/codespaces\",\n    ],\n    listOrgSecrets: [\"GET /orgs/{org}/codespaces/secrets\"],\n    listRepoSecrets: [\"GET /repos/{owner}/{repo}/codespaces/secrets\"],\n    listRepositoriesForSecretForAuthenticatedUser: [\n      \"GET /user/codespaces/secrets/{secret_name}/repositories\",\n    ],\n    listSecretsForAuthenticatedUser: [\"GET /user/codespaces/secrets\"],\n    listSelectedReposForOrgSecret: [\n      \"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n    ],\n    preFlightWithRepoForAuthenticatedUser: [\n      \"GET /repos/{owner}/{repo}/codespaces/new\",\n    ],\n    publishForAuthenticatedUser: [\n      \"POST /user/codespaces/{codespace_name}/publish\",\n    ],\n    removeRepositoryForSecretForAuthenticatedUser: [\n      \"DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    removeSelectedRepoFromOrgSecret: [\n      \"DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    repoMachinesForAuthenticatedUser: [\n      \"GET /repos/{owner}/{repo}/codespaces/machines\",\n    ],\n    setRepositoriesForSecretForAuthenticatedUser: [\n      \"PUT /user/codespaces/secrets/{secret_name}/repositories\",\n    ],\n    setSelectedReposForOrgSecret: [\n      \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n    ],\n    startForAuthenticatedUser: [\"POST /user/codespaces/{codespace_name}/start\"],\n    stopForAuthenticatedUser: [\"POST /user/codespaces/{codespace_name}/stop\"],\n    stopInOrganization: [\n      \"POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop\",\n    ],\n    updateForAuthenticatedUser: [\"PATCH /user/codespaces/{codespace_name}\"],\n  },\n  copilot: {\n    addCopilotSeatsForTeams: [\n      \"POST /orgs/{org}/copilot/billing/selected_teams\",\n    ],\n    addCopilotSeatsForUsers: [\n      \"POST /orgs/{org}/copilot/billing/selected_users\",\n    ],\n    cancelCopilotSeatAssignmentForTeams: [\n      \"DELETE /orgs/{org}/copilot/billing/selected_teams\",\n    ],\n    cancelCopilotSeatAssignmentForUsers: [\n      \"DELETE /orgs/{org}/copilot/billing/selected_users\",\n    ],\n    copilotMetricsForOrganization: [\"GET /orgs/{org}/copilot/metrics\"],\n    copilotMetricsForTeam: [\"GET /orgs/{org}/team/{team_slug}/copilot/metrics\"],\n    getCopilotOrganizationDetails: [\"GET /orgs/{org}/copilot/billing\"],\n    getCopilotSeatDetailsForUser: [\n      \"GET /orgs/{org}/members/{username}/copilot\",\n    ],\n    listCopilotSeats: [\"GET /orgs/{org}/copilot/billing/seats\"],\n  },\n  credentials: { revoke: [\"POST /credentials/revoke\"] },\n  dependabot: {\n    addSelectedRepoToOrgSecret: [\n      \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    createOrUpdateOrgSecret: [\n      \"PUT /orgs/{org}/dependabot/secrets/{secret_name}\",\n    ],\n    createOrUpdateRepoSecret: [\n      \"PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n    ],\n    deleteOrgSecret: [\"DELETE /orgs/{org}/dependabot/secrets/{secret_name}\"],\n    deleteRepoSecret: [\n      \"DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n    ],\n    getAlert: [\"GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\"],\n    getOrgPublicKey: [\"GET /orgs/{org}/dependabot/secrets/public-key\"],\n    getOrgSecret: [\"GET /orgs/{org}/dependabot/secrets/{secret_name}\"],\n    getRepoPublicKey: [\n      \"GET /repos/{owner}/{repo}/dependabot/secrets/public-key\",\n    ],\n    getRepoSecret: [\n      \"GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n    ],\n    listAlertsForEnterprise: [\n      \"GET /enterprises/{enterprise}/dependabot/alerts\",\n    ],\n    listAlertsForOrg: [\"GET /orgs/{org}/dependabot/alerts\"],\n    listAlertsForRepo: [\"GET /repos/{owner}/{repo}/dependabot/alerts\"],\n    listOrgSecrets: [\"GET /orgs/{org}/dependabot/secrets\"],\n    listRepoSecrets: [\"GET /repos/{owner}/{repo}/dependabot/secrets\"],\n    listSelectedReposForOrgSecret: [\n      \"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n    ],\n    removeSelectedRepoFromOrgSecret: [\n      \"DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    repositoryAccessForOrg: [\n      \"GET /organizations/{org}/dependabot/repository-access\",\n    ],\n    setRepositoryAccessDefaultLevel: [\n      \"PUT /organizations/{org}/dependabot/repository-access/default-level\",\n    ],\n    setSelectedReposForOrgSecret: [\n      \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n    ],\n    updateAlert: [\n      \"PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\",\n    ],\n    updateRepositoryAccessForOrg: [\n      \"PATCH /organizations/{org}/dependabot/repository-access\",\n    ],\n  },\n  dependencyGraph: {\n    createRepositorySnapshot: [\n      \"POST /repos/{owner}/{repo}/dependency-graph/snapshots\",\n    ],\n    diffRange: [\n      \"GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}\",\n    ],\n    exportSbom: [\"GET /repos/{owner}/{repo}/dependency-graph/sbom\"],\n  },\n  emojis: { get: [\"GET /emojis\"] },\n  enterpriseTeamMemberships: {\n    add: [\n      \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n    ],\n    bulkAdd: [\n      \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add\",\n    ],\n    bulkRemove: [\n      \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove\",\n    ],\n    get: [\n      \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n    ],\n    list: [\"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships\"],\n    remove: [\n      \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n    ],\n  },\n  enterpriseTeamOrganizations: {\n    add: [\n      \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n    ],\n    bulkAdd: [\n      \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add\",\n    ],\n    bulkRemove: [\n      \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove\",\n    ],\n    delete: [\n      \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n    ],\n    getAssignment: [\n      \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n    ],\n    getAssignments: [\n      \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations\",\n    ],\n  },\n  enterpriseTeams: {\n    create: [\"POST /enterprises/{enterprise}/teams\"],\n    delete: [\"DELETE /enterprises/{enterprise}/teams/{team_slug}\"],\n    get: [\"GET /enterprises/{enterprise}/teams/{team_slug}\"],\n    list: [\"GET /enterprises/{enterprise}/teams\"],\n    update: [\"PATCH /enterprises/{enterprise}/teams/{team_slug}\"],\n  },\n  gists: {\n    checkIsStarred: [\"GET /gists/{gist_id}/star\"],\n    create: [\"POST /gists\"],\n    createComment: [\"POST /gists/{gist_id}/comments\"],\n    delete: [\"DELETE /gists/{gist_id}\"],\n    deleteComment: [\"DELETE /gists/{gist_id}/comments/{comment_id}\"],\n    fork: [\"POST /gists/{gist_id}/forks\"],\n    get: [\"GET /gists/{gist_id}\"],\n    getComment: [\"GET /gists/{gist_id}/comments/{comment_id}\"],\n    getRevision: [\"GET /gists/{gist_id}/{sha}\"],\n    list: [\"GET /gists\"],\n    listComments: [\"GET /gists/{gist_id}/comments\"],\n    listCommits: [\"GET /gists/{gist_id}/commits\"],\n    listForUser: [\"GET /users/{username}/gists\"],\n    listForks: [\"GET /gists/{gist_id}/forks\"],\n    listPublic: [\"GET /gists/public\"],\n    listStarred: [\"GET /gists/starred\"],\n    star: [\"PUT /gists/{gist_id}/star\"],\n    unstar: [\"DELETE /gists/{gist_id}/star\"],\n    update: [\"PATCH /gists/{gist_id}\"],\n    updateComment: [\"PATCH /gists/{gist_id}/comments/{comment_id}\"],\n  },\n  git: {\n    createBlob: [\"POST /repos/{owner}/{repo}/git/blobs\"],\n    createCommit: [\"POST /repos/{owner}/{repo}/git/commits\"],\n    createRef: [\"POST /repos/{owner}/{repo}/git/refs\"],\n    createTag: [\"POST /repos/{owner}/{repo}/git/tags\"],\n    createTree: [\"POST /repos/{owner}/{repo}/git/trees\"],\n    deleteRef: [\"DELETE /repos/{owner}/{repo}/git/refs/{ref}\"],\n    getBlob: [\"GET /repos/{owner}/{repo}/git/blobs/{file_sha}\"],\n    getCommit: [\"GET /repos/{owner}/{repo}/git/commits/{commit_sha}\"],\n    getRef: [\"GET /repos/{owner}/{repo}/git/ref/{ref}\"],\n    getTag: [\"GET /repos/{owner}/{repo}/git/tags/{tag_sha}\"],\n    getTree: [\"GET /repos/{owner}/{repo}/git/trees/{tree_sha}\"],\n    listMatchingRefs: [\"GET /repos/{owner}/{repo}/git/matching-refs/{ref}\"],\n    updateRef: [\"PATCH /repos/{owner}/{repo}/git/refs/{ref}\"],\n  },\n  gitignore: {\n    getAllTemplates: [\"GET /gitignore/templates\"],\n    getTemplate: [\"GET /gitignore/templates/{name}\"],\n  },\n  hostedCompute: {\n    createNetworkConfigurationForOrg: [\n      \"POST /orgs/{org}/settings/network-configurations\",\n    ],\n    deleteNetworkConfigurationFromOrg: [\n      \"DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n    ],\n    getNetworkConfigurationForOrg: [\n      \"GET /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n    ],\n    getNetworkSettingsForOrg: [\n      \"GET /orgs/{org}/settings/network-settings/{network_settings_id}\",\n    ],\n    listNetworkConfigurationsForOrg: [\n      \"GET /orgs/{org}/settings/network-configurations\",\n    ],\n    updateNetworkConfigurationForOrg: [\n      \"PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n    ],\n  },\n  interactions: {\n    getRestrictionsForAuthenticatedUser: [\"GET /user/interaction-limits\"],\n    getRestrictionsForOrg: [\"GET /orgs/{org}/interaction-limits\"],\n    getRestrictionsForRepo: [\"GET /repos/{owner}/{repo}/interaction-limits\"],\n    getRestrictionsForYourPublicRepos: [\n      \"GET /user/interaction-limits\",\n      {},\n      { renamed: [\"interactions\", \"getRestrictionsForAuthenticatedUser\"] },\n    ],\n    removeRestrictionsForAuthenticatedUser: [\"DELETE /user/interaction-limits\"],\n    removeRestrictionsForOrg: [\"DELETE /orgs/{org}/interaction-limits\"],\n    removeRestrictionsForRepo: [\n      \"DELETE /repos/{owner}/{repo}/interaction-limits\",\n    ],\n    removeRestrictionsForYourPublicRepos: [\n      \"DELETE /user/interaction-limits\",\n      {},\n      { renamed: [\"interactions\", \"removeRestrictionsForAuthenticatedUser\"] },\n    ],\n    setRestrictionsForAuthenticatedUser: [\"PUT /user/interaction-limits\"],\n    setRestrictionsForOrg: [\"PUT /orgs/{org}/interaction-limits\"],\n    setRestrictionsForRepo: [\"PUT /repos/{owner}/{repo}/interaction-limits\"],\n    setRestrictionsForYourPublicRepos: [\n      \"PUT /user/interaction-limits\",\n      {},\n      { renamed: [\"interactions\", \"setRestrictionsForAuthenticatedUser\"] },\n    ],\n  },\n  issues: {\n    addAssignees: [\n      \"POST /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n    ],\n    addBlockedByDependency: [\n      \"POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n    ],\n    addLabels: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n    addSubIssue: [\n      \"POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n    ],\n    checkUserCanBeAssigned: [\"GET /repos/{owner}/{repo}/assignees/{assignee}\"],\n    checkUserCanBeAssignedToIssue: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}\",\n    ],\n    create: [\"POST /repos/{owner}/{repo}/issues\"],\n    createComment: [\n      \"POST /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n    ],\n    createLabel: [\"POST /repos/{owner}/{repo}/labels\"],\n    createMilestone: [\"POST /repos/{owner}/{repo}/milestones\"],\n    deleteComment: [\n      \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n    ],\n    deleteLabel: [\"DELETE /repos/{owner}/{repo}/labels/{name}\"],\n    deleteMilestone: [\n      \"DELETE /repos/{owner}/{repo}/milestones/{milestone_number}\",\n    ],\n    get: [\"GET /repos/{owner}/{repo}/issues/{issue_number}\"],\n    getComment: [\"GET /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n    getEvent: [\"GET /repos/{owner}/{repo}/issues/events/{event_id}\"],\n    getLabel: [\"GET /repos/{owner}/{repo}/labels/{name}\"],\n    getMilestone: [\"GET /repos/{owner}/{repo}/milestones/{milestone_number}\"],\n    getParent: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/parent\"],\n    list: [\"GET /issues\"],\n    listAssignees: [\"GET /repos/{owner}/{repo}/assignees\"],\n    listComments: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\"],\n    listCommentsForRepo: [\"GET /repos/{owner}/{repo}/issues/comments\"],\n    listDependenciesBlockedBy: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n    ],\n    listDependenciesBlocking: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking\",\n    ],\n    listEvents: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/events\"],\n    listEventsForRepo: [\"GET /repos/{owner}/{repo}/issues/events\"],\n    listEventsForTimeline: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\",\n    ],\n    listForAuthenticatedUser: [\"GET /user/issues\"],\n    listForOrg: [\"GET /orgs/{org}/issues\"],\n    listForRepo: [\"GET /repos/{owner}/{repo}/issues\"],\n    listLabelsForMilestone: [\n      \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\",\n    ],\n    listLabelsForRepo: [\"GET /repos/{owner}/{repo}/labels\"],\n    listLabelsOnIssue: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n    ],\n    listMilestones: [\"GET /repos/{owner}/{repo}/milestones\"],\n    listSubIssues: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n    ],\n    lock: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n    removeAllLabels: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n    ],\n    removeAssignees: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n    ],\n    removeDependencyBlockedBy: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}\",\n    ],\n    removeLabel: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}\",\n    ],\n    removeSubIssue: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue\",\n    ],\n    reprioritizeSubIssue: [\n      \"PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority\",\n    ],\n    setLabels: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n    unlock: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n    update: [\"PATCH /repos/{owner}/{repo}/issues/{issue_number}\"],\n    updateComment: [\"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n    updateLabel: [\"PATCH /repos/{owner}/{repo}/labels/{name}\"],\n    updateMilestone: [\n      \"PATCH /repos/{owner}/{repo}/milestones/{milestone_number}\",\n    ],\n  },\n  licenses: {\n    get: [\"GET /licenses/{license}\"],\n    getAllCommonlyUsed: [\"GET /licenses\"],\n    getForRepo: [\"GET /repos/{owner}/{repo}/license\"],\n  },\n  markdown: {\n    render: [\"POST /markdown\"],\n    renderRaw: [\n      \"POST /markdown/raw\",\n      { headers: { \"content-type\": \"text/plain; charset=utf-8\" } },\n    ],\n  },\n  meta: {\n    get: [\"GET /meta\"],\n    getAllVersions: [\"GET /versions\"],\n    getOctocat: [\"GET /octocat\"],\n    getZen: [\"GET /zen\"],\n    root: [\"GET /\"],\n  },\n  migrations: {\n    deleteArchiveForAuthenticatedUser: [\n      \"DELETE /user/migrations/{migration_id}/archive\",\n    ],\n    deleteArchiveForOrg: [\n      \"DELETE /orgs/{org}/migrations/{migration_id}/archive\",\n    ],\n    downloadArchiveForOrg: [\n      \"GET /orgs/{org}/migrations/{migration_id}/archive\",\n    ],\n    getArchiveForAuthenticatedUser: [\n      \"GET /user/migrations/{migration_id}/archive\",\n    ],\n    getStatusForAuthenticatedUser: [\"GET /user/migrations/{migration_id}\"],\n    getStatusForOrg: [\"GET /orgs/{org}/migrations/{migration_id}\"],\n    listForAuthenticatedUser: [\"GET /user/migrations\"],\n    listForOrg: [\"GET /orgs/{org}/migrations\"],\n    listReposForAuthenticatedUser: [\n      \"GET /user/migrations/{migration_id}/repositories\",\n    ],\n    listReposForOrg: [\"GET /orgs/{org}/migrations/{migration_id}/repositories\"],\n    listReposForUser: [\n      \"GET /user/migrations/{migration_id}/repositories\",\n      {},\n      { renamed: [\"migrations\", \"listReposForAuthenticatedUser\"] },\n    ],\n    startForAuthenticatedUser: [\"POST /user/migrations\"],\n    startForOrg: [\"POST /orgs/{org}/migrations\"],\n    unlockRepoForAuthenticatedUser: [\n      \"DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock\",\n    ],\n    unlockRepoForOrg: [\n      \"DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock\",\n    ],\n  },\n  oidc: {\n    getOidcCustomSubTemplateForOrg: [\n      \"GET /orgs/{org}/actions/oidc/customization/sub\",\n    ],\n    updateOidcCustomSubTemplateForOrg: [\n      \"PUT /orgs/{org}/actions/oidc/customization/sub\",\n    ],\n  },\n  orgs: {\n    addSecurityManagerTeam: [\n      \"PUT /orgs/{org}/security-managers/teams/{team_slug}\",\n      {},\n      {\n        deprecated:\n          \"octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team\",\n      },\n    ],\n    assignTeamToOrgRole: [\n      \"PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\",\n    ],\n    assignUserToOrgRole: [\n      \"PUT /orgs/{org}/organization-roles/users/{username}/{role_id}\",\n    ],\n    blockUser: [\"PUT /orgs/{org}/blocks/{username}\"],\n    cancelInvitation: [\"DELETE /orgs/{org}/invitations/{invitation_id}\"],\n    checkBlockedUser: [\"GET /orgs/{org}/blocks/{username}\"],\n    checkMembershipForUser: [\"GET /orgs/{org}/members/{username}\"],\n    checkPublicMembershipForUser: [\"GET /orgs/{org}/public_members/{username}\"],\n    convertMemberToOutsideCollaborator: [\n      \"PUT /orgs/{org}/outside_collaborators/{username}\",\n    ],\n    createArtifactStorageRecord: [\n      \"POST /orgs/{org}/artifacts/metadata/storage-record\",\n    ],\n    createInvitation: [\"POST /orgs/{org}/invitations\"],\n    createIssueType: [\"POST /orgs/{org}/issue-types\"],\n    createWebhook: [\"POST /orgs/{org}/hooks\"],\n    customPropertiesForOrgsCreateOrUpdateOrganizationValues: [\n      \"PATCH /organizations/{org}/org-properties/values\",\n    ],\n    customPropertiesForOrgsGetOrganizationValues: [\n      \"GET /organizations/{org}/org-properties/values\",\n    ],\n    customPropertiesForReposCreateOrUpdateOrganizationDefinition: [\n      \"PUT /orgs/{org}/properties/schema/{custom_property_name}\",\n    ],\n    customPropertiesForReposCreateOrUpdateOrganizationDefinitions: [\n      \"PATCH /orgs/{org}/properties/schema\",\n    ],\n    customPropertiesForReposCreateOrUpdateOrganizationValues: [\n      \"PATCH /orgs/{org}/properties/values\",\n    ],\n    customPropertiesForReposDeleteOrganizationDefinition: [\n      \"DELETE /orgs/{org}/properties/schema/{custom_property_name}\",\n    ],\n    customPropertiesForReposGetOrganizationDefinition: [\n      \"GET /orgs/{org}/properties/schema/{custom_property_name}\",\n    ],\n    customPropertiesForReposGetOrganizationDefinitions: [\n      \"GET /orgs/{org}/properties/schema\",\n    ],\n    customPropertiesForReposGetOrganizationValues: [\n      \"GET /orgs/{org}/properties/values\",\n    ],\n    delete: [\"DELETE /orgs/{org}\"],\n    deleteAttestationsBulk: [\"POST /orgs/{org}/attestations/delete-request\"],\n    deleteAttestationsById: [\n      \"DELETE /orgs/{org}/attestations/{attestation_id}\",\n    ],\n    deleteAttestationsBySubjectDigest: [\n      \"DELETE /orgs/{org}/attestations/digest/{subject_digest}\",\n    ],\n    deleteIssueType: [\"DELETE /orgs/{org}/issue-types/{issue_type_id}\"],\n    deleteWebhook: [\"DELETE /orgs/{org}/hooks/{hook_id}\"],\n    disableSelectedRepositoryImmutableReleasesOrganization: [\n      \"DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\",\n    ],\n    enableSelectedRepositoryImmutableReleasesOrganization: [\n      \"PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\",\n    ],\n    get: [\"GET /orgs/{org}\"],\n    getImmutableReleasesSettings: [\n      \"GET /orgs/{org}/settings/immutable-releases\",\n    ],\n    getImmutableReleasesSettingsRepositories: [\n      \"GET /orgs/{org}/settings/immutable-releases/repositories\",\n    ],\n    getMembershipForAuthenticatedUser: [\"GET /user/memberships/orgs/{org}\"],\n    getMembershipForUser: [\"GET /orgs/{org}/memberships/{username}\"],\n    getOrgRole: [\"GET /orgs/{org}/organization-roles/{role_id}\"],\n    getOrgRulesetHistory: [\"GET /orgs/{org}/rulesets/{ruleset_id}/history\"],\n    getOrgRulesetVersion: [\n      \"GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}\",\n    ],\n    getWebhook: [\"GET /orgs/{org}/hooks/{hook_id}\"],\n    getWebhookConfigForOrg: [\"GET /orgs/{org}/hooks/{hook_id}/config\"],\n    getWebhookDelivery: [\n      \"GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}\",\n    ],\n    list: [\"GET /organizations\"],\n    listAppInstallations: [\"GET /orgs/{org}/installations\"],\n    listArtifactStorageRecords: [\n      \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records\",\n    ],\n    listAttestationRepositories: [\"GET /orgs/{org}/attestations/repositories\"],\n    listAttestations: [\"GET /orgs/{org}/attestations/{subject_digest}\"],\n    listAttestationsBulk: [\n      \"POST /orgs/{org}/attestations/bulk-list{?per_page,before,after}\",\n    ],\n    listBlockedUsers: [\"GET /orgs/{org}/blocks\"],\n    listFailedInvitations: [\"GET /orgs/{org}/failed_invitations\"],\n    listForAuthenticatedUser: [\"GET /user/orgs\"],\n    listForUser: [\"GET /users/{username}/orgs\"],\n    listInvitationTeams: [\"GET /orgs/{org}/invitations/{invitation_id}/teams\"],\n    listIssueTypes: [\"GET /orgs/{org}/issue-types\"],\n    listMembers: [\"GET /orgs/{org}/members\"],\n    listMembershipsForAuthenticatedUser: [\"GET /user/memberships/orgs\"],\n    listOrgRoleTeams: [\"GET /orgs/{org}/organization-roles/{role_id}/teams\"],\n    listOrgRoleUsers: [\"GET /orgs/{org}/organization-roles/{role_id}/users\"],\n    listOrgRoles: [\"GET /orgs/{org}/organization-roles\"],\n    listOrganizationFineGrainedPermissions: [\n      \"GET /orgs/{org}/organization-fine-grained-permissions\",\n    ],\n    listOutsideCollaborators: [\"GET /orgs/{org}/outside_collaborators\"],\n    listPatGrantRepositories: [\n      \"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories\",\n    ],\n    listPatGrantRequestRepositories: [\n      \"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories\",\n    ],\n    listPatGrantRequests: [\"GET /orgs/{org}/personal-access-token-requests\"],\n    listPatGrants: [\"GET /orgs/{org}/personal-access-tokens\"],\n    listPendingInvitations: [\"GET /orgs/{org}/invitations\"],\n    listPublicMembers: [\"GET /orgs/{org}/public_members\"],\n    listSecurityManagerTeams: [\n      \"GET /orgs/{org}/security-managers\",\n      {},\n      {\n        deprecated:\n          \"octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams\",\n      },\n    ],\n    listWebhookDeliveries: [\"GET /orgs/{org}/hooks/{hook_id}/deliveries\"],\n    listWebhooks: [\"GET /orgs/{org}/hooks\"],\n    pingWebhook: [\"POST /orgs/{org}/hooks/{hook_id}/pings\"],\n    redeliverWebhookDelivery: [\n      \"POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\",\n    ],\n    removeMember: [\"DELETE /orgs/{org}/members/{username}\"],\n    removeMembershipForUser: [\"DELETE /orgs/{org}/memberships/{username}\"],\n    removeOutsideCollaborator: [\n      \"DELETE /orgs/{org}/outside_collaborators/{username}\",\n    ],\n    removePublicMembershipForAuthenticatedUser: [\n      \"DELETE /orgs/{org}/public_members/{username}\",\n    ],\n    removeSecurityManagerTeam: [\n      \"DELETE /orgs/{org}/security-managers/teams/{team_slug}\",\n      {},\n      {\n        deprecated:\n          \"octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team\",\n      },\n    ],\n    reviewPatGrantRequest: [\n      \"POST /orgs/{org}/personal-access-token-requests/{pat_request_id}\",\n    ],\n    reviewPatGrantRequestsInBulk: [\n      \"POST /orgs/{org}/personal-access-token-requests\",\n    ],\n    revokeAllOrgRolesTeam: [\n      \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}\",\n    ],\n    revokeAllOrgRolesUser: [\n      \"DELETE /orgs/{org}/organization-roles/users/{username}\",\n    ],\n    revokeOrgRoleTeam: [\n      \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\",\n    ],\n    revokeOrgRoleUser: [\n      \"DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}\",\n    ],\n    setImmutableReleasesSettings: [\n      \"PUT /orgs/{org}/settings/immutable-releases\",\n    ],\n    setImmutableReleasesSettingsRepositories: [\n      \"PUT /orgs/{org}/settings/immutable-releases/repositories\",\n    ],\n    setMembershipForUser: [\"PUT /orgs/{org}/memberships/{username}\"],\n    setPublicMembershipForAuthenticatedUser: [\n      \"PUT /orgs/{org}/public_members/{username}\",\n    ],\n    unblockUser: [\"DELETE /orgs/{org}/blocks/{username}\"],\n    update: [\"PATCH /orgs/{org}\"],\n    updateIssueType: [\"PUT /orgs/{org}/issue-types/{issue_type_id}\"],\n    updateMembershipForAuthenticatedUser: [\n      \"PATCH /user/memberships/orgs/{org}\",\n    ],\n    updatePatAccess: [\"POST /orgs/{org}/personal-access-tokens/{pat_id}\"],\n    updatePatAccesses: [\"POST /orgs/{org}/personal-access-tokens\"],\n    updateWebhook: [\"PATCH /orgs/{org}/hooks/{hook_id}\"],\n    updateWebhookConfigForOrg: [\"PATCH /orgs/{org}/hooks/{hook_id}/config\"],\n  },\n  packages: {\n    deletePackageForAuthenticatedUser: [\n      \"DELETE /user/packages/{package_type}/{package_name}\",\n    ],\n    deletePackageForOrg: [\n      \"DELETE /orgs/{org}/packages/{package_type}/{package_name}\",\n    ],\n    deletePackageForUser: [\n      \"DELETE /users/{username}/packages/{package_type}/{package_name}\",\n    ],\n    deletePackageVersionForAuthenticatedUser: [\n      \"DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    deletePackageVersionForOrg: [\n      \"DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    deletePackageVersionForUser: [\n      \"DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    getAllPackageVersionsForAPackageOwnedByAnOrg: [\n      \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\",\n      {},\n      { renamed: [\"packages\", \"getAllPackageVersionsForPackageOwnedByOrg\"] },\n    ],\n    getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [\n      \"GET /user/packages/{package_type}/{package_name}/versions\",\n      {},\n      {\n        renamed: [\n          \"packages\",\n          \"getAllPackageVersionsForPackageOwnedByAuthenticatedUser\",\n        ],\n      },\n    ],\n    getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [\n      \"GET /user/packages/{package_type}/{package_name}/versions\",\n    ],\n    getAllPackageVersionsForPackageOwnedByOrg: [\n      \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\",\n    ],\n    getAllPackageVersionsForPackageOwnedByUser: [\n      \"GET /users/{username}/packages/{package_type}/{package_name}/versions\",\n    ],\n    getPackageForAuthenticatedUser: [\n      \"GET /user/packages/{package_type}/{package_name}\",\n    ],\n    getPackageForOrganization: [\n      \"GET /orgs/{org}/packages/{package_type}/{package_name}\",\n    ],\n    getPackageForUser: [\n      \"GET /users/{username}/packages/{package_type}/{package_name}\",\n    ],\n    getPackageVersionForAuthenticatedUser: [\n      \"GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    getPackageVersionForOrganization: [\n      \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    getPackageVersionForUser: [\n      \"GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    listDockerMigrationConflictingPackagesForAuthenticatedUser: [\n      \"GET /user/docker/conflicts\",\n    ],\n    listDockerMigrationConflictingPackagesForOrganization: [\n      \"GET /orgs/{org}/docker/conflicts\",\n    ],\n    listDockerMigrationConflictingPackagesForUser: [\n      \"GET /users/{username}/docker/conflicts\",\n    ],\n    listPackagesForAuthenticatedUser: [\"GET /user/packages\"],\n    listPackagesForOrganization: [\"GET /orgs/{org}/packages\"],\n    listPackagesForUser: [\"GET /users/{username}/packages\"],\n    restorePackageForAuthenticatedUser: [\n      \"POST /user/packages/{package_type}/{package_name}/restore{?token}\",\n    ],\n    restorePackageForOrg: [\n      \"POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}\",\n    ],\n    restorePackageForUser: [\n      \"POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}\",\n    ],\n    restorePackageVersionForAuthenticatedUser: [\n      \"POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\",\n    ],\n    restorePackageVersionForOrg: [\n      \"POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\",\n    ],\n    restorePackageVersionForUser: [\n      \"POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\",\n    ],\n  },\n  privateRegistries: {\n    createOrgPrivateRegistry: [\"POST /orgs/{org}/private-registries\"],\n    deleteOrgPrivateRegistry: [\n      \"DELETE /orgs/{org}/private-registries/{secret_name}\",\n    ],\n    getOrgPrivateRegistry: [\"GET /orgs/{org}/private-registries/{secret_name}\"],\n    getOrgPublicKey: [\"GET /orgs/{org}/private-registries/public-key\"],\n    listOrgPrivateRegistries: [\"GET /orgs/{org}/private-registries\"],\n    updateOrgPrivateRegistry: [\n      \"PATCH /orgs/{org}/private-registries/{secret_name}\",\n    ],\n  },\n  projects: {\n    addItemForOrg: [\"POST /orgs/{org}/projectsV2/{project_number}/items\"],\n    addItemForUser: [\n      \"POST /users/{username}/projectsV2/{project_number}/items\",\n    ],\n    deleteItemForOrg: [\n      \"DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}\",\n    ],\n    deleteItemForUser: [\n      \"DELETE /users/{username}/projectsV2/{project_number}/items/{item_id}\",\n    ],\n    getFieldForOrg: [\n      \"GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}\",\n    ],\n    getFieldForUser: [\n      \"GET /users/{username}/projectsV2/{project_number}/fields/{field_id}\",\n    ],\n    getForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}\"],\n    getForUser: [\"GET /users/{username}/projectsV2/{project_number}\"],\n    getOrgItem: [\"GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}\"],\n    getUserItem: [\n      \"GET /users/{username}/projectsV2/{project_number}/items/{item_id}\",\n    ],\n    listFieldsForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}/fields\"],\n    listFieldsForUser: [\n      \"GET /users/{username}/projectsV2/{project_number}/fields\",\n    ],\n    listForOrg: [\"GET /orgs/{org}/projectsV2\"],\n    listForUser: [\"GET /users/{username}/projectsV2\"],\n    listItemsForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}/items\"],\n    listItemsForUser: [\n      \"GET /users/{username}/projectsV2/{project_number}/items\",\n    ],\n    updateItemForOrg: [\n      \"PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}\",\n    ],\n    updateItemForUser: [\n      \"PATCH /users/{username}/projectsV2/{project_number}/items/{item_id}\",\n    ],\n  },\n  pulls: {\n    checkIfMerged: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n    create: [\"POST /repos/{owner}/{repo}/pulls\"],\n    createReplyForReviewComment: [\n      \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies\",\n    ],\n    createReview: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n    createReviewComment: [\n      \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n    ],\n    deletePendingReview: [\n      \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n    ],\n    deleteReviewComment: [\n      \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}\",\n    ],\n    dismissReview: [\n      \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals\",\n    ],\n    get: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}\"],\n    getReview: [\n      \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n    ],\n    getReviewComment: [\"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}\"],\n    list: [\"GET /repos/{owner}/{repo}/pulls\"],\n    listCommentsForReview: [\n      \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\",\n    ],\n    listCommits: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\"],\n    listFiles: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\"],\n    listRequestedReviewers: [\n      \"GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n    ],\n    listReviewComments: [\n      \"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n    ],\n    listReviewCommentsForRepo: [\"GET /repos/{owner}/{repo}/pulls/comments\"],\n    listReviews: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n    merge: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n    removeRequestedReviewers: [\n      \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n    ],\n    requestReviewers: [\n      \"POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n    ],\n    submitReview: [\n      \"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events\",\n    ],\n    update: [\"PATCH /repos/{owner}/{repo}/pulls/{pull_number}\"],\n    updateBranch: [\n      \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch\",\n    ],\n    updateReview: [\n      \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n    ],\n    updateReviewComment: [\n      \"PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}\",\n    ],\n  },\n  rateLimit: { get: [\"GET /rate_limit\"] },\n  reactions: {\n    createForCommitComment: [\n      \"POST /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n    ],\n    createForIssue: [\n      \"POST /repos/{owner}/{repo}/issues/{issue_number}/reactions\",\n    ],\n    createForIssueComment: [\n      \"POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n    ],\n    createForPullRequestReviewComment: [\n      \"POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n    ],\n    createForRelease: [\n      \"POST /repos/{owner}/{repo}/releases/{release_id}/reactions\",\n    ],\n    createForTeamDiscussionCommentInOrg: [\n      \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n    ],\n    createForTeamDiscussionInOrg: [\n      \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\",\n    ],\n    deleteForCommitComment: [\n      \"DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}\",\n    ],\n    deleteForIssue: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}\",\n    ],\n    deleteForIssueComment: [\n      \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}\",\n    ],\n    deleteForPullRequestComment: [\n      \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}\",\n    ],\n    deleteForRelease: [\n      \"DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}\",\n    ],\n    deleteForTeamDiscussion: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}\",\n    ],\n    deleteForTeamDiscussionComment: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}\",\n    ],\n    listForCommitComment: [\n      \"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n    ],\n    listForIssue: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\"],\n    listForIssueComment: [\n      \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n    ],\n    listForPullRequestReviewComment: [\n      \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n    ],\n    listForRelease: [\n      \"GET /repos/{owner}/{repo}/releases/{release_id}/reactions\",\n    ],\n    listForTeamDiscussionCommentInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n    ],\n    listForTeamDiscussionInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\",\n    ],\n  },\n  repos: {\n    acceptInvitation: [\n      \"PATCH /user/repository_invitations/{invitation_id}\",\n      {},\n      { renamed: [\"repos\", \"acceptInvitationForAuthenticatedUser\"] },\n    ],\n    acceptInvitationForAuthenticatedUser: [\n      \"PATCH /user/repository_invitations/{invitation_id}\",\n    ],\n    addAppAccessRestrictions: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n      {},\n      { mapToData: \"apps\" },\n    ],\n    addCollaborator: [\"PUT /repos/{owner}/{repo}/collaborators/{username}\"],\n    addStatusCheckContexts: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n      {},\n      { mapToData: \"contexts\" },\n    ],\n    addTeamAccessRestrictions: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n      {},\n      { mapToData: \"teams\" },\n    ],\n    addUserAccessRestrictions: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n      {},\n      { mapToData: \"users\" },\n    ],\n    cancelPagesDeployment: [\n      \"POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel\",\n    ],\n    checkAutomatedSecurityFixes: [\n      \"GET /repos/{owner}/{repo}/automated-security-fixes\",\n    ],\n    checkCollaborator: [\"GET /repos/{owner}/{repo}/collaborators/{username}\"],\n    checkImmutableReleases: [\"GET /repos/{owner}/{repo}/immutable-releases\"],\n    checkPrivateVulnerabilityReporting: [\n      \"GET /repos/{owner}/{repo}/private-vulnerability-reporting\",\n    ],\n    checkVulnerabilityAlerts: [\n      \"GET /repos/{owner}/{repo}/vulnerability-alerts\",\n    ],\n    codeownersErrors: [\"GET /repos/{owner}/{repo}/codeowners/errors\"],\n    compareCommits: [\"GET /repos/{owner}/{repo}/compare/{base}...{head}\"],\n    compareCommitsWithBasehead: [\n      \"GET /repos/{owner}/{repo}/compare/{basehead}\",\n    ],\n    createAttestation: [\"POST /repos/{owner}/{repo}/attestations\"],\n    createAutolink: [\"POST /repos/{owner}/{repo}/autolinks\"],\n    createCommitComment: [\n      \"POST /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n    ],\n    createCommitSignatureProtection: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n    ],\n    createCommitStatus: [\"POST /repos/{owner}/{repo}/statuses/{sha}\"],\n    createDeployKey: [\"POST /repos/{owner}/{repo}/keys\"],\n    createDeployment: [\"POST /repos/{owner}/{repo}/deployments\"],\n    createDeploymentBranchPolicy: [\n      \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n    ],\n    createDeploymentProtectionRule: [\n      \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\",\n    ],\n    createDeploymentStatus: [\n      \"POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n    ],\n    createDispatchEvent: [\"POST /repos/{owner}/{repo}/dispatches\"],\n    createForAuthenticatedUser: [\"POST /user/repos\"],\n    createFork: [\"POST /repos/{owner}/{repo}/forks\"],\n    createInOrg: [\"POST /orgs/{org}/repos\"],\n    createOrUpdateEnvironment: [\n      \"PUT /repos/{owner}/{repo}/environments/{environment_name}\",\n    ],\n    createOrUpdateFileContents: [\"PUT /repos/{owner}/{repo}/contents/{path}\"],\n    createOrgRuleset: [\"POST /orgs/{org}/rulesets\"],\n    createPagesDeployment: [\"POST /repos/{owner}/{repo}/pages/deployments\"],\n    createPagesSite: [\"POST /repos/{owner}/{repo}/pages\"],\n    createRelease: [\"POST /repos/{owner}/{repo}/releases\"],\n    createRepoRuleset: [\"POST /repos/{owner}/{repo}/rulesets\"],\n    createUsingTemplate: [\n      \"POST /repos/{template_owner}/{template_repo}/generate\",\n    ],\n    createWebhook: [\"POST /repos/{owner}/{repo}/hooks\"],\n    customPropertiesForReposCreateOrUpdateRepositoryValues: [\n      \"PATCH /repos/{owner}/{repo}/properties/values\",\n    ],\n    customPropertiesForReposGetRepositoryValues: [\n      \"GET /repos/{owner}/{repo}/properties/values\",\n    ],\n    declineInvitation: [\n      \"DELETE /user/repository_invitations/{invitation_id}\",\n      {},\n      { renamed: [\"repos\", \"declineInvitationForAuthenticatedUser\"] },\n    ],\n    declineInvitationForAuthenticatedUser: [\n      \"DELETE /user/repository_invitations/{invitation_id}\",\n    ],\n    delete: [\"DELETE /repos/{owner}/{repo}\"],\n    deleteAccessRestrictions: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\",\n    ],\n    deleteAdminBranchProtection: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n    ],\n    deleteAnEnvironment: [\n      \"DELETE /repos/{owner}/{repo}/environments/{environment_name}\",\n    ],\n    deleteAutolink: [\"DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}\"],\n    deleteBranchProtection: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection\",\n    ],\n    deleteCommitComment: [\"DELETE /repos/{owner}/{repo}/comments/{comment_id}\"],\n    deleteCommitSignatureProtection: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n    ],\n    deleteDeployKey: [\"DELETE /repos/{owner}/{repo}/keys/{key_id}\"],\n    deleteDeployment: [\n      \"DELETE /repos/{owner}/{repo}/deployments/{deployment_id}\",\n    ],\n    deleteDeploymentBranchPolicy: [\n      \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n    ],\n    deleteFile: [\"DELETE /repos/{owner}/{repo}/contents/{path}\"],\n    deleteInvitation: [\n      \"DELETE /repos/{owner}/{repo}/invitations/{invitation_id}\",\n    ],\n    deleteOrgRuleset: [\"DELETE /orgs/{org}/rulesets/{ruleset_id}\"],\n    deletePagesSite: [\"DELETE /repos/{owner}/{repo}/pages\"],\n    deletePullRequestReviewProtection: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n    ],\n    deleteRelease: [\"DELETE /repos/{owner}/{repo}/releases/{release_id}\"],\n    deleteReleaseAsset: [\n      \"DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}\",\n    ],\n    deleteRepoRuleset: [\"DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n    deleteWebhook: [\"DELETE /repos/{owner}/{repo}/hooks/{hook_id}\"],\n    disableAutomatedSecurityFixes: [\n      \"DELETE /repos/{owner}/{repo}/automated-security-fixes\",\n    ],\n    disableDeploymentProtectionRule: [\n      \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\",\n    ],\n    disableImmutableReleases: [\n      \"DELETE /repos/{owner}/{repo}/immutable-releases\",\n    ],\n    disablePrivateVulnerabilityReporting: [\n      \"DELETE /repos/{owner}/{repo}/private-vulnerability-reporting\",\n    ],\n    disableVulnerabilityAlerts: [\n      \"DELETE /repos/{owner}/{repo}/vulnerability-alerts\",\n    ],\n    downloadArchive: [\n      \"GET /repos/{owner}/{repo}/zipball/{ref}\",\n      {},\n      { renamed: [\"repos\", \"downloadZipballArchive\"] },\n    ],\n    downloadTarballArchive: [\"GET /repos/{owner}/{repo}/tarball/{ref}\"],\n    downloadZipballArchive: [\"GET /repos/{owner}/{repo}/zipball/{ref}\"],\n    enableAutomatedSecurityFixes: [\n      \"PUT /repos/{owner}/{repo}/automated-security-fixes\",\n    ],\n    enableImmutableReleases: [\"PUT /repos/{owner}/{repo}/immutable-releases\"],\n    enablePrivateVulnerabilityReporting: [\n      \"PUT /repos/{owner}/{repo}/private-vulnerability-reporting\",\n    ],\n    enableVulnerabilityAlerts: [\n      \"PUT /repos/{owner}/{repo}/vulnerability-alerts\",\n    ],\n    generateReleaseNotes: [\n      \"POST /repos/{owner}/{repo}/releases/generate-notes\",\n    ],\n    get: [\"GET /repos/{owner}/{repo}\"],\n    getAccessRestrictions: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\",\n    ],\n    getAdminBranchProtection: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n    ],\n    getAllDeploymentProtectionRules: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\",\n    ],\n    getAllEnvironments: [\"GET /repos/{owner}/{repo}/environments\"],\n    getAllStatusCheckContexts: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n    ],\n    getAllTopics: [\"GET /repos/{owner}/{repo}/topics\"],\n    getAppsWithAccessToProtectedBranch: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n    ],\n    getAutolink: [\"GET /repos/{owner}/{repo}/autolinks/{autolink_id}\"],\n    getBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}\"],\n    getBranchProtection: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection\",\n    ],\n    getBranchRules: [\"GET /repos/{owner}/{repo}/rules/branches/{branch}\"],\n    getClones: [\"GET /repos/{owner}/{repo}/traffic/clones\"],\n    getCodeFrequencyStats: [\"GET /repos/{owner}/{repo}/stats/code_frequency\"],\n    getCollaboratorPermissionLevel: [\n      \"GET /repos/{owner}/{repo}/collaborators/{username}/permission\",\n    ],\n    getCombinedStatusForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/status\"],\n    getCommit: [\"GET /repos/{owner}/{repo}/commits/{ref}\"],\n    getCommitActivityStats: [\"GET /repos/{owner}/{repo}/stats/commit_activity\"],\n    getCommitComment: [\"GET /repos/{owner}/{repo}/comments/{comment_id}\"],\n    getCommitSignatureProtection: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n    ],\n    getCommunityProfileMetrics: [\"GET /repos/{owner}/{repo}/community/profile\"],\n    getContent: [\"GET /repos/{owner}/{repo}/contents/{path}\"],\n    getContributorsStats: [\"GET /repos/{owner}/{repo}/stats/contributors\"],\n    getCustomDeploymentProtectionRule: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\",\n    ],\n    getDeployKey: [\"GET /repos/{owner}/{repo}/keys/{key_id}\"],\n    getDeployment: [\"GET /repos/{owner}/{repo}/deployments/{deployment_id}\"],\n    getDeploymentBranchPolicy: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n    ],\n    getDeploymentStatus: [\n      \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}\",\n    ],\n    getEnvironment: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}\",\n    ],\n    getLatestPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/latest\"],\n    getLatestRelease: [\"GET /repos/{owner}/{repo}/releases/latest\"],\n    getOrgRuleSuite: [\"GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}\"],\n    getOrgRuleSuites: [\"GET /orgs/{org}/rulesets/rule-suites\"],\n    getOrgRuleset: [\"GET /orgs/{org}/rulesets/{ruleset_id}\"],\n    getOrgRulesets: [\"GET /orgs/{org}/rulesets\"],\n    getPages: [\"GET /repos/{owner}/{repo}/pages\"],\n    getPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/{build_id}\"],\n    getPagesDeployment: [\n      \"GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}\",\n    ],\n    getPagesHealthCheck: [\"GET /repos/{owner}/{repo}/pages/health\"],\n    getParticipationStats: [\"GET /repos/{owner}/{repo}/stats/participation\"],\n    getPullRequestReviewProtection: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n    ],\n    getPunchCardStats: [\"GET /repos/{owner}/{repo}/stats/punch_card\"],\n    getReadme: [\"GET /repos/{owner}/{repo}/readme\"],\n    getReadmeInDirectory: [\"GET /repos/{owner}/{repo}/readme/{dir}\"],\n    getRelease: [\"GET /repos/{owner}/{repo}/releases/{release_id}\"],\n    getReleaseAsset: [\"GET /repos/{owner}/{repo}/releases/assets/{asset_id}\"],\n    getReleaseByTag: [\"GET /repos/{owner}/{repo}/releases/tags/{tag}\"],\n    getRepoRuleSuite: [\n      \"GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}\",\n    ],\n    getRepoRuleSuites: [\"GET /repos/{owner}/{repo}/rulesets/rule-suites\"],\n    getRepoRuleset: [\"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n    getRepoRulesetHistory: [\n      \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history\",\n    ],\n    getRepoRulesetVersion: [\n      \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}\",\n    ],\n    getRepoRulesets: [\"GET /repos/{owner}/{repo}/rulesets\"],\n    getStatusChecksProtection: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n    ],\n    getTeamsWithAccessToProtectedBranch: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n    ],\n    getTopPaths: [\"GET /repos/{owner}/{repo}/traffic/popular/paths\"],\n    getTopReferrers: [\"GET /repos/{owner}/{repo}/traffic/popular/referrers\"],\n    getUsersWithAccessToProtectedBranch: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n    ],\n    getViews: [\"GET /repos/{owner}/{repo}/traffic/views\"],\n    getWebhook: [\"GET /repos/{owner}/{repo}/hooks/{hook_id}\"],\n    getWebhookConfigForRepo: [\n      \"GET /repos/{owner}/{repo}/hooks/{hook_id}/config\",\n    ],\n    getWebhookDelivery: [\n      \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}\",\n    ],\n    listActivities: [\"GET /repos/{owner}/{repo}/activity\"],\n    listAttestations: [\n      \"GET /repos/{owner}/{repo}/attestations/{subject_digest}\",\n    ],\n    listAutolinks: [\"GET /repos/{owner}/{repo}/autolinks\"],\n    listBranches: [\"GET /repos/{owner}/{repo}/branches\"],\n    listBranchesForHeadCommit: [\n      \"GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head\",\n    ],\n    listCollaborators: [\"GET /repos/{owner}/{repo}/collaborators\"],\n    listCommentsForCommit: [\n      \"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n    ],\n    listCommitCommentsForRepo: [\"GET /repos/{owner}/{repo}/comments\"],\n    listCommitStatusesForRef: [\n      \"GET /repos/{owner}/{repo}/commits/{ref}/statuses\",\n    ],\n    listCommits: [\"GET /repos/{owner}/{repo}/commits\"],\n    listContributors: [\"GET /repos/{owner}/{repo}/contributors\"],\n    listCustomDeploymentRuleIntegrations: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps\",\n    ],\n    listDeployKeys: [\"GET /repos/{owner}/{repo}/keys\"],\n    listDeploymentBranchPolicies: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n    ],\n    listDeploymentStatuses: [\n      \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n    ],\n    listDeployments: [\"GET /repos/{owner}/{repo}/deployments\"],\n    listForAuthenticatedUser: [\"GET /user/repos\"],\n    listForOrg: [\"GET /orgs/{org}/repos\"],\n    listForUser: [\"GET /users/{username}/repos\"],\n    listForks: [\"GET /repos/{owner}/{repo}/forks\"],\n    listInvitations: [\"GET /repos/{owner}/{repo}/invitations\"],\n    listInvitationsForAuthenticatedUser: [\"GET /user/repository_invitations\"],\n    listLanguages: [\"GET /repos/{owner}/{repo}/languages\"],\n    listPagesBuilds: [\"GET /repos/{owner}/{repo}/pages/builds\"],\n    listPublic: [\"GET /repositories\"],\n    listPullRequestsAssociatedWithCommit: [\n      \"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\",\n    ],\n    listReleaseAssets: [\n      \"GET /repos/{owner}/{repo}/releases/{release_id}/assets\",\n    ],\n    listReleases: [\"GET /repos/{owner}/{repo}/releases\"],\n    listTags: [\"GET /repos/{owner}/{repo}/tags\"],\n    listTeams: [\"GET /repos/{owner}/{repo}/teams\"],\n    listWebhookDeliveries: [\n      \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\",\n    ],\n    listWebhooks: [\"GET /repos/{owner}/{repo}/hooks\"],\n    merge: [\"POST /repos/{owner}/{repo}/merges\"],\n    mergeUpstream: [\"POST /repos/{owner}/{repo}/merge-upstream\"],\n    pingWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/pings\"],\n    redeliverWebhookDelivery: [\n      \"POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\",\n    ],\n    removeAppAccessRestrictions: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n      {},\n      { mapToData: \"apps\" },\n    ],\n    removeCollaborator: [\n      \"DELETE /repos/{owner}/{repo}/collaborators/{username}\",\n    ],\n    removeStatusCheckContexts: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n      {},\n      { mapToData: \"contexts\" },\n    ],\n    removeStatusCheckProtection: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n    ],\n    removeTeamAccessRestrictions: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n      {},\n      { mapToData: \"teams\" },\n    ],\n    removeUserAccessRestrictions: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n      {},\n      { mapToData: \"users\" },\n    ],\n    renameBranch: [\"POST /repos/{owner}/{repo}/branches/{branch}/rename\"],\n    replaceAllTopics: [\"PUT /repos/{owner}/{repo}/topics\"],\n    requestPagesBuild: [\"POST /repos/{owner}/{repo}/pages/builds\"],\n    setAdminBranchProtection: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n    ],\n    setAppAccessRestrictions: [\n      \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n      {},\n      { mapToData: \"apps\" },\n    ],\n    setStatusCheckContexts: [\n      \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n      {},\n      { mapToData: \"contexts\" },\n    ],\n    setTeamAccessRestrictions: [\n      \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n      {},\n      { mapToData: \"teams\" },\n    ],\n    setUserAccessRestrictions: [\n      \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n      {},\n      { mapToData: \"users\" },\n    ],\n    testPushWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/tests\"],\n    transfer: [\"POST /repos/{owner}/{repo}/transfer\"],\n    update: [\"PATCH /repos/{owner}/{repo}\"],\n    updateBranchProtection: [\n      \"PUT /repos/{owner}/{repo}/branches/{branch}/protection\",\n    ],\n    updateCommitComment: [\"PATCH /repos/{owner}/{repo}/comments/{comment_id}\"],\n    updateDeploymentBranchPolicy: [\n      \"PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n    ],\n    updateInformationAboutPagesSite: [\"PUT /repos/{owner}/{repo}/pages\"],\n    updateInvitation: [\n      \"PATCH /repos/{owner}/{repo}/invitations/{invitation_id}\",\n    ],\n    updateOrgRuleset: [\"PUT /orgs/{org}/rulesets/{ruleset_id}\"],\n    updatePullRequestReviewProtection: [\n      \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n    ],\n    updateRelease: [\"PATCH /repos/{owner}/{repo}/releases/{release_id}\"],\n    updateReleaseAsset: [\n      \"PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}\",\n    ],\n    updateRepoRuleset: [\"PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n    updateStatusCheckPotection: [\n      \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n      {},\n      { renamed: [\"repos\", \"updateStatusCheckProtection\"] },\n    ],\n    updateStatusCheckProtection: [\n      \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n    ],\n    updateWebhook: [\"PATCH /repos/{owner}/{repo}/hooks/{hook_id}\"],\n    updateWebhookConfigForRepo: [\n      \"PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config\",\n    ],\n    uploadReleaseAsset: [\n      \"POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}\",\n      { baseUrl: \"https://uploads.github.com\" },\n    ],\n  },\n  search: {\n    code: [\"GET /search/code\"],\n    commits: [\"GET /search/commits\"],\n    issuesAndPullRequests: [\"GET /search/issues\"],\n    labels: [\"GET /search/labels\"],\n    repos: [\"GET /search/repositories\"],\n    topics: [\"GET /search/topics\"],\n    users: [\"GET /search/users\"],\n  },\n  secretScanning: {\n    createPushProtectionBypass: [\n      \"POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses\",\n    ],\n    getAlert: [\n      \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\",\n    ],\n    getScanHistory: [\"GET /repos/{owner}/{repo}/secret-scanning/scan-history\"],\n    listAlertsForOrg: [\"GET /orgs/{org}/secret-scanning/alerts\"],\n    listAlertsForRepo: [\"GET /repos/{owner}/{repo}/secret-scanning/alerts\"],\n    listLocationsForAlert: [\n      \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\",\n    ],\n    listOrgPatternConfigs: [\n      \"GET /orgs/{org}/secret-scanning/pattern-configurations\",\n    ],\n    updateAlert: [\n      \"PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\",\n    ],\n    updateOrgPatternConfigs: [\n      \"PATCH /orgs/{org}/secret-scanning/pattern-configurations\",\n    ],\n  },\n  securityAdvisories: {\n    createFork: [\n      \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks\",\n    ],\n    createPrivateVulnerabilityReport: [\n      \"POST /repos/{owner}/{repo}/security-advisories/reports\",\n    ],\n    createRepositoryAdvisory: [\n      \"POST /repos/{owner}/{repo}/security-advisories\",\n    ],\n    createRepositoryAdvisoryCveRequest: [\n      \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve\",\n    ],\n    getGlobalAdvisory: [\"GET /advisories/{ghsa_id}\"],\n    getRepositoryAdvisory: [\n      \"GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}\",\n    ],\n    listGlobalAdvisories: [\"GET /advisories\"],\n    listOrgRepositoryAdvisories: [\"GET /orgs/{org}/security-advisories\"],\n    listRepositoryAdvisories: [\"GET /repos/{owner}/{repo}/security-advisories\"],\n    updateRepositoryAdvisory: [\n      \"PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}\",\n    ],\n  },\n  teams: {\n    addOrUpdateMembershipForUserInOrg: [\n      \"PUT /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n    ],\n    addOrUpdateRepoPermissionsInOrg: [\n      \"PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n    ],\n    checkPermissionsForRepoInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n    ],\n    create: [\"POST /orgs/{org}/teams\"],\n    createDiscussionCommentInOrg: [\n      \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\",\n    ],\n    createDiscussionInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions\"],\n    deleteDiscussionCommentInOrg: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\",\n    ],\n    deleteDiscussionInOrg: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\",\n    ],\n    deleteInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}\"],\n    getByName: [\"GET /orgs/{org}/teams/{team_slug}\"],\n    getDiscussionCommentInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\",\n    ],\n    getDiscussionInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\",\n    ],\n    getMembershipForUserInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n    ],\n    list: [\"GET /orgs/{org}/teams\"],\n    listChildInOrg: [\"GET /orgs/{org}/teams/{team_slug}/teams\"],\n    listDiscussionCommentsInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\",\n    ],\n    listDiscussionsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions\"],\n    listForAuthenticatedUser: [\"GET /user/teams\"],\n    listMembersInOrg: [\"GET /orgs/{org}/teams/{team_slug}/members\"],\n    listPendingInvitationsInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/invitations\",\n    ],\n    listReposInOrg: [\"GET /orgs/{org}/teams/{team_slug}/repos\"],\n    removeMembershipForUserInOrg: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n    ],\n    removeRepoInOrg: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n    ],\n    updateDiscussionCommentInOrg: [\n      \"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\",\n    ],\n    updateDiscussionInOrg: [\n      \"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\",\n    ],\n    updateInOrg: [\"PATCH /orgs/{org}/teams/{team_slug}\"],\n  },\n  users: {\n    addEmailForAuthenticated: [\n      \"POST /user/emails\",\n      {},\n      { renamed: [\"users\", \"addEmailForAuthenticatedUser\"] },\n    ],\n    addEmailForAuthenticatedUser: [\"POST /user/emails\"],\n    addSocialAccountForAuthenticatedUser: [\"POST /user/social_accounts\"],\n    block: [\"PUT /user/blocks/{username}\"],\n    checkBlocked: [\"GET /user/blocks/{username}\"],\n    checkFollowingForUser: [\"GET /users/{username}/following/{target_user}\"],\n    checkPersonIsFollowedByAuthenticated: [\"GET /user/following/{username}\"],\n    createGpgKeyForAuthenticated: [\n      \"POST /user/gpg_keys\",\n      {},\n      { renamed: [\"users\", \"createGpgKeyForAuthenticatedUser\"] },\n    ],\n    createGpgKeyForAuthenticatedUser: [\"POST /user/gpg_keys\"],\n    createPublicSshKeyForAuthenticated: [\n      \"POST /user/keys\",\n      {},\n      { renamed: [\"users\", \"createPublicSshKeyForAuthenticatedUser\"] },\n    ],\n    createPublicSshKeyForAuthenticatedUser: [\"POST /user/keys\"],\n    createSshSigningKeyForAuthenticatedUser: [\"POST /user/ssh_signing_keys\"],\n    deleteAttestationsBulk: [\n      \"POST /users/{username}/attestations/delete-request\",\n    ],\n    deleteAttestationsById: [\n      \"DELETE /users/{username}/attestations/{attestation_id}\",\n    ],\n    deleteAttestationsBySubjectDigest: [\n      \"DELETE /users/{username}/attestations/digest/{subject_digest}\",\n    ],\n    deleteEmailForAuthenticated: [\n      \"DELETE /user/emails\",\n      {},\n      { renamed: [\"users\", \"deleteEmailForAuthenticatedUser\"] },\n    ],\n    deleteEmailForAuthenticatedUser: [\"DELETE /user/emails\"],\n    deleteGpgKeyForAuthenticated: [\n      \"DELETE /user/gpg_keys/{gpg_key_id}\",\n      {},\n      { renamed: [\"users\", \"deleteGpgKeyForAuthenticatedUser\"] },\n    ],\n    deleteGpgKeyForAuthenticatedUser: [\"DELETE /user/gpg_keys/{gpg_key_id}\"],\n    deletePublicSshKeyForAuthenticated: [\n      \"DELETE /user/keys/{key_id}\",\n      {},\n      { renamed: [\"users\", \"deletePublicSshKeyForAuthenticatedUser\"] },\n    ],\n    deletePublicSshKeyForAuthenticatedUser: [\"DELETE /user/keys/{key_id}\"],\n    deleteSocialAccountForAuthenticatedUser: [\"DELETE /user/social_accounts\"],\n    deleteSshSigningKeyForAuthenticatedUser: [\n      \"DELETE /user/ssh_signing_keys/{ssh_signing_key_id}\",\n    ],\n    follow: [\"PUT /user/following/{username}\"],\n    getAuthenticated: [\"GET /user\"],\n    getById: [\"GET /user/{account_id}\"],\n    getByUsername: [\"GET /users/{username}\"],\n    getContextForUser: [\"GET /users/{username}/hovercard\"],\n    getGpgKeyForAuthenticated: [\n      \"GET /user/gpg_keys/{gpg_key_id}\",\n      {},\n      { renamed: [\"users\", \"getGpgKeyForAuthenticatedUser\"] },\n    ],\n    getGpgKeyForAuthenticatedUser: [\"GET /user/gpg_keys/{gpg_key_id}\"],\n    getPublicSshKeyForAuthenticated: [\n      \"GET /user/keys/{key_id}\",\n      {},\n      { renamed: [\"users\", \"getPublicSshKeyForAuthenticatedUser\"] },\n    ],\n    getPublicSshKeyForAuthenticatedUser: [\"GET /user/keys/{key_id}\"],\n    getSshSigningKeyForAuthenticatedUser: [\n      \"GET /user/ssh_signing_keys/{ssh_signing_key_id}\",\n    ],\n    list: [\"GET /users\"],\n    listAttestations: [\"GET /users/{username}/attestations/{subject_digest}\"],\n    listAttestationsBulk: [\n      \"POST /users/{username}/attestations/bulk-list{?per_page,before,after}\",\n    ],\n    listBlockedByAuthenticated: [\n      \"GET /user/blocks\",\n      {},\n      { renamed: [\"users\", \"listBlockedByAuthenticatedUser\"] },\n    ],\n    listBlockedByAuthenticatedUser: [\"GET /user/blocks\"],\n    listEmailsForAuthenticated: [\n      \"GET /user/emails\",\n      {},\n      { renamed: [\"users\", \"listEmailsForAuthenticatedUser\"] },\n    ],\n    listEmailsForAuthenticatedUser: [\"GET /user/emails\"],\n    listFollowedByAuthenticated: [\n      \"GET /user/following\",\n      {},\n      { renamed: [\"users\", \"listFollowedByAuthenticatedUser\"] },\n    ],\n    listFollowedByAuthenticatedUser: [\"GET /user/following\"],\n    listFollowersForAuthenticatedUser: [\"GET /user/followers\"],\n    listFollowersForUser: [\"GET /users/{username}/followers\"],\n    listFollowingForUser: [\"GET /users/{username}/following\"],\n    listGpgKeysForAuthenticated: [\n      \"GET /user/gpg_keys\",\n      {},\n      { renamed: [\"users\", \"listGpgKeysForAuthenticatedUser\"] },\n    ],\n    listGpgKeysForAuthenticatedUser: [\"GET /user/gpg_keys\"],\n    listGpgKeysForUser: [\"GET /users/{username}/gpg_keys\"],\n    listPublicEmailsForAuthenticated: [\n      \"GET /user/public_emails\",\n      {},\n      { renamed: [\"users\", \"listPublicEmailsForAuthenticatedUser\"] },\n    ],\n    listPublicEmailsForAuthenticatedUser: [\"GET /user/public_emails\"],\n    listPublicKeysForUser: [\"GET /users/{username}/keys\"],\n    listPublicSshKeysForAuthenticated: [\n      \"GET /user/keys\",\n      {},\n      { renamed: [\"users\", \"listPublicSshKeysForAuthenticatedUser\"] },\n    ],\n    listPublicSshKeysForAuthenticatedUser: [\"GET /user/keys\"],\n    listSocialAccountsForAuthenticatedUser: [\"GET /user/social_accounts\"],\n    listSocialAccountsForUser: [\"GET /users/{username}/social_accounts\"],\n    listSshSigningKeysForAuthenticatedUser: [\"GET /user/ssh_signing_keys\"],\n    listSshSigningKeysForUser: [\"GET /users/{username}/ssh_signing_keys\"],\n    setPrimaryEmailVisibilityForAuthenticated: [\n      \"PATCH /user/email/visibility\",\n      {},\n      { renamed: [\"users\", \"setPrimaryEmailVisibilityForAuthenticatedUser\"] },\n    ],\n    setPrimaryEmailVisibilityForAuthenticatedUser: [\n      \"PATCH /user/email/visibility\",\n    ],\n    unblock: [\"DELETE /user/blocks/{username}\"],\n    unfollow: [\"DELETE /user/following/{username}\"],\n    updateAuthenticated: [\"PATCH /user\"],\n  },\n};\n\nexport default Endpoints;\n", "import type { Octokit } from \"@octokit/core\";\nimport type { EndpointOptions, RequestParameters, Route } from \"@octokit/types\";\nimport ENDPOINTS from \"./generated/endpoints.js\";\nimport type { RestEndpointMethods } from \"./generated/method-types.js\";\nimport type { EndpointDecorations } from \"./types.js\";\n\n// The following code was refactored in: https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/622\n// to optimise the runtime performance of Octokit initialization.\n//\n// This optimization involves two key changes:\n// 1. Pre-Computation: The endpoint methods are pre-computed once at module load\n//    time instead of each invocation of `endpointsToMethods()`.\n// 2. Lazy initialization and caching: We use a Proxy for each scope to only\n//    initialize methods that are actually called. This reduces runtime overhead\n//    as the initialization involves deep merging of objects. The initialized\n//    methods are then cached for future use.\n\nconst endpointMethodsMap = new Map();\nfor (const [scope, endpoints] of Object.entries(ENDPOINTS)) {\n  for (const [methodName, endpoint] of Object.entries(endpoints)) {\n    const [route, defaults, decorations] = endpoint;\n    const [method, url] = route.split(/ /);\n    const endpointDefaults = Object.assign(\n      {\n        method,\n        url,\n      },\n      defaults,\n    );\n\n    if (!endpointMethodsMap.has(scope)) {\n      endpointMethodsMap.set(scope, new Map());\n    }\n\n    endpointMethodsMap.get(scope).set(methodName, {\n      scope,\n      methodName,\n      endpointDefaults,\n      decorations,\n    });\n  }\n}\n\ntype ProxyTarget = {\n  octokit: Octokit;\n  scope: string;\n  cache: Record<string, (...args: any[]) => any>;\n};\n\nconst handler = {\n  has({ scope }: ProxyTarget, methodName: string) {\n    return endpointMethodsMap.get(scope).has(methodName);\n  },\n  getOwnPropertyDescriptor(target: ProxyTarget, methodName: string) {\n    return {\n      value: this.get(target, methodName), // ensures method is in the cache\n      configurable: true,\n      writable: true,\n      enumerable: true,\n    };\n  },\n  defineProperty(\n    target: ProxyTarget,\n    methodName: string,\n    descriptor: PropertyDescriptor,\n  ) {\n    Object.defineProperty(target.cache, methodName, descriptor);\n    return true;\n  },\n  deleteProperty(target: ProxyTarget, methodName: string) {\n    delete target.cache[methodName];\n    return true;\n  },\n  ownKeys({ scope }: ProxyTarget) {\n    return [...endpointMethodsMap.get(scope).keys()];\n  },\n  set(target: ProxyTarget, methodName: string, value: any) {\n    return (target.cache[methodName] = value);\n  },\n  get({ octokit, scope, cache }: ProxyTarget, methodName: string) {\n    if (cache[methodName]) {\n      return cache[methodName];\n    }\n\n    const method = endpointMethodsMap.get(scope).get(methodName);\n    if (!method) {\n      return undefined;\n    }\n\n    const { endpointDefaults, decorations } = method;\n\n    if (decorations) {\n      cache[methodName] = decorate(\n        octokit,\n        scope,\n        methodName,\n        endpointDefaults,\n        decorations,\n      );\n    } else {\n      cache[methodName] = octokit.request.defaults(endpointDefaults);\n    }\n\n    return cache[methodName];\n  },\n};\n\nexport function endpointsToMethods(octokit: Octokit): RestEndpointMethods {\n  const newMethods = {} as { [key: string]: object };\n\n  for (const scope of endpointMethodsMap.keys()) {\n    newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler);\n  }\n\n  return newMethods as RestEndpointMethods;\n}\n\nfunction decorate(\n  octokit: Octokit,\n  scope: string,\n  methodName: string,\n  defaults: EndpointOptions,\n  decorations: EndpointDecorations,\n) {\n  const requestWithDefaults = octokit.request.defaults(defaults);\n\n  /* istanbul ignore next */\n  function withDecorations(\n    ...args: [Route, RequestParameters?] | [EndpointOptions]\n  ) {\n    // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n    let options = requestWithDefaults.endpoint.merge(...args);\n\n    // There are currently no other decorations than `.mapToData`\n    if (decorations.mapToData) {\n      options = Object.assign({}, options, {\n        data: options[decorations.mapToData],\n        [decorations.mapToData]: undefined,\n      });\n      return requestWithDefaults(options);\n    }\n\n    if (decorations.renamed) {\n      const [newScope, newMethodName] = decorations.renamed;\n      octokit.log.warn(\n        `octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`,\n      );\n    }\n    if (decorations.deprecated) {\n      octokit.log.warn(decorations.deprecated);\n    }\n\n    if (decorations.renamedParameters) {\n      // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n      const options = requestWithDefaults.endpoint.merge(...args);\n\n      for (const [name, alias] of Object.entries(\n        decorations.renamedParameters,\n      )) {\n        if (name in options) {\n          octokit.log.warn(\n            `\"${name}\" parameter is deprecated for \"octokit.${scope}.${methodName}()\". Use \"${alias}\" instead`,\n          );\n          if (!(alias in options)) {\n            options[alias] = options[name];\n          }\n          delete options[name];\n        }\n      }\n      return requestWithDefaults(options);\n    }\n\n    // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n    return requestWithDefaults(...args);\n  }\n  return Object.assign(withDecorations, requestWithDefaults);\n}\n", "import type { Octokit } from \"@octokit/core\";\n\nexport type { RestEndpointMethodTypes } from \"./generated/parameters-and-response-types.js\";\nimport { VERSION } from \"./version.js\";\nimport type { Api } from \"./types.js\";\nimport { endpointsToMethods } from \"./endpoints-to-methods.js\";\n\n// Export the type for downstream users in order to fix a TypeScript error\n// The inferred type of 'Octokit' cannot be named without a reference to '../node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/types.js'. This is likely not portable. A type annotation is necessary.\nexport type { Api };\n\nexport function restEndpointMethods(octokit: Octokit): Api {\n  const api = endpointsToMethods(octokit);\n  return {\n    rest: api,\n  };\n}\nrestEndpointMethods.VERSION = VERSION;\n\nexport function legacyRestEndpointMethods(octokit: Octokit): Api[\"rest\"] & Api {\n  const api = endpointsToMethods(octokit);\n  return {\n    ...api,\n    rest: api,\n  };\n}\nlegacyRestEndpointMethods.VERSION = VERSION;\n", "const VERSION = \"22.0.1\";\nexport {\n  VERSION\n};\n", "import { Octokit as Core } from \"@octokit/core\";\nimport { requestLog } from \"@octokit/plugin-request-log\";\nimport {\n  paginateRest\n} from \"@octokit/plugin-paginate-rest\";\nimport { legacyRestEndpointMethods } from \"@octokit/plugin-rest-endpoint-methods\";\nimport { VERSION } from \"./version.js\";\nconst Octokit = Core.plugin(requestLog, legacyRestEndpointMethods, paginateRest).defaults(\n  {\n    userAgent: `octokit-rest.js/${VERSION}`\n  }\n);\nexport {\n  Octokit\n};\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n//import { GitCreateBlobResponse, GitCreateTreeParamsTree } from '@octokit/git';\r\n\r\nimport { Octokit } from \"@octokit/rest\";\r\nimport GitCreateBlobResponse from \"./GitCreateBlobResponse\";\r\nimport GitCreateTreeParamsTree from \"./GitCreateTreeParamsTree\";\r\nimport { Endpoints } from \"@octokit/types\";\r\nimport DifferenceSet from \"../storage/DifferenceSet\";\r\nimport { FileDifferenceType } from \"../storage/IFileDifference\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { constants } from \"../core/Constants\";\r\n\r\ntype GitHubReposResponse = Endpoints[\"GET /user/repos\"][\"response\"];\r\ntype GitHubUserResponse = Endpoints[\"GET /user\"][\"response\"];\r\n\r\nexport default class GitHubManager {\r\n  private _octokit: Octokit;\r\n  private _isUserStateLoaded: boolean = false;\r\n\r\n  private _reposResponse?: GitHubReposResponse;\r\n  private _userResponse?: GitHubUserResponse;\r\n\r\n  public get repos() {\r\n    if (this._reposResponse === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._reposResponse.data;\r\n  }\r\n\r\n  public get authenticatedUser() {\r\n    if (this._userResponse === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._userResponse.data;\r\n  }\r\n\r\n  public get octokit() {\r\n    return this._octokit;\r\n  }\r\n\r\n  constructor() {\r\n    this._octokit = new Octokit({\r\n      userAgent: constants.name + \" \" + constants.version,\r\n    });\r\n  }\r\n\r\n  async ensureUserStateLoaded() {\r\n    if (this._isUserStateLoaded) {\r\n      return;\r\n    }\r\n\r\n    const userResponse = await this._octokit.rest.users.getAuthenticated();\r\n    this._userResponse = userResponse;\r\n\r\n    const response = await this._octokit.rest.repos.listForAuthenticatedUser();\r\n    this._reposResponse = response;\r\n\r\n    this._isUserStateLoaded = true;\r\n  }\r\n\r\n  async createRepo(name: string, description: string) {\r\n    const result = await this._octokit.repos.createForAuthenticatedUser({\r\n      name: name,\r\n      description: description,\r\n      auto_init: true,\r\n    });\r\n\r\n    return result.data;\r\n  }\r\n\r\n  async commitToRepo(\r\n    owner: string,\r\n    repo: string,\r\n    branch: string = \"main\",\r\n    folderName: string = \"\",\r\n    commitMessage: string,\r\n    differences: DifferenceSet\r\n  ) {\r\n    // gets commit's AND its tree's SHA\r\n    const currentCommit = await this.getCurrentCommit(owner, repo, branch);\r\n\r\n    const filesBlobs: GitCreateBlobResponse[] = [];\r\n    const pathsForBlobs: string[] = [];\r\n\r\n    for (let i = 0; i < differences.fileDifferences.length; i++) {\r\n      const diff = differences.fileDifferences[i];\r\n\r\n      if (\r\n        (diff.type === FileDifferenceType.contentsDifferent || diff.type === FileDifferenceType.fileAdded) &&\r\n        diff.updated !== undefined\r\n      ) {\r\n        const updatedFile = diff.updated;\r\n\r\n        if (!updatedFile.isContentLoaded) {\r\n          await updatedFile.loadContent();\r\n        }\r\n\r\n        if (updatedFile.content !== null) {\r\n          let targetPath = diff.path;\r\n\r\n          targetPath = folderName + targetPath;\r\n\r\n          if (targetPath.startsWith(\"/\")) {\r\n            targetPath = targetPath.substring(1, targetPath.length);\r\n          }\r\n\r\n          const file = await this.createBlobForFile(owner, repo, updatedFile.content);\r\n\r\n          filesBlobs.push(file);\r\n          pathsForBlobs.push(targetPath);\r\n        }\r\n      }\r\n    }\r\n\r\n    const newTree = await this.createNewTree(owner, repo, filesBlobs, pathsForBlobs, currentCommit.treeSha);\r\n\r\n    const newCommit = await this.createNewCommit(owner, repo, commitMessage, newTree.sha, currentCommit.commitSha);\r\n\r\n    this.setBranchToCommit(owner, repo, branch, newCommit.sha);\r\n  }\r\n\r\n  async createBlobForFile(owner: string, repo: string, content: Uint8Array | string) {\r\n    let encoding = \"utf-8\";\r\n\r\n    if (content instanceof Uint8Array) {\r\n      content = Utilities.uint8ArrayToBase64(content);\r\n      encoding = \"base64\";\r\n    }\r\n\r\n    const blobData = await this._octokit.git.createBlob({\r\n      owner: owner,\r\n      repo,\r\n      content,\r\n      encoding: encoding,\r\n    });\r\n\r\n    return blobData.data as GitCreateBlobResponse;\r\n  }\r\n\r\n  async getCurrentCommit(owner: string, repo: string, branch: string = \"main\") {\r\n    const { data: refData } = await this._octokit.git.getRef({\r\n      owner: owner,\r\n      repo,\r\n      ref: \"heads/\" + branch,\r\n    });\r\n\r\n    const commitSha = refData.object.sha;\r\n\r\n    const { data: commitData } = await this._octokit.git.getCommit({\r\n      owner: owner,\r\n      repo,\r\n      commit_sha: commitSha,\r\n    });\r\n\r\n    return {\r\n      commitSha,\r\n      treeSha: commitData.tree.sha,\r\n    };\r\n  }\r\n\r\n  async createNewTree(\r\n    owner: string,\r\n    repo: string,\r\n    blobs: GitCreateBlobResponse[],\r\n    paths: string[],\r\n    parentTreeSha: string\r\n  ) {\r\n    // My custom config. Could be taken as parameters\r\n    const tree = blobs.map(({ sha }, index) => ({\r\n      path: paths[index],\r\n      mode: `100644`,\r\n      type: `blob`,\r\n      sha,\r\n    })) as GitCreateTreeParamsTree[];\r\n\r\n    const { data } = await this._octokit.git.createTree({\r\n      owner,\r\n      repo,\r\n      tree,\r\n      base_tree: parentTreeSha,\r\n    });\r\n\r\n    return data;\r\n  }\r\n\r\n  async createNewCommit(\r\n    owner: string,\r\n    repo: string,\r\n    message: string,\r\n    currentTreeSha: string,\r\n    currentCommitSha: string\r\n  ) {\r\n    const result = await this._octokit.git.createCommit({\r\n      owner: owner,\r\n      repo,\r\n      message,\r\n      tree: currentTreeSha,\r\n      parents: [currentCommitSha],\r\n    });\r\n\r\n    return result.data;\r\n  }\r\n\r\n  setBranchToCommit(owner: string, repo: string, branch: string = `main`, commitSha: string) {\r\n    this._octokit.git.updateRef({\r\n      owner: owner,\r\n      repo,\r\n      ref: `heads/${branch}`,\r\n      sha: commitSha,\r\n    });\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport enum CommandArgumentType {\r\n  coordinate,\r\n  unknown,\r\n}\r\n\r\nexport enum CoordinateLocation {\r\n  x,\r\n  y,\r\n  z,\r\n}\r\n\r\nexport enum CoordinateType {\r\n  absolute,\r\n  relativeTilde,\r\n  localCaret,\r\n}\r\n\r\nexport default class CommandArgument {\r\n  _content: string;\r\n\r\n  _type: CommandArgumentType;\r\n  _location?: CoordinateLocation;\r\n  _coordinateType?: CoordinateType;\r\n  _pos?: number;\r\n\r\n  public get value() {\r\n    if (this._type === CommandArgumentType.coordinate && this._pos !== undefined) {\r\n      let result = this._pos.toString();\r\n\r\n      if (this._coordinateType === CoordinateType.localCaret) {\r\n        result = \"^\" + result;\r\n      } else if (this._coordinateType === CoordinateType.relativeTilde) {\r\n        result = \"~\" + result;\r\n      }\r\n\r\n      return result;\r\n    }\r\n\r\n    return this._content;\r\n  }\r\n\r\n  public get position() {\r\n    if (this._pos === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this._pos;\r\n  }\r\n\r\n  public set position(value: number) {\r\n    this._pos = value;\r\n  }\r\n\r\n  public get coordinateType() {\r\n    if (this._coordinateType === undefined) {\r\n      return CoordinateType.absolute;\r\n    }\r\n\r\n    return this._coordinateType;\r\n  }\r\n\r\n  public set coordinateType(type: CoordinateType) {\r\n    this._coordinateType = type;\r\n  }\r\n\r\n  public get type() {\r\n    return this._type;\r\n  }\r\n\r\n  public get location() {\r\n    return this._location;\r\n  }\r\n\r\n  public set location(newLocation: CoordinateLocation | undefined) {\r\n    this._location = newLocation;\r\n  }\r\n\r\n  public constructor(content: string) {\r\n    this._content = content;\r\n    this._type = CommandArgumentType.unknown;\r\n\r\n    this.setValue(content);\r\n  }\r\n\r\n  private setValue(content: string) {\r\n    this._content = content;\r\n\r\n    const startsWithCaret = this._content.startsWith(\"^\");\r\n    const startsWithTilde = this._content.startsWith(\"~\");\r\n\r\n    if (startsWithCaret || startsWithTilde) {\r\n      const substr = this._content.substring(1, this._content.length);\r\n\r\n      if (Utilities.isNumeric(substr)) {\r\n        this._type = CommandArgumentType.coordinate;\r\n\r\n        if (startsWithTilde) {\r\n          this._coordinateType = CoordinateType.relativeTilde;\r\n        } else if (startsWithCaret) {\r\n          this._coordinateType = CoordinateType.localCaret;\r\n        }\r\n\r\n        this._pos = parseInt(substr);\r\n      } else {\r\n        this._type = CommandArgumentType.unknown;\r\n      }\r\n    } else if (Utilities.isNumeric(this._content)) {\r\n      this._type = CommandArgumentType.coordinate;\r\n      this._coordinateType = CoordinateType.absolute;\r\n      this._pos = parseInt(content);\r\n    } else {\r\n      this._type = CommandArgumentType.unknown;\r\n    }\r\n  }\r\n\r\n  public toString() {\r\n    return this.value;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CommandArgument, { CoordinateLocation, CommandArgumentType, CoordinateType } from \"./CommandArgument\";\r\n\r\nexport default class Command {\r\n  _commandName: string;\r\n  _arguments: CommandArgument[];\r\n\r\n  constructor(commandText: string) {\r\n    const firstSpace = commandText.indexOf(\" \");\r\n\r\n    this._arguments = [];\r\n\r\n    let _coordinatePos = -1;\r\n\r\n    if (firstSpace < 0) {\r\n      this._commandName = commandText;\r\n    } else {\r\n      this._commandName = commandText.substring(0, firstSpace);\r\n\r\n      const args = commandText.substring(firstSpace + 1, commandText.length).split(\" \");\r\n\r\n      for (let i = 0; i < args.length; i++) {\r\n        const cmdArg = new CommandArgument(args[i]);\r\n\r\n        if (cmdArg.type === CommandArgumentType.coordinate) {\r\n          _coordinatePos++;\r\n\r\n          if (_coordinatePos >= 3) {\r\n            _coordinatePos = 0;\r\n          }\r\n\r\n          if (_coordinatePos === 0) {\r\n            cmdArg.location = CoordinateLocation.x;\r\n          } else if (_coordinatePos === 1) {\r\n            cmdArg.location = CoordinateLocation.y;\r\n          } else if (_coordinatePos === 2) {\r\n            cmdArg.location = CoordinateLocation.z;\r\n          }\r\n        } else {\r\n          _coordinatePos = -1;\r\n        }\r\n\r\n        this._arguments.push(cmdArg);\r\n      }\r\n    }\r\n\r\n    if (this._commandName.startsWith(\"/\")) {\r\n      this._commandName = this._commandName.substring(1, this._commandName.length);\r\n    }\r\n  }\r\n\r\n  absolutizeCoordinates(absoluteX: number, absoluteY: number, absoluteZ: number) {\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      const arg = this._arguments[i];\r\n\r\n      if (arg.type === CommandArgumentType.coordinate) {\r\n        if (arg.coordinateType === CoordinateType.relativeTilde) {\r\n          if (arg.location === CoordinateLocation.x) {\r\n            arg.coordinateType = CoordinateType.absolute;\r\n            arg.position = absoluteX + arg.position;\r\n          } else if (arg.location === CoordinateLocation.y) {\r\n            arg.coordinateType = CoordinateType.absolute;\r\n            arg.position = absoluteY + arg.position;\r\n          } else if (arg.location === CoordinateLocation.z) {\r\n            arg.coordinateType = CoordinateType.absolute;\r\n            arg.position = absoluteZ + arg.position;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  get hasRelativeOrLocalCoordinates() {\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      const arg = this._arguments[i];\r\n\r\n      if (arg.type === CommandArgumentType.coordinate && arg.coordinateType !== CoordinateType.absolute) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  get firstX() {\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      const arg = this._arguments[i];\r\n\r\n      if (arg.type === CommandArgumentType.coordinate && arg.location === CoordinateLocation.x) {\r\n        return arg;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get firstY() {\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      const arg = this._arguments[i];\r\n\r\n      if (arg.type === CommandArgumentType.coordinate && arg.location === CoordinateLocation.y) {\r\n        return arg;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get firstZ() {\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      const arg = this._arguments[i];\r\n\r\n      if (arg.type === CommandArgumentType.coordinate && arg.location === CoordinateLocation.z) {\r\n        return arg;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  toString() {\r\n    let commandResult = this._commandName;\r\n\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      commandResult += \" \";\r\n\r\n      commandResult += this._arguments[i].toString();\r\n    }\r\n\r\n    return commandResult;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Command from \"../minecraft/Command\";\r\nimport { ICommandResponseBody } from \"../minecraft/ICommandResponse\";\r\nimport CreatorTools, { CreatorToolsMinecraftState } from \"./CreatorTools\";\r\nimport { ICustomToolResultItem } from \"./ICustomTool\";\r\n\r\nexport default class CommandRunner {\r\n  static async runCustomTool(creatorTools: CreatorTools, commandNumber: number) {\r\n    if (creatorTools.activeMinecraftState !== CreatorToolsMinecraftState.started) {\r\n      Log.debug(\"Cannot run command \" + commandNumber + \"; not connected to Minecraft.\");\r\n      return;\r\n    }\r\n\r\n    const cartoCommand = creatorTools.getCustomTool(commandNumber - 1);\r\n    let commandName = commandNumber + \"\";\r\n\r\n    if (cartoCommand.name !== undefined && cartoCommand.name.length > 0) {\r\n      commandName = cartoCommand.name;\r\n    }\r\n\r\n    const operId = await creatorTools.notifyOperationStarted(\"Running command \" + commandName);\r\n\r\n    if (cartoCommand.text !== undefined) {\r\n      await CommandRunner.runCommandText(creatorTools, cartoCommand.text);\r\n    } else {\r\n      // alert(\"This command is not defined, yet.\");\r\n    }\r\n\r\n    await creatorTools.notifyOperationEnded(operId, \"Command \" + commandName + \" complete.\");\r\n  }\r\n\r\n  static async runCommandText(creatorTools: CreatorTools, commandText: string) {\r\n    const commandItems = commandText.split(\"\\n\");\r\n\r\n    await this.runCommandList(creatorTools, commandItems);\r\n  }\r\n\r\n  static async runCommandList(creatorTools: CreatorTools, commandItems: string[]) {\r\n    const resultItems = [];\r\n\r\n    let lastStoredBlockX = -1;\r\n    let lastStoredBlockY = -1;\r\n    let lastStoredBlockZ = -1;\r\n\r\n    let firstRelativeX: number | undefined;\r\n    let firstRelativeY: number | undefined;\r\n    let firstRelativeZ: number | undefined;\r\n\r\n    let setFirstPosition = false;\r\n\r\n    for (let i = 0; i < commandItems.length; i++) {\r\n      let commandText = commandItems[i].trim();\r\n\r\n      if (commandText.length > 4 && !commandText.startsWith(\"#\")) {\r\n        if (!commandText.startsWith(\"/\")) {\r\n          commandText = \"/\" + commandText;\r\n        }\r\n\r\n        const commandStart = new Date();\r\n\r\n        const command = new Command(commandText);\r\n\r\n        // fix up a command to use absolute positions based on the position of our first command.\r\n        if (\r\n          command.hasRelativeOrLocalCoordinates &&\r\n          setFirstPosition &&\r\n          firstRelativeX !== undefined &&\r\n          firstRelativeY !== undefined &&\r\n          firstRelativeZ !== undefined\r\n        ) {\r\n          command.absolutizeCoordinates(\r\n            lastStoredBlockX - firstRelativeX,\r\n            lastStoredBlockY - firstRelativeY,\r\n            lastStoredBlockZ - firstRelativeZ\r\n          );\r\n        }\r\n\r\n        commandText = command.toString();\r\n\r\n        await creatorTools.notifyStatusUpdate(\"Running command '\" + commandText + \"'\");\r\n\r\n        const commandResult = await creatorTools.runCommand(commandText);\r\n        const result = commandResult?.data;\r\n\r\n        let resultData: ICommandResponseBody | undefined;\r\n\r\n        if (result !== undefined && result !== null && result.indexOf(\"{\") >= 0) {\r\n          try {\r\n            resultData = Utilities.parseJson(result) as ICommandResponseBody | undefined;\r\n          } catch (e) {\r\n            Log.debug(\"Failed to parse command result: \" + e);\r\n          }\r\n\r\n          if (resultData !== undefined) {\r\n            // store a position so that we can absolutize future commands\r\n            if (resultData.position !== undefined && !setFirstPosition) {\r\n              lastStoredBlockX = resultData.position.x;\r\n              lastStoredBlockY = resultData.position.y;\r\n              lastStoredBlockZ = resultData.position.z;\r\n\r\n              const argX = command.firstX;\r\n              if (argX !== undefined) {\r\n                firstRelativeX = argX.position;\r\n              }\r\n\r\n              const argY = command.firstY;\r\n              if (argY !== undefined) {\r\n                firstRelativeY = argY.position;\r\n              }\r\n\r\n              const argZ = command.firstZ;\r\n              if (argZ !== undefined) {\r\n                firstRelativeZ = argZ.position;\r\n              }\r\n\r\n              setFirstPosition = true;\r\n            }\r\n          }\r\n        }\r\n\r\n        const resultItem: ICustomToolResultItem = {\r\n          lineNumber: i,\r\n          dateTime: commandStart,\r\n          response: resultData,\r\n        };\r\n\r\n        resultItems.push(resultItem);\r\n      }\r\n    }\r\n\r\n    return resultItems;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { RemoteServerAccessLevel } from \"./ICreatorToolsData\";\r\n\r\nexport enum AuthenticationResult {\r\n  pending = 0,\r\n  success = 1,\r\n  failed = 2,\r\n  error = 3,\r\n}\r\n\r\nexport interface CreatorToolsServerAuthenticationResult {\r\n  token: string;\r\n  iv: string;\r\n  authTag?: string; // GCM authentication tag\r\n  permissionLevel: RemoteServerAccessLevel;\r\n  serverStatus: CreatorToolsServerStatus[];\r\n  /** Whether the Minecraft EULA has been accepted (required for BDS features) */\r\n  eulaAccepted?: boolean;\r\n}\r\n\r\n/**\r\n * Configuration for a server slot, returned once at connection time.\r\n * Contains settings that don't change frequently and shouldn't be\r\n * sent in every status update.\r\n */\r\nexport interface ISlotConfig {\r\n  /** Whether the script debugger is enabled on the server (listening on port) */\r\n  debuggerEnabled: boolean;\r\n  /** Whether debug stats streaming is enabled (server connects and streams to web console) */\r\n  debuggerStreamingEnabled: boolean;\r\n  /** Server version string */\r\n  serverVersion?: string;\r\n  /** Debug session connection state: 'disconnected', 'connecting', 'connected', 'error' */\r\n  debugConnectionState?: string;\r\n  /** Debug protocol version if connected */\r\n  debugProtocolVersion?: number;\r\n  /** Last debug stat tick received */\r\n  debugLastStatTick?: number;\r\n  /** Debug connection error message if any */\r\n  debugErrorMessage?: string;\r\n}\r\n\r\nexport interface CreatorToolsServerStatus {\r\n  id: number;\r\n  recentMessages?: { message: string; received: number }[];\r\n  status?: DedicatedServerStatus;\r\n  time: number;\r\n  /** Slot configuration - included in initial connection, may be omitted in subsequent updates */\r\n  slotConfig?: ISlotConfig;\r\n  /** World ID currently associated with this slot */\r\n  worldId?: string;\r\n}\r\n\r\nexport enum DedicatedServerStatus {\r\n  stopped = 1,\r\n  deploying = 2,\r\n  launching = 3,\r\n  starting = 4,\r\n  started = 5,\r\n}\r\n\r\nexport default class CreatorToolsAuthentication {\r\n  result: AuthenticationResult;\r\n  permissionLevel: RemoteServerAccessLevel;\r\n\r\n  constructor(result: AuthenticationResult, permissionLevel: RemoteServerAccessLevel) {\r\n    this.result = result;\r\n    this.permissionLevel = permissionLevel;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { CreatorToolsMinecraftErrorStatus, CreatorToolsMinecraftState } from \"./CreatorTools\";\r\nimport { IEvent } from \"ste-events\";\r\nimport Project from \"./Project\";\r\nimport MinecraftPush from \"./MinecraftPush\";\r\nimport GameStateManager from \"../minecraft/GameStateManager\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport { ISlotConfig } from \"./CreatorToolsAuthentication\";\r\n\r\nexport interface IMinecraftMessage {\r\n  message: string;\r\n  received: number;\r\n}\r\n\r\nexport enum PrepareAndStartResultType {\r\n  error = 0,\r\n  started = 1,\r\n}\r\n\r\nexport interface IPrepareAndStartResult {\r\n  worldName?: string;\r\n  type: PrepareAndStartResultType;\r\n  errorMessage?: string;\r\n}\r\n\r\nexport default interface IMinecraft {\r\n  state: CreatorToolsMinecraftState;\r\n  activeProject: Project | undefined;\r\n\r\n  canDeployFiles: boolean;\r\n\r\n  errorStatus?: CreatorToolsMinecraftErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  /**\r\n   * Configuration metadata for the slot, received once at connection time.\r\n   * Contains flags like debuggerEnabled and debuggerStreamingEnabled that\r\n   * inform the UI about what features are available.\r\n   */\r\n  slotConfig?: ISlotConfig;\r\n\r\n  gameStateManager: GameStateManager | undefined;\r\n\r\n  runCommand(command: string): Promise<string | undefined>;\r\n  runActionSet(actionSet: IActionSetData): Promise<string | undefined>;\r\n\r\n  worldFolder: IFolder | undefined;\r\n  projectFolder: IFolder | undefined;\r\n\r\n  /**\r\n   * Storage representing the world content of the active Minecraft server.\r\n   * This includes the world folder, behavior packs, and resource packs.\r\n   * For remote connections, this is backed by HttpStorage pointing to /api/worldContent/{slot}/.\r\n   */\r\n  worldContentStorage: IStorage | undefined;\r\n\r\n  /**\r\n   * A Project wrapper around the worldContentStorage.\r\n   * Created lazily when first accessed. Provides structured access to the\r\n   * world content including behavior packs, resource packs, and world data.\r\n   */\r\n  worldProject: Project | undefined;\r\n\r\n  onRefreshed: IEvent<IMinecraft, CreatorToolsMinecraftState>;\r\n  onStateChanged: IEvent<IMinecraft, CreatorToolsMinecraftState>;\r\n  onWorldFolderReady: IEvent<IMinecraft, IFolder>;\r\n  onProjectFolderReady: IEvent<IMinecraft, IFolder>;\r\n  onMessage: IEvent<IMinecraft, IMinecraftMessage>;\r\n\r\n  canPrepare(): boolean;\r\n\r\n  prepare(force?: boolean): void;\r\n  prepareAndStart(push: MinecraftPush): Promise<IPrepareAndStartResult>;\r\n\r\n  initialize(): Promise<void>;\r\n\r\n  stop(): Promise<void>;\r\n  syncWithDeployment(): Promise<void>;\r\n\r\n  updateStatus(): Promise<CreatorToolsMinecraftState>;\r\n\r\n  processExternalMessage(command: string, data: string): void;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CreatorTools from \"../app/CreatorTools\";\r\nimport IPlayerTravelledEvent from \"./IPlayerTravelledEvent\";\r\nimport Location from \"./Location\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IItemInteractedEvent from \"./IItemInteractedEvent\";\r\nimport IBlockBrokenEvent from \"./IBlockBrokenEvent\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class GameStateManager {\r\n  _playerLocation: Location | undefined;\r\n  _playerLocationHistory: Location[] = [];\r\n  _playerLocationHistoryTimes: Date[] = [];\r\n\r\n  _itemInteractedLocationHistory: Location[] = [];\r\n  _itemInteractedLocationHistoryTimes: Date[] = [];\r\n\r\n  _playerMajorLocationHistory: Location[] = [];\r\n  _playerMajorLocationHistoryTimes: Date[] = [];\r\n  curTick = 0;\r\n  pendingLocationChangeProcess = -1;\r\n  _lastPlayerTravelledMessage: IPlayerTravelledEvent | undefined;\r\n\r\n  _eventsSeen: { [name: string]: boolean } = {};\r\n\r\n  private _onPlayerTravelled = new EventDispatcher<GameStateManager, IPlayerTravelledEvent>();\r\n  private _onItemInteracted = new EventDispatcher<GameStateManager, IItemInteractedEvent>();\r\n  private _onBlockBroken = new EventDispatcher<GameStateManager, IBlockBrokenEvent>();\r\n  private _onPlayerMajorTravelled = new EventDispatcher<GameStateManager, IPlayerTravelledEvent>();\r\n\r\n  public get playerMajorLocationHistory() {\r\n    return this._playerMajorLocationHistory;\r\n  }\r\n\r\n  public get playerLocationHistory() {\r\n    return this._playerLocationHistory;\r\n  }\r\n\r\n  public get itemInteractedHistory() {\r\n    return this._itemInteractedLocationHistory;\r\n  }\r\n\r\n  public get playerLocation() {\r\n    return this._playerLocation;\r\n  }\r\n\r\n  public get onPlayerTravelled() {\r\n    return this._onPlayerTravelled.asEvent();\r\n  }\r\n\r\n  public get onPlayerMajorTravelled() {\r\n    return this._onPlayerMajorTravelled.asEvent();\r\n  }\r\n\r\n  public get onItemInteracted() {\r\n    return this._onItemInteracted.asEvent();\r\n  }\r\n\r\n  public get onBlockBroken() {\r\n    return this._onBlockBroken.asEvent();\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools) {\r\n    this._tick = this._tick.bind(this);\r\n\r\n    // @ts-ignore\r\n    if (typeof window !== \"undefined\") {\r\n      // @ts-ignore\r\n      window.setInterval(this._tick, 50);\r\n    }\r\n  }\r\n\r\n  _tick() {\r\n    const thisTick = this.curTick++;\r\n\r\n    // record the last stop if the player stops moving for 3 seconds.\r\n    if (this.pendingLocationChangeProcess === thisTick && this._lastPlayerTravelledMessage) {\r\n      this.pendingLocationChangeProcess = -1;\r\n\r\n      const location = this._playerLocationHistory[this._playerLocationHistory.length - 1];\r\n      const date = this._playerMajorLocationHistoryTimes[this._playerMajorLocationHistoryTimes.length - 1];\r\n\r\n      this._playerMajorLocationHistory.push(location);\r\n      this._playerMajorLocationHistoryTimes.push(date);\r\n\r\n      this._onPlayerMajorTravelled.dispatch(this, this._lastPlayerTravelledMessage);\r\n    }\r\n  }\r\n\r\n  handleEvent(message: any) {\r\n    if (!message.header) {\r\n      return;\r\n    }\r\n\r\n    const eventId = message.eventId;\r\n\r\n    if (eventId) {\r\n      if (this._eventsSeen[eventId] === true) {\r\n        return;\r\n      }\r\n\r\n      this._eventsSeen[eventId] = true;\r\n    }\r\n\r\n    const eventName = message.header.eventName;\r\n\r\n    if (!eventName) {\r\n      return;\r\n    }\r\n\r\n    switch (eventName) {\r\n      case \"BlockBroken\":\r\n        const blockBrokenMessage = message as IBlockBrokenEvent;\r\n\r\n        this._onBlockBroken.dispatch(this, blockBrokenMessage);\r\n        break;\r\n      case \"ItemInteracted\":\r\n        const itemInteractedMessage = message as IItemInteractedEvent;\r\n\r\n        const interactedEventTime = new Date();\r\n        let itemInteractedLocation = new Location(0, 0, 0);\r\n\r\n        if (this._lastPlayerTravelledMessage) {\r\n          itemInteractedLocation = new Location(\r\n            this._lastPlayerTravelledMessage.body.player.position.x,\r\n            this._lastPlayerTravelledMessage.body.player.position.y,\r\n            this._lastPlayerTravelledMessage.body.player.position.z\r\n          );\r\n        }\r\n\r\n        this._itemInteractedLocationHistory.push(itemInteractedLocation);\r\n        this._itemInteractedLocationHistoryTimes.push(interactedEventTime);\r\n\r\n        this._onItemInteracted.dispatch(this, itemInteractedMessage);\r\n        Log.verbose(\"Item was interacted\");\r\n\r\n        break;\r\n      case \"PlayerTravelled\":\r\n        const playerMessage = message as IPlayerTravelledEvent;\r\n\r\n        const location = new Location(\r\n          playerMessage.body.player.position.x,\r\n          playerMessage.body.player.position.y,\r\n          playerMessage.body.player.position.z\r\n        );\r\n\r\n        const eventTime = new Date();\r\n        this._lastPlayerTravelledMessage = playerMessage;\r\n\r\n        this._playerLocationHistory.push(location);\r\n        this._playerLocationHistoryTimes.push(eventTime);\r\n\r\n        this._playerLocation = location;\r\n\r\n        this._onPlayerTravelled.dispatch(this, playerMessage);\r\n\r\n        let pushMajorLocationChange = false;\r\n\r\n        if (this._playerMajorLocationHistory.length === 0) {\r\n          pushMajorLocationChange = true;\r\n        } else {\r\n          const lastMajorLocation = this._playerMajorLocationHistory[this._playerMajorLocationHistory.length - 1];\r\n\r\n          if (location.distanceTo(lastMajorLocation) > 2) {\r\n            pushMajorLocationChange = true;\r\n          }\r\n        }\r\n\r\n        if (pushMajorLocationChange) {\r\n          this._playerMajorLocationHistory.push(location);\r\n          this._playerMajorLocationHistoryTimes.push(eventTime);\r\n\r\n          this._onPlayerMajorTravelled.dispatch(this, playerMessage);\r\n        } else {\r\n          // record the last stop if the player stops moving for 3 seconds.\r\n          this.pendingLocationChangeProcess = this.curTick + 60;\r\n        }\r\n\r\n        break;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CreatorTools, { CreatorToolsMinecraftErrorStatus, CreatorToolsMinecraftState } from \"./CreatorTools\";\r\nimport {\r\n  CreatorToolsServerAuthenticationResult,\r\n  CreatorToolsServerStatus,\r\n  DedicatedServerStatus,\r\n  ISlotConfig,\r\n} from \"./CreatorToolsAuthentication\";\r\nimport IMinecraft, { IMinecraftMessage, IPrepareAndStartResult, PrepareAndStartResultType } from \"./IMinecraft\";\r\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Project from \"./Project\";\r\nimport MinecraftPush from \"./MinecraftPush\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\nimport GameStateManager from \"../minecraft/GameStateManager\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport HttpStorage from \"../storage/HttpStorage\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport ProjectExporter from \"./ProjectExporter\";\r\nimport ProjectAutogeneration from \"./ProjectAutogeneration\";\r\nimport { StatusTopic } from \"./Status\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\n\r\n/**\r\n * WebSocket notification message format from the server.\r\n */\r\ninterface IStatusUpdateNotification {\r\n  header: {\r\n    version: number;\r\n    requestId: string;\r\n    messageType: string;\r\n    messagePurpose: string;\r\n  };\r\n  body: {\r\n    eventName: string;\r\n    timestamp: number;\r\n    slot?: number;\r\n    status?: number;\r\n    recentMessages?: Array<{\r\n      message: string;\r\n      received: number;\r\n      type?: number;\r\n    }>;\r\n  };\r\n}\r\n\r\nexport default class RemoteMinecraft implements IMinecraft {\r\n  private _creatorTools: CreatorTools;\r\n  public state: CreatorToolsMinecraftState;\r\n  private _project: Project | undefined;\r\n  private _lastFullPush: ZipStorage | undefined;\r\n  private _onStateChanged = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _gameStateManager: GameStateManager;\r\n\r\n  private _nextPollInterval = 500;\r\n  private _pollIntervalCount = 0;\r\n\r\n  // WebSocket for status notifications\r\n  private _webSocket: WebSocket | null = null;\r\n  private _useWebSocket = true; // Try WebSocket first, fall back to polling\r\n  private _wsReconnectTimer: ReturnType<typeof setTimeout> | undefined;\r\n\r\n  errorStatus?: CreatorToolsMinecraftErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  /**\r\n   * Configuration metadata for the slot, received once at connection time.\r\n   * Contains flags like debuggerEnabled and debuggerStreamingEnabled that\r\n   * inform the UI about what features are available.\r\n   */\r\n  slotConfig?: ISlotConfig;\r\n\r\n  worldFolder: IFolder | undefined;\r\n  projectFolder: IFolder | undefined;\r\n  worldContentStorage: IStorage | undefined;\r\n  worldProject: Project | undefined;\r\n\r\n  /**\r\n   * Map of connected player names to their info (position, xuid, etc.)\r\n   * Updated when playerJoined/playerLeft/playerMoved events are received via WebSocket.\r\n   */\r\n  private _connectedPlayers: Map<\r\n    string,\r\n    { name: string; xuid?: string; position?: { x: number; y: number; z: number }; dimension?: string }\r\n  > = new Map();\r\n\r\n  private _onPlayersChanged = new EventDispatcher<IMinecraft, string[]>();\r\n\r\n  private messagesReceived: { [received: number]: IMinecraftMessage } = {};\r\n\r\n  private _onWorldStorageReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onProjectStorageReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onMessage = new EventDispatcher<IMinecraft, IMinecraftMessage>();\r\n  private _onWorldContentChanged = new EventDispatcher<\r\n    IMinecraft,\r\n    { eventName: string; category: string; path: string; slot: number }\r\n  >();\r\n\r\n  /**\r\n   * Event fired when the MCT server sends a shutdown notification.\r\n   * This indicates the entire server is shutting down (not just a BDS instance).\r\n   * Args: { reason: string, graceful: boolean }\r\n   */\r\n  private _onServerShutdown = new EventDispatcher<IMinecraft, { reason: string; graceful: boolean }>();\r\n\r\n  public get onWorldFolderReady() {\r\n    return this._onWorldStorageReady.asEvent();\r\n  }\r\n\r\n  public get onProjectFolderReady() {\r\n    return this._onProjectStorageReady.asEvent();\r\n  }\r\n\r\n  public get onMessage() {\r\n    return this._onMessage.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Event fired when world content files change on the server.\r\n   * This allows the WorldView component to refresh its data.\r\n   */\r\n  public get onWorldContentChanged() {\r\n    return this._onWorldContentChanged.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Event fired when the connected players list changes (join/leave).\r\n   * Returns array of player names currently connected.\r\n   */\r\n  public get onPlayersChanged() {\r\n    return this._onPlayersChanged.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Event fired when the MCT server is shutting down.\r\n   * Subscribers should show appropriate UI feedback (e.g., banner message)\r\n   * and understand the connection will be lost.\r\n   */\r\n  public get onServerShutdown() {\r\n    return this._onServerShutdown.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Get array of currently connected player names.\r\n   */\r\n  public get connectedPlayerNames(): string[] {\r\n    return Array.from(this._connectedPlayers.keys());\r\n  }\r\n\r\n  /**\r\n   * Get detailed info for all connected players.\r\n   */\r\n  public get connectedPlayers(): Array<{\r\n    name: string;\r\n    xuid?: string;\r\n    position?: { x: number; y: number; z: number };\r\n    dimension?: string;\r\n  }> {\r\n    return Array.from(this._connectedPlayers.values());\r\n  }\r\n\r\n  get canDeployFiles() {\r\n    return true;\r\n  }\r\n\r\n  get activeProject() {\r\n    return this._project;\r\n  }\r\n\r\n  set activeProject(newProject: Project | undefined) {\r\n    this._project = newProject;\r\n  }\r\n\r\n  public get gameStateManager() {\r\n    return this._gameStateManager;\r\n  }\r\n\r\n  public get onStateChanged() {\r\n    return this._onStateChanged.asEvent();\r\n  }\r\n\r\n  public get onRefreshed() {\r\n    return this._onStateChanged.asEvent();\r\n  }\r\n\r\n  canPrepare() {\r\n    return true;\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools) {\r\n    this._creatorTools = creatorTools;\r\n    this.state = CreatorToolsMinecraftState.none;\r\n    this._gameStateManager = new GameStateManager(this._creatorTools);\r\n\r\n    this.doHeartbeat = this.doHeartbeat.bind(this);\r\n    this._handleWebSocketMessage = this._handleWebSocketMessage.bind(this);\r\n  }\r\n\r\n  async updateStatus() {\r\n    return this.state;\r\n  }\r\n\r\n  setState(newState: CreatorToolsMinecraftState) {\r\n    if (this.state === newState) {\r\n      return;\r\n    }\r\n\r\n    this.state = newState;\r\n    this._onStateChanged.dispatch(this, this.state);\r\n  }\r\n\r\n  processExternalMessage(command: string, data: string): void {\r\n    switch (command.toLowerCase()) {\r\n      case \"wsevent\":\r\n        try {\r\n          const eventObj = JSON.parse(data);\r\n          this._gameStateManager.handleEvent(eventObj);\r\n        } catch (e) {\r\n          Log.verbose(\"Failed to parse message: \" + e);\r\n        }\r\n        break;\r\n    }\r\n  }\r\n\r\n  async prepare(force?: boolean) {}\r\n\r\n  /**\r\n   * Initialize the worldContentStorage with an HttpStorage pointing to the server's\r\n   * /api/worldContent/{slot}/ endpoint. This provides access to the server's\r\n   * behavior_packs, resource_packs, and world folders.\r\n   *\r\n   * Also establishes a WebSocket connection for real-time file change notifications.\r\n   */\r\n  private async initWorldContentStorage() {\r\n    const baseUrl = this._creatorTools.fullRemoteServerUrl;\r\n    const slot = this._creatorTools.remoteServerPort ?? 0;\r\n\r\n    if (!baseUrl) {\r\n      Log.debug(\"Cannot initialize worldContentStorage: no remote server URL\");\r\n      return;\r\n    }\r\n\r\n    // Create HttpStorage pointing to /api/worldContent/{slot}/\r\n    // Note: baseUrl already ends with slash from fullRemoteServerUrl\r\n    const worldContentUrl = `${baseUrl}api/worldContent/${slot}/`;\r\n    const storage = new HttpStorage(worldContentUrl);\r\n\r\n    // Set slot so UI components can make slot-specific API calls\r\n    storage.slot = slot;\r\n\r\n    // Set auth token so requests are authenticated\r\n    if (this._creatorTools.remoteServerAuthToken) {\r\n      storage.authToken = this._creatorTools.remoteServerAuthToken;\r\n    }\r\n\r\n    this.worldContentStorage = storage;\r\n\r\n    // Connect to the WebSocket notification server for real-time file updates\r\n    // This allows WorldView to receive updates when files change on the server\r\n    try {\r\n      // Derive WebSocket URL from the base URL\r\n      const wsBaseUrl = baseUrl.replace(/^http/, \"ws\");\r\n      const wsUrl = `${wsBaseUrl}ws/notifications`;\r\n\r\n      Log.message(`[RemoteMinecraft] Connecting HttpStorage WebSocket to ${wsUrl}`);\r\n      await storage.connect(wsUrl, this._creatorTools.remoteServerAuthToken);\r\n\r\n      // Subscribe to file change events for this slot\r\n      await storage.subscribe([\"fileAdded\", \"fileChanged\", \"fileRemoved\", \"folderChanged\"], slot);\r\n\r\n      Log.message(`[RemoteMinecraft] HttpStorage WebSocket connected and subscribed for slot ${slot}`);\r\n    } catch (e) {\r\n      Log.debug(\"Failed to connect HttpStorage WebSocket (falling back to polling): \" + e);\r\n      // File updates will still work but won't be real-time\r\n    }\r\n\r\n    // Also initialize the worldFolder for WorldView to use\r\n    await this.initWorldFolder();\r\n  }\r\n\r\n  /**\r\n   * Initialize the worldFolder from worldContentStorage for WorldDisplay rendering.\r\n   * The world folder is at /world/ within the worldContentStorage.\r\n   */\r\n  private async initWorldFolder() {\r\n    if (!this.worldContentStorage) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Get the world folder from worldContentStorage\r\n      // The server exposes /api/worldContent/{slot}/world/ which maps to the active world\r\n      this.worldFolder = this.worldContentStorage.rootFolder.ensureFolder(\"world\");\r\n      await this.worldFolder.load();\r\n\r\n      // Dispatch the event so WorldView knows the folder is ready\r\n      this._onWorldStorageReady.dispatch(this, this.worldFolder);\r\n    } catch (e) {\r\n      Log.debug(\"Error initializing worldFolder: \" + e);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Connect to the WebSocket notification endpoint for real-time status updates.\r\n   * Falls back to polling if WebSocket connection fails.\r\n   */\r\n  private async connectWebSocket(): Promise<boolean> {\r\n    const baseUrl = this._creatorTools.fullRemoteServerUrl;\r\n    const token = this._creatorTools.remoteServerAuthToken;\r\n\r\n    if (!baseUrl || !token) {\r\n      Log.debug(\"Cannot connect WebSocket: missing URL or token\");\r\n      return false;\r\n    }\r\n\r\n    try {\r\n      // Derive WebSocket URL from baseUrl\r\n      const urlObj = new URL(baseUrl);\r\n      const wsProtocol = urlObj.protocol === \"https:\" ? \"wss:\" : \"ws:\";\r\n      const wsUrl = `${wsProtocol}//${urlObj.host}/ws/notifications?token=${encodeURIComponent(token)}`;\r\n\r\n      this._webSocket = new WebSocket(wsUrl);\r\n\r\n      return new Promise<boolean>((resolve) => {\r\n        if (!this._webSocket) {\r\n          resolve(false);\r\n          return;\r\n        }\r\n\r\n        this._webSocket.onopen = () => {\r\n          Log.verbose(\"WebSocket connected for status updates\");\r\n\r\n          // Subscribe to statusUpdate events for this slot\r\n          const slot = this._creatorTools.remoteServerPort ?? 0;\r\n          const subscribeMessage = {\r\n            header: {\r\n              version: 1,\r\n              requestId: Date.now().toString(),\r\n              messageType: \"subscriptionRequest\",\r\n              messagePurpose: \"subscribe\",\r\n            },\r\n            body: {\r\n              eventNames: [\r\n                \"statusUpdate\",\r\n                \"playerJoined\",\r\n                \"playerLeft\",\r\n                \"serverStateChanged\",\r\n                \"playerMoved\",\r\n                \"gameEvent\",\r\n              ],\r\n              slot: slot,\r\n            },\r\n          };\r\n          this._webSocket?.send(JSON.stringify(subscribeMessage));\r\n\r\n          resolve(true);\r\n        };\r\n\r\n        this._webSocket.onclose = () => {\r\n          Log.verbose(\"WebSocket disconnected, falling back to polling\");\r\n          this._webSocket = null;\r\n\r\n          // If we were using WebSocket, try to reconnect after a delay\r\n          if (this._useWebSocket && !this._wsReconnectTimer) {\r\n            this._wsReconnectTimer = setTimeout(() => {\r\n              this._wsReconnectTimer = undefined;\r\n              if (this._useWebSocket && this.state !== CreatorToolsMinecraftState.disconnected) {\r\n                this.connectWebSocket().catch(() => {\r\n                  // Fall back to polling if reconnection fails\r\n                  this.startPolling();\r\n                });\r\n              }\r\n            }, 5000);\r\n          } else {\r\n            // Fall back to polling\r\n            this.startPolling();\r\n          }\r\n        };\r\n\r\n        this._webSocket.onerror = () => {\r\n          Log.debug(\"WebSocket error, will fall back to polling\");\r\n          resolve(false);\r\n        };\r\n\r\n        this._webSocket.onmessage = (event) => {\r\n          this._handleWebSocketMessage(event.data);\r\n        };\r\n\r\n        // Timeout if connection doesn't establish quickly\r\n        setTimeout(() => {\r\n          if (this._webSocket?.readyState !== WebSocket.OPEN) {\r\n            resolve(false);\r\n          }\r\n        }, 5000);\r\n      });\r\n    } catch (e) {\r\n      Log.debug(\"Failed to connect WebSocket: \" + e);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle incoming WebSocket messages for status updates.\r\n   */\r\n  private _handleWebSocketMessage(data: string) {\r\n    try {\r\n      const notification = JSON.parse(data) as IStatusUpdateNotification;\r\n\r\n      if (notification.body?.eventName === \"statusUpdate\") {\r\n        // Process the status update\r\n        const slot = notification.body.slot ?? 0;\r\n        const status: CreatorToolsServerStatus = {\r\n          id: slot,\r\n          time: notification.body.timestamp,\r\n          status: notification.body.status,\r\n          recentMessages: notification.body.recentMessages?.map((msg) => ({\r\n            message: msg.message,\r\n            received: msg.received,\r\n          })),\r\n        };\r\n        this.processServerStatus(status);\r\n      } else if (notification.body?.eventName === \"playerJoined\") {\r\n        // Track player connection\r\n        const joinBody = notification.body as { playerName?: string; xuid?: string };\r\n        if (joinBody.playerName) {\r\n          this._connectedPlayers.set(joinBody.playerName, {\r\n            name: joinBody.playerName,\r\n            xuid: joinBody.xuid,\r\n          });\r\n          Log.message(`Player joined: ${joinBody.playerName}`);\r\n          this._onPlayersChanged.dispatch(this, this.connectedPlayerNames);\r\n        }\r\n      } else if (notification.body?.eventName === \"playerLeft\") {\r\n        // Remove player from tracking\r\n        const leaveBody = notification.body as { playerName?: string };\r\n        if (leaveBody.playerName) {\r\n          this._connectedPlayers.delete(leaveBody.playerName);\r\n          Log.message(`Player left: ${leaveBody.playerName}`);\r\n          this._onPlayersChanged.dispatch(this, this.connectedPlayerNames);\r\n        }\r\n      } else if (notification.body?.eventName === \"playerMoved\") {\r\n        // Handle player movement updates\r\n        const moveBody = notification.body as {\r\n          playerName?: string;\r\n          position?: { x: number; y: number; z: number };\r\n          dimension?: string;\r\n        };\r\n        if (moveBody.playerName && moveBody.position) {\r\n          // Update player position in our tracking map\r\n          const existing = this._connectedPlayers.get(moveBody.playerName);\r\n          this._connectedPlayers.set(moveBody.playerName, {\r\n            name: moveBody.playerName,\r\n            xuid: existing?.xuid,\r\n            position: moveBody.position,\r\n            dimension: moveBody.dimension,\r\n          });\r\n        }\r\n        if (moveBody.position) {\r\n          // Convert to a PlayerTravelled-style event for GameStateManager\r\n          const playerTravelledEvent = {\r\n            eventId: `move_${Date.now()}`,\r\n            header: {\r\n              eventName: \"PlayerTravelled\",\r\n              purpose: \"event\",\r\n              version: 1,\r\n            },\r\n            body: {\r\n              isUnderwater: false,\r\n              metersTravelled: 0,\r\n              newBiome: 0,\r\n              player: {\r\n                color: \"\",\r\n                dimension: 0,\r\n                id: 0,\r\n                name: moveBody.playerName ?? \"unknown\",\r\n                position: moveBody.position,\r\n                type: \"player\",\r\n                variant: 0,\r\n                yRot: 0,\r\n              },\r\n              travelMethod: 0,\r\n            },\r\n          };\r\n          this._gameStateManager.handleEvent(playerTravelledEvent);\r\n        }\r\n      } else if (notification.body?.eventName === \"gameEvent\") {\r\n        // Handle generic game events from Minecraft\r\n        const gameEventBody = notification.body as { data?: object };\r\n        if (gameEventBody.data) {\r\n          this._gameStateManager.handleEvent(gameEventBody.data);\r\n        }\r\n      } else if (\r\n        notification.body?.eventName === \"fileAdded\" ||\r\n        notification.body?.eventName === \"fileChanged\" ||\r\n        notification.body?.eventName === \"fileRemoved\" ||\r\n        notification.body?.eventName === \"folderChanged\"\r\n      ) {\r\n        // Handle storage change notifications for world content\r\n        const changeBody = notification.body as {\r\n          eventName: string;\r\n          slot?: number;\r\n          category?: string;\r\n          path?: string;\r\n        };\r\n        Log.message(\r\n          `[RemoteMinecraft] Storage change notification: ${changeBody.eventName} ${changeBody.category}${changeBody.path} (slot ${changeBody.slot})`\r\n        );\r\n\r\n        // Dispatch the world content changed event\r\n        this._onWorldContentChanged.dispatch(this, {\r\n          eventName: changeBody.eventName,\r\n          category: changeBody.category ?? \"\",\r\n          path: changeBody.path ?? \"\",\r\n          slot: changeBody.slot ?? 0,\r\n        });\r\n      } else if (notification.body?.eventName === \"serverShutdown\") {\r\n        // Handle server shutdown notification\r\n        const shutdownBody = notification.body as { reason?: string; graceful?: boolean };\r\n        const reason = shutdownBody.reason || \"Server shutting down\";\r\n        const graceful = shutdownBody.graceful !== false; // Default to true\r\n\r\n        // Use notifyStatusUpdate for more visible user notification\r\n        const shutdownMessage = `Server shutdown: ${reason}`;\r\n        Log.message(`[RemoteMinecraft] ${shutdownMessage}`);\r\n        this._creatorTools.notifyStatusUpdate(shutdownMessage, StatusTopic.general);\r\n\r\n        // Disable WebSocket reconnection since the server is intentionally going away\r\n        this._useWebSocket = false;\r\n\r\n        // Dispatch the shutdown event for UI to handle\r\n        this._onServerShutdown.dispatch(this, { reason, graceful });\r\n      }\r\n    } catch (e) {\r\n      Log.debug(\"Error handling WebSocket message: \" + e);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Disconnect WebSocket and clean up.\r\n   */\r\n  private disconnectWebSocket() {\r\n    if (this._wsReconnectTimer) {\r\n      clearTimeout(this._wsReconnectTimer);\r\n      this._wsReconnectTimer = undefined;\r\n    }\r\n\r\n    if (this._webSocket) {\r\n      this._webSocket.close();\r\n      this._webSocket = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Start polling for status updates (fallback when WebSocket is unavailable).\r\n   */\r\n  private startPolling() {\r\n    if (this._nextPollInterval < 0) {\r\n      return; // Polling disabled\r\n    }\r\n\r\n    // @ts-ignore\r\n    window.setTimeout(this.doHeartbeat, this._nextPollInterval);\r\n  }\r\n\r\n  /**\r\n   * Lazily create a Project wrapper for the worldContentStorage.\r\n   * This allows treating the server's world content as a Project.\r\n   */\r\n  async ensureWorldProject(): Promise<Project | undefined> {\r\n    if (this.worldProject) {\r\n      return this.worldProject;\r\n    }\r\n\r\n    if (!this.worldContentStorage) {\r\n      await this.initWorldContentStorage();\r\n    }\r\n\r\n    if (!this.worldContentStorage) {\r\n      return undefined;\r\n    }\r\n\r\n    // Create a Project that wraps the world content storage\r\n    this.worldProject = new Project(this._creatorTools, \"World Content\", null);\r\n    this.worldProject.setProjectFolder(this.worldContentStorage.rootFolder);\r\n\r\n    return this.worldProject;\r\n  }\r\n\r\n  async prepareAndStart(push: MinecraftPush): Promise<IPrepareAndStartResult> {\r\n    if (!this._creatorTools.remoteServerAuthToken) {\r\n      Log.debug(\r\n        \"Remote server auth token is not set. Please connect to a remote server or select a different server mode.\"\r\n      );\r\n      return {\r\n        type: PrepareAndStartResultType.error,\r\n        errorMessage:\r\n          \"No remote server authentication token is available. Please connect to a remote server first, or switch to a different server mode (e.g., Host Minecraft Server).\",\r\n      };\r\n    }\r\n\r\n    this.setState(CreatorToolsMinecraftState.preparing);\r\n\r\n    if (!push.project) {\r\n      return {\r\n        type: PrepareAndStartResultType.started,\r\n      };\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(push.project, false);\r\n\r\n    const zipStorage = new ZipStorage();\r\n\r\n    //await StorageUtilities.syncFolderTo(carto.deploymentStorage.rootFolder, zipStorage.rootFolder, true, true, false);\r\n\r\n    await ProjectExporter.deployProject(this._creatorTools, push.project, zipStorage.rootFolder);\r\n\r\n    await zipStorage.rootFolder.saveAll();\r\n\r\n    // consider doing a diff from the last push.\r\n    if (this._lastFullPush) {\r\n      const differenceSet = await StorageUtilities.getDifferences(\r\n        this._lastFullPush.rootFolder,\r\n        zipStorage.rootFolder,\r\n        true,\r\n        false\r\n      );\r\n\r\n      this._lastFullPush = zipStorage;\r\n\r\n      // we don't have to do anything here. (may need a force flag here at some point)\r\n      if (differenceSet.fileDifferences.length === 0 && differenceSet.folderDifferences.length === 0) {\r\n        Log.message(\"No changes detected in this update. No push is being made.\");\r\n        return {\r\n          type: PrepareAndStartResultType.error,\r\n        };\r\n      }\r\n\r\n      if (!differenceSet.getHasDeletions()) {\r\n        const diffUpdate = new ZipStorage();\r\n\r\n        await differenceSet.copyFileUpdatesAndAdds(diffUpdate);\r\n        await diffUpdate.rootFolder.saveAll();\r\n\r\n        const diffBinary = await diffUpdate.generateBlobAsync();\r\n\r\n        this._creatorTools.notifyStatusUpdate(\"Uploading changed files to \" + this._creatorTools.fullRemoteServerUrl);\r\n\r\n        const isReloadable = MinecraftUtilities.isReloadableSetOfChanges(differenceSet);\r\n\r\n        try {\r\n          await axios({\r\n            method: \"patch\",\r\n            url: this.getBaseApiUrl() + \"upload/\", //API url\r\n            headers: {\r\n              Authorization: \"Bearer mctauth=\" + this._creatorTools.remoteServerAuthToken,\r\n              \"Content-Type\": \"application/zip\",\r\n              \"mcttools-reloadable\": isReloadable,\r\n            },\r\n            data: diffBinary, // Buffer\r\n            maxContentLength: Infinity,\r\n            maxBodyLength: Infinity,\r\n          });\r\n        } catch (error) {\r\n          const eulaResult = this._handleUploadError(error);\r\n          if (eulaResult) {\r\n            return eulaResult;\r\n          }\r\n          throw error;\r\n        }\r\n\r\n        this._creatorTools.notifyStatusUpdate(\"Upload complete\");\r\n        return {\r\n          type: PrepareAndStartResultType.started,\r\n        };\r\n      }\r\n    }\r\n\r\n    this._creatorTools.notifyStatusUpdate(\"Files created in zip. Packaging\");\r\n\r\n    const zipBinary = await zipStorage.generateBlobAsync();\r\n\r\n    this._lastFullPush = zipStorage;\r\n\r\n    this._creatorTools.notifyStatusUpdate(\"Uploading to \" + this._creatorTools.fullRemoteServerUrl);\r\n\r\n    try {\r\n      await axios({\r\n        method: \"post\",\r\n        url: this.getBaseApiUrl() + \"upload/\", //API url\r\n        headers: {\r\n          Authorization: \"Bearer mctauth=\" + this._creatorTools.remoteServerAuthToken,\r\n          \"Content-Type\": \"application/zip\",\r\n        },\r\n        data: zipBinary, // Buffer\r\n        maxContentLength: Infinity,\r\n        maxBodyLength: Infinity,\r\n      });\r\n    } catch (error) {\r\n      const eulaResult = this._handleUploadError(error);\r\n      if (eulaResult) {\r\n        return eulaResult;\r\n      }\r\n      throw error;\r\n    }\r\n\r\n    this.setState(CreatorToolsMinecraftState.prepared);\r\n\r\n    this._creatorTools.notifyStatusUpdate(\"Upload complete\");\r\n\r\n    return {\r\n      type: PrepareAndStartResultType.started,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Handle upload errors, specifically the EULA_REQUIRED 451 error.\r\n   * Returns an error result if EULA is required, otherwise returns undefined\r\n   * to let the caller re-throw the error.\r\n   */\r\n  private _handleUploadError(error: unknown): IPrepareAndStartResult | undefined {\r\n    const axiosError = error as AxiosError;\r\n    if (axiosError.response?.status === 451) {\r\n      // HTTP 451 \"Unavailable For Legal Reasons\" - EULA not accepted\r\n      const responseData = axiosError.response.data as { eulaRequired?: boolean; message?: string };\r\n      if (responseData?.eulaRequired) {\r\n        // Set the flag so the UI shows the EulaAcceptancePanel\r\n        this._creatorTools.remoteServerEulaAccepted = false;\r\n        this._creatorTools.notifyStatusUpdate(\r\n          \"EULA acceptance required. Please accept the Minecraft EULA to deploy content.\"\r\n        );\r\n        this.setState(CreatorToolsMinecraftState.initialized);\r\n        return {\r\n          type: PrepareAndStartResultType.error,\r\n          errorMessage: responseData.message || \"EULA acceptance required\",\r\n        };\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  async runActionSet(actionSet: IActionSetData): Promise<any> {\r\n    return undefined;\r\n  }\r\n\r\n  async runCommand(command: string) {\r\n    if (!this._creatorTools.remoteServerAuthToken) {\r\n      Log.throwUnexpectedUndefined(\"RC\");\r\n      return;\r\n    }\r\n\r\n    this.resetInterval();\r\n\r\n    const result = await axios({\r\n      method: \"post\",\r\n      url: this.getBaseApiUrl() + \"command/\", //API url\r\n      headers: {\r\n        Authorization: \"Bearer mctauth=\" + this._creatorTools.remoteServerAuthToken,\r\n      },\r\n      data: command,\r\n      maxContentLength: Infinity,\r\n      maxBodyLength: Infinity,\r\n    });\r\n\r\n    return result.data as string;\r\n  }\r\n\r\n  getBaseApiUrl(): string {\r\n    if (!this._creatorTools.fullRemoteServerUrl) {\r\n      Log.throwUnexpectedUndefined(\"GBAU\");\r\n      return \"\";\r\n    }\r\n\r\n    let port = this._creatorTools.remoteServerPort;\r\n\r\n    if (!port) {\r\n      port = 0;\r\n    }\r\n\r\n    // Note: fullRemoteServerUrl already ends with slash\r\n    return this._creatorTools.fullRemoteServerUrl + \"api/\" + port + \"/\";\r\n  }\r\n\r\n  async initSession(slot: number) {}\r\n\r\n  async syncWithDeployment() {}\r\n\r\n  async stop() {\r\n    const baseUrl = this._creatorTools.fullRemoteServerUrl;\r\n    const token = this._creatorTools.remoteServerAuthToken;\r\n    const slot = this._creatorTools.remoteServerPort ?? 0;\r\n\r\n    if (!baseUrl || !token) {\r\n      Log.debug(\"Cannot stop: not connected to remote server\");\r\n      return;\r\n    }\r\n\r\n    try {\r\n      Log.message(\"Stopping remote server...\");\r\n      this.setState(CreatorToolsMinecraftState.stopping);\r\n\r\n      await axios({\r\n        method: \"POST\",\r\n        url: `${baseUrl}api/${slot}/stop`,\r\n        headers: {\r\n          Authorization: \"Bearer \" + token,\r\n        },\r\n      });\r\n\r\n      this.setState(CreatorToolsMinecraftState.stopped);\r\n      Log.message(\"Remote server stopped\");\r\n    } catch (e: any) {\r\n      Log.error(\"Failed to stop remote server: \" + (e.message || e));\r\n      this.errorMessage = \"Failed to stop server: \" + (e.message || e);\r\n      // Reset to stopped state so the UI doesn't get stuck on \"(stopping...)\"\r\n      // If the stop request failed (e.g., 404 because no server exists), the server\r\n      // is effectively stopped from the client's perspective.\r\n      this.setState(CreatorToolsMinecraftState.stopped);\r\n    }\r\n  }\r\n\r\n  async restart() {\r\n    const baseUrl = this._creatorTools.fullRemoteServerUrl;\r\n    const token = this._creatorTools.remoteServerAuthToken;\r\n    const slot = this._creatorTools.remoteServerPort ?? 0;\r\n\r\n    if (!baseUrl || !token) {\r\n      Log.debug(\"Cannot restart: not connected to remote server\");\r\n      return;\r\n    }\r\n\r\n    try {\r\n      Log.message(\"Restarting remote server...\");\r\n      this.setState(CreatorToolsMinecraftState.stopping);\r\n\r\n      await axios({\r\n        method: \"POST\",\r\n        url: `${baseUrl}api/${slot}/restart`,\r\n        headers: {\r\n          Authorization: \"Bearer \" + token,\r\n        },\r\n      });\r\n\r\n      // Server will report its new state via WebSocket\r\n      Log.message(\"Remote server restart initiated\");\r\n    } catch (e: any) {\r\n      Log.error(\"Failed to restart remote server: \" + (e.message || e));\r\n      this.errorMessage = \"Failed to restart server\";\r\n    }\r\n  }\r\n\r\n  async processServerStatus(newStatus: CreatorToolsServerStatus) {\r\n    let wasActive = false;\r\n\r\n    // Store slot config if provided and not already set (one-time at connection)\r\n    if (newStatus.slotConfig && !this.slotConfig) {\r\n      this.slotConfig = newStatus.slotConfig;\r\n      Log.verbose(\r\n        `Received slot config: debuggerEnabled=${newStatus.slotConfig.debuggerEnabled}, debuggerStreamingEnabled=${newStatus.slotConfig.debuggerStreamingEnabled}`\r\n      );\r\n    }\r\n\r\n    if (newStatus.status) {\r\n      switch (newStatus.status) {\r\n        case DedicatedServerStatus.deploying:\r\n          if (this.state !== CreatorToolsMinecraftState.preparing) {\r\n            this.setState(CreatorToolsMinecraftState.preparing);\r\n            wasActive = true;\r\n          }\r\n          break;\r\n        case DedicatedServerStatus.launching:\r\n          if (this.state !== CreatorToolsMinecraftState.starting) {\r\n            this.setState(CreatorToolsMinecraftState.starting);\r\n            wasActive = true;\r\n          }\r\n          break;\r\n        case DedicatedServerStatus.starting:\r\n          if (this.state !== CreatorToolsMinecraftState.starting) {\r\n            this.setState(CreatorToolsMinecraftState.starting);\r\n            wasActive = true;\r\n          }\r\n          break;\r\n        case DedicatedServerStatus.started:\r\n          if (this.state !== CreatorToolsMinecraftState.started) {\r\n            this.setState(CreatorToolsMinecraftState.started);\r\n\r\n            if (!this._creatorTools.successfullyConnectedToRemoteMinecraft) {\r\n              this._creatorTools.successfullyConnectedToRemoteMinecraft = true;\r\n              this._creatorTools.save();\r\n            }\r\n\r\n            // Initialize worldFolder when server has started so WorldView can render the map\r\n            if (!this.worldFolder) {\r\n              await this.initWorldContentStorage();\r\n            }\r\n\r\n            wasActive = true;\r\n          }\r\n          break;\r\n        case DedicatedServerStatus.stopped:\r\n          if (this.state !== CreatorToolsMinecraftState.stopped) {\r\n            this.setState(CreatorToolsMinecraftState.stopped);\r\n            wasActive = true;\r\n          }\r\n          break;\r\n      }\r\n    }\r\n\r\n    if (newStatus.recentMessages) {\r\n      for (const recentMessage of newStatus.recentMessages) {\r\n        if (!this.messagesReceived[recentMessage.received]) {\r\n          this.messagesReceived[recentMessage.received] = recentMessage;\r\n\r\n          this._creatorTools.notifyStatusUpdate(recentMessage.message, StatusTopic.minecraft);\r\n\r\n          this._onMessage.dispatch(this, recentMessage);\r\n        }\r\n      }\r\n    }\r\n\r\n    return wasActive;\r\n  }\r\n\r\n  resetInterval() {\r\n    this._nextPollInterval = 100;\r\n    this._pollIntervalCount = 0;\r\n  }\r\n\r\n  async doHeartbeat() {\r\n    let wasActive = false;\r\n\r\n    try {\r\n      const result = await axios({\r\n        method: \"get\",\r\n        url: this.getBaseApiUrl() + \"status/\", //API url\r\n        headers: {\r\n          Authorization: \"Bearer mctauth=\" + this._creatorTools.remoteServerAuthToken,\r\n        },\r\n      });\r\n\r\n      const obj = result.data as CreatorToolsServerStatus;\r\n\r\n      if (obj) {\r\n        wasActive = await this.processServerStatus(obj);\r\n      }\r\n    } catch (e: any) {\r\n      if (e && e.response && (e as AxiosError).response?.status === 404) {\r\n        this.errorMessage = \"Did not find an active server at \" + this.getBaseApiUrl();\r\n        this.setState(CreatorToolsMinecraftState.disconnected);\r\n        return;\r\n      }\r\n\r\n      this.errorMessage = \"Disconnected from server.\";\r\n      this.setState(CreatorToolsMinecraftState.disconnected);\r\n      return;\r\n    }\r\n\r\n    if (this._nextPollInterval >= 0) {\r\n      if (wasActive) {\r\n        this._nextPollInterval = 100;\r\n        this._pollIntervalCount = 0;\r\n      } else {\r\n        this._pollIntervalCount++;\r\n\r\n        // back off our polling if nothing interesting is happening\r\n        if (this._pollIntervalCount === 50 && this._nextPollInterval < 500) {\r\n          this._nextPollInterval = 500;\r\n          this._pollIntervalCount = 0;\r\n        } else if (this._pollIntervalCount === 50 && this._nextPollInterval === 500) {\r\n          this._nextPollInterval = 5000;\r\n          this._pollIntervalCount = 0;\r\n        }\r\n      }\r\n\r\n      // @ts-ignore\r\n      window.setTimeout(this.doHeartbeat, this._nextPollInterval);\r\n    }\r\n  }\r\n\r\n  async initialize() {\r\n    const url = this._creatorTools.fullRemoteServerUrl;\r\n    this._nextPollInterval = -1;\r\n\r\n    if (\r\n      this.state === CreatorToolsMinecraftState.initialized ||\r\n      this.state === CreatorToolsMinecraftState.preparing ||\r\n      this.state === CreatorToolsMinecraftState.prepared ||\r\n      this.state === CreatorToolsMinecraftState.starting ||\r\n      this.state === CreatorToolsMinecraftState.started\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    this.setState(CreatorToolsMinecraftState.initialized);\r\n\r\n    if (!this._creatorTools || !url || !this._creatorTools.remoteServerPasscode) {\r\n      this.errorMessage = \"Not fully configured.\";\r\n      this.errorStatus = CreatorToolsMinecraftErrorStatus.configuration;\r\n      return;\r\n    }\r\n\r\n    let authReq: AxiosResponse | undefined;\r\n\r\n    try {\r\n      authReq = await axios.post(url + \"api/auth/\", \"passcode=\" + this._creatorTools.remoteServerPasscode);\r\n\r\n      if (authReq === undefined) {\r\n        this.errorMessage = \"Could not connect to server.\";\r\n        this.errorStatus = CreatorToolsMinecraftErrorStatus.loginFailed;\r\n        this.setState(CreatorToolsMinecraftState.error);\r\n        return;\r\n      }\r\n\r\n      if (authReq.status !== 200) {\r\n        this.errorMessage = \"Login failed.\";\r\n        this.errorStatus = CreatorToolsMinecraftErrorStatus.loginFailed;\r\n        this.setState(CreatorToolsMinecraftState.error);\r\n        return;\r\n      }\r\n\r\n      let result: CreatorToolsServerAuthenticationResult | undefined;\r\n\r\n      if (typeof authReq.data === \"string\") {\r\n        result = JSON.parse(authReq.data);\r\n      } else if (typeof authReq.data === \"object\") {\r\n        result = authReq.data;\r\n      }\r\n\r\n      if (result === undefined) {\r\n        this.errorMessage = \"Unexpected server error.\";\r\n        this.errorStatus = CreatorToolsMinecraftErrorStatus.serverError;\r\n        this.setState(CreatorToolsMinecraftState.error);\r\n\r\n        return;\r\n      }\r\n\r\n      this.setState(CreatorToolsMinecraftState.initialized);\r\n\r\n      // Build the full auth token including authTag for GCM encryption validation\r\n      this._creatorTools.remoteServerAuthToken =\r\n        result.token + \"|\" + result.iv + (result.authTag ? \"|\" + result.authTag : \"\");\r\n      this._creatorTools.remoteServerAccessLevel = result.permissionLevel;\r\n      this._creatorTools.remoteServerEulaAccepted = result.eulaAccepted;\r\n\r\n      // Auto-select the first active slot from the server response\r\n      // This handles cases where the server is running on a non-default slot\r\n      let desiredSlot = this._creatorTools.remoteServerPort;\r\n      let foundActiveSlot = false;\r\n\r\n      // Check if the desired slot has an active server\r\n      if (desiredSlot !== undefined && result.serverStatus[desiredSlot]?.id >= 0) {\r\n        foundActiveSlot = true;\r\n      }\r\n\r\n      // If desired slot has no active server, find the first active slot\r\n      if (!foundActiveSlot) {\r\n        for (const slotStr in result.serverStatus) {\r\n          const slot = parseInt(slotStr, 10);\r\n          const status = result.serverStatus[slot];\r\n          if (status && status.id >= 0) {\r\n            Log.verbose(\"Auto-selecting active slot \" + slot + \" (was \" + desiredSlot + \")\");\r\n            desiredSlot = slot;\r\n            this._creatorTools.remoteServerPort = slot;\r\n            foundActiveSlot = true;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Initialize world content storage with HttpStorage pointing to the server's worldContent endpoint\r\n      await this.initWorldContentStorage();\r\n\r\n      if (foundActiveSlot && desiredSlot !== undefined && result.serverStatus[desiredSlot]) {\r\n        const status = result.serverStatus[desiredSlot];\r\n        await this.processServerStatus(status);\r\n      }\r\n\r\n      await this._creatorTools.save();\r\n\r\n      // Try WebSocket first for real-time status updates\r\n      // Falls back to polling if WebSocket connection fails\r\n      const wsConnected = await this.connectWebSocket();\r\n\r\n      if (wsConnected) {\r\n        Log.verbose(\"Using WebSocket for status updates\");\r\n        this._useWebSocket = true;\r\n        this._nextPollInterval = -1; // Disable polling when using WebSocket\r\n      } else {\r\n        Log.verbose(\"WebSocket not available, using polling for status updates\");\r\n        this._useWebSocket = false;\r\n        this._nextPollInterval = 500;\r\n        this.startPolling();\r\n      }\r\n    } catch (e: any) {\r\n      this.errorMessage = e.toString();\r\n\r\n      if (this.errorMessage && this.errorMessage.indexOf(\"401\") >= 0) {\r\n        this.errorStatus = CreatorToolsMinecraftErrorStatus.loginFailed;\r\n        this.setState(CreatorToolsMinecraftState.error);\r\n      } else {\r\n        this.errorStatus = CreatorToolsMinecraftErrorStatus.serverUnavailable;\r\n        this.setState(CreatorToolsMinecraftState.error);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "import CreatorTools, { CreatorToolsMinecraftErrorStatus, CreatorToolsMinecraftState } from \"../app/CreatorTools\";\r\nimport IMinecraft, { IMinecraftMessage, PrepareAndStartResultType } from \"../app/IMinecraft\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectExporter from \"../app/ProjectExporter\";\r\nimport MinecraftPush from \"../app/MinecraftPush\";\r\nimport GameStateManager from \"../minecraft/GameStateManager\";\r\nimport { DedicatedServerMode } from \"../app/ICreatorToolsData\";\r\nimport { IMinecraftStartMessage } from \"../app/IMinecraftStartMessage\";\r\nimport { IWorldSettings } from \"../minecraft/IWorldSettings\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\nimport { StatusTopic } from \"../app/Status\";\r\nimport {\r\n  IDebugStatsNotificationBody,\r\n  IDebugConnectedNotificationBody,\r\n  IDebugDisconnectedNotificationBody,\r\n  IDebugPausedNotificationBody,\r\n  IDebugResumedNotificationBody,\r\n  IDebugProfilerStateNotificationBody,\r\n  IProfilerCaptureNotificationBody,\r\n} from \"../local/IServerNotification\";\r\n\r\nexport default class ProcessHostedMinecraft implements IMinecraft {\r\n  private _creatorTools: CreatorTools;\r\n\r\n  private _project: Project | undefined;\r\n  private _gameStateManager: GameStateManager;\r\n  errorStatus?: CreatorToolsMinecraftErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  state: CreatorToolsMinecraftState;\r\n  dedicatedServerStorage: IStorage | null;\r\n  private _dsDeployBehaviorPacksFolder: IFolder | null;\r\n\r\n  worldFolder: IFolder | undefined;\r\n  projectFolder: IFolder | undefined;\r\n  worldContentStorage: IStorage | undefined;\r\n  worldProject: Project | undefined;\r\n\r\n  private _onWorldStorageReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onProjectStorageReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onMessage = new EventDispatcher<IMinecraft, IMinecraftMessage>();\r\n  private _onStateChanged = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _onRefreshed = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n\r\n  // Debug event dispatchers for IPC-bridged debug data\r\n  private _onDebugConnected = new EventDispatcher<IMinecraft, IDebugConnectedNotificationBody>();\r\n  private _onDebugDisconnected = new EventDispatcher<IMinecraft, IDebugDisconnectedNotificationBody>();\r\n  private _onDebugStats = new EventDispatcher<IMinecraft, IDebugStatsNotificationBody>();\r\n  private _onDebugPaused = new EventDispatcher<IMinecraft, IDebugPausedNotificationBody>();\r\n  private _onDebugResumed = new EventDispatcher<IMinecraft, IDebugResumedNotificationBody>();\r\n  private _onDebugProfilerState = new EventDispatcher<IMinecraft, IDebugProfilerStateNotificationBody>();\r\n  private _onProfilerCapture = new EventDispatcher<IMinecraft, IProfilerCaptureNotificationBody>();\r\n\r\n  public get onWorldFolderReady() {\r\n    return this._onWorldStorageReady.asEvent();\r\n  }\r\n\r\n  public get onProjectFolderReady() {\r\n    return this._onProjectStorageReady.asEvent();\r\n  }\r\n\r\n  public get onDebugConnected() {\r\n    return this._onDebugConnected.asEvent();\r\n  }\r\n\r\n  public get onDebugDisconnected() {\r\n    return this._onDebugDisconnected.asEvent();\r\n  }\r\n\r\n  public get onDebugStats() {\r\n    return this._onDebugStats.asEvent();\r\n  }\r\n\r\n  public get onDebugPaused() {\r\n    return this._onDebugPaused.asEvent();\r\n  }\r\n\r\n  public get onDebugResumed() {\r\n    return this._onDebugResumed.asEvent();\r\n  }\r\n\r\n  public get onDebugProfilerState() {\r\n    return this._onDebugProfilerState.asEvent();\r\n  }\r\n\r\n  public get onProfilerCapture() {\r\n    return this._onProfilerCapture.asEvent();\r\n  }\r\n\r\n  public get onMessage() {\r\n    return this._onMessage.asEvent();\r\n  }\r\n\r\n  public get gameStateManager() {\r\n    return this._gameStateManager;\r\n  }\r\n\r\n  public get onRefreshed() {\r\n    return this._onRefreshed.asEvent();\r\n  }\r\n\r\n  public get onStateChanged() {\r\n    return this._onStateChanged.asEvent();\r\n  }\r\n\r\n  get activeProject() {\r\n    return this._project;\r\n  }\r\n\r\n  set activeProject(newProject: Project | undefined) {\r\n    this._project = newProject;\r\n  }\r\n\r\n  get canDeployFiles() {\r\n    return true;\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools) {\r\n    this._creatorTools = creatorTools;\r\n    this._gameStateManager = new GameStateManager(this._creatorTools);\r\n\r\n    this.dedicatedServerStorage = null;\r\n    this.state = CreatorToolsMinecraftState.none;\r\n\r\n    this._dsDeployBehaviorPacksFolder = null;\r\n\r\n    this.updateStatus();\r\n  }\r\n\r\n  async updateStatus() {\r\n    const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.getDedicatedServerStatus, \"\");\r\n\r\n    if (result) {\r\n      let resultNum = -1;\r\n      try {\r\n        resultNum = parseInt(result);\r\n      } catch (e) {}\r\n\r\n      if (resultNum >= 0) {\r\n        if (resultNum === 1) {\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.stopped);\r\n        } else if (resultNum === 2) {\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.initializing);\r\n        } else if (resultNum === 3) {\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.preparing);\r\n        } else if (resultNum === 4) {\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.starting);\r\n        } else if (resultNum === 5) {\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.started);\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.state;\r\n  }\r\n\r\n  async prepare(force?: boolean) {}\r\n\r\n  processExternalMessage(command: string, data: string) {\r\n    switch (command) {\r\n      case \"dedicatedServerStarted\":\r\n        this.notifyStateChanged(CreatorToolsMinecraftState.started);\r\n\r\n        if (!this._creatorTools.successfullyStartedMinecraftServer) {\r\n          this._creatorTools.successfullyStartedMinecraftServer = true;\r\n          this._creatorTools.save();\r\n        }\r\n\r\n        this._initWorldFolderOnStart();\r\n\r\n        break;\r\n\r\n      case \"dedicatedServerRefreshed\":\r\n        this.notifyRefreshed();\r\n        break;\r\n\r\n      case \"dedicatedServerStopped\":\r\n        this.notifyStateChanged(CreatorToolsMinecraftState.stopped);\r\n        break;\r\n\r\n      case \"dedicatedServerGameEvents\":\r\n        this.notifyGameEvents(data);\r\n        break;\r\n\r\n      case \"dedicatedServerMessage\":\r\n        this._creatorTools.notifyStatusUpdate(\"Server: \" + data, StatusTopic.minecraft);\r\n        break;\r\n\r\n      case \"dedicatedServerError\":\r\n        this._creatorTools.notifyStatusUpdate(\"Server Error: \" + data, StatusTopic.minecraft);\r\n        break;\r\n\r\n      case \"dedicatedServerDebugConnected\":\r\n        try {\r\n          const connBody = JSON.parse(data) as IDebugConnectedNotificationBody;\r\n          this._onDebugConnected.dispatch(this, connBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugConnected IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerDebugDisconnected\":\r\n        try {\r\n          const discBody = JSON.parse(data) as IDebugDisconnectedNotificationBody;\r\n          this._onDebugDisconnected.dispatch(this, discBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugDisconnected IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerDebugStats\":\r\n        try {\r\n          const statsBody = JSON.parse(data) as IDebugStatsNotificationBody;\r\n          this._onDebugStats.dispatch(this, statsBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugStats IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerDebugPaused\":\r\n        try {\r\n          const pauseBody = JSON.parse(data) as IDebugPausedNotificationBody;\r\n          this._onDebugPaused.dispatch(this, pauseBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugPaused IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerDebugResumed\":\r\n        try {\r\n          const resumeBody = JSON.parse(data) as IDebugResumedNotificationBody;\r\n          this._onDebugResumed.dispatch(this, resumeBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugResumed IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerDebugProfilerState\":\r\n        try {\r\n          const profStateBody = JSON.parse(data) as IDebugProfilerStateNotificationBody;\r\n          this._onDebugProfilerState.dispatch(this, profStateBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugProfilerState IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerProfilerCapture\":\r\n        try {\r\n          const captBody = JSON.parse(data) as IProfilerCaptureNotificationBody;\r\n          this._onProfilerCapture.dispatch(this, captBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse profilerCapture IPC: \" + e);\r\n        }\r\n        break;\r\n    }\r\n  }\r\n\r\n  async initialize() {\r\n    await this.start();\r\n  }\r\n\r\n  get dedicatedServerBehaviorPacksFolder(): IFolder | null {\r\n    return this._dsDeployBehaviorPacksFolder;\r\n  }\r\n\r\n  private notifyGameEvents(data: string) {\r\n    let obj = undefined;\r\n\r\n    try {\r\n      obj = JSON.parse(data);\r\n    } catch (e) {}\r\n\r\n    if (!obj || !obj.length) {\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < obj.length; i++) {\r\n      const event = obj[i];\r\n\r\n      this._gameStateManager?.handleEvent(event);\r\n    }\r\n  }\r\n\r\n  private _updateDedicatedServerStorage() {\r\n    if (\r\n      this._creatorTools.ensureLocalFolder === undefined ||\r\n      !AppServiceProxy.hasAppService ||\r\n      this._creatorTools.dedicatedServerPath === undefined\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const folder = this._creatorTools.ensureLocalFolder(this._creatorTools.dedicatedServerPath);\r\n\r\n    this.dedicatedServerStorage = folder.storage;\r\n\r\n    if (this.dedicatedServerStorage != null) {\r\n      this._dsDeployBehaviorPacksFolder =\r\n        this.dedicatedServerStorage.rootFolder.ensureFolder(\"development_behavior_packs\");\r\n    } else {\r\n      this._dsDeployBehaviorPacksFolder = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Send a debug pause command to the main process.\r\n   */\r\n  async debugPause(): Promise<void> {\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.debugPause, \"\");\r\n  }\r\n\r\n  /**\r\n   * Send a debug resume command to the main process.\r\n   */\r\n  async debugResume(): Promise<void> {\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.debugResume, \"\");\r\n  }\r\n\r\n  /**\r\n   * Send a debug start profiler command to the main process.\r\n   */\r\n  async debugStartProfiler(): Promise<void> {\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.debugStartProfiler, \"\");\r\n  }\r\n\r\n  /**\r\n   * Send a debug stop profiler command to the main process.\r\n   */\r\n  async debugStopProfiler(): Promise<void> {\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.debugStopProfiler, \"\");\r\n  }\r\n\r\n  /**\r\n   * When the dedicated server starts, query the main process for the world folder path\r\n   * via IPC so that the world map and debug stats panels appear in MinecraftDisplay\r\n   * immediately, without requiring a deploy operation first.\r\n   */\r\n  private async _initWorldFolderOnStart() {\r\n    if (this.worldFolder) {\r\n      return; // Already set from a previous deploy\r\n    }\r\n\r\n    // Ask the main process for the world folder path - this works regardless of\r\n    // whether dedicatedServerPath is set (auto mode vs manual mode)\r\n    const worldPath = await AppServiceProxy.sendAsync(AppServiceProxyCommands.getDedicatedServerWorldDeployDir, \"\");\r\n\r\n    if (worldPath && worldPath.length > 0 && this._creatorTools.ensureLocalFolder) {\r\n      const worldFolder = this._creatorTools.ensureLocalFolder(worldPath);\r\n\r\n      this.worldFolder = worldFolder;\r\n      this._onWorldStorageReady.dispatch(this, worldFolder);\r\n    }\r\n  }\r\n\r\n  public notifyStateChanged(newVal: CreatorToolsMinecraftState) {\r\n    this.state = newVal;\r\n\r\n    this._onStateChanged.dispatch(this, newVal);\r\n  }\r\n\r\n  public notifyRefreshed(newVal?: CreatorToolsMinecraftState) {\r\n    if (newVal) {\r\n      this.state = newVal;\r\n    }\r\n\r\n    this._onRefreshed.dispatch(this, this.state);\r\n  }\r\n\r\n  async start() {\r\n    const path = this.getDedicatedServerSyntax();\r\n\r\n    this.notifyStateChanged(CreatorToolsMinecraftState.starting);\r\n\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.startDedicatedServer, path);\r\n  }\r\n\r\n  async prepareDedicatedServer(project: Project) {\r\n    await this.syncWithDeployment();\r\n    return await this.deployDedicatedServerWorld(project);\r\n  }\r\n\r\n  async restartDedicatedServer(project: Project) {\r\n    await this.stop();\r\n\r\n    await this.prepareDedicatedServer(project);\r\n\r\n    await this.start();\r\n  }\r\n\r\n  canPrepare() {\r\n    return true;\r\n  }\r\n\r\n  async prepareAndStart(push: MinecraftPush) {\r\n    let worldName = undefined;\r\n\r\n    if (this._project) {\r\n      worldName = await this.prepareDedicatedServer(this._project);\r\n    }\r\n\r\n    await this.start();\r\n\r\n    return {\r\n      type: PrepareAndStartResultType.started,\r\n      worldName: worldName,\r\n    };\r\n  }\r\n\r\n  async syncWithDeployment() {\r\n    if (this._creatorTools.ensureLocalFolder == null) {\r\n      throw new Error(\"This instance doesn't support deployment\");\r\n    }\r\n\r\n    if (!this._project) {\r\n      return;\r\n    }\r\n\r\n    const folderPath = await AppServiceProxy.sendAsync(AppServiceProxyCommands.getDedicatedServerProjectDeployDir, \"\");\r\n\r\n    if (folderPath && folderPath.length > 0) {\r\n      const deployFolder = this._creatorTools.ensureLocalFolder(folderPath);\r\n\r\n      const deployFolderExists = deployFolder;\r\n\r\n      if (deployFolderExists) {\r\n        await ProjectExporter.deployProject(this._creatorTools, this._project, deployFolder);\r\n      }\r\n    }\r\n  }\r\n\r\n  async runCommand(command: string) {\r\n    const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.dedicatedServerCommand, command);\r\n\r\n    return result;\r\n  }\r\n\r\n  async runActionSet(actionSet: IActionSetData): Promise<any> {\r\n    return undefined;\r\n  }\r\n\r\n  async deployDedicatedServerWorld(project: Project) {\r\n    if (this.dedicatedServerStorage === null) {\r\n      return;\r\n    }\r\n\r\n    const worldFolderName = project.deployWorldId;\r\n    const worldDisplayName = project.name + \" _mct\";\r\n    const worldFolder = this.dedicatedServerStorage.rootFolder.ensureFolder(\"worlds\").ensureFolder(worldFolderName);\r\n\r\n    await worldFolder.ensureExists();\r\n\r\n    await ProjectExporter.syncFlatPackRefWorldTo(this._creatorTools, project, worldFolder, worldDisplayName);\r\n\r\n    await worldFolder.saveAll();\r\n\r\n    await project.save();\r\n\r\n    this.worldFolder = worldFolder;\r\n    this._onWorldStorageReady.dispatch(this, worldFolder);\r\n\r\n    return worldDisplayName;\r\n  }\r\n\r\n  getDedicatedServerSyntax() {\r\n    if (!this._creatorTools.worldSettings) {\r\n      Log.debugAlert(\"World settings are not defined.\");\r\n      throw new Error();\r\n    }\r\n\r\n    if (\r\n      this._creatorTools.dedicatedServerMode !== DedicatedServerMode.auto &&\r\n      (this._creatorTools.dedicatedServerPath === null || this._creatorTools.dedicatedServerPath === undefined)\r\n    ) {\r\n      Log.debugAlert(\"Server folder path is not defined, and the path cannot be set.\");\r\n      throw new Error();\r\n    }\r\n\r\n    let path = this._creatorTools.dedicatedServerPath;\r\n\r\n    if (!path) {\r\n      path = \"\";\r\n    }\r\n\r\n    let worldSettings: IWorldSettings = this._creatorTools.worldSettings;\r\n\r\n    if (this._project && this._project.worldSettings) {\r\n      if (this._project.worldSettings.useCustomSettings) {\r\n        worldSettings = this._project.worldSettings;\r\n      }\r\n    }\r\n\r\n    if (!worldSettings.name) {\r\n      worldSettings.name = \"world\";\r\n    }\r\n\r\n    const mess: IMinecraftStartMessage = {\r\n      path: Utilities.ensureEndsWithBackSlash(path),\r\n      iagree: this._creatorTools\r\n        .iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula\r\n        ? true\r\n        : false,\r\n      mode: this._creatorTools.dedicatedServerMode,\r\n      track: this._creatorTools.track,\r\n      worldSettings: worldSettings,\r\n    };\r\n\r\n    return JSON.stringify(mess);\r\n  }\r\n\r\n  async stop() {\r\n    const path = this.getDedicatedServerSyntax();\r\n\r\n    this.notifyStateChanged(CreatorToolsMinecraftState.stopping);\r\n\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.stopDedicatedServer, path);\r\n  }\r\n}\r\n", "import CreatorTools, { CreatorToolsMinecraftErrorStatus, CreatorToolsMinecraftState } from \"../app/CreatorTools\";\r\nimport IMinecraft, { IMinecraftMessage, PrepareAndStartResultType } from \"../app/IMinecraft\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport MinecraftPush from \"../app/MinecraftPush\";\r\nimport GameStateManager from \"../minecraft/GameStateManager\";\r\nimport Log from \"../core/Log\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport { MinecraftGameConnectionMode } from \"../app/ICreatorToolsData\";\r\nimport ProjectExporter from \"../app/ProjectExporter\";\r\nimport { ICommandResponseBody } from \"../minecraft/ICommandResponse\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\n\r\nexport default class MinecraftGameProxyMinecraft implements IMinecraft {\r\n  private _creatorTools: CreatorTools;\r\n  state: CreatorToolsMinecraftState;\r\n  private _onStateChanged = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _onRefreshed = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _project: Project | undefined;\r\n  private _gameStateManager: GameStateManager;\r\n\r\n  errorStatus?: CreatorToolsMinecraftErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  worldFolder: IFolder | undefined;\r\n  projectFolder: IFolder | undefined;\r\n  worldContentStorage: IStorage | undefined;\r\n  worldProject: Project | undefined;\r\n\r\n  private _onWorldFolderReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onProjectFolderReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onMessage = new EventDispatcher<IMinecraft, IMinecraftMessage>();\r\n\r\n  public get onWorldFolderReady() {\r\n    return this._onWorldFolderReady.asEvent();\r\n  }\r\n\r\n  public get onProjectFolderReady() {\r\n    return this._onProjectFolderReady.asEvent();\r\n  }\r\n\r\n  public get onMessage() {\r\n    return this._onMessage.asEvent();\r\n  }\r\n\r\n  get canDeployFiles() {\r\n    return this._creatorTools.minecraftGameMode !== MinecraftGameConnectionMode.remoteMinecraft;\r\n  }\r\n\r\n  public get onRefreshed() {\r\n    return this._onRefreshed.asEvent();\r\n  }\r\n\r\n  public get onStateChanged() {\r\n    return this._onStateChanged.asEvent();\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools) {\r\n    this._creatorTools = creatorTools;\r\n    this._gameStateManager = new GameStateManager(this._creatorTools);\r\n\r\n    this.state = CreatorToolsMinecraftState.none;\r\n  }\r\n\r\n  async updateStatus() {\r\n    return this.state;\r\n  }\r\n\r\n  get activeProject() {\r\n    return this._project;\r\n  }\r\n\r\n  set activeProject(newProject: Project | undefined) {\r\n    this._project = newProject;\r\n  }\r\n\r\n  public get gameStateManager() {\r\n    return this._gameStateManager;\r\n  }\r\n\r\n  public notifyStateChanged(newVal: CreatorToolsMinecraftState) {\r\n    this.state = newVal;\r\n\r\n    this._onStateChanged.dispatch(this, newVal);\r\n  }\r\n\r\n  async initialize() {\r\n    await this.start();\r\n  }\r\n\r\n  async prepare(force?: boolean) {}\r\n\r\n  async pushWorld() {\r\n    if (!this._creatorTools || this._creatorTools.deploymentStorage === null || !this._project) {\r\n      return;\r\n    }\r\n\r\n    const worldFolderName = this._project.deployWorldId;\r\n    const worldDisplayName = this._project.name + \" _mct\";\r\n\r\n    const worldsFolder = await ProjectExporter.ensureMinecraftWorldsFolder(this._creatorTools);\r\n\r\n    if (!worldsFolder) {\r\n      Log.debug(\"Could not find a Minecraft world.\");\r\n      return;\r\n    }\r\n\r\n    const worldFolder = worldsFolder.ensureFolder(worldFolderName);\r\n\r\n    await worldFolder.ensureExists();\r\n\r\n    await ProjectExporter.syncFlatPackRefWorldTo(this._creatorTools, this._project, worldFolder, worldDisplayName);\r\n\r\n    await worldFolder.saveAll();\r\n\r\n    await this._project.save();\r\n\r\n    return worldDisplayName;\r\n  }\r\n\r\n  async syncWithDeployment() {\r\n    const dt = this._creatorTools.defaultDeploymentTarget;\r\n\r\n    if (\r\n      dt == null ||\r\n      dt.deployBehaviorPacksFolder == null ||\r\n      this._creatorTools.minecraftGameMode === MinecraftGameConnectionMode.remoteMinecraft\r\n    ) {\r\n      throw new Error(\"This instance doesn't support deployment\");\r\n    }\r\n\r\n    if (!this._project) {\r\n      return;\r\n    }\r\n\r\n    let isAvailable = dt.storage.available;\r\n\r\n    if (isAvailable === undefined) {\r\n      isAvailable = await dt.storage.getAvailable();\r\n    }\r\n\r\n    if (!isAvailable) {\r\n      return;\r\n    }\r\n\r\n    const deployFolderExists = await dt.deployBehaviorPacksFolder.exists();\r\n\r\n    if (deployFolderExists) {\r\n      await ProjectExporter.deployProject(this._creatorTools, this._project, dt.storage.rootFolder);\r\n    }\r\n  }\r\n\r\n  processExternalMessage(command: string, data: string) {\r\n    switch (command) {\r\n      case \"wsevent\":\r\n        let obj = undefined;\r\n\r\n        try {\r\n          obj = JSON.parse(data);\r\n        } catch (e) {}\r\n\r\n        if (obj) {\r\n          this._gameStateManager.handleEvent(obj);\r\n        }\r\n\r\n        break;\r\n\r\n      case \"webSocketCommandComplete\":\r\n        Log.message(data);\r\n        break;\r\n\r\n      case \"webSocketConnected\":\r\n        this.notifyStateChanged(CreatorToolsMinecraftState.started);\r\n\r\n        if (!this._creatorTools.successfullyConnectedWebSocketToMinecraft) {\r\n          this._creatorTools.successfullyConnectedWebSocketToMinecraft = true;\r\n          this._creatorTools.save();\r\n        }\r\n        break;\r\n\r\n      case \"webSocketDisconnected\":\r\n        this.notifyStateChanged(CreatorToolsMinecraftState.disconnected);\r\n        break;\r\n    }\r\n  }\r\n\r\n  async runActionSet(actionSet: IActionSetData): Promise<any> {\r\n    return undefined;\r\n  }\r\n\r\n  async runCommand(command: string) {\r\n    if (!AppServiceProxy.hasAppService && Utilities.isDebug) {\r\n      // simulate a command in debug\r\n      Log.debugAlert(\"Simulating command to Minecraft:\\n\\n\" + command + \"\\n\\n\");\r\n\r\n      if (command.indexOf(\"fail\") >= 0) {\r\n        return JSON.stringify({\r\n          statusCode: -2147483648,\r\n          statusMessage: \"Failed command \" + command,\r\n        });\r\n      } else {\r\n        return JSON.stringify({\r\n          statusCode: 0,\r\n          statusMessage: \"Success command \" + command,\r\n          position: {\r\n            x: -100,\r\n            y: 100,\r\n            z: -100,\r\n          },\r\n        });\r\n      }\r\n    } else {\r\n      let result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.webSocketCommand, command);\r\n\r\n      if (result !== undefined) {\r\n        this.logCommandResult(result);\r\n      }\r\n\r\n      return result;\r\n    }\r\n  }\r\n\r\n  logCommandResult(result: string) {\r\n    if (result) {\r\n      if (result.indexOf(\"{\") >= 0) {\r\n        try {\r\n          const commandResponse: ICommandResponseBody = JSON.parse(result);\r\n\r\n          if (commandResponse.statusMessage) {\r\n            this._creatorTools.notifyStatusUpdate(\"Minecraft Game: \" + commandResponse.statusMessage);\r\n            return;\r\n          }\r\n        } catch (e: any) {\r\n          Log.fail(e);\r\n        }\r\n      }\r\n    }\r\n    this._creatorTools.notifyStatusUpdate(\"Minecraft Game: \" + result);\r\n  }\r\n\r\n  canPrepare() {\r\n    return true;\r\n  }\r\n\r\n  async prepareAndStart(push: MinecraftPush) {\r\n    let worldName = undefined;\r\n\r\n    if (push.project) {\r\n      this._project = push.project;\r\n\r\n      await this.syncWithDeployment();\r\n    }\r\n\r\n    if (push.worldType) {\r\n      worldName = await this.pushWorld();\r\n    }\r\n\r\n    await this.start();\r\n\r\n    return {\r\n      type: PrepareAndStartResultType.started,\r\n      worldName: worldName,\r\n    };\r\n  }\r\n\r\n  async stop() {}\r\n\r\n  async start() {\r\n    if (!AppServiceProxy.hasAppService && Utilities.isDebug) {\r\n      this.notifyStateChanged(CreatorToolsMinecraftState.stopped);\r\n    } else if (\r\n      this.state === CreatorToolsMinecraftState.none ||\r\n      this.state === CreatorToolsMinecraftState.error ||\r\n      this.state === CreatorToolsMinecraftState.disconnected\r\n    ) {\r\n      this.notifyStateChanged(CreatorToolsMinecraftState.initializing);\r\n\r\n      AppServiceProxy.sendAsync(AppServiceProxyCommands.startWebSocketServer, \"\").then(\r\n        async (result: string | undefined) => {\r\n          const getMinecraftGameProjectDeployDir = await AppServiceProxy.sendAsync(\r\n            AppServiceProxyCommands.getMinecraftGameProjectDeployDir,\r\n            this._creatorTools.minecraftGameMode\r\n          );\r\n\r\n          const getMinecraftGameWorldDeployDir = await AppServiceProxy.sendAsync(\r\n            AppServiceProxyCommands.getMinecraftGameWorldDeployDir,\r\n            this._creatorTools.minecraftGameMode\r\n          );\r\n\r\n          if (\r\n            getMinecraftGameWorldDeployDir &&\r\n            getMinecraftGameWorldDeployDir.length > 0 &&\r\n            this._creatorTools.ensureLocalFolder\r\n          ) {\r\n            this.worldFolder = this._creatorTools.ensureLocalFolder(getMinecraftGameWorldDeployDir);\r\n\r\n            this._onWorldFolderReady.dispatch(this, this.worldFolder);\r\n          }\r\n\r\n          if (\r\n            getMinecraftGameProjectDeployDir &&\r\n            getMinecraftGameProjectDeployDir.length > 0 &&\r\n            this._creatorTools.ensureLocalFolder\r\n          ) {\r\n            this.projectFolder = this._creatorTools.ensureLocalFolder(getMinecraftGameProjectDeployDir);\r\n\r\n            this._onProjectFolderReady.dispatch(this, this.projectFolder);\r\n          }\r\n\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.initialized);\r\n        }\r\n      );\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { constants } from \"../core/Constants\";\r\nimport IProjectInfoData from \"../info/IProjectInfoData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport { IPackageReference } from \"../minecraft/IWorldSettings\";\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport CreatorTools from \"./CreatorTools\";\r\nimport Project from \"./Project\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport enum PackageType {\r\n  packSet = 0,\r\n  world = 1,\r\n  worldTemplate = 2,\r\n  generic = 3,\r\n  project = 4,\r\n}\r\n\r\nexport default class Package {\r\n  storagePath: string;\r\n  name: string;\r\n  baseName: string;\r\n  type: PackageType;\r\n  file?: IFile;\r\n  reportFile?: IFile;\r\n  cacheFolder?: IFolder;\r\n  data?: IProjectInfoData;\r\n\r\n  get isWorldType() {\r\n    return this.type === PackageType.world || this.type === PackageType.worldTemplate;\r\n  }\r\n\r\n  constructor(name: string, path: string) {\r\n    this.name = name;\r\n    this.storagePath = path;\r\n    this.baseName = StorageUtilities.getBaseFromName(name);\r\n    this.type = this._getPackTypeFromPath(path);\r\n  }\r\n\r\n  static ensureMinecraftCreatorToolsPackageReference(packRefs: IPackageReference[]) {\r\n    for (const packRef of packRefs) {\r\n      if (packRef.behaviorPackReferences) {\r\n        for (const bpRef of packRef.behaviorPackReferences) {\r\n          if (bpRef.uuid === Database.creatorToolsIngameBehaviorPackUUID) {\r\n            return;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    packRefs.push({\r\n      name: \"creator_tools_ingame.mcaddon\",\r\n      behaviorPackReferences: [\r\n        { uuid: Database.creatorToolsIngameBehaviorPackUUID, version: Database.creatorToolsIngameBehaviorPackVersion },\r\n      ],\r\n      resourcePackReferences: [\r\n        { uuid: Database.creatorToolsIngameResourcePackUUID, version: Database.creatorToolsIngameResourcePackVersion },\r\n      ],\r\n    });\r\n\r\n    return packRefs;\r\n  }\r\n\r\n  _getPackTypeFromPath(path: string) {\r\n    const type = StorageUtilities.getTypeFromName(path);\r\n\r\n    switch (type) {\r\n      case \"mcworld\":\r\n        return PackageType.world;\r\n      case \"mcproject\":\r\n        return PackageType.project;\r\n      case \"mctemplate\":\r\n        return PackageType.worldTemplate;\r\n      case \"mcaddon\":\r\n      case \"mcpack\":\r\n        return PackageType.packSet;\r\n\r\n      default:\r\n        return PackageType.generic;\r\n    }\r\n  }\r\n\r\n  async ensureData(creatorTools: CreatorTools, file: IFile) {\r\n    this.file = file;\r\n\r\n    const summaryFile = file.parentFolder.ensureFile(file.name + \".report.html\");\r\n\r\n    const summaryFileExists = await summaryFile.exists();\r\n\r\n    let summaryObject: IProjectInfoData | undefined;\r\n\r\n    if (summaryFileExists) {\r\n      if (!summaryFile.isContentLoaded) {\r\n        await summaryFile.loadContent();\r\n      }\r\n\r\n      const content = summaryFile.content;\r\n\r\n      if (content && typeof content === \"string\") {\r\n        const adderFunctionDec = content.indexOf(\"function _addReportJson(\");\r\n        let adderFunction = content.indexOf(\"_addReportJson(\");\r\n\r\n        if (adderFunction >= 0) {\r\n          if (adderFunctionDec === adderFunction - 9) {\r\n            adderFunction = content.indexOf(\"_addReportJson(\", adderFunction + 10);\r\n          }\r\n\r\n          if (adderFunction >= 0) {\r\n            const endOfFunction = content.indexOf(\"</script>\", adderFunction);\r\n\r\n            if (endOfFunction > adderFunction) {\r\n              const previousEnd = content.lastIndexOf(\");\", endOfFunction);\r\n              if (previousEnd > adderFunction && previousEnd < endOfFunction) {\r\n                const jsonContent = content.substring(adderFunction + 15, previousEnd);\r\n\r\n                try {\r\n                  summaryObject = JSON.parse(jsonContent);\r\n                } catch (e) {}\r\n\r\n                if (summaryObject) {\r\n                  this.reportFile = summaryFile;\r\n                }\r\n\r\n                // if the report was generated by a different version, ignore it and regen a new one.\r\n                if (summaryObject && summaryObject.generatorVersion !== constants.version) {\r\n                  summaryObject = undefined;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!summaryObject) {\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent();\r\n      }\r\n\r\n      if (file.content && file.content instanceof Uint8Array) {\r\n        let packRootZipFolder = undefined;\r\n\r\n        if (!file.fileContainerStorage) {\r\n          const zipStorage = new ZipStorage();\r\n\r\n          zipStorage.storagePath = file.storageRelativePath + \"#\";\r\n\r\n          await zipStorage.loadFromUint8Array(file.content, file.name);\r\n\r\n          zipStorage.containerFile = file;\r\n          file.fileContainerStorage = zipStorage;\r\n        }\r\n\r\n        packRootZipFolder = file.fileContainerStorage.rootFolder;\r\n\r\n        const packProject = new Project(creatorTools, file.name, null);\r\n        packProject.setProjectFolder(packRootZipFolder);\r\n\r\n        await packProject.inferProjectItemsFromFiles();\r\n\r\n        const pis = packProject.indevInfoSet;\r\n\r\n        await pis.generateForProject();\r\n\r\n        const hash = await file.getHash();\r\n\r\n        const reportHtml = pis.getReportHtml(file.name, file.storageRelativePath, hash);\r\n\r\n        summaryFile.setContent(reportHtml, FileUpdateType.versionlessEdit);\r\n\r\n        await summaryFile.saveContent();\r\n\r\n        this.reportFile = summaryFile;\r\n\r\n        summaryObject = pis.getDataObject(file.name, file.storageRelativePath, hash);\r\n      }\r\n    }\r\n\r\n    if (summaryObject) {\r\n      this.data = summaryObject;\r\n    }\r\n  }\r\n\r\n  createReference(): IPackageReference {\r\n    const bpRefs: { uuid: string; version: number[] }[] = [];\r\n    const rpRefs: { uuid: string; version: number[] }[] = [];\r\n\r\n    if (this.data && this.data.items) {\r\n      for (let i = 0; i < this.data.items.length; i++) {\r\n        const item = this.data.items[i];\r\n\r\n        if (item.gId === \"PACK\" && item.gIx === 6 && item.d && typeof item.d === \"string\") {\r\n          const ref = this.getRefFromString(item.d);\r\n\r\n          if (ref) {\r\n            bpRefs.push(ref);\r\n          }\r\n        } else if (item.gId === \"PACK\" && item.gIx === 16 && item.d && typeof item.d === \"string\") {\r\n          const ref = this.getRefFromString(item.d);\r\n\r\n          if (ref) {\r\n            rpRefs.push(ref);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const packRef: IPackageReference = {\r\n      name: this.name,\r\n      hash: this.data?.sourceHash,\r\n      behaviorPackReferences: bpRefs,\r\n      resourcePackReferences: rpRefs,\r\n    };\r\n\r\n    return packRef;\r\n  }\r\n\r\n  getRefFromString(uuidPlusVersion: string) {\r\n    const sections = Utilities.splitUntil(uuidPlusVersion, \"|\", 1);\r\n\r\n    if (sections.length !== 2) {\r\n      return undefined;\r\n    }\r\n\r\n    const verNumbers = sections[1].split(\".\");\r\n\r\n    if (verNumbers.length !== 3) {\r\n      return undefined;\r\n    }\r\n\r\n    const targetVerNumbers = [];\r\n    try {\r\n      targetVerNumbers.push(parseInt(verNumbers[0]));\r\n      targetVerNumbers.push(parseInt(verNumbers[1]));\r\n      targetVerNumbers.push(parseInt(verNumbers[2]));\r\n    } catch (e) {}\r\n\r\n    if (targetVerNumbers.length !== 3) {\r\n      return undefined;\r\n    }\r\n\r\n    return { uuid: sections[0], version: targetVerNumbers };\r\n  }\r\n\r\n  matches(packName: string, isWorldFocused?: boolean) {\r\n    const packCoreName = this.name.toLowerCase();\r\n    const packBaseName = this.baseName.toLowerCase();\r\n\r\n    packName = packName.toLowerCase();\r\n\r\n    if (\r\n      (packBaseName.toLowerCase() === packName &&\r\n        (isWorldFocused === undefined ||\r\n          (isWorldFocused === true && (this.type === PackageType.world || this.type === PackageType.worldTemplate)) ||\r\n          (isWorldFocused === false && this.type !== PackageType.world && this.type !== PackageType.worldTemplate))) ||\r\n      packCoreName === packName\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CreatorTools, { CreatorToolsMinecraftErrorStatus, CreatorToolsMinecraftState } from \"./CreatorTools\";\r\nimport IMinecraft, { IMinecraftMessage, PrepareAndStartResultType } from \"./IMinecraft\";\r\nimport AppServiceProxy from \"../core/AppServiceProxy\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"./Project\";\r\nimport MinecraftPush from \"./MinecraftPush\";\r\nimport GameStateManager from \"../minecraft/GameStateManager\";\r\nimport Log from \"../core/Log\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport { MinecraftGameConnectionMode } from \"./ICreatorToolsData\";\r\nimport ProjectExporter from \"./ProjectExporter\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\n\r\nexport default class DeploymentStorageMinecraft implements IMinecraft {\r\n  private _creatorTools: CreatorTools;\r\n  state: CreatorToolsMinecraftState;\r\n  private _onStateChanged = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _onRefreshed = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _project: Project | undefined;\r\n  private _gameStateManager: GameStateManager;\r\n\r\n  errorStatus?: CreatorToolsMinecraftErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  worldFolder: IFolder | undefined;\r\n  projectFolder: IFolder | undefined;\r\n  worldContentStorage: IStorage | undefined;\r\n  worldProject: Project | undefined;\r\n\r\n  private _onWorldFolderReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onProjectFolderReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onMessage = new EventDispatcher<IMinecraft, IMinecraftMessage>();\r\n\r\n  public get onWorldFolderReady() {\r\n    return this._onWorldFolderReady.asEvent();\r\n  }\r\n\r\n  public get onProjectFolderReady() {\r\n    return this._onProjectFolderReady.asEvent();\r\n  }\r\n\r\n  public get onMessage() {\r\n    return this._onMessage.asEvent();\r\n  }\r\n\r\n  get canDeployFiles() {\r\n    return true;\r\n  }\r\n\r\n  public get onRefreshed() {\r\n    return this._onRefreshed.asEvent();\r\n  }\r\n\r\n  public get onStateChanged() {\r\n    return this._onStateChanged.asEvent();\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools) {\r\n    this._creatorTools = creatorTools;\r\n    this._gameStateManager = new GameStateManager(this._creatorTools);\r\n\r\n    this.state = CreatorToolsMinecraftState.none;\r\n  }\r\n\r\n  async updateStatus() {\r\n    return this.state;\r\n  }\r\n\r\n  get activeProject() {\r\n    return this._project;\r\n  }\r\n\r\n  set activeProject(newProject: Project | undefined) {\r\n    this._project = newProject;\r\n  }\r\n\r\n  public get gameStateManager() {\r\n    return this._gameStateManager;\r\n  }\r\n\r\n  public notifyStateChanged(newVal: CreatorToolsMinecraftState) {\r\n    this.state = newVal;\r\n\r\n    this._onStateChanged.dispatch(this, newVal);\r\n  }\r\n\r\n  async initialize() {\r\n    await this.start();\r\n  }\r\n\r\n  async prepare(force?: boolean): Promise<void> {\r\n    return;\r\n  }\r\n\r\n  async runCommand(command: string): Promise<string | undefined> {\r\n    return undefined;\r\n  }\r\n\r\n  async runActionSet(actionSet: IActionSetData): Promise<string | undefined> {\r\n    return undefined;\r\n  }\r\n\r\n  processExternalMessage(command: string, data: string) {}\r\n\r\n  async pushWorld() {\r\n    if (!this._creatorTools || this._creatorTools.deploymentStorage === null || !this._project) {\r\n      return;\r\n    }\r\n\r\n    const worldFolderName = this._project.deployWorldId;\r\n    const worldDisplayName = this._project.name + \" _mct\";\r\n\r\n    const worldsFolder = await ProjectExporter.ensureMinecraftWorldsFolder(this._creatorTools);\r\n\r\n    if (!worldsFolder) {\r\n      Log.debug(\"Could not find a Minecraft world.\");\r\n      return;\r\n    }\r\n\r\n    const worldFolder = worldsFolder.ensureFolder(worldFolderName);\r\n\r\n    await worldFolder.ensureExists();\r\n\r\n    await ProjectExporter.syncFlatPackRefWorldTo(this._creatorTools, this._project, worldFolder, worldDisplayName);\r\n\r\n    await worldFolder.saveAll();\r\n\r\n    await this._project.save();\r\n\r\n    return worldDisplayName;\r\n  }\r\n\r\n  async syncWithDeployment() {\r\n    const deploymentTarget = this._creatorTools.defaultDeploymentTarget;\r\n\r\n    if (\r\n      deploymentTarget === undefined ||\r\n      deploymentTarget.storage == null ||\r\n      deploymentTarget.deployBehaviorPacksFolder == null ||\r\n      this._creatorTools.minecraftGameMode === MinecraftGameConnectionMode.remoteMinecraft\r\n    ) {\r\n      throw new Error(\"This instance doesn't support deployment\");\r\n    }\r\n\r\n    if (!this._project) {\r\n      return;\r\n    }\r\n\r\n    let isAvailable = deploymentTarget.storage.available;\r\n\r\n    if (isAvailable === undefined) {\r\n      isAvailable = await deploymentTarget.storage.getAvailable();\r\n    }\r\n\r\n    if (!isAvailable) {\r\n      return;\r\n    }\r\n\r\n    const deployFolderExists = await deploymentTarget.deployBehaviorPacksFolder.exists();\r\n\r\n    if (deployFolderExists) {\r\n      await ProjectExporter.deployProject(this._creatorTools, this._project, deploymentTarget.storage.rootFolder);\r\n    }\r\n  }\r\n\r\n  canPrepare() {\r\n    return true;\r\n  }\r\n\r\n  async prepareAndStart(push: MinecraftPush) {\r\n    let worldName = undefined;\r\n\r\n    if (push.project) {\r\n      this._project = push.project;\r\n\r\n      await this.syncWithDeployment();\r\n    }\r\n\r\n    if (push.worldType) {\r\n      worldName = await this.pushWorld();\r\n    }\r\n\r\n    await this.start();\r\n\r\n    return {\r\n      type: PrepareAndStartResultType.started,\r\n      worldName: worldName,\r\n    };\r\n  }\r\n\r\n  async stop() {}\r\n\r\n  async start() {\r\n    if (!AppServiceProxy.hasAppService && Utilities.isDebug) {\r\n      this.notifyStateChanged(CreatorToolsMinecraftState.stopped);\r\n    } else if (\r\n      this.state === CreatorToolsMinecraftState.none ||\r\n      this.state === CreatorToolsMinecraftState.error ||\r\n      this.state === CreatorToolsMinecraftState.disconnected\r\n    ) {\r\n      this.notifyStateChanged(CreatorToolsMinecraftState.initializing);\r\n    }\r\n  }\r\n}\r\n", "import ElectronFolder from \"./ElectronFolder\";\r\nimport ElectronStorage from \"./ElectronStorage\";\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport FileBase from \"../storage/FileBase\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport StorageUtilities, { EncodingType } from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport interface IFStatResult {\r\n  isDirectory: boolean;\r\n  isFile: boolean;\r\n  mtime: string;\r\n  ctime: string;\r\n  size: number;\r\n}\r\n\r\nexport default class ElectronFile extends FileBase implements IFile {\r\n  _name: string;\r\n  _parentFolder: ElectronFolder;\r\n  localPersistDateTime?: number;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._parentFolder.fullPath;\r\n\r\n    if (!path.endsWith(ElectronStorage.folderDelimiter) && !path.endsWith(\">\")) {\r\n      path += ElectronStorage.folderDelimiter;\r\n    }\r\n\r\n    return path + this.name;\r\n  }\r\n\r\n  get parentFolder(): ElectronFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get isContentLoaded(): boolean {\r\n    return this.lastLoadedOrSaved != null || this.modified != null;\r\n  }\r\n\r\n  constructor(parentFolder: ElectronFolder, folderName: string) {\r\n    super();\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = folderName;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    var stat = undefined;\r\n\r\n    let statResultStr: string | undefined = \"\";\r\n\r\n    let mtime: number | undefined = undefined;\r\n\r\n    try {\r\n      statResultStr = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsStat, this.fullPath);\r\n\r\n      if (statResultStr) {\r\n        stat = JSON.parse(statResultStr) as IFStatResult;\r\n        mtime = Date.parse(stat.mtime);\r\n      }\r\n    } catch (e) {\r\n      Log.fail(\"Failed to parse statistics for \" + this.fullPath + \". \" + statResultStr);\r\n    }\r\n\r\n    if (this.localPersistDateTime && stat && mtime && mtime > this.localPersistDateTime) {\r\n      await this.reloadAfterExternalUpdate();\r\n    }\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsExists, this.fullPath);\r\n\r\n    return result === \"true\";\r\n  }\r\n\r\n  async loadContent(force: boolean): Promise<Date> {\r\n    if (force || this.lastLoadedOrSaved == null) {\r\n      const encoding = StorageUtilities.getEncodingByFileName(this._name);\r\n\r\n      if (encoding === EncodingType.ByteBuffer) {\r\n        // Log.debug(\"ElecF loading '\" + this.fullPath + \"' as binary.\");\r\n        const byteResult = await AppServiceProxy.sendAsyncBinary(AppServiceProxyCommands.fsReadFile, this.fullPath);\r\n\r\n        if (byteResult instanceof ArrayBuffer) {\r\n          this._content = new Uint8Array(byteResult as ArrayBuffer);\r\n        } else if (byteResult === undefined) {\r\n          this._content = null;\r\n        } else {\r\n          this._content = byteResult;\r\n        }\r\n      } else {\r\n        const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsReadUtf8File, this.fullPath);\r\n\r\n        if (result === undefined) {\r\n          this._content = null;\r\n        } else {\r\n          this._content = result;\r\n        }\r\n\r\n        // Log.debug(\"ElecF loading '\" + this.fullPath + \"' as text - \" + (result ? result.length + \" chars.\" : \" empty\"));\r\n      }\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    const areEqual = StorageUtilities.contentsAreEqual(this._content, newContent);\r\n    if (newContent === null) {\r\n      Log.fail(\"Setting null content for \" + this.storageRelativePath);\r\n    }\r\n\r\n    if (areEqual) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.lastLoadedOrSaved) {\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.lastLoadedOrSaved = new Date(this.lastLoadedOrSaved.getTime() - 1);\r\n    }\r\n\r\n    let oldContent = this._content;\r\n\r\n    this._content = newContent;\r\n\r\n    this.contentWasModified(oldContent, updateType, sourceId);\r\n\r\n    return true;\r\n  }\r\n\r\n  async saveContent(): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (this.content != null) {\r\n      this.parentFolder.ensureExists();\r\n\r\n      const encoding = StorageUtilities.getEncodingByFileName(this._name);\r\n\r\n      if (encoding === EncodingType.ByteBuffer) {\r\n        // Log.verbose(\"Saving '\" + this.fullPath + \"' as binary. size: \" + this.content.length);\r\n\r\n        await AppServiceProxy.sendBinaryAsync(AppServiceProxyCommands.fsWriteFile, {\r\n          path: this.fullPath,\r\n          content: this.content,\r\n        });\r\n      } else {\r\n        // Log.verbose(\"Saving '\" + this.fullPath + \"' as text. size: \" + this.content.length);\r\n\r\n        await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsWriteUtf8File, {\r\n          path: this.fullPath,\r\n          content: this.content,\r\n        });\r\n      }\r\n    }\r\n\r\n    this.lastLoadedOrSaved = new Date();\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (skipRemoveFromParent !== true) {\r\n      this._parentFolder._removeFile(this);\r\n    }\r\n\r\n    this._recycleItem(this.fullPath);\r\n\r\n    return true;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFileName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFileName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n    if (newParentFolder.files[newFileName] !== undefined) {\r\n      throw new Error(\"File exists at specified path.\");\r\n    }\r\n\r\n    await this.loadContent(false);\r\n\r\n    const originalPath = this.fullPath;\r\n\r\n    this._name = newFileName;\r\n    this._parentFolder = newParentFolder as ElectronFolder;\r\n\r\n    this.modified = new Date();\r\n\r\n    (newParentFolder as ElectronFolder)._addExistingFile(this);\r\n\r\n    this._recycleItem(originalPath);\r\n\r\n    return true;\r\n  }\r\n\r\n  async _recycleItem(path: string) {\r\n    AppServiceProxy.sendAsync(AppServiceProxyCommands.shellRecycleItem, path);\r\n  }\r\n}\r\n", "import IFolder from \"./../storage/IFolder\";\r\nimport IFile from \"./../storage/IFile\";\r\nimport ElectronFile, { IFStatResult } from \"./ElectronFile\";\r\nimport ElectronStorage from \"./ElectronStorage\";\r\nimport StorageUtilities from \"./../storage/StorageUtilities\";\r\nimport FolderBase from \"./../storage/FolderBase\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport Log from \"./../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class ElectronFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _path: string;\r\n\r\n  folders: { [id: string]: ElectronFolder | undefined };\r\n  files: { [id: string]: ElectronFile | undefined };\r\n  private _storage: ElectronStorage;\r\n  private _parentFolder: ElectronFolder | null;\r\n\r\n  get storage(): ElectronStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): ElectronFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._path;\r\n\r\n    if (!path.endsWith(ElectronStorage.folderDelimiter) && !path.endsWith(\">\")) {\r\n      path += ElectronStorage.folderDelimiter;\r\n    }\r\n\r\n    return path + this.name;\r\n  }\r\n\r\n  constructor(storage: ElectronStorage, parentFolder: ElectronFolder | null, parentPath: string, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._path = parentPath;\r\n    this._name = folderName;\r\n\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for electron storage\r\n  }\r\n\r\n  ensureFile(name: string): ElectronFile {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      Log.unsupportedToken(nameCanon);\r\n      throw new Error();\r\n    }\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile == null) {\r\n      candFile = new ElectronFile(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  _removeFile(file: IFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    if (Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      const candFile = this.files[nameCanon];\r\n\r\n      Log.assert(candFile === file, \"Files don't match.\");\r\n\r\n      this.files[nameCanon] = undefined;\r\n\r\n      this.storage.notifyFileRemoved(this.storageRelativePath + file.name);\r\n    }\r\n  }\r\n\r\n  _addExistingFile(file: ElectronFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n    if (Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      this.files[nameCanon] = file;\r\n    }\r\n  }\r\n\r\n  ensureFolder(name: string): ElectronFolder {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      Log.unsupportedToken(nameCanon);\r\n      throw new Error();\r\n    }\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new ElectronFolder(this._storage, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    if (this.storage.available !== true) {\r\n      const res = await this.storage.getAvailable();\r\n\r\n      if (!res) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    if (this.storage.available === false) {\r\n      return false;\r\n    }\r\n\r\n    const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsFolderExists, this.fullPath);\r\n\r\n    return result === \"true\";\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsDeleteFolder, this.fullPath);\r\n\r\n    if (result === \"true\") {\r\n      this.removeMeFromParent();\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async ensureExists(): Promise<boolean> {\r\n    Log.assert(this.fullPath.lastIndexOf(\"<\") < 1, \"Tokens in a folder path: \" + this.fullPath);\r\n\r\n    const exists = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsFolderExists, this.fullPath);\r\n\r\n    if (exists !== \"true\") {\r\n      try {\r\n        await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsMkdir, this.fullPath);\r\n      } catch (e) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  _addExistingFolderToParent(folder: ElectronFolder) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      Log.unsupportedToken(nameCanon);\r\n      throw new Error();\r\n    }\r\n\r\n    this.folders[nameCanon] = folder;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const oldFullPath = this.fullPath;\r\n\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFolderName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFolderName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    if (this.isSameFolder(newStorageRelativePath)) {\r\n      return false;\r\n    }\r\n\r\n    if (this._parentFolder !== null) {\r\n      const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n      if (newParentFolder.folders[newFolderName] !== undefined) {\r\n        throw new Error(\"Folder exists at specified path.\");\r\n      }\r\n\r\n      const newFullPath =\r\n        (newParentFolder as ElectronFolder).fullPath + ElectronStorage.folderDelimiter + newFolderName;\r\n\r\n      // Perform the disk rename BEFORE modifying in-memory tree.\r\n      // If the disk rename fails, the in-memory tree stays consistent.\r\n      const result = await AppServiceProxy.sendAsync(\r\n        AppServiceProxyCommands.fsRenameFolder,\r\n        oldFullPath + \"|\" + newFullPath\r\n      );\r\n\r\n      if (result !== \"true\") {\r\n        return false;\r\n      }\r\n\r\n      // Disk rename succeeded \u2014 now update in-memory tree\r\n      const previousStoragePath = this.storageRelativePath;\r\n\r\n      this._parentFolder._removeExistingFolderFromParent(this);\r\n\r\n      this._parentFolder = newParentFolder as ElectronFolder;\r\n\r\n      this._name = newFolderName;\r\n      (newParentFolder as ElectronFolder)._addExistingFolderToParent(this);\r\n\r\n      // Notify listeners about the folder move\r\n      this.notifyFolderMoved({\r\n        folder: this,\r\n        previousStoragePath: previousStoragePath,\r\n        newStoragePath: this.storageRelativePath,\r\n      });\r\n\r\n      return true;\r\n    }\r\n\r\n    this._name = newFolderName;\r\n\r\n    const newFullPath = this.fullPath;\r\n\r\n    const result = await AppServiceProxy.sendAsync(\r\n      AppServiceProxyCommands.fsRenameFolder,\r\n      oldFullPath + \"|\" + newFullPath\r\n    );\r\n\r\n    return result === \"true\";\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    return this.ensureFile(name);\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    // Log.debug(\"Reading details on folder '\" + this.fullPath + \"'\");\r\n    const strResult = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsReaddir, this.fullPath);\r\n\r\n    if (strResult !== undefined) {\r\n      const results = JSON.parse(strResult);\r\n\r\n      if (results) {\r\n        for (const fileOrFolderName of results) {\r\n          let filePath = this.fullPath;\r\n\r\n          if (!filePath.endsWith(ElectronStorage.folderDelimiter)) {\r\n            filePath += ElectronStorage.folderDelimiter;\r\n          }\r\n\r\n          filePath += fileOrFolderName;\r\n\r\n          var stat = undefined;\r\n\r\n          let statResultStr: string | undefined = \"\";\r\n          let mtime: number | undefined = undefined;\r\n          try {\r\n            statResultStr = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsStat, filePath);\r\n\r\n            if (statResultStr) {\r\n              stat = JSON.parse(statResultStr) as IFStatResult;\r\n              mtime = Date.parse(stat.mtime);\r\n            }\r\n          } catch (e) {\r\n            Log.fail(\"Failed to parse statistics for \" + fileOrFolderName + \". \" + statResultStr);\r\n          }\r\n\r\n          if (stat) {\r\n            if (stat.isDirectory && !StorageUtilities.isIgnorableFolder(fileOrFolderName)) {\r\n              this.ensureFolder(fileOrFolderName);\r\n            } else if (stat.isFile && StorageUtilities.isUsableFile(filePath)) {\r\n              const file = this.ensureFile(fileOrFolderName);\r\n              file.localPersistDateTime = mtime;\r\n\r\n              if (stat.mtime) {\r\n                file.modifiedAtLoad = new Date(stat.mtime);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n}\r\n", "import ElectronFolder from \"./ElectronFolder\";\r\nimport StorageBase from \"./../storage/StorageBase\";\r\nimport IStorage from \"./../storage/IStorage\";\r\nimport Log from \"../core/Log\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\n\r\nexport default class ElectronStorage extends StorageBase implements IStorage {\r\n  path: string;\r\n  name: string;\r\n\r\n  rootFolder: ElectronFolder;\r\n\r\n  static folderDelimiter = \"/\";\r\n\r\n  static electronStorages: { [path: string]: ElectronStorage } = {};\r\n\r\n  constructor(path: string, name: string) {\r\n    super();\r\n\r\n    this.path = path;\r\n\r\n    Log.assert(this.path.length > 4 && this.path.startsWith(\"<\"), \"Path is not expected:\" + path);\r\n\r\n    ElectronStorage.electronStorages[this.path] = this;\r\n    this.name = name;\r\n\r\n    this.rootFolder = new ElectronFolder(this, null, path, name);\r\n  }\r\n\r\n  public static async processLocalFileUpdate(path: string) {\r\n    for (const esPath in ElectronStorage.electronStorages) {\r\n      if (StorageUtilities.canonicalizePath(path).startsWith(StorageUtilities.canonicalizePath(esPath))) {\r\n        const es = ElectronStorage.electronStorages[esPath];\r\n\r\n        if (es) {\r\n          await es.notifyPathWasUpdatedExternal(path);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called when a new file is detected by the Electron file watcher.\r\n   * Routes to the appropriate ElectronStorage instance.\r\n   */\r\n  public static async processLocalFileAdded(path: string) {\r\n    for (const esPath in ElectronStorage.electronStorages) {\r\n      if (StorageUtilities.canonicalizePath(path).startsWith(StorageUtilities.canonicalizePath(esPath))) {\r\n        const es = ElectronStorage.electronStorages[esPath];\r\n\r\n        if (es) {\r\n          await es.notifyPathWasAddedExternal(path);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called when a file is removed by the Electron file watcher.\r\n   * Routes to the appropriate ElectronStorage instance.\r\n   */\r\n  public static async processLocalFileRemoved(path: string) {\r\n    for (const esPath in ElectronStorage.electronStorages) {\r\n      if (StorageUtilities.canonicalizePath(path).startsWith(StorageUtilities.canonicalizePath(esPath))) {\r\n        const es = ElectronStorage.electronStorages[esPath];\r\n\r\n        if (es) {\r\n          await es.notifyPathWasRemovedExternal(path);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async getAvailable(): Promise<boolean> {\r\n    if (this.available === undefined) {\r\n      const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsRootStorageExists, this.path);\r\n      this.available = result === \"true\";\r\n    }\r\n\r\n    return this.available;\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(ElectronStorage.folderDelimiter)) {\r\n      fullPath += ElectronStorage.folderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static getParentFolderPath(path: string) {\r\n    const lastDelim = path.lastIndexOf(this.folderDelimiter);\r\n\r\n    if (lastDelim < 0) {\r\n      return path;\r\n    }\r\n\r\n    return path.substring(0, lastDelim);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IStorage from \"../storage/IStorage\";\r\n\r\nexport const MaxDeploymentTargets = 8;\r\n\r\nexport enum DeploymentTargetType {\r\n  none = 0,\r\n  bedrock = 1,\r\n  bedrockPreview = 2,\r\n  education = 3,\r\n  educationPreview = 4,\r\n  developer = 5,\r\n  customDedicatedServer = 6,\r\n  customCoreData = 7,\r\n}\r\n\r\nexport default class DeploymentTarget {\r\n  storage: IStorage;\r\n  targetType: DeploymentTargetType;\r\n\r\n  private _deployBehaviorPacksFolder: IFolder;\r\n  private _deployResourcePacksFolder: IFolder;\r\n\r\n  get deployBehaviorPacksFolder(): IFolder | null {\r\n    return this._deployBehaviorPacksFolder;\r\n  }\r\n\r\n  get deployResourcePacksFolder(): IFolder | null {\r\n    return this._deployResourcePacksFolder;\r\n  }\r\n\r\n  constructor(storage: IStorage, targetType: DeploymentTargetType) {\r\n    this.storage = storage;\r\n    this.targetType = targetType;\r\n\r\n    this._deployBehaviorPacksFolder = this.storage.rootFolder.ensureFolder(\"development_behavior_packs\");\r\n    this._deployResourcePacksFolder = this.storage.rootFolder.ensureFolder(\"development_resource_packs\");\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport ICreatorToolsData, {\r\n  CreatorToolsEditorViewMode,\r\n  RemoteServerAccessLevel,\r\n  MinecraftFlavor,\r\n  DedicatedServerMode,\r\n  MinecraftGameConnectionMode,\r\n  MinecraftTrack,\r\n  WindowState,\r\n  CreatorToolsEditPreference,\r\n  ThemePreference,\r\n} from \"./ICreatorToolsData\";\r\nimport Project from \"./Project\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport { ProjectFocus, ProjectScriptLanguage } from \"./IProjectData\";\r\nimport IStatus, { StatusTopic, StatusType } from \"./Status\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport GitHubManager from \"../github/GitHubManager\";\r\nimport IGallery from \"./IGallery\";\r\nimport axios from \"axios\";\r\nimport Log from \"../core/Log\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport CommandRunner from \"./CommandRunner\";\r\nimport ILocalUtilities from \"../core/ILocalUtilities\";\r\nimport IMinecraft from \"./IMinecraft\";\r\nimport RemoteMinecraft from \"./RemoteMinecraft\";\r\nimport CreatorToolsHost, { HostType } from \"./CreatorToolsHost\";\r\nimport MinecraftPush from \"./MinecraftPush\";\r\nimport ProcessHostedMinecraft from \"../clientapp/ProcessHostedProxyMinecraft\";\r\nimport MinecraftGameProxyMinecraft from \"../clientapp/MinecraftGameProxyMinecraft\";\r\nimport { GameType, Generator } from \"../minecraft/WorldLevelDat\";\r\nimport { BackupType } from \"../minecraft/IWorldSettings\";\r\nimport Package from \"./Package\";\r\nimport CommandRegistry from \"./CommandRegistry\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport { MaxItemTypes, ProjectItemType } from \"./IProjectItemData\";\r\nimport DeploymentStorageMinecraft from \"./DeploymentStorageMinecraft\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport IGalleryItem, { GalleryItemType } from \"./IGalleryItem\";\r\nimport ProjectUtilities from \"./ProjectUtilities\";\r\nimport ElectronStorage from \"../electronclient/ElectronStorage\";\r\nimport Storage from \"../storage/Storage\";\r\nimport Database from \"../minecraft/Database\";\r\nimport DeploymentTarget, { DeploymentTargetType, MaxDeploymentTargets } from \"./DeploymentTarget\";\r\n\r\nexport enum CreatorToolsMinecraftState {\r\n  none = 0,\r\n  initializing = 1, // for phserver, this is starting to auto-download\r\n  // for remote server, this is authenticating\r\n  // for web sockets, this is opening up the web socket to receive connections from a client\r\n  initialized = 2,\r\n  preparing = 3,\r\n  prepared = 4,\r\n  starting = 5, // for phserver, the server is starting\r\n  // for remote server, this is creating a session on a socket\r\n  // for web sockets, note you have to wait for external connections to come in.\r\n  started = 6, // for phserver, the server is up and ready\r\n  // for remote server, the session is ready and initial status has been established\r\n  // for web sockets, an external client has connected in\r\n  stopping = 7,\r\n  stopped = 8,\r\n  error = 9,\r\n  newMinecraft = 10,\r\n  disconnected = 11,\r\n}\r\n\r\nexport enum CreatorToolsMinecraftErrorStatus {\r\n  none = 0,\r\n  actionInProgress = 1,\r\n  serverUnavailable = 2,\r\n  serverError = 3,\r\n  loginFailed = 4,\r\n  generalError = 5,\r\n  configuration = 6,\r\n}\r\n\r\nexport const CreatorToolsTargetSettings = [\r\n  \"Latest Minecraft Bedrock\",\r\n  \"Latest Minecraft Bedrock preview\",\r\n  \"Latest Minecraft Education\",\r\n  \"Latest Minecraft Education preview\",\r\n];\r\n\r\nexport const SidePaneMaxWidth = 880;\r\nexport const SidePaneMinWidth = 280;\r\n\r\nexport const DefaultCreatorName = \"Minecraft Creator\";\r\n\r\nexport default class CreatorTools {\r\n  private _isLoaded: boolean;\r\n  private _userGitHub: GitHubManager | undefined;\r\n  private _anonGitHub: GitHubManager | undefined;\r\n\r\n  contentRoot = \"\";\r\n\r\n  processHostedMinecraft: IMinecraft | undefined;\r\n  deploymentStorageMinecraft: IMinecraft | undefined;\r\n  gameMinecraft: IMinecraft | undefined;\r\n  remoteMinecraft: RemoteMinecraft | undefined;\r\n  activeMinecraft: IMinecraft | undefined;\r\n\r\n  prefsStorage: IStorage;\r\n  projectsStorage: IStorage;\r\n  deploymentStorage: IStorage[];\r\n  worldStorage: IStorage | null;\r\n  packStorage: IStorage | null;\r\n  workingStorage: IStorage | null;\r\n\r\n  deploymentTargets: DeploymentTarget[] = [];\r\n\r\n  localFolderExists: ((path: string) => Promise<boolean>) | undefined;\r\n  localFileExists: ((path: string) => Promise<boolean>) | undefined;\r\n  ensureLocalFolder: ((path: string) => IFolder) | undefined;\r\n  createMinecraft: ((flavor: MinecraftFlavor, creatorTools: CreatorTools) => IMinecraft | undefined) | undefined;\r\n  canCreateMinecraft: ((flavor: MinecraftFlavor) => boolean) | undefined;\r\n\r\n  private _pendingPackLoadRequests: ((value: unknown) => void)[] = [];\r\n  private _arePacksLoading: boolean = false;\r\n\r\n  // Private instance variable for auth token - not persisted in #data\r\n  // This is used for in-memory session tokens (e.g., from mct view command)\r\n  private _remoteServerAuthToken?: string;\r\n\r\n  // Runtime property for remote server EULA acceptance status\r\n  // This is set from the server's auth response and indicates whether the\r\n  // server has accepted the Minecraft EULA. Not persisted locally.\r\n  private _remoteServerEulaAccepted?: boolean;\r\n\r\n  local: ILocalUtilities | undefined;\r\n  #data: ICreatorToolsData;\r\n  projects: Project[];\r\n  status: IStatus[];\r\n  activeOperations: IStatus[];\r\n\r\n  packs?: Package[];\r\n\r\n  mcLogs: { [name: string]: string[] | undefined } = {};\r\n\r\n  _gallery?: IGallery;\r\n  _galleryLoaded: boolean = false;\r\n  isDeployingToMinecraft: boolean = false;\r\n\r\n  hasAttemptedPersistentBrowserStorageSwitch: boolean = false;\r\n\r\n  private _onDeploymentStorageChanged = new EventDispatcher<CreatorTools, IStorage | null>();\r\n  private _onMinecraftStateChanged = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _onMinecraftRefreshed = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _onPropertyChanged = new EventDispatcher<CreatorTools, string>();\r\n  private _onLoaded = new EventDispatcher<CreatorTools, CreatorTools>();\r\n  private _onStatusAdded = new EventDispatcher<CreatorTools, IStatus>();\r\n  private _onOperationCompleted = new EventDispatcher<CreatorTools, number>();\r\n  private _onStatusAddedAsync: ((creatorTools: CreatorTools, status: IStatus) => Promise<void>)[] = [];\r\n  private _onGalleryLoaded = new EventDispatcher<CreatorTools, IGallery | undefined>();\r\n\r\n  public get defaultDeploymentTargetType() {\r\n    if (this.#data.defaultDeploymentTarget !== undefined) {\r\n      return this.#data.defaultDeploymentTarget;\r\n    }\r\n\r\n    for (let i = 0; i < MaxDeploymentTargets; i++) {\r\n      if (this.deploymentStorage[i]) {\r\n        return i;\r\n      }\r\n    }\r\n\r\n    return DeploymentTargetType.bedrock;\r\n  }\r\n\r\n  public set defaultDeploymentTargetType(newType: DeploymentTargetType) {\r\n    this.#data.defaultDeploymentTarget = newType;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get collapsedTypes() {\r\n    if (!this.#data.collapsedTypes) {\r\n      this.#data.collapsedTypes = [];\r\n    }\r\n\r\n    return this.#data.collapsedTypes;\r\n  }\r\n\r\n  public get data() {\r\n    return this.#data;\r\n  }\r\n\r\n  public get defaultDeploymentStorage() {\r\n    return this.deploymentStorage[this.defaultDeploymentTargetType];\r\n  }\r\n\r\n  public get defaultDeploymentTarget() {\r\n    return this.getDeploymentTarget(this.defaultDeploymentTargetType);\r\n  }\r\n\r\n  public set collapsedTypes(newCollapsedTypes: number[]) {\r\n    this.#data.collapsedTypes = newCollapsedTypes;\r\n  }\r\n\r\n  public get showMruPane(): boolean {\r\n    if (this.#data.showMruPane === undefined) {\r\n      return true; // Default to showing MRU pane\r\n    }\r\n    return this.#data.showMruPane;\r\n  }\r\n\r\n  public set showMruPane(newValue: boolean) {\r\n    this.#data.showMruPane = newValue;\r\n  }\r\n\r\n  public get mruItemPaths(): string[] {\r\n    if (!this.#data.mruItemPaths) {\r\n      this.#data.mruItemPaths = [];\r\n    }\r\n    return this.#data.mruItemPaths;\r\n  }\r\n\r\n  public set mruItemPaths(newPaths: string[]) {\r\n    this.#data.mruItemPaths = newPaths;\r\n  }\r\n\r\n  public get viewAsFiles(): boolean {\r\n    if (this.#data.viewAsFiles === undefined) {\r\n      return false; // Default to items view\r\n    }\r\n    return this.#data.viewAsFiles;\r\n  }\r\n\r\n  public set viewAsFiles(newValue: boolean) {\r\n    this.#data.viewAsFiles = newValue;\r\n  }\r\n\r\n  /**\r\n   * Adds a project item path to the MRU list.\r\n   * Moves existing entries to front and maintains max 10 items.\r\n   */\r\n  public addToMru(projectPath: string): void {\r\n    if (!projectPath) return;\r\n\r\n    const paths = this.mruItemPaths;\r\n    // Remove if already exists (to move to front)\r\n    const existingIndex = paths.indexOf(projectPath);\r\n    if (existingIndex !== -1) {\r\n      paths.splice(existingIndex, 1);\r\n    }\r\n    // Add to front\r\n    paths.unshift(projectPath);\r\n    // Keep max 10 items\r\n    if (paths.length > 10) {\r\n      paths.pop();\r\n    }\r\n    this.#data.mruItemPaths = paths;\r\n  }\r\n\r\n  /**\r\n   * Removes a project item path from the MRU list.\r\n   */\r\n  public removeFromMru(projectPath: string): void {\r\n    if (!projectPath) return;\r\n\r\n    const paths = this.mruItemPaths;\r\n    const index = paths.indexOf(projectPath);\r\n    if (index !== -1) {\r\n      paths.splice(index, 1);\r\n      this.#data.mruItemPaths = paths;\r\n    }\r\n  }\r\n\r\n  public get editPreference() {\r\n    return this.#data.editPreference;\r\n  }\r\n\r\n  public set editPreference(newValue: CreatorToolsEditPreference | undefined) {\r\n    this.#data.editPreference = newValue;\r\n  }\r\n\r\n  public get disableFirstRun() {\r\n    return this.#data.disableFirstRun === true;\r\n  }\r\n\r\n  public set disableFirstRun(newValue: boolean) {\r\n    this.#data.disableFirstRun = newValue;\r\n  }\r\n\r\n  public get themePreference() {\r\n    return this.#data.themePreference;\r\n  }\r\n\r\n  public set themePreference(newValue: ThemePreference | undefined) {\r\n    this.#data.themePreference = newValue;\r\n  }\r\n\r\n  public get worldSettings() {\r\n    return this.#data.worldSettings;\r\n  }\r\n\r\n  public get editorWorldSettings() {\r\n    return this.#data.editorWorldSettings;\r\n  }\r\n\r\n  public get activeMinecraftState() {\r\n    if (this.activeMinecraft === undefined) {\r\n      return CreatorToolsMinecraftState.none;\r\n    }\r\n\r\n    return this.activeMinecraft.state;\r\n  }\r\n\r\n  public get onMinecraftStateChanged() {\r\n    return this._onMinecraftStateChanged.asEvent();\r\n  }\r\n\r\n  public get onDeploymentStorageChanged() {\r\n    return this._onDeploymentStorageChanged.asEvent();\r\n  }\r\n\r\n  public get formatBeforeSave() {\r\n    if (this.#data.formatBeforeSave === undefined) {\r\n      // Default OFF for pro-grade safety: many creators hand-format their JSON\r\n      // (compact arrays for [1,0,0] versions, inline component groups, custom\r\n      // indentation), and silently reformatting on save destroys diff signal\r\n      // and intentional formatting. Opt-in is the safer default.\r\n      return false;\r\n    }\r\n\r\n    return this.#data.formatBeforeSave;\r\n  }\r\n\r\n  public set formatBeforeSave(newValue: boolean) {\r\n    this.#data.formatBeforeSave = newValue;\r\n  }\r\n\r\n  public get showLivePreview() {\r\n    if (this.#data.showLivePreview === undefined) {\r\n      return true; // Default to on\r\n    }\r\n\r\n    return this.#data.showLivePreview;\r\n  }\r\n\r\n  public set showLivePreview(newValue: boolean) {\r\n    this.#data.showLivePreview = newValue;\r\n  }\r\n\r\n  public get conversionJarPath() {\r\n    return this.#data.conversionJarPath;\r\n  }\r\n\r\n  public set conversionJarPath(newValue: string | undefined) {\r\n    this.#data.conversionJarPath = newValue;\r\n  }\r\n\r\n  public get preferredTextSize() {\r\n    if (this.#data.preferredTextSize === undefined) {\r\n      return 16;\r\n    }\r\n\r\n    return this.#data.preferredTextSize;\r\n  }\r\n\r\n  public set preferredTextSize(newValue: number) {\r\n    this.#data.preferredTextSize = newValue;\r\n  }\r\n\r\n  public get livePreviewWidth() {\r\n    // Default to 260px, min 200px, max 600px\r\n    if (this.#data.livePreviewWidth === undefined) {\r\n      return 260;\r\n    }\r\n    if (this.#data.livePreviewWidth < 200) {\r\n      return 200;\r\n    }\r\n    if (this.#data.livePreviewWidth > 600) {\r\n      return 600;\r\n    }\r\n    return this.#data.livePreviewWidth;\r\n  }\r\n\r\n  public set livePreviewWidth(newValue: number) {\r\n    // Clamp to min 200px, max 600px\r\n    if (newValue < 200) {\r\n      newValue = 200;\r\n    }\r\n    if (newValue > 600) {\r\n      newValue = 600;\r\n    }\r\n    this.#data.livePreviewWidth = newValue;\r\n  }\r\n\r\n  public get itemSidePaneWidth() {\r\n    if (this.#data.itemSidePaneWidth === undefined) {\r\n      return 300;\r\n    }\r\n\r\n    if (this.#data.itemSidePaneWidth < SidePaneMinWidth) {\r\n      return SidePaneMinWidth;\r\n    }\r\n\r\n    if (this.#data.itemSidePaneWidth > SidePaneMaxWidth) {\r\n      return SidePaneMaxWidth;\r\n    }\r\n\r\n    return this.#data.itemSidePaneWidth;\r\n  }\r\n\r\n  public set itemSidePaneWidth(newValue: number) {\r\n    this.#data.itemSidePaneWidth = newValue;\r\n  }\r\n\r\n  public get toolPaneWidth() {\r\n    if (this.#data.toolPaneWidth === undefined) {\r\n      return 380;\r\n    }\r\n\r\n    if (this.#data.toolPaneWidth < SidePaneMinWidth) {\r\n      return SidePaneMinWidth;\r\n    }\r\n\r\n    if (this.#data.toolPaneWidth > SidePaneMaxWidth) {\r\n      return SidePaneMaxWidth;\r\n    }\r\n\r\n    return this.#data.toolPaneWidth;\r\n  }\r\n\r\n  public set toolPaneWidth(newValue: number) {\r\n    this.#data.toolPaneWidth = newValue;\r\n  }\r\n\r\n  public get preferredSuite() {\r\n    return this.#data.preferredSuite;\r\n  }\r\n\r\n  public set preferredSuite(newValue: number | undefined) {\r\n    this.#data.preferredSuite = newValue;\r\n  }\r\n\r\n  get track(): MinecraftTrack | undefined {\r\n    return this.#data.track;\r\n  }\r\n\r\n  set track(newTrack: MinecraftTrack | undefined) {\r\n    if (newTrack !== this.#data.track) {\r\n      this.#data.track = newTrack;\r\n      this._onPropertyChanged.dispatch(this, \"track\");\r\n    }\r\n  }\r\n\r\n  get effectiveTrack(): MinecraftTrack {\r\n    if (this.#data.track !== undefined) {\r\n      return this.#data.track;\r\n    }\r\n\r\n    return MinecraftTrack.main;\r\n  }\r\n\r\n  public get useEditor() {\r\n    return this.#data.useEditor;\r\n  }\r\n\r\n  public set useEditor(newUseEditor: boolean | undefined) {\r\n    if (newUseEditor !== this.#data.useEditor) {\r\n      this.#data.useEditor = newUseEditor;\r\n    }\r\n  }\r\n\r\n  public get windowX() {\r\n    if (this.#data.windowX === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.#data.windowX;\r\n  }\r\n\r\n  public set windowX(newVal: number | undefined) {\r\n    this.#data.windowX = newVal;\r\n  }\r\n\r\n  public get windowY() {\r\n    if (this.#data.windowY === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.#data.windowY;\r\n  }\r\n\r\n  public set windowY(newVal: number | undefined) {\r\n    this.#data.windowY = newVal;\r\n  }\r\n\r\n  public get windowWidth() {\r\n    if (this.#data.windowWidth === undefined) {\r\n      return 1200;\r\n    }\r\n\r\n    return this.#data.windowWidth;\r\n  }\r\n\r\n  public set windowWidth(newVal: number | undefined) {\r\n    this.#data.windowWidth = newVal;\r\n  }\r\n\r\n  public get windowHeight() {\r\n    if (this.#data.windowHeight === undefined) {\r\n      return 900;\r\n    }\r\n    return this.#data.windowHeight;\r\n  }\r\n\r\n  public set windowHeight(newVal: number | undefined) {\r\n    this.#data.windowHeight = newVal;\r\n  }\r\n\r\n  public get windowSlot() {\r\n    if (this.#data.windowSlot === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.#data.windowSlot;\r\n  }\r\n\r\n  public set windowSlot(newVal: number | undefined) {\r\n    this.#data.windowSlot = newVal;\r\n  }\r\n\r\n  get creator(): string | undefined {\r\n    return this.#data.creator;\r\n  }\r\n\r\n  set creator(newCreator: string | undefined) {\r\n    if (this.#data.creator !== newCreator) {\r\n      this.#data.creator = newCreator;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"creator\");\r\n    }\r\n  }\r\n\r\n  public get windowState() {\r\n    if (this.#data.windowState === undefined) {\r\n      return WindowState.regular;\r\n    }\r\n\r\n    return this.#data.windowState;\r\n  }\r\n\r\n  public set windowState(newVal: number | undefined) {\r\n    this.#data.windowState = newVal;\r\n  }\r\n\r\n  public get lastActiveMinecraftFlavor() {\r\n    return this.#data.lastActiveMinecraftFlavor;\r\n  }\r\n\r\n  public set lastActiveMinecraftFlavor(lastActiveMinecraftFlavor: MinecraftFlavor | undefined) {\r\n    if (lastActiveMinecraftFlavor !== this.#data.lastActiveMinecraftFlavor) {\r\n      this.#data.lastActiveMinecraftFlavor = lastActiveMinecraftFlavor;\r\n    }\r\n  }\r\n\r\n  public get remoteServerUrl() {\r\n    if (this.#data.remoteServerUrl === undefined && CreatorToolsHost.baseUrl) {\r\n      return Utilities.getBaseUrl(CreatorToolsHost.baseUrl);\r\n    }\r\n\r\n    return this.#data.remoteServerUrl;\r\n  }\r\n\r\n  public get fullRemoteServerUrl() {\r\n    if (!this.remoteServerUrl) {\r\n      return undefined;\r\n    }\r\n\r\n    let url = this.remoteServerUrl.toLowerCase();\r\n\r\n    if (!url.startsWith(\"http\") && url.indexOf(\"//\") < 0) {\r\n      if (url.indexOf(\"localhost\") >= 0) {\r\n        url = \"http://\" + url;\r\n      } else {\r\n        url = \"https://\" + url;\r\n      }\r\n    }\r\n\r\n    url = Utilities.ensureEndsWithSlash(url);\r\n\r\n    return url;\r\n  }\r\n\r\n  public set remoteServerUrl(newPath: string | undefined) {\r\n    if (newPath !== this.#data.remoteServerUrl) {\r\n      this.#data.remoteServerUrl = newPath;\r\n    }\r\n  }\r\n\r\n  public get iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula() {\r\n    return this.#data.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula;\r\n  }\r\n\r\n  public set iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula(\r\n    newPort: boolean | undefined\r\n  ) {\r\n    this.#data.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula = newPort;\r\n  }\r\n\r\n  public get dedicatedServerSlotCount() {\r\n    return this.#data.dedicatedServerSlotCount;\r\n  }\r\n\r\n  public set dedicatedServerSlotCount(newPort: number | undefined) {\r\n    this.#data.dedicatedServerSlotCount = newPort;\r\n  }\r\n\r\n  public get dedicatedServerMode() {\r\n    if (this.#data.dedicatedServerMode === undefined) {\r\n      return DedicatedServerMode.auto;\r\n    }\r\n\r\n    return this.#data.dedicatedServerMode;\r\n  }\r\n\r\n  public set dedicatedServerMode(newMode: DedicatedServerMode | undefined) {\r\n    this.#data.dedicatedServerMode = newMode;\r\n  }\r\n\r\n  public get dedicatedServerPath() {\r\n    return this.#data.dedicatedServerPath;\r\n  }\r\n\r\n  public set minecraftGameMode(newMode: MinecraftGameConnectionMode | undefined) {\r\n    this.#data.webSocketMode = newMode;\r\n  }\r\n\r\n  public get minecraftGameMode() {\r\n    return this.#data.webSocketMode;\r\n  }\r\n\r\n  public set dedicatedServerPath(newPath: string | undefined) {\r\n    this.#data.dedicatedServerPath = newPath;\r\n  }\r\n\r\n  public get remoteServerPort() {\r\n    if (this.#data.remoteServerPort === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.#data.remoteServerPort;\r\n  }\r\n\r\n  public set remoteServerPort(newPort: number | undefined) {\r\n    this.#data.remoteServerPort = newPort;\r\n  }\r\n\r\n  public get remoteServerAccessLevel() {\r\n    return this.#data.remoteServerAccessLevel;\r\n  }\r\n\r\n  public set remoteServerAccessLevel(newAccessLevel: RemoteServerAccessLevel | undefined) {\r\n    this.#data.remoteServerAccessLevel = newAccessLevel;\r\n  }\r\n\r\n  public get remoteServerPasscode() {\r\n    return this.#data.remoteServerPasscode;\r\n  }\r\n\r\n  public set remoteServerPasscode(newPath: string | undefined) {\r\n    this.#data.remoteServerPasscode = newPath;\r\n  }\r\n\r\n  public get remoteServerAuthToken() {\r\n    return this._remoteServerAuthToken;\r\n  }\r\n\r\n  public set remoteServerAuthToken(newToken: string | undefined) {\r\n    this._remoteServerAuthToken = newToken;\r\n  }\r\n\r\n  public get remoteServerEulaAccepted() {\r\n    return this._remoteServerEulaAccepted;\r\n  }\r\n\r\n  public set remoteServerEulaAccepted(newValue: boolean | undefined) {\r\n    this._remoteServerEulaAccepted = newValue;\r\n  }\r\n\r\n  public get editorViewMode() {\r\n    if (this.#data.editorViewMode === undefined) {\r\n      return CreatorToolsEditorViewMode.itemsOnLeft;\r\n    }\r\n\r\n    return this.#data.editorViewMode;\r\n  }\r\n\r\n  public set editorViewMode(newViewMode: CreatorToolsEditorViewMode) {\r\n    this.#data.editorViewMode = newViewMode;\r\n  }\r\n\r\n  public get gallery() {\r\n    return this._gallery;\r\n  }\r\n\r\n  public get galleryLoaded() {\r\n    return this._galleryLoaded;\r\n  }\r\n\r\n  public get userGitHub(): GitHubManager {\r\n    if (this._userGitHub === undefined) {\r\n      this._userGitHub = new GitHubManager();\r\n    }\r\n\r\n    return this._userGitHub;\r\n  }\r\n\r\n  public get anonGitHub(): GitHubManager {\r\n    if (this._anonGitHub === undefined) {\r\n      this._anonGitHub = new GitHubManager();\r\n    }\r\n\r\n    return this._anonGitHub;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onGalleryLoaded() {\r\n    return this._onGalleryLoaded.asEvent();\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  public get onStatusAdded() {\r\n    return this._onStatusAdded.asEvent();\r\n  }\r\n\r\n  public get onOperationCompleted() {\r\n    return this._onOperationCompleted.asEvent();\r\n  }\r\n\r\n  public get successfullyConnectedWebSocketToMinecraft() {\r\n    if (this.#data.successfullyConnectedWebSocketToMinecraft === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this.#data.successfullyConnectedWebSocketToMinecraft;\r\n  }\r\n\r\n  public set successfullyConnectedWebSocketToMinecraft(newValue: boolean) {\r\n    this.#data.successfullyConnectedWebSocketToMinecraft = newValue;\r\n  }\r\n\r\n  public get successfullyStartedMinecraftServer() {\r\n    if (this.#data.successfullyStartedMinecraftServer === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this.#data.successfullyStartedMinecraftServer;\r\n  }\r\n\r\n  public set successfullyStartedMinecraftServer(newValue: boolean) {\r\n    this.#data.successfullyStartedMinecraftServer = newValue;\r\n  }\r\n\r\n  public get successfullyConnectedToRemoteMinecraft() {\r\n    if (this.#data.successfullyConnectedToRemoteMinecraft === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this.#data.successfullyConnectedToRemoteMinecraft;\r\n  }\r\n\r\n  public set successfullyConnectedToRemoteMinecraft(newValue: boolean) {\r\n    this.#data.successfullyConnectedToRemoteMinecraft = newValue;\r\n  }\r\n\r\n  public get defaultMinecraftFlavor() {\r\n    if (this.#data.lastActiveMinecraftFlavor === undefined) {\r\n      if (CreatorToolsHost.isAppServiceWeb) {\r\n        return MinecraftFlavor.processHostedProxy;\r\n      } else {\r\n        return MinecraftFlavor.remote;\r\n      }\r\n    }\r\n\r\n    return this.#data.lastActiveMinecraftFlavor;\r\n  }\r\n\r\n  public subscribeStatusAddedAsync(fn: (creatorTools: CreatorTools, status: IStatus) => Promise<void>) {\r\n    this._onStatusAddedAsync.push(fn);\r\n  }\r\n\r\n  public unsubscribeStatusAddedAsync(fn: (creatorTools: CreatorTools, status: IStatus) => Promise<void>) {\r\n    let newStatusAddedArr: ((creatorTools: CreatorTools, status: IStatus) => Promise<void>)[] = [];\r\n\r\n    for (let i = 0; i < this._onStatusAddedAsync.length; i++) {\r\n      if (this._onStatusAddedAsync[i] !== fn) {\r\n        newStatusAddedArr.push(this._onStatusAddedAsync[i]);\r\n      }\r\n    }\r\n\r\n    this._onStatusAddedAsync = newStatusAddedArr;\r\n  }\r\n\r\n  public setMinecraftFlavor(newValue: MinecraftFlavor) {\r\n    this.ensureMinecraft(newValue);\r\n  }\r\n\r\n  public get autoStartMinecraft() {\r\n    if (this.#data.autoStartMinecraft === undefined) {\r\n      return true;\r\n    }\r\n\r\n    return this.#data.autoStartMinecraft;\r\n  }\r\n\r\n  public set autoStartMinecraft(newValue: boolean) {\r\n    this.#data.autoStartMinecraft = newValue;\r\n  }\r\n\r\n  get file(): IFile {\r\n    return this.prefsStorage.rootFolder.ensureFile(\"mctools.json\");\r\n  }\r\n\r\n  get prefsProjectsFolder(): IFolder {\r\n    return this.prefsStorage.rootFolder.ensureFolder(\"projects\");\r\n  }\r\n\r\n  constructor(\r\n    settingsStorage: IStorage,\r\n    projectsStorage: IStorage,\r\n    deploymentsStorage: IStorage[],\r\n    worldStorage: IStorage | null,\r\n    packStorage: IStorage | null,\r\n    workingStorage: IStorage | null,\r\n    contentRoot: string | null\r\n  ) {\r\n    this.prefsStorage = settingsStorage;\r\n    this.projectsStorage = projectsStorage;\r\n    this.deploymentStorage = deploymentsStorage;\r\n    this.packStorage = packStorage;\r\n    this.worldStorage = worldStorage;\r\n    this.workingStorage = workingStorage;\r\n\r\n    if (contentRoot) {\r\n      this.contentRoot = contentRoot;\r\n    }\r\n\r\n    this._handleMessageFromAppService = this._handleMessageFromAppService.bind(this);\r\n    this._bubbleMinecraftStateChanged = this._bubbleMinecraftStateChanged.bind(this);\r\n    this._bubbleMinecraftRefreshed = this._bubbleMinecraftRefreshed.bind(this);\r\n\r\n    AppServiceProxy.onMessage.subscribe(this._handleMessageFromAppService);\r\n\r\n    this.#data = {\r\n      successfullyConnectedWebSocketToMinecraft: false,\r\n      successfullyStartedMinecraftServer: false,\r\n      successfullyConnectedToRemoteMinecraft: false,\r\n      autoStartMinecraft: true,\r\n      showScreenOnConnect: true,\r\n      customTools: [],\r\n    };\r\n\r\n    // in the case of a Minecraft Http Server self-hosted web page, assume all we want to do is connect back to our server.\r\n    // But NOT in the Electron app \u2014 there we default to hosting BDS locally.\r\n    if (CreatorToolsHost.baseUrl && !CreatorToolsHost.isAppServiceWeb) {\r\n      this.setMinecraftFlavor(MinecraftFlavor.remote);\r\n      this.successfullyConnectedWebSocketToMinecraft = true;\r\n    }\r\n\r\n    this._isLoaded = false;\r\n    this.projects = [];\r\n    this.status = [];\r\n    this.activeOperations = [];\r\n  }\r\n\r\n  public initializeWorldSettings() {\r\n    if (this.#data.worldSettings === undefined) {\r\n      this.#data.worldSettings = {\r\n        gameType: GameType.creative,\r\n        generator: Generator.infinite,\r\n        randomSeed: \"2000\",\r\n        backupType: BackupType.every5Minutes,\r\n        useCustomSettings: false,\r\n        isEditor: false,\r\n        deployCreatorToolsInfrastructure: true,\r\n        enableDebugger: true,\r\n        enableDebuggerStreaming: true,\r\n        packageReferences: [],\r\n      };\r\n\r\n      this.ensureDefaultWorldName();\r\n    }\r\n  }\r\n\r\n  public getDeploymentTarget(target: DeploymentTargetType): DeploymentTarget | undefined {\r\n    let dt = this.deploymentTargets[target];\r\n\r\n    if (!dt && this.deploymentStorage[target]) {\r\n      dt = new DeploymentTarget(this.deploymentStorage[target], target);\r\n\r\n      this.deploymentTargets[target] = dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  private ensureDefaultWorldName() {\r\n    if (this.worldSettings && this.worldSettings.name === undefined) {\r\n      this.worldSettings.name = \"world \" + Utilities.getDateStr(new Date());\r\n    }\r\n  }\r\n\r\n  public initializeEditorWorldSettings() {\r\n    if (this.#data.editorWorldSettings === undefined) {\r\n      this.#data.editorWorldSettings = {\r\n        gameType: GameType.creative,\r\n        generator: Generator.infinite,\r\n        backupType: BackupType.every5Minutes,\r\n        useCustomSettings: false,\r\n        isEditor: true,\r\n        packageReferences: [],\r\n      };\r\n\r\n      this.ensureDefaultEditorWorldName();\r\n    }\r\n  }\r\n\r\n  private ensureDefaultEditorWorldName() {\r\n    if (this.editorWorldSettings && this.editorWorldSettings.name === undefined) {\r\n      this.editorWorldSettings.name = \"editor project \" + Utilities.getDateStr(new Date());\r\n    }\r\n  }\r\n\r\n  getCustomTool(index: number) {\r\n    if (this.#data.customTools === undefined) {\r\n      this.#data.customTools = [];\r\n    }\r\n\r\n    while (this.#data.customTools.length <= index) {\r\n      this.#data.customTools.push({\r\n        name: \"\",\r\n        type: 0,\r\n        text: undefined,\r\n        lastRunResult: undefined,\r\n      });\r\n    }\r\n\r\n    return this.#data.customTools[index];\r\n  }\r\n\r\n  get defaultFunction() {\r\n    if (this.#data === undefined || this.#data.defaultFunction === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this.#data.defaultFunction;\r\n  }\r\n\r\n  set defaultFunction(newFunction: string) {\r\n    if (this.#data === undefined) {\r\n      return;\r\n    }\r\n\r\n    this.#data.defaultFunction = Utilities.makeSafeForJson(newFunction);\r\n  }\r\n\r\n  async runCommand(command: string, project?: Project) {\r\n    return await CommandRegistry.main.runCommand(\r\n      {\r\n        creatorTools: this,\r\n        project: project,\r\n        minecraft: this.activeMinecraft,\r\n        host: CreatorToolsHost.hostManager,\r\n      },\r\n      command\r\n    );\r\n  }\r\n\r\n  async runMinecraftCommand(command: string) {\r\n    if (this.activeMinecraft === undefined) {\r\n      throw new Error(\"No minecraft active.\");\r\n    }\r\n\r\n    const result = await this.activeMinecraft.runCommand(command);\r\n\r\n    return result;\r\n  }\r\n\r\n  async loadPacks() {\r\n    if (!this.packStorage) {\r\n      throw new Error(\"Could not find pack storage\");\r\n    }\r\n\r\n    if (this._arePacksLoading) {\r\n      const pendingLoad = this._pendingPackLoadRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._arePacksLoading = true;\r\n\r\n      this.packs = [];\r\n\r\n      const creatorToolsIngame = await Database.ensureCreatorToolsIngameFile();\r\n\r\n      if (creatorToolsIngame) {\r\n        await this.ensurePackForFile(creatorToolsIngame);\r\n      }\r\n\r\n      Log.message(\"Loading packs from '\" + this.packStorage.rootFolder.fullPath + \"'\");\r\n      await this.loadPacksFromFolder(this.packStorage.rootFolder);\r\n\r\n      this._arePacksLoading = false;\r\n\r\n      const pendingLoad = this._pendingPackLoadRequests;\r\n      this._pendingPackLoadRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  ensureAllTypesCollapsedExcept(itemType: ProjectItemType) {\r\n    const newCollapsedTypes: number[] = [];\r\n\r\n    for (let i = 0; i < MaxItemTypes; i++) {\r\n      if (i !== itemType) {\r\n        newCollapsedTypes.push(i);\r\n      }\r\n    }\r\n\r\n    this.collapsedTypes = newCollapsedTypes;\r\n  }\r\n\r\n  ensureTypeIsCollapsed(itemType: ProjectItemType) {\r\n    for (const itemTypeCollapsed of this.collapsedTypes) {\r\n      if (itemTypeCollapsed === itemType) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    this.collapsedTypes.push(itemType);\r\n  }\r\n\r\n  ensureTypeIsNotCollapsed(itemType: ProjectItemType) {\r\n    const newCollapsedTypes: number[] = [];\r\n\r\n    for (const itemTypeCollapsed of this.collapsedTypes) {\r\n      if (itemTypeCollapsed !== itemType) {\r\n        newCollapsedTypes.push(itemTypeCollapsed);\r\n      }\r\n    }\r\n\r\n    this.#data.collapsedTypes = newCollapsedTypes;\r\n  }\r\n\r\n  async loadPacksFromFolder(folder: IFolder) {\r\n    await folder.load();\r\n\r\n    for (let fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file && StorageUtilities.isContainerFile(file.storageRelativePath)) {\r\n        await this.ensurePackForFile(file);\r\n      }\r\n    }\r\n  }\r\n\r\n  getPackByName(packName: string, isWorldFocused?: boolean) {\r\n    if (!this.packs) {\r\n      Log.unexpectedUndefined(\"GPN\");\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < this.packs.length; i++) {\r\n      if (this.packs[i].matches(packName, isWorldFocused)) {\r\n        return this.packs[i];\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getPackageByNameAndHash(packName: string, hash?: string) {\r\n    if (!this.packs) {\r\n      Log.unexpectedUndefined(\"GPNH\");\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < this.packs.length; i++) {\r\n      if (this.packs[i].matches(packName, false) && (hash === undefined || hash === this.packs[i].data?.sourceHash)) {\r\n        return this.packs[i];\r\n      }\r\n    }\r\n\r\n    return this.getPackByName(packName);\r\n  }\r\n\r\n  async ensurePackForFile(file: IFile) {\r\n    const pack = this._ensurePack(file.storageRelativePath);\r\n\r\n    await pack.ensureData(this, file);\r\n\r\n    return pack;\r\n  }\r\n\r\n  _ensurePack(storagePath: string) {\r\n    if (this.packs === undefined) {\r\n      this.packs = [];\r\n    }\r\n\r\n    for (let i = 0; i < this.packs.length; i++) {\r\n      if (this.packs[i].storagePath === storagePath) {\r\n        return this.packs[i];\r\n      }\r\n    }\r\n\r\n    const pack = new Package(StorageUtilities.getLeafName(storagePath), storagePath);\r\n\r\n    this.packs.push(pack);\r\n\r\n    return pack;\r\n  }\r\n\r\n  _handleMessageFromAppService(command: string, data: string) {\r\n    switch (command) {\r\n      case \"externalKeyPress\":\r\n        if (data.startsWith(\"command\")) {\r\n          const commandIndex = parseInt(data.substring(7, data.length));\r\n\r\n          CommandRunner.runCustomTool(this, commandIndex);\r\n        }\r\n        break;\r\n\r\n      case \"localFileUpdate\":\r\n        ElectronStorage.processLocalFileUpdate(data);\r\n        break;\r\n\r\n      case \"localFileAdded\":\r\n        ElectronStorage.processLocalFileAdded(data);\r\n        break;\r\n\r\n      case \"localFileRemoved\":\r\n        ElectronStorage.processLocalFileRemoved(data);\r\n        break;\r\n\r\n      case \"statusMessage\":\r\n        const firstPipe = data.indexOf(\"|\");\r\n        const content = data.substring(firstPipe + 1, data.length);\r\n\r\n        try {\r\n          const contentO = JSON.parse(content) as IStatus;\r\n\r\n          this.notifyExternalStatus(contentO);\r\n        } catch (e) {}\r\n\r\n        break;\r\n\r\n      case \"mctSavedInAppService\":\r\n        this.load(true);\r\n        break;\r\n\r\n      case \"logFileUpdated\":\r\n        try {\r\n          if (data) {\r\n            const firstPipe = data.indexOf(\"|\");\r\n\r\n            if (firstPipe > 0) {\r\n              const fileName = data.substring(0, firstPipe);\r\n              const content = data.substring(firstPipe + 1, data.length);\r\n\r\n              this._handleLogFileUpdated(fileName, content);\r\n            }\r\n          }\r\n        } catch (e) {\r\n          Log.fail(\"Error parsing inbound log: \" + e);\r\n        }\r\n        break;\r\n\r\n      default:\r\n        if (this.deploymentStorageMinecraft) {\r\n          this.deploymentStorageMinecraft.processExternalMessage(command, data);\r\n        }\r\n        if (this.processHostedMinecraft) {\r\n          this.processHostedMinecraft.processExternalMessage(command, data);\r\n        }\r\n        if (this.gameMinecraft) {\r\n          this.gameMinecraft.processExternalMessage(command, data);\r\n        }\r\n        if (this.remoteMinecraft) {\r\n          this.remoteMinecraft.processExternalMessage(command, data);\r\n        }\r\n\r\n        break;\r\n    }\r\n  }\r\n\r\n  _handleLogFileUpdated(fileName: string, contents: string) {\r\n    if (contents === null || contents === undefined || fileName === null || fileName === undefined) {\r\n      return;\r\n    }\r\n\r\n    let arr: string[] | undefined = this.mcLogs[fileName];\r\n\r\n    if (arr === undefined) {\r\n      arr = [];\r\n\r\n      if (Utilities.isUsableAsObjectKey(fileName)) {\r\n        this.mcLogs[fileName] = arr;\r\n      }\r\n    }\r\n\r\n    const logItems = contents.split(\"\\r\");\r\n\r\n    for (let i = logItems.length - 1; i >= 0; i--) {\r\n      const logItem = logItems[i];\r\n\r\n      if (logItem !== undefined && logItem.length > 3) {\r\n        if (!arr.includes(logItem)) {\r\n          arr.push(logItem);\r\n          this.notifyStatusUpdate(logItem);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async notifyStatusUpdate(message: string, topic?: StatusTopic) {\r\n    const messageCanon = message.trim().toLowerCase();\r\n\r\n    if (messageCanon.length > 1) {\r\n      const status = {\r\n        time: new Date(),\r\n        message: message,\r\n        topic: topic,\r\n        type: StatusType.message,\r\n      };\r\n\r\n      this.status.push(status);\r\n      await this.callStatusAddedListeners(status);\r\n\r\n      this.ensureStatusArrayIsTrimmed();\r\n    }\r\n  }\r\n\r\n  private ensureStatusArrayIsTrimmed() {\r\n    if (this.status.length > 10000) {\r\n      const newStatusArr: IStatus[] = [];\r\n\r\n      for (let i = this.status.length - 9000; i < this.status.length; i++) {\r\n        newStatusArr.push(this.status[i]);\r\n      }\r\n\r\n      this.status = newStatusArr;\r\n    }\r\n  }\r\n\r\n  async callStatusAddedListeners(status: IStatus) {\r\n    this._onStatusAdded.dispatch(this, status);\r\n\r\n    if (this._onStatusAddedAsync.length > 0) {\r\n      let promises: Promise<void>[] = [];\r\n\r\n      for (let i = 0; i < this._onStatusAddedAsync.length; i++) {\r\n        promises.push(this._onStatusAddedAsync[i](this, status));\r\n      }\r\n\r\n      await Promise.all(promises);\r\n    }\r\n  }\r\n\r\n  notifyExternalStatus(status: IStatus) {\r\n    // When status arrives via IPC (JSON serialization), time becomes a string.\r\n    // Ensure it's a Date object for downstream consumers that call .getTime().\r\n    if (status.time && !(status.time instanceof Date)) {\r\n      status.time = new Date(status.time as unknown as string);\r\n    }\r\n\r\n    this.status.push(status);\r\n\r\n    if (status.type === StatusType.operationStarted) {\r\n      this.activeOperations.push(status);\r\n    } else if (\r\n      (status.type === StatusType.operationEndedComplete || status.type === StatusType.operationEndedErrors) &&\r\n      status.operationId !== null &&\r\n      status.operationId !== undefined\r\n    ) {\r\n      this.removeOperation(status.operationId);\r\n    }\r\n\r\n    this.callStatusAddedListeners(status);\r\n\r\n    return status.operationId;\r\n  }\r\n\r\n  async notifyOperationUpdate(updateOperationId: number, message: string, topic?: StatusTopic) {\r\n    this.ensureStatusArrayIsTrimmed();\r\n\r\n    this.updateOperation(updateOperationId, message);\r\n\r\n    const status = {\r\n      message: message,\r\n      operationId: updateOperationId,\r\n      type: StatusType.operationUpdate,\r\n      time: new Date(),\r\n      topic: topic,\r\n    };\r\n\r\n    this.status.push(status);\r\n\r\n    await this.callStatusAddedListeners(status);\r\n  }\r\n\r\n  async notifyOperationStarted(message: string, topic?: StatusTopic): Promise<number> {\r\n    const status: IStatus = {\r\n      time: new Date(),\r\n      message: message,\r\n      type: StatusType.operationStarted,\r\n      topic: topic,\r\n    };\r\n\r\n    status.operationId = status.time.getTime();\r\n\r\n    this.status.push(status);\r\n    this.activeOperations.push(status);\r\n\r\n    this.ensureStatusArrayIsTrimmed();\r\n\r\n    await this.callStatusAddedListeners(status);\r\n\r\n    return status.operationId;\r\n  }\r\n\r\n  async notifyOperationEnded(\r\n    endedOperationId: number,\r\n    message?: string,\r\n    topic?: StatusTopic,\r\n    endedWithErrors?: boolean\r\n  ) {\r\n    this.ensureStatusArrayIsTrimmed();\r\n\r\n    this.removeOperation(endedOperationId);\r\n\r\n    this._onOperationCompleted.dispatch(this, endedOperationId);\r\n\r\n    if (!message) {\r\n      return;\r\n    }\r\n\r\n    const status = {\r\n      message: message,\r\n      operationId: endedOperationId,\r\n      type: endedWithErrors ? StatusType.operationEndedErrors : StatusType.operationEndedComplete,\r\n      time: new Date(),\r\n      topic: topic,\r\n    };\r\n\r\n    this.status.push(status);\r\n\r\n    await this.callStatusAddedListeners(status);\r\n  }\r\n\r\n  updateOperation(id: number, newMessage: string) {\r\n    for (let i = 0; i < this.activeOperations.length; i++) {\r\n      const oper = this.activeOperations[i];\r\n\r\n      if (oper.operationId === id) {\r\n        oper.message = newMessage;\r\n      }\r\n    }\r\n  }\r\n\r\n  removeOperation(id: number) {\r\n    // remove operation from list of active operations.\r\n    const newActiveOperations: IStatus[] = [];\r\n\r\n    for (let i = 0; i < this.activeOperations.length; i++) {\r\n      const oper = this.activeOperations[i];\r\n\r\n      if (oper.operationId !== id) {\r\n        newActiveOperations.push(oper);\r\n      }\r\n    }\r\n\r\n    this.activeOperations = newActiveOperations;\r\n  }\r\n\r\n  async save() {\r\n    const configFile = this.file;\r\n\r\n    configFile.setObjectContentIfSemanticallyDifferent(this.#data);\r\n\r\n    await configFile.saveContent();\r\n\r\n    if (AppServiceProxy.hasAppService) {\r\n      AppServiceProxy.sendAsync(AppServiceProxyCommands.reloadMct, \"\");\r\n    }\r\n  }\r\n\r\n  async loadGallery() {\r\n    let result = null;\r\n\r\n    // @ts-ignore\r\n    if (typeof window !== \"undefined\") {\r\n      const url = this.contentRoot + \"data/gallery.json\";\r\n\r\n      try {\r\n        result = await axios.get(url);\r\n\r\n        if (result) {\r\n          this._gallery = result.data;\r\n        }\r\n      } catch (e) {\r\n        Log.fail(\"Could not load gallery: \" + e + \" from '\" + url + \"'\");\r\n      }\r\n    } else if (this.local) {\r\n      try {\r\n        result = await this.local.readJsonFile(\"data/gallery.json\");\r\n      } catch (e) {\r\n        Log.fail(\"Could not load local file: \" + e + \" from 'data/gallery.json'\");\r\n      }\r\n\r\n      if (result !== null) {\r\n        this._gallery = result as IGallery;\r\n      }\r\n    }\r\n\r\n    if (this._gallery) {\r\n      for (const item of this._gallery.items) {\r\n        if (item.sampleSet) {\r\n          item.gitHubOwner = \"microsoft\";\r\n          item.gitHubRepoName = \"minecraft-scripting-samples\";\r\n\r\n          if (item.type === GalleryItemType.editorCodeSample) {\r\n            item.gitHubFolder = \"/editor-script-box\";\r\n\r\n            if (!item.tags) {\r\n              item.tags = [\"editor\"];\r\n            }\r\n          } else {\r\n            item.gitHubFolder = \"/script-box\";\r\n          }\r\n        }\r\n\r\n        if (item.fileList) {\r\n          const newFileList = [];\r\n\r\n          for (const fileItem of item.fileList) {\r\n            newFileList.push(MinecraftUtilities.replaceMinecraftPathTokens(fileItem));\r\n          }\r\n\r\n          item.fileList = newFileList;\r\n        }\r\n      }\r\n    }\r\n\r\n    this._galleryLoaded = true;\r\n\r\n    this._onGalleryLoaded.dispatch(this, this._gallery);\r\n\r\n    return this._gallery;\r\n  }\r\n\r\n  async getGalleryProjectByGitHub(\r\n    repoName: string,\r\n    owner: string,\r\n    branch?: string,\r\n    folder?: string,\r\n    withFiles?: boolean\r\n  ) {\r\n    if (!this._galleryLoaded) {\r\n      await this.loadGallery();\r\n    }\r\n\r\n    if (this._galleryLoaded === false || this._gallery === undefined || this._gallery.items === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    repoName = repoName.toLowerCase();\r\n    owner = owner.toLowerCase();\r\n\r\n    for (const galProj of this._gallery.items) {\r\n      if (\r\n        galProj.gitHubRepoName &&\r\n        galProj.gitHubOwner &&\r\n        galProj.gitHubRepoName.toLowerCase() === repoName &&\r\n        galProj.gitHubOwner.toLowerCase() === owner &&\r\n        branch === galProj.gitHubBranch &&\r\n        folder === galProj.gitHubFolder &&\r\n        (!withFiles || galProj.fileList)\r\n      ) {\r\n        return galProj;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async getGalleryProjectById(galleryProjectId: string) {\r\n    if (!this._galleryLoaded) {\r\n      await this.loadGallery();\r\n    }\r\n\r\n    if (this._galleryLoaded === false || this._gallery === undefined || this._gallery.items === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    galleryProjectId = galleryProjectId.toLowerCase();\r\n    galleryProjectId = galleryProjectId.replace(/-/gi, \"\");\r\n\r\n    for (const galProj of this._gallery.items) {\r\n      if (galProj.id.toLowerCase() === galleryProjectId) {\r\n        return galProj;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async getGalleryProjectByCaption(galleryProjectTitle: string) {\r\n    if (this._galleryLoaded === false || this._gallery === undefined || this._gallery.items === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const galProj of this._gallery.items) {\r\n      if (galProj.title === galleryProjectTitle) {\r\n        return galProj;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getGalleryProjectByType(itemType: GalleryItemType) {\r\n    if (this._galleryLoaded === false || this._gallery === undefined || this._gallery.items === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const galleryItems: IGalleryItem[] = [];\r\n\r\n    for (const galProj of this._gallery.items) {\r\n      if (galProj.type === itemType) {\r\n        galleryItems.push(galProj);\r\n      }\r\n    }\r\n\r\n    return galleryItems;\r\n  }\r\n\r\n  async getNewProjectName(seedName: string) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    let newProjectName = StorageUtilities.convertFolderPlaceholders(seedName);\r\n    let counter = 0;\r\n\r\n    while (\r\n      this.prefsProjectsFolder.fileExists(newProjectName + \".json\") ||\r\n      this.projectsStorage.rootFolder.folderExists(newProjectName)\r\n    ) {\r\n      counter++;\r\n      newProjectName = StorageUtilities.convertFolderPlaceholders(seedName) + \" \" + counter;\r\n    }\r\n\r\n    return newProjectName;\r\n  }\r\n\r\n  async createNewProject(\r\n    newProjectName: string,\r\n    newProjectPath: string | undefined,\r\n    newProjectFolder: IFolder | undefined,\r\n    newProjectFolderTitle: string | undefined,\r\n    focus: ProjectFocus,\r\n    includeDefaultItems: boolean,\r\n    projectLanguage?: ProjectScriptLanguage\r\n  ) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    const targetProjectName = await this.getNewProjectName(newProjectName);\r\n\r\n    let projectPrefs;\r\n\r\n    if (newProjectFolder) {\r\n      projectPrefs = await newProjectFolder.ensureFileFromRelativePath(\"/.mct/prefs.mctp.json\");\r\n    } else {\r\n      projectPrefs = await this.prefsProjectsFolder.createFile(targetProjectName + \".json\");\r\n    }\r\n\r\n    const newProject = new Project(this, targetProjectName, projectPrefs);\r\n\r\n    if (newProjectPath && !newProjectFolder) {\r\n      newProject.localFolderPath = newProjectPath;\r\n    }\r\n\r\n    if (projectLanguage) {\r\n      newProject.preferredScriptLanguage = projectLanguage;\r\n    }\r\n\r\n    if (newProjectFolder) {\r\n      newProject.setProjectFolder(newProjectFolder);\r\n      newProject.projectFolderTitle = newProjectFolderTitle;\r\n    } else {\r\n      await newProject.ensureProjectFolder();\r\n    }\r\n\r\n    newProject.focus = focus;\r\n\r\n    if (includeDefaultItems) {\r\n      await ProjectUtilities.ensureDefaultItems(newProject);\r\n    }\r\n\r\n    // Default-item generation writes files to storage, which fires file-update events\r\n    // that get recorded in changedFilesSinceLastSaved. For a brand-new project, none\r\n    // of these represent user edits \u2014 they are the initial on-disk state. Reset the\r\n    // change tracker so dirty-change indicators only appear after actual user edits.\r\n    newProject.changedFilesSinceLastSaved = {};\r\n\r\n    this.projects.push(newProject);\r\n\r\n    return newProject;\r\n  }\r\n\r\n  async createProjectFromContent(jsonStringOrBase64ZipContent: string) {\r\n    let jsonO: object | undefined = undefined;\r\n\r\n    let filteredContents = Utilities.fixJsonContent(jsonStringOrBase64ZipContent);\r\n\r\n    try {\r\n      jsonO = JSON.parse(filteredContents);\r\n    } catch (e: any) {\r\n      jsonO = undefined;\r\n    }\r\n\r\n    if (jsonO) {\r\n      const tempStorage = new Storage();\r\n\r\n      const tempFile = tempStorage.rootFolder.ensureFile(\"import.json\");\r\n\r\n      tempFile.setContent(jsonStringOrBase64ZipContent);\r\n\r\n      return await this.createProjectFromFolder(tempStorage.rootFolder);\r\n    }\r\n\r\n    let zs = new ZipStorage();\r\n\r\n    await zs.loadFromBase64(jsonStringOrBase64ZipContent);\r\n\r\n    if (zs.errorStatus !== undefined) {\r\n      return zs.errorMessage;\r\n    }\r\n\r\n    if (zs.rootFolder) {\r\n      return await this.createProjectFromFolder(zs.rootFolder);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async createAndDeployProjectFromPath(path: string): Promise<Project | string | null> {\r\n    const project = await this.createAndDeployProjectFromPath(path);\r\n\r\n    if (!project) {\r\n      return \"Could not create project from path: \" + path;\r\n    }\r\n\r\n    if (typeof project === \"string\") {\r\n      return project;\r\n    }\r\n\r\n    this.prepareAndStartToMinecraft({\r\n      project: project,\r\n    });\r\n\r\n    return project;\r\n  }\r\n\r\n  async createProjectFromPath(path: string) {\r\n    const folderAndFile = StorageUtilities.getRootAndFocusPathFromInputPath(path);\r\n\r\n    if (!folderAndFile.basePath || !CreatorToolsHost.localFolderExists || !CreatorToolsHost.ensureLocalFolder) {\r\n      return \"Invalid folder structure\";\r\n    }\r\n\r\n    const exists = await CreatorToolsHost.localFolderExists(folderAndFile.basePath);\r\n\r\n    if (!exists) {\r\n      return \"Local path does not exist: \" + folderAndFile.basePath;\r\n    }\r\n\r\n    const folder = CreatorToolsHost.ensureLocalFolder(folderAndFile.basePath);\r\n\r\n    if (!folder) {\r\n      return \"Local folder could not be created: \" + folderAndFile.basePath;\r\n    }\r\n\r\n    return this.createProjectFromFolder(folder);\r\n  }\r\n\r\n  async createProjectFromFolder(folder: IFolder) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    const newProject = new Project(this, folder.name, null);\r\n    newProject.setProjectFolder(folder);\r\n\r\n    await newProject.ensureProjectFolder();\r\n    await newProject.ensureInflated();\r\n    await newProject.inferProjectItemsFromFiles();\r\n\r\n    this.projects.push(newProject);\r\n\r\n    return newProject;\r\n  }\r\n\r\n  async createProjectFromFolderPath(path: string) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    let newProjectName = StorageUtilities.convertFolderPlaceholders(StorageUtilities.getLeafName(path));\r\n\r\n    let counter = 0;\r\n\r\n    while (\r\n      this.prefsProjectsFolder.fileExists(newProjectName + \".json\") ||\r\n      this.projectsStorage.rootFolder.folderExists(newProjectName)\r\n    ) {\r\n      counter++;\r\n      newProjectName = StorageUtilities.convertFolderPlaceholders(StorageUtilities.getLeafName(path)) + \" \" + counter;\r\n    }\r\n\r\n    const projectPrefs = await this.prefsProjectsFolder.createFile(newProjectName + \".json\");\r\n\r\n    const newProject = new Project(this, newProjectName, projectPrefs);\r\n    newProject.localFolderPath = path;\r\n\r\n    await newProject.ensureProjectFolder();\r\n\r\n    await newProject.ensureInflated();\r\n    await newProject.inferProjectItemsFromFiles();\r\n\r\n    this.projects.push(newProject);\r\n\r\n    return newProject;\r\n  }\r\n\r\n  async deleteProjectByName(projectName: string) {\r\n    let projectToDelete: Project | undefined;\r\n\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const proj = this.projects[i];\r\n\r\n      if (proj.name === projectName) {\r\n        if (projectToDelete !== undefined) {\r\n          Log.fail(\"Encountered multiple projects with the same name.\");\r\n          return;\r\n        }\r\n\r\n        projectToDelete = proj;\r\n      }\r\n    }\r\n\r\n    if (projectToDelete) {\r\n      await projectToDelete.deleteThisProject();\r\n\r\n      this.removeProject(projectToDelete);\r\n\r\n      projectToDelete.dispose();\r\n    }\r\n  }\r\n\r\n  async removeProjectByName(projectName: string) {\r\n    let projectToRemove: Project | undefined;\r\n\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const proj = this.projects[i];\r\n\r\n      if (proj.name === projectName) {\r\n        if (projectToRemove !== undefined) {\r\n          Log.fail(\"Encountered multiple projects with the same name.\");\r\n          return;\r\n        }\r\n\r\n        projectToRemove = proj;\r\n      }\r\n    }\r\n\r\n    if (!projectToRemove) {\r\n      Log.fail(\"Could not find project to remove: \" + projectName);\r\n      return;\r\n    }\r\n\r\n    await projectToRemove.deletePreferencesFile();\r\n\r\n    this.removeProject(projectToRemove);\r\n\r\n    projectToRemove.dispose();\r\n  }\r\n\r\n  removeProject(project: Project) {\r\n    const newProjects: Project[] = [];\r\n\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const proj = this.projects[i];\r\n\r\n      if (proj !== project) {\r\n        newProjects.push(proj);\r\n      }\r\n    }\r\n    this.projects = newProjects;\r\n  }\r\n\r\n  getProjectByName(projectName: string) {\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const proj = this.projects[i];\r\n\r\n      if (proj.name === projectName) {\r\n        return proj;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getProjectByMainLocalFolderPath(localPath: string) {\r\n    localPath = StorageUtilities.canonicalizePath(localPath);\r\n\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const proj = this.projects[i];\r\n\r\n      if (proj.localFolderPath && StorageUtilities.canonicalizePath(proj.localFolderPath) === localPath) {\r\n        return proj;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async ensureProjectFromLocalStoragePath(messageProjectPath: string) {\r\n    if (!this.local) {\r\n      Log.fail(\"Could not find local utilities.\");\r\n      return;\r\n    }\r\n\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    let desiredProjectName = StorageUtilities.convertFolderPlaceholders(\r\n      StorageUtilities.canonicalizePathAsFileName(messageProjectPath)\r\n    );\r\n\r\n    // check to see if the expected project with the expected name exists, and use that if possible.\r\n    const project = this.getProjectByName(desiredProjectName);\r\n    const canonPath = StorageUtilities.canonicalizePath(messageProjectPath);\r\n\r\n    if (project !== undefined) {\r\n      await project.loadPreferencesAndFolder();\r\n\r\n      if (project.localFolderPath !== undefined) {\r\n        if (canonPath === StorageUtilities.canonicalizePath(project.localFolderPath)) {\r\n          await project.ensureInflated();\r\n          await project.inferProjectItemsFromFiles();\r\n\r\n          return project;\r\n        }\r\n      }\r\n    }\r\n\r\n    // OK, a project doesn't exist, let's create one.\r\n    let counter = 0;\r\n\r\n    while (\r\n      this.prefsProjectsFolder.fileExists(desiredProjectName + \".json\") ||\r\n      this.projectsStorage.rootFolder.folderExists(desiredProjectName)\r\n    ) {\r\n      counter++;\r\n      desiredProjectName =\r\n        StorageUtilities.convertFolderPlaceholders(StorageUtilities.canonicalizePathAsFileName(messageProjectPath)) +\r\n        \" \" +\r\n        counter;\r\n    }\r\n\r\n    const projectPrefs = await this.prefsProjectsFolder.createFile(desiredProjectName + \".json\");\r\n\r\n    const newProject = new Project(this, desiredProjectName, projectPrefs);\r\n\r\n    newProject.localFolderPath = messageProjectPath;\r\n    newProject.originalFullPath = messageProjectPath;\r\n\r\n    const localStorage = this.local.createStorage(messageProjectPath);\r\n\r\n    if (localStorage === null) {\r\n      Log.fail(\"Could not create local storage.\");\r\n      return;\r\n    }\r\n\r\n    newProject.setProjectFolder(localStorage.rootFolder);\r\n\r\n    await newProject.ensureProjectFolder();\r\n\r\n    await newProject.inferProjectItemsFromFiles();\r\n\r\n    this.projects.push(newProject);\r\n\r\n    return newProject;\r\n  }\r\n\r\n  async ensureProjectForLocalFolder(folderPath: string, newProjectName?: string, openDirect?: boolean) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    folderPath = StorageUtilities.convertFolderPlaceholdersPartial(folderPath);\r\n\r\n    let desiredProjectName = \"\";\r\n\r\n    if (newProjectName !== undefined) {\r\n      desiredProjectName = newProjectName;\r\n    } else {\r\n      desiredProjectName = StorageUtilities.getLeafName(folderPath);\r\n    }\r\n\r\n    desiredProjectName = StorageUtilities.convertFolderPlaceholders(desiredProjectName);\r\n\r\n    let canonPath = StorageUtilities.canonicalizePath(folderPath);\r\n\r\n    let project = this.getProjectByMainLocalFolderPath(folderPath);\r\n\r\n    // check to see if the expected project with the expected name exists, and use that if possible.\r\n    if (!project) {\r\n      project = this.getProjectByName(desiredProjectName);\r\n    }\r\n\r\n    if (project !== undefined && !openDirect) {\r\n      await project.loadPreferencesAndFolder();\r\n\r\n      if (project.localFolderPath !== undefined) {\r\n        if (canonPath === StorageUtilities.canonicalizePath(project.localFolderPath)) {\r\n          await project.ensureInflated();\r\n          await project.inferProjectItemsFromFiles();\r\n\r\n          return project;\r\n        }\r\n      }\r\n    } else if (project && openDirect) {\r\n      for (let i = 1; i < 99; i++) {\r\n        desiredProjectName =\r\n          StorageUtilities.convertFolderPlaceholders(StorageUtilities.getLeafName(folderPath)) + \" \" + i;\r\n        canonPath = StorageUtilities.canonicalizePath(folderPath) + \" \" + i;\r\n\r\n        if (newProjectName !== undefined) {\r\n          desiredProjectName = newProjectName;\r\n        }\r\n\r\n        // check to see if the expected project with the expected name exists, and use that if possible.\r\n        let project = this.getProjectByName(desiredProjectName);\r\n\r\n        if (!project) {\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // now check all other projects to see if one exists.\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      project = this.projects[i];\r\n\r\n      await project.loadPreferencesAndFolder();\r\n\r\n      if (project.localFolderPath !== undefined) {\r\n        if (canonPath === StorageUtilities.canonicalizePath(project.localFolderPath)) {\r\n          await project.ensureInflated();\r\n          await project.inferProjectItemsFromFiles();\r\n\r\n          return project;\r\n        }\r\n      }\r\n    }\r\n\r\n    // OK, a project doesn't exist, let's create one.\r\n    let counter = 0;\r\n\r\n    while (\r\n      this.prefsProjectsFolder.fileExists(desiredProjectName + \".json\") ||\r\n      this.projectsStorage.rootFolder.folderExists(desiredProjectName)\r\n    ) {\r\n      counter++;\r\n      desiredProjectName =\r\n        StorageUtilities.convertFolderPlaceholders(StorageUtilities.getLeafName(folderPath)) + \" \" + counter;\r\n    }\r\n\r\n    const projectPrefs = await this.prefsProjectsFolder.createFile(desiredProjectName + \".json\");\r\n\r\n    const newProject = new Project(this, desiredProjectName, projectPrefs, true);\r\n\r\n    newProject.localFolderPath = folderPath;\r\n    newProject.originalFullPath = folderPath;\r\n\r\n    await newProject.ensureProjectFolder();\r\n    await newProject.inferProjectItemsFromFiles();\r\n\r\n    this.projects.push(newProject);\r\n\r\n    return newProject;\r\n  }\r\n\r\n  async getExportZip() {\r\n    const zs = new ZipStorage();\r\n\r\n    const zipRoot = zs.rootFolder;\r\n\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const project = this.projects[i];\r\n\r\n      await project.loadPreferencesAndFolder();\r\n\r\n      await project.ensureProjectFolder();\r\n\r\n      if (project.projectFolder) {\r\n        const projectTargetFolder = zipRoot.ensureFolder(project.name);\r\n\r\n        await StorageUtilities.syncFolderTo(project.projectFolder, projectTargetFolder, true, true, false);\r\n      }\r\n    }\r\n\r\n    await zipRoot.saveAll();\r\n\r\n    return zs;\r\n  }\r\n\r\n  async load(force?: boolean) {\r\n    if (this._isLoaded && !force) {\r\n      return;\r\n    }\r\n\r\n    const configFile = this.file;\r\n\r\n    if (!configFile.isContentLoaded) {\r\n      await configFile.loadContent(false);\r\n    }\r\n\r\n    if (configFile.content !== null && configFile.content !== undefined && typeof configFile.content === \"string\") {\r\n      this.#data = JSON.parse(configFile.content as string);\r\n    }\r\n\r\n    // In the Electron app, the \"remote\" flavor requires a remote server URL and auth token\r\n    // which are not persisted across sessions. Reset to processHostedProxy (host BDS locally)\r\n    // to avoid showing a non-functional remote connection UI on startup.\r\n    if (\r\n      CreatorToolsHost.isAppServiceWeb &&\r\n      this.#data.lastActiveMinecraftFlavor === MinecraftFlavor.remote &&\r\n      !this._remoteServerAuthToken\r\n    ) {\r\n      this.#data.lastActiveMinecraftFlavor = MinecraftFlavor.processHostedProxy;\r\n    }\r\n\r\n    const projectsFolder = this.prefsProjectsFolder;\r\n\r\n    await projectsFolder.load();\r\n\r\n    await this.projectsStorage.rootFolder.load();\r\n\r\n    this.projects = [];\r\n\r\n    for (const fileName in projectsFolder.files) {\r\n      const projectName = StorageUtilities.getBaseFromName(fileName);\r\n\r\n      const projectFile = projectsFolder.files[fileName];\r\n\r\n      if (projectFile !== undefined) {\r\n        const project = new Project(this, projectName, projectFile);\r\n\r\n        this.projects.push(project);\r\n      }\r\n    }\r\n\r\n    this.considerStartingMinecraft(); // explicitly not awaiting this since this might take a while and is not strictly necessary.\r\n\r\n    this.initializeWorldSettings();\r\n\r\n    this.ensureDefaultWorldName();\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n\r\n    this._isLoaded = true;\r\n  }\r\n\r\n  public async considerStartingMinecraft() {\r\n    if (CreatorToolsHost.hostType === HostType.webPlusServices || CreatorToolsHost.hostType === HostType.web) {\r\n      if (\r\n        this.successfullyConnectedWebSocketToMinecraft &&\r\n        (this.autoStartMinecraft || this.lastActiveMinecraftFlavor === MinecraftFlavor.remote)\r\n      ) {\r\n        this.ensureRemoteMinecraft();\r\n\r\n        const ct = CreatorToolsHost.getCreatorTools();\r\n        if (\r\n          this.remoteMinecraft &&\r\n          CreatorToolsHost.hostType === HostType.web &&\r\n          ct &&\r\n          ct.remoteServerUrl &&\r\n          ct.remoteServerUrl.length > 4\r\n        ) {\r\n          this.remoteMinecraft.initialize();\r\n\r\n          if (!this.activeMinecraft && this.lastActiveMinecraftFlavor === MinecraftFlavor.remote) {\r\n            this.activeMinecraft = this.remoteMinecraft;\r\n\r\n            this.lastActiveMinecraftFlavor = MinecraftFlavor.remote;\r\n          }\r\n        }\r\n\r\n        if (CreatorToolsHost.isAppServiceWeb) {\r\n          this.ensureGameMinecraft();\r\n\r\n          if (this.gameMinecraft) {\r\n            this.gameMinecraft.initialize();\r\n          }\r\n\r\n          if (!this.activeMinecraft && this.lastActiveMinecraftFlavor === MinecraftFlavor.minecraftGameProxy) {\r\n            this.activeMinecraft = this.gameMinecraft;\r\n\r\n            this.lastActiveMinecraftFlavor = MinecraftFlavor.minecraftGameProxy;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (\r\n        this.successfullyStartedMinecraftServer &&\r\n        this.lastActiveMinecraftFlavor === MinecraftFlavor.processHostedProxy &&\r\n        this.autoStartMinecraft\r\n      ) {\r\n        await this.connectToMinecraft();\r\n      }\r\n    }\r\n  }\r\n\r\n  public async connectToMinecraft() {\r\n    if (!this.lastActiveMinecraftFlavor) {\r\n      return;\r\n    }\r\n\r\n    this.ensureMinecraft(this.lastActiveMinecraftFlavor);\r\n\r\n    if (this.activeMinecraft) {\r\n      const status = await this.activeMinecraft.updateStatus();\r\n\r\n      if (\r\n        status === CreatorToolsMinecraftState.disconnected ||\r\n        status === CreatorToolsMinecraftState.error ||\r\n        status === CreatorToolsMinecraftState.none ||\r\n        status === CreatorToolsMinecraftState.stopped ||\r\n        status === CreatorToolsMinecraftState.stopping ||\r\n        status === CreatorToolsMinecraftState.newMinecraft\r\n      ) {\r\n        await this.activeMinecraft.initialize();\r\n      }\r\n    }\r\n  }\r\n\r\n  public canPrepareAndStartMinecraft() {\r\n    if (!this.activeMinecraft) {\r\n      return false;\r\n    }\r\n\r\n    if (\r\n      this.activeMinecraftState !== CreatorToolsMinecraftState.initialized &&\r\n      this.activeMinecraftState !== CreatorToolsMinecraftState.preparing &&\r\n      this.activeMinecraftState !== CreatorToolsMinecraftState.prepared &&\r\n      this.activeMinecraftState !== CreatorToolsMinecraftState.starting &&\r\n      this.activeMinecraftState !== CreatorToolsMinecraftState.started\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public async prepareAndStartToMinecraft(push: MinecraftPush) {\r\n    if (!this.canPrepareAndStartMinecraft || !this.activeMinecraft) {\r\n      return;\r\n    }\r\n\r\n    await this.activeMinecraft.prepareAndStart(push);\r\n  }\r\n  private _bubbleMinecraftRefreshed(minecraft: IMinecraft, newState: CreatorToolsMinecraftState) {\r\n    if (minecraft !== this.activeMinecraft) {\r\n      return;\r\n    }\r\n\r\n    this._onMinecraftRefreshed.dispatch(minecraft, newState);\r\n  }\r\n\r\n  private _bubbleMinecraftStateChanged(minecraft: IMinecraft, newState: CreatorToolsMinecraftState) {\r\n    if (minecraft !== this.activeMinecraft) {\r\n      return;\r\n    }\r\n\r\n    if (!this.successfullyConnectedWebSocketToMinecraft && newState === CreatorToolsMinecraftState.initialized) {\r\n      this.successfullyConnectedWebSocketToMinecraft = true;\r\n      this.save();\r\n    }\r\n\r\n    if (newState === CreatorToolsMinecraftState.prepared) {\r\n      Log.message(\"Minecraft is ready.\");\r\n    } else if (newState === CreatorToolsMinecraftState.started) {\r\n      // Log.message(\"Connected to Minecraft.\");\r\n    } else if (newState === CreatorToolsMinecraftState.stopping) {\r\n      Log.message(\"Disconnecting from Minecraft.\");\r\n    }\r\n\r\n    this._onMinecraftStateChanged.dispatch(minecraft, newState);\r\n  }\r\n\r\n  public ensureRemoteMinecraft() {\r\n    if (this.remoteMinecraft === undefined) {\r\n      this.remoteMinecraft = new RemoteMinecraft(this);\r\n    }\r\n\r\n    return this.remoteMinecraft;\r\n  }\r\n\r\n  public ensureProcessHostedMinecraft() {\r\n    if (this.processHostedMinecraft === undefined) {\r\n      this.processHostedMinecraft = new ProcessHostedMinecraft(this);\r\n    }\r\n\r\n    return this.processHostedMinecraft;\r\n  }\r\n\r\n  public ensureDeploymentStorageMinecraft() {\r\n    if (this.deploymentStorageMinecraft === undefined) {\r\n      this.deploymentStorageMinecraft = new DeploymentStorageMinecraft(this);\r\n    }\r\n\r\n    return this.deploymentStorageMinecraft;\r\n  }\r\n\r\n  public ensureGameMinecraft() {\r\n    if (this.gameMinecraft === undefined) {\r\n      this.gameMinecraft = new MinecraftGameProxyMinecraft(this);\r\n    }\r\n\r\n    if (this.autoStartMinecraft && this.successfullyConnectedWebSocketToMinecraft) {\r\n      (this.gameMinecraft as MinecraftGameProxyMinecraft).start();\r\n    }\r\n\r\n    return this.gameMinecraft;\r\n  }\r\n\r\n  public ensureMinecraft(flavor: MinecraftFlavor) {\r\n    if (flavor === MinecraftFlavor.none) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.activeMinecraft && this.lastActiveMinecraftFlavor === flavor) {\r\n      return this.activeMinecraft;\r\n    }\r\n\r\n    this.ensureRemoteMinecraft();\r\n\r\n    if (flavor === MinecraftFlavor.processHostedProxy) {\r\n      this.ensureProcessHostedMinecraft();\r\n    } else if (flavor === MinecraftFlavor.deploymentStorage) {\r\n      this.ensureDeploymentStorageMinecraft();\r\n    } else if (flavor === MinecraftFlavor.minecraftGameProxy) {\r\n      this.ensureGameMinecraft();\r\n    }\r\n\r\n    if (this.activeMinecraft) {\r\n      this.activeMinecraft.onStateChanged.unsubscribe(this._bubbleMinecraftStateChanged);\r\n      this.activeMinecraft.onRefreshed.unsubscribe(this._bubbleMinecraftRefreshed);\r\n    }\r\n\r\n    if (flavor === MinecraftFlavor.remote) {\r\n      if (!this.remoteMinecraft) {\r\n        Log.throwUnexpectedUndefined(\"EMR\");\r\n        return;\r\n      }\r\n\r\n      this.activeMinecraft = this.remoteMinecraft;\r\n      if (this.lastActiveMinecraftFlavor !== MinecraftFlavor.remote) {\r\n        this.lastActiveMinecraftFlavor = MinecraftFlavor.remote;\r\n        this.save();\r\n      }\r\n      this._onMinecraftStateChanged.dispatch(this.activeMinecraft, CreatorToolsMinecraftState.newMinecraft);\r\n\r\n      if (this.activeMinecraft === undefined) {\r\n        Log.unexpectedUndefined(\"EMA\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft.onStateChanged.subscribe(this._bubbleMinecraftStateChanged);\r\n      this.activeMinecraft.onRefreshed.subscribe(this._bubbleMinecraftRefreshed);\r\n    } else if (flavor === MinecraftFlavor.minecraftGameProxy) {\r\n      if (!this.gameMinecraft) {\r\n        Log.throwUnexpectedUndefined(\"EMG\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft = this.gameMinecraft;\r\n\r\n      if (this.lastActiveMinecraftFlavor !== MinecraftFlavor.minecraftGameProxy) {\r\n        this.lastActiveMinecraftFlavor = MinecraftFlavor.minecraftGameProxy;\r\n        this.save();\r\n      }\r\n\r\n      this._onMinecraftStateChanged.dispatch(this.activeMinecraft, CreatorToolsMinecraftState.newMinecraft);\r\n\r\n      if (this.activeMinecraft === undefined) {\r\n        Log.unexpectedUndefined(\"EMB\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft.onStateChanged.subscribe(this._bubbleMinecraftStateChanged);\r\n      this.activeMinecraft.onRefreshed.subscribe(this._bubbleMinecraftRefreshed);\r\n    } else if (flavor === MinecraftFlavor.processHostedProxy) {\r\n      if (!this.processHostedMinecraft) {\r\n        Log.throwUnexpectedUndefined(\"EMC\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft = this.processHostedMinecraft;\r\n\r\n      if (this.lastActiveMinecraftFlavor !== MinecraftFlavor.processHostedProxy) {\r\n        this.lastActiveMinecraftFlavor = MinecraftFlavor.processHostedProxy;\r\n        this.save();\r\n      }\r\n\r\n      this._onMinecraftStateChanged.dispatch(this.activeMinecraft, CreatorToolsMinecraftState.newMinecraft);\r\n\r\n      if (this.activeMinecraft === undefined) {\r\n        Log.unexpectedUndefined(\"EMD\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft.onStateChanged.subscribe(this._bubbleMinecraftStateChanged);\r\n      this.activeMinecraft.onRefreshed.subscribe(this._bubbleMinecraftRefreshed);\r\n    } else if (flavor === MinecraftFlavor.deploymentStorage) {\r\n      if (!this.deploymentStorageMinecraft) {\r\n        Log.throwUnexpectedUndefined(\"EMCD\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft = this.deploymentStorageMinecraft;\r\n\r\n      if (this.lastActiveMinecraftFlavor !== MinecraftFlavor.deploymentStorage) {\r\n        this.lastActiveMinecraftFlavor = MinecraftFlavor.deploymentStorage;\r\n        this.save();\r\n      }\r\n\r\n      this._onMinecraftStateChanged.dispatch(this.activeMinecraft, CreatorToolsMinecraftState.newMinecraft);\r\n\r\n      if (this.activeMinecraft === undefined) {\r\n        Log.unexpectedUndefined(\"EMDD\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft.onStateChanged.subscribe(this._bubbleMinecraftStateChanged);\r\n      this.activeMinecraft.onRefreshed.subscribe(this._bubbleMinecraftRefreshed);\r\n    } else if (\r\n      this.createMinecraft === undefined ||\r\n      this.canCreateMinecraft === undefined ||\r\n      !this.canCreateMinecraft(flavor)\r\n    ) {\r\n      Log.debugAlert(\"Requested creation of an unavailable Minecraft.\");\r\n      flavor = MinecraftFlavor.none;\r\n    } else {\r\n      const newMinecraft = this.createMinecraft(flavor, this);\r\n\r\n      if (!newMinecraft) {\r\n        Log.debugAlert(\"Could not create a requested Minecraft.\");\r\n        flavor = MinecraftFlavor.none;\r\n      } else {\r\n        this.activeMinecraft = newMinecraft;\r\n        this.lastActiveMinecraftFlavor = flavor;\r\n\r\n        this._onMinecraftStateChanged.dispatch(this.activeMinecraft, CreatorToolsMinecraftState.newMinecraft);\r\n\r\n        this.activeMinecraft.onStateChanged.subscribe(this._bubbleMinecraftStateChanged);\r\n        this.activeMinecraft.onRefreshed.subscribe(this._bubbleMinecraftRefreshed);\r\n      }\r\n    }\r\n\r\n    this.lastActiveMinecraftFlavor = flavor;\r\n\r\n    this.save();\r\n    return this.activeMinecraft;\r\n  }\r\n}\r\n", "/*!\n    localForage -- Offline Storage, Improved\n    Version 1.9.0\n    https://localforage.github.io/localForage\n    (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n  global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n    /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n    try {\n        if (typeof indexedDB !== 'undefined') {\n            return indexedDB;\n        }\n        if (typeof webkitIndexedDB !== 'undefined') {\n            return webkitIndexedDB;\n        }\n        if (typeof mozIndexedDB !== 'undefined') {\n            return mozIndexedDB;\n        }\n        if (typeof OIndexedDB !== 'undefined') {\n            return OIndexedDB;\n        }\n        if (typeof msIndexedDB !== 'undefined') {\n            return msIndexedDB;\n        }\n    } catch (e) {\n        return;\n    }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n    try {\n        // Initialize IndexedDB; fall back to vendor-prefixed versions\n        // if needed.\n        if (!idb || !idb.open) {\n            return false;\n        }\n        // We mimic PouchDB here;\n        //\n        // We test for openDatabase because IE Mobile identifies itself\n        // as Safari. Oh the lulz...\n        var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n        var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n        // Safari <10.1 does not meet our requirements for IDB support\n        // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n        // Safari 10.1 shipped with fetch, we can use that to detect it.\n        // Note: this creates issues with `window.fetch` polyfills and\n        // overrides; see:\n        // https://github.com/localForage/localForage/issues/856\n        return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n        // some outdated implementations of IDB that appear on Samsung\n        // and HTC Android devices <4.4 are missing IDBKeyRange\n        // See: https://github.com/mozilla/localForage/issues/128\n        // See: https://github.com/mozilla/localForage/issues/272\n        typeof IDBKeyRange !== 'undefined';\n    } catch (e) {\n        return false;\n    }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n    /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n    parts = parts || [];\n    properties = properties || {};\n    try {\n        return new Blob(parts, properties);\n    } catch (e) {\n        if (e.name !== 'TypeError') {\n            throw e;\n        }\n        var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n        var builder = new Builder();\n        for (var i = 0; i < parts.length; i += 1) {\n            builder.append(parts[i]);\n        }\n        return builder.getBlob(properties.type);\n    }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n    // In the \"nopromises\" build this will just throw if you don't have\n    // a global promise object, but it would throw anyway later.\n    _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n    if (callback) {\n        promise.then(function (result) {\n            callback(null, result);\n        }, function (error) {\n            callback(error);\n        });\n    }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n    if (typeof callback === 'function') {\n        promise.then(callback);\n    }\n\n    if (typeof errorCallback === 'function') {\n        promise[\"catch\"](errorCallback);\n    }\n}\n\nfunction normalizeKey(key) {\n    // Cast the key to a string, as that's all we can set as a key.\n    if (typeof key !== 'string') {\n        console.warn(key + ' used as a key, but it is not a string.');\n        key = String(key);\n    }\n\n    return key;\n}\n\nfunction getCallback() {\n    if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n        return arguments[arguments.length - 1];\n    }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n    var length = bin.length;\n    var buf = new ArrayBuffer(length);\n    var arr = new Uint8Array(buf);\n    for (var i = 0; i < length; i++) {\n        arr[i] = bin.charCodeAt(i);\n    }\n    return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n    return new Promise$1(function (resolve) {\n        var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n        var blob = createBlob(['']);\n        txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n        txn.onabort = function (e) {\n            // If the transaction aborts now its due to not being able to\n            // write to the database, likely due to the disk being full\n            e.preventDefault();\n            e.stopPropagation();\n            resolve(false);\n        };\n\n        txn.oncomplete = function () {\n            var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n            var matchedEdge = navigator.userAgent.match(/Edge\\//);\n            // MS Edge pretends to be Chrome 42:\n            // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n            resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n        };\n    })[\"catch\"](function () {\n        return false; // error, so assume unsupported\n    });\n}\n\nfunction _checkBlobSupport(idb) {\n    if (typeof supportsBlobs === 'boolean') {\n        return Promise$1.resolve(supportsBlobs);\n    }\n    return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n        supportsBlobs = value;\n        return supportsBlobs;\n    });\n}\n\nfunction _deferReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Create a deferred object representing the current database operation.\n    var deferredOperation = {};\n\n    deferredOperation.promise = new Promise$1(function (resolve, reject) {\n        deferredOperation.resolve = resolve;\n        deferredOperation.reject = reject;\n    });\n\n    // Enqueue the deferred operation.\n    dbContext.deferredOperations.push(deferredOperation);\n\n    // Chain its promise to the database readiness.\n    if (!dbContext.dbReady) {\n        dbContext.dbReady = deferredOperation.promise;\n    } else {\n        dbContext.dbReady = dbContext.dbReady.then(function () {\n            return deferredOperation.promise;\n        });\n    }\n}\n\nfunction _advanceReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Resolve its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.resolve();\n        return deferredOperation.promise;\n    }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Reject its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.reject(err);\n        return deferredOperation.promise;\n    }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n    return new Promise$1(function (resolve, reject) {\n        dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n        if (dbInfo.db) {\n            if (upgradeNeeded) {\n                _deferReadiness(dbInfo);\n                dbInfo.db.close();\n            } else {\n                return resolve(dbInfo.db);\n            }\n        }\n\n        var dbArgs = [dbInfo.name];\n\n        if (upgradeNeeded) {\n            dbArgs.push(dbInfo.version);\n        }\n\n        var openreq = idb.open.apply(idb, dbArgs);\n\n        if (upgradeNeeded) {\n            openreq.onupgradeneeded = function (e) {\n                var db = openreq.result;\n                try {\n                    db.createObjectStore(dbInfo.storeName);\n                    if (e.oldVersion <= 1) {\n                        // Added when support for blob shims was added\n                        db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n                    }\n                } catch (ex) {\n                    if (ex.name === 'ConstraintError') {\n                        console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n                    } else {\n                        throw ex;\n                    }\n                }\n            };\n        }\n\n        openreq.onerror = function (e) {\n            e.preventDefault();\n            reject(openreq.error);\n        };\n\n        openreq.onsuccess = function () {\n            resolve(openreq.result);\n            _advanceReadiness(dbInfo);\n        };\n    });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n    return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n    return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n    if (!dbInfo.db) {\n        return true;\n    }\n\n    var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n    var isDowngrade = dbInfo.version < dbInfo.db.version;\n    var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n    if (isDowngrade) {\n        // If the version is not the default one\n        // then warn for impossible downgrade.\n        if (dbInfo.version !== defaultVersion) {\n            console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n        }\n        // Align the versions to prevent errors.\n        dbInfo.version = dbInfo.db.version;\n    }\n\n    if (isUpgrade || isNewStore) {\n        // If the store is new then increment the version (if needed).\n        // This will trigger an \"upgradeneeded\" event which is required\n        // for creating a store.\n        if (isNewStore) {\n            var incVersion = dbInfo.db.version + 1;\n            if (incVersion > dbInfo.version) {\n                dbInfo.version = incVersion;\n            }\n        }\n\n        return true;\n    }\n\n    return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n    return new Promise$1(function (resolve, reject) {\n        var reader = new FileReader();\n        reader.onerror = reject;\n        reader.onloadend = function (e) {\n            var base64 = btoa(e.target.result || '');\n            resolve({\n                __local_forage_encoded_blob: true,\n                data: base64,\n                type: blob.type\n            });\n        };\n        reader.readAsBinaryString(blob);\n    });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n    var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n    return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n    return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n    var self = this;\n\n    var promise = self._initReady().then(function () {\n        var dbContext = dbContexts[self._dbInfo.name];\n\n        if (dbContext && dbContext.dbReady) {\n            return dbContext.dbReady;\n        }\n    });\n\n    executeTwoCallbacks(promise, callback, callback);\n    return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n    _deferReadiness(dbInfo);\n\n    var dbContext = dbContexts[dbInfo.name];\n    var forages = dbContext.forages;\n\n    for (var i = 0; i < forages.length; i++) {\n        var forage = forages[i];\n        if (forage._dbInfo.db) {\n            forage._dbInfo.db.close();\n            forage._dbInfo.db = null;\n        }\n    }\n    dbInfo.db = null;\n\n    return _getOriginalConnection(dbInfo).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        // store the latest db reference\n        // in case the db was upgraded\n        dbInfo.db = dbContext.db = db;\n        for (var i = 0; i < forages.length; i++) {\n            forages[i]._dbInfo.db = db;\n        }\n    })[\"catch\"](function (err) {\n        _rejectReadiness(dbInfo, err);\n        throw err;\n    });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n    if (retries === undefined) {\n        retries = 1;\n    }\n\n    try {\n        var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n        callback(null, tx);\n    } catch (err) {\n        if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n            return Promise$1.resolve().then(function () {\n                if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n                    // increase the db version, to create the new ObjectStore\n                    if (dbInfo.db) {\n                        dbInfo.version = dbInfo.db.version + 1;\n                    }\n                    // Reopen the database for upgrading.\n                    return _getUpgradedConnection(dbInfo);\n                }\n            }).then(function () {\n                return _tryReconnect(dbInfo).then(function () {\n                    createTransaction(dbInfo, mode, callback, retries - 1);\n                });\n            })[\"catch\"](callback);\n        }\n\n        callback(err);\n    }\n}\n\nfunction createDbContext() {\n    return {\n        // Running localForages sharing a database.\n        forages: [],\n        // Shared database.\n        db: null,\n        // Database readiness (promise).\n        dbReady: null,\n        // Deferred operations on the database.\n        deferredOperations: []\n    };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    // Get the current context of the database;\n    var dbContext = dbContexts[dbInfo.name];\n\n    // ...or create a new context.\n    if (!dbContext) {\n        dbContext = createDbContext();\n        // Register the new context in the global container.\n        dbContexts[dbInfo.name] = dbContext;\n    }\n\n    // Register itself as a running localForage in the current context.\n    dbContext.forages.push(self);\n\n    // Replace the default `ready()` function with the specialized one.\n    if (!self._initReady) {\n        self._initReady = self.ready;\n        self.ready = _fullyReady;\n    }\n\n    // Create an array of initialization states of the related localForages.\n    var initPromises = [];\n\n    function ignoreErrors() {\n        // Don't handle errors here,\n        // just makes sure related localForages aren't pending.\n        return Promise$1.resolve();\n    }\n\n    for (var j = 0; j < dbContext.forages.length; j++) {\n        var forage = dbContext.forages[j];\n        if (forage !== self) {\n            // Don't wait for itself...\n            initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n        }\n    }\n\n    // Take a snapshot of the related localForages.\n    var forages = dbContext.forages.slice(0);\n\n    // Initialize the connection process only when\n    // all the related localForages aren't pending.\n    return Promise$1.all(initPromises).then(function () {\n        dbInfo.db = dbContext.db;\n        // Get the connection or open a new one without upgrade.\n        return _getOriginalConnection(dbInfo);\n    }).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        dbInfo.db = dbContext.db = db;\n        self._dbInfo = dbInfo;\n        // Share the final connection amongst related localForages.\n        for (var k = 0; k < forages.length; k++) {\n            var forage = forages[k];\n            if (forage !== self) {\n                // Self is already up-to-date.\n                forage._dbInfo.db = dbInfo.db;\n                forage._dbInfo.version = dbInfo.version;\n            }\n        }\n    });\n}\n\nfunction getItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.get(key);\n\n                    req.onsuccess = function () {\n                        var value = req.result;\n                        if (value === undefined) {\n                            value = null;\n                        }\n                        if (_isEncodedBlob(value)) {\n                            value = _decodeBlob(value);\n                        }\n                        resolve(value);\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.openCursor();\n                    var iterationNumber = 1;\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n\n                        if (cursor) {\n                            var value = cursor.value;\n                            if (_isEncodedBlob(value)) {\n                                value = _decodeBlob(value);\n                            }\n                            var result = iterator(value, cursor.key, iterationNumber++);\n\n                            // when the iterator callback returns any\n                            // (non-`undefined`) value, then we stop\n                            // the iteration immediately\n                            if (result !== void 0) {\n                                resolve(result);\n                            } else {\n                                cursor[\"continue\"]();\n                            }\n                        } else {\n                            resolve();\n                        }\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n\n    return promise;\n}\n\nfunction setItem(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        var dbInfo;\n        self.ready().then(function () {\n            dbInfo = self._dbInfo;\n            if (toString.call(value) === '[object Blob]') {\n                return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n                    if (blobSupport) {\n                        return value;\n                    }\n                    return _encodeBlob(value);\n                });\n            }\n            return value;\n        }).then(function (value) {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n\n                    // The reason we don't _save_ null is because IE 10 does\n                    // not support saving the `null` type in IndexedDB. How\n                    // ironic, given the bug below!\n                    // See: https://github.com/mozilla/localForage/issues/161\n                    if (value === null) {\n                        value = undefined;\n                    }\n\n                    var req = store.put(value, key);\n\n                    transaction.oncomplete = function () {\n                        // Cast to undefined so the value passed to\n                        // callback/promise is the same as what one would get out\n                        // of `getItem()` later. This leads to some weirdness\n                        // (setItem('foo', undefined) will return `null`), but\n                        // it's not my fault localStorage is our baseline and that\n                        // it's weird.\n                        if (value === undefined) {\n                            value = null;\n                        }\n\n                        resolve(value);\n                    };\n                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction removeItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    // We use a Grunt task to make this safe for IE and some\n                    // versions of Android (including those used by Cordova).\n                    // Normally IE won't like `.delete()` and will insist on\n                    // using `['delete']()`, but we have a build step that\n                    // fixes this for us now.\n                    var req = store[\"delete\"](key);\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onerror = function () {\n                        reject(req.error);\n                    };\n\n                    // The request will be also be aborted if we've exceeded our storage\n                    // space.\n                    transaction.onabort = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction clear(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.clear();\n\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction length(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.count();\n\n                    req.onsuccess = function () {\n                        resolve(req.result);\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction key(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        if (n < 0) {\n            resolve(null);\n\n            return;\n        }\n\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var advanced = false;\n                    var req = store.openKeyCursor();\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n                        if (!cursor) {\n                            // this means there weren't enough keys\n                            resolve(null);\n\n                            return;\n                        }\n\n                        if (n === 0) {\n                            // We have the first key, return it if that's what they\n                            // wanted.\n                            resolve(cursor.key);\n                        } else {\n                            if (!advanced) {\n                                // Otherwise, ask the cursor to skip ahead n\n                                // records.\n                                advanced = true;\n                                cursor.advance(n);\n                            } else {\n                                // When we get here, we've got the nth key.\n                                resolve(cursor.key);\n                            }\n                        }\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.openKeyCursor();\n                    var keys = [];\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n\n                        if (!cursor) {\n                            resolve(keys);\n                            return;\n                        }\n\n                        keys.push(cursor.key);\n                        cursor[\"continue\"]();\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n        var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n            var dbContext = dbContexts[options.name];\n            var forages = dbContext.forages;\n            dbContext.db = db;\n            for (var i = 0; i < forages.length; i++) {\n                forages[i]._dbInfo.db = db;\n            }\n            return db;\n        });\n\n        if (!options.storeName) {\n            promise = dbPromise.then(function (db) {\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                }\n\n                var dropDBPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.deleteDatabase(options.name);\n\n                    req.onerror = req.onblocked = function (err) {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        reject(err);\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        resolve(db);\n                    };\n                });\n\n                return dropDBPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var i = 0; i < forages.length; i++) {\n                        var _forage = forages[i];\n                        _advanceReadiness(_forage._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        } else {\n            promise = dbPromise.then(function (db) {\n                if (!db.objectStoreNames.contains(options.storeName)) {\n                    return;\n                }\n\n                var newVersion = db.version + 1;\n\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                    forage._dbInfo.version = newVersion;\n                }\n\n                var dropObjectPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.open(options.name, newVersion);\n\n                    req.onerror = function (err) {\n                        var db = req.result;\n                        db.close();\n                        reject(err);\n                    };\n\n                    req.onupgradeneeded = function () {\n                        var db = req.result;\n                        db.deleteObjectStore(options.storeName);\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        db.close();\n                        resolve(db);\n                    };\n                });\n\n                return dropObjectPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var j = 0; j < forages.length; j++) {\n                        var _forage2 = forages[j];\n                        _forage2._dbInfo.db = db;\n                        _advanceReadiness(_forage2._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        }\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar asyncStorage = {\n    _driver: 'asyncStorage',\n    _initStorage: _initStorage,\n    _support: isIndexedDBValid(),\n    iterate: iterate,\n    getItem: getItem,\n    setItem: setItem,\n    removeItem: removeItem,\n    clear: clear,\n    length: length,\n    key: key,\n    keys: keys,\n    dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n    return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n    // Fill the string into a ArrayBuffer.\n    var bufferLength = serializedString.length * 0.75;\n    var len = serializedString.length;\n    var i;\n    var p = 0;\n    var encoded1, encoded2, encoded3, encoded4;\n\n    if (serializedString[serializedString.length - 1] === '=') {\n        bufferLength--;\n        if (serializedString[serializedString.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    var buffer = new ArrayBuffer(bufferLength);\n    var bytes = new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n        encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n        encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n        encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n        /*jslint bitwise: true */\n        bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n        bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n        bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n    }\n    return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n    // base64-arraybuffer\n    var bytes = new Uint8Array(buffer);\n    var base64String = '';\n    var i;\n\n    for (i = 0; i < bytes.length; i += 3) {\n        /*jslint bitwise: true */\n        base64String += BASE_CHARS[bytes[i] >> 2];\n        base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n        base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n        base64String += BASE_CHARS[bytes[i + 2] & 63];\n    }\n\n    if (bytes.length % 3 === 2) {\n        base64String = base64String.substring(0, base64String.length - 1) + '=';\n    } else if (bytes.length % 3 === 1) {\n        base64String = base64String.substring(0, base64String.length - 2) + '==';\n    }\n\n    return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n    var valueType = '';\n    if (value) {\n        valueType = toString$1.call(value);\n    }\n\n    // Cannot use `value instanceof ArrayBuffer` or such here, as these\n    // checks fail when running the tests using casper.js...\n    //\n    // TODO: See why those tests fail and use a better solution.\n    if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n        // Convert binary arrays to a string and prefix the string with\n        // a special marker.\n        var buffer;\n        var marker = SERIALIZED_MARKER;\n\n        if (value instanceof ArrayBuffer) {\n            buffer = value;\n            marker += TYPE_ARRAYBUFFER;\n        } else {\n            buffer = value.buffer;\n\n            if (valueType === '[object Int8Array]') {\n                marker += TYPE_INT8ARRAY;\n            } else if (valueType === '[object Uint8Array]') {\n                marker += TYPE_UINT8ARRAY;\n            } else if (valueType === '[object Uint8ClampedArray]') {\n                marker += TYPE_UINT8CLAMPEDARRAY;\n            } else if (valueType === '[object Int16Array]') {\n                marker += TYPE_INT16ARRAY;\n            } else if (valueType === '[object Uint16Array]') {\n                marker += TYPE_UINT16ARRAY;\n            } else if (valueType === '[object Int32Array]') {\n                marker += TYPE_INT32ARRAY;\n            } else if (valueType === '[object Uint32Array]') {\n                marker += TYPE_UINT32ARRAY;\n            } else if (valueType === '[object Float32Array]') {\n                marker += TYPE_FLOAT32ARRAY;\n            } else if (valueType === '[object Float64Array]') {\n                marker += TYPE_FLOAT64ARRAY;\n            } else {\n                callback(new Error('Failed to get type for BinaryArray'));\n            }\n        }\n\n        callback(marker + bufferToString(buffer));\n    } else if (valueType === '[object Blob]') {\n        // Conver the blob to a binaryArray and then to a string.\n        var fileReader = new FileReader();\n\n        fileReader.onload = function () {\n            // Backwards-compatible prefix for the blob type.\n            var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n            callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n        };\n\n        fileReader.readAsArrayBuffer(value);\n    } else {\n        try {\n            callback(JSON.stringify(value));\n        } catch (e) {\n            console.error(\"Couldn't convert value into a JSON string: \", value);\n\n            callback(null, e);\n        }\n    }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n    // If we haven't marked this string as being specially serialized (i.e.\n    // something other than serialized JSON), we can just return it and be\n    // done with it.\n    if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n        return JSON.parse(value);\n    }\n\n    // The following code deals with deserializing some kind of Blob or\n    // TypedArray. First we separate out the type of data we're dealing\n    // with from the data itself.\n    var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n    var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n    var blobType;\n    // Backwards-compatible blob type serialization strategy.\n    // DBs created with older versions of localForage will simply not have the blob type.\n    if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n        var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n        blobType = matcher[1];\n        serializedString = serializedString.substring(matcher[0].length);\n    }\n    var buffer = stringToBuffer(serializedString);\n\n    // Return the right type based on the code/type set during\n    // serialization.\n    switch (type) {\n        case TYPE_ARRAYBUFFER:\n            return buffer;\n        case TYPE_BLOB:\n            return createBlob([buffer], { type: blobType });\n        case TYPE_INT8ARRAY:\n            return new Int8Array(buffer);\n        case TYPE_UINT8ARRAY:\n            return new Uint8Array(buffer);\n        case TYPE_UINT8CLAMPEDARRAY:\n            return new Uint8ClampedArray(buffer);\n        case TYPE_INT16ARRAY:\n            return new Int16Array(buffer);\n        case TYPE_UINT16ARRAY:\n            return new Uint16Array(buffer);\n        case TYPE_INT32ARRAY:\n            return new Int32Array(buffer);\n        case TYPE_UINT32ARRAY:\n            return new Uint32Array(buffer);\n        case TYPE_FLOAT32ARRAY:\n            return new Float32Array(buffer);\n        case TYPE_FLOAT64ARRAY:\n            return new Float64Array(buffer);\n        default:\n            throw new Error('Unkown type: ' + type);\n    }\n}\n\nvar localforageSerializer = {\n    serialize: serialize,\n    deserialize: deserialize,\n    stringToBuffer: stringToBuffer,\n    bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n    t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n        }\n    }\n\n    var dbInfoPromise = new Promise$1(function (resolve, reject) {\n        // Open the database; the openDatabase API will automatically\n        // create it for us if it doesn't exist.\n        try {\n            dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n        } catch (e) {\n            return reject(e);\n        }\n\n        // Create our key/value table if it doesn't exist.\n        dbInfo.db.transaction(function (t) {\n            createDbTable(t, dbInfo, function () {\n                self._dbInfo = dbInfo;\n                resolve();\n            }, function (t, error) {\n                reject(error);\n            });\n        }, reject);\n    });\n\n    dbInfo.serializer = localforageSerializer;\n    return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n    t.executeSql(sqlStatement, args, callback, function (t, error) {\n        if (error.code === error.SYNTAX_ERR) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n                if (!results.rows.length) {\n                    // if the table is missing (was deleted)\n                    // re-create it table and retry\n                    createDbTable(t, dbInfo, function () {\n                        t.executeSql(sqlStatement, args, callback, errorCallback);\n                    }, errorCallback);\n                } else {\n                    errorCallback(t, error);\n                }\n            }, errorCallback);\n        } else {\n            errorCallback(t, error);\n        }\n    }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).value : null;\n\n                    // Check to see if this is serialized content we need to\n                    // unpack.\n                    if (result) {\n                        result = dbInfo.serializer.deserialize(result);\n                    }\n\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var rows = results.rows;\n                    var length = rows.length;\n\n                    for (var i = 0; i < length; i++) {\n                        var item = rows.item(i);\n                        var result = item.value;\n\n                        // Check to see if this is serialized content\n                        // we need to unpack.\n                        if (result) {\n                            result = dbInfo.serializer.deserialize(result);\n                        }\n\n                        result = iterator(result, item.key, i + 1);\n\n                        // void(0) prevents problems with redefinition\n                        // of `undefined`.\n                        if (result !== void 0) {\n                            resolve(result);\n                            return;\n                        }\n                    }\n\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            // The localStorage API doesn't return undefined values in an\n            // \"expected\" way, so undefined is always cast to null in all\n            // drivers. See: https://github.com/mozilla/localForage/pull/42\n            if (value === undefined) {\n                value = null;\n            }\n\n            // Save the original value to pass to the callback.\n            var originalValue = value;\n\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    dbInfo.db.transaction(function (t) {\n                        tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n                            resolve(originalValue);\n                        }, function (t, error) {\n                            reject(error);\n                        });\n                    }, function (sqlError) {\n                        // The transaction failed; check\n                        // to see if it's a quota error.\n                        if (sqlError.code === sqlError.QUOTA_ERR) {\n                            // We reject the callback outright for now, but\n                            // it's worth trying to re-run the transaction.\n                            // Even if the user accepts the prompt to use\n                            // more storage on Safari, this error will\n                            // be called.\n                            //\n                            // Try to re-run the transaction.\n                            if (retriesLeft > 0) {\n                                resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n                                return;\n                            }\n                            reject(sqlError);\n                        }\n                    });\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n    return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                // Ahhh, SQL makes this one soooooo easy.\n                tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var result = results.rows.item(0).c;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).key : null;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var keys = [];\n\n                    for (var i = 0; i < results.rows.length; i++) {\n                        keys.push(results.rows.item(i).key);\n                    }\n\n                    resolve(keys);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n    return new Promise$1(function (resolve, reject) {\n        db.transaction(function (t) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n                var storeNames = [];\n\n                for (var i = 0; i < results.rows.length; i++) {\n                    storeNames.push(results.rows.item(i).name);\n                }\n\n                resolve({\n                    db: db,\n                    storeNames: storeNames\n                });\n            }, function (t, error) {\n                reject(error);\n            });\n        }, function (sqlError) {\n            reject(sqlError);\n        });\n    });\n}\n\nfunction dropInstance$1(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            var db;\n            if (options.name === currentConfig.name) {\n                // use the db reference of the current instance\n                db = self._dbInfo.db;\n            } else {\n                db = openDatabase(options.name, '', '', 0);\n            }\n\n            if (!options.storeName) {\n                // drop all database tables\n                resolve(getAllStoreNames(db));\n            } else {\n                resolve({\n                    db: db,\n                    storeNames: [options.storeName]\n                });\n            }\n        }).then(function (operationInfo) {\n            return new Promise$1(function (resolve, reject) {\n                operationInfo.db.transaction(function (t) {\n                    function dropTable(storeName) {\n                        return new Promise$1(function (resolve, reject) {\n                            t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n                                resolve();\n                            }, function (t, error) {\n                                reject(error);\n                            });\n                        });\n                    }\n\n                    var operations = [];\n                    for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n                        operations.push(dropTable(operationInfo.storeNames[i]));\n                    }\n\n                    Promise$1.all(operations).then(function () {\n                        resolve();\n                    })[\"catch\"](function (e) {\n                        reject(e);\n                    });\n                }, function (sqlError) {\n                    reject(sqlError);\n                });\n            });\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar webSQLStorage = {\n    _driver: 'webSQLStorage',\n    _initStorage: _initStorage$1,\n    _support: isWebSQLValid(),\n    iterate: iterate$1,\n    getItem: getItem$1,\n    setItem: setItem$1,\n    removeItem: removeItem$1,\n    clear: clear$1,\n    length: length$1,\n    key: key$1,\n    keys: keys$1,\n    dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n    try {\n        return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n        // in IE8 typeof localStorage.setItem === 'object'\n        !!localStorage.setItem;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n    var keyPrefix = options.name + '/';\n\n    if (options.storeName !== defaultConfig.storeName) {\n        keyPrefix += options.storeName + '/';\n    }\n    return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n    var localStorageTestKey = '_localforage_support_test';\n\n    try {\n        localStorage.setItem(localStorageTestKey, true);\n        localStorage.removeItem(localStorageTestKey);\n\n        return false;\n    } catch (e) {\n        return true;\n    }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n    return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n    var self = this;\n    var dbInfo = {};\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n    if (!_isLocalStorageUsable()) {\n        return Promise$1.reject();\n    }\n\n    self._dbInfo = dbInfo;\n    dbInfo.serializer = localforageSerializer;\n\n    return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var keyPrefix = self._dbInfo.keyPrefix;\n\n        for (var i = localStorage.length - 1; i >= 0; i--) {\n            var key = localStorage.key(i);\n\n            if (key.indexOf(keyPrefix) === 0) {\n                localStorage.removeItem(key);\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n        // If a result was found, parse it from the serialized\n        // string into a JS object. If result isn't truthy, the key\n        // is likely undefined and we'll pass it straight to the\n        // callback.\n        if (result) {\n            result = dbInfo.serializer.deserialize(result);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n    var self = this;\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var keyPrefix = dbInfo.keyPrefix;\n        var keyPrefixLength = keyPrefix.length;\n        var length = localStorage.length;\n\n        // We use a dedicated iterator instead of the `i` variable below\n        // so other keys we fetch in localStorage aren't counted in\n        // the `iterationNumber` argument passed to the `iterate()`\n        // callback.\n        //\n        // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n        var iterationNumber = 1;\n\n        for (var i = 0; i < length; i++) {\n            var key = localStorage.key(i);\n            if (key.indexOf(keyPrefix) !== 0) {\n                continue;\n            }\n            var value = localStorage.getItem(key);\n\n            // If a result was found, parse it from the serialized\n            // string into a JS object. If result isn't truthy, the\n            // key is likely undefined and we'll pass it straight\n            // to the iterator.\n            if (value) {\n                value = dbInfo.serializer.deserialize(value);\n            }\n\n            value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n            if (value !== void 0) {\n                return value;\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result;\n        try {\n            result = localStorage.key(n);\n        } catch (error) {\n            result = null;\n        }\n\n        // Remove the prefix from the key, if a key is found.\n        if (result) {\n            result = result.substring(dbInfo.keyPrefix.length);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var length = localStorage.length;\n        var keys = [];\n\n        for (var i = 0; i < length; i++) {\n            var itemKey = localStorage.key(i);\n            if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n                keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n            }\n        }\n\n        return keys;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n    var self = this;\n    var promise = self.keys().then(function (keys) {\n        return keys.length;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        localStorage.removeItem(dbInfo.keyPrefix + key);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        // Convert undefined values to null.\n        // https://github.com/mozilla/localForage/pull/42\n        if (value === undefined) {\n            value = null;\n        }\n\n        // Save the original value to pass to the callback.\n        var originalValue = value;\n\n        return new Promise$1(function (resolve, reject) {\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    try {\n                        localStorage.setItem(dbInfo.keyPrefix + key, value);\n                        resolve(originalValue);\n                    } catch (e) {\n                        // localStorage capacity exceeded.\n                        // TODO: Make this a specific error/event.\n                        if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n                            reject(e);\n                        }\n                        reject(e);\n                    }\n                }\n            });\n        });\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        var currentConfig = this.config();\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            if (!options.storeName) {\n                resolve(options.name + '/');\n            } else {\n                resolve(_getKeyPrefix(options, self._defaultConfig));\n            }\n        }).then(function (keyPrefix) {\n            for (var i = localStorage.length - 1; i >= 0; i--) {\n                var key = localStorage.key(i);\n\n                if (key.indexOf(keyPrefix) === 0) {\n                    localStorage.removeItem(key);\n                }\n            }\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar localStorageWrapper = {\n    _driver: 'localStorageWrapper',\n    _initStorage: _initStorage$2,\n    _support: isLocalStorageValid(),\n    iterate: iterate$2,\n    getItem: getItem$2,\n    setItem: setItem$2,\n    removeItem: removeItem$2,\n    clear: clear$2,\n    length: length$2,\n    key: key$2,\n    keys: keys$2,\n    dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n    return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n    var len = array.length;\n    var i = 0;\n    while (i < len) {\n        if (sameValue(array[i], searchElement)) {\n            return true;\n        }\n        i++;\n    }\n\n    return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n    return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n    INDEXEDDB: asyncStorage,\n    WEBSQL: webSQLStorage,\n    LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n    description: '',\n    driver: DefaultDriverOrder.slice(),\n    name: 'localforage',\n    // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n    // we can use without a prompt.\n    size: 4980736,\n    storeName: 'keyvaluepairs',\n    version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n    localForageInstance[libraryMethod] = function () {\n        var _args = arguments;\n        return localForageInstance.ready().then(function () {\n            return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n        });\n    };\n}\n\nfunction extend() {\n    for (var i = 1; i < arguments.length; i++) {\n        var arg = arguments[i];\n\n        if (arg) {\n            for (var _key in arg) {\n                if (arg.hasOwnProperty(_key)) {\n                    if (isArray(arg[_key])) {\n                        arguments[0][_key] = arg[_key].slice();\n                    } else {\n                        arguments[0][_key] = arg[_key];\n                    }\n                }\n            }\n        }\n    }\n\n    return arguments[0];\n}\n\nvar LocalForage = function () {\n    function LocalForage(options) {\n        _classCallCheck(this, LocalForage);\n\n        for (var driverTypeKey in DefaultDrivers) {\n            if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n                var driver = DefaultDrivers[driverTypeKey];\n                var driverName = driver._driver;\n                this[driverTypeKey] = driverName;\n\n                if (!DefinedDrivers[driverName]) {\n                    // we don't need to wait for the promise,\n                    // since the default drivers can be defined\n                    // in a blocking manner\n                    this.defineDriver(driver);\n                }\n            }\n        }\n\n        this._defaultConfig = extend({}, DefaultConfig);\n        this._config = extend({}, this._defaultConfig, options);\n        this._driverSet = null;\n        this._initDriver = null;\n        this._ready = false;\n        this._dbInfo = null;\n\n        this._wrapLibraryMethodsWithReady();\n        this.setDriver(this._config.driver)[\"catch\"](function () {});\n    }\n\n    // Set any config values for localForage; can be called anytime before\n    // the first API call (e.g. `getItem`, `setItem`).\n    // We loop through options so we don't overwrite existing config\n    // values.\n\n\n    LocalForage.prototype.config = function config(options) {\n        // If the options argument is an object, we use it to set values.\n        // Otherwise, we return either a specified config value or all\n        // config values.\n        if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n            // If localforage is ready and fully initialized, we can't set\n            // any new configuration values. Instead, we return an error.\n            if (this._ready) {\n                return new Error(\"Can't call config() after localforage \" + 'has been used.');\n            }\n\n            for (var i in options) {\n                if (i === 'storeName') {\n                    options[i] = options[i].replace(/\\W/g, '_');\n                }\n\n                if (i === 'version' && typeof options[i] !== 'number') {\n                    return new Error('Database version must be a number.');\n                }\n\n                this._config[i] = options[i];\n            }\n\n            // after all config options are set and\n            // the driver option is used, try setting it\n            if ('driver' in options && options.driver) {\n                return this.setDriver(this._config.driver);\n            }\n\n            return true;\n        } else if (typeof options === 'string') {\n            return this._config[options];\n        } else {\n            return this._config;\n        }\n    };\n\n    // Used to define a custom driver, shared across all instances of\n    // localForage.\n\n\n    LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n        var promise = new Promise$1(function (resolve, reject) {\n            try {\n                var driverName = driverObject._driver;\n                var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n                // A driver name should be defined and not overlap with the\n                // library-defined, default drivers.\n                if (!driverObject._driver) {\n                    reject(complianceError);\n                    return;\n                }\n\n                var driverMethods = LibraryMethods.concat('_initStorage');\n                for (var i = 0, len = driverMethods.length; i < len; i++) {\n                    var driverMethodName = driverMethods[i];\n\n                    // when the property is there,\n                    // it should be a method even when optional\n                    var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n                    if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n                        reject(complianceError);\n                        return;\n                    }\n                }\n\n                var configureMissingMethods = function configureMissingMethods() {\n                    var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n                        return function () {\n                            var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n                            var promise = Promise$1.reject(error);\n                            executeCallback(promise, arguments[arguments.length - 1]);\n                            return promise;\n                        };\n                    };\n\n                    for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n                        var optionalDriverMethod = OptionalDriverMethods[_i];\n                        if (!driverObject[optionalDriverMethod]) {\n                            driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n                        }\n                    }\n                };\n\n                configureMissingMethods();\n\n                var setDriverSupport = function setDriverSupport(support) {\n                    if (DefinedDrivers[driverName]) {\n                        console.info('Redefining LocalForage driver: ' + driverName);\n                    }\n                    DefinedDrivers[driverName] = driverObject;\n                    DriverSupport[driverName] = support;\n                    // don't use a then, so that we can define\n                    // drivers that have simple _support methods\n                    // in a blocking manner\n                    resolve();\n                };\n\n                if ('_support' in driverObject) {\n                    if (driverObject._support && typeof driverObject._support === 'function') {\n                        driverObject._support().then(setDriverSupport, reject);\n                    } else {\n                        setDriverSupport(!!driverObject._support);\n                    }\n                } else {\n                    setDriverSupport(true);\n                }\n            } catch (e) {\n                reject(e);\n            }\n        });\n\n        executeTwoCallbacks(promise, callback, errorCallback);\n        return promise;\n    };\n\n    LocalForage.prototype.driver = function driver() {\n        return this._driver || null;\n    };\n\n    LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n        var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n        executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n        return getDriverPromise;\n    };\n\n    LocalForage.prototype.getSerializer = function getSerializer(callback) {\n        var serializerPromise = Promise$1.resolve(localforageSerializer);\n        executeTwoCallbacks(serializerPromise, callback);\n        return serializerPromise;\n    };\n\n    LocalForage.prototype.ready = function ready(callback) {\n        var self = this;\n\n        var promise = self._driverSet.then(function () {\n            if (self._ready === null) {\n                self._ready = self._initDriver();\n            }\n\n            return self._ready;\n        });\n\n        executeTwoCallbacks(promise, callback, callback);\n        return promise;\n    };\n\n    LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n        var self = this;\n\n        if (!isArray(drivers)) {\n            drivers = [drivers];\n        }\n\n        var supportedDrivers = this._getSupportedDrivers(drivers);\n\n        function setDriverToConfig() {\n            self._config.driver = self.driver();\n        }\n\n        function extendSelfWithDriver(driver) {\n            self._extend(driver);\n            setDriverToConfig();\n\n            self._ready = self._initStorage(self._config);\n            return self._ready;\n        }\n\n        function initDriver(supportedDrivers) {\n            return function () {\n                var currentDriverIndex = 0;\n\n                function driverPromiseLoop() {\n                    while (currentDriverIndex < supportedDrivers.length) {\n                        var driverName = supportedDrivers[currentDriverIndex];\n                        currentDriverIndex++;\n\n                        self._dbInfo = null;\n                        self._ready = null;\n\n                        return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n                    }\n\n                    setDriverToConfig();\n                    var error = new Error('No available storage method found.');\n                    self._driverSet = Promise$1.reject(error);\n                    return self._driverSet;\n                }\n\n                return driverPromiseLoop();\n            };\n        }\n\n        // There might be a driver initialization in progress\n        // so wait for it to finish in order to avoid a possible\n        // race condition to set _dbInfo\n        var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n            return Promise$1.resolve();\n        }) : Promise$1.resolve();\n\n        this._driverSet = oldDriverSetDone.then(function () {\n            var driverName = supportedDrivers[0];\n            self._dbInfo = null;\n            self._ready = null;\n\n            return self.getDriver(driverName).then(function (driver) {\n                self._driver = driver._driver;\n                setDriverToConfig();\n                self._wrapLibraryMethodsWithReady();\n                self._initDriver = initDriver(supportedDrivers);\n            });\n        })[\"catch\"](function () {\n            setDriverToConfig();\n            var error = new Error('No available storage method found.');\n            self._driverSet = Promise$1.reject(error);\n            return self._driverSet;\n        });\n\n        executeTwoCallbacks(this._driverSet, callback, errorCallback);\n        return this._driverSet;\n    };\n\n    LocalForage.prototype.supports = function supports(driverName) {\n        return !!DriverSupport[driverName];\n    };\n\n    LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n        extend(this, libraryMethodsAndProperties);\n    };\n\n    LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n        var supportedDrivers = [];\n        for (var i = 0, len = drivers.length; i < len; i++) {\n            var driverName = drivers[i];\n            if (this.supports(driverName)) {\n                supportedDrivers.push(driverName);\n            }\n        }\n        return supportedDrivers;\n    };\n\n    LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n        // Add a stub for each driver API method that delays the call to the\n        // corresponding driver method until localForage is ready. These stubs\n        // will be replaced by the driver methods as soon as the driver is\n        // loaded, so there is no performance impact.\n        for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n            callWhenReady(this, LibraryMethods[i]);\n        }\n    };\n\n    LocalForage.prototype.createInstance = function createInstance(options) {\n        return new LocalForage(options);\n    };\n\n    return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport FileBase from \"./FileBase\";\r\nimport BrowserFolder from \"./BrowserFolder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport BrowserStorage from \"./BrowserStorage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport localforage from \"localforage\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class BrowserFile extends FileBase implements IFile {\r\n  private _name: string;\r\n  private _parentFolder: BrowserFolder;\r\n  private _lastLoadedPath?: string;\r\n  sizeAtLoad?: number;\r\n\r\n  get name(): string {\r\n    return this._name;\r\n  }\r\n\r\n  get parentFolder(): BrowserFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get fullPath(): string {\r\n    return this._parentFolder.fullPath + BrowserStorage.slashFolderDelimiter + this.name;\r\n  }\r\n\r\n  get size(): number {\r\n    if (this.content == null) {\r\n      return -1;\r\n    }\r\n\r\n    return this.content.length;\r\n  }\r\n\r\n  constructor(parentFolder: BrowserFolder, fileName: string) {\r\n    super();\r\n\r\n    this.sizeAtLoad = undefined;\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = fileName;\r\n  }\r\n\r\n  get isContentLoaded(): boolean {\r\n    return this.lastLoadedOrSaved != null || this.modified != null;\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (skipRemoveFromParent !== true) {\r\n      this._parentFolder._removeFile(this);\r\n\r\n      await this._parentFolder.save(false);\r\n    }\r\n\r\n    await localforage.removeItem(this.fullPath);\r\n\r\n    return true;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFileName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFileName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n    if (newParentFolder.files[newFileName] !== undefined) {\r\n      throw new Error(\"File exists at specified path.\");\r\n    }\r\n\r\n    await this.loadContent();\r\n\r\n    const originalPath = this.fullPath;\r\n    const oldParentFolder = this._parentFolder;\r\n    const oldName = this._name;\r\n\r\n    this._name = newFileName;\r\n    this._parentFolder = newParentFolder as BrowserFolder;\r\n\r\n    this.modified = new Date();\r\n\r\n    // Remove from old parent folder's files collection\r\n    const oldNameCanon = StorageUtilities.canonicalizeName(oldName);\r\n    delete oldParentFolder.files[oldNameCanon];\r\n\r\n    (newParentFolder as BrowserFolder)._addExistingFile(this);\r\n\r\n    await localforage.removeItem(originalPath);\r\n\r\n    return true;\r\n  }\r\n\r\n  async loadContent(force?: boolean): Promise<Date> {\r\n    if (force || !this.lastLoadedOrSaved) {\r\n      this._lastLoadedPath = this.fullPath;\r\n      let content = await localforage.getItem(this.fullPath);\r\n\r\n      // LocalForage may return ArrayBuffer for binary content instead of Uint8Array\r\n      // Convert ArrayBuffer to Uint8Array for consistent handling\r\n      if (content instanceof ArrayBuffer) {\r\n        content = new Uint8Array(content);\r\n      } else if (content !== null && typeof content !== \"string\" && !(content instanceof Uint8Array)) {\r\n        Log.debug(\"BrowserFile: Unexpected content type for \" + this.fullPath);\r\n        content = null;\r\n      }\r\n\r\n      this._content = content as string | Uint8Array | null;\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async resaveAfterMove() {\r\n    if (this._lastLoadedPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this._lastLoadedPath !== this.fullPath) {\r\n      // store old path because saving will change _lastLoadedPath\r\n      const oldPath = this._lastLoadedPath;\r\n\r\n      await this.saveContent(true, true);\r\n\r\n      await localforage.removeItem(oldPath);\r\n    }\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for browser storage\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    const areEqual = StorageUtilities.contentsAreEqual(this._content, newContent);\r\n\r\n    if (areEqual) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.lastLoadedOrSaved) {\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.lastLoadedOrSaved = new Date(this.lastLoadedOrSaved.getTime() - 1);\r\n      // Log.debugAlert(\"Setting a file without loading it first.\");\r\n    }\r\n\r\n    let oldContent = this._content;\r\n    this._content = newContent;\r\n\r\n    if (\r\n      this.isInErrorState &&\r\n      typeof newContent === \"string\" &&\r\n      StorageUtilities.getMimeType(this) === \"application/json\"\r\n    ) {\r\n      StorageUtilities.getJsonObject(this);\r\n    }\r\n\r\n    this.contentWasModified(oldContent, updateType, sourceId);\r\n\r\n    return true;\r\n  }\r\n\r\n  async saveContent(force?: boolean, skipParentFolderSave?: boolean): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (this.needsSave || force) {\r\n      /*let contentDescript = \"null\";\r\n\r\n      if (this.content instanceof Uint8Array) {\r\n        contentDescript = this.content.length + \" bytes\";\r\n      } else if (typeof this.content === \"string\") {\r\n        contentDescript = this.content.length + \" text\";\r\n      }*/\r\n\r\n      Log.assert(this.content !== null, \"Null content found.\");\r\n\r\n      // Log.debug(\"Saving file \" + contentDescript + \" to '\" + this.fullPath + \"'\");\r\n\r\n      this._lastLoadedPath = this.fullPath;\r\n      try {\r\n        await localforage.setItem(this.fullPath, this.content);\r\n      } catch (err) {\r\n        Log.debug(\"BrowserFile: Failed to save \" + this.fullPath + \": \" + err);\r\n      }\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n\r\n      if (skipParentFolderSave !== true) {\r\n        await this._parentFolder.save(false);\r\n      }\r\n    }\r\n\r\n    if (this.lastLoadedOrSaved === null) {\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile from \"./IFile\";\r\nimport BrowserFile from \"./BrowserFile\";\r\nimport BrowserStorage from \"./BrowserStorage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport Utilities from \"./../core/Utilities\";\r\nimport Log from \"./../core/Log\";\r\n\r\nimport localforage from \"localforage\";\r\nimport IFolderState from \"./IFolderState\";\r\nimport IFileState from \"./IFileState\";\r\nimport IFolderSummaryState from \"./IFolderSummaryState\";\r\nimport FolderBase from \"./FolderBase\";\r\n\r\nexport default class BrowserFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _parentPath: string;\r\n  private _lastSavedContent: string;\r\n  private _storage: BrowserStorage;\r\n  private _parentFolder: BrowserFolder | null;\r\n  private _lastLoadedPath?: string;\r\n\r\n  get storage(): BrowserStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): BrowserFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  folders: { [id: string]: BrowserFolder | undefined };\r\n  files: { [id: string]: BrowserFile | undefined };\r\n\r\n  lastSavedFileCount: number;\r\n  modifiedAtLoad?: Date;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    return this._parentPath + BrowserStorage.slashFolderDelimiter + StorageUtilities.canonicalizeName(this.name);\r\n  }\r\n\r\n  constructor(storage: BrowserStorage, parentFolder: BrowserFolder | null, parentPath: string, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._parentPath = parentPath;\r\n    this._name = folderName;\r\n    this._lastSavedContent = \"\";\r\n\r\n    this.lastSavedFileCount = 0;\r\n\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  ensureFile(name: string): BrowserFile {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile == null) {\r\n      candFile = new BrowserFile(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n\r\n      this.storage.notifyFileAdded(candFile);\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    return true;\r\n  }\r\n\r\n  async ensureExists(): Promise<boolean> {\r\n    return true;\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    if (this.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    let result = await this.recursiveDeleteThisFolder();\r\n\r\n    await localforage.removeItem(this.fullPath + BrowserStorage.slashFolderDelimiter);\r\n\r\n    return result;\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  ensureFolder(name: string): BrowserFolder {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new BrowserFolder(this._storage, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // no-op for browser storage\r\n  }\r\n\r\n  _removeFile(file: IFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    const candFile = this.files[nameCanon];\r\n\r\n    Log.assert(candFile === file, \"Files don't match.\");\r\n\r\n    this.files[nameCanon] = undefined;\r\n\r\n    this.storage.notifyFileRemoved(this.storageRelativePath + file.name);\r\n  }\r\n\r\n  _addExistingFile(file: BrowserFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    if (Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      this.files[nameCanon] = file;\r\n    }\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string, ignoreParentSave?: boolean): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFolderName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFolderName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    if (this.isSameFolder(newStorageRelativePath)) {\r\n      return false;\r\n    }\r\n\r\n    if (this.isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    const oldPath = this._lastLoadedPath;\r\n\r\n    if (this._parentFolder !== null) {\r\n      const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n      if (newParentFolder.folders[newFolderName] !== undefined) {\r\n        throw new Error(\"Folder exists at specified path.\");\r\n      }\r\n\r\n      this._parentFolder._removeExistingFolderFromParent(this);\r\n\r\n      this._parentFolder = newParentFolder as BrowserFolder;\r\n\r\n      this._name = newFolderName;\r\n\r\n      (newParentFolder as BrowserFolder)._addExistingFolderToParent(this);\r\n    }\r\n\r\n    this._name = newFolderName;\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file) {\r\n        await (file as BrowserFile).resaveAfterMove();\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder) {\r\n        await folder.resaveAfterMove(this.fullPath);\r\n      }\r\n    }\r\n\r\n    await this.save(true);\r\n\r\n    if (oldPath) {\r\n      await localforage.removeItem(oldPath);\r\n    }\r\n\r\n    if (this._parentFolder !== null && !ignoreParentSave) {\r\n      await this._parentFolder.save(true);\r\n    }\r\n\r\n    if (!ignoreParentSave) {\r\n      this.notifyFolderMoved({ previousStoragePath: oldPath, newStoragePath: this.fullPath, folder: this });\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    const file = this.ensureFile(name);\r\n\r\n    this.storage.notifyFileAdded(file);\r\n\r\n    return file;\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    this._lastLoadedPath = this.fullPath + BrowserStorage.slashFolderDelimiter;\r\n    const listingContent = await localforage.getItem<string>(this.fullPath + BrowserStorage.slashFolderDelimiter);\r\n\r\n    if (listingContent != null) {\r\n      this._lastSavedContent = listingContent;\r\n\r\n      let folderState: IFolderState | undefined;\r\n\r\n      try {\r\n        folderState = JSON.parse(listingContent);\r\n      } catch (e: any) {\r\n        Log.debugAlert(\"Failure to parse browser folder content JSON:\" + e.toString());\r\n      }\r\n\r\n      if (folderState) {\r\n        for (var i = 0; i < folderState.files.length; i++) {\r\n          const fileMeta = folderState.files[i];\r\n\r\n          // JSON.parse doesn't fix up dates produced by JSON.stringify, so do that here.\r\n          if (fileMeta.modified != null && !(fileMeta.modified instanceof Date)) {\r\n            fileMeta.modified = new Date(fileMeta.modified);\r\n          }\r\n\r\n          const newFile = this.ensureFile(fileMeta.name);\r\n\r\n          newFile.modifiedAtLoad = fileMeta.modified == null ? null : fileMeta.modified;\r\n\r\n          if (newFile.sizeAtLoad === undefined) {\r\n            newFile.sizeAtLoad = fileMeta.size;\r\n          }\r\n        }\r\n\r\n        for (var j = 0; j < folderState.folders.length; j++) {\r\n          const folderMeta = folderState.folders[j];\r\n\r\n          // JSON.parse doesn't fix up dates produced by JSON.stringify, so do that here.\r\n          if (folderMeta.modified != null && !(folderMeta.modified instanceof Date)) {\r\n            folderMeta.modified = new Date(folderMeta.modified);\r\n          }\r\n\r\n          const newFolder = this.ensureFolder(folderMeta.name);\r\n\r\n          newFolder.modifiedAtLoad = folderMeta.modified;\r\n          newFolder.lastSavedFileCount = folderMeta.fileCount;\r\n        }\r\n      }\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n\r\n  async resaveAfterMove(newParentPath: string) {\r\n    this._parentPath = newParentPath;\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file) {\r\n        await (file as BrowserFile).resaveAfterMove();\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder) {\r\n        await folder.resaveAfterMove(this.fullPath);\r\n      }\r\n    }\r\n\r\n    if (this._lastLoadedPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this._lastLoadedPath !== StorageUtilities.ensureEndsWithDelimiter(this.fullPath)) {\r\n      const oldPath = this._lastLoadedPath;\r\n      await this.save(true);\r\n      await localforage.removeItem(oldPath);\r\n    }\r\n  }\r\n\r\n  async save(force?: boolean): Promise<Date> {\r\n    // we need to load before we save if the only thing this folder has seen is a bunch of\r\n    // /ensures/\r\n    if (!this.isLoaded) {\r\n      await this.load(false);\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    const folderState: IFolderState = {\r\n      updated: this.lastLoadedOrSaved as Date,\r\n      files: [],\r\n      folders: [],\r\n    };\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file !== undefined) {\r\n        const fileState: IFileState = {\r\n          name: file.name,\r\n          size: file.size,\r\n          modified: file.latestModified == null ? new Date() : file.latestModified,\r\n        };\r\n\r\n        folderState.files.push(fileState);\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const childFolder = this.folders[folderName];\r\n\r\n      if (childFolder !== undefined && !childFolder.errorStatus) {\r\n        const childFolderState: IFolderSummaryState = {\r\n          name: childFolder.name,\r\n          fileCount: Utilities.lengthOfDictionary(childFolder.files),\r\n          modified: childFolder.modifiedAtLoad == null ? new Date() : childFolder.modifiedAtLoad,\r\n        };\r\n\r\n        folderState.folders.push(childFolderState);\r\n      }\r\n    }\r\n\r\n    const saveContent = JSON.stringify(folderState);\r\n\r\n    if (this._lastSavedContent !== saveContent || force) {\r\n      this._lastSavedContent = saveContent;\r\n      this._lastLoadedPath = this.fullPath + BrowserStorage.slashFolderDelimiter;\r\n      await localforage.setItem<string>(this.fullPath + BrowserStorage.slashFolderDelimiter, saveContent);\r\n    }\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n\r\n  override async saveAll(force?: boolean): Promise<boolean> {\r\n    // Log.verbose(\"Saving all at \" + this.storageRelativePath);\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    const initialDateTime = new Date().getTime();\r\n    let needsContentSave = false;\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file !== undefined && (file.needsSave || force)) {\r\n        let newContentSaveDate = await file.saveContent(force, true);\r\n\r\n        if (newContentSaveDate.getTime() > initialDateTime) {\r\n          needsContentSave = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder !== undefined && !folder.errorStatus) {\r\n        needsContentSave = true;\r\n        await folder.saveAll(force);\r\n      }\r\n    }\r\n\r\n    if (needsContentSave || this._lastSavedContent === undefined || force === true) {\r\n      await this.save(force);\r\n    }\r\n\r\n    return true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BrowserFolder from \"./BrowserFolder\";\r\nimport StorageBase from \"./StorageBase\";\r\nimport IStorage from \"./IStorage\";\r\nimport localforage from \"localforage\";\r\n\r\nexport default class BrowserStorage extends StorageBase implements IStorage {\r\n  rootFolder: BrowserFolder;\r\n  static isConfigured: boolean = false;\r\n\r\n  /**\r\n   * The name used to construct this storage instance.\r\n   * Used for BrowserStorage pointer mode when transferring to web workers.\r\n   */\r\n  readonly storageName: string | null;\r\n\r\n  static ensureConfigured() {\r\n    if (!BrowserStorage.isConfigured) {\r\n      localforage.config({\r\n        name: \"Minecraft Creator Tools\",\r\n        storeName: \"minecraft_creator_tools\",\r\n        version: 1.0,\r\n        // Use IndexedDB driver - this works in both main thread and web workers\r\n        // (localStorage requires window object which is not available in workers)\r\n        driver: localforage.INDEXEDDB,\r\n      });\r\n\r\n      BrowserStorage.isConfigured = true;\r\n    }\r\n  }\r\n\r\n  constructor(name: string | null) {\r\n    super();\r\n\r\n    // Store the original name for worker pointer mode\r\n    this.storageName = name;\r\n\r\n    if (name == null) {\r\n      name = \"\";\r\n    } else {\r\n      name = \".\" + name;\r\n    }\r\n\r\n    BrowserStorage.ensureConfigured();\r\n\r\n    this.rootFolder = new BrowserFolder(this, null, \"fs\" + name, \"root\");\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport CommandRegistry, { CommandScope } from \"./CommandRegistry\";\r\nimport { CommandStatus } from \"./ICommand\";\r\nimport IContext from \"./IContext\";\r\n\r\nexport default class CreatorToolsCommands {\r\n  static async debugProjectInformation(context: IContext, name: string, args: string[]) {\r\n    if (!context.project) {\r\n      return { status: CommandStatus.invalidArguments };\r\n    }\r\n\r\n    let message = \"N: \" + context.project.name;\r\n\r\n    if (context.project.projectFolder) {\r\n      message += \" PF: \" + context.project.projectFolder.fullPath;\r\n    }\r\n\r\n    Log.message(message);\r\n\r\n    return { status: CommandStatus.completed };\r\n  }\r\n\r\n  static async debugMinecraft(context: IContext, name: string, args: string[]) {\r\n    let message = \"LAM: \" + context.creatorTools.lastActiveMinecraftFlavor;\r\n\r\n    if (context.creatorTools.remoteServerUrl) {\r\n      message += \" RSURL: \" + context.creatorTools.remoteServerUrl;\r\n    }\r\n\r\n    if (context.creatorTools.remoteServerPort) {\r\n      message += \" RSP: \" + context.creatorTools.remoteServerPort;\r\n    }\r\n\r\n    if (context.creatorTools.dedicatedServerMode) {\r\n      message += \" DSM: \" + context.creatorTools.dedicatedServerMode;\r\n    }\r\n\r\n    if (context.creatorTools.dedicatedServerPath) {\r\n      message += \" DSP: \" + context.creatorTools.dedicatedServerPath;\r\n    }\r\n\r\n    if (context.creatorTools.dedicatedServerSlotCount) {\r\n      message += \" DSS: \" + context.creatorTools.dedicatedServerSlotCount;\r\n    }\r\n\r\n    Log.message(message);\r\n\r\n    return { status: CommandStatus.completed };\r\n  }\r\n\r\n  static async startMinecraft(context: IContext, name: string, args: string[]) {\r\n    if (!context.minecraft && !context.creatorTools.lastActiveMinecraftFlavor) {\r\n      return { status: CommandStatus.invalidEnvironment };\r\n    }\r\n\r\n    let mc = context.minecraft;\r\n\r\n    if (!mc && context.creatorTools.lastActiveMinecraftFlavor) {\r\n      mc = context.creatorTools.ensureMinecraft(context.creatorTools.lastActiveMinecraftFlavor);\r\n    }\r\n\r\n    if (!mc) {\r\n      return { status: CommandStatus.invalidEnvironment };\r\n    }\r\n\r\n    Log.message(\"Starting server.\");\r\n    await mc.prepareAndStart({\r\n      project: context.project,\r\n    });\r\n\r\n    return { status: CommandStatus.completed };\r\n  }\r\n\r\n  static async stopMinecraft(context: IContext, name: string, args: string[]) {\r\n    if (!context.minecraft) {\r\n      return { status: CommandStatus.invalidEnvironment };\r\n    }\r\n\r\n    Log.message(\"Stopping server.\");\r\n    await context.minecraft.stop();\r\n\r\n    return { status: CommandStatus.completed };\r\n  }\r\n\r\n  static async updateMinecraft(context: IContext, name: string, args: string[]) {\r\n    if (context.minecraft) {\r\n      context.minecraft.prepare(true);\r\n    }\r\n\r\n    return { status: CommandStatus.completed };\r\n  }\r\n\r\n  static registerCommonCommands() {\r\n    CommandRegistry.main.registerCommand(\"dbgproj\", CommandScope.debug, CreatorToolsCommands.debugProjectInformation);\r\n    CommandRegistry.main.registerCommand(\"dbgmc\", CommandScope.debug, CreatorToolsCommands.debugMinecraft);\r\n    CommandRegistry.main.registerCommand(\"startmc\", CommandScope.any, CreatorToolsCommands.startMinecraft);\r\n    CommandRegistry.main.registerCommand(\"stopmc\", CommandScope.minecraft, CreatorToolsCommands.stopMinecraft);\r\n    CommandRegistry.main.registerCommand(\"updatemc\", CommandScope.minecraft, CreatorToolsCommands.updateMinecraft);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n * ==========================================================================================\r\n * CREATORTOOLS HOST - PLATFORM ABSTRACTION LAYER NOTES\r\n * ==========================================================================================\r\n *\r\n * OVERVIEW:\r\n * ---------\r\n * CreatorToolsHost is the central platform abstraction layer that allows MCT to run across\r\n * multiple environments: web browser, NodeJS CLI, Electron app, and VS Code extension.\r\n * It provides static methods and properties for platform detection, storage initialization,\r\n * and cross-platform thunks for functionality that differs by platform.\r\n *\r\n * HOST TYPES (HostType enum):\r\n * ---------------------------\r\n * - web (0): Pure browser, no backend services (uses BrowserStorage/localStorage)\r\n * - toolsNodejs (1): NodeJS command line tool (uses NodeStorage/fs)\r\n * - electronNodeJs (2): Electron main process (NodeJS side)\r\n * - electronWeb (3): Electron renderer process (browser side, uses ElectronStorage via IPC)\r\n * - vsCodeMainNodeJs (4): VS Code extension host (NodeJS side)\r\n * - vsCodeMainWeb (5): VS Code webview connected to extension host\r\n * - vsCodeWebService (6): VS Code web extension service worker\r\n * - vsCodeWebWeb (7): VS Code web extension webview\r\n * - webPlusServices (8): Browser with AppServiceProxy backend\r\n * - testLocal (9): Local testing environment\r\n *\r\n * STORAGE INITIALIZATION:\r\n * -----------------------\r\n * The init() method sets up storage based on hostType:\r\n * - prefsStorage: User preferences (BrowserStorage in web, ElectronStorage in Electron)\r\n * - projectsStorage: Project files and metadata\r\n * - deploymentStorage[]: Array of deployment targets indexed by DeploymentTargetType\r\n * - worldStorage: Minecraft worlds\r\n * - packStorage: Downloaded/cached packs\r\n * - workingStorage: Temporary working files\r\n *\r\n * CROSS-PLATFORM THUNKS:\r\n * ----------------------\r\n * These function properties are set based on platform capabilities:\r\n * - generateCryptoRandomNumber: Secure random number generation\r\n * - localFolderExists / localFileExists: File system checks (only in NodeJS contexts)\r\n * - ensureLocalFolder: Create local folder (only in NodeJS contexts)\r\n * - createMinecraft / canCreateMinecraft: Minecraft instance creation (Electron/VSCode)\r\n *\r\n * CONTENT ROOTS:\r\n * --------------\r\n * - contentWebRoot: Base URL for APP data (forms, catalogs, snippets, typedefs, mccat.json).\r\n *   Set to \"/\" for local HTTP server, or full URL for web hosting.\r\n *   Used for: data/forms/, data/mccat.json, data/typedefs.*.json, data/mci/, data/mch/\r\n *\r\n * - vanillaContentRoot: Base URL for VANILLA MINECRAFT assets (textures, models, resource packs).\r\n *   These are large files (~500MB+) not bundled with CLI tool, hosted at mctools.dev.\r\n *   Used for: res/latest/van/release/, res/latest/van/preview/, res/latest/van/serve/\r\n *\r\n * - getVanillaContentRoot(): Returns vanillaContentRoot if set, else contentWebRoot.\r\n *   Use this for all vanilla resource loading (textures, blocks.json, terrain_texture.json).\r\n *\r\n * INITIALIZATION FLOW:\r\n * --------------------\r\n * 1. Global variables (g_contentRoot, g_isVsCodeMain, etc.) are injected by build system\r\n * 2. init() reads globals and sets hostType\r\n * 3. AppServiceProxy.init() establishes IPC if in Electron/VSCode\r\n * 4. Database.loadVanillaCatalog() loads mccat.json\r\n * 5. Storage objects are created based on detected platform\r\n * 6. CreatorTools singleton is instantiated with storage references\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - CreatorTools.ts: Main application object, instantiated by CreatorToolsHost\r\n * - AppServiceProxy.ts: IPC communication layer for Electron/VSCode\r\n * - BrowserStorage.ts, ElectronStorage.ts, NodeStorage.ts: Storage implementations\r\n * - Database.ts: Loads vanilla catalog and form definitions\r\n *\r\n * COMMON PATTERNS:\r\n * ----------------\r\n * - Check platform: CreatorToolsHost.isNodeJs, .isWeb, .isVsCode, .isAppServiceWeb\r\n * - Get main app: CreatorToolsHost.getCreatorTools()\r\n * - Listen for init: CreatorToolsHost.onInitialized.subscribe(handler)\r\n * - Theme changes: CreatorToolsHost.onThemeChanged.subscribe(handler)\r\n *\r\n * ==========================================================================================\r\n */\r\n\r\nimport CreatorTools from \"./CreatorTools\";\r\nimport { MinecraftFlavor } from \"./ICreatorToolsData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport BrowserStorage from \"../storage/BrowserStorage\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport ElectronStorage from \"../electronclient/ElectronStorage\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport AppServiceProxy from \"../core/AppServiceProxy\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IMinecraft from \"./IMinecraft\";\r\nimport CreatorToolsCommands from \"./CreatorToolsCommands\";\r\nimport { DeploymentTargetType } from \"./DeploymentTarget\";\r\n\r\nexport enum CreatorToolsThemeStyle {\r\n  dark = 0,\r\n  light = 1,\r\n  highContrastDark = 2,\r\n  highContrastLight = 3,\r\n}\r\n\r\nexport enum HostType {\r\n  web = 0,\r\n  toolsNodejs = 1,\r\n  electronNodeJs = 2,\r\n  electronWeb = 3,\r\n  vsCodeMainNodeJs = 4,\r\n  vsCodeMainWeb = 5,\r\n  vsCodeWebService = 6,\r\n  vsCodeWebWeb = 7,\r\n  webPlusServices = 8,\r\n  testLocal = 9,\r\n}\r\n\r\n/// CreatorToolsHost mostly serves as a static app loader for the really-core Carto app object.\r\nexport default class CreatorToolsHost {\r\n  private static _creatorTools?: CreatorTools;\r\n  private static _onInitialized = new EventDispatcher<CreatorTools, CreatorTools>();\r\n  private static _onThemeChanged = new EventDispatcher<CreatorToolsHost, CreatorToolsThemeStyle>();\r\n  private static _initializing = false;\r\n  private static _initialized = false;\r\n  public static isLocalNode = false;\r\n  public static fullLocalStorage = false;\r\n  public static hostType = HostType.web;\r\n  public static hostManager?: any = undefined;\r\n  private static _theme: CreatorToolsThemeStyle = CreatorToolsThemeStyle.dark;\r\n  /**\r\n   * True when the OS/browser is in a forced-colors (high contrast) mode.\r\n   * This is orthogonal to dark/light \u2014 HC Dark sets theme=dark + isHighContrast,\r\n   * HC Light sets theme=light + isHighContrast.\r\n   */\r\n  public static isHighContrast = false;\r\n  public static retrieveDataFromWebContentRoot = false;\r\n  public static contentWebRoot = \"\";\r\n  public static vanillaContentRoot = \"\"; // URL root for vanilla textures, samples, definitions (e.g., https://mctools.dev/)\r\n  public static projectPath = \"\";\r\n  public static focusPath: string | undefined = undefined;\r\n  public static baseUrl = \"\";\r\n\r\n  /**\r\n   * Gets the effective root URL for vanilla content (textures, samples, definitions).\r\n   * Returns vanillaContentRoot if set, otherwise falls back to contentRoot.\r\n   */\r\n  public static getVanillaContentRoot(): string {\r\n    return this.vanillaContentRoot || this.contentWebRoot || \"\";\r\n  }\r\n\r\n  /**\r\n   * Gets the current theme style\r\n   */\r\n  public static get theme(): CreatorToolsThemeStyle {\r\n    return this._theme;\r\n  }\r\n\r\n  /**\r\n   * Sets the theme style and notifies listeners\r\n   */\r\n  public static set theme(value: CreatorToolsThemeStyle) {\r\n    if (this._theme !== value) {\r\n      this._theme = value;\r\n      this._onThemeChanged.dispatch(CreatorToolsHost, value);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Event fired when theme changes. Use this to update FluentUI components\r\n   * that are initialized outside of React's render cycle.\r\n   */\r\n  public static get onThemeChanged() {\r\n    return this._onThemeChanged.asEvent();\r\n  }\r\n\r\n  public static initialMode: string | null = null;\r\n  public static modeParameter: string | null = null;\r\n  public static contentUrl: string | null = null;\r\n  public static readOnly: boolean = false;\r\n\r\n  public static postMessage: ((message: any) => void) | undefined;\r\n\r\n  public static prefsStorage: IStorage | null = null;\r\n  public static projectsStorage: IStorage | null = null;\r\n  public static deploymentStorage: IStorage[] = [];\r\n  public static worldStorage: IStorage | null = null;\r\n  public static packStorage: IStorage | null = null;\r\n  public static workingStorage: IStorage | null = null;\r\n\r\n  public static generateCryptoRandomNumber: (toVal: number) => number;\r\n  public static generateUuid: () => string;\r\n  public static localFolderExists: ((path: string) => Promise<boolean>) | undefined;\r\n  public static localFileExists: ((path: string) => Promise<boolean>) | undefined;\r\n  public static ensureLocalFolder: ((path: string) => IFolder) | undefined;\r\n  public static createMinecraft:\r\n    | ((flavor: MinecraftFlavor, creatorTOols: CreatorTools) => IMinecraft | undefined)\r\n    | undefined;\r\n  public static canCreateMinecraft: ((flavor: MinecraftFlavor) => boolean) | undefined;\r\n\r\n  // Image codec thunks - set by Node.js environments to provide platform-specific implementations\r\n  public static decodePng:\r\n    | ((data: Uint8Array) => { width: number; height: number; pixels: Uint8Array } | undefined)\r\n    | undefined;\r\n  public static encodeToPng:\r\n    | ((pixels: Uint8Array, width: number, height: number) => Uint8Array | undefined)\r\n    | undefined;\r\n\r\n  private static _onMessage = new EventDispatcher<any, any>();\r\n\r\n  public static get isNodeJs() {\r\n    return (\r\n      this.hostType === HostType.electronNodeJs ||\r\n      this.hostType === HostType.toolsNodejs ||\r\n      this.hostType === HostType.vsCodeMainNodeJs\r\n    );\r\n  }\r\n\r\n  public static get isVsCode() {\r\n    return (\r\n      this.hostType === HostType.vsCodeMainNodeJs ||\r\n      this.hostType === HostType.vsCodeWebService ||\r\n      this.hostType === HostType.vsCodeMainWeb ||\r\n      this.hostType === HostType.vsCodeWebWeb\r\n    );\r\n  }\r\n\r\n  public static get isWeb() {\r\n    return (\r\n      this.hostType === HostType.webPlusServices ||\r\n      this.hostType === HostType.web ||\r\n      this.hostType === HostType.electronWeb ||\r\n      this.hostType === HostType.vsCodeMainWeb ||\r\n      this.hostType === HostType.vsCodeWebWeb\r\n    );\r\n  }\r\n\r\n  public static get isAppServiceWeb() {\r\n    return this.hostType === HostType.electronWeb || this.hostType === HostType.vsCodeMainWeb;\r\n  }\r\n\r\n  public static get onMessage() {\r\n    return CreatorToolsHost._onMessage.asEvent();\r\n  }\r\n\r\n  public static get onInitialized() {\r\n    return CreatorToolsHost._onInitialized.asEvent();\r\n  }\r\n\r\n  public static getCreatorTools(): CreatorTools | undefined {\r\n    if (!this._initialized) {\r\n      this.init();\r\n    }\r\n\r\n    return CreatorToolsHost._creatorTools;\r\n  }\r\n\r\n  public static notifyNewMessage(source: any, message: any) {\r\n    CreatorToolsHost._onMessage.dispatch(source, message);\r\n  }\r\n\r\n  public static setHostType(type: HostType) {\r\n    this.hostType = type;\r\n  }\r\n\r\n  static init() {\r\n    if (CreatorToolsHost._initializing || CreatorToolsHost._initialized) {\r\n      return;\r\n    }\r\n\r\n    CreatorToolsHost._initializing = true;\r\n\r\n    //@ts-ignore\r\n    if (typeof g_contentRoot !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.contentWebRoot = StorageUtilities.ensureEndsWithDelimiter(g_contentRoot);\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_vanillaContentRoot !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.vanillaContentRoot = StorageUtilities.ensureEndsWithDelimiter(g_vanillaContentRoot);\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_initialMode !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.initialMode = g_initialMode;\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_modeParameter !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.modeParameter = g_modeParameter;\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_isVsCodeMain !== \"undefined\") {\r\n      //@ts-ignore\r\n      if (g_isVsCodeMain) {\r\n        CreatorToolsHost.hostType = HostType.vsCodeMainWeb;\r\n      }\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_isVsCodeWeb !== \"undefined\") {\r\n      //@ts-ignore\r\n      if (g_isVsCodeWeb) {\r\n        CreatorToolsHost.hostType = HostType.vsCodeWebWeb;\r\n      }\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_projectPath !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.projectPath = g_projectPath;\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_baseUrl !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.baseUrl = g_baseUrl;\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_contentUrl !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.contentUrl = g_contentUrl;\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_readOnly !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.readOnly = g_readOnly === true;\r\n    }\r\n\r\n    AppServiceProxy.init();\r\n\r\n    Database.loadVanillaCatalog();\r\n\r\n    CreatorToolsCommands.registerCommonCommands();\r\n\r\n    CreatorToolsHost.generateCryptoRandomNumber = (toVal) => {\r\n      const ct = CreatorToolsHost.getCreatorTools();\r\n\r\n      if (!ct || !ct.local) {\r\n        throw new Error(\"Could not generate key.\");\r\n      }\r\n\r\n      return ct.local.generateCryptoRandomNumber(toVal);\r\n    };\r\n\r\n    CreatorToolsHost.generateUuid = () => {\r\n      const ct = CreatorToolsHost.getCreatorTools();\r\n\r\n      if (!ct || !ct.local) {\r\n        throw new Error(\"Could not generate UUID.\");\r\n      }\r\n\r\n      return ct.local.generateUuid();\r\n    };\r\n\r\n    // Set up image codec thunks for Node.js environments\r\n    CreatorToolsHost.decodePng = (data: Uint8Array) => {\r\n      const ct = CreatorToolsHost.getCreatorTools();\r\n      if (!ct || !ct.local) {\r\n        return undefined;\r\n      }\r\n      return ct.local.decodePng(data);\r\n    };\r\n\r\n    CreatorToolsHost.encodeToPng = (pixels: Uint8Array, width: number, height: number) => {\r\n      const ct = CreatorToolsHost.getCreatorTools();\r\n      if (!ct || !ct.local) {\r\n        return undefined;\r\n      }\r\n      return ct.local.encodeToPng(pixels, width, height);\r\n    };\r\n\r\n    // @ts-ignore\r\n    if (typeof window !== \"undefined\" && window.crypto) {\r\n      CreatorToolsHost.generateCryptoRandomNumber = (toVal) => {\r\n        // Use rejection sampling to avoid modulo bias when generating random numbers\r\n        // from a cryptographically secure source\r\n        const maxUint32 = 0xffffffff;\r\n        const limit = maxUint32 - (maxUint32 % toVal);\r\n        let randomValue: number;\r\n        do {\r\n          // @ts-ignore\r\n          randomValue = window.crypto.getRandomValues(new Uint32Array(1))[0];\r\n        } while (randomValue >= limit);\r\n        return randomValue % toVal;\r\n      };\r\n\r\n      // @ts-ignore\r\n      if (window.crypto.randomUUID) {\r\n        CreatorToolsHost.generateUuid = () => {\r\n          // @ts-ignore\r\n          return window.crypto.randomUUID();\r\n        };\r\n      } else {\r\n        // Fallback for older browsers using crypto.getRandomValues\r\n        CreatorToolsHost.generateUuid = () => {\r\n          // @ts-ignore\r\n          const bytes = window.crypto.getRandomValues(new Uint8Array(16));\r\n          // Set version 4 (random) UUID bits\r\n          bytes[6] = (bytes[6] & 0x0f) | 0x40;\r\n          bytes[8] = (bytes[8] & 0x3f) | 0x80;\r\n          const hex = Array.from(bytes, (b: number) => b.toString(16).padStart(2, \"0\")).join(\"\");\r\n          return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;\r\n        };\r\n      }\r\n    }\r\n\r\n    if (CreatorToolsHost.projectsStorage !== null && CreatorToolsHost.prefsStorage !== null) {\r\n    } else if (AppServiceProxy.hasAppService) {\r\n      let ls = new ElectronStorage(\"<DOCP>\", \"prefs\");\r\n      ls.rootFolder.ensureExists();\r\n      CreatorToolsHost.prefsStorage = ls;\r\n\r\n      ls = new ElectronStorage(\"<DOCP>\", \"working\");\r\n      ls.rootFolder.ensureExists();\r\n      CreatorToolsHost.workingStorage = ls;\r\n\r\n      ls = new ElectronStorage(\"<DOCP>\", \"projects\");\r\n      ls.rootFolder.ensureExists();\r\n      CreatorToolsHost.projectsStorage = ls;\r\n\r\n      ls = new ElectronStorage(\"<DOCP>\", \"worlds\");\r\n      ls.rootFolder.ensureExists();\r\n      CreatorToolsHost.worldStorage = ls;\r\n\r\n      ls = new ElectronStorage(\"<DOCP>\", \"packs\");\r\n      ls.rootFolder.ensureExists();\r\n      CreatorToolsHost.packStorage = ls;\r\n\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        // @ts-ignore\r\n        let basePath = window.location.href;\r\n        const lastSlash = basePath.lastIndexOf(\"/\");\r\n\r\n        if (lastSlash >= 0) {\r\n          CreatorToolsHost.contentWebRoot = basePath.substring(0, lastSlash + 1);\r\n        }\r\n      }\r\n\r\n      let minecraftPath = \"<BDRK>\";\r\n\r\n      ls = new ElectronStorage(minecraftPath, \"\");\r\n      ls.getAvailable();\r\n      CreatorToolsHost.deploymentStorage[DeploymentTargetType.bedrock] = ls;\r\n\r\n      let minecraftPreviewPath = \"<BDPV>\";\r\n\r\n      ls = new ElectronStorage(minecraftPreviewPath, \"\");\r\n      ls.getAvailable();\r\n\r\n      CreatorToolsHost.deploymentStorage[DeploymentTargetType.bedrockPreview] = ls;\r\n\r\n      //@ts-ignore\r\n    } else if (typeof window !== \"undefined\") {\r\n      // Guard: If we're in Electron context but AppServiceProxy isn't ready, that's an initialization error.\r\n      // Electron renderer should NEVER use BrowserStorage - it should use ElectronStorage which proxies to NodeJS.\r\n      // @ts-ignore\r\n      if (typeof window.api !== \"undefined\") {\r\n        throw new Error(\r\n          \"BrowserStorage initialization attempted in Electron context. \" +\r\n            \"Electron renderer must use ElectronStorage. \" +\r\n            \"Ensure AppServiceProxy.hasAppService is true before CreatorToolsHost.init() is called.\"\r\n        );\r\n      }\r\n\r\n      CreatorToolsHost.prefsStorage = new BrowserStorage(\"mctprefs\");\r\n      CreatorToolsHost.projectsStorage = new BrowserStorage(\"mctprojects\");\r\n\r\n      CreatorToolsHost.deploymentStorage[DeploymentTargetType.bedrock] = new BrowserStorage(\"mctdeploy\");\r\n      CreatorToolsHost.workingStorage = new BrowserStorage(\"mctworking\");\r\n      CreatorToolsHost.worldStorage = new BrowserStorage(\"mctworlds\");\r\n      CreatorToolsHost.packStorage = new BrowserStorage(\"mctpacks\");\r\n    }\r\n\r\n    if (CreatorToolsHost.prefsStorage === null || CreatorToolsHost.projectsStorage === null) {\r\n      throw new Error(\"Unexpected uninitialized storage.\");\r\n    }\r\n\r\n    CreatorToolsHost._creatorTools = new CreatorTools(\r\n      CreatorToolsHost.prefsStorage,\r\n      CreatorToolsHost.projectsStorage,\r\n      CreatorToolsHost.deploymentStorage,\r\n      CreatorToolsHost.worldStorage,\r\n      CreatorToolsHost.packStorage,\r\n      CreatorToolsHost.workingStorage,\r\n      CreatorToolsHost.contentWebRoot\r\n    );\r\n\r\n    if (CreatorToolsHost.ensureLocalFolder) {\r\n      CreatorToolsHost._creatorTools.ensureLocalFolder = CreatorToolsHost.ensureLocalFolder;\r\n      CreatorToolsHost._creatorTools.localFolderExists = CreatorToolsHost.localFolderExists;\r\n      CreatorToolsHost._creatorTools.localFileExists = CreatorToolsHost.localFileExists;\r\n    } else if (CreatorToolsHost.hostType === HostType.electronWeb) {\r\n      CreatorToolsHost._creatorTools.ensureLocalFolder = CreatorToolsHost._ensureElectronLocalFolder;\r\n      CreatorToolsHost._creatorTools.localFolderExists = CreatorToolsHost._localFolderExists;\r\n      CreatorToolsHost._creatorTools.localFileExists = CreatorToolsHost._localFileExists;\r\n    }\r\n\r\n    CreatorToolsHost._creatorTools.createMinecraft = CreatorToolsHost.createMinecraft;\r\n    CreatorToolsHost._creatorTools.canCreateMinecraft = CreatorToolsHost.canCreateMinecraft;\r\n\r\n    CreatorToolsHost._initialized = true;\r\n\r\n    this._onInitialized.dispatch(CreatorToolsHost._creatorTools, CreatorToolsHost._creatorTools);\r\n  }\r\n\r\n  static async _localFolderExists(path: string) {\r\n    const ls = new ElectronStorage(path, \"\");\r\n\r\n    let result = ls.available;\r\n\r\n    if (!result) {\r\n      result = await ls.getAvailable();\r\n\r\n      if (!result) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return await ls.rootFolder.exists();\r\n  }\r\n\r\n  static async _localFileExists(path: string) {\r\n    const folderPath = StorageUtilities.getFolderPath(path);\r\n    const fileName = StorageUtilities.getLeafName(path);\r\n\r\n    if (!fileName || fileName.length < 2 || !folderPath || folderPath.length < 2) {\r\n      throw new Error(\"Could not process file with path: `\" + path + \"`\");\r\n    }\r\n\r\n    const ls = new ElectronStorage(folderPath, \"\");\r\n\r\n    const file = ls.rootFolder.ensureFile(fileName);\r\n\r\n    return await file.exists();\r\n  }\r\n\r\n  static _ensureElectronLocalFolder(path: string) {\r\n    // Reuse existing storage if one already exists for this path\r\n    // (e.g., from a prior _localFolderExists call that set up the file watcher).\r\n    // Creating a new ElectronStorage overwrites electronStorages[path], which could\r\n    // orphan an existing storage that has its file watcher configured.\r\n    let ls = ElectronStorage.electronStorages[path];\r\n\r\n    if (!ls) {\r\n      ls = new ElectronStorage(path, \"\");\r\n\r\n      // Kick off getAvailable() to set up the fs.watch file watcher in the main process.\r\n      // Without this, externally created files (e.g., by MCP tools) won't be detected.\r\n      ls.getAvailable();\r\n    }\r\n\r\n    return ls.rootFolder;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { IEvent } from \"ste-events\";\r\nimport IFile from \"./IFile\";\r\nimport IStorage, { IFolderMove } from \"./IStorage\";\r\nimport IStorageObject from \"./IStorageObject\";\r\n\r\nexport enum FolderErrorStatus {\r\n  none = 0,\r\n  unreadable = 1,\r\n}\r\n\r\nexport default interface IFolder extends IStorageObject {\r\n  lastLoadedOrSaved: Date | null;\r\n  parentFolder: IFolder | null;\r\n  storage: IStorage;\r\n\r\n  ensuredName: string;\r\n\r\n  extendedPath: string;\r\n\r\n  fileCount: number;\r\n  folderCount: number;\r\n\r\n  folders: { [name: string]: IFolder | undefined };\r\n  files: { [name: string]: IFile | undefined };\r\n\r\n  allFiles: AsyncIterable<IFile>;\r\n\r\n  isLoaded: boolean;\r\n  canIgnore: boolean;\r\n\r\n  errorStatus?: FolderErrorStatus;\r\n\r\n  onFolderMoved: IEvent<IFolder, IFolderMove>;\r\n  onChildFolderMoved: IEvent<IFolder, IFolderMove>;\r\n\r\n  rename(name: string): Promise<boolean>;\r\n  moveTo(newStorageRelativePath: string): Promise<boolean>;\r\n\r\n  load(force?: boolean): Promise<Date>;\r\n\r\n  exists(): Promise<boolean>;\r\n  ensureExists(): Promise<boolean>;\r\n\r\n  dispose(): void;\r\n\r\n  deleteThisFolder(): Promise<boolean>;\r\n  deleteAllFolderContents(): Promise<boolean>;\r\n\r\n  deleteFileFromRelativePath(path: string): Promise<boolean>;\r\n\r\n  removeFolder(name: string): boolean;\r\n\r\n  getFileFromRelativePath(serverRelativePath: string): Promise<IFile | undefined>;\r\n  getFolderFromRelativePath(serverRelativePath: string): Promise<IFolder | undefined>;\r\n  getFolderFromRelativePathLocal(serverRelativePath: string): IFolder | undefined;\r\n  getFolderByIndex(index: number): IFolder | undefined;\r\n  getSortedFolderKeys(): string[];\r\n  getSortedFileKeys(): string[];\r\n\r\n  scanForChanges(): Promise<void>;\r\n\r\n  ensureFolderFromRelativePath(serverRelativePath: string): Promise<IFolder>;\r\n  ensureFileFromRelativePath(serverRelativePath: string): Promise<IFile>;\r\n  setStructureFromFileList(fileList: string[]): Promise<void>;\r\n\r\n  saveAll(force?: boolean): Promise<boolean>;\r\n\r\n  clearAllManagers(): void;\r\n\r\n  getFolderRelativePath(toFolder: IFolder): string | undefined;\r\n\r\n  folderExists(name: string): boolean;\r\n  fileExists(name: string): boolean;\r\n\r\n  ensureFolder(name: string): IFolder;\r\n  ensureFile(name: string): IFile;\r\n\r\n  deleteFile(name: string): Promise<boolean>;\r\n  createFile(name: string): Promise<IFile>;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport NodeFolder from \"./NodeFolder\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport FileBase from \"../storage/FileBase\";\r\nimport StorageUtilities, { EncodingType } from \"../storage/StorageUtilities\";\r\nimport * as fs from \"fs\";\r\n\r\nexport default class NodeFile extends FileBase implements IFile {\r\n  _name: string;\r\n  _parentFolder: NodeFolder;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._parentFolder.fullPath;\r\n\r\n    if (!path.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n      path += NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path + this.name;\r\n  }\r\n\r\n  get parentFolder(): NodeFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get isContentLoaded(): boolean {\r\n    return this.lastLoadedOrSaved != null || this.modified != null;\r\n  }\r\n\r\n  constructor(parentFolder: NodeFolder, folderName: string) {\r\n    super();\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = folderName;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for node storage\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    return fs.existsSync(this.fullPath);\r\n  }\r\n\r\n  loadContentSync(force: boolean): Date {\r\n    if (force || this.lastLoadedOrSaved == null) {\r\n      const encoding = StorageUtilities.getEncodingByFileName(this._name);\r\n\r\n      if (!fs.existsSync(this.fullPath)) {\r\n        this._content = null;\r\n      } else if (encoding === EncodingType.ByteBuffer) {\r\n        // Log.debug(`NodeFS loading '${this.fullPath}' as binary.`);\r\n        const byteResult = fs.readFileSync(this.fullPath);\r\n\r\n        if (byteResult instanceof ArrayBuffer) {\r\n          this._content = new Uint8Array(byteResult as ArrayBuffer);\r\n        } else {\r\n          this._content = byteResult as any;\r\n        }\r\n      } else {\r\n        // Log.debug(`NodeFS loading '${this.fullPath}' as text.`);\r\n\r\n        this._content = fs.readFileSync(this.fullPath, { encoding: \"utf8\" });\r\n      }\r\n\r\n      //  this._content += \"\";\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async loadContent(force: boolean): Promise<Date> {\r\n    return this.loadContentSync(force);\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType) {\r\n    const areEqual = StorageUtilities.contentsAreEqual(this._content, newContent);\r\n\r\n    if (areEqual) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.lastLoadedOrSaved) {\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.lastLoadedOrSaved = new Date(this.lastLoadedOrSaved.getTime() - 1);\r\n\r\n      // Log.debugAlert(\"Setting a file without loading it first.\");\r\n    }\r\n\r\n    let oldContent = this._content;\r\n    this._content = newContent;\r\n\r\n    this.contentWasModified(oldContent, updateType);\r\n\r\n    return true;\r\n  }\r\n\r\n  /*  update: rely consistenly on getHash() implementation in FileBase which uses the js-md5 library\r\n\r\n    async getHash(): Promise<string | undefined> {\r\n    await this.loadContent(false);\r\n\r\n    if (this._content === undefined || this._content === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const hash = crypto.createHash(\"MD5\");\r\n\r\n    hash.update(this._content);\r\n\r\n    return hash.digest(\"base64\");\r\n  }\r\n    */\r\n\r\n  async saveContent(): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (this.needsSave) {\r\n      this.lastLoadedOrSaved = new Date();\r\n\r\n      if (this.content != null) {\r\n        this.parentFolder.ensureExists();\r\n\r\n        const encoding = StorageUtilities.getEncodingByFileName(this._name);\r\n\r\n        if (encoding === EncodingType.ByteBuffer) {\r\n          // Log.verbose(\"Saving '\" + this.fullPath + \"' as binary. size: \" + this.content.length);\r\n\r\n          fs.writeFileSync(this.fullPath, this.content);\r\n        } else {\r\n          // Log.verbose(\"Saving '\" + this.fullPath + \"' as text. size: \" + this.content.length);\r\n\r\n          fs.writeFileSync(this.fullPath, this.content, { encoding: \"utf8\" });\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.lastLoadedOrSaved === null) {\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async writeContent(content: String[]) {\r\n    this.lastLoadedOrSaved = new Date();\r\n\r\n    await this._parentFolder.ensureExists();\r\n\r\n    return new Promise<void>((resolve, reject) => {\r\n      const writer = fs.createWriteStream(this.fullPath);\r\n\r\n      writer.on(\"finish\", resolve);\r\n      writer.on(\"error\", reject);\r\n\r\n      for (const str of content) {\r\n        writer.write(str + \"\\n\");\r\n      }\r\n\r\n      writer.end();\r\n    });\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (skipRemoveFromParent !== true) {\r\n      this._parentFolder._removeFile(this);\r\n    }\r\n\r\n    return this._deleteItem(this.fullPath);\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFileName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFileName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n    if (newParentFolder.files[newFileName] !== undefined) {\r\n      throw new Error(\"File exists at specified path.\");\r\n    }\r\n\r\n    await this.loadContent(false);\r\n\r\n    const originalPath = this.fullPath;\r\n\r\n    this._name = newFileName;\r\n    this._parentFolder = newParentFolder as NodeFolder;\r\n\r\n    this.modified = new Date();\r\n\r\n    (newParentFolder as NodeFolder)._addExistingFile(this);\r\n\r\n    this._deleteItem(originalPath);\r\n\r\n    return true;\r\n  }\r\n\r\n  async _deleteItem(path: string): Promise<boolean> {\r\n    let isSuccess = true;\r\n\r\n    try {\r\n      fs.rmSync(path);\r\n    } catch (e) {\r\n      isSuccess = false;\r\n    }\r\n\r\n    return isSuccess;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder, { FolderErrorStatus } from \"../storage/IFolder\";\r\nimport IFile from \"../storage/IFile\";\r\nimport NodeFile from \"./NodeFile\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport StorageUtilities, { EncodingType } from \"../storage/StorageUtilities\";\r\nimport FolderBase from \"../storage/FolderBase\";\r\nimport Log from \"./../core/Log\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport * as crypto from \"crypto\";\r\n\r\nexport interface IFilePathAndSize {\r\n  path: string;\r\n  size?: number;\r\n  hash?: string;\r\n  sourcePath?: string;\r\n}\r\n\r\nexport interface FileListings {\r\n  [pathPlusSizePlusHash: string]: IFilePathAndSize | undefined;\r\n}\r\n\r\nexport interface IListingsFile {\r\n  path: string;\r\n  files: IFilePathAndSize[];\r\n}\r\n\r\nexport default class NodeFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _path: string;\r\n\r\n  folders: { [id: string]: NodeFolder | undefined };\r\n  files: { [id: string]: NodeFile | undefined };\r\n  private _storage: NodeStorage;\r\n  private _parentFolder: NodeFolder | null;\r\n\r\n  get storage(): NodeStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): NodeFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._path;\r\n\r\n    if (!path.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n      path += NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path + this.name;\r\n  }\r\n\r\n  constructor(storage: NodeStorage, parentFolder: NodeFolder | null, parentPath: string, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._path = parentPath;\r\n    this._name = folderName;\r\n\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for node storage\r\n  }\r\n\r\n  ensureFile(name: string): NodeFile {\r\n    Log.assert(name.indexOf(\"/\") < 0, \"Unexpected to find / in file name: \" + name);\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile == null) {\r\n      candFile = new NodeFile(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  _removeFile(file: IFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    const candFile = this.files[nameCanon];\r\n\r\n    Log.assert(candFile === file, \"Files don't match.\");\r\n\r\n    this.files[nameCanon] = undefined;\r\n\r\n    this.storage.notifyFileRemoved(this.storageRelativePath + file.name);\r\n  }\r\n\r\n  _addExistingFile(file: NodeFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    this.files[nameCanon] = file;\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    if (this.storage.readOnly) {\r\n      throw new Error(\"Deletion of this folder \" + this.fullPath + \" is not supported in read only mode.\");\r\n    }\r\n\r\n    let absPath = path.resolve(this.fullPath);\r\n    if (StorageUtilities.isPathRiskyForDelete(absPath)) {\r\n      throw new Error(\"Deletion of this folder \" + absPath + \" is not supported because it seems too basic.\");\r\n    }\r\n\r\n    let isSuccess = true;\r\n\r\n    if (fs.existsSync(this.fullPath)) {\r\n      try {\r\n        fs.rmdirSync(this.fullPath, {\r\n          recursive: true,\r\n        });\r\n      } catch (e) {\r\n        isSuccess = false;\r\n      }\r\n    }\r\n\r\n    this.removeMeFromParent();\r\n\r\n    return isSuccess;\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    if (this.storage.readOnly) {\r\n      throw new Error(\"Deletion of folder contents at \" + this.fullPath + \" is not supported in read only mode.\");\r\n    }\r\n\r\n    return await this.recursiveDeleteContentsOfThisFolder();\r\n  }\r\n\r\n  ensureFolder(name: string): NodeFolder {\r\n    Log.assert(name.indexOf(\"/\") < 0, \"Unexpected to find / in folder name: \" + name);\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new NodeFolder(this._storage, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  _addExistingFolderToParent(folder: NodeFolder) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    this.folders[nameCanon] = folder;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const oldFullPath = this.fullPath;\r\n\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFolderName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFolderName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    if (this.isSameFolder(newStorageRelativePath)) {\r\n      return false;\r\n    }\r\n\r\n    if (this._parentFolder !== null) {\r\n      const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n      if (newParentFolder.folders[newFolderName] !== undefined) {\r\n        throw new Error(\"Could not move folder; folder exists at specified path: \" + newStorageRelativePath);\r\n      }\r\n\r\n      // Compute new full path from current _path before any in-memory changes.\r\n      // _path holds the parent directory, so _path + newFolderName = target location.\r\n      let parentPath = this._path;\r\n      if (!parentPath.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n        parentPath += NodeStorage.platformFolderDelimiter;\r\n      }\r\n      const newFullPath = parentPath + newFolderName;\r\n\r\n      // Perform disk rename FIRST. If this throws (e.g., EPERM from OneDrive/antivirus),\r\n      // in-memory state is still clean and callers can fall back to copy+delete.\r\n      Log.verbose(\"Renaming folder from: \" + oldFullPath + \" to \" + newFullPath);\r\n      fs.renameSync(oldFullPath, newFullPath);\r\n\r\n      // Disk rename succeeded \u2014 now update in-memory state to match.\r\n      this._parentFolder._removeExistingFolderFromParent(this);\r\n\r\n      this._parentFolder = newParentFolder as NodeFolder;\r\n\r\n      this._name = newFolderName;\r\n      (newParentFolder as NodeFolder)._addExistingFolderToParent(this);\r\n    }\r\n\r\n    this._name = newFolderName;\r\n\r\n    return true;\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    return fs.existsSync(this.fullPath);\r\n  }\r\n\r\n  async ensureExists(): Promise<boolean> {\r\n    const exists = fs.existsSync(this.fullPath);\r\n\r\n    if (!exists) {\r\n      // Log.message(\"Creating folder '\" + this.fullPath + \"'\");\r\n\r\n      fs.mkdirSync(this.fullPath, { recursive: true });\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async generateFileListings(listings?: FileListings) {\r\n    await this.load(true);\r\n\r\n    if (!listings) {\r\n      listings = {};\r\n    }\r\n\r\n    if (this.files[\"files.json\"] !== undefined) {\r\n      const file = this.files[\"files.json\"];\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const obj: IListingsFile | undefined = StorageUtilities.getJsonObject(file);\r\n\r\n      if (obj && obj.files) {\r\n        for (const fileInfo of obj.files) {\r\n          if (fileInfo.hash && fileInfo.size && fileInfo.path && fileInfo.sourcePath === undefined) {\r\n            const pathHash = this.generatePathHash(fileInfo);\r\n\r\n            if (!listings[pathHash]) {\r\n              const relativePath = this.storageRelativePath;\r\n\r\n              if (relativePath) {\r\n                listings[pathHash] = {\r\n                  path: fileInfo.path,\r\n                  size: fileInfo.size,\r\n                  hash: fileInfo.hash,\r\n                  sourcePath: StorageUtilities.canonicalizePath(relativePath + fileInfo.path),\r\n                };\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      for (const dirName in this.folders) {\r\n        const folder = this.folders[dirName];\r\n\r\n        if (folder && !folder.errorStatus) {\r\n          await folder.generateFileListings(listings);\r\n        }\r\n      }\r\n    }\r\n\r\n    return listings;\r\n  }\r\n\r\n  generatePathHash(fileInfo: IFilePathAndSize) {\r\n    let pathHash = StorageUtilities.getBaseFromName(fileInfo.path).toLowerCase();\r\n\r\n    if (fileInfo.size) {\r\n      pathHash += \"|\" + fileInfo.size;\r\n    }\r\n\r\n    if (fileInfo.hash) {\r\n      pathHash += \"|\" + fileInfo.hash;\r\n    }\r\n\r\n    return pathHash;\r\n  }\r\n\r\n  async copyContentsTo(\r\n    destRootPath: string,\r\n    fileInclusionList: IFilePathAndSize[],\r\n    addFilesToInclusionList?: boolean,\r\n    listings?: FileListings,\r\n    destStorageRelativePath?: string,\r\n    copyPath?: string\r\n  ) {\r\n    await this.load(true);\r\n\r\n    destRootPath = NodeStorage.ensureEndsWithDelimiter(destRootPath);\r\n    let dirPath = NodeStorage.ensureEndsWithDelimiter(destRootPath);\r\n\r\n    if (copyPath) {\r\n      dirPath += copyPath;\r\n    }\r\n\r\n    const targetFolderExists = fs.existsSync(dirPath);\r\n\r\n    if (!targetFolderExists) {\r\n      fs.mkdirSync(dirPath, { recursive: true });\r\n    }\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      let filePath = fileName;\r\n\r\n      if (copyPath) {\r\n        filePath = copyPath + filePath;\r\n      }\r\n\r\n      filePath = StorageUtilities.canonicalizePath(filePath);\r\n\r\n      let targetFileSize: IFilePathAndSize | undefined;\r\n\r\n      if (fileInclusionList) {\r\n        for (const filePathAndSize of fileInclusionList) {\r\n          if (StorageUtilities.canonicalizePath(filePathAndSize.path) === filePath) {\r\n            targetFileSize = filePathAndSize;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (file) {\r\n        await file.loadContent(true);\r\n\r\n        if (file.content) {\r\n          const encoding = StorageUtilities.getEncodingByFileName(file.name);\r\n\r\n          if (!targetFileSize) {\r\n            targetFileSize = {\r\n              size: file.content.length,\r\n              path: filePath,\r\n            };\r\n\r\n            if (addFilesToInclusionList === true) {\r\n              fileInclusionList.push(targetFileSize);\r\n            }\r\n          }\r\n\r\n          if (encoding === EncodingType.ByteBuffer) {\r\n            let arrData: any = file.content as any;\r\n\r\n            if (\r\n              targetFileSize &&\r\n              arrData instanceof Buffer &&\r\n              targetFileSize.size &&\r\n              arrData.length > targetFileSize.size\r\n            ) {\r\n              Log.verbose(\"Making truncated buffer copy of \" + file.fullPath + \" to size \" + targetFileSize.size);\r\n              arrData = arrData.subarray(0, targetFileSize.size);\r\n            } else if (\r\n              targetFileSize &&\r\n              arrData instanceof Uint8Array &&\r\n              targetFileSize.size &&\r\n              arrData.length > targetFileSize.size\r\n            ) {\r\n              Log.verbose(\"Making truncated array copy of \" + file.fullPath + \" to size \" + targetFileSize.size);\r\n              arrData = arrData.subarray(0, targetFileSize.size);\r\n            }\r\n\r\n            const hash = crypto.createHash(\"MD5\");\r\n\r\n            hash.update(arrData);\r\n\r\n            targetFileSize.hash = hash.digest(\"base64\");\r\n\r\n            const pathHash = this.generatePathHash(targetFileSize);\r\n            let usingSourcePath = false;\r\n\r\n            if (listings) {\r\n              const fileListing = listings[pathHash];\r\n\r\n              if (fileListing && fileListing.sourcePath) {\r\n                targetFileSize.sourcePath = fileListing.sourcePath;\r\n                usingSourcePath = true;\r\n              }\r\n            }\r\n\r\n            if (!usingSourcePath) {\r\n              fs.writeFileSync(dirPath + file.name, arrData);\r\n\r\n              if (listings) {\r\n                listings[pathHash] = {\r\n                  size: targetFileSize.size,\r\n                  hash: targetFileSize.hash,\r\n                  path: targetFileSize.path,\r\n                  sourcePath: StorageUtilities.canonicalizePath(destStorageRelativePath + targetFileSize.path),\r\n                };\r\n              }\r\n            }\r\n          } else {\r\n            const hash = crypto.createHash(\"MD5\");\r\n\r\n            hash.update(file.content);\r\n\r\n            targetFileSize.hash = hash.digest(\"base64\");\r\n\r\n            const pathHash = this.generatePathHash(targetFileSize);\r\n            let usingSourcePath = false;\r\n\r\n            if (listings) {\r\n              const fileListing = listings[pathHash];\r\n\r\n              if (fileListing && fileListing.sourcePath) {\r\n                targetFileSize.sourcePath = fileListing.sourcePath;\r\n                usingSourcePath = true;\r\n              }\r\n            }\r\n\r\n            if (!usingSourcePath) {\r\n              fs.writeFileSync(dirPath + file.name, file.content, { encoding: \"utf8\" });\r\n\r\n              if (listings) {\r\n                listings[pathHash] = {\r\n                  size: targetFileSize.size,\r\n                  hash: targetFileSize.hash,\r\n                  path: targetFileSize.path,\r\n                  sourcePath: StorageUtilities.canonicalizePath(destStorageRelativePath + targetFileSize.path),\r\n                };\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (copyPath === undefined) {\r\n      copyPath = \"\";\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const nf = this.folders[folderName] as NodeFolder;\r\n\r\n      if (nf && !nf.errorStatus) {\r\n        await nf.copyContentsTo(\r\n          destRootPath,\r\n          fileInclusionList,\r\n          addFilesToInclusionList,\r\n          listings,\r\n          destStorageRelativePath,\r\n          copyPath + folderName + NodeStorage.platformFolderDelimiter\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  async saveFilesList(pathDescriptor: string, inclusionList: IFilePathAndSize[]) {\r\n    const obj: IListingsFile = { path: pathDescriptor, files: inclusionList };\r\n\r\n    fs.writeFileSync(NodeStorage.ensureEndsWithDelimiter(this.fullPath) + \"files.json\", JSON.stringify(obj, null, 2), {\r\n      encoding: \"utf8\",\r\n    });\r\n  }\r\n\r\n  async copyContentsOut(destFolder: IFolder) {\r\n    await this.load(true);\r\n\r\n    if (this.files[\"files.json\"] !== undefined) {\r\n      const file = this.files[\"files.json\"];\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const obj: IListingsFile | undefined = StorageUtilities.getJsonObject(file);\r\n\r\n      if (obj && obj.files) {\r\n        for (const fileInfo of obj.files) {\r\n          if (fileInfo.hash && fileInfo.size && fileInfo.path) {\r\n            let file: IFile | undefined;\r\n\r\n            if (fileInfo.sourcePath) {\r\n              file = await this.storage.rootFolder.getFileFromRelativePath(\r\n                StorageUtilities.ensureStartsWithDelimiter(fileInfo.sourcePath)\r\n              );\r\n            } else {\r\n              file = await this.getFileFromRelativePath(StorageUtilities.ensureStartsWithDelimiter(fileInfo.path));\r\n            }\r\n\r\n            if (file) {\r\n              if (!file.isContentLoaded) {\r\n                await file.loadContent();\r\n              }\r\n\r\n              if (file.content !== null) {\r\n                const targetFile = await destFolder.ensureFileFromRelativePath(\r\n                  StorageUtilities.ensureStartsWithDelimiter(fileInfo.path)\r\n                );\r\n\r\n                if (targetFile) {\r\n                  // Log.verbose(\"Copying file '\" + file.fullPath + \"' out to '\" + targetFile.fullPath + \"'\");\r\n                  targetFile.setContent(file.content);\r\n                }\r\n              }\r\n            } else {\r\n              Log.debug(\"Could not find expected backup file '\" + fileInfo.path + \"' in \" + this.fullPath);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      Log.debug(\"Could not find files.json in \" + this.fullPath);\r\n    }\r\n\r\n    await destFolder.saveAll();\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    return this.ensureFile(name);\r\n  }\r\n\r\n  loadSync(force?: boolean): Date {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    // Log.debug(\"Reading details on folder '\" + this.fullPath + \"'\");\r\n\r\n    if (fs.existsSync(this.fullPath)) {\r\n      const results = fs.readdirSync(this.fullPath);\r\n\r\n      results.forEach((fileOrFolderName: string) => {\r\n        let filePath = this.fullPath;\r\n\r\n        if (!filePath.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n          filePath += NodeStorage.platformFolderDelimiter;\r\n        }\r\n\r\n        filePath += fileOrFolderName;\r\n\r\n        try {\r\n          const stat = fs.statSync(filePath);\r\n          if (stat.isDirectory() && !StorageUtilities.isIgnorableFolder(fileOrFolderName)) {\r\n            this.ensureFolder(fileOrFolderName);\r\n          } else if (stat.isFile() && StorageUtilities.isUsableFile(filePath)) {\r\n            const file = this.ensureFile(fileOrFolderName);\r\n\r\n            if (stat.mtime) {\r\n              file.modifiedAtLoad = new Date(stat.mtime);\r\n            }\r\n          }\r\n        } catch (e: any) {\r\n          this.errorStatus = FolderErrorStatus.unreadable;\r\n          Log.error(\"Error opening folder '\" + filePath + \"': \" + e.toString());\r\n        }\r\n      });\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    return this.loadSync(force);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * NodeStorage.ts\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * NodeStorage is the local file system implementation of IStorage for Node.js environments.\r\n * It provides real-time file system watching using Node.js fs.watch() API.\r\n *\r\n * FILE SYSTEM WATCHING:\r\n * ---------------------\r\n * - startWatching(): Begins recursive watching of the storage root folder\r\n * - stopWatching(): Stops a specific watcher by ID\r\n * - stopAllWatching(): Stops all watchers on this storage\r\n *\r\n * When file changes are detected:\r\n * 1. fs.watch() callback fires with filename and event type\r\n * 2. NodeStorage determines if it's a file or folder change\r\n * 3. Appropriate notify*() method is called on StorageBase\r\n * 4. Events propagate to listeners (HttpServer, etc.)\r\n *\r\n * DEBOUNCING:\r\n * -----------\r\n * File system events can fire multiple times for a single logical change.\r\n * We debounce events by path, waiting 100ms after the last event before\r\n * processing to coalesce rapid-fire events.\r\n *\r\n * PIPELINE INTEGRATION:\r\n * ---------------------\r\n * NodeStorage (this) -> HttpServer (traps events) -> WebSocket -> HttpStorage -> MCWorld -> WorldView\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - IStorageWatcher.ts: Watcher interface definition\r\n * - NodeFolder.ts: Folder implementation (also supports watching)\r\n * - NodeFile.ts: File implementation\r\n * - HttpServer.ts: Traps events and broadcasts via WebSocket\r\n */\r\n\r\nimport NodeFolder from \"./NodeFolder\";\r\nimport StorageBase from \"../storage/StorageBase\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport * as path from \"path\";\r\nimport * as fs from \"fs\";\r\nimport NodeFile from \"./NodeFile\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport Log from \"../core/Log\";\r\nimport { IWatchableStorage, IStorageChangeEvent } from \"../storage/IStorageWatcher\";\r\nimport { EventDispatcher } from \"ste-events\";\r\n\r\n/** Default debounce delay for file system events in milliseconds */\r\nconst WATCHER_DEBOUNCE_MS = 100;\r\n\r\nexport default class NodeStorage extends StorageBase implements IStorage, IWatchableStorage {\r\n  rootPath: string;\r\n  name: string;\r\n\r\n  rootFolder: NodeFolder;\r\n\r\n  static platformFolderDelimiter = path.sep;\r\n\r\n  /** Active file system watchers, keyed by watcher ID */\r\n  private _watchers: Map<string, fs.FSWatcher[]> = new Map();\r\n\r\n  /** Debounce timers for coalescing rapid file system events */\r\n  private _debounceTimers: Map<string, NodeJS.Timeout> = new Map();\r\n\r\n  /** Counter for generating unique watcher IDs */\r\n  private _watcherIdCounter = 0;\r\n\r\n  /** Event dispatcher for storage change events */\r\n  #onStorageChange = new EventDispatcher<NodeStorage, IStorageChangeEvent>();\r\n\r\n  get folderDelimiter() {\r\n    return path.sep;\r\n  }\r\n\r\n  get isWatching(): boolean {\r\n    return this._watchers.size > 0;\r\n  }\r\n\r\n  public get onStorageChange() {\r\n    return this.#onStorageChange.asEvent();\r\n  }\r\n\r\n  constructor(incomingPath: string, name: string) {\r\n    super();\r\n\r\n    if (NodeStorage.platformFolderDelimiter === \"\\\\\") {\r\n      incomingPath = incomingPath.replace(/\\//gi, NodeStorage.platformFolderDelimiter);\r\n      incomingPath = incomingPath.replace(/\\\\\\\\/gi, \"\\\\\");\r\n    } else if (NodeStorage.platformFolderDelimiter === \"/\") {\r\n      incomingPath = incomingPath.replace(/\\\\/gi, NodeStorage.platformFolderDelimiter);\r\n      incomingPath = incomingPath.replace(/\\/\\//gi, NodeStorage.platformFolderDelimiter);\r\n    }\r\n\r\n    this.rootPath = incomingPath;\r\n    this.name = name;\r\n\r\n    this.rootFolder = new NodeFolder(this, null, incomingPath, name);\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n      fullPath += NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static async createFromPath(path: string): Promise<NodeFile | NodeFolder> {\r\n    const lastDot = path.lastIndexOf(\".\");\r\n    let lastSlash = path.lastIndexOf(\"/\");\r\n    let lastBackslash = path.lastIndexOf(\"\\\\\");\r\n\r\n    if (lastBackslash > lastSlash) {\r\n      lastSlash = lastBackslash;\r\n    }\r\n\r\n    if (lastDot > lastSlash) {\r\n      const ns = new NodeStorage(path.substring(0, lastSlash), \"\");\r\n\r\n      return (await ns.rootFolder.ensureFileFromRelativePath(path.substring(lastSlash))) as NodeFile;\r\n    } else {\r\n      const ns = new NodeStorage(path, \"\");\r\n\r\n      return ns.rootFolder;\r\n    }\r\n  }\r\n\r\n  static async createFromPathIncludingZip(path: string): Promise<IFolder | undefined> {\r\n    const content = await NodeStorage.createFromPath(path);\r\n\r\n    if (\r\n      content instanceof NodeFile &&\r\n      (path.endsWith(\".mcpack\") ||\r\n        path.endsWith(\".mcaddon\") ||\r\n        path.endsWith(\".mcworld\") ||\r\n        path.endsWith(\".zip\") ||\r\n        path.endsWith(\".mcproject\"))\r\n    ) {\r\n      const zs = await ZipStorage.loadFromFile(content);\r\n\r\n      return zs?.rootFolder;\r\n    }\r\n\r\n    if (content instanceof NodeFolder) {\r\n      return content;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getParentFolderPath(parentPath: string) {\r\n    const lastDelim = parentPath.lastIndexOf(this.platformFolderDelimiter);\r\n\r\n    if (lastDelim < 0) {\r\n      return parentPath;\r\n    }\r\n\r\n    return parentPath.substring(0, lastDelim);\r\n  }\r\n\r\n  public static ensureEndsWithDelimiter(pth: string) {\r\n    if (!pth.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n      pth = pth + NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return pth;\r\n  }\r\n\r\n  public static ensureStartsWithDelimiter(pth: string) {\r\n    if (!pth.startsWith(NodeStorage.platformFolderDelimiter)) {\r\n      pth = NodeStorage.platformFolderDelimiter + pth;\r\n    }\r\n\r\n    return pth;\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n\r\n  /**\r\n   * Start watching the storage for file system changes.\r\n   * Uses Node.js fs.watch() with recursive option where supported.\r\n   *\r\n   * @returns A unique watcher ID that can be used to stop this watcher\r\n   */\r\n  startWatching(): string {\r\n    const watcherId = `watcher-${++this._watcherIdCounter}`;\r\n    const watchers: fs.FSWatcher[] = [];\r\n\r\n    try {\r\n      // Create a recursive watcher on the root path\r\n      const watcher = fs.watch(this.rootPath, { recursive: true, persistent: false }, (eventType, filename) => {\r\n        if (filename) {\r\n          this._handleWatchEvent(watcherId, eventType, filename);\r\n        }\r\n      });\r\n\r\n      watcher.on(\"error\", (err) => {\r\n        Log.debug(`Watcher error for ${this.rootPath}: ${err.message}`);\r\n      });\r\n\r\n      watchers.push(watcher);\r\n      this._watchers.set(watcherId, watchers);\r\n\r\n      Log.verbose(`Started watching ${this.rootPath} with ID ${watcherId}`);\r\n    } catch (err: any) {\r\n      Log.debug(`Failed to start watcher for ${this.rootPath}: ${err.message}`);\r\n    }\r\n\r\n    return watcherId;\r\n  }\r\n\r\n  /**\r\n   * Stop a specific watcher by ID.\r\n   */\r\n  stopWatching(watcherId: string): void {\r\n    const watchers = this._watchers.get(watcherId);\r\n    if (watchers) {\r\n      for (const watcher of watchers) {\r\n        try {\r\n          watcher.close();\r\n        } catch (e) {\r\n          // Ignore close errors\r\n        }\r\n      }\r\n      this._watchers.delete(watcherId);\r\n      Log.verbose(`Stopped watcher ${watcherId} for ${this.rootPath}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Stop all watchers on this storage.\r\n   */\r\n  stopAllWatching(): void {\r\n    for (const watchers of this._watchers.values()) {\r\n      for (const watcher of watchers) {\r\n        try {\r\n          watcher.close();\r\n        } catch (e) {\r\n          // Ignore close errors\r\n        }\r\n      }\r\n    }\r\n    this._watchers.clear();\r\n\r\n    // Clear all debounce timers\r\n    for (const timer of this._debounceTimers.values()) {\r\n      clearTimeout(timer);\r\n    }\r\n    this._debounceTimers.clear();\r\n\r\n    Log.verbose(`Stopped all watchers for ${this.rootPath}`);\r\n  }\r\n\r\n  /**\r\n   * Handle a file system watch event with debouncing.\r\n   */\r\n  private _handleWatchEvent(watcherId: string, eventType: string, filename: string): void {\r\n    // Create a debounce key based on the filename\r\n    const debounceKey = `${watcherId}:${filename}`;\r\n\r\n    // Clear any existing debounce timer for this path\r\n    const existingTimer = this._debounceTimers.get(debounceKey);\r\n    if (existingTimer) {\r\n      clearTimeout(existingTimer);\r\n    }\r\n\r\n    // Set a new debounce timer\r\n    const timer = setTimeout(() => {\r\n      this._debounceTimers.delete(debounceKey);\r\n      this._processWatchEvent(eventType, filename);\r\n    }, WATCHER_DEBOUNCE_MS);\r\n\r\n    this._debounceTimers.set(debounceKey, timer);\r\n  }\r\n\r\n  /**\r\n   * Process a debounced file system event.\r\n   */\r\n  private async _processWatchEvent(eventType: string, filename: string): Promise<void> {\r\n    try {\r\n      const fullPath = path.join(this.rootPath, filename);\r\n      const relativePath = \"/\" + filename.replace(/\\\\/g, \"/\");\r\n\r\n      // Check if the path exists\r\n      const exists = fs.existsSync(fullPath);\r\n\r\n      // Determine if it's a file or folder\r\n      let isFile = true;\r\n      let isDirectory = false;\r\n\r\n      if (exists) {\r\n        try {\r\n          const stat = fs.statSync(fullPath);\r\n          isFile = stat.isFile();\r\n          isDirectory = stat.isDirectory();\r\n        } catch (e) {\r\n          // If we can't stat it, assume it was removed\r\n          isFile = true;\r\n        }\r\n      }\r\n\r\n      // Determine change type\r\n      let changeType: \"added\" | \"modified\" | \"removed\";\r\n      if (!exists) {\r\n        changeType = \"removed\";\r\n      } else if (eventType === \"rename\") {\r\n        // \"rename\" can mean added or removed - we check existence above\r\n        changeType = \"added\";\r\n      } else {\r\n        changeType = \"modified\";\r\n      }\r\n\r\n      // Create and dispatch the storage change event\r\n      const changeEvent: IStorageChangeEvent = {\r\n        changeType,\r\n        path: relativePath,\r\n        isFile,\r\n        timestamp: new Date(),\r\n        source: \"fswatch\",\r\n      };\r\n\r\n      this.#onStorageChange.dispatch(this, changeEvent);\r\n\r\n      // Also dispatch the appropriate specific event\r\n      if (isFile) {\r\n        if (changeType === \"removed\") {\r\n          this.notifyFileRemoved(relativePath);\r\n        } else if (changeType === \"added\") {\r\n          // Get or create the file and notify\r\n          const file = await this.rootFolder.getFileFromRelativePath(relativePath);\r\n          if (file) {\r\n            this.notifyFileAdded(file);\r\n          }\r\n        } else {\r\n          // Modified - reload and notify\r\n          const file = await this.rootFolder.getFileFromRelativePath(relativePath);\r\n          if (file) {\r\n            await file.scanForChanges();\r\n          }\r\n        }\r\n      } else if (isDirectory) {\r\n        if (changeType === \"removed\") {\r\n          // Folder removed - find and notify\r\n          this.notifyFolderRemoved({ storageRelativePath: relativePath, name: path.basename(filename) } as any);\r\n        } else if (changeType === \"added\") {\r\n          // Folder added\r\n          const folder = await this.rootFolder.getFolderFromRelativePath(relativePath);\r\n          if (folder) {\r\n            this.notifyFolderAdded(folder);\r\n          }\r\n        }\r\n      }\r\n\r\n      Log.verbose(`Storage change: ${changeType} ${isFile ? \"file\" : \"folder\"} ${relativePath}`);\r\n    } catch (err: any) {\r\n      Log.debug(`Error processing watch event for ${filename}: ${err.message}`);\r\n    }\r\n  }\r\n}\r\n", null, "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class Player {\r\n  id: string | undefined;\r\n  xuid: string | undefined;\r\n\r\n  isValid(): boolean {\r\n    if (this.id === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class ModuleConfig {\r\n  permissionsAllowedModules: string[] = [];\r\n  variables: { [name: string]: string | number | boolean } | undefined;\r\n  secrets: { [name: string]: string | number | boolean } | undefined;\r\n}\r\n", "import IFolder from \"../storage/IFolder\";\r\nimport ModuleConfig from \"./ModuleConfig\";\r\n\r\nexport const CartoServerToolsScriptModuleId = \"ead57a90-41fc-4f3b-8e1a-ddd64c99da05\";\r\n\r\nexport default class ServerConfigManager {\r\n  private _serverConfigFolder?: IFolder;\r\n\r\n  private _configsByModule: { [name: string]: ModuleConfig } = {};\r\n\r\n  public get serverConfigFolder() {\r\n    return this._serverConfigFolder;\r\n  }\r\n  public set serverConfigFolder(newConfigFolder: IFolder | undefined) {\r\n    this._serverConfigFolder = newConfigFolder;\r\n  }\r\n\r\n  ensureDefaultConfig() {\r\n    const mc = new ModuleConfig();\r\n\r\n    mc.permissionsAllowedModules = [\"@minecraft/server-gametest\", \"@minecraft/server\", \"@minecraft/server-ui\"];\r\n\r\n    this._configsByModule[\"default\"] = mc;\r\n  }\r\n\r\n  addCartoConfig() {\r\n    const mc = new ModuleConfig();\r\n\r\n    mc.permissionsAllowedModules = [\r\n      \"@minecraft/server-gametest\",\r\n      \"@minecraft/server\",\r\n      \"@minecraft/server-ui\",\r\n      \"@minecraft/server-net\",\r\n      \"@minecraft/server-admin\",\r\n    ];\r\n\r\n    this._configsByModule[CartoServerToolsScriptModuleId] = mc;\r\n  }\r\n\r\n  public async writeFiles() {\r\n    if (this._serverConfigFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    for (const moduleName in this._configsByModule) {\r\n      const config = this._configsByModule[moduleName];\r\n\r\n      const moduleFolder = this._serverConfigFolder.ensureFolder(moduleName.toLowerCase());\r\n\r\n      await moduleFolder.ensureExists();\r\n\r\n      const permissionsFile = moduleFolder.ensureFile(\"permissions.json\");\r\n\r\n      const permissionsData = {\r\n        allowed_modules: config.permissionsAllowedModules,\r\n      };\r\n\r\n      const permissionsFIleExists = await permissionsFile.exists();\r\n\r\n      let text: string | undefined;\r\n      if (permissionsFIleExists) {\r\n        await permissionsFile.loadContent(true);\r\n\r\n        text = permissionsFile.content as string;\r\n      }\r\n\r\n      let newText: string | undefined = JSON.stringify(permissionsData);\r\n\r\n      // backup the server properties file if it's not generated\r\n      if (text && text.length > 0 && text !== newText) {\r\n        const now = new Date();\r\n\r\n        const fileCopy = moduleFolder.ensureFile(\r\n          \"permissions.json.\" +\r\n            now.getFullYear() +\r\n            \".\" +\r\n            (now.getMonth() + 1) +\r\n            \".\" +\r\n            now.getDate() +\r\n            \".\" +\r\n            now.getHours() +\r\n            \".\" +\r\n            now.getMinutes() +\r\n            \".cartobackup\"\r\n        );\r\n        fileCopy.setContent(text);\r\n\r\n        await fileCopy.saveContent();\r\n      }\r\n\r\n      permissionsFile.setContent(newText);\r\n\r\n      await permissionsFile.saveContent();\r\n\r\n      const varFile = moduleFolder.ensureFile(\"variables.json\");\r\n\r\n      const varFileExists = await varFile.exists();\r\n\r\n      if (varFileExists) {\r\n        if (!varFile.isContentLoaded) {\r\n          await varFile.loadContent(true);\r\n        }\r\n\r\n        text = varFile.content as string;\r\n      }\r\n\r\n      if (config.variables) {\r\n        newText = JSON.stringify(config.variables);\r\n      } else {\r\n        newText = undefined;\r\n      }\r\n\r\n      // backup the server properties file if it's not generated\r\n      if (text && text.length > 0 && text !== newText) {\r\n        const now = new Date();\r\n\r\n        const fileCopy = moduleFolder.ensureFile(\r\n          \"variables.json.\" +\r\n            now.getFullYear() +\r\n            \".\" +\r\n            (now.getMonth() + 1) +\r\n            \".\" +\r\n            now.getDate() +\r\n            \".\" +\r\n            now.getHours() +\r\n            \".\" +\r\n            now.getMinutes() +\r\n            \".cartobackup\"\r\n        );\r\n        fileCopy.setContent(text);\r\n\r\n        await fileCopy.saveContent();\r\n      }\r\n\r\n      if (!newText && varFileExists) {\r\n        await varFile.deleteThisFile();\r\n      } else if (newText) {\r\n        varFile.content = newText;\r\n        await varFile.saveContent();\r\n      }\r\n\r\n      const secretsFile = moduleFolder.ensureFile(\"secrets.json\");\r\n\r\n      const secretsFileExists = await secretsFile.exists();\r\n\r\n      if (secretsFileExists) {\r\n        if (!secretsFile.isContentLoaded) {\r\n          await secretsFile.loadContent(true);\r\n        }\r\n\r\n        text = secretsFile.content as string;\r\n      }\r\n\r\n      if (config.secrets) {\r\n        newText = JSON.stringify(config.secrets);\r\n      } else {\r\n        newText = undefined;\r\n      }\r\n\r\n      // backup the server properties file if it's not generated\r\n      if (text && text.length > 0 && text !== newText) {\r\n        const now = new Date();\r\n\r\n        const fileCopy = moduleFolder.ensureFile(\r\n          \"secrets.json.\" +\r\n            now.getFullYear() +\r\n            \".\" +\r\n            (now.getMonth() + 1) +\r\n            \".\" +\r\n            now.getDate() +\r\n            \".\" +\r\n            now.getHours() +\r\n            \".\" +\r\n            now.getMinutes() +\r\n            \".cartobackup\"\r\n        );\r\n        fileCopy.setContent(text);\r\n\r\n        await fileCopy.saveContent();\r\n      }\r\n\r\n      if (!newText && secretsFileExists) {\r\n        await secretsFile.deleteThisFile();\r\n      } else if (newText) {\r\n        secretsFile.content = newText;\r\n        await secretsFile.saveContent();\r\n      }\r\n    }\r\n  }\r\n}\r\n", "export enum ServerMessageType {\r\n  general,\r\n  info = 1,\r\n  error = 2,\r\n  warning = 3,\r\n}\r\n\r\nexport enum ServerMessageCategory {\r\n  general = 0,\r\n  serverStarting = 1,\r\n  version = 2,\r\n  sessionId = 3,\r\n  buildId = 4,\r\n  branch = 5,\r\n  commitId = 6,\r\n  configuration = 7,\r\n  levelName = 8,\r\n  gameMode = 9,\r\n  difficulty = 10,\r\n  contentLoggingConsoleEnabled = 11,\r\n  contentLoggingDiskEnabled = 12,\r\n  experiments = 13,\r\n  openingLevel = 14,\r\n  ipv4supported = 15,\r\n  ipv6supported = 16,\r\n  serverStarted = 17,\r\n  telemetryMessageStart = 18,\r\n  telemetryStart = 19,\r\n  telemetryEnabling = 20,\r\n  telemetryEnabling2 = 21,\r\n  telemetryProperties = 22,\r\n  demarcationLine = 23,\r\n  debuggerListening = 24,\r\n  serverStopRequested = 25,\r\n  serverStopping = 26,\r\n  serverStopped = 27,\r\n  debuggerClosing = 28,\r\n  noLogFile = 29,\r\n  playerConnected = 30,\r\n  playerDisconnected = 31,\r\n  backupSaving = 32,\r\n  backupSaved = 33,\r\n  levelDatUpdate = 34,\r\n  backupComplete = 35,\r\n  gameTestLoaded = 36,\r\n  gameTestPassed = 37,\r\n  gameTestFailed = 38,\r\n  empty = 39,\r\n  debuggerFailedToStart = 40,\r\n  internalSystemMessage = 41, // Internal system messages (e.g., querytarget output) - don't log to console\r\n}\r\n\r\nexport default class ServerMessage {\r\n  #fullMessage: string;\r\n  #message: string;\r\n  #type: ServerMessageType = ServerMessageType.general;\r\n  #date: Date;\r\n  #category: ServerMessageCategory = ServerMessageCategory.general;\r\n\r\n  get fullMessage() {\r\n    return this.#fullMessage;\r\n  }\r\n\r\n  get message() {\r\n    return this.#message;\r\n  }\r\n\r\n  get type() {\r\n    return this.#type;\r\n  }\r\n\r\n  get category() {\r\n    return this.#category;\r\n  }\r\n\r\n  get date() {\r\n    return this.#date;\r\n  }\r\n\r\n  constructor(message: string) {\r\n    this.#fullMessage = message;\r\n    this.#date = new Date(0);\r\n\r\n    // Strip \"NO LOG FILE! - \" prefix if present - this happens when the server\r\n    // restarts and the log file isn't set up yet. We still need to parse the\r\n    // actual message content for important events like \"Server started.\"\r\n    const NO_LOG_PREFIX = \"NO LOG FILE! - \";\r\n    if (message.startsWith(NO_LOG_PREFIX)) {\r\n      message = message.substring(NO_LOG_PREFIX.length);\r\n    }\r\n\r\n    const firstBracket = message.indexOf(\"[\");\r\n\r\n    if (firstBracket === 0) {\r\n      const lastBracket = message.indexOf(\"] \", firstBracket);\r\n\r\n      if (lastBracket > firstBracket && lastBracket > 10) {\r\n        this.#message = message.substring(lastBracket + 2);\r\n\r\n        if (message.substring(lastBracket - 4, lastBracket) === \"INFO\") {\r\n          this.#type = ServerMessageType.info;\r\n        } else if (message.substring(lastBracket - 5, lastBracket) === \"ERROR\") {\r\n          this.#type = ServerMessageType.error;\r\n        } else if (message.substring(lastBracket - 4, lastBracket) === \"WARN\") {\r\n          this.#type = ServerMessageType.warning;\r\n        }\r\n\r\n        const lastSpace = message.lastIndexOf(\" \", lastBracket);\r\n\r\n        if (lastSpace > firstBracket) {\r\n          const dateTime = message.substring(firstBracket + 1, lastSpace);\r\n          this.#date = new Date(dateTime);\r\n        }\r\n      } else {\r\n        this.#message = this.#fullMessage;\r\n      }\r\n    } else {\r\n      this.#message = this.#fullMessage;\r\n    }\r\n\r\n    this.#message = this.#message.trim();\r\n\r\n    if (this.#message === \"\") {\r\n      this.#category = ServerMessageCategory.empty;\r\n    } else if (this.#message.startsWith(\"Starting Server\")) {\r\n      this.#category = ServerMessageCategory.serverStarting;\r\n    } else if (this.#message.startsWith(\"Version: \")) {\r\n      this.#category = ServerMessageCategory.version;\r\n    } else if (this.#message.startsWith(\"Session ID: \")) {\r\n      this.#category = ServerMessageCategory.sessionId;\r\n    } else if (this.#message.startsWith(\"Build ID: \")) {\r\n      this.#category = ServerMessageCategory.buildId;\r\n    } else if (this.#message.startsWith(\"Branch: \")) {\r\n      this.#category = ServerMessageCategory.branch;\r\n    } else if (this.#message.startsWith(\"Commit ID: \")) {\r\n      this.#category = ServerMessageCategory.commitId;\r\n    } else if (this.#message.startsWith(\"Configuration: \")) {\r\n      this.#category = ServerMessageCategory.configuration;\r\n    } else if (this.#message.startsWith(\"Level Name: \")) {\r\n      this.#category = ServerMessageCategory.levelName;\r\n    } else if (this.#message.startsWith(\"Game mode: \")) {\r\n      this.#category = ServerMessageCategory.gameMode;\r\n    } else if (this.#message.startsWith(\"Difficulty: \")) {\r\n      this.#category = ServerMessageCategory.difficulty;\r\n    } else if (this.#message.startsWith(\"Content logging to console is enabled\")) {\r\n      this.#category = ServerMessageCategory.contentLoggingConsoleEnabled;\r\n    } else if (this.#message.startsWith(\"Content logging to disk is enabled\")) {\r\n      this.#category = ServerMessageCategory.contentLoggingDiskEnabled;\r\n    } else if (this.#message.startsWith(\"Experiment(s) active:\")) {\r\n      this.#category = ServerMessageCategory.experiments;\r\n    } else if (this.#message.startsWith(\"Opening level\")) {\r\n      this.#category = ServerMessageCategory.openingLevel;\r\n    } else if (this.#message.startsWith(\"IPv4 supported\")) {\r\n      this.#category = ServerMessageCategory.ipv4supported;\r\n    } else if (this.#message.startsWith(\"IPv6 supported\")) {\r\n      this.#category = ServerMessageCategory.ipv6supported;\r\n    } else if (this.#message.startsWith(\"Server started.\")) {\r\n      this.#category = ServerMessageCategory.serverStarted;\r\n    } else if (this.#message.startsWith(\"================ TELEMETRY MESSAGE \")) {\r\n      this.#category = ServerMessageCategory.telemetryMessageStart;\r\n    } else if (this.#message.startsWith(\"Server Telemetry is currently not enabled.\")) {\r\n      this.#category = ServerMessageCategory.telemetryStart;\r\n    } else if (this.#message.startsWith(\"Enabling this telemetry helps us improve the game.\")) {\r\n      this.#category = ServerMessageCategory.telemetryEnabling;\r\n    } else if (this.#message.startsWith(\"To enable this feature\")) {\r\n      this.#category = ServerMessageCategory.telemetryEnabling2;\r\n    } else if (this.#message.startsWith(\"to the server.properties\")) {\r\n      this.#category = ServerMessageCategory.telemetryProperties;\r\n    } else if (this.#message.startsWith(\"======================================================\")) {\r\n      this.#category = ServerMessageCategory.demarcationLine;\r\n    } else if (this.#message.startsWith(\"Debugger listening\")) {\r\n      this.#category = ServerMessageCategory.debuggerListening;\r\n    } else if (this.#message.startsWith(\"[Scripting] Script Debugger\")) {\r\n      this.#category = ServerMessageCategory.debuggerClosing;\r\n    } else if (this.#message.startsWith(\"Server stop requested\")) {\r\n      this.#category = ServerMessageCategory.serverStopRequested;\r\n    } else if (this.#message.startsWith(\"Stopping server...\")) {\r\n      this.#category = ServerMessageCategory.serverStopping;\r\n    } else if (this.#message.startsWith(\"Quit correctly\")) {\r\n      this.#category = ServerMessageCategory.serverStopped;\r\n    } else if (this.#message.startsWith(\"Player connected\")) {\r\n      this.#category = ServerMessageCategory.playerConnected;\r\n    } else if (this.#message.startsWith(\"Player disconnected\")) {\r\n      this.#category = ServerMessageCategory.playerDisconnected;\r\n    } else if (this.#message.startsWith(\"Saving...\")) {\r\n      this.#category = ServerMessageCategory.backupSaving;\r\n    } else if (this.#message.startsWith(\"Data saved.\")) {\r\n      this.#category = ServerMessageCategory.backupSaved;\r\n    } else if (this.#message.indexOf(\"/level.dat:\") >= 0) {\r\n      this.#category = ServerMessageCategory.levelDatUpdate;\r\n    } else if (this.#message.startsWith(\"Changes to the world are resumed.\")) {\r\n      this.#category = ServerMessageCategory.backupComplete;\r\n    } else if (this.#message.indexOf(\"onTestStructureLoaded:\") >= 0) {\r\n      this.#category = ServerMessageCategory.gameTestLoaded;\r\n    } else if (this.#message.indexOf(\"onTestFailed:\") >= 0) {\r\n      this.#category = ServerMessageCategory.gameTestFailed;\r\n    } else if (this.#message.indexOf(\"onTestPassed:\") >= 0) {\r\n      this.#category = ServerMessageCategory.gameTestPassed;\r\n    } else if (this.#message.startsWith(\"Failed to start debugger\")) {\r\n      this.#category = ServerMessageCategory.debuggerFailedToStart;\r\n    } else if (\r\n      this.#message.startsWith(\"Target data:\") ||\r\n      this.#message.startsWith(\"No targets matched selector\") ||\r\n      this.#message.startsWith('\"dimension\"') ||\r\n      this.#message.startsWith('\"id\"') ||\r\n      this.#message.startsWith('\"position\"') ||\r\n      this.#message.startsWith('\"uniqueId\"') ||\r\n      this.#message.startsWith('\"yRot\"') ||\r\n      this.#message.startsWith('\"x\"') ||\r\n      this.#message.startsWith('\"y\"') ||\r\n      this.#message.startsWith('\"z\"') ||\r\n      this.#message === \"},\" ||\r\n      this.#message === \"}\" ||\r\n      this.#message === \"{\" ||\r\n      this.#message === \"[\" ||\r\n      this.#message === \"]\"\r\n    ) {\r\n      this.#category = ServerMessageCategory.internalSystemMessage;\r\n    }\r\n  }\r\n}\r\n\r\n// Lookup table mapping categories to their log prefix.\r\n// Using a Map instead of a switch avoids subtle bugs when new enum values are\r\n// added: a missing entry simply falls through to the default (\"LOG\") without\r\n// requiring updates to a switch statement scattered across the codebase.\r\nconst MESSAGE_CATEGORY_PREFIXES = new Map<ServerMessageCategory, string>([\r\n  [ServerMessageCategory.serverStarting, \"START\"],\r\n  [ServerMessageCategory.serverStarted, \"READY\"],\r\n  [ServerMessageCategory.serverStopped, \"STOP\"],\r\n  [ServerMessageCategory.serverStopRequested, \"STOPREQ\"],\r\n  [ServerMessageCategory.serverStopping, \"STOPPING\"],\r\n  [ServerMessageCategory.playerConnected, \"JOIN\"],\r\n  [ServerMessageCategory.playerDisconnected, \"LEAVE\"],\r\n  [ServerMessageCategory.gameTestFailed, \"ERROR\"],\r\n  [ServerMessageCategory.debuggerFailedToStart, \"ERROR\"],\r\n  [ServerMessageCategory.gameTestPassed, \"PASS\"],\r\n  [ServerMessageCategory.backupSaving, \"SAVE\"],\r\n  [ServerMessageCategory.backupSaved, \"SAVED\"],\r\n  [ServerMessageCategory.backupComplete, \"SAVED\"],\r\n  [ServerMessageCategory.version, \"VER\"],\r\n  [ServerMessageCategory.debuggerListening, \"DEBUG\"],\r\n  [ServerMessageCategory.gameTestLoaded, \"GTEST\"],\r\n]);\r\n\r\nexport function getMessageCategoryPrefix(category: ServerMessageCategory): string {\r\n  return MESSAGE_CATEGORY_PREFIXES.get(category) ?? \"LOG\";\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"../storage/IFolder\";\r\nimport { IWorldSettings } from \"./IWorldSettings\";\r\nimport { Difficulty, GameType, PlayerPermissionsLevel } from \"./WorldLevelDat\";\r\n\r\nenum ServerGameMode {\r\n  survival = \"survival\",\r\n  creative = \"creative\",\r\n  adventure = \"adventure\",\r\n}\r\n\r\nenum ServerDifficulty {\r\n  peaceful = \"peaceful\",\r\n  easy = \"easy\",\r\n  normal = \"normal\",\r\n  hard = \"hard\",\r\n}\r\n\r\nenum ServerContentLoggingLevel {\r\n  verbose = \"verbose\",\r\n  error = \"error\",\r\n  warning = \"warning\",\r\n  info = \"info\",\r\n}\r\n\r\nenum ServerPermissionLevel {\r\n  member = \"member\",\r\n  visitor = \"visitor\",\r\n  operator = \"operator\",\r\n}\r\n\r\nenum ServerAuthoritativeness {\r\n  clientAuth = \"client-auth\",\r\n  serverAuth = \"server-auth\",\r\n  serverAuthWithRewind = \"server-auth-with-rewind\",\r\n}\r\n\r\nexport default class ServerPropertiesManager {\r\n  private _serverFolder?: IFolder;\r\n\r\n  name: string = \"Dedicated Server\";\r\n  gameMode: ServerGameMode = ServerGameMode.survival;\r\n  forceGameMode: boolean = false;\r\n  difficulty: ServerDifficulty = ServerDifficulty.easy;\r\n  allowCheats: boolean = true;\r\n  maxPlayers: number = 10;\r\n  onlineMode: boolean = false;\r\n  emitServerTelemetry: boolean = false;\r\n  whiteList: boolean = false;\r\n  serverPort: number = 19132;\r\n  serverPortV6: number = 19133;\r\n  viewDistance: number = 32;\r\n  tickDistance: number = 4;\r\n  playerIdleTimeout: number = 30;\r\n  maxThreads: number = 8;\r\n  levelName: string = \"Bedrock level\";\r\n  levelSeed: string = \"\";\r\n  allowInboundScriptDebugging = true;\r\n  allowOutboundScriptDebugging = true;\r\n  defaultPlayerPermissionLevel: ServerPermissionLevel = ServerPermissionLevel.member;\r\n  contentLogLevel: ServerContentLoggingLevel = ServerContentLoggingLevel.verbose;\r\n  contentLogConsoleOutputEnabled = true;\r\n  texturePackRequired: boolean = false;\r\n  contentLogFileEnabled: boolean = true;\r\n  compressionThreshold: number = 1;\r\n  serverAuthoritativeMovement: ServerAuthoritativeness = ServerAuthoritativeness.serverAuth;\r\n  playerMovementScoreThreshold: number = 20;\r\n  playerMovementDistanceThreshold: number = 0.3;\r\n  playerMovementDurationThresholdInMs: number = 500;\r\n  correctPlayerMovement: boolean = true;\r\n  serverAuthoritativeBlockBreaking: boolean = false;\r\n\r\n  public get serverFolder() {\r\n    return this._serverFolder;\r\n  }\r\n  public set serverFolder(newFolder: IFolder | undefined) {\r\n    this._serverFolder = newFolder;\r\n  }\r\n\r\n  public applyFromWorldSettings(worldSettings: IWorldSettings) {\r\n    if (worldSettings.playerPermissionLevel) {\r\n      switch (worldSettings.playerPermissionLevel) {\r\n        case PlayerPermissionsLevel.member:\r\n          this.defaultPlayerPermissionLevel = ServerPermissionLevel.member;\r\n          break;\r\n        case PlayerPermissionsLevel.operator:\r\n          this.defaultPlayerPermissionLevel = ServerPermissionLevel.operator;\r\n          break;\r\n      }\r\n    }\r\n    if (worldSettings.difficulty !== undefined) {\r\n      switch (worldSettings.difficulty) {\r\n        case Difficulty.easy:\r\n          this.difficulty = ServerDifficulty.easy;\r\n          break;\r\n        case Difficulty.normal:\r\n          this.difficulty = ServerDifficulty.normal;\r\n          break;\r\n        case Difficulty.peaceful:\r\n          this.difficulty = ServerDifficulty.peaceful;\r\n          break;\r\n        case Difficulty.hard:\r\n          this.difficulty = ServerDifficulty.hard;\r\n          break;\r\n      }\r\n    }\r\n\r\n    if (worldSettings.gameType !== undefined) {\r\n      switch (worldSettings.gameType) {\r\n        case GameType.survival:\r\n          this.gameMode = ServerGameMode.survival;\r\n          this.forceGameMode = true;\r\n          break;\r\n        case GameType.creative:\r\n          this.gameMode = ServerGameMode.creative;\r\n          this.forceGameMode = true;\r\n          break;\r\n        case GameType.adventure:\r\n          this.gameMode = ServerGameMode.adventure;\r\n          this.forceGameMode = true;\r\n          break;\r\n      }\r\n    }\r\n\r\n    if (worldSettings.onlineMode !== undefined) {\r\n      this.onlineMode = worldSettings.onlineMode;\r\n    }\r\n\r\n    if (worldSettings.emitServerTelemetry !== undefined) {\r\n      this.emitServerTelemetry = worldSettings.emitServerTelemetry;\r\n    }\r\n  }\r\n\r\n  public async writeFile() {\r\n    if (this._serverFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    const file = this._serverFolder.ensureFile(\"server.properties\");\r\n\r\n    await file.loadContent(true);\r\n\r\n    const text = file.content as string;\r\n\r\n    // backup the server properties file if it's not generated\r\n    if (text && text.indexOf(\"# Generated\") < 0) {\r\n      const now = new Date();\r\n\r\n      const fileCopy = this._serverFolder.ensureFile(\r\n        \"server.properties.\" +\r\n          now.getFullYear() +\r\n          \".\" +\r\n          (now.getMonth() + 1) +\r\n          \".\" +\r\n          now.getDate() +\r\n          \".\" +\r\n          now.getHours() +\r\n          \".\" +\r\n          now.getMinutes() +\r\n          \".cartobackup\"\r\n      );\r\n      fileCopy.setContent(text);\r\n\r\n      await fileCopy.saveContent();\r\n    }\r\n\r\n    const content = [];\r\n\r\n    content.push(\"# Generated by Minecraft Creator Tools\");\r\n    content.push(\"server-name=\" + this.name);\r\n    content.push(\"gamemode=\" + this.gameMode);\r\n    content.push(\"force-gamemode=\" + this.forceGameMode);\r\n    content.push(\"difficulty=\" + this.difficulty);\r\n    content.push(\"allow-cheats=\" + this.allowCheats);\r\n    content.push(\"max-players=\" + this.maxPlayers);\r\n    content.push(\"online-mode=\" + this.onlineMode);\r\n    content.push(\"emit-server-telemetry=\" + this.emitServerTelemetry);\r\n    content.push(\"white-list=\" + this.whiteList);\r\n    content.push(\"server-port=\" + this.serverPort);\r\n    content.push(\"server-portv6=\" + this.serverPortV6);\r\n    content.push(\"view-distance=\" + this.viewDistance);\r\n    content.push(\"tick-distance=\" + this.tickDistance);\r\n    content.push(\"player-idle-timeout=\" + this.playerIdleTimeout);\r\n    content.push(\"max-threads=\" + this.maxThreads);\r\n    content.push(\"level-name=\" + this.levelName);\r\n    content.push(\"level-seed=\" + this.levelSeed);\r\n    content.push(\"allow-inbound-script-debugging=\" + this.allowInboundScriptDebugging);\r\n    content.push(\"allow-outbound-script-debugging=\" + this.allowOutboundScriptDebugging);\r\n    content.push(\"default-player-permission-level=\" + this.defaultPlayerPermissionLevel);\r\n    content.push(\"texturepack-required=\" + this.texturePackRequired);\r\n    content.push(\"content-log-file-enabled=\" + this.contentLogFileEnabled);\r\n    content.push(\"content-log-console-output=\" + this.contentLogConsoleOutputEnabled);\r\n    content.push(\"content-log-level=\" + this.contentLogLevel);\r\n    content.push(\"compression-threshold=\" + this.compressionThreshold);\r\n    content.push(\"server-authoritative-movement=\" + this.serverAuthoritativeMovement);\r\n    content.push(\"player-movement-score-threshold=\" + this.playerMovementScoreThreshold);\r\n    content.push(\"player-movement-distance-threshold=\" + this.playerMovementDistanceThreshold);\r\n    content.push(\"player-movement-duration-threshold-in-ms=\" + this.playerMovementDurationThresholdInMs);\r\n    content.push(\"correct-player-movement=\" + this.correctPlayerMovement);\r\n    content.push(\"server-authoritative-block-breaking=\" + this.serverAuthoritativeBlockBreaking);\r\n\r\n    file.setContent(content.join(\"\\n\"));\r\n\r\n    file.saveContent();\r\n  }\r\n}\r\n", "import crypto from 'crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n  if (poolPtr > rnds8Pool.length - 16) {\n    crypto.randomFillSync(rnds8Pool);\n    poolPtr = 0;\n  }\n\n  return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}", "import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;", "import crypto from 'crypto';\nexport default {\n  randomUUID: crypto.randomUUID\n};", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n\n  options = options || {};\n  const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return unsafeStringify(rnds);\n}\n\nexport default v4;", "export { default as v1 } from './v1.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as NIL } from './nil.js';\nexport { default as version } from './version.js';\nexport { default as validate } from './validate.js';\nexport { default as stringify } from './stringify.js';\nexport { default as parse } from './parse.js';", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IConversionSettings from \"./IConversionSettings\";\r\nimport IStorage from \"../storage/IStorage\";\r\n\r\n/**\r\n * Decoded image data with RGBA pixels\r\n */\r\nexport interface IDecodedImageData {\r\n  width: number;\r\n  height: number;\r\n  pixels: Uint8Array;\r\n}\r\n\r\nexport enum Platform {\r\n  windows,\r\n  macOS,\r\n  linux,\r\n  unsupported,\r\n}\r\n\r\nexport default interface ILocalUtilities {\r\n  readonly platform: Platform;\r\n\r\n  readonly userDataPath: string;\r\n\r\n  readonly localAppDataPath: string;\r\n\r\n  readonly roamingAppDataPath: string;\r\n\r\n  readonly localReleaseServerLogPath: string;\r\n\r\n  readonly localPreviewServerLogPath: string;\r\n\r\n  readonly minecraftPath: string;\r\n\r\n  readonly minecraftPreviewPath: string;\r\n\r\n  readonly minecraftUwpPath: string;\r\n\r\n  readonly minecraftPreviewUwpPath: string;\r\n\r\n  generateCryptoRandomNumber(toVal: number): number;\r\n\r\n  generateUuid(): string;\r\n\r\n  validateFolderPath(path: string): void;\r\n\r\n  countChar(source: string, find: string): number;\r\n\r\n  ensureStartsWithSlash(pathSegment: string): string;\r\n\r\n  ensureEndsWithSlash(pathSegment: string): string;\r\n\r\n  ensureStartsWithBackSlash(pathSegment: string): string;\r\n\r\n  ensureEndsWithBackSlash(pathSegment: string): string;\r\n\r\n  readJsonFile(path: string): Promise<object | null>;\r\n\r\n  createStorage(path: string): IStorage | null;\r\n\r\n  processConversion(settings: IConversionSettings): Promise<boolean>;\r\n\r\n  /**\r\n   * Decode PNG image data using Node.js-specific implementation (pngjs).\r\n   * Returns undefined if decoding fails.\r\n   */\r\n  decodePng(data: Uint8Array): IDecodedImageData | undefined;\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format using Node.js-specific implementation (pngjs).\r\n   * Returns undefined if encoding fails.\r\n   */\r\n  encodeToPng(pixels: Uint8Array, width: number, height: number): Uint8Array | undefined;\r\n}\r\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\n\nlet ChunkStream = (module.exports = function () {\n  Stream.call(this);\n\n  this._buffers = [];\n  this._buffered = 0;\n\n  this._reads = [];\n  this._paused = false;\n\n  this._encoding = \"utf8\";\n  this.writable = true;\n});\nutil.inherits(ChunkStream, Stream);\n\nChunkStream.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n\n  process.nextTick(\n    function () {\n      this._process();\n\n      // its paused and there is not enought data then ask for more\n      if (this._paused && this._reads && this._reads.length > 0) {\n        this._paused = false;\n\n        this.emit(\"drain\");\n      }\n    }.bind(this)\n  );\n};\n\nChunkStream.prototype.write = function (data, encoding) {\n  if (!this.writable) {\n    this.emit(\"error\", new Error(\"Stream not writable\"));\n    return false;\n  }\n\n  let dataBuffer;\n  if (Buffer.isBuffer(data)) {\n    dataBuffer = data;\n  } else {\n    dataBuffer = Buffer.from(data, encoding || this._encoding);\n  }\n\n  this._buffers.push(dataBuffer);\n  this._buffered += dataBuffer.length;\n\n  this._process();\n\n  // ok if there are no more read requests\n  if (this._reads && this._reads.length === 0) {\n    this._paused = true;\n  }\n\n  return this.writable && !this._paused;\n};\n\nChunkStream.prototype.end = function (data, encoding) {\n  if (data) {\n    this.write(data, encoding);\n  }\n\n  this.writable = false;\n\n  // already destroyed\n  if (!this._buffers) {\n    return;\n  }\n\n  // enqueue or handle end\n  if (this._buffers.length === 0) {\n    this._end();\n  } else {\n    this._buffers.push(null);\n    this._process();\n  }\n};\n\nChunkStream.prototype.destroySoon = ChunkStream.prototype.end;\n\nChunkStream.prototype._end = function () {\n  if (this._reads.length > 0) {\n    this.emit(\"error\", new Error(\"Unexpected end of input\"));\n  }\n\n  this.destroy();\n};\n\nChunkStream.prototype.destroy = function () {\n  if (!this._buffers) {\n    return;\n  }\n\n  this.writable = false;\n  this._reads = null;\n  this._buffers = null;\n\n  this.emit(\"close\");\n};\n\nChunkStream.prototype._processReadAllowingLess = function (read) {\n  // ok there is any data so that we can satisfy this request\n  this._reads.shift(); // == read\n\n  // first we need to peek into first buffer\n  let smallerBuf = this._buffers[0];\n\n  // ok there is more data than we need\n  if (smallerBuf.length > read.length) {\n    this._buffered -= read.length;\n    this._buffers[0] = smallerBuf.slice(read.length);\n\n    read.func.call(this, smallerBuf.slice(0, read.length));\n  } else {\n    // ok this is less than maximum length so use it all\n    this._buffered -= smallerBuf.length;\n    this._buffers.shift(); // == smallerBuf\n\n    read.func.call(this, smallerBuf);\n  }\n};\n\nChunkStream.prototype._processRead = function (read) {\n  this._reads.shift(); // == read\n\n  let pos = 0;\n  let count = 0;\n  let data = Buffer.alloc(read.length);\n\n  // create buffer for all data\n  while (pos < read.length) {\n    let buf = this._buffers[count++];\n    let len = Math.min(buf.length, read.length - pos);\n\n    buf.copy(data, pos, 0, len);\n    pos += len;\n\n    // last buffer wasn't used all so just slice it and leave\n    if (len !== buf.length) {\n      this._buffers[--count] = buf.slice(len);\n    }\n  }\n\n  // remove all used buffers\n  if (count > 0) {\n    this._buffers.splice(0, count);\n  }\n\n  this._buffered -= read.length;\n\n  read.func.call(this, data);\n};\n\nChunkStream.prototype._process = function () {\n  try {\n    // as long as there is any data and read requests\n    while (this._buffered > 0 && this._reads && this._reads.length > 0) {\n      let read = this._reads[0];\n\n      // read any data (but no more than length)\n      if (read.allowLess) {\n        this._processReadAllowingLess(read);\n      } else if (this._buffered >= read.length) {\n        // ok we can meet some expectations\n\n        this._processRead(read);\n      } else {\n        // not enought data to satisfy first request in queue\n        // so we need to wait for more\n        break;\n      }\n    }\n\n    if (this._buffers && !this.writable) {\n      this._end();\n    }\n  } catch (ex) {\n    this.emit(\"error\", ex);\n  }\n};\n", "\"use strict\";\n\n// Adam 7\n//   0 1 2 3 4 5 6 7\n// 0 x 6 4 6 x 6 4 6\n// 1 7 7 7 7 7 7 7 7\n// 2 5 6 5 6 5 6 5 6\n// 3 7 7 7 7 7 7 7 7\n// 4 3 6 4 6 3 6 4 6\n// 5 7 7 7 7 7 7 7 7\n// 6 5 6 5 6 5 6 5 6\n// 7 7 7 7 7 7 7 7 7\n\nlet imagePasses = [\n  {\n    // pass 1 - 1px\n    x: [0],\n    y: [0],\n  },\n  {\n    // pass 2 - 1px\n    x: [4],\n    y: [0],\n  },\n  {\n    // pass 3 - 2px\n    x: [0, 4],\n    y: [4],\n  },\n  {\n    // pass 4 - 4px\n    x: [2, 6],\n    y: [0, 4],\n  },\n  {\n    // pass 5 - 8px\n    x: [0, 2, 4, 6],\n    y: [2, 6],\n  },\n  {\n    // pass 6 - 16px\n    x: [1, 3, 5, 7],\n    y: [0, 2, 4, 6],\n  },\n  {\n    // pass 7 - 32px\n    x: [0, 1, 2, 3, 4, 5, 6, 7],\n    y: [1, 3, 5, 7],\n  },\n];\n\nexports.getImagePasses = function (width, height) {\n  let images = [];\n  let xLeftOver = width % 8;\n  let yLeftOver = height % 8;\n  let xRepeats = (width - xLeftOver) / 8;\n  let yRepeats = (height - yLeftOver) / 8;\n  for (let i = 0; i < imagePasses.length; i++) {\n    let pass = imagePasses[i];\n    let passWidth = xRepeats * pass.x.length;\n    let passHeight = yRepeats * pass.y.length;\n    for (let j = 0; j < pass.x.length; j++) {\n      if (pass.x[j] < xLeftOver) {\n        passWidth++;\n      } else {\n        break;\n      }\n    }\n    for (let j = 0; j < pass.y.length; j++) {\n      if (pass.y[j] < yLeftOver) {\n        passHeight++;\n      } else {\n        break;\n      }\n    }\n    if (passWidth > 0 && passHeight > 0) {\n      images.push({ width: passWidth, height: passHeight, index: i });\n    }\n  }\n  return images;\n};\n\nexports.getInterlaceIterator = function (width) {\n  return function (x, y, pass) {\n    let outerXLeftOver = x % imagePasses[pass].x.length;\n    let outerX =\n      ((x - outerXLeftOver) / imagePasses[pass].x.length) * 8 +\n      imagePasses[pass].x[outerXLeftOver];\n    let outerYLeftOver = y % imagePasses[pass].y.length;\n    let outerY =\n      ((y - outerYLeftOver) / imagePasses[pass].y.length) * 8 +\n      imagePasses[pass].y[outerYLeftOver];\n    return outerX * 4 + outerY * width * 4;\n  };\n};\n", "\"use strict\";\n\nmodule.exports = function paethPredictor(left, above, upLeft) {\n  let paeth = left + above - upLeft;\n  let pLeft = Math.abs(paeth - left);\n  let pAbove = Math.abs(paeth - above);\n  let pUpLeft = Math.abs(paeth - upLeft);\n\n  if (pLeft <= pAbove && pLeft <= pUpLeft) {\n    return left;\n  }\n  if (pAbove <= pUpLeft) {\n    return above;\n  }\n  return upLeft;\n};\n", "\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction getByteWidth(width, bpp, depth) {\n  let byteWidth = width * bpp;\n  if (depth !== 8) {\n    byteWidth = Math.ceil(byteWidth / (8 / depth));\n  }\n  return byteWidth;\n}\n\nlet Filter = (module.exports = function (bitmapInfo, dependencies) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let interlace = bitmapInfo.interlace;\n  let bpp = bitmapInfo.bpp;\n  let depth = bitmapInfo.depth;\n\n  this.read = dependencies.read;\n  this.write = dependencies.write;\n  this.complete = dependencies.complete;\n\n  this._imageIndex = 0;\n  this._images = [];\n  if (interlace) {\n    let passes = interlaceUtils.getImagePasses(width, height);\n    for (let i = 0; i < passes.length; i++) {\n      this._images.push({\n        byteWidth: getByteWidth(passes[i].width, bpp, depth),\n        height: passes[i].height,\n        lineIndex: 0,\n      });\n    }\n  } else {\n    this._images.push({\n      byteWidth: getByteWidth(width, bpp, depth),\n      height: height,\n      lineIndex: 0,\n    });\n  }\n\n  // when filtering the line we look at the pixel to the left\n  // the spec also says it is done on a byte level regardless of the number of pixels\n  // so if the depth is byte compatible (8 or 16) we subtract the bpp in order to compare back\n  // a pixel rather than just a different byte part. However if we are sub byte, we ignore.\n  if (depth === 8) {\n    this._xComparison = bpp;\n  } else if (depth === 16) {\n    this._xComparison = bpp * 2;\n  } else {\n    this._xComparison = 1;\n  }\n});\n\nFilter.prototype.start = function () {\n  this.read(\n    this._images[this._imageIndex].byteWidth + 1,\n    this._reverseFilterLine.bind(this)\n  );\n};\n\nFilter.prototype._unFilterType1 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f1Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    unfilteredLine[x] = rawByte + f1Left;\n  }\n};\n\nFilter.prototype._unFilterType2 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f2Up = lastLine ? lastLine[x] : 0;\n    unfilteredLine[x] = rawByte + f2Up;\n  }\n};\n\nFilter.prototype._unFilterType3 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f3Up = lastLine ? lastLine[x] : 0;\n    let f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f3Add = Math.floor((f3Left + f3Up) / 2);\n    unfilteredLine[x] = rawByte + f3Add;\n  }\n};\n\nFilter.prototype._unFilterType4 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f4Up = lastLine ? lastLine[x] : 0;\n    let f4Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f4UpLeft = x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0;\n    let f4Add = paethPredictor(f4Left, f4Up, f4UpLeft);\n    unfilteredLine[x] = rawByte + f4Add;\n  }\n};\n\nFilter.prototype._reverseFilterLine = function (rawData) {\n  let filter = rawData[0];\n  let unfilteredLine;\n  let currentImage = this._images[this._imageIndex];\n  let byteWidth = currentImage.byteWidth;\n\n  if (filter === 0) {\n    unfilteredLine = rawData.slice(1, byteWidth + 1);\n  } else {\n    unfilteredLine = Buffer.alloc(byteWidth);\n\n    switch (filter) {\n      case 1:\n        this._unFilterType1(rawData, unfilteredLine, byteWidth);\n        break;\n      case 2:\n        this._unFilterType2(rawData, unfilteredLine, byteWidth);\n        break;\n      case 3:\n        this._unFilterType3(rawData, unfilteredLine, byteWidth);\n        break;\n      case 4:\n        this._unFilterType4(rawData, unfilteredLine, byteWidth);\n        break;\n      default:\n        throw new Error(\"Unrecognised filter type - \" + filter);\n    }\n  }\n\n  this.write(unfilteredLine);\n\n  currentImage.lineIndex++;\n  if (currentImage.lineIndex >= currentImage.height) {\n    this._lastLine = null;\n    this._imageIndex++;\n    currentImage = this._images[this._imageIndex];\n  } else {\n    this._lastLine = unfilteredLine;\n  }\n\n  if (currentImage) {\n    // read, using the byte width that may be from the new current image\n    this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));\n  } else {\n    this._lastLine = null;\n    this.complete();\n  }\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet ChunkStream = require(\"./chunkstream\");\nlet Filter = require(\"./filter-parse\");\n\nlet FilterAsync = (module.exports = function (bitmapInfo) {\n  ChunkStream.call(this);\n\n  let buffers = [];\n  let that = this;\n  this._filter = new Filter(bitmapInfo, {\n    read: this.read.bind(this),\n    write: function (buffer) {\n      buffers.push(buffer);\n    },\n    complete: function () {\n      that.emit(\"complete\", Buffer.concat(buffers));\n    },\n  });\n\n  this._filter.start();\n});\nutil.inherits(FilterAsync, ChunkStream);\n", "\"use strict\";\n\nmodule.exports = {\n  PNG_SIGNATURE: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],\n\n  TYPE_IHDR: 0x49484452,\n  TYPE_IEND: 0x49454e44,\n  TYPE_IDAT: 0x49444154,\n  TYPE_PLTE: 0x504c5445,\n  TYPE_tRNS: 0x74524e53, // eslint-disable-line camelcase\n  TYPE_gAMA: 0x67414d41, // eslint-disable-line camelcase\n\n  // color-type bits\n  COLORTYPE_GRAYSCALE: 0,\n  COLORTYPE_PALETTE: 1,\n  COLORTYPE_COLOR: 2,\n  COLORTYPE_ALPHA: 4, // e.g. grayscale and alpha\n\n  // color-type combinations\n  COLORTYPE_PALETTE_COLOR: 3,\n  COLORTYPE_COLOR_ALPHA: 6,\n\n  COLORTYPE_TO_BPP_MAP: {\n    0: 1,\n    2: 3,\n    3: 1,\n    4: 2,\n    6: 4,\n  },\n\n  GAMMA_DIVISION: 100000,\n};\n", "\"use strict\";\n\nlet crcTable = [];\n\n(function () {\n  for (let i = 0; i < 256; i++) {\n    let currentCrc = i;\n    for (let j = 0; j < 8; j++) {\n      if (currentCrc & 1) {\n        currentCrc = 0xedb88320 ^ (currentCrc >>> 1);\n      } else {\n        currentCrc = currentCrc >>> 1;\n      }\n    }\n    crcTable[i] = currentCrc;\n  }\n})();\n\nlet CrcCalculator = (module.exports = function () {\n  this._crc = -1;\n});\n\nCrcCalculator.prototype.write = function (data) {\n  for (let i = 0; i < data.length; i++) {\n    this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);\n  }\n  return true;\n};\n\nCrcCalculator.prototype.crc32 = function () {\n  return this._crc ^ -1;\n};\n\nCrcCalculator.crc32 = function (buf) {\n  let crc = -1;\n  for (let i = 0; i < buf.length; i++) {\n    crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);\n  }\n  return crc ^ -1;\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcCalculator = require(\"./crc\");\n\nlet Parser = (module.exports = function (options, dependencies) {\n  this._options = options;\n  options.checkCRC = options.checkCRC !== false;\n\n  this._hasIHDR = false;\n  this._hasIEND = false;\n  this._emittedHeadersFinished = false;\n\n  // input flags/metadata\n  this._palette = [];\n  this._colorType = 0;\n\n  this._chunks = {};\n  this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);\n  this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);\n  this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);\n  this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);\n  this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);\n  this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);\n\n  this.read = dependencies.read;\n  this.error = dependencies.error;\n  this.metadata = dependencies.metadata;\n  this.gamma = dependencies.gamma;\n  this.transColor = dependencies.transColor;\n  this.palette = dependencies.palette;\n  this.parsed = dependencies.parsed;\n  this.inflateData = dependencies.inflateData;\n  this.finished = dependencies.finished;\n  this.simpleTransparency = dependencies.simpleTransparency;\n  this.headersFinished = dependencies.headersFinished || function () {};\n});\n\nParser.prototype.start = function () {\n  this.read(constants.PNG_SIGNATURE.length, this._parseSignature.bind(this));\n};\n\nParser.prototype._parseSignature = function (data) {\n  let signature = constants.PNG_SIGNATURE;\n\n  for (let i = 0; i < signature.length; i++) {\n    if (data[i] !== signature[i]) {\n      this.error(new Error(\"Invalid file signature\"));\n      return;\n    }\n  }\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._parseChunkBegin = function (data) {\n  // chunk content length\n  let length = data.readUInt32BE(0);\n\n  // chunk type\n  let type = data.readUInt32BE(4);\n  let name = \"\";\n  for (let i = 4; i < 8; i++) {\n    name += String.fromCharCode(data[i]);\n  }\n\n  //console.log('chunk ', name, length);\n\n  // chunk flags\n  let ancillary = Boolean(data[4] & 0x20); // or critical\n  //    priv = Boolean(data[5] & 0x20), // or public\n  //    safeToCopy = Boolean(data[7] & 0x20); // or unsafe\n\n  if (!this._hasIHDR && type !== constants.TYPE_IHDR) {\n    this.error(new Error(\"Expected IHDR on beggining\"));\n    return;\n  }\n\n  this._crc = new CrcCalculator();\n  this._crc.write(Buffer.from(name));\n\n  if (this._chunks[type]) {\n    return this._chunks[type](length);\n  }\n\n  if (!ancillary) {\n    this.error(new Error(\"Unsupported critical chunk type \" + name));\n    return;\n  }\n\n  this.read(length + 4, this._skipChunk.bind(this));\n};\n\nParser.prototype._skipChunk = function (/*data*/) {\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._handleChunkEnd = function () {\n  this.read(4, this._parseChunkEnd.bind(this));\n};\n\nParser.prototype._parseChunkEnd = function (data) {\n  let fileCrc = data.readInt32BE(0);\n  let calcCrc = this._crc.crc32();\n\n  // check CRC\n  if (this._options.checkCRC && calcCrc !== fileCrc) {\n    this.error(new Error(\"Crc error - \" + fileCrc + \" - \" + calcCrc));\n    return;\n  }\n\n  if (!this._hasIEND) {\n    this.read(8, this._parseChunkBegin.bind(this));\n  }\n};\n\nParser.prototype._handleIHDR = function (length) {\n  this.read(length, this._parseIHDR.bind(this));\n};\nParser.prototype._parseIHDR = function (data) {\n  this._crc.write(data);\n\n  let width = data.readUInt32BE(0);\n  let height = data.readUInt32BE(4);\n  let depth = data[8];\n  let colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha\n  let compr = data[10];\n  let filter = data[11];\n  let interlace = data[12];\n\n  // console.log('    width', width, 'height', height,\n  //     'depth', depth, 'colorType', colorType,\n  //     'compr', compr, 'filter', filter, 'interlace', interlace\n  // );\n\n  if (\n    depth !== 8 &&\n    depth !== 4 &&\n    depth !== 2 &&\n    depth !== 1 &&\n    depth !== 16\n  ) {\n    this.error(new Error(\"Unsupported bit depth \" + depth));\n    return;\n  }\n  if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {\n    this.error(new Error(\"Unsupported color type\"));\n    return;\n  }\n  if (compr !== 0) {\n    this.error(new Error(\"Unsupported compression method\"));\n    return;\n  }\n  if (filter !== 0) {\n    this.error(new Error(\"Unsupported filter method\"));\n    return;\n  }\n  if (interlace !== 0 && interlace !== 1) {\n    this.error(new Error(\"Unsupported interlace method\"));\n    return;\n  }\n\n  this._colorType = colorType;\n\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];\n\n  this._hasIHDR = true;\n\n  this.metadata({\n    width: width,\n    height: height,\n    depth: depth,\n    interlace: Boolean(interlace),\n    palette: Boolean(colorType & constants.COLORTYPE_PALETTE),\n    color: Boolean(colorType & constants.COLORTYPE_COLOR),\n    alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),\n    bpp: bpp,\n    colorType: colorType,\n  });\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handlePLTE = function (length) {\n  this.read(length, this._parsePLTE.bind(this));\n};\nParser.prototype._parsePLTE = function (data) {\n  this._crc.write(data);\n\n  let entries = Math.floor(data.length / 3);\n  // console.log('Palette:', entries);\n\n  for (let i = 0; i < entries; i++) {\n    this._palette.push([data[i * 3], data[i * 3 + 1], data[i * 3 + 2], 0xff]);\n  }\n\n  this.palette(this._palette);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleTRNS = function (length) {\n  this.simpleTransparency();\n  this.read(length, this._parseTRNS.bind(this));\n};\nParser.prototype._parseTRNS = function (data) {\n  this._crc.write(data);\n\n  // palette\n  if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {\n    if (this._palette.length === 0) {\n      this.error(new Error(\"Transparency chunk must be after palette\"));\n      return;\n    }\n    if (data.length > this._palette.length) {\n      this.error(new Error(\"More transparent colors than palette size\"));\n      return;\n    }\n    for (let i = 0; i < data.length; i++) {\n      this._palette[i][3] = data[i];\n    }\n    this.palette(this._palette);\n  }\n\n  // for colorType 0 (grayscale) and 2 (rgb)\n  // there might be one gray/color defined as transparent\n  if (this._colorType === constants.COLORTYPE_GRAYSCALE) {\n    // grey, 2 bytes\n    this.transColor([data.readUInt16BE(0)]);\n  }\n  if (this._colorType === constants.COLORTYPE_COLOR) {\n    this.transColor([\n      data.readUInt16BE(0),\n      data.readUInt16BE(2),\n      data.readUInt16BE(4),\n    ]);\n  }\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleGAMA = function (length) {\n  this.read(length, this._parseGAMA.bind(this));\n};\nParser.prototype._parseGAMA = function (data) {\n  this._crc.write(data);\n  this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleIDAT = function (length) {\n  if (!this._emittedHeadersFinished) {\n    this._emittedHeadersFinished = true;\n    this.headersFinished();\n  }\n  this.read(-length, this._parseIDAT.bind(this, length));\n};\nParser.prototype._parseIDAT = function (length, data) {\n  this._crc.write(data);\n\n  if (\n    this._colorType === constants.COLORTYPE_PALETTE_COLOR &&\n    this._palette.length === 0\n  ) {\n    throw new Error(\"Expected palette not found\");\n  }\n\n  this.inflateData(data);\n  let leftOverLength = length - data.length;\n\n  if (leftOverLength > 0) {\n    this._handleIDAT(leftOverLength);\n  } else {\n    this._handleChunkEnd();\n  }\n};\n\nParser.prototype._handleIEND = function (length) {\n  this.read(length, this._parseIEND.bind(this));\n};\nParser.prototype._parseIEND = function (data) {\n  this._crc.write(data);\n\n  this._hasIEND = true;\n  this._handleChunkEnd();\n\n  if (this.finished) {\n    this.finished();\n  }\n};\n", "\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\n\nlet pixelBppMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 1 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = data[rawPos + 1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 2 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 3 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = data[rawPos + 3];\n  },\n];\n\nlet pixelBppCustomMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, pixelData, pxPos) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = pixelData[1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, pixelData, pxPos) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = pixelData[3];\n  },\n];\n\nfunction bitRetriever(data, depth) {\n  let leftOver = [];\n  let i = 0;\n\n  function split() {\n    if (i === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n    let byte = data[i];\n    i++;\n    let byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;\n    switch (depth) {\n      default:\n        throw new Error(\"unrecognised depth\");\n      case 16:\n        byte2 = data[i];\n        i++;\n        leftOver.push((byte << 8) + byte2);\n        break;\n      case 4:\n        byte2 = byte & 0x0f;\n        byte1 = byte >> 4;\n        leftOver.push(byte1, byte2);\n        break;\n      case 2:\n        byte4 = byte & 3;\n        byte3 = (byte >> 2) & 3;\n        byte2 = (byte >> 4) & 3;\n        byte1 = (byte >> 6) & 3;\n        leftOver.push(byte1, byte2, byte3, byte4);\n        break;\n      case 1:\n        byte8 = byte & 1;\n        byte7 = (byte >> 1) & 1;\n        byte6 = (byte >> 2) & 1;\n        byte5 = (byte >> 3) & 1;\n        byte4 = (byte >> 4) & 1;\n        byte3 = (byte >> 5) & 1;\n        byte2 = (byte >> 6) & 1;\n        byte1 = (byte >> 7) & 1;\n        leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);\n        break;\n    }\n  }\n\n  return {\n    get: function (count) {\n      while (leftOver.length < count) {\n        split();\n      }\n      let returner = leftOver.slice(0, count);\n      leftOver = leftOver.slice(count);\n      return returner;\n    },\n    resetAfterLine: function () {\n      leftOver.length = 0;\n    },\n    end: function () {\n      if (i !== data.length) {\n        throw new Error(\"extra data found\");\n      }\n    },\n  };\n}\n\nfunction mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppMapper[bpp](pxData, data, pxPos, rawPos);\n      rawPos += bpp; //eslint-disable-line no-param-reassign\n    }\n  }\n  return rawPos;\n}\n\nfunction mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pixelData = bits.get(bpp);\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);\n    }\n    bits.resetAfterLine();\n  }\n}\n\nexports.dataToBitMap = function (data, bitmapInfo) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let depth = bitmapInfo.depth;\n  let bpp = bitmapInfo.bpp;\n  let interlace = bitmapInfo.interlace;\n  let bits;\n\n  if (depth !== 8) {\n    bits = bitRetriever(data, depth);\n  }\n  let pxData;\n  if (depth <= 8) {\n    pxData = Buffer.alloc(width * height * 4);\n  } else {\n    pxData = new Uint16Array(width * height * 4);\n  }\n  let maxBit = Math.pow(2, depth) - 1;\n  let rawPos = 0;\n  let images;\n  let getPxPos;\n\n  if (interlace) {\n    images = interlaceUtils.getImagePasses(width, height);\n    getPxPos = interlaceUtils.getInterlaceIterator(width, height);\n  } else {\n    let nonInterlacedPxPos = 0;\n    getPxPos = function () {\n      let returner = nonInterlacedPxPos;\n      nonInterlacedPxPos += 4;\n      return returner;\n    };\n    images = [{ width: width, height: height }];\n  }\n\n  for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {\n    if (depth === 8) {\n      rawPos = mapImage8Bit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        data,\n        rawPos\n      );\n    } else {\n      mapImageCustomBit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        bits,\n        maxBit\n      );\n    }\n  }\n  if (depth === 8) {\n    if (rawPos !== data.length) {\n      throw new Error(\"extra data found\");\n    }\n  } else {\n    bits.end();\n  }\n\n  return pxData;\n};\n", "\"use strict\";\n\nfunction dePalette(indata, outdata, width, height, palette) {\n  let pxPos = 0;\n  // use values from palette\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let color = palette[indata[pxPos]];\n\n      if (!color) {\n        throw new Error(\"index \" + indata[pxPos] + \" not in palette\");\n      }\n\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = color[i];\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction replaceTransparentColor(indata, outdata, width, height, transColor) {\n  let pxPos = 0;\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let makeTrans = false;\n\n      if (transColor.length === 1) {\n        if (transColor[0] === indata[pxPos]) {\n          makeTrans = true;\n        }\n      } else if (\n        transColor[0] === indata[pxPos] &&\n        transColor[1] === indata[pxPos + 1] &&\n        transColor[2] === indata[pxPos + 2]\n      ) {\n        makeTrans = true;\n      }\n      if (makeTrans) {\n        for (let i = 0; i < 4; i++) {\n          outdata[pxPos + i] = 0;\n        }\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction scaleDepth(indata, outdata, width, height, depth) {\n  let maxOutSample = 255;\n  let maxInSample = Math.pow(2, depth) - 1;\n  let pxPos = 0;\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = Math.floor(\n          (indata[pxPos + i] * maxOutSample) / maxInSample + 0.5\n        );\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nmodule.exports = function (indata, imageData, skipRescale = false) {\n  let depth = imageData.depth;\n  let width = imageData.width;\n  let height = imageData.height;\n  let colorType = imageData.colorType;\n  let transColor = imageData.transColor;\n  let palette = imageData.palette;\n\n  let outdata = indata; // only different for 16 bits\n\n  if (colorType === 3) {\n    // paletted\n    dePalette(indata, outdata, width, height, palette);\n  } else {\n    if (transColor) {\n      replaceTransparentColor(indata, outdata, width, height, transColor);\n    }\n    // if it needs scaling\n    if (depth !== 8 && !skipRescale) {\n      // if we need to change the buffer size\n      if (depth === 16) {\n        outdata = Buffer.alloc(width * height * 4);\n      }\n      scaleDepth(indata, outdata, width, height, depth);\n    }\n  }\n  return outdata;\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet zlib = require(\"zlib\");\nlet ChunkStream = require(\"./chunkstream\");\nlet FilterAsync = require(\"./filter-parse-async\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nlet ParserAsync = (module.exports = function (options) {\n  ChunkStream.call(this);\n\n  this._parser = new Parser(options, {\n    read: this.read.bind(this),\n    error: this._handleError.bind(this),\n    metadata: this._handleMetaData.bind(this),\n    gamma: this.emit.bind(this, \"gamma\"),\n    palette: this._handlePalette.bind(this),\n    transColor: this._handleTransColor.bind(this),\n    finished: this._finished.bind(this),\n    inflateData: this._inflateData.bind(this),\n    simpleTransparency: this._simpleTransparency.bind(this),\n    headersFinished: this._headersFinished.bind(this),\n  });\n  this._options = options;\n  this.writable = true;\n\n  this._parser.start();\n});\nutil.inherits(ParserAsync, ChunkStream);\n\nParserAsync.prototype._handleError = function (err) {\n  this.emit(\"error\", err);\n\n  this.writable = false;\n\n  this.destroy();\n\n  if (this._inflate && this._inflate.destroy) {\n    this._inflate.destroy();\n  }\n\n  if (this._filter) {\n    this._filter.destroy();\n    // For backward compatibility with Node 7 and below.\n    // Suppress errors due to _inflate calling write() even after\n    // it's destroy()'ed.\n    this._filter.on(\"error\", function () {});\n  }\n\n  this.errord = true;\n};\n\nParserAsync.prototype._inflateData = function (data) {\n  if (!this._inflate) {\n    if (this._bitmapInfo.interlace) {\n      this._inflate = zlib.createInflate();\n\n      this._inflate.on(\"error\", this.emit.bind(this, \"error\"));\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      this._inflate.pipe(this._filter);\n    } else {\n      let rowSize =\n        ((this._bitmapInfo.width *\n          this._bitmapInfo.bpp *\n          this._bitmapInfo.depth +\n          7) >>\n          3) +\n        1;\n      let imageSize = rowSize * this._bitmapInfo.height;\n      let chunkSize = Math.max(imageSize, zlib.Z_MIN_CHUNK);\n\n      this._inflate = zlib.createInflate({ chunkSize: chunkSize });\n      let leftToInflate = imageSize;\n\n      let emitError = this.emit.bind(this, \"error\");\n      this._inflate.on(\"error\", function (err) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        emitError(err);\n      });\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      let filterWrite = this._filter.write.bind(this._filter);\n      this._inflate.on(\"data\", function (chunk) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        if (chunk.length > leftToInflate) {\n          chunk = chunk.slice(0, leftToInflate);\n        }\n\n        leftToInflate -= chunk.length;\n\n        filterWrite(chunk);\n      });\n\n      this._inflate.on(\"end\", this._filter.end.bind(this._filter));\n    }\n  }\n  this._inflate.write(data);\n};\n\nParserAsync.prototype._handleMetaData = function (metaData) {\n  this._metaData = metaData;\n  this._bitmapInfo = Object.create(metaData);\n\n  this._filter = new FilterAsync(this._bitmapInfo);\n};\n\nParserAsync.prototype._handleTransColor = function (transColor) {\n  this._bitmapInfo.transColor = transColor;\n};\n\nParserAsync.prototype._handlePalette = function (palette) {\n  this._bitmapInfo.palette = palette;\n};\n\nParserAsync.prototype._simpleTransparency = function () {\n  this._metaData.alpha = true;\n};\n\nParserAsync.prototype._headersFinished = function () {\n  // Up until this point, we don't know if we have a tRNS chunk (alpha)\n  // so we can't emit metadata any earlier\n  this.emit(\"metadata\", this._metaData);\n};\n\nParserAsync.prototype._finished = function () {\n  if (this.errord) {\n    return;\n  }\n\n  if (!this._inflate) {\n    this.emit(\"error\", \"No Inflate block\");\n  } else {\n    // no more data to inflate\n    this._inflate.end();\n  }\n};\n\nParserAsync.prototype._complete = function (filteredData) {\n  if (this.errord) {\n    return;\n  }\n\n  let normalisedBitmapData;\n\n  try {\n    let bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);\n\n    normalisedBitmapData = formatNormaliser(\n      bitmapData,\n      this._bitmapInfo,\n      this._options.skipRescale\n    );\n    bitmapData = null;\n  } catch (ex) {\n    this._handleError(ex);\n    return;\n  }\n\n  this.emit(\"parsed\", normalisedBitmapData);\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\n\nmodule.exports = function (dataIn, width, height, options) {\n  let outHasAlpha =\n    [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(\n      options.colorType\n    ) !== -1;\n  if (options.colorType === options.inputColorType) {\n    let bigEndian = (function () {\n      let buffer = new ArrayBuffer(2);\n      new DataView(buffer).setInt16(0, 256, true /* littleEndian */);\n      // Int16Array uses the platform's endianness.\n      return new Int16Array(buffer)[0] !== 256;\n    })();\n    // If no need to convert to grayscale and alpha is present/absent in both, take a fast route\n    if (options.bitDepth === 8 || (options.bitDepth === 16 && bigEndian)) {\n      return dataIn;\n    }\n  }\n\n  // map to a UInt16 array if data is 16bit, fix endianness below\n  let data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);\n\n  let maxValue = 255;\n  let inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];\n  if (inBpp === 4 && !options.inputHasAlpha) {\n    inBpp = 3;\n  }\n  let outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];\n  if (options.bitDepth === 16) {\n    maxValue = 65535;\n    outBpp *= 2;\n  }\n  let outData = Buffer.alloc(width * height * outBpp);\n\n  let inIndex = 0;\n  let outIndex = 0;\n\n  let bgColor = options.bgColor || {};\n  if (bgColor.red === undefined) {\n    bgColor.red = maxValue;\n  }\n  if (bgColor.green === undefined) {\n    bgColor.green = maxValue;\n  }\n  if (bgColor.blue === undefined) {\n    bgColor.blue = maxValue;\n  }\n\n  function getRGBA() {\n    let red;\n    let green;\n    let blue;\n    let alpha = maxValue;\n    switch (options.inputColorType) {\n      case constants.COLORTYPE_COLOR_ALPHA:\n        alpha = data[inIndex + 3];\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_COLOR:\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_ALPHA:\n        alpha = data[inIndex + 1];\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      case constants.COLORTYPE_GRAYSCALE:\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      default:\n        throw new Error(\n          \"input color type:\" +\n            options.inputColorType +\n            \" is not supported at present\"\n        );\n    }\n\n    if (options.inputHasAlpha) {\n      if (!outHasAlpha) {\n        alpha /= maxValue;\n        red = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0),\n          maxValue\n        );\n        green = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0),\n          maxValue\n        );\n        blue = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0),\n          maxValue\n        );\n      }\n    }\n    return { red: red, green: green, blue: blue, alpha: alpha };\n  }\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let rgba = getRGBA(data, inIndex);\n\n      switch (options.colorType) {\n        case constants.COLORTYPE_COLOR_ALPHA:\n        case constants.COLORTYPE_COLOR:\n          if (options.bitDepth === 8) {\n            outData[outIndex] = rgba.red;\n            outData[outIndex + 1] = rgba.green;\n            outData[outIndex + 2] = rgba.blue;\n            if (outHasAlpha) {\n              outData[outIndex + 3] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(rgba.red, outIndex);\n            outData.writeUInt16BE(rgba.green, outIndex + 2);\n            outData.writeUInt16BE(rgba.blue, outIndex + 4);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 6);\n            }\n          }\n          break;\n        case constants.COLORTYPE_ALPHA:\n        case constants.COLORTYPE_GRAYSCALE: {\n          // Convert to grayscale and alpha\n          let grayscale = (rgba.red + rgba.green + rgba.blue) / 3;\n          if (options.bitDepth === 8) {\n            outData[outIndex] = grayscale;\n            if (outHasAlpha) {\n              outData[outIndex + 1] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(grayscale, outIndex);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 2);\n            }\n          }\n          break;\n        }\n        default:\n          throw new Error(\"unrecognised color Type \" + options.colorType);\n      }\n\n      inIndex += inBpp;\n      outIndex += outBpp;\n    }\n  }\n\n  return outData;\n};\n", "\"use strict\";\n\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    rawData[rawPos + x] = pxData[pxPos + x];\n  }\n}\n\nfunction filterSumNone(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n\n  for (let i = pxPos; i < length; i++) {\n    sum += Math.abs(pxData[i]);\n  }\n  return sum;\n}\n\nfunction filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumSub(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - up;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumUp(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n  for (let x = pxPos; x < length; x++) {\n    let up = pxPos > 0 ? pxData[x - byteWidth] : 0;\n    let val = pxData[x] - up;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumAvg(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumPaeth(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nlet filters = {\n  0: filterNone,\n  1: filterSub,\n  2: filterUp,\n  3: filterAvg,\n  4: filterPaeth,\n};\n\nlet filterSums = {\n  0: filterSumNone,\n  1: filterSumSub,\n  2: filterSumUp,\n  3: filterSumAvg,\n  4: filterSumPaeth,\n};\n\nmodule.exports = function (pxData, width, height, options, bpp) {\n  let filterTypes;\n  if (!(\"filterType\" in options) || options.filterType === -1) {\n    filterTypes = [0, 1, 2, 3, 4];\n  } else if (typeof options.filterType === \"number\") {\n    filterTypes = [options.filterType];\n  } else {\n    throw new Error(\"unrecognised filter types\");\n  }\n\n  if (options.bitDepth === 16) {\n    bpp *= 2;\n  }\n  let byteWidth = width * bpp;\n  let rawPos = 0;\n  let pxPos = 0;\n  let rawData = Buffer.alloc((byteWidth + 1) * height);\n\n  let sel = filterTypes[0];\n\n  for (let y = 0; y < height; y++) {\n    if (filterTypes.length > 1) {\n      // find best filter for this line (with lowest sum of values)\n      let min = Infinity;\n\n      for (let i = 0; i < filterTypes.length; i++) {\n        let sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);\n        if (sum < min) {\n          sel = filterTypes[i];\n          min = sum;\n        }\n      }\n    }\n\n    rawData[rawPos] = sel;\n    rawPos++;\n    filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);\n    rawPos += byteWidth;\n    pxPos += byteWidth;\n  }\n  return rawData;\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcStream = require(\"./crc\");\nlet bitPacker = require(\"./bitpacker\");\nlet filter = require(\"./filter-pack\");\nlet zlib = require(\"zlib\");\n\nlet Packer = (module.exports = function (options) {\n  this._options = options;\n\n  options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;\n  options.deflateLevel =\n    options.deflateLevel != null ? options.deflateLevel : 9;\n  options.deflateStrategy =\n    options.deflateStrategy != null ? options.deflateStrategy : 3;\n  options.inputHasAlpha =\n    options.inputHasAlpha != null ? options.inputHasAlpha : true;\n  options.deflateFactory = options.deflateFactory || zlib.createDeflate;\n  options.bitDepth = options.bitDepth || 8;\n  // This is outputColorType\n  options.colorType =\n    typeof options.colorType === \"number\"\n      ? options.colorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n  options.inputColorType =\n    typeof options.inputColorType === \"number\"\n      ? options.inputColorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.colorType) === -1\n  ) {\n    throw new Error(\n      \"option color type:\" + options.colorType + \" is not supported at present\"\n    );\n  }\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.inputColorType) === -1\n  ) {\n    throw new Error(\n      \"option input color type:\" +\n        options.inputColorType +\n        \" is not supported at present\"\n    );\n  }\n  if (options.bitDepth !== 8 && options.bitDepth !== 16) {\n    throw new Error(\n      \"option bit depth:\" + options.bitDepth + \" is not supported at present\"\n    );\n  }\n});\n\nPacker.prototype.getDeflateOptions = function () {\n  return {\n    chunkSize: this._options.deflateChunkSize,\n    level: this._options.deflateLevel,\n    strategy: this._options.deflateStrategy,\n  };\n};\n\nPacker.prototype.createDeflate = function () {\n  return this._options.deflateFactory(this.getDeflateOptions());\n};\n\nPacker.prototype.filterData = function (data, width, height) {\n  // convert to correct format for filtering (e.g. right bpp and bit depth)\n  let packedData = bitPacker(data, width, height, this._options);\n\n  // filter pixel data\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];\n  let filteredData = filter(packedData, width, height, this._options, bpp);\n  return filteredData;\n};\n\nPacker.prototype._packChunk = function (type, data) {\n  let len = data ? data.length : 0;\n  let buf = Buffer.alloc(len + 12);\n\n  buf.writeUInt32BE(len, 0);\n  buf.writeUInt32BE(type, 4);\n\n  if (data) {\n    data.copy(buf, 8);\n  }\n\n  buf.writeInt32BE(\n    CrcStream.crc32(buf.slice(4, buf.length - 4)),\n    buf.length - 4\n  );\n  return buf;\n};\n\nPacker.prototype.packGAMA = function (gamma) {\n  let buf = Buffer.alloc(4);\n  buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);\n  return this._packChunk(constants.TYPE_gAMA, buf);\n};\n\nPacker.prototype.packIHDR = function (width, height) {\n  let buf = Buffer.alloc(13);\n  buf.writeUInt32BE(width, 0);\n  buf.writeUInt32BE(height, 4);\n  buf[8] = this._options.bitDepth; // Bit depth\n  buf[9] = this._options.colorType; // colorType\n  buf[10] = 0; // compression\n  buf[11] = 0; // filter\n  buf[12] = 0; // interlace\n\n  return this._packChunk(constants.TYPE_IHDR, buf);\n};\n\nPacker.prototype.packIDAT = function (data) {\n  return this._packChunk(constants.TYPE_IDAT, data);\n};\n\nPacker.prototype.packIEND = function () {\n  return this._packChunk(constants.TYPE_IEND, null);\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nlet PackerAsync = (module.exports = function (opt) {\n  Stream.call(this);\n\n  let options = opt || {};\n\n  this._packer = new Packer(options);\n  this._deflate = this._packer.createDeflate();\n\n  this.readable = true;\n});\nutil.inherits(PackerAsync, Stream);\n\nPackerAsync.prototype.pack = function (data, width, height, gamma) {\n  // Signature\n  this.emit(\"data\", Buffer.from(constants.PNG_SIGNATURE));\n  this.emit(\"data\", this._packer.packIHDR(width, height));\n\n  if (gamma) {\n    this.emit(\"data\", this._packer.packGAMA(gamma));\n  }\n\n  let filteredData = this._packer.filterData(data, width, height);\n\n  // compress it\n  this._deflate.on(\"error\", this.emit.bind(this, \"error\"));\n\n  this._deflate.on(\n    \"data\",\n    function (compressedData) {\n      this.emit(\"data\", this._packer.packIDAT(compressedData));\n    }.bind(this)\n  );\n\n  this._deflate.on(\n    \"end\",\n    function () {\n      this.emit(\"data\", this._packer.packIEND());\n      this.emit(\"end\");\n    }.bind(this)\n  );\n\n  this._deflate.end(filteredData);\n};\n", "\"use strict\";\n\nlet assert = require(\"assert\").ok;\nlet zlib = require(\"zlib\");\nlet util = require(\"util\");\n\nlet kMaxLength = require(\"buffer\").kMaxLength;\n\nfunction Inflate(opts) {\n  if (!(this instanceof Inflate)) {\n    return new Inflate(opts);\n  }\n\n  if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {\n    opts.chunkSize = zlib.Z_MIN_CHUNK;\n  }\n\n  zlib.Inflate.call(this, opts);\n\n  // Node 8 --> 9 compatibility check\n  this._offset = this._offset === undefined ? this._outOffset : this._offset;\n  this._buffer = this._buffer || this._outBuffer;\n\n  if (opts && opts.maxLength != null) {\n    this._maxLength = opts.maxLength;\n  }\n}\n\nfunction createInflate(opts) {\n  return new Inflate(opts);\n}\n\nfunction _close(engine, callback) {\n  if (callback) {\n    process.nextTick(callback);\n  }\n\n  // Caller may invoke .close after a zlib error (which will null _handle).\n  if (!engine._handle) {\n    return;\n  }\n\n  engine._handle.close();\n  engine._handle = null;\n}\n\nInflate.prototype._processChunk = function (chunk, flushFlag, asyncCb) {\n  if (typeof asyncCb === \"function\") {\n    return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);\n  }\n\n  let self = this;\n\n  let availInBefore = chunk && chunk.length;\n  let availOutBefore = this._chunkSize - this._offset;\n  let leftToInflate = this._maxLength;\n  let inOff = 0;\n\n  let buffers = [];\n  let nread = 0;\n\n  let error;\n  this.on(\"error\", function (err) {\n    error = err;\n  });\n\n  function handleChunk(availInAfter, availOutAfter) {\n    if (self._hadError) {\n      return;\n    }\n\n    let have = availOutBefore - availOutAfter;\n    assert(have >= 0, \"have should not go down\");\n\n    if (have > 0) {\n      let out = self._buffer.slice(self._offset, self._offset + have);\n      self._offset += have;\n\n      if (out.length > leftToInflate) {\n        out = out.slice(0, leftToInflate);\n      }\n\n      buffers.push(out);\n      nread += out.length;\n      leftToInflate -= out.length;\n\n      if (leftToInflate === 0) {\n        return false;\n      }\n    }\n\n    if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n      availOutBefore = self._chunkSize;\n      self._offset = 0;\n      self._buffer = Buffer.allocUnsafe(self._chunkSize);\n    }\n\n    if (availOutAfter === 0) {\n      inOff += availInBefore - availInAfter;\n      availInBefore = availInAfter;\n\n      return true;\n    }\n\n    return false;\n  }\n\n  assert(this._handle, \"zlib binding closed\");\n  let res;\n  do {\n    res = this._handle.writeSync(\n      flushFlag,\n      chunk, // in\n      inOff, // in_off\n      availInBefore, // in_len\n      this._buffer, // out\n      this._offset, //out_off\n      availOutBefore\n    ); // out_len\n    // Node 8 --> 9 compatibility check\n    res = res || this._writeState;\n  } while (!this._hadError && handleChunk(res[0], res[1]));\n\n  if (this._hadError) {\n    throw error;\n  }\n\n  if (nread >= kMaxLength) {\n    _close(this);\n    throw new RangeError(\n      \"Cannot create final Buffer. It would be larger than 0x\" +\n        kMaxLength.toString(16) +\n        \" bytes\"\n    );\n  }\n\n  let buf = Buffer.concat(buffers, nread);\n  _close(this);\n\n  return buf;\n};\n\nutil.inherits(Inflate, zlib.Inflate);\n\nfunction zlibBufferSync(engine, buffer) {\n  if (typeof buffer === \"string\") {\n    buffer = Buffer.from(buffer);\n  }\n  if (!(buffer instanceof Buffer)) {\n    throw new TypeError(\"Not a string or buffer\");\n  }\n\n  let flushFlag = engine._finishFlushFlag;\n  if (flushFlag == null) {\n    flushFlag = zlib.Z_FINISH;\n  }\n\n  return engine._processChunk(buffer, flushFlag);\n}\n\nfunction inflateSync(buffer, opts) {\n  return zlibBufferSync(new Inflate(opts), buffer);\n}\n\nmodule.exports = exports = inflateSync;\nexports.Inflate = Inflate;\nexports.createInflate = createInflate;\nexports.inflateSync = inflateSync;\n", "\"use strict\";\n\nlet SyncReader = (module.exports = function (buffer) {\n  this._buffer = buffer;\n  this._reads = [];\n});\n\nSyncReader.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n};\n\nSyncReader.prototype.process = function () {\n  // as long as there is any data and read requests\n  while (this._reads.length > 0 && this._buffer.length) {\n    let read = this._reads[0];\n\n    if (\n      this._buffer.length &&\n      (this._buffer.length >= read.length || read.allowLess)\n    ) {\n      // ok there is any data so that we can satisfy this request\n      this._reads.shift(); // == read\n\n      let buf = this._buffer;\n\n      this._buffer = buf.slice(read.length);\n\n      read.func.call(this, buf.slice(0, read.length));\n    } else {\n      break;\n    }\n  }\n\n  if (this._reads.length > 0) {\n    throw new Error(\"There are some read requests waitng on finished stream\");\n  }\n\n  if (this._buffer.length > 0) {\n    throw new Error(\"unrecognised content at end of stream\");\n  }\n};\n", "\"use strict\";\n\nlet SyncReader = require(\"./sync-reader\");\nlet Filter = require(\"./filter-parse\");\n\nexports.process = function (inBuffer, bitmapInfo) {\n  let outBuffers = [];\n  let reader = new SyncReader(inBuffer);\n  let filter = new Filter(bitmapInfo, {\n    read: reader.read.bind(reader),\n    write: function (bufferPart) {\n      outBuffers.push(bufferPart);\n    },\n    complete: function () {},\n  });\n\n  filter.start();\n  reader.process();\n\n  return Buffer.concat(outBuffers);\n};\n", "\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nlet inflateSync = require(\"./sync-inflate\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet SyncReader = require(\"./sync-reader\");\nlet FilterSync = require(\"./filter-parse-sync\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nmodule.exports = function (buffer, options) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let err;\n  function handleError(_err_) {\n    err = _err_;\n  }\n\n  let metaData;\n  function handleMetaData(_metaData_) {\n    metaData = _metaData_;\n  }\n\n  function handleTransColor(transColor) {\n    metaData.transColor = transColor;\n  }\n\n  function handlePalette(palette) {\n    metaData.palette = palette;\n  }\n\n  function handleSimpleTransparency() {\n    metaData.alpha = true;\n  }\n\n  let gamma;\n  function handleGamma(_gamma_) {\n    gamma = _gamma_;\n  }\n\n  let inflateDataList = [];\n  function handleInflateData(inflatedData) {\n    inflateDataList.push(inflatedData);\n  }\n\n  let reader = new SyncReader(buffer);\n\n  let parser = new Parser(options, {\n    read: reader.read.bind(reader),\n    error: handleError,\n    metadata: handleMetaData,\n    gamma: handleGamma,\n    palette: handlePalette,\n    transColor: handleTransColor,\n    inflateData: handleInflateData,\n    simpleTransparency: handleSimpleTransparency,\n  });\n\n  parser.start();\n  reader.process();\n\n  if (err) {\n    throw err;\n  }\n\n  //join together the inflate datas\n  let inflateData = Buffer.concat(inflateDataList);\n  inflateDataList.length = 0;\n\n  let inflatedData;\n  if (metaData.interlace) {\n    inflatedData = zlib.inflateSync(inflateData);\n  } else {\n    let rowSize =\n      ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;\n    let imageSize = rowSize * metaData.height;\n    inflatedData = inflateSync(inflateData, {\n      chunkSize: imageSize,\n      maxLength: imageSize,\n    });\n  }\n  inflateData = null;\n\n  if (!inflatedData || !inflatedData.length) {\n    throw new Error(\"bad png - invalid inflate data response\");\n  }\n\n  let unfilteredData = FilterSync.process(inflatedData, metaData);\n  inflateData = null;\n\n  let bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);\n  unfilteredData = null;\n\n  let normalisedBitmapData = formatNormaliser(\n    bitmapData,\n    metaData,\n    options.skipRescale\n  );\n\n  metaData.data = normalisedBitmapData;\n  metaData.gamma = gamma || 0;\n\n  return metaData;\n};\n", "\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nmodule.exports = function (metaData, opt) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let options = opt || {};\n\n  let packer = new Packer(options);\n\n  let chunks = [];\n\n  // Signature\n  chunks.push(Buffer.from(constants.PNG_SIGNATURE));\n\n  // Header\n  chunks.push(packer.packIHDR(metaData.width, metaData.height));\n\n  if (metaData.gamma) {\n    chunks.push(packer.packGAMA(metaData.gamma));\n  }\n\n  let filteredData = packer.filterData(\n    metaData.data,\n    metaData.width,\n    metaData.height\n  );\n\n  // compress it\n  let compressedData = zlib.deflateSync(\n    filteredData,\n    packer.getDeflateOptions()\n  );\n  filteredData = null;\n\n  if (!compressedData || !compressedData.length) {\n    throw new Error(\"bad png - invalid compressed data response\");\n  }\n  chunks.push(packer.packIDAT(compressedData));\n\n  // End\n  chunks.push(packer.packIEND());\n\n  return Buffer.concat(chunks);\n};\n", "\"use strict\";\n\nlet parse = require(\"./parser-sync\");\nlet pack = require(\"./packer-sync\");\n\nexports.read = function (buffer, options) {\n  return parse(buffer, options || {});\n};\n\nexports.write = function (png, options) {\n  return pack(png, options);\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet Parser = require(\"./parser-async\");\nlet Packer = require(\"./packer-async\");\nlet PNGSync = require(\"./png-sync\");\n\nlet PNG = (exports.PNG = function (options) {\n  Stream.call(this);\n\n  options = options || {}; // eslint-disable-line no-param-reassign\n\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  this.width = options.width | 0;\n  this.height = options.height | 0;\n\n  this.data =\n    this.width > 0 && this.height > 0\n      ? Buffer.alloc(4 * this.width * this.height)\n      : null;\n\n  if (options.fill && this.data) {\n    this.data.fill(0);\n  }\n\n  this.gamma = 0;\n  this.readable = this.writable = true;\n\n  this._parser = new Parser(options);\n\n  this._parser.on(\"error\", this.emit.bind(this, \"error\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._parser.on(\"metadata\", this._metadata.bind(this));\n  this._parser.on(\"gamma\", this._gamma.bind(this));\n  this._parser.on(\n    \"parsed\",\n    function (data) {\n      this.data = data;\n      this.emit(\"parsed\", data);\n    }.bind(this)\n  );\n\n  this._packer = new Packer(options);\n  this._packer.on(\"data\", this.emit.bind(this, \"data\"));\n  this._packer.on(\"end\", this.emit.bind(this, \"end\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._packer.on(\"error\", this.emit.bind(this, \"error\"));\n});\nutil.inherits(PNG, Stream);\n\nPNG.sync = PNGSync;\n\nPNG.prototype.pack = function () {\n  if (!this.data || !this.data.length) {\n    this.emit(\"error\", \"No data provided\");\n    return this;\n  }\n\n  process.nextTick(\n    function () {\n      this._packer.pack(this.data, this.width, this.height, this.gamma);\n    }.bind(this)\n  );\n\n  return this;\n};\n\nPNG.prototype.parse = function (data, callback) {\n  if (callback) {\n    let onParsed, onError;\n\n    onParsed = function (parsedData) {\n      this.removeListener(\"error\", onError);\n\n      this.data = parsedData;\n      callback(null, this);\n    }.bind(this);\n\n    onError = function (err) {\n      this.removeListener(\"parsed\", onParsed);\n\n      callback(err, null);\n    }.bind(this);\n\n    this.once(\"parsed\", onParsed);\n    this.once(\"error\", onError);\n  }\n\n  this.end(data);\n  return this;\n};\n\nPNG.prototype.write = function (data) {\n  this._parser.write(data);\n  return true;\n};\n\nPNG.prototype.end = function (data) {\n  this._parser.end(data);\n};\n\nPNG.prototype._metadata = function (metadata) {\n  this.width = metadata.width;\n  this.height = metadata.height;\n\n  this.emit(\"metadata\", metadata);\n};\n\nPNG.prototype._gamma = function (gamma) {\n  this.gamma = gamma;\n};\n\nPNG.prototype._handleClose = function () {\n  if (!this._parser.writable && !this._packer.readable) {\n    this.emit(\"close\");\n  }\n};\n\nPNG.bitblt = function (src, dst, srcX, srcY, width, height, deltaX, deltaY) {\n  // eslint-disable-line max-params\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  /* eslint-disable no-param-reassign */\n  srcX |= 0;\n  srcY |= 0;\n  width |= 0;\n  height |= 0;\n  deltaX |= 0;\n  deltaY |= 0;\n  /* eslint-enable no-param-reassign */\n\n  if (\n    srcX > src.width ||\n    srcY > src.height ||\n    srcX + width > src.width ||\n    srcY + height > src.height\n  ) {\n    throw new Error(\"bitblt reading outside image\");\n  }\n\n  if (\n    deltaX > dst.width ||\n    deltaY > dst.height ||\n    deltaX + width > dst.width ||\n    deltaY + height > dst.height\n  ) {\n    throw new Error(\"bitblt writing outside image\");\n  }\n\n  for (let y = 0; y < height; y++) {\n    src.data.copy(\n      dst.data,\n      ((deltaY + y) * dst.width + deltaX) << 2,\n      ((srcY + y) * src.width + srcX) << 2,\n      ((srcY + y) * src.width + srcX + width) << 2\n    );\n  }\n};\n\nPNG.prototype.bitblt = function (\n  dst,\n  srcX,\n  srcY,\n  width,\n  height,\n  deltaX,\n  deltaY\n) {\n  // eslint-disable-line max-params\n\n  PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);\n  return this;\n};\n\nPNG.adjustGamma = function (src) {\n  if (src.gamma) {\n    for (let y = 0; y < src.height; y++) {\n      for (let x = 0; x < src.width; x++) {\n        let idx = (src.width * y + x) << 2;\n\n        for (let i = 0; i < 3; i++) {\n          let sample = src.data[idx + i] / 255;\n          sample = Math.pow(sample, 1 / 2.2 / src.gamma);\n          src.data[idx + i] = Math.round(sample * 255);\n        }\n      }\n    }\n    src.gamma = 0;\n  }\n};\n\nPNG.prototype.adjustGamma = function () {\n  PNG.adjustGamma(this);\n};\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ImageCodecNode - Node.js-specific image encoding/decoding utilities\r\n *\r\n * ARCHITECTURE NOTES:\r\n * ------------------\r\n * This module provides Node.js-specific image handling using:\r\n * - pngjs: Synchronous PNG encoding/decoding\r\n * - zlib: PNG compression\r\n * - Buffer: Binary data handling\r\n *\r\n * This is separated from ImageCodec.ts to:\r\n * 1. Allow webpack to tree-shake Node.js-only code from browser bundles\r\n * 2. Avoid problematic eval('require') patterns\r\n * 3. Provide a clean API for Node.js consumers\r\n *\r\n * USAGE:\r\n * ------\r\n * This module is imported by ImageCodec.ts when running in Node.js.\r\n * Direct usage is also possible in Node.js-only code:\r\n *\r\n * ```typescript\r\n * import ImageCodecNode from \"./ImageCodecNode\";\r\n * const png = ImageCodecNode.decodePng(data);\r\n * ```\r\n *\r\n * IMPORTANT:\r\n * ----------\r\n * This file should ONLY be imported in Node.js contexts. Importing it in\r\n * browser code will cause bundling errors. Use ImageCodec.ts which\r\n * handles environment detection automatically.\r\n */\r\n\r\nimport { PNG } from \"pngjs\";\r\nimport * as zlib from \"zlib\";\r\nimport Log from \"../core/Log\";\r\nimport { IDecodedImage } from \"../core/ImageCodec\";\r\n\r\n/**\r\n * Node.js-specific image codec implementation.\r\n * Uses native Node.js modules (pngjs, zlib) for optimal performance.\r\n */\r\nexport default class ImageCodecNode {\r\n  // Cached CRC32 table for PNG encoding\r\n  private static _crc32Table: Uint32Array | undefined;\r\n\r\n  // ============================================================================\r\n  // PNG DECODING (Node.js)\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode PNG image data to RGBA pixels using pngjs.\r\n   * This is synchronous and only works in Node.js.\r\n   *\r\n   * @param data Raw PNG file bytes\r\n   * @returns Decoded image, or undefined if decoding fails\r\n   */\r\n  static decodePng(data: Uint8Array): IDecodedImage | undefined {\r\n    try {\r\n      const png = PNG.sync.read(Buffer.from(data));\r\n      return {\r\n        width: png.width,\r\n        height: png.height,\r\n        pixels: new Uint8Array(png.data),\r\n      };\r\n    } catch (e) {\r\n      Log.debug(`PNG decode (Node) failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Decode PNG image data asynchronously.\r\n   * Wraps the synchronous decoder in a Promise for API consistency.\r\n   *\r\n   * @param data Raw PNG file bytes\r\n   * @returns Promise resolving to decoded image, or undefined if decoding fails\r\n   */\r\n  static async decodePngAsync(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    return this.decodePng(data);\r\n  }\r\n\r\n  // ============================================================================\r\n  // PNG ENCODING (Node.js)\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format using pngjs.\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width\r\n   * @param height Image height\r\n   * @returns PNG file bytes, or undefined if encoding fails\r\n   */\r\n  static encodeToPng(pixels: Uint8Array, width: number, height: number): Uint8Array | undefined {\r\n    try {\r\n      const png = new PNG({ width, height });\r\n      png.data = Buffer.from(pixels);\r\n      const buffer = PNG.sync.write(png);\r\n      return new Uint8Array(buffer);\r\n    } catch (e) {\r\n      Log.debug(`PNG encode (pngjs) failed: ${e}`);\r\n      // Fall back to manual encoding\r\n      return this.encodeToPngManual(pixels, width, height);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format using manual chunk creation.\r\n   * Used as fallback if pngjs encoding fails.\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width\r\n   * @param height Image height\r\n   * @returns PNG file bytes, or undefined if encoding fails\r\n   */\r\n  static encodeToPngManual(pixels: Uint8Array, width: number, height: number): Uint8Array | undefined {\r\n    try {\r\n      // PNG signature\r\n      const signature = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\r\n\r\n      // IHDR chunk\r\n      const ihdr = new Uint8Array(13);\r\n      const ihdrView = new DataView(ihdr.buffer);\r\n      ihdrView.setUint32(0, width, false);\r\n      ihdrView.setUint32(4, height, false);\r\n      ihdr[8] = 8; // bit depth\r\n      ihdr[9] = 6; // color type (RGBA)\r\n      ihdr[10] = 0; // compression\r\n      ihdr[11] = 0; // filter\r\n      ihdr[12] = 0; // interlace\r\n\r\n      const ihdrChunk = this.createPngChunk(\"IHDR\", ihdr);\r\n\r\n      // IDAT chunk - raw pixel data with filter bytes\r\n      const rawData = new Uint8Array(height * (1 + width * 4));\r\n      for (let y = 0; y < height; y++) {\r\n        rawData[y * (1 + width * 4)] = 0; // filter byte (none)\r\n        for (let x = 0; x < width; x++) {\r\n          const srcIdx = (y * width + x) * 4;\r\n          const dstIdx = y * (1 + width * 4) + 1 + x * 4;\r\n          rawData[dstIdx] = pixels[srcIdx]; // R\r\n          rawData[dstIdx + 1] = pixels[srcIdx + 1]; // G\r\n          rawData[dstIdx + 2] = pixels[srcIdx + 2]; // B\r\n          rawData[dstIdx + 3] = pixels[srcIdx + 3]; // A\r\n        }\r\n      }\r\n\r\n      const compressed = zlib.deflateSync(rawData, { level: 6 });\r\n      const idatChunk = this.createPngChunk(\"IDAT\", new Uint8Array(compressed));\r\n\r\n      // IEND chunk\r\n      const iendChunk = this.createPngChunk(\"IEND\", new Uint8Array(0));\r\n\r\n      // Combine all chunks\r\n      const totalLength = signature.length + ihdrChunk.length + idatChunk.length + iendChunk.length;\r\n      const png = new Uint8Array(totalLength);\r\n      let offset = 0;\r\n      png.set(signature, offset);\r\n      offset += signature.length;\r\n      png.set(ihdrChunk, offset);\r\n      offset += ihdrChunk.length;\r\n      png.set(idatChunk, offset);\r\n      offset += idatChunk.length;\r\n      png.set(iendChunk, offset);\r\n\r\n      return png;\r\n    } catch (e) {\r\n      Log.debug(`PNG manual encoding failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format asynchronously.\r\n   * Wraps the synchronous encoder in a Promise for API consistency.\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width\r\n   * @param height Image height\r\n   * @returns Promise resolving to PNG file bytes\r\n   */\r\n  static async encodeToPngAsync(pixels: Uint8Array, width: number, height: number): Promise<Uint8Array | undefined> {\r\n    return this.encodeToPng(pixels, width, height);\r\n  }\r\n\r\n  // ============================================================================\r\n  // PNG CHUNK UTILITIES\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Create a PNG chunk with type, data, and CRC.\r\n   */\r\n  private static createPngChunk(type: string, data: Uint8Array): Uint8Array {\r\n    const length = data.length;\r\n    const chunk = new Uint8Array(4 + 4 + length + 4);\r\n    const view = new DataView(chunk.buffer);\r\n\r\n    // Length\r\n    view.setUint32(0, length, false);\r\n\r\n    // Type\r\n    for (let i = 0; i < 4; i++) {\r\n      chunk[4 + i] = type.charCodeAt(i);\r\n    }\r\n\r\n    // Data\r\n    chunk.set(data, 8);\r\n\r\n    // CRC32 of type + data\r\n    const crc = this.crc32(chunk.subarray(4, 8 + length));\r\n    view.setUint32(8 + length, crc, false);\r\n\r\n    return chunk;\r\n  }\r\n\r\n  /**\r\n   * Calculate CRC32 checksum for PNG chunk validation.\r\n   */\r\n  private static crc32(data: Uint8Array): number {\r\n    let crc = 0xffffffff;\r\n    const table = this.getCrc32Table();\r\n\r\n    for (let i = 0; i < data.length; i++) {\r\n      crc = table[(crc ^ data[i]) & 0xff] ^ (crc >>> 8);\r\n    }\r\n\r\n    return (crc ^ 0xffffffff) >>> 0;\r\n  }\r\n\r\n  /**\r\n   * Get the CRC32 lookup table (lazy initialized).\r\n   */\r\n  private static getCrc32Table(): Uint32Array {\r\n    if (this._crc32Table) {\r\n      return this._crc32Table;\r\n    }\r\n\r\n    const table = new Uint32Array(256);\r\n    for (let i = 0; i < 256; i++) {\r\n      let c = i;\r\n      for (let j = 0; j < 8; j++) {\r\n        c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\r\n      }\r\n      table[i] = c;\r\n    }\r\n\r\n    this._crc32Table = table;\r\n    return table;\r\n  }\r\n\r\n  // ============================================================================\r\n  // DATA URL CONVERSION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Convert raw image bytes to a data URL using Node.js Buffer.\r\n   *\r\n   * @param data Image file bytes (PNG, JPEG, etc.)\r\n   * @param mimeType MIME type (e.g., \"image/png\")\r\n   * @returns Data URL string\r\n   */\r\n  static toDataUrl(data: Uint8Array, mimeType: string): string {\r\n    return `data:${mimeType};base64,${Buffer.from(data).toString(\"base64\")}`;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport * as os from \"os\";\r\nimport * as path from \"path\";\r\nimport * as crypto from \"crypto\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport IStorage from \"./../storage/IStorage\";\r\nimport ILocalUtilities, { Platform } from \"../core/ILocalUtilities\";\r\nimport Log from \"../core/Log\";\r\nimport IConversionSettings from \"../core/IConversionSettings\";\r\nimport ImageCodecNode from \"./ImageCodecNode\";\r\n\r\n/**\r\n * Ports that should never be used for MCTools HTTP servers.\r\n *\r\n * This list includes:\r\n * 1. Browser-blocked ports - Chrome/Firefox/Safari block these for security (ERR_UNSAFE_PORT)\r\n *    See: https://chromium.googlesource.com/chromium/src.git/+/refs/heads/main/net/base/port_util.cc\r\n *\r\n * 2. Security-sensitive service ports - commonly targeted for attacks or conflicts:\r\n *    - Database ports (Redis, etc.) - targeted for data theft\r\n *    - IRC ports - used by botnets and C&C servers\r\n *    - Other commonly exploited services\r\n */\r\nexport const UNSAFE_PORTS: ReadonlySet<number> = new Set([\r\n  // === Browser-blocked ports (Chrome/Firefox/Safari) ===\r\n  1, // tcpmux\r\n  7, // echo\r\n  9, // discard\r\n  11, // systat\r\n  13, // daytime\r\n  15, // netstat\r\n  17, // qotd\r\n  19, // chargen\r\n  20, // ftp data\r\n  21, // ftp access\r\n  22, // ssh\r\n  23, // telnet\r\n  25, // smtp\r\n  37, // time\r\n  42, // name\r\n  43, // nicname\r\n  53, // domain\r\n  69, // tftp\r\n  77, // priv-rjs\r\n  79, // finger\r\n  87, // ttylink\r\n  95, // supdup\r\n  101, // hostriame\r\n  102, // iso-tsap\r\n  103, // gppitnp\r\n  104, // acr-nema\r\n  109, // pop2\r\n  110, // pop3\r\n  111, // sunrpc\r\n  113, // auth\r\n  115, // sftp\r\n  117, // uucp-path\r\n  119, // nntp\r\n  123, // NTP\r\n  135, // loc-srv / epmap\r\n  137, // netbios\r\n  139, // netbios\r\n  143, // imap2\r\n  161, // snmp\r\n  179, // BGP\r\n  389, // ldap\r\n  427, // SLP (Also used by determine.exe)\r\n  465, // smtp+ssl\r\n  512, // print / exec\r\n  513, // login\r\n  514, // shell\r\n  515, // printer\r\n  526, // tempo\r\n  530, // courier\r\n  531, // chat\r\n  532, // netnews\r\n  540, // uucp\r\n  548, // AFP (Apple Filing Protocol)\r\n  554, // rtsp\r\n  556, // remotefs\r\n  563, // nntp+ssl\r\n  587, // smtp (submission)\r\n  601, // syslog-conn\r\n  636, // ldap+ssl\r\n  989, // ftps-data\r\n  990, // ftps\r\n  993, // ldap+ssl\r\n  995, // pop3+ssl\r\n  1719, // h323gatestat\r\n  1720, // h323hostcall\r\n  1723, // pptp\r\n  2049, // nfs\r\n  3659, // apple-sasl / PasswordServer\r\n  4045, // lockd\r\n  5060, // sip\r\n  5061, // sips\r\n  6000, // X11\r\n  6566, // sane-port\r\n  6665, // Alternate IRC (browser-blocked + botnet target)\r\n  6666, // Alternate IRC (browser-blocked + botnet target)\r\n  6667, // Standard IRC (browser-blocked + botnet target)\r\n  6668, // Alternate IRC (browser-blocked + botnet target)\r\n  6669, // Alternate IRC (browser-blocked + botnet target)\r\n  6697, // IRC + TLS (browser-blocked + botnet target)\r\n  10080, // Amanda\r\n\r\n  // === Security-sensitive service ports (not browser-blocked but should be avoided) ===\r\n  6379, // Redis\r\n]);\r\n\r\nexport default class LocalUtilities implements ILocalUtilities {\r\n  #productNameSeed = \"mctools\";\r\n\r\n  #basePathAdjust: string | undefined = undefined;\r\n\r\n  static #bedrockSchemasRoot: string | undefined = undefined;\r\n\r\n  /**\r\n   * Resolves the root directory of the @minecraft/bedrock-schemas package.\r\n   * Forms and schemas are served directly from this package at runtime\r\n   * rather than being copied into the build output.\r\n   */\r\n  static get bedrockSchemasRoot(): string | undefined {\r\n    if (LocalUtilities.#bedrockSchemasRoot !== undefined) {\r\n      return LocalUtilities.#bedrockSchemasRoot;\r\n    }\r\n\r\n    try {\r\n      // catalog.json is in the package exports map, so require.resolve works\r\n      const catalogPath = require.resolve(\"@minecraft/bedrock-schemas/catalog.json\");\r\n      LocalUtilities.#bedrockSchemasRoot = path.dirname(catalogPath);\r\n    } catch {\r\n      LocalUtilities.#bedrockSchemasRoot = \"\";\r\n    }\r\n\r\n    return LocalUtilities.#bedrockSchemasRoot || undefined;\r\n  }\r\n\r\n  /**\r\n   * Get the data directory override from MCTOOLS_DATA_DIR environment variable.\r\n   * This is primarily used for Docker containers where data should be stored\r\n   * in a volume-mounted directory like /data.\r\n   */\r\n  static get dataDirectoryOverride(): string | undefined {\r\n    return process.env.MCTOOLS_DATA_DIR;\r\n  }\r\n\r\n  /**\r\n   * Check if MCTOOLS_I_ACCEPT_EULA_AT_MINECRAFTDOTNETSLASHEULA environment variable is set to \"true\".\r\n   * Used for non-interactive EULA acceptance in Docker containers.\r\n   * The long name is intentional to ensure users explicitly acknowledge the EULA.\r\n   */\r\n  static get eulaAcceptedViaEnvironment(): boolean {\r\n    const value = process.env.MCTOOLS_I_ACCEPT_EULA_AT_MINECRAFTDOTNETSLASHEULA;\r\n    return value?.toLowerCase() === \"true\";\r\n  }\r\n\r\n  get basePathAdjust() {\r\n    return this.#basePathAdjust;\r\n  }\r\n\r\n  set basePathAdjust(pathAdjust: string | undefined) {\r\n    this.#basePathAdjust = pathAdjust;\r\n  }\r\n\r\n  get platform() {\r\n    switch (os.platform()) {\r\n      case \"win32\":\r\n        return Platform.windows;\r\n      case \"darwin\":\r\n        return Platform.macOS;\r\n      case \"linux\":\r\n        return Platform.linux;\r\n      default:\r\n        return Platform.unsupported;\r\n    }\r\n  }\r\n\r\n  get productNameSeed() {\r\n    return this.#productNameSeed;\r\n  }\r\n\r\n  setProductNameSeed(newSeed: string) {\r\n    this.#productNameSeed = newSeed;\r\n  }\r\n\r\n  get userDataPath() {\r\n    return os.homedir();\r\n  }\r\n\r\n  get localAppDataPath() {\r\n    if (this.platform === Platform.windows) {\r\n      return (\r\n        this.userDataPath +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"AppData\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Local\" +\r\n        NodeStorage.platformFolderDelimiter\r\n      );\r\n    } else {\r\n      return this.userDataPath;\r\n    }\r\n  }\r\n\r\n  get roamingAppDataPath() {\r\n    if (this.platform === Platform.windows) {\r\n      return (\r\n        this.userDataPath +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"AppData\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Roaming\" +\r\n        NodeStorage.platformFolderDelimiter\r\n      );\r\n    } else {\r\n      return this.userDataPath;\r\n    }\r\n  }\r\n\r\n  get localReleaseServerLogPath() {\r\n    if (this.platform === Platform.windows) {\r\n      return (\r\n        this.userDataPath +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"AppData\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Roaming\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Minecraft Bedrock\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"logs\" +\r\n        NodeStorage.platformFolderDelimiter\r\n      );\r\n    } else {\r\n      return \".\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n  }\r\n\r\n  get localPreviewServerLogPath() {\r\n    if (this.platform === Platform.windows) {\r\n      return (\r\n        this.userDataPath +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"AppData\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Roaming\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Minecraft Bedrock Preview\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"logs\" +\r\n        NodeStorage.platformFolderDelimiter\r\n      );\r\n    } else {\r\n      return \".\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n  }\r\n\r\n  get minecraftPath() {\r\n    return (\r\n      this.userDataPath +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"AppData\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Roaming\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Microsoft Bedrock\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Users\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Shared\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"games\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"com.mojang\" +\r\n      NodeStorage.platformFolderDelimiter\r\n    );\r\n  }\r\n\r\n  get minecraftPreviewPath() {\r\n    return (\r\n      this.userDataPath +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"AppData\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Roaming\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Microsoft Bedrock Preview\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Users\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Shared\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"games\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"com.mojang\" +\r\n      NodeStorage.platformFolderDelimiter\r\n    );\r\n  }\r\n\r\n  get minecraftUwpPath() {\r\n    return (\r\n      this.localAppDataPath +\r\n      \"Packages\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Microsoft.MinecraftUWP_8wekyb3d8bbwe\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"LocalState\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"games\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"com.mojang\" +\r\n      NodeStorage.platformFolderDelimiter\r\n    );\r\n  }\r\n\r\n  get minecraftPreviewUwpPath() {\r\n    return (\r\n      this.localAppDataPath +\r\n      \"Packages\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Microsoft.MinecraftWindowsBeta_8wekyb3d8bbwe\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"LocalState\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"games\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"com.mojang\" +\r\n      NodeStorage.platformFolderDelimiter\r\n    );\r\n  }\r\n\r\n  get testWorkingPath() {\r\n    // If MCTOOLS_DATA_DIR is set (e.g., in Docker), use it\r\n    const dataDir = LocalUtilities.dataDirectoryOverride;\r\n    if (dataDir) {\r\n      return NodeStorage.ensureEndsWithDelimiter(dataDir) + \"test\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    let path = this.localAppDataPath;\r\n\r\n    if (this.platform === Platform.windows) {\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        this.#productNameSeed +\r\n        \"_test\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    } else {\r\n      // Linux/macOS: Use ~/.mctools/test/ structure\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        \".\" +\r\n        this.#productNameSeed +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"test\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  get cliWorkingPath() {\r\n    // If MCTOOLS_DATA_DIR is set (e.g., in Docker), use it\r\n    const dataDir = LocalUtilities.dataDirectoryOverride;\r\n    if (dataDir) {\r\n      return NodeStorage.ensureEndsWithDelimiter(dataDir) + \"cli\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    let path = this.localAppDataPath;\r\n\r\n    if (this.platform === Platform.windows) {\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        this.#productNameSeed +\r\n        \"_cli\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    } else {\r\n      // Linux/macOS: Use ~/.mctools/cli/ structure\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        \".\" +\r\n        this.#productNameSeed +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"cli\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  get serverWorkingPath() {\r\n    // If MCTOOLS_DATA_DIR is set (e.g., in Docker), use it\r\n    const dataDir = LocalUtilities.dataDirectoryOverride;\r\n    if (dataDir) {\r\n      return NodeStorage.ensureEndsWithDelimiter(dataDir) + \"server\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    let path = this.localAppDataPath;\r\n\r\n    if (this.platform === Platform.windows) {\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        this.#productNameSeed +\r\n        \"_server\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    } else {\r\n      // Linux/macOS: Use ~/.mctools/server/ structure\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        \".\" +\r\n        this.#productNameSeed +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"server\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  get worldsWorkingPath() {\r\n    // If MCTOOLS_DATA_DIR is set (e.g., in Docker), use it\r\n    const dataDir = LocalUtilities.dataDirectoryOverride;\r\n    if (dataDir) {\r\n      return NodeStorage.ensureEndsWithDelimiter(dataDir) + \"worlds\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    let path = this.localAppDataPath;\r\n\r\n    if (this.platform === Platform.windows) {\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        this.#productNameSeed +\r\n        \"_worlds\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    } else {\r\n      // Linux/macOS: Use ~/.mctools/worlds/ structure\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        \".\" +\r\n        this.#productNameSeed +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"worlds\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  get serversPath() {\r\n    let path = this.serverWorkingPath;\r\n\r\n    path = NodeStorage.ensureEndsWithDelimiter(path) + \"servers\" + NodeStorage.platformFolderDelimiter;\r\n\r\n    return path;\r\n  }\r\n\r\n  get sourceServersPath() {\r\n    let path = this.serverWorkingPath;\r\n\r\n    path = NodeStorage.ensureEndsWithDelimiter(path) + \"serverSources\" + NodeStorage.platformFolderDelimiter;\r\n\r\n    return path;\r\n  }\r\n\r\n  get packCachePath() {\r\n    let path = this.serverWorkingPath;\r\n\r\n    path = NodeStorage.ensureEndsWithDelimiter(path) + \"packCache\" + NodeStorage.platformFolderDelimiter;\r\n\r\n    return path;\r\n  }\r\n\r\n  get envPrefsPath() {\r\n    let path = this.serverWorkingPath;\r\n\r\n    path = NodeStorage.ensureEndsWithDelimiter(path) + \"envprefs\" + NodeStorage.platformFolderDelimiter;\r\n\r\n    return path;\r\n  }\r\n\r\n  generateCryptoRandomNumber(toVal: number) {\r\n    // Use rejection sampling to avoid modulo bias when generating random numbers\r\n    // from a cryptographically secure source\r\n    const maxUint32 = 0xffffffff;\r\n    const limit = maxUint32 - (maxUint32 % toVal);\r\n    let randomValue: number;\r\n    do {\r\n      randomValue = new Uint32Array(crypto.randomBytes(4).buffer)[0];\r\n    } while (randomValue >= limit);\r\n    return randomValue % toVal;\r\n  }\r\n\r\n  generateUuid(): string {\r\n    return uuidv4();\r\n  }\r\n\r\n  validateFolderPath(path: string) {\r\n    // banned character combos\r\n    if (path.indexOf(\"..\") >= 0 || path.indexOf(\"\\\\\\\\\") >= 0 || path.indexOf(\"//\") >= 0) {\r\n      throw new Error(\"Unsupported path combinations: \" + path);\r\n    }\r\n\r\n    if (path.lastIndexOf(\":\") >= 3) {\r\n      throw new Error(\"Unsupported drive location: \" + path);\r\n    }\r\n\r\n    const count = this.countChar(path, \"\\\\\") + this.countChar(path, \"/\");\r\n\r\n    if (count < 3) {\r\n      throw new Error(\"Unsupported base path: \" + path);\r\n    }\r\n  }\r\n\r\n  countChar(source: string, find: string) {\r\n    let count = 0;\r\n\r\n    let index = source.indexOf(find);\r\n\r\n    while (index >= 0) {\r\n      count++;\r\n\r\n      index = source.indexOf(find, index + find.length);\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  ensureStartsWithSlash(pathSegment: string) {\r\n    if (!pathSegment.startsWith(\"/\")) {\r\n      pathSegment = \"/\" + pathSegment;\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  ensureEndsWithSlash(pathSegment: string) {\r\n    if (!pathSegment.endsWith(\"/\")) {\r\n      pathSegment += \"/\";\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  ensureStartsWithBackSlash(pathSegment: string) {\r\n    if (!pathSegment.startsWith(\"\\\\\")) {\r\n      pathSegment = \"\\\\\" + pathSegment;\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  ensureEndsWithBackSlash(pathSegment: string) {\r\n    if (!pathSegment.endsWith(\"\\\\\")) {\r\n      pathSegment += \"\\\\\";\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  getFullPath(relativePath: string) {\r\n    // Redirect forms and schemas to @minecraft/bedrock-schemas package\r\n    const pkgRoot = LocalUtilities.bedrockSchemasRoot;\r\n    if (pkgRoot) {\r\n      if (relativePath.startsWith(\"data/forms/\") || relativePath.startsWith(\"data\\\\forms\\\\\")) {\r\n        const subPath = relativePath.substring(\"data/forms/\".length);\r\n        return path.join(pkgRoot, \"forms\", subPath);\r\n      }\r\n      const schemasPrefix = relativePath.startsWith(\"/schemas/\")\r\n        ? \"/schemas/\"\r\n        : relativePath.startsWith(\"schemas/\")\r\n          ? \"schemas/\"\r\n          : relativePath.startsWith(\"\\\\schemas\\\\\")\r\n            ? \"\\\\schemas\\\\\"\r\n            : undefined;\r\n      if (schemasPrefix) {\r\n        const subPath = relativePath.substring(schemasPrefix.length);\r\n        return path.join(pkgRoot, \"schemas\", subPath);\r\n      }\r\n    }\r\n\r\n    let fullPath: string;\r\n\r\n    if (this.#basePathAdjust) {\r\n      // When basePathAdjust is set (via --base-path CLI option),\r\n      // resolve it relative to process.cwd() (where the command was run)\r\n      // This allows users to specify paths relative to their working directory\r\n      fullPath = path.resolve(process.cwd(), this.#basePathAdjust);\r\n      fullPath = NodeStorage.ensureEndsWithDelimiter(fullPath);\r\n    } else {\r\n      // Fall back to __dirname-based resolution for backwards compatibility\r\n      fullPath = __dirname;\r\n\r\n      const lastSlash = Math.max(\r\n        fullPath.lastIndexOf(\"\\\\\", fullPath.length - 2),\r\n        fullPath.lastIndexOf(\"/\", fullPath.length - 2)\r\n      );\r\n\r\n      if (lastSlash >= 0) {\r\n        fullPath = fullPath.substring(0, lastSlash + 1);\r\n      }\r\n    }\r\n\r\n    if (this.platform === Platform.windows) {\r\n      fullPath += relativePath.replace(/\\//g, \"\\\\\");\r\n    } else {\r\n      fullPath += relativePath.replace(/\\\\/g, NodeStorage.platformFolderDelimiter);\r\n    }\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  createStorage(path: string): IStorage | null {\r\n    const fullPath = this.getFullPath(path);\r\n\r\n    return new NodeStorage(fullPath, \"\");\r\n  }\r\n\r\n  async readJsonFile(path: string): Promise<object | null> {\r\n    const fs = require(\"fs\");\r\n\r\n    const fullPath = this.getFullPath(path);\r\n\r\n    try {\r\n      if (!fs.existsSync(fullPath)) {\r\n        return null;\r\n      }\r\n\r\n      const rawData = fs.readFileSync(fullPath);\r\n\r\n      if (!rawData) {\r\n        return null;\r\n      }\r\n\r\n      const jsonData = JSON.parse(rawData);\r\n\r\n      return jsonData;\r\n    } catch (e: any) {\r\n      // Silently return null for parse errors - the caller can handle missing data\r\n      // This is common for malformed JSON files in vanilla/sample content\r\n      return null;\r\n    }\r\n  }\r\n\r\n  async processConversion(conversionSettings: IConversionSettings): Promise<boolean> {\r\n    // Placeholder for future conversion logic\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Check if a port is available for use.\r\n   * @param port The port number to check\r\n   * @param host The host to check (default: localhost)\r\n   * @returns Promise that resolves to true if the port is available, false otherwise\r\n   */\r\n  static isPortAvailable(port: number, host: string = \"localhost\"): Promise<boolean> {\r\n    const net = require(\"net\");\r\n\r\n    return new Promise((resolve) => {\r\n      const server = net.createServer();\r\n\r\n      server.once(\"error\", (err: NodeJS.ErrnoException) => {\r\n        if (err.code === \"EADDRINUSE\") {\r\n          resolve(false);\r\n        } else {\r\n          // Other errors - treat as unavailable\r\n          resolve(false);\r\n        }\r\n      });\r\n\r\n      server.once(\"listening\", () => {\r\n        server.close();\r\n        resolve(true);\r\n      });\r\n\r\n      server.listen(port, host);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Find an available port within a given range.\r\n   * @param startPort The starting port of the range (inclusive)\r\n   * @param endPort The ending port of the range (inclusive)\r\n   * @param host The host to check (default: localhost)\r\n   * @returns Promise that resolves to an available port, or undefined if none found\r\n   */\r\n  static async findAvailablePort(\r\n    startPort: number,\r\n    endPort: number,\r\n    host: string = \"localhost\"\r\n  ): Promise<number | undefined> {\r\n    // Create an array of ports in the range, excluding unsafe ports\r\n    const ports: number[] = [];\r\n    for (let port = startPort; port <= endPort; port++) {\r\n      if (!UNSAFE_PORTS.has(port)) {\r\n        ports.push(port);\r\n      }\r\n    }\r\n\r\n    // Fisher-Yates shuffle for random port selection\r\n    for (let i = ports.length - 1; i > 0; i--) {\r\n      const j = Math.floor(Math.random() * (i + 1));\r\n      [ports[i], ports[j]] = [ports[j], ports[i]];\r\n    }\r\n\r\n    // Try each port until we find an available one\r\n    for (const port of ports) {\r\n      const available = await LocalUtilities.isPortAvailable(port, host);\r\n      if (available) {\r\n        return port;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get a random port within a range, excluding browser-unsafe ports.\r\n   * This is a synchronous function that doesn't check if the port is available.\r\n   * Use findAvailablePort() if you need to verify the port is not in use.\r\n   *\r\n   * @param startPort The starting port of the range (inclusive)\r\n   * @param endPort The ending port of the range (inclusive)\r\n   * @returns A random port in the range that is not in the UNSAFE_PORTS list\r\n   */\r\n  static getRandomSafePort(startPort: number, endPort: number): number {\r\n    // Build array of safe ports in range\r\n    const safePorts: number[] = [];\r\n    for (let port = startPort; port <= endPort; port++) {\r\n      if (!UNSAFE_PORTS.has(port)) {\r\n        safePorts.push(port);\r\n      }\r\n    }\r\n\r\n    if (safePorts.length === 0) {\r\n      // Fallback: if no safe ports in range, just return startPort\r\n      // This shouldn't happen with reasonable port ranges\r\n      Log.debugAlert(`No safe ports available in range ${startPort}-${endPort}, using ${startPort}`);\r\n      return startPort;\r\n    }\r\n\r\n    return safePorts[Math.floor(Math.random() * safePorts.length)];\r\n  }\r\n\r\n  /**\r\n   * Verifies the Authenticode digital signature of a Windows executable.\r\n   * Uses PowerShell's Get-AuthenticodeSignature cmdlet, which is built into\r\n   * every modern Windows and requires no native Node.js addons.\r\n   *\r\n   * @param exePath Absolute path to the executable to verify\r\n   * @returns Promise with verification result including validity, signer, and Microsoft check\r\n   */\r\n  static async verifyAuthenticodeSignature(exePath: string): Promise<{\r\n    isValid: boolean;\r\n    status: string;\r\n    signer?: string;\r\n    error?: string;\r\n    isMicrosoftSigned?: boolean;\r\n  }> {\r\n    // Only works on Windows\r\n    if (os.platform() !== \"win32\") {\r\n      return {\r\n        isValid: false,\r\n        status: \"UnsupportedPlatform\",\r\n        error: \"Authenticode signature verification is only supported on Windows\",\r\n      };\r\n    }\r\n\r\n    // Validate the path exists\r\n    const fs = await import(\"fs\");\r\n    if (!fs.existsSync(exePath)) {\r\n      return {\r\n        isValid: false,\r\n        status: \"FileNotFound\",\r\n        error: `File not found: ${exePath}`,\r\n      };\r\n    }\r\n\r\n    try {\r\n      const { execFile } = await import(\"child_process\");\r\n      const { existsSync: execExistsSync } = await import(\"fs\");\r\n\r\n      // Use PowerShell's Get-AuthenticodeSignature which wraps the Windows\r\n      // WinVerifyTrust API. This avoids the need for native Node.js addons\r\n      // (win-verify-signature) which require platform-specific compiled binaries\r\n      // that are fragile across Node.js versions and packaging scenarios.\r\n      //\r\n      // We use -EncodedCommand with a base64-encoded UTF-16LE script to avoid\r\n      // all command-line escaping issues between Node.js and PowerShell.\r\n      //\r\n      // We prefer pwsh.exe (PowerShell 7+) because it has more reliable module\r\n      // auto-loading. PowerShell 5.1 (powershell.exe) can fail on some machines\r\n      // due to type data conflicts in the Security module. We try both.\r\n\r\n      // SECURITY: Instead of interpolating the file path into the PowerShell script\r\n      // (which risks command injection via newlines, backticks, or other control\r\n      // characters in the path), we pass the path via an environment variable.\r\n      // The script reads $env:MCT_SIG_VERIFY_PATH, so the path never enters\r\n      // the script text and cannot break out of string boundaries.\r\n\r\n      // Defense-in-depth: reject paths with characters that have no business\r\n      // in a Windows file path. This guards against exotic injection even if\r\n      // the env-var approach were somehow bypassed.\r\n      if (/[\\x00-\\x1f\\x7f`${}]/.test(exePath)) {\r\n        return {\r\n          isValid: false,\r\n          status: \"InvalidPath\",\r\n          error: \"File path contains invalid characters\",\r\n        };\r\n      }\r\n\r\n      const psScript = [\r\n        `$sig = Get-AuthenticodeSignature -LiteralPath $env:MCT_SIG_VERIFY_PATH`,\r\n        `$r = @{ Status = $sig.Status.ToString(); SignerCN = ''; SignerSubject = '' }`,\r\n        `if ($sig.SignerCertificate) {`,\r\n        `  $r.SignerSubject = $sig.SignerCertificate.Subject`,\r\n        `  if ($sig.SignerCertificate.Subject -match 'CN=([^,]+)') { $r.SignerCN = $Matches[1].Trim('\"') }`,\r\n        `}`,\r\n        `$r | ConvertTo-Json -Compress`,\r\n      ].join(\"\\n\");\r\n\r\n      // Encode as UTF-16LE base64 for PowerShell's -EncodedCommand\r\n      const encoded = Buffer.from(psScript, \"utf16le\").toString(\"base64\");\r\n\r\n      // Build ordered list of PowerShell executables to try.\r\n      // pwsh.exe (PowerShell 7+) is preferred for reliability.\r\n      const candidates: string[] = [];\r\n      const pwsh7Path = \"C:\\\\Program Files\\\\PowerShell\\\\7\\\\pwsh.exe\";\r\n      if (execExistsSync(pwsh7Path)) {\r\n        candidates.push(pwsh7Path);\r\n      }\r\n      candidates.push(\"pwsh.exe\", \"powershell.exe\");\r\n\r\n      const runPowerShell = (psExe: string): Promise<string> =>\r\n        new Promise((resolve, reject) => {\r\n          execFile(\r\n            psExe,\r\n            [\"-NoProfile\", \"-NonInteractive\", \"-EncodedCommand\", encoded],\r\n            {\r\n              timeout: 15000,\r\n              // Pass the file path via environment variable instead of\r\n              // interpolating it into the script. This prevents injection.\r\n              env: { ...process.env, MCT_SIG_VERIFY_PATH: exePath },\r\n            },\r\n            (error, stdout, stderr) => {\r\n              if (error) {\r\n                reject(new Error(`${psExe} failed: ${error.message}`));\r\n                return;\r\n              }\r\n              const trimmed = stdout.trim();\r\n              if (!trimmed) {\r\n                reject(new Error(`${psExe} returned empty output${stderr ? \": \" + stderr.substring(0, 200) : \"\"}`));\r\n                return;\r\n              }\r\n              resolve(trimmed);\r\n            }\r\n          );\r\n        });\r\n\r\n      // Try each candidate until one succeeds\r\n      let psResult: string | undefined;\r\n      let lastError: Error | undefined;\r\n      for (const psExe of candidates) {\r\n        try {\r\n          psResult = await runPowerShell(psExe);\r\n          break;\r\n        } catch (err) {\r\n          lastError = err instanceof Error ? err : new Error(String(err));\r\n        }\r\n      }\r\n\r\n      if (!psResult) {\r\n        return {\r\n          isValid: false,\r\n          status: \"VerificationError\",\r\n          error: `No working PowerShell found. Install PowerShell 7+ (https://aka.ms/powershell) or use --unsafe-skip-signature-validation. Last error: ${lastError?.message}`,\r\n        };\r\n      }\r\n\r\n      const parsed = JSON.parse(psResult) as {\r\n        Status: string;\r\n        SignerCN: string;\r\n        SignerSubject: string;\r\n      };\r\n\r\n      const isValid = parsed.Status === \"Valid\";\r\n      const signerSubject = parsed.SignerSubject || undefined;\r\n      const signerCN = parsed.SignerCN || \"\";\r\n\r\n      // Microsoft Corporation is the expected signer for Minecraft Dedicated Server\r\n      // We also accept Mojang (owned by Microsoft) for legacy compatibility\r\n      const isMicrosoftSigned =\r\n        isValid &&\r\n        (signerCN === \"Microsoft Corporation\" ||\r\n          signerCN === \"Mojang\" ||\r\n          (signerSubject !== undefined &&\r\n            (signerSubject.includes(\"Microsoft Corporation\") || signerSubject.includes(\"Mojang\"))));\r\n\r\n      return {\r\n        isValid,\r\n        status: isValid ? \"Valid\" : parsed.Status,\r\n        signer: signerSubject,\r\n        isMicrosoftSigned,\r\n        error: isValid ? undefined : `Signature status: ${parsed.Status}`,\r\n      };\r\n    } catch (err) {\r\n      const errorMessage = err instanceof Error ? err.message : String(err);\r\n      return {\r\n        isValid: false,\r\n        status: \"VerificationError\",\r\n        error: `Failed to verify signature: ${errorMessage}`,\r\n      };\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // IMAGE CODEC METHODS (Node.js specific)\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode PNG image data using pngjs.\r\n   * This is a Node.js-specific implementation that uses native modules.\r\n   */\r\n  decodePng(data: Uint8Array): { width: number; height: number; pixels: Uint8Array } | undefined {\r\n    return ImageCodecNode.decodePng(data);\r\n  }\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format using pngjs.\r\n   * This is a Node.js-specific implementation that uses native modules.\r\n   */\r\n  encodeToPng(pixels: Uint8Array, width: number, height: number): Uint8Array | undefined {\r\n    return ImageCodecNode.encodeToPng(pixels, width, height);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport DifferenceSet from \"./DifferenceSet\";\r\nimport { FileDifferenceType } from \"./IFileDifference\";\r\nimport IFolder from \"./IFolder\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\n\r\nexport default class Thumbprint {\r\n  fileInfos: { [path: string]: { size: number } | undefined } = {};\r\n\r\n  compare(secondThumbprint: Thumbprint, compareOnlyLeafs: boolean) {\r\n    const tempFileInfos: { [path: string]: { size: number } | undefined } = {};\r\n\r\n    for (const fileInfoPath in this.fileInfos) {\r\n      let comparePath = fileInfoPath;\r\n\r\n      if (compareOnlyLeafs) {\r\n        comparePath = StorageUtilities.canonicalizeName(StorageUtilities.getLeafName(fileInfoPath));\r\n      }\r\n\r\n      tempFileInfos[comparePath] = this.fileInfos[fileInfoPath];\r\n    }\r\n\r\n    for (const fileInfoPath in secondThumbprint.fileInfos) {\r\n      const compareFile = secondThumbprint.fileInfos[fileInfoPath];\r\n\r\n      if (compareFile) {\r\n        let comparePath = fileInfoPath;\r\n\r\n        if (compareOnlyLeafs) {\r\n          comparePath = StorageUtilities.canonicalizeName(StorageUtilities.getLeafName(fileInfoPath));\r\n        }\r\n\r\n        const sourceFileInfo = tempFileInfos[comparePath];\r\n        if (sourceFileInfo !== undefined) {\r\n          if (sourceFileInfo.size === compareFile.size) {\r\n            tempFileInfos[comparePath] = undefined;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const diffSet = new DifferenceSet();\r\n\r\n    for (const fileInfoPath in tempFileInfos) {\r\n      const fi = tempFileInfos[fileInfoPath];\r\n\r\n      if (fi) {\r\n        diffSet.fileDifferences.push({\r\n          type: FileDifferenceType.contentsDifferent,\r\n          path: fileInfoPath,\r\n        });\r\n      }\r\n    }\r\n\r\n    return diffSet;\r\n  }\r\n\r\n  async create(folder: IFolder) {\r\n    const tempFileInfos: { [path: string]: { size: number } | undefined } = {};\r\n\r\n    await this._createInternal(folder, tempFileInfos);\r\n\r\n    this.fileInfos = tempFileInfos;\r\n  }\r\n\r\n  private async _createInternal(folder: IFolder, fileInfos: { [path: string]: { size: number } | undefined }) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file) {\r\n        fileInfos[file.storageRelativePath] = { size: file.content ? file.content.length : -1 };\r\n      }\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const childFolder = folder.folders[folderName];\r\n\r\n      if (childFolder && !childFolder.errorStatus) {\r\n        await this._createInternal(childFolder, fileInfos);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EventDispatcher, IEvent } from \"ste-events\";\r\nimport Log from \"../core/Log\";\r\n\r\n/**\r\n * Parses the Minecraft debug protocol message stream.\r\n *\r\n * The protocol uses length-prefixed messages:\r\n * - 8 hex digits for length + newline (9 bytes total)\r\n * - JSON message body + newline\r\n *\r\n * Example:\r\n * ```\r\n * 00000042\\n\r\n * {\"type\":\"event\",\"event\":{\"type\":\"StatEvent2\",...}}\\n\r\n * ```\r\n */\r\nexport default class DebugMessageStreamParser {\r\n  private _buffer: Buffer = Buffer.alloc(0);\r\n  private _expectedLength: number = -1;\r\n\r\n  private _onMessage = new EventDispatcher<DebugMessageStreamParser, unknown>();\r\n  private _onError = new EventDispatcher<DebugMessageStreamParser, Error>();\r\n\r\n  public get onMessage(): IEvent<DebugMessageStreamParser, unknown> {\r\n    return this._onMessage.asEvent();\r\n  }\r\n\r\n  public get onError(): IEvent<DebugMessageStreamParser, Error> {\r\n    return this._onError.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Feed data from the socket into the parser.\r\n   */\r\n  public write(data: Buffer): void {\r\n    // Append new data to buffer\r\n    this._buffer = Buffer.concat([this._buffer, data]);\r\n\r\n    // Process as many complete messages as possible\r\n    while (this._processBuffer()) {\r\n      // Continue processing\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Process the buffer and extract a complete message if available.\r\n   * Returns true if a message was processed (and we should continue checking).\r\n   */\r\n  private _processBuffer(): boolean {\r\n    // If we don't know the expected length yet, try to read it\r\n    if (this._expectedLength < 0) {\r\n      // Need at least 9 bytes for length header (8 hex + newline)\r\n      if (this._buffer.length < 9) {\r\n        return false;\r\n      }\r\n\r\n      // Read the length header\r\n      const lengthStr = this._buffer.subarray(0, 8).toString(\"ascii\");\r\n      const newline = this._buffer[8];\r\n\r\n      if (newline !== 0x0a) {\r\n        // Not a valid length header, report error\r\n        this._onError.dispatch(this, new Error(`Invalid length header: expected newline, got ${newline}`));\r\n        // Try to recover by finding next valid-looking header\r\n        this._buffer = this._buffer.subarray(1);\r\n        return true;\r\n      }\r\n\r\n      this._expectedLength = parseInt(lengthStr, 16);\r\n\r\n      if (isNaN(this._expectedLength) || this._expectedLength < 0) {\r\n        this._onError.dispatch(this, new Error(`Invalid length value: ${lengthStr}`));\r\n        this._expectedLength = -1;\r\n        this._buffer = this._buffer.subarray(9);\r\n        return true;\r\n      }\r\n\r\n      // Remove length header from buffer\r\n      this._buffer = this._buffer.subarray(9);\r\n    }\r\n\r\n    // Check if we have enough data for the message\r\n    if (this._buffer.length < this._expectedLength) {\r\n      return false;\r\n    }\r\n\r\n    // Extract the message (length includes trailing newline)\r\n    const messageBytes = this._buffer.subarray(0, this._expectedLength);\r\n    this._buffer = this._buffer.subarray(this._expectedLength);\r\n\r\n    // Parse the JSON (trim trailing newline)\r\n    const jsonStr = messageBytes.toString(\"utf8\").trim();\r\n\r\n    try {\r\n      const message = JSON.parse(jsonStr);\r\n      // Log raw message receipt (truncate large messages) - use verbose since this fires frequently\r\n      const msgType = (message as any)?.type || \"unknown\";\r\n      const eventType = (message as any)?.event?.type || \"\";\r\n      const preview = jsonStr.length > 200 ? jsonStr.substring(0, 200) + \"...\" : jsonStr;\r\n      Log.verbose(\r\n        `[DebugParser] Received ${msgType}${eventType ? \"/\" + eventType : \"\"} (${jsonStr.length} bytes): ${preview}`\r\n      );\r\n      this._onMessage.dispatch(this, message);\r\n    } catch (e) {\r\n      Log.message(`[DebugParser] JSON parse error: ${e}`);\r\n      this._onError.dispatch(this, new Error(`Failed to parse JSON message: ${e}`));\r\n    }\r\n\r\n    // Reset for next message\r\n    this._expectedLength = -1;\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Reset the parser state.\r\n   */\r\n  public reset(): void {\r\n    this._buffer = Buffer.alloc(0);\r\n    this._expectedLength = -1;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE DOCUMENTATION: Minecraft Debug Protocol Types\r\n * ===========================================================\r\n *\r\n * This file defines interfaces for communicating with the Minecraft Bedrock Edition\r\n * debug server using a protocol similar to the VS Code Debug Adapter Protocol (DAP).\r\n *\r\n * ## Protocol Overview\r\n *\r\n * The Minecraft debug server uses a length-prefixed JSON message format:\r\n * - Messages are prefixed with an 8-character hex length + newline (e.g., \"00000042\\n\")\r\n * - The message body is JSON followed by a newline\r\n *\r\n * ## Message Types\r\n *\r\n * 1. **Protocol Event**: Initial handshake with version negotiation\r\n * 2. **Stat Events**: Real-time performance statistics (StatEvent2)\r\n * 3. **Debug Events**: Breakpoint hits, thread events, etc.\r\n * 4. **Profiler Captures**: CPU profiling data\r\n *\r\n * ## Connection Flow\r\n *\r\n * 1. Server starts debug listener: `script debugger listen 19144`\r\n * 2. Client connects via TCP\r\n * 3. Server sends ProtocolEvent with capabilities\r\n * 4. Client responds with protocol version and target selection\r\n * 5. Real-time events flow (stats, breakpoints, etc.)\r\n *\r\n * ## Related Files\r\n *\r\n * - MinecraftDebugClient.ts: TCP client implementation\r\n * - DedicatedServer.ts: Starts debug listener on server start\r\n * - HttpServer.ts: Proxies debug data to web clients\r\n */\r\n\r\n// ============================================================================\r\n// Protocol Envelope Types\r\n// ============================================================================\r\n\r\n/**\r\n * Base envelope for all debug protocol messages.\r\n */\r\nexport interface IDebugMessageEnvelope {\r\n  type: \"event\" | \"response\" | \"request\" | \"protocol\";\r\n}\r\n\r\n/**\r\n * Event message from Minecraft.\r\n */\r\nexport interface IDebugEventEnvelope extends IDebugMessageEnvelope {\r\n  type: \"event\";\r\n  event: IDebugEvent;\r\n}\r\n\r\n/**\r\n * Response to a request.\r\n */\r\nexport interface IDebugResponseEnvelope extends IDebugMessageEnvelope {\r\n  type: \"response\";\r\n  request_seq: number;\r\n  success: boolean;\r\n  command: string;\r\n  body?: unknown;\r\n  message?: string;\r\n}\r\n\r\n/**\r\n * Request message to Minecraft.\r\n */\r\nexport interface IDebugRequestEnvelope extends IDebugMessageEnvelope {\r\n  type: \"request\";\r\n  request: {\r\n    request_seq: number;\r\n    command: string;\r\n    args?: unknown;\r\n  };\r\n}\r\n\r\n/**\r\n * Protocol handshake message.\r\n */\r\nexport interface IDebugProtocolEnvelope extends IDebugMessageEnvelope {\r\n  type: \"protocol\";\r\n  version: number;\r\n  target_module_uuid?: string;\r\n  passcode?: string;\r\n}\r\n\r\n// ============================================================================\r\n// Event Types\r\n// ============================================================================\r\n\r\nexport type DebugEventType =\r\n  | \"StoppedEvent\"\r\n  | \"ThreadEvent\"\r\n  | \"PrintEvent\"\r\n  | \"NotificationEvent\"\r\n  | \"ProtocolEvent\"\r\n  | \"StatEvent2\"\r\n  | \"ProfilerCapture\";\r\n\r\n/**\r\n * Base debug event.\r\n */\r\nexport interface IDebugEvent {\r\n  type: DebugEventType;\r\n}\r\n\r\n/**\r\n * Protocol capabilities sent by Minecraft on connection.\r\n */\r\nexport interface IProtocolEvent extends IDebugEvent {\r\n  type: \"ProtocolEvent\";\r\n  version: number;\r\n  plugins: IPluginDetails[];\r\n  require_passcode?: boolean;\r\n}\r\n\r\nexport interface IPluginDetails {\r\n  name: string;\r\n  module_uuid: string;\r\n}\r\n\r\n/**\r\n * Breakpoint hit or pause event.\r\n */\r\nexport interface IStoppedEvent extends IDebugEvent {\r\n  type: \"StoppedEvent\";\r\n  reason: \"breakpoint\" | \"exception\" | \"pause\" | \"step\";\r\n  thread: number;\r\n  description?: string;\r\n}\r\n\r\n/**\r\n * Thread lifecycle event.\r\n */\r\nexport interface IThreadEvent extends IDebugEvent {\r\n  type: \"ThreadEvent\";\r\n  reason: \"started\" | \"exited\";\r\n  thread: number;\r\n}\r\n\r\n/**\r\n * Console/script output event.\r\n */\r\nexport interface IPrintEvent extends IDebugEvent {\r\n  type: \"PrintEvent\";\r\n  message: string;\r\n  logLevel?: number;\r\n}\r\n\r\n/**\r\n * Notification event (warnings, errors, etc.).\r\n */\r\nexport interface INotificationEvent extends IDebugEvent {\r\n  type: \"NotificationEvent\";\r\n  message: string;\r\n  logLevel?: number;\r\n}\r\n\r\n/**\r\n * Profiler capture event.\r\n */\r\nexport interface IProfilerCaptureEvent extends IDebugEvent {\r\n  type: \"ProfilerCapture\";\r\n  capture_base_path: string;\r\n  capture_data: string; // Base64 encoded\r\n}\r\n\r\n// ============================================================================\r\n// Statistics Types (StatEvent2)\r\n// ============================================================================\r\n\r\n/**\r\n * Real-time statistics event from Minecraft.\r\n */\r\nexport interface IStatEvent extends IDebugEvent {\r\n  type: \"StatEvent2\";\r\n  tick: number;\r\n  stats: IStatDataModel[];\r\n}\r\n\r\n/**\r\n * Hierarchical statistic data model.\r\n */\r\nexport interface IStatDataModel {\r\n  name: string;\r\n  children?: IStatDataModel[];\r\n  values?: (number | string)[];\r\n  should_aggregate: boolean;\r\n}\r\n\r\n/**\r\n * Flattened statistic data for processing.\r\n */\r\nexport interface IStatData {\r\n  name: string;\r\n  parent_name: string;\r\n  id: string;\r\n  full_id: string;\r\n  parent_id: string;\r\n  parent_full_id: string;\r\n  values: (number | string)[];\r\n  children_string_values: string[][];\r\n  should_aggregate: boolean;\r\n  tick: number;\r\n}\r\n\r\n// ============================================================================\r\n// Command Types\r\n// ============================================================================\r\n\r\n/**\r\n * Minecraft command request.\r\n */\r\nexport interface IMinecraftCommandRequest {\r\n  type: \"minecraftCommand\";\r\n  command:\r\n    | string\r\n    | {\r\n        command: string;\r\n        dimension_type: \"overworld\" | \"nether\" | \"the_end\";\r\n      };\r\n  dimension_type?: \"overworld\" | \"nether\" | \"the_end\";\r\n}\r\n\r\n/**\r\n * Resume execution request.\r\n */\r\nexport interface IResumeRequest {\r\n  type: \"resume\";\r\n}\r\n\r\n/**\r\n * Pause execution request.\r\n */\r\nexport interface IPauseRequest {\r\n  type: \"pause\";\r\n}\r\n\r\n/**\r\n * Set breakpoint request.\r\n */\r\nexport interface ISetBreakpointRequest {\r\n  type: \"breakpoint\";\r\n  breakpoint: {\r\n    path: string;\r\n    line: number;\r\n    column?: number;\r\n  };\r\n}\r\n\r\n/**\r\n * Stop on exception configuration.\r\n */\r\nexport interface IStopOnExceptionRequest {\r\n  type: \"stopOnException\";\r\n  stopOnException: boolean;\r\n}\r\n\r\n/**\r\n * Start profiler request.\r\n */\r\nexport interface IStartProfilerRequest {\r\n  type: \"startProfiler\";\r\n  profiler: {\r\n    target_module_uuid?: string;\r\n  };\r\n}\r\n\r\n/**\r\n * Stop profiler request.\r\n */\r\nexport interface IStopProfilerRequest {\r\n  type: \"stopProfiler\";\r\n  profiler: {\r\n    captures_path: string;\r\n    target_module_uuid?: string;\r\n  };\r\n}\r\n\r\n// ============================================================================\r\n// Protocol Version Constants\r\n// ============================================================================\r\n\r\n/**\r\n * Protocol version history:\r\n * 1 - Initial version\r\n * 2 - Add targetModuleUuid to protocol event\r\n * 3 - Add array of plugins and target module IDs\r\n * 4 - Minecraft can require passcode\r\n * 5 - Debugger can take profiler captures\r\n * 6 - Breakpoints as request (MC can reject)\r\n */\r\nexport enum ProtocolVersion {\r\n  Unknown = 0,\r\n  Initial = 1,\r\n  SupportTargetModuleUuid = 2,\r\n  SupportTargetSelection = 3,\r\n  SupportPasscode = 4,\r\n  SupportProfilerCaptures = 5,\r\n  SupportBreakpointsAsRequest = 6,\r\n}\r\n\r\n/**\r\n * Capabilities based on negotiated protocol version.\r\n */\r\nexport interface IMinecraftDebugCapabilities {\r\n  supportsCommands: boolean;\r\n  supportsProfiler: boolean;\r\n  supportsBreakpointsAsRequest: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Client State Types\r\n// ============================================================================\r\n\r\n/**\r\n * Current state of the debug connection.\r\n */\r\nexport enum DebugConnectionState {\r\n  Disconnected = \"disconnected\",\r\n  Connecting = \"connecting\",\r\n  Connected = \"connected\",\r\n  Error = \"error\",\r\n}\r\n\r\n/**\r\n * Debug session information.\r\n */\r\nexport interface IDebugSessionInfo {\r\n  state: DebugConnectionState;\r\n  host: string;\r\n  port: number;\r\n  protocolVersion: number;\r\n  targetModuleUuid?: string;\r\n  plugins: IPluginDetails[];\r\n  capabilities: IMinecraftDebugCapabilities;\r\n  lastStatTick?: number;\r\n  errorMessage?: string;\r\n}\r\n\r\n// ============================================================================\r\n// Notification Types (for WebSocket broadcast)\r\n// ============================================================================\r\n\r\n/**\r\n * Debug notification for web clients.\r\n */\r\nexport interface IDebugNotification {\r\n  type: \"debugger\";\r\n  eventType: \"connected\" | \"disconnected\" | \"stats\" | \"stopped\" | \"print\" | \"protocol\" | \"error\";\r\n  data: unknown;\r\n  timestamp: number;\r\n}\r\n\r\n/**\r\n * Stats update notification.\r\n */\r\nexport interface IDebugStatsNotification extends IDebugNotification {\r\n  eventType: \"stats\";\r\n  data: {\r\n    tick: number;\r\n    stats: IStatData[];\r\n  };\r\n}\r\n\r\n/**\r\n * Connection state notification.\r\n */\r\nexport interface IDebugConnectionNotification extends IDebugNotification {\r\n  eventType: \"connected\" | \"disconnected\";\r\n  data: IDebugSessionInfo;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE DOCUMENTATION: MinecraftDebugClient\r\n * ================================================\r\n *\r\n * This class implements a client for the Minecraft Bedrock Edition debug protocol,\r\n * allowing server-side code to connect to a running Minecraft instance's debug server.\r\n *\r\n * ## Overview\r\n *\r\n * When Minecraft Dedicated Server starts with script debugging enabled, it listens\r\n * for debug connections (typically on port 19144). This client connects to that port\r\n * and receives real-time events including:\r\n *\r\n * - **Statistics**: Performance metrics, entity counts, chunk loading, etc.\r\n * - **Debug events**: Breakpoint hits, thread events, exceptions\r\n * - **Print events**: Script console output\r\n * - **Profiler captures**: CPU profiling data\r\n *\r\n * ## Connection Flow\r\n *\r\n * 1. Client connects to Minecraft's debug port\r\n * 2. Minecraft sends ProtocolEvent with version and capabilities\r\n * 3. Client responds with protocol handshake\r\n * 4. Events flow continuously (StatEvent2 every tick, etc.)\r\n *\r\n * ## Integration Points\r\n *\r\n * - **DedicatedServer.ts**: Starts debug listener, creates this client\r\n * - **HttpServer.ts**: Subscribes to events and broadcasts to web clients\r\n * - **DebugPanel.tsx**: Web UI that displays the statistics\r\n *\r\n * ## Usage\r\n *\r\n * ```typescript\r\n * const client = new MinecraftDebugClient();\r\n * client.onStats.subscribe((_, stats) => console.log(stats));\r\n * client.onConnected.subscribe(() => console.log(\"Connected!\"));\r\n * await client.connect(\"localhost\", 19144);\r\n * ```\r\n */\r\n\r\nimport { createConnection, Socket } from \"net\";\r\nimport { EventDispatcher, IEvent } from \"ste-events\";\r\nimport Log from \"../core/Log\";\r\nimport DebugMessageStreamParser from \"./DebugMessageStreamParser\";\r\nimport {\r\n  DebugConnectionState,\r\n  IDebugEventEnvelope,\r\n  IDebugMessageEnvelope,\r\n  IDebugProtocolEnvelope,\r\n  IDebugResponseEnvelope,\r\n  IDebugSessionInfo,\r\n  IMinecraftDebugCapabilities,\r\n  IPluginDetails,\r\n  IProfilerCaptureEvent,\r\n  IProtocolEvent,\r\n  IPrintEvent,\r\n  IStatData,\r\n  IStatDataModel,\r\n  IStatEvent,\r\n  IStoppedEvent,\r\n  IThreadEvent,\r\n  ProtocolVersion,\r\n} from \"./IMinecraftDebugProtocol\";\r\n\r\nconst CONNECTION_RETRY_ATTEMPTS = 5;\r\nconst CONNECTION_RETRY_WAIT_MS = 1000;\r\nconst CONNECTION_TIMEOUT_MS = 5000; // Timeout for each connection attempt\r\nconst PROTOCOL_HANDSHAKE_TIMEOUT_MS = 10000; // Timeout waiting for protocol event\r\n\r\ninterface PendingRequest {\r\n  resolve: (result: unknown) => void;\r\n  reject: (error: Error) => void;\r\n  command: string;\r\n}\r\n\r\nexport default class MinecraftDebugClient {\r\n  private _socket: Socket | undefined;\r\n  private _parser: DebugMessageStreamParser;\r\n  private _state: DebugConnectionState = DebugConnectionState.Disconnected;\r\n  private _host: string = \"localhost\";\r\n  private _port: number = 19144;\r\n  private _protocolVersion: number = ProtocolVersion.Unknown;\r\n  private _clientProtocolVersion: number = ProtocolVersion.SupportBreakpointsAsRequest;\r\n  private _targetModuleUuid: string | undefined;\r\n  private _plugins: IPluginDetails[] = [];\r\n  private _capabilities: IMinecraftDebugCapabilities = {\r\n    supportsCommands: false,\r\n    supportsProfiler: false,\r\n    supportsBreakpointsAsRequest: false,\r\n  };\r\n  private _lastStatTick: number = 0;\r\n  private _errorMessage: string | undefined;\r\n  private _passcode: string | undefined;\r\n\r\n  // Diagnostic tracking\r\n  private _lastDataReceivedTime: number = 0;\r\n  private _messageCount: number = 0;\r\n  private _statWarningLogged: boolean = false;\r\n  private _statusCheckInterval: NodeJS.Timeout | undefined;\r\n\r\n  private _pendingRequests = new Map<number, PendingRequest>();\r\n  private _requestSeq = 0;\r\n\r\n  // Events\r\n  private _onConnected = new EventDispatcher<MinecraftDebugClient, IDebugSessionInfo>();\r\n  private _onDisconnected = new EventDispatcher<MinecraftDebugClient, string>();\r\n  private _onStats = new EventDispatcher<MinecraftDebugClient, { tick: number; stats: IStatData[] }>();\r\n  private _onStopped = new EventDispatcher<MinecraftDebugClient, IStoppedEvent>();\r\n  private _onThread = new EventDispatcher<MinecraftDebugClient, IThreadEvent>();\r\n  private _onPrint = new EventDispatcher<MinecraftDebugClient, IPrintEvent>();\r\n  private _onError = new EventDispatcher<MinecraftDebugClient, Error>();\r\n  private _onProtocol = new EventDispatcher<MinecraftDebugClient, IProtocolEvent>();\r\n  private _onProfilerCapture = new EventDispatcher<MinecraftDebugClient, IProfilerCaptureEvent>();\r\n\r\n  public get onConnected(): IEvent<MinecraftDebugClient, IDebugSessionInfo> {\r\n    return this._onConnected.asEvent();\r\n  }\r\n\r\n  public get onDisconnected(): IEvent<MinecraftDebugClient, string> {\r\n    return this._onDisconnected.asEvent();\r\n  }\r\n\r\n  public get onStats(): IEvent<MinecraftDebugClient, { tick: number; stats: IStatData[] }> {\r\n    return this._onStats.asEvent();\r\n  }\r\n\r\n  public get onStopped(): IEvent<MinecraftDebugClient, IStoppedEvent> {\r\n    return this._onStopped.asEvent();\r\n  }\r\n\r\n  public get onThread(): IEvent<MinecraftDebugClient, IThreadEvent> {\r\n    return this._onThread.asEvent();\r\n  }\r\n\r\n  public get onPrint(): IEvent<MinecraftDebugClient, IPrintEvent> {\r\n    return this._onPrint.asEvent();\r\n  }\r\n\r\n  public get onError(): IEvent<MinecraftDebugClient, Error> {\r\n    return this._onError.asEvent();\r\n  }\r\n\r\n  public get onProtocol(): IEvent<MinecraftDebugClient, IProtocolEvent> {\r\n    return this._onProtocol.asEvent();\r\n  }\r\n\r\n  public get onProfilerCapture(): IEvent<MinecraftDebugClient, IProfilerCaptureEvent> {\r\n    return this._onProfilerCapture.asEvent();\r\n  }\r\n\r\n  public get state(): DebugConnectionState {\r\n    return this._state;\r\n  }\r\n\r\n  public get isConnected(): boolean {\r\n    return this._state === DebugConnectionState.Connected;\r\n  }\r\n\r\n  public get sessionInfo(): IDebugSessionInfo {\r\n    return {\r\n      state: this._state,\r\n      host: this._host,\r\n      port: this._port,\r\n      protocolVersion: this._protocolVersion,\r\n      targetModuleUuid: this._targetModuleUuid,\r\n      plugins: this._plugins,\r\n      capabilities: this._capabilities,\r\n      lastStatTick: this._lastStatTick,\r\n      errorMessage: this._errorMessage,\r\n    };\r\n  }\r\n\r\n  constructor() {\r\n    this._parser = new DebugMessageStreamParser();\r\n\r\n    this._parser.onMessage.subscribe((_, message) => {\r\n      this._handleMessage(message as IDebugMessageEnvelope);\r\n    });\r\n\r\n    this._parser.onError.subscribe((_, error) => {\r\n      Log.error(`Debug protocol parse error: ${error.message}`);\r\n      this._onError.dispatch(this, error);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Connect to the Minecraft debug server.\r\n   * This method includes connection timeouts and retries to handle slow server startup.\r\n   * The protocol handshake completes asynchronously after the socket connects.\r\n   */\r\n  public async connect(host: string = \"localhost\", port: number = 19144, passcode?: string): Promise<void> {\r\n    if (this._state === DebugConnectionState.Connected || this._state === DebugConnectionState.Connecting) {\r\n      throw new Error(\"Already connected or connecting\");\r\n    }\r\n\r\n    this._host = host;\r\n    this._port = port;\r\n    this._passcode = passcode;\r\n    this._state = DebugConnectionState.Connecting;\r\n    this._errorMessage = undefined;\r\n\r\n    let socket: Socket | undefined;\r\n    let lastError: Error | undefined;\r\n\r\n    // Retry connection with exponential backoff\r\n    Log.debug(`[Debug] Starting connection attempts to ${host}:${port} (max ${CONNECTION_RETRY_ATTEMPTS} attempts)...`);\r\n    for (let attempt = 0; attempt < CONNECTION_RETRY_ATTEMPTS; attempt++) {\r\n      const waitMs = attempt > 0 ? CONNECTION_RETRY_WAIT_MS * Math.pow(2, attempt - 1) : 0;\r\n      if (waitMs > 0) {\r\n        Log.debug(`[Debug] Waiting ${waitMs}ms before retry...`);\r\n        await new Promise((resolve) => setTimeout(resolve, waitMs));\r\n      }\r\n\r\n      Log.debug(`[Debug] Connection attempt ${attempt + 1}/${CONNECTION_RETRY_ATTEMPTS} to ${host}:${port}...`);\r\n\r\n      try {\r\n        socket = await new Promise<Socket>((resolve, reject) => {\r\n          const client = createConnection({ host, port });\r\n\r\n          // Set a connection timeout\r\n          const timeout = setTimeout(() => {\r\n            client.destroy();\r\n            reject(new Error(`Connection timeout after ${CONNECTION_TIMEOUT_MS}ms`));\r\n          }, CONNECTION_TIMEOUT_MS);\r\n\r\n          client.on(\"connect\", () => {\r\n            clearTimeout(timeout);\r\n            client.removeAllListeners();\r\n            resolve(client);\r\n          });\r\n\r\n          client.on(\"close\", () => {\r\n            clearTimeout(timeout);\r\n            reject(new Error(\"Connection closed\"));\r\n          });\r\n\r\n          client.on(\"error\", (err) => {\r\n            clearTimeout(timeout);\r\n            reject(err);\r\n          });\r\n        });\r\n        break;\r\n      } catch (e: any) {\r\n        lastError = e;\r\n        Log.debug(`[Debug] Connection attempt ${attempt + 1} failed: ${e.message}`);\r\n      }\r\n    }\r\n\r\n    if (!socket) {\r\n      this._state = DebugConnectionState.Error;\r\n      this._errorMessage = `Failed to connect to ${host}:${port} after ${CONNECTION_RETRY_ATTEMPTS} attempts: ${lastError?.message || \"unknown error\"}`;\r\n      Log.message(`[Debug] Connection failed: ${lastError?.message || \"unknown error\"}`);\r\n      throw new Error(this._errorMessage);\r\n    }\r\n\r\n    Log.debug(`[Debug] Socket connection established to ${host}:${port}`);\r\n\r\n    this._socket = socket;\r\n    this._parser.reset();\r\n    this._lastDataReceivedTime = Date.now();\r\n    this._messageCount = 0;\r\n\r\n    // Set TCP keep-alive to detect dead connections\r\n    socket.setKeepAlive(true, 30000); // 30 second keep-alive\r\n\r\n    // Set up socket event handlers\r\n    socket.on(\"data\", (data) => {\r\n      this._lastDataReceivedTime = Date.now();\r\n      this._messageCount++;\r\n      Log.verbose(`[DebugClient] Socket received ${data.length} bytes of raw data (msg #${this._messageCount})`);\r\n      this._parser.write(data);\r\n    });\r\n\r\n    socket.on(\"error\", (e) => {\r\n      Log.message(`[DebugClient] Socket ERROR event: ${e.message}`);\r\n      this._handleDisconnect(`Socket error: ${e.message}`);\r\n    });\r\n\r\n    socket.on(\"close\", () => {\r\n      Log.debug(`[DebugClient] Socket CLOSE event`);\r\n      this._handleDisconnect(\"Socket closed\");\r\n    });\r\n\r\n    socket.on(\"end\", () => {\r\n      Log.debug(`[DebugClient] Socket END event - remote side closed connection`);\r\n    });\r\n\r\n    socket.on(\"timeout\", () => {\r\n      Log.debug(`[DebugClient] Socket TIMEOUT event`);\r\n    });\r\n\r\n    socket.on(\"drain\", () => {\r\n      Log.verbose(`[DebugClient] Socket DRAIN event - write buffer emptied`);\r\n    });\r\n\r\n    // Periodic status check - log if we haven't received data in a while\r\n    this._statusCheckInterval = setInterval(() => {\r\n      if (this._state === DebugConnectionState.Connected) {\r\n        const silentMs = Date.now() - this._lastDataReceivedTime;\r\n        const socketState = this._socket\r\n          ? `readable=${this._socket.readable}, writable=${this._socket.writable}, destroyed=${this._socket.destroyed}`\r\n          : \"no socket\";\r\n        Log.verbose(\r\n          `[DebugClient] STATUS CHECK: Connected, silent for ${silentMs}ms, ${this._messageCount} msgs received, ${socketState}`\r\n        );\r\n\r\n        // If we haven't received any data for 10 seconds after connecting, something is wrong.\r\n        // Only log this warning once to avoid spamming the console every 5 seconds.\r\n        if (silentMs > 10000 && this._messageCount <= 2 && !this._statWarningLogged) {\r\n          this._statWarningLogged = true;\r\n          Log.debug(\r\n            `[DebugClient] WARNING: No stat events received after ${silentMs}ms - Minecraft may not be sending stats`\r\n          );\r\n        }\r\n      }\r\n    }, 5000);\r\n\r\n    // Set a timeout for the protocol handshake\r\n    // If we don't receive a ProtocolEvent within the timeout, disconnect\r\n    const handshakeTimeout = setTimeout(() => {\r\n      if (this._state === DebugConnectionState.Connecting) {\r\n        Log.message(\r\n          `[Debug] Protocol handshake TIMEOUT after ${PROTOCOL_HANDSHAKE_TIMEOUT_MS}ms - no ProtocolEvent received`\r\n        );\r\n        this._handleDisconnect(\"Protocol handshake timeout - no ProtocolEvent received\");\r\n      }\r\n    }, PROTOCOL_HANDSHAKE_TIMEOUT_MS);\r\n\r\n    // Clear the timeout when we receive the protocol event (handled in _handleProtocolEvent)\r\n    this._handshakeTimeoutId = handshakeTimeout;\r\n\r\n    // Now wait for the ProtocolEvent from Minecraft\r\n    // The _handleMessage method will complete the connection handshake\r\n    Log.debug(`[Debug] Socket connected, waiting for ProtocolEvent (timeout: ${PROTOCOL_HANDSHAKE_TIMEOUT_MS}ms)...`);\r\n  }\r\n\r\n  // Timeout ID for protocol handshake\r\n  private _handshakeTimeoutId: NodeJS.Timeout | undefined;\r\n\r\n  /**\r\n   * Disconnect from the debug server.\r\n   */\r\n  public disconnect(): void {\r\n    if (this._socket) {\r\n      this._socket.destroy();\r\n      this._socket = undefined;\r\n    }\r\n    this._handleDisconnect(\"Client requested disconnect\");\r\n  }\r\n\r\n  /**\r\n   * Send a Minecraft command.\r\n   */\r\n  public sendCommand(command: string, dimensionType: \"overworld\" | \"nether\" | \"the_end\" = \"overworld\"): void {\r\n    if (!this.isConnected) {\r\n      throw new Error(\"Not connected to debug server\");\r\n    }\r\n\r\n    if (this._protocolVersion < ProtocolVersion.SupportProfilerCaptures) {\r\n      this._sendMessage({\r\n        type: \"minecraftCommand\",\r\n        command: command,\r\n        dimension_type: dimensionType,\r\n      });\r\n    } else {\r\n      this._sendMessage({\r\n        type: \"minecraftCommand\",\r\n        command: {\r\n          command: command,\r\n          dimension_type: dimensionType,\r\n        },\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Resume execution (continue from breakpoint).\r\n   */\r\n  public resume(): void {\r\n    this._sendMessage({ type: \"resume\" });\r\n  }\r\n\r\n  /**\r\n   * Pause execution.\r\n   */\r\n  public pause(): void {\r\n    this._sendMessage({ type: \"pause\" });\r\n  }\r\n\r\n  /**\r\n   * Start the profiler.\r\n   */\r\n  public startProfiler(): void {\r\n    if (!this._capabilities.supportsProfiler) {\r\n      throw new Error(\"Profiler not supported by this Minecraft version\");\r\n    }\r\n\r\n    this._sendMessage({\r\n      type: \"startProfiler\",\r\n      profiler: {\r\n        target_module_uuid: this._targetModuleUuid,\r\n      },\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Stop the profiler and capture data.\r\n   */\r\n  public stopProfiler(capturesPath: string): void {\r\n    if (!this._capabilities.supportsProfiler) {\r\n      throw new Error(\"Profiler not supported by this Minecraft version\");\r\n    }\r\n\r\n    this._sendMessage({\r\n      type: \"stopProfiler\",\r\n      profiler: {\r\n        captures_path: capturesPath,\r\n        target_module_uuid: this._targetModuleUuid,\r\n      },\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Send a message to the debug server.\r\n   */\r\n  private _sendMessage(envelope: unknown): void {\r\n    if (!this._socket) {\r\n      Log.message(`[DebugClient] SEND FAILED: No socket! Message: ${JSON.stringify(envelope).substring(0, 200)}`);\r\n      return;\r\n    }\r\n\r\n    const json = JSON.stringify(envelope);\r\n    Log.verbose(`[DebugClient] SENDING (${json.length} bytes): ${json.substring(0, 300)}`);\r\n    const jsonBuffer = Buffer.from(json);\r\n\r\n    // Length prefix: 8 hex digits + newline\r\n    const messageLength = jsonBuffer.byteLength + 1; // +1 for trailing newline\r\n    let lengthStr = \"00000000\" + messageLength.toString(16) + \"\\n\";\r\n    lengthStr = lengthStr.substring(lengthStr.length - 9);\r\n\r\n    const lengthBuffer = Buffer.from(lengthStr);\r\n    const newline = Buffer.from(\"\\n\");\r\n    const buffer = Buffer.concat([lengthBuffer, jsonBuffer, newline]);\r\n\r\n    this._socket.write(buffer);\r\n  }\r\n\r\n  /**\r\n   * Handle incoming messages.\r\n   */\r\n  private _handleMessage(envelope: IDebugMessageEnvelope): void {\r\n    Log.verbose(`[DebugClient] Processing message type: ${envelope.type}`);\r\n    if (envelope.type === \"event\") {\r\n      const eventEnvelope = envelope as IDebugEventEnvelope;\r\n      const eventType = (eventEnvelope.event as any)?.type || \"unknown\";\r\n      Log.verbose(`[DebugClient] Event type: ${eventType}`);\r\n      this._handleEvent(eventEnvelope.event as { type: string; [key: string]: unknown });\r\n    } else if (envelope.type === \"response\") {\r\n      Log.verbose(`[DebugClient] Response for command: ${(envelope as IDebugResponseEnvelope).command}`);\r\n      this._handleResponse(envelope as IDebugResponseEnvelope);\r\n    } else if (envelope.type === \"protocol\") {\r\n      Log.verbose(`[DebugClient] Received protocol message (as envelope.type=protocol)`);\r\n      // Handle protocol messages that come as envelope.type=\"protocol\" instead of event\r\n      this._handleProtocolEvent(envelope as unknown as IProtocolEvent);\r\n    } else {\r\n      Log.message(\r\n        `[DebugClient] UNKNOWN message type: ${envelope.type} - full envelope: ${JSON.stringify(envelope).substring(0, 500)}`\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle event messages from Minecraft.\r\n   */\r\n  private _handleEvent(event: { type: string; [key: string]: unknown }): void {\r\n    switch (event.type) {\r\n      case \"ProtocolEvent\":\r\n        Log.verbose(`[DebugClient] Received ProtocolEvent`);\r\n        this._handleProtocolEvent(event as unknown as IProtocolEvent);\r\n        break;\r\n\r\n      case \"StatEvent2\":\r\n        this._handleStatEvent(event as unknown as IStatEvent);\r\n        break;\r\n\r\n      case \"StoppedEvent\":\r\n        Log.verbose(`[DebugClient] Received StoppedEvent`);\r\n        this._onStopped.dispatch(this, event as unknown as IStoppedEvent);\r\n        break;\r\n\r\n      case \"ThreadEvent\":\r\n        Log.verbose(`[DebugClient] Received ThreadEvent`);\r\n        this._onThread.dispatch(this, event as unknown as IThreadEvent);\r\n        break;\r\n\r\n      case \"PrintEvent\":\r\n        this._onPrint.dispatch(this, event as unknown as IPrintEvent);\r\n        break;\r\n\r\n      case \"NotificationEvent\":\r\n        Log.verbose(`Debug notification: ${event.message}`);\r\n        break;\r\n\r\n      case \"ProfilerCapture\":\r\n        Log.verbose(\"Received profiler capture\");\r\n        this._onProfilerCapture.dispatch(this, event as unknown as IProfilerCaptureEvent);\r\n        break;\r\n\r\n      default:\r\n        Log.verbose(`Unknown debug event type: ${event.type}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle protocol handshake event.\r\n   */\r\n  private _handleProtocolEvent(event: IProtocolEvent): void {\r\n    Log.debug(`[DebugClient] ProtocolEvent received: version=${event.version}, plugins=${event.plugins?.length || 0}`);\r\n    Log.verbose(`[DebugClient] Server version: ${event.version}, Our version: ${this._clientProtocolVersion}`);\r\n    Log.verbose(`[DebugClient] Plugins: ${JSON.stringify(event.plugins)}`);\r\n    Log.verbose(`[DebugClient] Requires passcode: ${event.require_passcode}`);\r\n\r\n    this._protocolVersion = Math.min(event.version, this._clientProtocolVersion);\r\n    this._plugins = event.plugins || [];\r\n\r\n    // Determine capabilities based on protocol version\r\n    this._capabilities = {\r\n      supportsCommands: this._protocolVersion >= ProtocolVersion.SupportProfilerCaptures,\r\n      supportsProfiler: this._protocolVersion >= ProtocolVersion.SupportProfilerCaptures,\r\n      supportsBreakpointsAsRequest: this._protocolVersion >= ProtocolVersion.SupportBreakpointsAsRequest,\r\n    };\r\n\r\n    // Auto-select the first plugin if no target module specified\r\n    // This is required to receive stats events for that module\r\n    if (!this._targetModuleUuid && this._plugins.length > 0) {\r\n      this._targetModuleUuid = this._plugins[0].module_uuid;\r\n      Log.debug(`[DebugClient] Auto-selected plugin: ${this._plugins[0].name} (${this._targetModuleUuid})`);\r\n    }\r\n\r\n    // Log available plugins\r\n    if (this._plugins.length > 0) {\r\n      Log.verbose(\r\n        `[DebugClient] Available plugins: ${this._plugins.map((p) => `${p.name} (${p.module_uuid})`).join(\", \")}`\r\n      );\r\n    } else {\r\n      Log.verbose(`[DebugClient] No plugins available - stats may not be reported`);\r\n    }\r\n\r\n    // Send protocol response\r\n    const response: IDebugProtocolEnvelope = {\r\n      type: \"protocol\",\r\n      version: this._protocolVersion,\r\n      target_module_uuid: this._targetModuleUuid,\r\n      passcode: this._passcode,\r\n    };\r\n    Log.debug(\r\n      `[DebugClient] Sending protocol response: version=${this._protocolVersion}, target=${this._targetModuleUuid}, hasPasscode=${!!this._passcode}`\r\n    );\r\n    this._sendMessage(response);\r\n\r\n    // Clear the handshake timeout since we received the protocol event\r\n    if (this._handshakeTimeoutId) {\r\n      clearTimeout(this._handshakeTimeoutId);\r\n      this._handshakeTimeoutId = undefined;\r\n    }\r\n\r\n    // Send a \"resume\" message to start stats flow\r\n    // This mimics what VS Code's configurationDoneRequest does\r\n    const resumeMessage = { type: \"resume\" };\r\n    Log.debug(`[DebugClient] Sending 'resume' to start stats streaming...`);\r\n    this._sendMessage(resumeMessage);\r\n\r\n    // Mark as connected\r\n    this._state = DebugConnectionState.Connected;\r\n    Log.message(`[Debug] Connected to Minecraft debugger (v${this._protocolVersion})`);\r\n\r\n    this._onProtocol.dispatch(this, event);\r\n    this._onConnected.dispatch(this, this.sessionInfo);\r\n  }\r\n\r\n  /**\r\n   * Handle statistics event.\r\n   */\r\n  private _handleStatEvent(event: IStatEvent): void {\r\n    this._lastStatTick = event.tick;\r\n    Log.verbose(`[DebugClient] StatEvent2 received: tick=${event.tick}, top-level stats: ${event.stats?.length || 0}`);\r\n\r\n    // Flatten the hierarchical stats into a flat list\r\n    const flatStats: IStatData[] = [];\r\n    this._flattenStats(event.stats, event.tick, flatStats);\r\n\r\n    Log.verbose(\r\n      `[DebugClient] StatEvent2 processed: tick ${event.tick}, ${flatStats.length} flattened stats, dispatching to ${this._onStats.count} subscribers`\r\n    );\r\n    this._onStats.dispatch(this, { tick: event.tick, stats: flatStats });\r\n  }\r\n\r\n  /**\r\n   * Flatten hierarchical stats into a flat list.\r\n   */\r\n  private _flattenStats(stats: IStatDataModel[], tick: number, output: IStatData[], parent?: IStatData): void {\r\n    for (const stat of stats) {\r\n      const statId = stat.name.toLowerCase();\r\n\r\n      const statData: IStatData = {\r\n        name: stat.name,\r\n        id: statId,\r\n        full_id: parent ? `${parent.full_id}_${statId}` : statId,\r\n        parent_name: parent?.name || \"\",\r\n        parent_id: parent?.id || \"\",\r\n        parent_full_id: parent?.full_id || \"\",\r\n        values: stat.values || [],\r\n        children_string_values: [],\r\n        should_aggregate: stat.should_aggregate,\r\n        tick: tick,\r\n      };\r\n\r\n      // If aggregating, collect child string values\r\n      if (stat.should_aggregate && stat.children) {\r\n        for (const child of stat.children) {\r\n          if (child.values && child.values.length > 0) {\r\n            if (typeof child.values[0] === \"string\" && child.values[0].length > 0) {\r\n              statData.children_string_values.push([child.name, child.values[0] as string]);\r\n            } else if (typeof child.values[0] === \"number\") {\r\n              const valueStrings = child.values.map((v) => v.toString());\r\n              statData.children_string_values.push([child.name, ...valueStrings]);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      output.push(statData);\r\n\r\n      // Recursively process children (if not aggregating)\r\n      if (!stat.should_aggregate && stat.children) {\r\n        this._flattenStats(stat.children, tick, output, statData);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle response messages.\r\n   */\r\n  private _handleResponse(response: IDebugResponseEnvelope): void {\r\n    const pending = this._pendingRequests.get(response.request_seq);\r\n    if (pending) {\r\n      this._pendingRequests.delete(response.request_seq);\r\n\r\n      if (response.success) {\r\n        pending.resolve(response.body);\r\n      } else {\r\n        pending.reject(new Error(response.message || `Request ${pending.command} failed`));\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle disconnect.\r\n   */\r\n  private _handleDisconnect(reason: string): void {\r\n    const wasConnected = this._state === DebugConnectionState.Connected;\r\n    const wasConnecting = this._state === DebugConnectionState.Connecting;\r\n    this._state = DebugConnectionState.Disconnected;\r\n    this._errorMessage = reason;\r\n\r\n    // Clear handshake timeout if still pending\r\n    if (this._handshakeTimeoutId) {\r\n      clearTimeout(this._handshakeTimeoutId);\r\n      this._handshakeTimeoutId = undefined;\r\n    }\r\n\r\n    // Clear status check interval\r\n    if (this._statusCheckInterval) {\r\n      clearInterval(this._statusCheckInterval);\r\n      this._statusCheckInterval = undefined;\r\n    }\r\n\r\n    this._socket = undefined;\r\n    this._protocolVersion = ProtocolVersion.Unknown;\r\n    this._plugins = [];\r\n    this._capabilities = {\r\n      supportsCommands: false,\r\n      supportsProfiler: false,\r\n      supportsBreakpointsAsRequest: false,\r\n    };\r\n\r\n    // Reject all pending requests\r\n    for (const [seq, pending] of this._pendingRequests) {\r\n      pending.reject(new Error(`Disconnected: ${reason}`));\r\n    }\r\n    this._pendingRequests.clear();\r\n\r\n    if (wasConnected || wasConnecting) {\r\n      Log.message(`Debug client disconnected: ${reason}`);\r\n      this._onDisconnected.dispatch(this, reason);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE DOCUMENTATION: World Backup Data Interfaces\r\n * =========================================================\r\n *\r\n * This file defines the core data structures for the world backup system.\r\n *\r\n * ## Storage Structure\r\n *\r\n * ```\r\n * Documents/mctools/worlds/\r\n *   \u251C\u2500 manifest.json                     (IWorldBackupManifest - global index)\r\n *   \u2514\u2500 {worldId}/                        (8-char random ID, e.g., \"a3k9m2p1\")\r\n *       \u251C\u2500 world.json                    (IManagedWorldData - world metadata)\r\n *       \u251C\u2500 world20260101120000/          (timestamped backup folder)\r\n *       \u2502   \u251C\u2500 backup.json               (IWorldBackupMetadata)\r\n *       \u2502   \u251C\u2500 level.dat\r\n *       \u2502   \u251C\u2500 levelname.txt\r\n *       \u2502   \u251C\u2500 world_behavior_packs.json\r\n *       \u2502   \u251C\u2500 world_resource_packs.json\r\n *       \u2502   \u251C\u2500 db/\r\n *       \u2502   \u2502   \u2514\u2500 <modified .ldb files>\r\n *       \u2502   \u251C\u2500 behavior_packs/           (optional, with SHA deduplication)\r\n *       \u2502   \u2514\u2500 resource_packs/           (optional, with SHA deduplication)\r\n *       \u2514\u2500 world20260101130000/          (later backup)\r\n * ```\r\n *\r\n * ## File Deduplication\r\n *\r\n * LevelDB files (.ldb) and pack files use SHA-based deduplication:\r\n * - Each file is hashed (MD5)\r\n * - If the same file exists in a previous backup, we store a reference instead\r\n * - The `sourcePath` field in IFilePathAndSize points to the existing copy\r\n *\r\n * ## Key Concepts\r\n *\r\n * - **ManagedWorld**: A world with a unique ID and friendly name\r\n * - **WorldBackup**: A point-in-time snapshot of a world\r\n * - **WorldBackupManager**: Central service for backup operations\r\n *\r\n * ## Related Files\r\n *\r\n * - ManagedWorld.ts: World entity class\r\n * - WorldBackup.ts: Backup entity class\r\n * - WorldBackupManager.ts: Central backup management service\r\n * - NodeFolder.ts: File operations with deduplication\r\n */\r\n\r\nimport { IFilePathAndSize } from \"./NodeFolder\";\r\n\r\n/**\r\n * Global manifest tracking all managed worlds.\r\n * Stored at: worlds/manifest.json\r\n */\r\nexport interface IWorldBackupManifest {\r\n  /** Schema version for forward compatibility */\r\n  version: number;\r\n  /** Last time the manifest was updated */\r\n  lastModified: string;\r\n  /** Map of world ID to summary info */\r\n  worlds: { [worldId: string]: IWorldSummary };\r\n}\r\n\r\n/**\r\n * Summary info for a world in the global manifest.\r\n * Kept lightweight for quick enumeration.\r\n */\r\nexport interface IWorldSummary {\r\n  /** Unique 8-character ID */\r\n  id: string;\r\n  /** User-visible name */\r\n  friendlyName: string;\r\n  /** When the world was first created/registered */\r\n  createdAt: string;\r\n  /** When the last backup was taken */\r\n  lastBackupAt?: string;\r\n  /** Number of backups available */\r\n  backupCount: number;\r\n  /** World ID for UI consumption (same as id) */\r\n  worldId?: string;\r\n  /** Last modified date for UI consumption */\r\n  lastModified?: string;\r\n}\r\n\r\n/**\r\n * Full metadata for a managed world.\r\n * Stored at: worlds/{worldId}/world.json\r\n */\r\nexport interface IManagedWorldData {\r\n  /** Unique 8-character ID (lowercase letters + numbers) */\r\n  id: string;\r\n  /** User-visible name */\r\n  friendlyName: string;\r\n  /** Optional description */\r\n  description?: string;\r\n  /** Hash of the initial world configuration/settings */\r\n  initialConfigurationHash?: string;\r\n  /** When this world was first created/registered */\r\n  createdAt: string;\r\n  /** When the world metadata was last modified */\r\n  lastModified: string;\r\n  /** Optional notes about this world */\r\n  notes?: string;\r\n  /** Tags for organization */\r\n  tags?: string[];\r\n}\r\n\r\n/**\r\n * Metadata for a single backup.\r\n * Stored at: worlds/{worldId}/world{timestamp}/backup.json\r\n */\r\nexport interface IWorldBackupMetadata {\r\n  /** Backup ID (same as folder name, e.g., \"world20260101120000\") */\r\n  id: string;\r\n  /** Parent world ID */\r\n  worldId: string;\r\n  /** When this backup was created */\r\n  createdAt: string;\r\n  /** Type of backup */\r\n  backupType: WorldBackupType;\r\n  /** Hash of world configuration at backup time */\r\n  configurationHash?: string;\r\n  /** Minecraft server version used */\r\n  serverVersion?: string;\r\n  /** Total size in bytes (sum of all unique files) */\r\n  sizeBytes: number;\r\n  /** Number of files in this backup */\r\n  fileCount: number;\r\n  /** Number of files deduplicated (referenced from older backups) */\r\n  deduplicatedFileCount: number;\r\n  /** World name from levelname.txt at backup time */\r\n  worldName?: string;\r\n  /** Optional notes about this backup */\r\n  notes?: string;\r\n  /** File listing with deduplication info */\r\n  files: IFilePathAndSize[];\r\n}\r\n\r\n/**\r\n * Type of backup operation.\r\n */\r\nexport enum WorldBackupType {\r\n  /** Full backup of all world files */\r\n  full = \"full\",\r\n  /** Incremental backup using save query results */\r\n  incremental = \"incremental\",\r\n  /** Backup taken before reprovisioning/destructive operation */\r\n  preReprovision = \"preReprovision\",\r\n  /** Manual backup requested by user */\r\n  manual = \"manual\",\r\n  /** Runtime backup while server is running */\r\n  runtime = \"runtime\",\r\n  /** Backup taken on server shutdown */\r\n  shutdown = \"shutdown\",\r\n}\r\n\r\n/**\r\n * Options for creating a backup.\r\n */\r\nexport interface IBackupOptions {\r\n  /** Type of backup to create */\r\n  type?: WorldBackupType;\r\n  /** Alternative: backupType (alias for type) */\r\n  backupType?: WorldBackupType;\r\n  /** Optional description/notes to attach to the backup */\r\n  description?: string;\r\n  /** Optional notes to attach to the backup */\r\n  notes?: string;\r\n  /** Incremental file list from save query (for incremental backups) */\r\n  incrementalFileList?: IFilePathAndSize[];\r\n  /** Inclusion list from save query (alias for incrementalFileList) */\r\n  inclusionList?: IFilePathAndSize[];\r\n  /** Configuration hash to record */\r\n  configurationHash?: string;\r\n  /** Server version to record */\r\n  serverVersion?: string;\r\n  /** Include behavior_packs folder */\r\n  includeBehaviorPacks?: boolean;\r\n  /** Include resource_packs folder */\r\n  includeResourcePacks?: boolean;\r\n}\r\n\r\n/**\r\n * Options for restoring a backup.\r\n */\r\nexport interface IRestoreOptions {\r\n  /** Target path to restore to */\r\n  targetPath: string;\r\n  /** Whether to clear the target folder first */\r\n  clearTarget?: boolean;\r\n}\r\n\r\n/**\r\n * Options for exporting as .mcworld.\r\n */\r\nexport interface IExportMcWorldOptions {\r\n  /** Output file path for the .mcworld file */\r\n  outputPath: string;\r\n  /** Optional custom world name (overrides levelname.txt) */\r\n  worldName?: string;\r\n}\r\n\r\n/**\r\n * Result of a backup operation.\r\n */\r\nexport interface IBackupResult {\r\n  success: boolean;\r\n  backupId?: string;\r\n  backupPath?: string;\r\n  error?: string;\r\n  /** Statistics about the backup */\r\n  stats?: {\r\n    totalFiles: number;\r\n    newFiles: number;\r\n    deduplicatedFiles: number;\r\n    totalBytes: number;\r\n    savedBytes: number;\r\n  };\r\n}\r\n\r\n/**\r\n * Result of a restore operation.\r\n */\r\nexport interface IRestoreResult {\r\n  success: boolean;\r\n  restoredPath?: string;\r\n  error?: string;\r\n  /** Statistics about the restore */\r\n  stats?: {\r\n    totalFiles: number;\r\n    restoredBytes: number;\r\n  };\r\n}\r\n\r\n/**\r\n * Result of an export operation.\r\n */\r\nexport interface IExportResult {\r\n  success: boolean;\r\n  outputPath?: string;\r\n  error?: string;\r\n  sizeBytes?: number;\r\n}\r\n\r\n/**\r\n * Current manifest version.\r\n */\r\nexport const MANIFEST_VERSION = 1;\r\n\r\n/**\r\n * Characters allowed in world IDs.\r\n */\r\nexport const WORLD_ID_CHARS = \"abcdefghijklmnopqrstuvwxyz0123456789\";\r\n\r\n/**\r\n * Length of world IDs.\r\n */\r\nexport const WORLD_ID_LENGTH = 8;\r\n", "/**\r\n * ARCHITECTURE DOCUMENTATION: DedicatedServer - Minecraft Server Process Manager\r\n * ===============================================================================\r\n *\r\n * DedicatedServer manages a single instance of Minecraft Bedrock Dedicated Server,\r\n * handling process lifecycle, command execution, content deployment, and world backups.\r\n *\r\n * ## Core Responsibilities\r\n *\r\n * 1. **Process Lifecycle**: Start, stop, and monitor bedrock_server.exe\r\n * 2. **Command Execution**: Send commands to the server via stdin\r\n * 3. **Output Parsing**: Parse server stdout for events (player join/leave, test results)\r\n * 4. **Content Deployment**: Deploy add-on packs to the running server\r\n * 5. **World Backup**: Backup world files during runtime using save hold/resume\r\n * 6. **Debug Client**: Connect to the Minecraft script debugger for profiling\r\n *\r\n * ## Server Folder Structure\r\n *\r\n * Each DedicatedServer instance operates in a runtime server folder:\r\n *\r\n * ```\r\n * srv20260101120000/                      (Runtime server folder)\r\n *   \u251C\u2500 bedrock_server.exe                 (Copied from source)\r\n *   \u251C\u2500 server.properties                  (Generated, configures ports, world name)\r\n *   \u251C\u2500 allowlist.json                     (Symlink to source)\r\n *   \u251C\u2500 permissions.json                   (Symlink to source)\r\n *   \u251C\u2500 config/                            (Generated config folder)\r\n *   \u2502   \u251C\u2500 default.json                   (Creator Tools server config)\r\n *   \u2502   \u2514\u2500 ...\r\n *   \u251C\u2500 behavior_packs/                    (Junction to source vanilla packs)\r\n *   \u251C\u2500 resource_packs/                    (Junction to source vanilla packs)\r\n *   \u251C\u2500 definitions/                       (Junction to source definitions)\r\n *   \u251C\u2500 development_behavior_packs/        (Writable - deployed add-ons go here)\r\n *   \u2502   \u2514\u2500 my_addon_abc123_my_bp/         (Symlink to pack cache folder)\r\n *   \u251C\u2500 development_resource_packs/        (Writable - deployed add-ons go here)\r\n *   \u2502   \u2514\u2500 my_addon_abc123_my_rp/         (Symlink to pack cache folder)\r\n *   \u2514\u2500 worlds/\r\n *       \u2514\u2500 defaultWorld/                  (Writable - active world data)\r\n *           \u251C\u2500 level.dat                  (World metadata in NBT format)\r\n *           \u251C\u2500 levelname.txt              (World display name)\r\n *           \u251C\u2500 world_behavior_packs.json  (Active behavior packs for world)\r\n *           \u251C\u2500 world_resource_packs.json  (Active resource packs for world)\r\n *           \u2514\u2500 db/                        (LevelDB world data)\r\n *               \u251C\u2500 CURRENT\r\n *               \u251C\u2500 MANIFEST-000001\r\n *               \u251C\u2500 *.ldb                  (Immutable SSTable files)\r\n *               \u2514\u2500 *.log                  (Write-ahead log)\r\n * ```\r\n *\r\n * ## Startup Sequence\r\n *\r\n * 1. **Signature Verification**: On Windows, verify bedrock_server.exe is Microsoft-signed\r\n * 2. **Folder Setup**: Create development_*_packs and worlds/defaultWorld if needed\r\n * 3. **Config Generation**: Write server.properties with port, world name, settings\r\n * 4. **World Restoration**: Optionally restore from latest backup\r\n * 5. **Process Spawn**: Launch server with stdin/stdout capture\r\n *    - Windows: spawn bedrock_server.exe directly\r\n *    - Linux: spawn bedrock_server with LD_LIBRARY_PATH set\r\n * 6. **Ready Detection**: Parse stdout for \"Server started\" message\r\n * 7. **Debugger Connection**: Connect to script debugger on port 19144\r\n * 8. **Position Polling**: Start polling for player positions\r\n *\r\n * ## Linux Compatibility\r\n *\r\n * The server supports both Windows and Linux with these platform-specific behaviors:\r\n *\r\n * - **Executable**: `bedrock_server.exe` on Windows, `bedrock_server` on Linux\r\n * - **Library Path**: On Linux, `LD_LIBRARY_PATH` is set to the server directory\r\n * - **Signature Check**: Authenticode verification is Windows-only (skipped on Linux)\r\n * - **Path Handling**: Uses platform-aware path delimiters throughout\r\n *\r\n * ## Restart Backoff Strategy\r\n *\r\n * If the server crashes unexpectedly, it will attempt to restart with exponential\r\n * backoff to avoid resource exhaustion:\r\n *\r\n * | Crash # | Delay Before Restart |\r\n * |---------|---------------------|\r\n * | 1       | 1 second            |\r\n * | 2       | 2 seconds           |\r\n * | 3       | 4 seconds           |\r\n * | 4+      | Stop auto-restart   |\r\n *\r\n * The crash counter resets after 60 seconds of stable operation.\r\n *\r\n * ## World Backup Strategy\r\n *\r\n * Backups are performed using the Bedrock server's safe backup protocol:\r\n *\r\n * ```\r\n * Normal Operation                     Backup Sequence\r\n *       \u2502                                    \u2502\r\n *       \u2502  \u250C\u2500\u2500\u2500\u2500\u2500 save hold \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25BA  \u2502 (1) Suspend world writes\r\n *       \u2502  \u2502                                 \u2502\r\n *       \u2502  \u2502      save query \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25BA \u2502 (2) Get list of modified files\r\n *       \u2502  \u2502                                 \u2502\r\n *       \u2502  \u2502  \u25C4\u2500\u2500\u2500\u2500 file list \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500  \u2502 (3) Server returns file paths & sizes\r\n *       \u2502  \u2502                                 \u2502\r\n *       \u2502  \u2502      [copy files] \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25BA \u2502 (4) Copy only modified files\r\n *       \u2502  \u2502                                 \u2502\r\n *       \u2502  \u2502      save resume \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25BA \u2502 (5) Resume world writes\r\n *       \u2502  \u2502                                 \u2502\r\n *       \u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25BA  \u2502\r\n * ```\r\n *\r\n * Backup folders are stored in a configurable location (default: user's Documents):\r\n * ```\r\n * Documents/mctools/worlds/\r\n *   \u2514\u2500 world/\r\n *       \u251C\u2500 world20260101120000/          (Timestamped backup)\r\n *       \u2502   \u251C\u2500 files.json                (File listing with sizes)\r\n *       \u2502   \u251C\u2500 level.dat\r\n *       \u2502   \u2514\u2500 db/\r\n *       \u2502       \u2514\u2500 <only modified .ldb files>\r\n *       \u2514\u2500 world20260101130000/          (Later backup)\r\n * ```\r\n *\r\n * **Incremental Backup Optimization**:\r\n * - The backup system tracks SHA hashes of LevelDB files\r\n * - Only files that have changed since the last backup are copied\r\n * - This is especially efficient for LevelDB's immutable SSTable (.ldb) files\r\n * - The `backupWorldFileListings` in ServerManager tracks known files across backups\r\n *\r\n * **Backup Timeout Protection**:\r\n * - A 60-second timeout prevents backup from getting stuck if server doesn't respond\r\n * - If timeout fires, save is forcefully resumed and an error is logged\r\n * - Timeout is cleared when backup completes successfully or server stops\r\n *\r\n * ## Content Deployment Strategy (Feb 2026)\r\n *\r\n * Hot-reload is ENABLED for **script-only changes** on subsequent deploys.\r\n * The first deploy always restarts to register packs with the world.\r\n *\r\n * Decision logic (in `deploy()` method):\r\n *\r\n * 1. **First deploy** (`deployCount === 0`): Always restart \u2014 packs must be registered\r\n * 2. **Subsequent deploys** with server running:\r\n *    a. Capture before/after thumbprints of behavior + resource packs\r\n *    b. If resource pack files changed \u2192 restart (textures/models can't hot-reload)\r\n *    c. If behavior pack changes are script-only (.js/.ts/.map, no deletions) \u2192 `/reload`\r\n *    d. Otherwise \u2192 restart\r\n * 3. **Caller override**: `isReloadable=false` forces restart regardless\r\n *\r\n * The `MinecraftUtilities.isReloadableSetOfChanges()` function gates the decision:\r\n * it returns true only when ALL file diffs are `.js`, `.ts`, or `.map` with no deletions.\r\n *\r\n * When deploying add-on content:\r\n *\r\n * **Hot-Reload Path** (script-only changes, subsequent deploys):\r\n * 1. **Sync Files**: Copy new/modified files to development_*_packs folders\r\n * 2. **Thumbprint Diff**: Compare before/after to determine what changed\r\n * 3. **Run `/reload`**: Hot-reload scripts without server restart\r\n *\r\n * **Restart Path** (structural changes, first deploy, or caller override):\r\n * 1. **Sync Files**: Copy new/modified files to development_*_packs folders\r\n * 2. **Update Pack References**: Ensure world_behavior_packs.json has pack UUIDs\r\n * 3. **Stop Server**: Graceful shutdown with backup\r\n * 4. **Restart Server**: Fresh start picks up all changes\r\n *\r\n * ## Slot Sentinel File (ServerManager)\r\n *\r\n * Each slot folder contains a sentinel file (`slot_context.json`) that records:\r\n * - Source server version and path\r\n * - When the slot was provisioned\r\n * - Deployed pack UUIDs and versions\r\n * - World settings and experiments enabled\r\n *\r\n * On startup, ServerManager compares the current context against the sentinel:\r\n * - If context matches: Reuse existing slot (fast startup)\r\n * - If context differs: Backup world, rebuild slot, restore world, re-deploy\r\n *\r\n * ## Server Output Parsing\r\n *\r\n * The server's stdout is continuously parsed for significant events:\r\n *\r\n * | Log Message Pattern         | Action                                    |\r\n * |-----------------------------|-------------------------------------------|\r\n * | \"Server started\"            | Mark as running, enable debug, poll positions |\r\n * | \"Player connected\"          | Extract player name/xuid, emit event     |\r\n * | \"Player disconnected\"       | Extract player name/xuid, emit event     |\r\n * | \"Data saved\"                | Backup sequence state machine trigger    |\r\n * | \"Changes to the level are resumed\" | Backup complete notification      |\r\n * | \"Loaded test: ...\"          | GameTest started event                   |\r\n * | \"passed test: ...\"          | GameTest passed event                    |\r\n * | \"failed test: ...\"          | GameTest failed event                    |\r\n *\r\n * ## Script Debugger Integration\r\n *\r\n * After server start, DedicatedServer can connect to the Minecraft script debugger:\r\n *\r\n * 1. Send `script debugger listen 19144` command to server (if enableDebugger=true)\r\n * 2. Wait for \"Debugger listening\" message from Minecraft (confirms listener is ready)\r\n * 3. Connect MinecraftDebugClient to localhost:19144 (if enableDebuggerStreaming=true)\r\n * 4. Receive profiling stats (tick timing, script execution times)\r\n * 5. Forward debug events to ServerManager \u2192 HttpServer \u2192 WebSocket clients\r\n *\r\n * **Configuration (Jan 2026 Update)**:\r\n * - `enableDebugger` (default: true): Whether BDS enables script debugger on port 19144\r\n * - `enableDebuggerStreaming` (default: true for serve command): Whether we connect and stream debug stats\r\n *   The serve command enables streaming by default to provide real-time stats in the web UI.\r\n *\r\n * **Debug Client Connection Flow**:\r\n * - 3 seconds after \"Server started\" message: send `script debugger listen` command\r\n * - Wait for \"Debugger listening\" message from Minecraft stdout (or 10s timeout)\r\n * - Connect MinecraftDebugClient to localhost:debugPort\r\n * - Uses TCP keep-alive (30s) to detect dead connections\r\n * - Retries up to 5 times with exponential backoff on connection failure\r\n * - Has 10-second handshake timeout if server doesn't respond with ProtocolEvent\r\n * - Session info exposed via HTTP API: /api/{slot}/status includes debugConnectionState\r\n *\r\n * ## Related Files\r\n *\r\n * - ServerManager.ts: Creates and orchestrates DedicatedServer instances\r\n * - ServerConfigManager.ts: Manages server config/*.json files\r\n * - ServerPropertiesManager.ts: Manages server.properties file\r\n * - MCWorld.ts: World metadata parsing and modification\r\n * - MinecraftDebugClient.ts: Script debugger WebSocket client\r\n * - Thumbprint.ts: File tree hashing for change detection\r\n *\r\n * ## Key Methods\r\n *\r\n * - `startServer()`: Launch the server process with config\r\n * - `stopServer()`: Gracefully stop the server with \"stop\" command\r\n * - `deploy()`: Deploy add-on content to the running server\r\n * - `doBackup()`: Perform incremental world backup\r\n * - `runCommand()`: Execute a slash command on the server\r\n * - `ensureWorld()`: Set up world with settings and templates\r\n *\r\n * ## State Machine\r\n *\r\n * ```\r\n * stopped \u2500\u2500\u25BA deploying \u2500\u2500\u25BA launching \u2500\u2500\u25BA starting \u2500\u2500\u25BA started\r\n *    \u25B2                                                    \u2502\r\n *    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 stopping \u25C4\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n * ```\r\n */\r\nimport { onExit, chunksToLinesAsync, streamWrite } from \"@rauschma/stringio\";\r\nimport LocalEnvironment from \"./LocalEnvironment\";\r\nimport { Readable, Writable } from \"stream\";\r\nimport { spawn, ChildProcess } from \"child_process\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Player from \"./../minecraft/Player\";\r\nimport ServerManager, { IServerVersion } from \"./ServerManager\";\r\nimport ServerConfigManager from \"./ServerConfigManager\";\r\nimport SecurityUtilities from \"../core/SecurityUtilities\";\r\nimport ServerMessage, { ServerMessageCategory } from \"./ServerMessage\";\r\nimport ServerPropertiesManager from \"../minecraft/ServerPropertiesManager\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport Log from \"../core/Log\";\r\nimport * as fs from \"fs\";\r\nimport * as os from \"os\";\r\nimport Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport LocalUtilities from \"./LocalUtilities\";\r\nimport MCWorld from \"../minecraft/MCWorld\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport Thumbprint from \"../storage/Thumbprint\";\r\nimport { IMinecraftStartMessage as IMinecraftServerStart, IMinecraftStartMessage } from \"../app/IMinecraftStartMessage\";\r\nimport { DedicatedServerMode } from \"../app/ICreatorToolsData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { clearTimeout, setInterval } from \"timers\";\r\nimport NodeFolder, { IFilePathAndSize } from \"./NodeFolder\";\r\nimport { BackupType } from \"../minecraft/IWorldSettings\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport NodeFile from \"./NodeFile\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport MinecraftDebugClient from \"../debugger/MinecraftDebugClient\";\r\nimport { IStatData, IDebugSessionInfo, IProfilerCaptureEvent } from \"../debugger/IMinecraftDebugProtocol\";\r\nimport { WorldBackupType, IBackupResult } from \"./IWorldBackupData\";\r\n\r\nexport enum DedicatedServerStatus {\r\n  stopped = 1,\r\n  deploying = 2,\r\n  launching = 3,\r\n  starting = 4,\r\n  started = 5,\r\n}\r\n\r\nexport interface OutputLine {\r\n  message: string;\r\n  received: number;\r\n  isInternal?: boolean;\r\n}\r\n\r\nexport enum DedicatedServerBackupStatus {\r\n  none = 0,\r\n  suspendingSaveCommandIssued = 1,\r\n  suspendingQueryCommandIssued = 2,\r\n  suspendingQueryResultsPending = 3,\r\n  saveSuspended = 4,\r\n  copyingFiles = 5,\r\n  resumingSave = 6,\r\n  saveResumed = 7,\r\n}\r\n\r\nexport const MaxTimeToWaitForServerToStart = 5000; // in ticks of 5ms each = 25 seconds\r\n\r\n// Player position polling interval in ms (5 seconds)\r\nconst PLAYER_POSITION_POLL_INTERVAL = 5000;\r\n// Minimum distance (in blocks) to consider a \"major\" move worth reporting\r\nconst PLAYER_MOVE_THRESHOLD = 2;\r\n\r\nexport default class DedicatedServer {\r\n  #pendingCommands: string[] = [];\r\n  #pendingRequestIds: string[] = [];\r\n  #pendingCommandsInternal: boolean[] = []; // Track which commands are internal (don't log)\r\n  #worldBackupContainerFolder: IFolder;\r\n  serverPath: string;\r\n  name: string;\r\n  version?: IServerVersion;\r\n  #backupInterval: NodeJS.Timeout | undefined;\r\n  #backupTimeoutTimer: NodeJS.Timeout | undefined; // Timeout to prevent backup from getting stuck\r\n  #playerPositionPollInterval: NodeJS.Timeout | undefined;\r\n  #lastPlayerPositions: Map<string, { x: number; y: number; z: number; dimension: number }> = new Map();\r\n  updates: any[] = [];\r\n  #unexpectedStopLog: Date[] = [];\r\n  #backupStatus: DedicatedServerBackupStatus = DedicatedServerBackupStatus.none;\r\n  #behaviorPacksStorage: NodeStorage | undefined;\r\n  #defaultWorldStorage: NodeStorage | undefined;\r\n  #resourcePacksStorage: NodeStorage | undefined;\r\n  #activeStdIn: Writable | null = null;\r\n  #env: LocalEnvironment;\r\n  #currentCommandId = 0;\r\n  #dsm: ServerManager;\r\n  #starts: number = 0;\r\n  #lastResult: string | undefined;\r\n  startConfigurationHash?: string = undefined;\r\n  #port?: number;\r\n  #activeProcess: ChildProcess | null = null;\r\n  #status: DedicatedServerStatus = DedicatedServerStatus.stopped;\r\n\r\n  // Debug client for connecting to the Minecraft script debugger\r\n  #debugClient: MinecraftDebugClient | undefined;\r\n  // enableDebugger: Whether BDS enables script debugger listening\r\n  // The debug port is calculated dynamically based on the slot (base port + 12)\r\n  #enableDebugger: boolean = true;\r\n  // enableDebuggerStreaming: Whether we connect to the debug port and stream stats to web console\r\n  // Enabled by default. Set worldSettings.enableDebuggerStreaming=false to disable.\r\n  #enableDebuggerStreaming: boolean = true;\r\n  // Flag to track when we're waiting for the debug listener to be ready\r\n  // Set to true after sending 'script debugger listen', cleared when we receive 'Debugger listening' message\r\n  #awaitingDebuggerListening: boolean = false;\r\n  // Flag to track if the debug listener is ready but we haven't connected yet\r\n  // Used when delaying debug client connection until a player joins\r\n  #debugListenerReady: boolean = false;\r\n  // Whether to delay debug client connection until a player joins\r\n  // Note: This was used during debugging but the real fix was sending 'resume' after\r\n  // protocol handshake (see MinecraftDebugClient._handleProtocolEvent)\r\n  #delayDebugClientUntilPlayerJoins: boolean = false;\r\n  // Track if at least one player has joined since server start\r\n  // Used to know when it's safe to start debug streaming\r\n  #hasPlayerJoined: boolean = false;\r\n\r\n  // Whether to launch BDS in Minecraft Editor mode (passes Editor=true arg)\r\n  #editorMode: boolean = false;\r\n\r\n  // Associated managed world ID for the new backup system.\r\n  // If set, backups will be stored in the WorldBackupManager structure.\r\n  // If not set, backups use the legacy per-slot backup folder structure.\r\n  #managedWorldId: string | undefined;\r\n\r\n  // Last backup result for tracking what was backed up\r\n  #lastBackupResult: IBackupResult | undefined;\r\n\r\n  outputLines: OutputLine[] = [];\r\n\r\n  #opList: string[] | undefined;\r\n  #gameTest: string | undefined;\r\n\r\n  public get opList() {\r\n    return this.#opList;\r\n  }\r\n\r\n  public set opList(newOps) {\r\n    this.#opList = newOps;\r\n  }\r\n\r\n  public get port() {\r\n    return this.#port;\r\n  }\r\n\r\n  /**\r\n   * Get the script debugger port for this server instance.\r\n   * The debug port is the base port + 12, ensuring each slot has a unique debug port.\r\n   * Slot 0: port 19132 -> debug port 19144\r\n   * Slot 1: port 19164 -> debug port 19176\r\n   * etc.\r\n   */\r\n  public get debugPort(): number {\r\n    const basePort = this.#port ?? 19132;\r\n    return basePort + 12; // Debug port offset is 12 from base port\r\n  }\r\n\r\n  public get lastResult() {\r\n    return this.#lastResult;\r\n  }\r\n\r\n  public set port(newPort) {\r\n    this.#port = newPort;\r\n  }\r\n\r\n  public get editorMode(): boolean {\r\n    return this.#editorMode;\r\n  }\r\n\r\n  public set editorMode(value: boolean) {\r\n    this.#editorMode = value;\r\n  }\r\n\r\n  public get defaultWorldFolder() {\r\n    if (!this.#defaultWorldStorage) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.#defaultWorldStorage.rootFolder;\r\n  }\r\n\r\n  public get behaviorPacksFolder() {\r\n    if (!this.#behaviorPacksStorage) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.#behaviorPacksStorage.rootFolder;\r\n  }\r\n\r\n  public get resourcePacksFolder() {\r\n    if (!this.#resourcePacksStorage) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.#resourcePacksStorage.rootFolder;\r\n  }\r\n\r\n  /**\r\n   * Get the behavior packs storage (NodeStorage) for file watching purposes.\r\n   */\r\n  public get behaviorPacksStorage(): NodeStorage | undefined {\r\n    return this.#behaviorPacksStorage;\r\n  }\r\n\r\n  /**\r\n   * Get the default world storage (NodeStorage) for file watching purposes.\r\n   */\r\n  public get defaultWorldStorage(): NodeStorage | undefined {\r\n    return this.#defaultWorldStorage;\r\n  }\r\n\r\n  /**\r\n   * Get the resource packs storage (NodeStorage) for file watching purposes.\r\n   */\r\n  public get resourcePacksStorage(): NodeStorage | undefined {\r\n    return this.#resourcePacksStorage;\r\n  }\r\n\r\n  config: ServerConfigManager;\r\n  properties: ServerPropertiesManager;\r\n\r\n  deployCount: number = 0;\r\n\r\n  #onServerOutput = new EventDispatcher<DedicatedServer, ServerMessage>();\r\n  #onServerStarted = new EventDispatcher<DedicatedServer, string>();\r\n  #onServerRefreshed = new EventDispatcher<DedicatedServer, string>();\r\n  #onServerError = new EventDispatcher<DedicatedServer, string>();\r\n  #onServerStarting = new EventDispatcher<DedicatedServer, string>();\r\n  #onServerStopping = new EventDispatcher<DedicatedServer, string>();\r\n  #onServerStopped = new EventDispatcher<DedicatedServer, string>();\r\n  #onServerGameEvent = new EventDispatcher<DedicatedServer, object>();\r\n\r\n  #onPlayerConnected = new EventDispatcher<DedicatedServer, Player>();\r\n  #onPlayerDisconnected = new EventDispatcher<DedicatedServer, Player>();\r\n\r\n  #onTestStarted = new EventDispatcher<DedicatedServer, string>();\r\n  #onTestFailed = new EventDispatcher<DedicatedServer, string>();\r\n  #onTestSucceeded = new EventDispatcher<DedicatedServer, string>();\r\n\r\n  // Debug client events\r\n  #onDebugConnected = new EventDispatcher<DedicatedServer, IDebugSessionInfo>();\r\n  #onDebugDisconnected = new EventDispatcher<DedicatedServer, string>();\r\n  #onDebugStats = new EventDispatcher<DedicatedServer, { tick: number; stats: IStatData[] }>();\r\n  #onDebugPaused = new EventDispatcher<DedicatedServer, string>();\r\n  #onDebugResumed = new EventDispatcher<DedicatedServer, void>();\r\n  #onProfilerCapture = new EventDispatcher<DedicatedServer, IProfilerCaptureEvent>();\r\n\r\n  #updateIds: { [id: string]: boolean } = {};\r\n\r\n  constructor(\r\n    name: string,\r\n    dsm: ServerManager,\r\n    env: LocalEnvironment,\r\n    serverPath: string,\r\n    worldBackupContainerFolder: IFolder\r\n  ) {\r\n    this.name = name;\r\n    this.serverPath = serverPath;\r\n    this.#worldBackupContainerFolder = worldBackupContainerFolder;\r\n    this.#dsm = dsm;\r\n    this.#env = env;\r\n\r\n    this.config = new ServerConfigManager();\r\n    this.config.ensureDefaultConfig();\r\n    this.config.addCartoConfig();\r\n\r\n    this.properties = new ServerPropertiesManager();\r\n\r\n    this.handleClose = this.handleClose.bind(this);\r\n    this.doRunningBackup = this.doRunningBackup.bind(this);\r\n    this.startServer = this.startServer.bind(this);\r\n    this.stopServer = this.stopServer.bind(this);\r\n    this.directOutput = this.directOutput.bind(this);\r\n    this.handleCommandRequest = this.handleCommandRequest.bind(this);\r\n  }\r\n\r\n  get worldStoragePath() {\r\n    return (\r\n      NodeStorage.ensureEndsWithDelimiter(this.serverPath) +\r\n      \"worlds\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"defaultWorld\" +\r\n      NodeStorage.platformFolderDelimiter\r\n    );\r\n  }\r\n\r\n  public pushUpdates(additionalUpdates: any[]) {\r\n    for (let i = 0; i < additionalUpdates.length; i++) {\r\n      const update = additionalUpdates[i];\r\n      const updateId = update.eventId;\r\n\r\n      if (!updateId || !this.#updateIds[updateId]) {\r\n        if (updateId) {\r\n          this.#updateIds[updateId] = true;\r\n        }\r\n\r\n        this.#onServerGameEvent.dispatch(this, update);\r\n        this.updates.push(update);\r\n      }\r\n    }\r\n  }\r\n\r\n  public get gameTest() {\r\n    return this.#gameTest;\r\n  }\r\n\r\n  public set gameTest(newGameTest) {\r\n    this.#gameTest = newGameTest;\r\n  }\r\n\r\n  public get status() {\r\n    return this.#status;\r\n  }\r\n\r\n  public get onServerStarting() {\r\n    return this.#onServerStarting.asEvent();\r\n  }\r\n\r\n  public get onServerStopping() {\r\n    return this.#onServerStopping.asEvent();\r\n  }\r\n\r\n  public get onServerStopped() {\r\n    return this.#onServerStopped.asEvent();\r\n  }\r\n\r\n  public get onServerRefreshed() {\r\n    return this.#onServerRefreshed.asEvent();\r\n  }\r\n\r\n  public get onServerOutput() {\r\n    return this.#onServerOutput.asEvent();\r\n  }\r\n\r\n  public get onServerGameEvent() {\r\n    return this.#onServerGameEvent.asEvent();\r\n  }\r\n\r\n  public get onServerError() {\r\n    return this.#onServerError.asEvent();\r\n  }\r\n\r\n  public get onServerStarted() {\r\n    return this.#onServerStarted.asEvent();\r\n  }\r\n\r\n  public get onTestStarted() {\r\n    return this.#onTestStarted.asEvent();\r\n  }\r\n\r\n  public get onTestFailed() {\r\n    return this.#onTestFailed.asEvent();\r\n  }\r\n\r\n  public get onTestSucceeded() {\r\n    return this.#onTestSucceeded.asEvent();\r\n  }\r\n\r\n  public get onPlayerConnected() {\r\n    return this.#onPlayerConnected.asEvent();\r\n  }\r\n\r\n  public get onPlayerDisconnected() {\r\n    return this.#onPlayerDisconnected.asEvent();\r\n  }\r\n\r\n  public get onDebugConnected() {\r\n    return this.#onDebugConnected.asEvent();\r\n  }\r\n\r\n  public get onDebugDisconnected() {\r\n    return this.#onDebugDisconnected.asEvent();\r\n  }\r\n\r\n  public get onDebugStats() {\r\n    return this.#onDebugStats.asEvent();\r\n  }\r\n\r\n  public get onDebugPaused() {\r\n    return this.#onDebugPaused.asEvent();\r\n  }\r\n\r\n  public get onDebugResumed() {\r\n    return this.#onDebugResumed.asEvent();\r\n  }\r\n\r\n  public get onProfilerCapture() {\r\n    return this.#onProfilerCapture.asEvent();\r\n  }\r\n\r\n  public get debugClient() {\r\n    return this.#debugClient;\r\n  }\r\n\r\n  public get debuggerEnabled() {\r\n    return this.#enableDebugger;\r\n  }\r\n\r\n  public set debuggerEnabled(value: boolean) {\r\n    this.#enableDebugger = value;\r\n  }\r\n\r\n  public get debuggerStreamingEnabled() {\r\n    return this.#enableDebuggerStreaming;\r\n  }\r\n\r\n  public set debuggerStreamingEnabled(value: boolean) {\r\n    this.#enableDebuggerStreaming = value;\r\n  }\r\n\r\n  /**\r\n   * Get the managed world ID for this server.\r\n   * If set, backups will use the WorldBackupManager system.\r\n   */\r\n  public get managedWorldId(): string | undefined {\r\n    return this.#managedWorldId;\r\n  }\r\n\r\n  /**\r\n   * Set the managed world ID for this server.\r\n   * @param worldId The world ID from WorldBackupManager, or undefined to use legacy backups\r\n   */\r\n  public set managedWorldId(worldId: string | undefined) {\r\n    this.#managedWorldId = worldId;\r\n  }\r\n\r\n  /**\r\n   * Get the last backup result.\r\n   */\r\n  public get lastBackupResult(): IBackupResult | undefined {\r\n    return this.#lastBackupResult;\r\n  }\r\n\r\n  handleCommandRequest(event: string, data: string) {\r\n    const slargs = Utilities.splitUntil(data, \"|\", 1);\r\n\r\n    this.runCommand(slargs[1], slargs[0]);\r\n  }\r\n\r\n  async runActionSet(actionSet: IActionSetData, requestId?: string): Promise<void> {\r\n    if (!requestId) {\r\n      requestId = \"\";\r\n    }\r\n\r\n    const actionData = JSON.stringify(actionSet);\r\n\r\n    await this.runCommand(\"mct:runactions \" + actionData, requestId);\r\n  }\r\n\r\n  async waitUntilStarted() {\r\n    let waitTicks = 0;\r\n\r\n    while (\r\n      this.status !== DedicatedServerStatus.started &&\r\n      this.status !== DedicatedServerStatus.stopped &&\r\n      waitTicks < MaxTimeToWaitForServerToStart\r\n    ) {\r\n      await Utilities.sleep(5);\r\n      waitTicks++;\r\n    }\r\n\r\n    if (waitTicks >= MaxTimeToWaitForServerToStart) {\r\n      Log.message(\"Timed out waiting for server to start.\");\r\n    }\r\n  }\r\n\r\n  async runCommandImmediate(command: string, tokenId?: string, maxWaitMs?: number): Promise<string | undefined> {\r\n    Log.message(\"Running command: \" + command);\r\n    let targetResultLine = this.outputLines.length;\r\n    await this.writeToServer(command);\r\n\r\n    // maxPolls / pollCount count 5 ms polling iterations, not Minecraft game ticks.\r\n    const maxPolls = maxWaitMs ? Math.ceil(maxWaitMs / 5) : 500;\r\n    let pollCount = 0;\r\n\r\n    if (tokenId) {\r\n      let foundLineIndex = -1;\r\n      while (foundLineIndex < 0 && pollCount < maxPolls) {\r\n        await Utilities.sleep(5);\r\n\r\n        for (let i = targetResultLine; i < this.outputLines.length; i++) {\r\n          if (this.outputLines[i].message.indexOf(tokenId) >= 0) {\r\n            foundLineIndex = i;\r\n          }\r\n        }\r\n\r\n        pollCount++;\r\n      }\r\n\r\n      if (foundLineIndex >= 0) {\r\n        let result = this.outputLines[foundLineIndex].message;\r\n        Log.message(\"Command run complete: \" + command + \"| Result: \" + result);\r\n\r\n        return result;\r\n      }\r\n    } else {\r\n      while (targetResultLine >= this.outputLines.length && pollCount < maxPolls) {\r\n        await Utilities.sleep(5);\r\n        pollCount++;\r\n      }\r\n\r\n      if (this.outputLines.length > targetResultLine) {\r\n        let result = this.outputLines[targetResultLine].message;\r\n        Log.message(\"Command run complete: \" + command + \"| Result: \" + result);\r\n\r\n        return result;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async runCommand(command: string, requestId?: string, isInternal?: boolean): Promise<void> {\r\n    if (!requestId) {\r\n      requestId = \"\";\r\n    }\r\n\r\n    const newCommand = this.#pendingCommands.length;\r\n\r\n    this.#pendingCommands[newCommand] = command;\r\n    this.#pendingRequestIds[newCommand] = requestId;\r\n    this.#pendingCommandsInternal[newCommand] = isInternal === true;\r\n\r\n    if (newCommand === this.#currentCommandId) {\r\n      await this.executeNextCommand();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Run an internal command that doesn't show in logs.\r\n   * Used for implementation details like querytarget polling.\r\n   */\r\n  async runInternalCommand(command: string, requestId?: string): Promise<void> {\r\n    return this.runCommand(command, requestId, true);\r\n  }\r\n\r\n  async writeToServer(commandLine: string) {\r\n    if (this.#activeStdIn === null) {\r\n      Log.message(\"Could not find active stdin to run command '\" + commandLine + \"'.\");\r\n      return;\r\n    }\r\n\r\n    // Security: Sanitize command to prevent injection\r\n    commandLine = SecurityUtilities.sanitizeCommand(commandLine);\r\n\r\n    if (!SecurityUtilities.isCommandSafe(commandLine)) {\r\n      Log.message(\"Command rejected as unsafe: \" + commandLine);\r\n      return;\r\n    }\r\n\r\n    await streamWrite(this.#activeStdIn, commandLine + \"\\n\");\r\n  }\r\n\r\n  async ensureServerFolders() {\r\n    if (!this.#behaviorPacksStorage) {\r\n      this.#behaviorPacksStorage = new NodeStorage(\r\n        NodeStorage.ensureEndsWithDelimiter(this.serverPath) + \"development_behavior_packs\",\r\n        \"\"\r\n      );\r\n\r\n      await this.#behaviorPacksStorage.rootFolder.ensureExists();\r\n    }\r\n\r\n    if (!this.#resourcePacksStorage) {\r\n      this.#resourcePacksStorage = new NodeStorage(\r\n        NodeStorage.ensureEndsWithDelimiter(this.serverPath) + \"development_resource_packs\",\r\n        \"\"\r\n      );\r\n\r\n      await this.#resourcePacksStorage.rootFolder.ensureExists();\r\n    }\r\n\r\n    if (!this.#defaultWorldStorage) {\r\n      this.#defaultWorldStorage = new NodeStorage(this.worldStoragePath, \"\");\r\n\r\n      await this.#defaultWorldStorage.rootFolder.ensureExists();\r\n    }\r\n  }\r\n\r\n  async restoreLatestBackupWorld() {\r\n    // If we have a managed world ID and the WorldBackupManager is available,\r\n    // use the new restore system. Otherwise, fall back to legacy restore.\r\n    if (this.#managedWorldId && this.#dsm.worldBackupManager && this.#defaultWorldStorage) {\r\n      return await this.restoreManagedWorld();\r\n    }\r\n\r\n    // Legacy restore system\r\n    const worldBackupContainerFolderExists = fs.existsSync(this.#worldBackupContainerFolder.fullPath);\r\n\r\n    if (!worldBackupContainerFolderExists) {\r\n      return false;\r\n    }\r\n\r\n    const folders = fs.readdirSync(this.#worldBackupContainerFolder.fullPath);\r\n\r\n    let latestWorldName: string | undefined;\r\n    let latestWorldDate = new Date(0, 0, 0);\r\n\r\n    const operId = await this.#dsm.creatorTools.notifyOperationStarted(\r\n      \"Restoring world from '\" + this.#worldBackupContainerFolder.fullPath + \"'\"\r\n    );\r\n\r\n    for (const folder of folders) {\r\n      if (folder.startsWith(\"world\") && folder.length === 19) {\r\n        const dateStr = folder.substring(5);\r\n\r\n        if (Utilities.isNumeric(dateStr)) {\r\n          const fullPath =\r\n            NodeStorage.ensureEndsWithDelimiter(this.#worldBackupContainerFolder.fullPath) +\r\n            folder +\r\n            NodeStorage.platformFolderDelimiter;\r\n\r\n          const filesJsonPath = fullPath + \"files.json\";\r\n\r\n          const filesJsonExists = fs.existsSync(filesJsonPath);\r\n\r\n          const worldDate = Utilities.getDateFromStr(dateStr);\r\n\r\n          if (filesJsonExists && worldDate.getTime() > latestWorldDate.getTime()) {\r\n            latestWorldName = folder;\r\n            latestWorldDate = worldDate;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (latestWorldName) {\r\n      const lastBackupWorldFolder = this.#worldBackupContainerFolder.folders[latestWorldName];\r\n\r\n      if (lastBackupWorldFolder && this.#defaultWorldStorage) {\r\n        await this.#dsm.creatorTools.notifyStatusUpdate(\"Restoring world '\" + lastBackupWorldFolder.name + \"'\");\r\n\r\n        await (lastBackupWorldFolder as NodeFolder).copyContentsOut(this.#defaultWorldStorage.rootFolder);\r\n\r\n        await this.#dsm.creatorTools.notifyOperationEnded(\r\n          operId,\r\n          \"Completed restoring world '\" + lastBackupWorldFolder.name + \"'\"\r\n        );\r\n\r\n        return true;\r\n      }\r\n    }\r\n\r\n    await this.#dsm.creatorTools.notifyOperationEnded(operId, \"Was not able to restore world.\");\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Restore the latest backup using the new WorldBackupManager system.\r\n   */\r\n  private async restoreManagedWorld(): Promise<boolean> {\r\n    if (!this.#managedWorldId || !this.#dsm.worldBackupManager || !this.#defaultWorldStorage) {\r\n      throw new Error(\"Managed restore requires managedWorldId and WorldBackupManager\");\r\n    }\r\n\r\n    const world = this.#dsm.worldBackupManager.getWorld(this.#managedWorldId);\r\n    if (!world) {\r\n      Log.message(`No managed world found with ID ${this.#managedWorldId}`);\r\n      return false;\r\n    }\r\n\r\n    await world.loadBackups();\r\n\r\n    if (world.backups.length === 0) {\r\n      Log.message(`No backups found for world ${this.#managedWorldId}`);\r\n      return false;\r\n    }\r\n\r\n    // Get the latest backup\r\n    const latestBackup = world.backups[world.backups.length - 1];\r\n\r\n    const operId = await this.#dsm.creatorTools.notifyOperationStarted(\r\n      `Restoring managed world '${world.friendlyName}' (${this.#managedWorldId})`\r\n    );\r\n\r\n    try {\r\n      // Restore the latest backup\r\n      await this.#dsm.worldBackupManager.restoreBackup(\r\n        this.#managedWorldId,\r\n        latestBackup.id,\r\n        this.#defaultWorldStorage.rootFolder.fullPath\r\n      );\r\n\r\n      await this.#dsm.creatorTools.notifyOperationEnded(operId, `Completed restoring world '${world.friendlyName}'`);\r\n\r\n      return true;\r\n    } catch (error: any) {\r\n      Log.error(`Failed to restore managed world: ${error.message}`);\r\n      await this.#dsm.creatorTools.notifyOperationEnded(operId, `Failed to restore world: ${error.message}`);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  async applyWorldSettings(mcworld: MCWorld, startInfo?: IMinecraftStartMessage) {\r\n    if (startInfo?.worldSettings && startInfo.worldSettings.packageReferences) {\r\n      for (let i = 0; i < startInfo.worldSettings.packageReferences.length; i++) {\r\n        const packRefSet = startInfo.worldSettings.packageReferences[i];\r\n\r\n        mcworld.ensurePackReferenceSet(packRefSet);\r\n\r\n        if (packRefSet.resourcePackReferences.length > 0) {\r\n          mcworld.deferredTechnicalPreviewExperiment = true;\r\n        }\r\n\r\n        if (packRefSet.behaviorPackReferences.length > 0) {\r\n          mcworld.betaApisExperiment = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (startInfo && startInfo.worldSettings) {\r\n      // only apply world settings if the world has no world templates.\r\n      if (\r\n        startInfo.worldSettings.worldTemplateReferences === undefined ||\r\n        startInfo.worldSettings.worldTemplateReferences.length <= 0\r\n      ) {\r\n        // console.log(\"Applying settings \" + JSON.stringify(startInfo.worldSettings));\r\n        mcworld.applyWorldSettings(startInfo?.worldSettings);\r\n      }\r\n    }\r\n\r\n    await mcworld.save();\r\n  }\r\n\r\n  async getStorageFromPath(path: string): Promise<IStorage | undefined> {\r\n    if (!fs.existsSync(path)) {\r\n      return undefined;\r\n    }\r\n\r\n    const content = await NodeStorage.createFromPath(path);\r\n\r\n    if (\r\n      content instanceof NodeFile &&\r\n      (path.endsWith(\".mcpack\") ||\r\n        path.endsWith(\".mcaddon\") ||\r\n        path.endsWith(\".mcworld\") ||\r\n        path.endsWith(\".zip\") ||\r\n        path.endsWith(\".mcproject\"))\r\n    ) {\r\n      const zs = await ZipStorage.loadFromFile(content);\r\n\r\n      return zs;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async ensureWorld(startInfo?: IMinecraftStartMessage) {\r\n    const worldServerStorage = new NodeStorage(this.worldStoragePath, \"\");\r\n\r\n    const worldSourcePath = startInfo?.worldSettings?.worldContentPath;\r\n\r\n    if (worldSourcePath) {\r\n      let folder = await NodeStorage.createFromPathIncludingZip(worldSourcePath);\r\n\r\n      if (folder) {\r\n        await StorageUtilities.syncFolderTo(folder, worldServerStorage.rootFolder, false, false, false);\r\n      }\r\n    }\r\n\r\n    const mcworld = new MCWorld();\r\n    mcworld.folder = worldServerStorage.rootFolder;\r\n\r\n    await mcworld.loadMetaFiles(false);\r\n\r\n    await this.applyWorldSettings(mcworld, startInfo);\r\n  }\r\n\r\n  async ensureContentDeployed(startInfo?: IMinecraftStartMessage) {\r\n    if (startInfo?.additionalContentPath) {\r\n      let folder = await NodeStorage.createFromPathIncludingZip(startInfo.additionalContentPath);\r\n\r\n      if (folder) {\r\n        await this.deploy(folder, false, false);\r\n      }\r\n    }\r\n  }\r\n\r\n  async startServer(restartIfAlreadyRunning: boolean, start: IMinecraftServerStart | undefined) {\r\n    if (start === undefined) {\r\n      start = {\r\n        worldSettings: this.#dsm.creatorTools.worldSettings,\r\n        mode: DedicatedServerMode.auto,\r\n        iagree: this.#env.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula,\r\n      };\r\n    }\r\n\r\n    if (\r\n      this.#status === DedicatedServerStatus.launching ||\r\n      this.#status === DedicatedServerStatus.started ||\r\n      this.#status === DedicatedServerStatus.starting\r\n    ) {\r\n      if (restartIfAlreadyRunning) {\r\n        await this.stopServer();\r\n      } else {\r\n        return;\r\n      }\r\n    }\r\n\r\n    let rootPath = this.serverPath;\r\n\r\n    this.#onServerStarting.dispatch(this, \"\");\r\n    this.#status = DedicatedServerStatus.launching;\r\n\r\n    const ns = new NodeStorage(rootPath, \"\");\r\n    if (start.worldSettings?.backupType === BackupType.every2Minutes) {\r\n      this.#backupInterval = setInterval(this.doRunningBackup, 120000);\r\n    } else if (start.worldSettings?.backupType === BackupType.every5Minutes) {\r\n      this.#backupInterval = setInterval(this.doRunningBackup, 300000);\r\n    }\r\n\r\n    if (this.#starts === 0) {\r\n      await this.ensureServerFolders();\r\n\r\n      this.properties.serverFolder = ns.rootFolder;\r\n      this.properties.levelName = \"defaultWorld\";\r\n      this.properties.contentLogFileEnabled = true;\r\n\r\n      if (this.#port) {\r\n        this.properties.serverPort = this.#port;\r\n      }\r\n\r\n      if (start && start.worldSettings) {\r\n        this.properties.applyFromWorldSettings(start.worldSettings);\r\n\r\n        // Apply debugger settings from worldSettings\r\n        if (start.worldSettings.enableDebugger !== undefined) {\r\n          this.#enableDebugger = start.worldSettings.enableDebugger;\r\n        }\r\n        if (start.worldSettings.enableDebuggerStreaming !== undefined) {\r\n          this.#enableDebuggerStreaming = start.worldSettings.enableDebuggerStreaming;\r\n        }\r\n        if (start.worldSettings.isEditor !== undefined) {\r\n          this.#editorMode = start.worldSettings.isEditor;\r\n        }\r\n      }\r\n\r\n      await this.properties.writeFile();\r\n\r\n      const configFolder = ns.rootFolder.ensureFolder(\"config\");\r\n      await configFolder.ensureExists();\r\n\r\n      this.config.serverConfigFolder = configFolder;\r\n\r\n      this.config.writeFiles();\r\n    }\r\n\r\n    // Use platform-aware path delimiter instead of hardcoded backslash\r\n    rootPath = NodeStorage.ensureEndsWithDelimiter(rootPath);\r\n\r\n    this.#env.utilities.validateFolderPath(rootPath);\r\n\r\n    // Use platform-specific executable name\r\n    const executableName = os.platform() === \"win32\" ? \"bedrock_server.exe\" : \"bedrock_server\";\r\n    const fullPath = rootPath + executableName;\r\n\r\n    // Verify the executable exists\r\n    if (!fs.existsSync(fullPath)) {\r\n      const errorMsg = `Server executable not found at ${fullPath}`;\r\n      Log.fail(errorMsg);\r\n      this.#status = DedicatedServerStatus.stopped;\r\n      this.#onServerError.dispatch(this, errorMsg);\r\n      return;\r\n    }\r\n\r\n    // Verify digital signature on Windows before starting the server\r\n    if (os.platform() === \"win32\" && !start?.unsafeSkipSignatureValidation) {\r\n      Log.message(\"Verifying digital signature of \" + fullPath + \"...\");\r\n\r\n      const sigResult = await LocalUtilities.verifyAuthenticodeSignature(fullPath);\r\n\r\n      if (!sigResult.isValid) {\r\n        const errorMsg =\r\n          `Digital signature verification failed for ${fullPath}. ` +\r\n          `Status: ${sigResult.status}. ${sigResult.error || \"\"}\\n` +\r\n          `This could indicate the file has been tampered with or corrupted.\\n` +\r\n          `If you trust this file, you can skip signature verification with --unsafe-skip-signature-validation.`;\r\n        Log.fail(errorMsg);\r\n        this.#status = DedicatedServerStatus.stopped;\r\n        this.#onServerError.dispatch(this, errorMsg);\r\n        return;\r\n      }\r\n\r\n      if (!sigResult.isMicrosoftSigned) {\r\n        const errorMsg =\r\n          `Digital signature verification: ${fullPath} is signed, but not by Microsoft/Mojang. ` +\r\n          `Signer: ${sigResult.signer || \"unknown\"}\\n` +\r\n          `This could indicate the file is not an official Minecraft Dedicated Server.\\n` +\r\n          `If you trust this file, you can skip signature verification with --unsafe-skip-signature-validation.`;\r\n        Log.fail(errorMsg);\r\n        this.#status = DedicatedServerStatus.stopped;\r\n        this.#onServerError.dispatch(this, errorMsg);\r\n        return;\r\n      }\r\n\r\n      Log.message(`Signature verified: ${sigResult.signer}`);\r\n    } else if (start?.unsafeSkipSignatureValidation) {\r\n      Log.message(\"WARNING: Skipping digital signature verification as requested. This is unsafe.\");\r\n    }\r\n\r\n    Log.message(\"Starting server from \" + fullPath);\r\n\r\n    // Kill any stale bedrock_server processes that may hold file locks on this slot\r\n    this._killStaleProcesses(rootPath);\r\n\r\n    // Set up spawn options - on Linux, we need LD_LIBRARY_PATH to find shared libraries\r\n    const spawnOptions: { cwd?: string; env?: NodeJS.ProcessEnv } = {\r\n      cwd: rootPath,\r\n    };\r\n    if (os.platform() !== \"win32\") {\r\n      spawnOptions.env = {\r\n        ...process.env,\r\n        LD_LIBRARY_PATH: rootPath,\r\n      };\r\n    }\r\n\r\n    const args: string[] = [];\r\n    if (this.#editorMode) {\r\n      args.push(\"Editor=true\");\r\n    }\r\n\r\n    const childProcess = spawn(fullPath, args, spawnOptions);\r\n    this.#status = DedicatedServerStatus.starting;\r\n\r\n    childProcess.on(\"close\", this.handleClose);\r\n\r\n    this.#activeStdIn = childProcess.stdin;\r\n    this.#activeProcess = childProcess;\r\n\r\n    // Write PID file so we can find stale processes after a crash\r\n    if (childProcess.pid) {\r\n      this._writePidFile(rootPath, childProcess.pid);\r\n    }\r\n\r\n    this.directOutput(childProcess.stdout);\r\n    this.directErrors(childProcess.stderr);\r\n\r\n    Log.verbose(\r\n      \"Server '\" +\r\n        this.name +\r\n        \"' at '\" +\r\n        fullPath +\r\n        \"' launched\" +\r\n        (this.#editorMode ? \" (Editor mode)\" : \"\") +\r\n        \" (starts: \" +\r\n        this.#starts +\r\n        \").\"\r\n    );\r\n  }\r\n\r\n  async executeNextCommand() {\r\n    if (this.#currentCommandId < this.#pendingCommands.length) {\r\n      this.#currentCommandId++;\r\n\r\n      const nextCommand = this.#currentCommandId - 1;\r\n\r\n      const commandLine = this.#pendingCommands[nextCommand];\r\n      const isInternal = this.#pendingCommandsInternal[nextCommand];\r\n\r\n      // Only log non-internal commands\r\n      if (!isInternal) {\r\n        Log.message(\"Command \" + this.#currentCommandId + \" sent:\" + commandLine);\r\n      }\r\n\r\n      await this.writeToServer(commandLine);\r\n\r\n      await this.executeNextCommand();\r\n    }\r\n  }\r\n\r\n  async doRunningBackup() {\r\n    if (\r\n      this.#backupStatus === DedicatedServerBackupStatus.none ||\r\n      this.#backupStatus === DedicatedServerBackupStatus.saveResumed\r\n    ) {\r\n      this.#backupStatus = DedicatedServerBackupStatus.suspendingSaveCommandIssued;\r\n\r\n      // Set a timeout to prevent backup from getting stuck if server doesn't respond\r\n      // If backup doesn't complete within 60 seconds, force resume save\r\n      if (this.#backupTimeoutTimer) {\r\n        clearTimeout(this.#backupTimeoutTimer);\r\n      }\r\n      this.#backupTimeoutTimer = setTimeout(async () => {\r\n        if (\r\n          this.#backupStatus !== DedicatedServerBackupStatus.none &&\r\n          this.#backupStatus !== DedicatedServerBackupStatus.saveResumed\r\n        ) {\r\n          Log.error(\"Backup timed out after 60 seconds - forcing save resume\");\r\n          this.#backupStatus = DedicatedServerBackupStatus.none;\r\n          await this.runCommand(\"save resume\");\r\n        }\r\n      }, 60000);\r\n\r\n      await this.runCommand(\"save hold\");\r\n    }\r\n  }\r\n\r\n  async doBackup(backupFileLine?: string) {\r\n    // If we have a managed world ID and the WorldBackupManager is available,\r\n    // use the new backup system. Otherwise, fall back to legacy backup.\r\n    if (this.#managedWorldId && this.#dsm.worldBackupManager && this.#defaultWorldStorage) {\r\n      await this.doManagedBackup(backupFileLine);\r\n      return;\r\n    }\r\n\r\n    // Legacy backup system\r\n    const worldPath = \"world\" + Utilities.getDateStr(new Date());\r\n\r\n    const backupFolder = this.#worldBackupContainerFolder.ensureFolder(worldPath);\r\n\r\n    await backupFolder.ensureExists();\r\n\r\n    const inclusionList: IFilePathAndSize[] = [];\r\n\r\n    if (backupFileLine) {\r\n      const items = backupFileLine.split(\", \");\r\n\r\n      for (let i = 0; i < items.length; i++) {\r\n        const fileItem = items[i].split(\":\");\r\n\r\n        if (fileItem.length === 2) {\r\n          let size = undefined;\r\n          let path = fileItem[0];\r\n\r\n          const firstSlash = path.indexOf(\"/\");\r\n\r\n          if (firstSlash > 0) {\r\n            path = path.substring(firstSlash + 1);\r\n          }\r\n\r\n          try {\r\n            size = parseInt(fileItem[1]);\r\n          } catch (e) {\r\n            Log.verbose(\"Failed to parse backup file size: \" + e);\r\n          }\r\n\r\n          if (size !== undefined && firstSlash > 0) {\r\n            inclusionList.push({ path: path, size: size });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.#defaultWorldStorage) {\r\n      Log.message(\r\n        \"Backing world up to '\" + this.#defaultWorldStorage.rootFolder.fullPath + \"' to '\" + backupFolder.fullPath + \"'\"\r\n      );\r\n\r\n      await (this.#defaultWorldStorage.rootFolder as NodeFolder).copyContentsTo(\r\n        backupFolder.fullPath,\r\n        inclusionList,\r\n        backupFileLine === undefined,\r\n        this.#dsm.backupWorldFileListings,\r\n        StorageUtilities.ensureStartsWithDelimiter(\r\n          StorageUtilities.ensureEndsWithDelimiter(\r\n            this.#worldBackupContainerFolder.name + StorageUtilities.standardFolderDelimiter + worldPath\r\n          )\r\n        )\r\n      );\r\n    }\r\n\r\n    if (inclusionList) {\r\n      await (backupFolder as NodeFolder).saveFilesList(worldPath, inclusionList);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Create a backup using the new WorldBackupManager system.\r\n   * This provides better organization, deduplication, and export capabilities.\r\n   */\r\n  private async doManagedBackup(backupFileLine?: string) {\r\n    if (!this.#managedWorldId || !this.#dsm.worldBackupManager || !this.#defaultWorldStorage) {\r\n      throw new Error(\"Managed backup requires managedWorldId and WorldBackupManager\");\r\n    }\r\n\r\n    // Parse the inclusion list from the server's save query response\r\n    const inclusionList: IFilePathAndSize[] = [];\r\n\r\n    if (backupFileLine) {\r\n      const items = backupFileLine.split(\", \");\r\n\r\n      for (let i = 0; i < items.length; i++) {\r\n        const fileItem = items[i].split(\":\");\r\n\r\n        if (fileItem.length === 2) {\r\n          let size = undefined;\r\n          let path = fileItem[0];\r\n\r\n          const firstSlash = path.indexOf(\"/\");\r\n\r\n          if (firstSlash > 0) {\r\n            path = path.substring(firstSlash + 1);\r\n          }\r\n\r\n          try {\r\n            size = parseInt(fileItem[1]);\r\n          } catch (e) {\r\n            Log.verbose(\"Failed to parse backup file size: \" + e);\r\n          }\r\n\r\n          if (size !== undefined && firstSlash > 0) {\r\n            inclusionList.push({ path: path, size: size });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    Log.message(`Creating managed backup for world ${this.#managedWorldId}`);\r\n\r\n    // Determine backup type based on server state\r\n    const backupType =\r\n      backupFileLine !== undefined\r\n        ? WorldBackupType.runtime // Incremental during runtime\r\n        : WorldBackupType.shutdown; // Full backup on shutdown\r\n\r\n    const result = await this.#dsm.worldBackupManager.createBackup(\r\n      this.#managedWorldId,\r\n      this.#defaultWorldStorage.rootFolder.fullPath,\r\n      {\r\n        backupType: backupType,\r\n        incrementalFileList: inclusionList.length > 0 ? inclusionList : undefined,\r\n        notes: backupType === WorldBackupType.shutdown ? \"Server shutdown backup\" : \"Runtime incremental backup\",\r\n      }\r\n    );\r\n\r\n    this.#lastBackupResult = result;\r\n\r\n    if (result.stats) {\r\n      Log.message(\r\n        `Managed backup complete: ${result.stats.newFiles} files written, ${result.stats.deduplicatedFiles} files deduped, ` +\r\n          `${result.stats.totalBytes} bytes written, ${result.stats.savedBytes} bytes saved`\r\n      );\r\n    } else {\r\n      Log.message(`Managed backup complete: ${result.success ? \"success\" : \"failed\"}`);\r\n    }\r\n  }\r\n\r\n  async stopServer() {\r\n    if (this.#activeProcess !== null) {\r\n      Log.message(\"Stopping server '\" + this.name + \"'...\");\r\n      this.#onServerStopping.dispatch(this, \"stop\");\r\n\r\n      const proc = this.#activeProcess;\r\n      await this.writeToServer(\"stop\");\r\n\r\n      // Force-kill if the process doesn't exit within 10 seconds\r\n      const forceKillTimer = setTimeout(() => {\r\n        if (this.#activeProcess === proc && proc.pid) {\r\n          Log.debug(`Server '${this.name}' did not exit gracefully after 10s, force-killing PID ${proc.pid}`);\r\n          try {\r\n            process.kill(proc.pid, \"SIGKILL\");\r\n          } catch {\r\n            // Already exited\r\n          }\r\n        }\r\n      }, 10000);\r\n\r\n      // Clean up timer if process exits normally\r\n      proc.once(\"exit\", () => clearTimeout(forceKillTimer));\r\n    }\r\n  }\r\n\r\n  private static readonly PID_FILE_NAME = \"bedrock_server.pid\";\r\n\r\n  /**\r\n   * Kill stale bedrock_server processes left over from a previous crash.\r\n   * Uses a PID file in the slot directory instead of platform-specific process\r\n   * enumeration tools (wmic, PowerShell, pgrep), keeping this pure Node.js.\r\n   */\r\n  private _killStaleProcesses(slotPath: string): void {\r\n    const pidFilePath = slotPath + DedicatedServer.PID_FILE_NAME;\r\n\r\n    try {\r\n      if (!fs.existsSync(pidFilePath)) {\r\n        return;\r\n      }\r\n\r\n      const pidStr = fs.readFileSync(pidFilePath, \"utf8\").trim();\r\n      const pid = parseInt(pidStr, 10);\r\n\r\n      if (!pid || isNaN(pid)) {\r\n        this._removePidFile(slotPath);\r\n        return;\r\n      }\r\n\r\n      // Don't kill our own active process\r\n      if (this.#activeProcess && this.#activeProcess.pid === pid) {\r\n        return;\r\n      }\r\n\r\n      // Check if the process is still running (signal 0 = existence check)\r\n      try {\r\n        process.kill(pid, 0);\r\n      } catch {\r\n        // Process is not running \u2014 just clean up the stale PID file\r\n        this._removePidFile(slotPath);\r\n        return;\r\n      }\r\n\r\n      // On Linux, verify the PID is actually bedrock_server to guard against\r\n      // PID reuse \u2014 /proc/<pid>/comm contains the process name.\r\n      if (os.platform() !== \"win32\") {\r\n        try {\r\n          const comm = fs.readFileSync(`/proc/${pid}/comm`, \"utf8\").trim();\r\n          if (comm !== \"bedrock_server\") {\r\n            Log.debug(`PID ${pid} is now '${comm}', not bedrock_server \u2014 cleaning up stale PID file`);\r\n            this._removePidFile(slotPath);\r\n            return;\r\n          }\r\n        } catch {\r\n          // /proc entry unreadable \u2014 process may have exited between checks\r\n          this._removePidFile(slotPath);\r\n          return;\r\n        }\r\n      }\r\n\r\n      Log.debug(`Killing stale bedrock_server process (PID ${pid}) in slot ${slotPath}`);\r\n      try {\r\n        process.kill(pid, \"SIGKILL\");\r\n      } catch {\r\n        // Process may have already exited\r\n      }\r\n\r\n      this._removePidFile(slotPath);\r\n    } catch {\r\n      // PID file read/cleanup failed \u2014 not critical\r\n    }\r\n  }\r\n\r\n  private _writePidFile(slotPath: string, pid: number): void {\r\n    try {\r\n      fs.writeFileSync(slotPath + DedicatedServer.PID_FILE_NAME, pid.toString(), \"utf8\");\r\n    } catch {\r\n      // Non-critical \u2014 stale process detection will just be unavailable next restart\r\n    }\r\n  }\r\n\r\n  private _removePidFile(slotPath: string): void {\r\n    try {\r\n      const pidFilePath = slotPath + DedicatedServer.PID_FILE_NAME;\r\n      if (fs.existsSync(pidFilePath)) {\r\n        fs.unlinkSync(pidFilePath);\r\n      }\r\n    } catch {\r\n      // Non-critical\r\n    }\r\n  }\r\n\r\n  private async handleClose() {\r\n    if (this.#activeProcess) {\r\n      this.#dsm.creatorTools.notifyStatusUpdate(\"Server was closed unexpectedly.\");\r\n\r\n      this.#unexpectedStopLog.push(new Date());\r\n\r\n      const statusBefore = this.#status;\r\n\r\n      this.#activeProcess = null;\r\n\r\n      await this.finalizeStopServer();\r\n\r\n      // Try to ensure that we're not restarting the server in an endless loop.\r\n      // Use exponential backoff: 1s, 2s, 4s, 8s delays between restarts.\r\n      // Only try to restart up to 4 times in a 60 second window.\r\n      const recentStarts = this.getRecentStarts(60000);\r\n\r\n      if (recentStarts < 4) {\r\n        // Calculate backoff delay: 2^(recentStarts-1) seconds, starting at 1 second\r\n        const backoffMs = Math.min(1000 * Math.pow(2, recentStarts), 16000);\r\n\r\n        this.#dsm.creatorTools.notifyStatusUpdate(\r\n          `Restarting server in ${backoffMs / 1000}s (recent stops: ${recentStarts})`\r\n        );\r\n\r\n        if (statusBefore === DedicatedServerStatus.started) {\r\n          await Utilities.sleep(backoffMs);\r\n          await this.startServer(true, undefined);\r\n        }\r\n      } else {\r\n        this.#dsm.creatorTools.notifyStatusUpdate(\r\n          \"Restarted too many times in a 60 second window; not auto-restarting.\"\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  private getRecentStarts(timeWindowMs: number) {\r\n    const now = new Date();\r\n\r\n    let recents = 0;\r\n\r\n    for (let i = 0; i < this.#unexpectedStopLog.length; i++) {\r\n      if (now.getTime() - this.#unexpectedStopLog[i].getTime() < timeWindowMs) {\r\n        recents++;\r\n      }\r\n    }\r\n\r\n    return recents;\r\n  }\r\n\r\n  async continueStopServer() {\r\n    if (this.#activeProcess !== null) {\r\n      const proc = this.#activeProcess;\r\n\r\n      this.#activeProcess = null;\r\n\r\n      await onExit(proc);\r\n\r\n      await this.finalizeStopServer();\r\n    }\r\n  }\r\n\r\n  async finalizeStopServer() {\r\n    if (this.#backupInterval) {\r\n      clearTimeout(this.#backupInterval);\r\n      this.#backupInterval = undefined;\r\n    }\r\n\r\n    // Clear backup timeout if one is pending\r\n    if (this.#backupTimeoutTimer) {\r\n      clearTimeout(this.#backupTimeoutTimer);\r\n      this.#backupTimeoutTimer = undefined;\r\n    }\r\n\r\n    // Stop player position polling\r\n    this.stopPlayerPositionPolling();\r\n\r\n    // Disconnect the debug client\r\n    this.disconnectDebugClient();\r\n\r\n    // Remove PID file since the server is no longer running\r\n    this._removePidFile(NodeStorage.ensureEndsWithDelimiter(this.serverPath));\r\n\r\n    await this.doBackup();\r\n\r\n    this.#onServerStopped.dispatch(this, \"stop\");\r\n    this.#status = DedicatedServerStatus.stopped;\r\n    Log.message(\"Server '\" + this.name + \"' stopped.\");\r\n  }\r\n\r\n  async deploy(fromFolder: IFolder, isPatch: boolean, isReloadable?: boolean) {\r\n    const originalStatus = this.#status;\r\n    let filesConsidered = 0;\r\n    let filesUpdated = 0;\r\n    let wroteWorld = false;\r\n\r\n    // Notify deployment is starting\r\n    Log.important(\"Starting deployment from '\" + fromFolder.fullPath + \"'...\");\r\n    await this.#dsm.creatorTools?.notifyStatusUpdate(\"Starting deployment...\");\r\n\r\n    await fromFolder.load(true);\r\n\r\n    // if our from folder has an explicit build folder, use that\r\n    if (fromFolder.folders[\"build\"]) {\r\n      fromFolder = fromFolder.folders[\"build\"];\r\n\r\n      await fromFolder.load(true);\r\n    } else if (fromFolder.folders[\"out\"]) {\r\n      fromFolder = fromFolder.folders[\"out\"];\r\n\r\n      await fromFolder.load(true);\r\n    } else if (fromFolder.folders[\"dist\"]) {\r\n      fromFolder = fromFolder.folders[\"dist\"];\r\n\r\n      await fromFolder.load(true);\r\n    }\r\n\r\n    if (!this.#dsm.creatorTools) {\r\n      Log.fail(\"Could not find associated context in dedicated server::deploy.\");\r\n      return;\r\n    }\r\n\r\n    // Hot-reload strategy (Feb 2026):\r\n    // - First deploy (deployCount === 0): always restart to register pack references with the world\r\n    // - Subsequent deploys: auto-detect if hot-reload is safe via thumbprint diff\r\n    //   - Script-only changes (.js/.ts/.map, no deletions) \u2192 hot-reload via /reload command\r\n    //   - Resource pack changes \u2192 force restart (line ~1694)\r\n    //   - Non-script behavior pack changes \u2192 force restart (isReloadableSetOfChanges check)\r\n    // - Caller can explicitly disable hot-reload by passing isReloadable=false\r\n    // - Server must be running for hot-reload to be possible\r\n    let doReload = this.deployCount > 0 && isReloadable !== false;\r\n\r\n    if (originalStatus !== DedicatedServerStatus.started) {\r\n      doReload = false;\r\n    }\r\n\r\n    if (doReload) {\r\n      Log.message(\"Considering hot-reload for this deployment (deploy #\" + this.deployCount + \")\");\r\n    }\r\n\r\n    Log.message(\"Deploying from '\" + fromFolder.fullPath + \"'\");\r\n\r\n    let deployProj = new Project(this.#dsm.creatorTools, \"deploy\", null);\r\n    deployProj.setProjectFolder(fromFolder);\r\n    await deployProj.inferProjectItemsFromFiles();\r\n\r\n    // if we've somehow detected a build folder besides the checks above, use that.\r\n    if (deployProj.distBuildFolder) {\r\n      fromFolder = deployProj.distBuildFolder;\r\n\r\n      deployProj = new Project(this.#dsm.creatorTools, \"deploy\", null);\r\n      deployProj.setProjectFolder(fromFolder);\r\n\r\n      await deployProj.inferProjectItemsFromFiles();\r\n    }\r\n\r\n    let originalBehaviorPackTargetThumbprint = undefined;\r\n    let originalResourcePackTargetThumbprint = undefined;\r\n\r\n    if (doReload) {\r\n      if (this.#behaviorPacksStorage) {\r\n        originalBehaviorPackTargetThumbprint = new Thumbprint();\r\n        await originalBehaviorPackTargetThumbprint.create(this.#behaviorPacksStorage.rootFolder);\r\n      }\r\n      if (this.#resourcePacksStorage) {\r\n        originalResourcePackTargetThumbprint = new Thumbprint();\r\n        await originalResourcePackTargetThumbprint.create(this.#resourcePacksStorage.rootFolder);\r\n      }\r\n    }\r\n\r\n    this.#status = DedicatedServerStatus.deploying;\r\n\r\n    await this.ensureServerFolders();\r\n\r\n    // On a full (non-patch) deploy, clear existing dev packs so old project content doesn't accumulate.\r\n    // BDS auto-loads everything in development_*_packs/, so leftover packs from previous projects\r\n    // would appear as unexpected content (e.g., custom features from a different add-on).\r\n    if (!isPatch) {\r\n      if (this.#behaviorPacksStorage) {\r\n        Log.message(\"Clearing previous behavior packs for fresh deployment.\");\r\n        await this.#behaviorPacksStorage.rootFolder.deleteAllFolderContents();\r\n        await this.#behaviorPacksStorage.rootFolder.ensureExists();\r\n      }\r\n\r\n      if (this.#resourcePacksStorage) {\r\n        Log.message(\"Clearing previous resource packs for fresh deployment.\");\r\n        await this.#resourcePacksStorage.rootFolder.deleteAllFolderContents();\r\n        await this.#resourcePacksStorage.rootFolder.ensureExists();\r\n      }\r\n\r\n      // When the deployed project changes, also wipe the world data so entities, items,\r\n      // and blocks from the previous project's packs don't persist in the LevelDB chunks.\r\n      // Detect a project change by checking if the world's existing pack references\r\n      // match the current project's behavior pack UUID.\r\n      if (this.#defaultWorldStorage) {\r\n        const currentBpId = deployProj.defaultBehaviorPackUniqueId;\r\n        const existingWorld = new MCWorld();\r\n        existingWorld.folder = this.#defaultWorldStorage.rootFolder;\r\n\r\n        await existingWorld.loadMetaFiles(false);\r\n\r\n        const existingBp = existingWorld.getBehaviorPack(currentBpId);\r\n\r\n        // If the world has pack refs but none match this project, it's from a different project\r\n        if (\r\n          existingWorld.worldBehaviorPacks &&\r\n          existingWorld.worldBehaviorPacks.length > 0 &&\r\n          !existingBp\r\n        ) {\r\n          Log.message(\"Project changed \u2014 resetting world data for clean state.\");\r\n          await this.#defaultWorldStorage.rootFolder.deleteAllFolderContents();\r\n          await this.#defaultWorldStorage.rootFolder.ensureExists();\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.#behaviorPacksStorage && this.#defaultWorldStorage) {\r\n      let folderName = undefined;\r\n\r\n      const bpFolder = await deployProj.getDefaultBehaviorPackFolder();\r\n\r\n      if (bpFolder !== null) {\r\n        folderName = StorageUtilities.getAvailableFolderName(bpFolder);\r\n        Log.message(\"Deploying default behavior pack from '\" + folderName + \"'\");\r\n\r\n        const defaultBehaviorPackFolder = this.#behaviorPacksStorage.rootFolder.ensureFolder(folderName);\r\n\r\n        await defaultBehaviorPackFolder.ensureExists();\r\n\r\n        /*Log.message(\r\n          \"Synchronizing '\" +\r\n            deployProj.defaultBehaviorPackFolder.fullPath +\r\n            \"' to '\" +\r\n            defaultBehaviorPackFolder.fullPath +\r\n            \"'\"\r\n        );*/\r\n\r\n        filesConsidered += await StorageUtilities.syncFolderTo(\r\n          bpFolder,\r\n          defaultBehaviorPackFolder,\r\n          false,\r\n          false,\r\n          false\r\n        );\r\n      }\r\n\r\n      if (fromFolder.folders[\"development_behavior_packs\"]) {\r\n        const dbpSourceFolder = fromFolder.folders[\"development_behavior_packs\"];\r\n\r\n        Log.message(\r\n          \"Synchronizing all dev BP folders from '\" +\r\n            dbpSourceFolder.fullPath +\r\n            \"' to '\" +\r\n            this.#behaviorPacksStorage.rootFolder.fullPath +\r\n            \"'\"\r\n        );\r\n        filesConsidered += await StorageUtilities.syncFolderTo(\r\n          dbpSourceFolder,\r\n          this.#behaviorPacksStorage.rootFolder,\r\n          false,\r\n          false,\r\n          false,\r\n          folderName ? [folderName] : undefined\r\n        );\r\n      }\r\n\r\n      if (fromFolder.folders[\"behavior_packs\"]) {\r\n        const dbpSourceFolder = fromFolder.folders[\"behavior_packs\"];\r\n\r\n        /*Log.message(\r\n          \"Synchronizing all BP folders from '\" +\r\n            dbpSourceFolder.fullPath +\r\n            \"' to '\" +\r\n            this.#behaviorPacksStorage.rootFolder.fullPath +\r\n            \"'\"\r\n        );*/\r\n\r\n        filesConsidered += await StorageUtilities.syncFolderTo(\r\n          dbpSourceFolder,\r\n          this.#behaviorPacksStorage.rootFolder,\r\n          false,\r\n          false,\r\n          false,\r\n          folderName ? [folderName] : undefined\r\n        );\r\n      }\r\n\r\n      /*\r\n      const worldBehaviorPacks: IPackRegistration[] = [];\r\n\r\n      worldBehaviorPacks.push({\r\n        pack_id: deployProj.defaultBehaviorPackUniqueId,\r\n        version: [0, 0, 1],\r\n      });*/\r\n\r\n      await this.#behaviorPacksStorage.rootFolder.saveAll();\r\n    }\r\n\r\n    if (this.#resourcePacksStorage && this.#defaultWorldStorage) {\r\n      let folderName = undefined;\r\n\r\n      const rpFolder = await deployProj.getDefaultResourcePackFolder();\r\n\r\n      if (rpFolder !== null) {\r\n        folderName = StorageUtilities.getAvailableFolderName(rpFolder);\r\n\r\n        const defaultResourcePackFolder = this.#resourcePacksStorage.rootFolder.ensureFolder(folderName);\r\n\r\n        await defaultResourcePackFolder.ensureExists();\r\n\r\n        /*Log.message(\r\n          \"Synchronizing '\" +\r\n            deployProj.defaultBehaviorPackFolder.fullPath +\r\n            \"' to '\" +\r\n            defaultBehaviorPackFolder.fullPath +\r\n            \"'\"\r\n        );*/\r\n\r\n        filesConsidered += await StorageUtilities.syncFolderTo(\r\n          rpFolder,\r\n          defaultResourcePackFolder,\r\n          false,\r\n          false,\r\n          false\r\n        );\r\n      }\r\n\r\n      if (fromFolder.folders[\"development_resource_packs\"]) {\r\n        const drpSourceFolder = fromFolder.folders[\"development_resource_packs\"];\r\n\r\n        Log.message(\r\n          \"Synchronizing all dev RP folders from '\" +\r\n            drpSourceFolder.fullPath +\r\n            \"' to '\" +\r\n            this.#resourcePacksStorage.rootFolder.fullPath +\r\n            \"'\"\r\n        );\r\n        filesConsidered += await StorageUtilities.syncFolderTo(\r\n          drpSourceFolder,\r\n          this.#resourcePacksStorage.rootFolder,\r\n          false,\r\n          false,\r\n          false,\r\n          folderName ? [folderName] : undefined\r\n        );\r\n      }\r\n\r\n      if (fromFolder.folders[\"resource_packs\"]) {\r\n        const drpSourceFolder = fromFolder.folders[\"resource_packs\"];\r\n\r\n        /*Log.message(\r\n          \"Synchronizing all BP folders from '\" +\r\n            dbpSourceFolder.fullPath +\r\n            \"' to '\" +\r\n            this.#behaviorPacksStorage.rootFolder.fullPath +\r\n            \"'\"\r\n        );*/\r\n\r\n        filesConsidered += await StorageUtilities.syncFolderTo(\r\n          drpSourceFolder,\r\n          this.#resourcePacksStorage.rootFolder,\r\n          false,\r\n          false,\r\n          false,\r\n          folderName ? [folderName] : undefined\r\n        );\r\n      }\r\n\r\n      /*\r\n      const worldResourcePacks: IPackRegistration[] = [];\r\n\r\n      worldResourcePacks.push({\r\n        pack_id: deployProj.defaultResourcePackUniqueId,\r\n        version: [0, 0, 1],\r\n      });*/\r\n\r\n      await this.#resourcePacksStorage.rootFolder.saveAll();\r\n    }\r\n\r\n    if (this.#defaultWorldStorage) {\r\n      const worldFolder = await deployProj.getDefaultWorldFolder();\r\n\r\n      if (worldFolder !== null) {\r\n        if (!worldFolder.isLoaded) {\r\n          await worldFolder.load();\r\n        }\r\n\r\n        if (worldFolder.fileCount > 0) {\r\n          // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n          filesConsidered += await StorageUtilities.syncFolderTo(\r\n            worldFolder,\r\n            this.#defaultWorldStorage.rootFolder,\r\n            false,\r\n            false,\r\n            false\r\n          );\r\n          wroteWorld = true;\r\n          this.#defaultWorldStorage.rootFolder.saveAll();\r\n        }\r\n      }\r\n    }\r\n\r\n    let nextResourcePackThumbprint = undefined;\r\n\r\n    if (doReload && this.#resourcePacksStorage && originalResourcePackTargetThumbprint && this.deployCount > 0) {\r\n      nextResourcePackThumbprint = new Thumbprint();\r\n      await nextResourcePackThumbprint.create(this.#resourcePacksStorage.rootFolder);\r\n\r\n      if (nextResourcePackThumbprint) {\r\n        const diffSet = originalResourcePackTargetThumbprint.compare(nextResourcePackThumbprint, true);\r\n        filesUpdated += diffSet.fileDifferences.length;\r\n\r\n        if (diffSet.fileDifferences.length > 0 || diffSet.folderDifferences.length > 0) {\r\n          Log.message(\r\n            \"Resource pack changes detected (\" +\r\n              diffSet.fileDifferences.length +\r\n              \" files) \u2014 hot-reload disabled, will restart.\"\r\n          );\r\n          doReload = false;\r\n        }\r\n      }\r\n    }\r\n\r\n    let nextBehaviorPackThumbprint = undefined;\r\n\r\n    if (doReload && this.#behaviorPacksStorage && originalBehaviorPackTargetThumbprint && this.deployCount > 0) {\r\n      nextBehaviorPackThumbprint = new Thumbprint();\r\n      await nextBehaviorPackThumbprint.create(this.#behaviorPacksStorage.rootFolder);\r\n\r\n      if (nextBehaviorPackThumbprint) {\r\n        const diffSet = originalBehaviorPackTargetThumbprint.compare(nextBehaviorPackThumbprint, true);\r\n        filesUpdated += diffSet.fileDifferences.length;\r\n\r\n        if (!MinecraftUtilities.isReloadableSetOfChanges(diffSet)) {\r\n          Log.message(\r\n            \"Non-script behavior pack changes detected (\" +\r\n              diffSet.fileDifferences.length +\r\n              \" files) \u2014 hot-reload disabled, will restart.\"\r\n          );\r\n          doReload = false;\r\n        } else {\r\n          Log.message(\r\n            \"Script-only behavior pack changes detected (\" +\r\n              diffSet.fileDifferences.length +\r\n              \" files) \u2014 hot-reload eligible.\"\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    // Always ensure pack references are added to the world, regardless of reload mode\r\n    // This must happen on every deploy, not just when server restarts\r\n    if (this.#defaultWorldStorage && !wroteWorld) {\r\n      const hasScript = await deployProj.hasScript();\r\n      const mcworld = new MCWorld();\r\n\r\n      mcworld.folder = this.#defaultWorldStorage.rootFolder;\r\n\r\n      await mcworld.loadMetaFiles(false);\r\n\r\n      // On a full (non-patch) deploy, reset pack references so only the current\r\n      // project's packs are active. This prevents stale packs from previous\r\n      // projects appearing in the world.\r\n      if (!isPatch) {\r\n        mcworld.worldBehaviorPacks = [];\r\n        mcworld.worldResourcePacks = [];\r\n        mcworld.worldBehaviorPackHistory = { packs: [] };\r\n        mcworld.worldResourcePackHistory = { packs: [] };\r\n      }\r\n\r\n      let needsSave =\r\n        mcworld.ensureBehaviorPack(\r\n          deployProj.defaultBehaviorPackUniqueId,\r\n          deployProj.defaultBehaviorPackVersion,\r\n          deployProj.name\r\n        ) ||\r\n        mcworld.ensureResourcePack(\r\n          deployProj.defaultResourcePackUniqueId,\r\n          deployProj.defaultResourcePackVersion,\r\n          deployProj.name\r\n        );\r\n\r\n      if (!isPatch) {\r\n        needsSave = true;\r\n      }\r\n\r\n      if (hasScript) {\r\n        if (!mcworld.betaApisExperiment) {\r\n          mcworld.betaApisExperiment = true;\r\n\r\n          needsSave = true;\r\n        }\r\n      }\r\n\r\n      if (needsSave) {\r\n        Log.message(\"Updating world pack references for deployed packs.\");\r\n        await mcworld.save();\r\n      }\r\n    }\r\n\r\n    if (!doReload || originalStatus !== DedicatedServerStatus.started) {\r\n      if (originalStatus === DedicatedServerStatus.stopped) {\r\n        Log.message(\"Starting world after deployment.\");\r\n        await this.#dsm.creatorTools?.notifyStatusUpdate(\"Starting server after deployment...\");\r\n      } else if (doReload) {\r\n        Log.message(\"Server needs restarting due to significant file change.\");\r\n        await this.#dsm.creatorTools?.notifyStatusUpdate(\"Restarting server due to file changes...\");\r\n      } else {\r\n        Log.message(\"Ensuring world is started after deployment (\" + originalStatus + \")\");\r\n        await this.#dsm.creatorTools?.notifyStatusUpdate(\"Restarting server for deployment...\");\r\n      }\r\n\r\n      if (originalStatus !== DedicatedServerStatus.stopped) {\r\n        this.#status = DedicatedServerStatus.stopped;\r\n        await this.stopServer();\r\n      }\r\n\r\n      await this.startServer(true, undefined);\r\n      this.deployCount++;\r\n\r\n      // Wait for server to actually be ready before reporting completion\r\n      await this.waitUntilStarted();\r\n\r\n      if (this.status === DedicatedServerStatus.started) {\r\n        Log.important(\"Deployment complete. Server restarted and ready.\");\r\n        await this.#dsm.creatorTools?.notifyStatusUpdate(\"Deployment complete. Server restarted.\");\r\n      } else {\r\n        Log.message(\"Deployment complete but server may still be starting (status: \" + this.status + \")\");\r\n        await this.#dsm.creatorTools?.notifyStatusUpdate(\"Deployment complete. Server starting...\");\r\n      }\r\n    } else if (filesUpdated === 0) {\r\n      this.#status = DedicatedServerStatus.started;\r\n      Log.important(\"No new files deployed.\");\r\n      await this.#dsm.creatorTools?.notifyStatusUpdate(\"Deployment complete. No new files.\");\r\n      await this.runCommand(\"say World has been reloaded.\");\r\n      this.#onServerRefreshed.dispatch(this, \"reload\");\r\n    } else {\r\n      this.#status = DedicatedServerStatus.started;\r\n\r\n      Log.important(\r\n        filesUpdated + \" files updated; hot-reloading world '\" + this.name + \"' at \" + new Date().toString()\r\n      );\r\n      await this.#dsm.creatorTools?.notifyStatusUpdate(\"Hot-reloading \" + filesUpdated + \" files...\");\r\n      await this.runCommand(\"reload\");\r\n      await this.runCommand(\"say World has been reloaded.\");\r\n      Log.important(\"Deployment complete. World hot-reloaded.\");\r\n      await this.#dsm.creatorTools?.notifyStatusUpdate(\"Deployment complete. World hot-reloaded.\");\r\n      this.#onServerRefreshed.dispatch(this, \"reload\");\r\n    }\r\n  }\r\n\r\n  async directOutput(readable: Readable) {\r\n    let time = new Date().getTime();\r\n\r\n    for await (const line of chunksToLinesAsync(readable)) {\r\n      if (line !== undefined && line.length >= 0) {\r\n        let lineUp = line.replace(/\\\\n/g, \"\");\r\n        lineUp = lineUp.replace(/\\\\r/g, \"\").trim();\r\n\r\n        let port = this.port;\r\n\r\n        if (!port) {\r\n          port = 19132;\r\n        }\r\n\r\n        const sm = new ServerMessage(lineUp);\r\n\r\n        // Use verbose logging for per-line BDS output to avoid double-logging\r\n        // in serve mode (where the Ink UI already renders these via onServerOutput).\r\n        // Important messages (server started, errors) are logged separately at message level.\r\n        if (sm.category !== ServerMessageCategory.internalSystemMessage) {\r\n          Log.verbose(this.name + \"@\" + port + \": \" + lineUp);\r\n        }\r\n\r\n        if (sm.category === ServerMessageCategory.serverStarted) {\r\n          this.#starts++;\r\n\r\n          // EXPERIMENT: Delay the ENTIRE debugger setup (including `script debugger listen`)\r\n          // until after a player joins. This tests if the debugger listen command itself\r\n          // is what blocks player connections.\r\n          if (this.#enableDebugger && this.#enableDebuggerStreaming) {\r\n            if (this.#delayDebugClientUntilPlayerJoins) {\r\n              Log.debug(`[Debug] Debugger enabled but DELAYING 'script debugger listen' until player joins`);\r\n              this.#debugListenerReady = false; // Mark as not ready yet\r\n            } else {\r\n              // Original behavior: send command after server start\r\n              const me = this;\r\n              const debugPort = this.debugPort;\r\n              setTimeout(async function () {\r\n                Log.debug(`[Debug] Sending 'script debugger listen ${debugPort}' command...`);\r\n                me.#awaitingDebuggerListening = true;\r\n                await me.runCommand(`script debugger listen ${debugPort}`);\r\n                Log.debug(`[Debug] Command sent, waiting for 'Debugger listening' response...`);\r\n\r\n                // Fallback timeout: if we don't receive \"Debugger listening\" within 10 seconds,\r\n                // mark the listener as ready anyway (for cases where the message might not be sent)\r\n                setTimeout(function () {\r\n                  if (me.#awaitingDebuggerListening && me.#enableDebuggerStreaming) {\r\n                    me.#awaitingDebuggerListening = false;\r\n                    me.#debugListenerReady = true;\r\n                    if (me.#delayDebugClientUntilPlayerJoins) {\r\n                      Log.debug(`[Debug] Timeout waiting for 'Debugger listening', will connect when player joins...`);\r\n                    } else {\r\n                      Log.debug(`[Debug] Timeout waiting for 'Debugger listening', attempting connection anyway...`);\r\n                      me.connectDebugClient();\r\n                    }\r\n                  }\r\n                }, 10000);\r\n              }, 3000); // 3 second delay before enabling debugger\r\n            }\r\n          }\r\n\r\n          this.#status = DedicatedServerStatus.started;\r\n          this.handleServerStarted(lineUp);\r\n        } else if (sm.category === ServerMessageCategory.debuggerListening) {\r\n          // Minecraft has confirmed the debug listener is ready\r\n          if (this.#awaitingDebuggerListening) {\r\n            this.#awaitingDebuggerListening = false;\r\n            this.#debugListenerReady = true;\r\n\r\n            if (this.#enableDebuggerStreaming) {\r\n              // Check if we have any players connected already (post-player-join scenario)\r\n              if (this.#delayDebugClientUntilPlayerJoins && !this.#hasPlayerJoined) {\r\n                // No players yet - wait for them\r\n                Log.debug(`[Debug] Debugger listening - waiting for player to join before connecting client`);\r\n              } else {\r\n                // Either not delaying, or player already joined (triggered debugger setup)\r\n                Log.debug(`[Debug] Debugger listening, connecting debug client...`);\r\n                this.connectDebugClient();\r\n              }\r\n            } else {\r\n              Log.debug(`[Debug] Debugger listening, but streaming not enabled, skipping client connection`);\r\n            }\r\n          }\r\n        } else if (sm.category === ServerMessageCategory.serverStopped) {\r\n          await this.continueStopServer();\r\n        } else if (sm.category === ServerMessageCategory.playerConnected) {\r\n          const playerName = this.getPlayerIdFromLine(lineUp);\r\n          const xuid = this.getPlayerXuidFromLine(lineUp);\r\n\r\n          Log.message(\"Player '\" + playerName + \"' connected.\");\r\n\r\n          // Mark that at least one player has joined\r\n          this.#hasPlayerJoined = true;\r\n\r\n          // If we were waiting for a player to join before starting debug, do it now\r\n          if (\r\n            this.#enableDebugger &&\r\n            this.#enableDebuggerStreaming &&\r\n            !this.#debugClient &&\r\n            this.#delayDebugClientUntilPlayerJoins\r\n          ) {\r\n            Log.debug(`[Debug] Player connected - NOW starting debugger setup (was delayed until player join)...`);\r\n            const me = this;\r\n            const debugPort = this.debugPort;\r\n\r\n            // Start the debugger listen command now that a player has joined\r\n            setTimeout(async function () {\r\n              Log.debug(`[Debug] Sending 'script debugger listen ${debugPort}' command (post-player-join)...`);\r\n              me.#awaitingDebuggerListening = true;\r\n              await me.runCommand(`script debugger listen ${debugPort}`);\r\n              Log.debug(`[Debug] Command sent, waiting for 'Debugger listening' response...`);\r\n\r\n              // Fallback timeout\r\n              setTimeout(function () {\r\n                if (me.#awaitingDebuggerListening && me.#enableDebuggerStreaming) {\r\n                  me.#awaitingDebuggerListening = false;\r\n                  me.#debugListenerReady = true;\r\n                  Log.debug(`[Debug] Timeout waiting for 'Debugger listening', connecting client anyway...`);\r\n                  me.connectDebugClient();\r\n                }\r\n              }, 10000);\r\n            }, 1000); // Small delay after player join\r\n          }\r\n\r\n          if (playerName && xuid) {\r\n            const p = new Player();\r\n            // Security: Sanitize player name to prevent path traversal\r\n            p.id = SecurityUtilities.sanitizePlayerName(playerName);\r\n            p.xuid = xuid;\r\n\r\n            this.handlePlayerConnected(p);\r\n          }\r\n        } else if (sm.category === ServerMessageCategory.playerDisconnected) {\r\n          const playerName = this.getPlayerIdFromLine(lineUp);\r\n          const xuid = this.getPlayerXuidFromLine(lineUp);\r\n\r\n          Log.message(\"Player '\" + playerName + \"' disconnected.\");\r\n\r\n          if (playerName && xuid) {\r\n            const p = new Player();\r\n            // Security: Sanitize player name to prevent path traversal\r\n            p.id = SecurityUtilities.sanitizePlayerName(playerName);\r\n            p.xuid = xuid;\r\n\r\n            this.handlePlayerDisconnected(p);\r\n          } // Changes to the world are resumed.\r\n        } else if (\r\n          sm.category === ServerMessageCategory.backupSaving &&\r\n          this.#backupStatus === DedicatedServerBackupStatus.suspendingSaveCommandIssued\r\n        ) {\r\n          this.#backupStatus = DedicatedServerBackupStatus.suspendingQueryCommandIssued;\r\n          this.runCommand(\"save query\");\r\n        } else if (\r\n          sm.category === ServerMessageCategory.backupSaved &&\r\n          this.#backupStatus === DedicatedServerBackupStatus.suspendingQueryCommandIssued\r\n        ) {\r\n          this.#backupStatus = DedicatedServerBackupStatus.suspendingQueryResultsPending;\r\n        } else if (\r\n          sm.category === ServerMessageCategory.levelDatUpdate &&\r\n          this.#backupStatus === DedicatedServerBackupStatus.suspendingQueryResultsPending\r\n        ) {\r\n          this.#backupStatus = DedicatedServerBackupStatus.copyingFiles;\r\n          await this.doBackup(lineUp);\r\n          this.#backupStatus = DedicatedServerBackupStatus.resumingSave;\r\n          this.runCommand(\"save resume\");\r\n        } else if (\r\n          sm.category === ServerMessageCategory.backupComplete &&\r\n          this.#backupStatus === DedicatedServerBackupStatus.resumingSave\r\n        ) {\r\n          this.#backupStatus = DedicatedServerBackupStatus.none;\r\n          // Clear the backup timeout since backup completed successfully\r\n          if (this.#backupTimeoutTimer) {\r\n            clearTimeout(this.#backupTimeoutTimer);\r\n            this.#backupTimeoutTimer = undefined;\r\n          }\r\n        } else if (sm.category === ServerMessageCategory.gameTestLoaded) {\r\n          let testName = this.getTestIdFromLine(lineUp);\r\n          if (testName === undefined) {\r\n            testName = \"(unknown test id)\";\r\n          }\r\n\r\n          this.#onTestStarted.dispatch(this, testName);\r\n        } else if (sm.category === ServerMessageCategory.gameTestFailed) {\r\n          let testName = this.getTestIdFromLine(lineUp);\r\n          if (testName === undefined) {\r\n            testName = \"(unknown test id)\";\r\n          }\r\n\r\n          this.#onTestFailed.dispatch(this, testName);\r\n        } else if (sm.category === ServerMessageCategory.gameTestPassed) {\r\n          let testName = this.getTestIdFromLine(lineUp);\r\n          if (testName === undefined) {\r\n            testName = \"(unknown test id)\";\r\n          }\r\n\r\n          this.#onTestSucceeded.dispatch(this, testName);\r\n        }\r\n\r\n        this.#lastResult = lineUp;\r\n        if (this.outputLines.length > 10000) {\r\n          this.outputLines.splice(0, 5000);\r\n        }\r\n        this.outputLines.push({\r\n          message: lineUp,\r\n          received: time,\r\n          isInternal: sm.category === ServerMessageCategory.internalSystemMessage,\r\n        });\r\n        time++;\r\n\r\n        this.#onServerOutput.dispatch(this, sm);\r\n      }\r\n    }\r\n  }\r\n\r\n  handleServerStarted(line: string) {\r\n    Log.message(\"handleServerStarted called: \" + line);\r\n\r\n    if (this.gameTest) {\r\n      const me = this;\r\n\r\n      setTimeout(async function () {\r\n        Log.message(\"Running gametest \" + me.gameTest);\r\n        await me.writeToServer(\"gametest run \" + me.gameTest);\r\n      }, 5000);\r\n    }\r\n\r\n    // Start player position polling\r\n    this.startPlayerPositionPolling();\r\n\r\n    // Note: Debug client connection is now handled in directOutput() after\r\n    // the \"script debugger listen\" command completes. This ensures proper\r\n    // sequencing: server starts -> debugger listener starts -> client connects.\r\n\r\n    this.#onServerStarted.dispatch(this, line);\r\n  }\r\n\r\n  /**\r\n   * Connect to the Minecraft script debugger.\r\n   * The server should already be listening on the debug port after\r\n   * receiving the \"script debugger listen <port>\" command.\r\n   */\r\n  async connectDebugClient() {\r\n    if (this.#debugClient) {\r\n      Log.debug(`[Debug] connectDebugClient: Already have a debug client, skipping`);\r\n      return;\r\n    }\r\n\r\n    const port = this.debugPort;\r\n    Log.debug(`[Debug] connectDebugClient: Creating MinecraftDebugClient for localhost:${port}...`);\r\n\r\n    // Note: We no longer need to wait here because we're triggered by the\r\n    // \"Debugger listening\" message, which confirms the listener is ready.\r\n\r\n    this.#debugClient = new MinecraftDebugClient();\r\n\r\n    // Wire up debug client events\r\n    this.#debugClient.onConnected.subscribe((client, sessionInfo) => {\r\n      Log.debug(`[Debug] Debug client connected: protocol v${sessionInfo.protocolVersion}`);\r\n      this.#onDebugConnected.dispatch(this, sessionInfo);\r\n    });\r\n\r\n    this.#debugClient.onDisconnected.subscribe((client, reason) => {\r\n      Log.debug(`[Debug] Debug client disconnected: ${reason}`);\r\n      this.#onDebugDisconnected.dispatch(this, reason);\r\n    });\r\n\r\n    this.#debugClient.onStats.subscribe((client, statsData) => {\r\n      Log.verbose(`[Debug] DedicatedServer: Received stats tick=${statsData.tick}, stats=${statsData.stats.length}`);\r\n      this.#onDebugStats.dispatch(this, statsData);\r\n    });\r\n\r\n    this.#debugClient.onStopped.subscribe((client, stoppedEvent) => {\r\n      Log.verbose(`[Debug] Script execution paused: ${stoppedEvent.reason}`);\r\n      this.#onDebugPaused.dispatch(this, stoppedEvent.reason);\r\n    });\r\n\r\n    this.#debugClient.onProfilerCapture.subscribe((client, captureEvent) => {\r\n      Log.message(`[Debug] Profiler capture received: ${captureEvent.capture_base_path}`);\r\n      this.#onProfilerCapture.dispatch(this, captureEvent);\r\n    });\r\n\r\n    this.#debugClient.onError.subscribe((client, error) => {\r\n      Log.debug(`Debug client error: ${error}`);\r\n    });\r\n\r\n    try {\r\n      Log.debug(`[Debug] connectDebugClient: Calling connect(localhost, ${this.debugPort})...`);\r\n      await this.#debugClient.connect(\"localhost\", this.debugPort);\r\n      Log.debug(`[Debug] connectDebugClient: connect() returned successfully`);\r\n    } catch (e) {\r\n      Log.message(`[Debug] connectDebugClient: connect() FAILED: ${e}`);\r\n      this.#debugClient = undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Disconnect the debug client if connected.\r\n   */\r\n  disconnectDebugClient() {\r\n    if (this.#debugClient) {\r\n      this.#debugClient.disconnect();\r\n      this.#debugClient = undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Start polling for player positions.\r\n   * Uses /querytarget @a to get all player positions periodically.\r\n   */\r\n  startPlayerPositionPolling() {\r\n    if (this.#playerPositionPollInterval) {\r\n      return; // Already polling\r\n    }\r\n\r\n    Log.message(\"Starting player position polling\");\r\n\r\n    const pollFn = async () => {\r\n      if (this.#status !== DedicatedServerStatus.started) {\r\n        return;\r\n      }\r\n\r\n      try {\r\n        // Run querytarget @a to get all player positions\r\n        // Note: The command output is multi-line, so we need to scan outputLines\r\n        const startLineIndex = this.outputLines.length;\r\n        await this.runInternalCommand(\"querytarget @a\");\r\n\r\n        // Wait a moment for output to accumulate\r\n        await Utilities.sleep(500);\r\n\r\n        // Scan recent output lines for \"Target data:\" and collect the JSON\r\n        let jsonLines: string[] = [];\r\n        let collecting = false;\r\n        let bracketCount = 0;\r\n\r\n        for (let i = startLineIndex; i < this.outputLines.length; i++) {\r\n          const line = this.outputLines[i].message;\r\n\r\n          // Look for \"Target data:\" to start collecting\r\n          if (line.includes(\"Target data:\")) {\r\n            collecting = true;\r\n            // Extract the part after \"Target data:\"\r\n            const dataStart = line.indexOf(\"Target data:\");\r\n            const afterData = line.substring(dataStart + \"Target data:\".length).trim();\r\n            if (afterData) {\r\n              jsonLines.push(afterData);\r\n              bracketCount += (afterData.match(/\\[/g) || []).length;\r\n              bracketCount -= (afterData.match(/\\]/g) || []).length;\r\n            }\r\n            continue;\r\n          }\r\n\r\n          if (collecting) {\r\n            // Skip timestamp prefixes like \"[2025-12-29 15:06:24:053 INFO]\"\r\n            let cleanLine = line;\r\n            if (cleanLine.match(/^\\[\\d{4}-\\d{2}-\\d{2}/)) {\r\n              // This is a new log line, stop collecting\r\n              break;\r\n            }\r\n\r\n            jsonLines.push(cleanLine);\r\n            bracketCount += (cleanLine.match(/\\[/g) || []).length;\r\n            bracketCount -= (cleanLine.match(/\\]/g) || []).length;\r\n\r\n            // If brackets are balanced, we have complete JSON\r\n            if (bracketCount === 0 && jsonLines.length > 0) {\r\n              break;\r\n            }\r\n          }\r\n        }\r\n\r\n        if (jsonLines.length > 0) {\r\n          const jsonStr = jsonLines.join(\"\");\r\n          Log.verbose(\"Collected JSON: \" + jsonStr.substring(0, 100) + \"...\");\r\n\r\n          if (jsonStr.startsWith(\"[\")) {\r\n            const players = JSON.parse(jsonStr) as Array<{\r\n              uniqueId?: string;\r\n              id?: number;\r\n              dimension?: number;\r\n              position?: { x: number; y: number; z: number };\r\n              yRot?: number;\r\n            }>;\r\n\r\n            Log.verbose(\"Parsed \" + players.length + \" players from querytarget\");\r\n\r\n            for (const player of players) {\r\n              if (player.uniqueId && player.position) {\r\n                const playerId = player.uniqueId;\r\n                const lastPos = this.#lastPlayerPositions.get(playerId);\r\n                const newPos = player.position;\r\n                const dimension = player.dimension ?? 0;\r\n\r\n                // Check if the player moved significantly\r\n                let shouldDispatch = !lastPos;\r\n                if (lastPos) {\r\n                  const dx = newPos.x - lastPos.x;\r\n                  const dy = newPos.y - lastPos.y;\r\n                  const dz = newPos.z - lastPos.z;\r\n                  const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);\r\n                  shouldDispatch = distance >= PLAYER_MOVE_THRESHOLD || dimension !== lastPos.dimension;\r\n                }\r\n\r\n                if (shouldDispatch) {\r\n                  this.#lastPlayerPositions.set(playerId, { ...newPos, dimension });\r\n\r\n                  // Get player name from connected players\r\n                  const playerName = this.getPlayerNameFromId(playerId) ?? playerId;\r\n\r\n                  Log.message(\"Dispatching player position update for \" + playerName + \" at \" + JSON.stringify(newPos));\r\n\r\n                  // Dispatch a PlayerTravelled-style event\r\n                  const travelEvent = {\r\n                    eventId: `poll_${Date.now()}_${playerId}`,\r\n                    header: {\r\n                      eventName: \"PlayerTravelled\",\r\n                      purpose: \"event\",\r\n                      version: 1,\r\n                    },\r\n                    body: {\r\n                      isUnderwater: false,\r\n                      metersTravelled: lastPos\r\n                        ? Math.sqrt(\r\n                            (newPos.x - lastPos.x) ** 2 + (newPos.y - lastPos.y) ** 2 + (newPos.z - lastPos.z) ** 2\r\n                          )\r\n                        : 0,\r\n                      newBiome: 0,\r\n                      player: {\r\n                        color: \"\",\r\n                        dimension: dimension,\r\n                        id: player.id ?? 0,\r\n                        name: playerName,\r\n                        position: newPos,\r\n                        type: \"player\",\r\n                        variant: 0,\r\n                        yRot: player.yRot ?? 0,\r\n                      },\r\n                      travelMethod: 0,\r\n                    },\r\n                  };\r\n\r\n                  this.#onServerGameEvent.dispatch(this, travelEvent);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } catch (e) {\r\n        // Ignore parse errors - querytarget may return error messages if no players\r\n        Log.verbose(\"Player position poll error: \" + e);\r\n      }\r\n    };\r\n\r\n    // Start polling after a short delay and then on interval\r\n    setTimeout(pollFn, 2000);\r\n    this.#playerPositionPollInterval = setInterval(pollFn, PLAYER_POSITION_POLL_INTERVAL);\r\n  }\r\n\r\n  /**\r\n   * Stop player position polling.\r\n   */\r\n  stopPlayerPositionPolling() {\r\n    if (this.#playerPositionPollInterval) {\r\n      clearInterval(this.#playerPositionPollInterval);\r\n      this.#playerPositionPollInterval = undefined;\r\n    }\r\n    this.#lastPlayerPositions.clear();\r\n  }\r\n\r\n  /**\r\n   * Get player name from uniqueId by looking up connected players.\r\n   */\r\n  getPlayerNameFromId(uniqueId: string): string | undefined {\r\n    // The uniqueId from querytarget is a long integer as string\r\n    // We need to match it against xuid in connected players\r\n    // For now, just return undefined and use uniqueId\r\n    return undefined;\r\n  }\r\n\r\n  handlePlayerConnected(player: Player) {\r\n    if (this.#opList) {\r\n      for (let i = 0; i < this.#opList.length; i++) {\r\n        const op = this.#opList[i];\r\n        const me = this;\r\n\r\n        if (op === player.id) {\r\n          setTimeout(async function () {\r\n            await me.writeToServer(\"op \" + player.id);\r\n          }, 5000);\r\n        }\r\n      }\r\n    }\r\n\r\n    this.#onPlayerConnected.dispatch(this, player);\r\n  }\r\n\r\n  handlePlayerDisconnected(player: Player) {\r\n    this.#onPlayerDisconnected.dispatch(this, player);\r\n  }\r\n\r\n  getTestIdFromLine(line: string) {\r\n    const firstColon = line.indexOf(\":\");\r\n\r\n    if (firstColon < 0) {\r\n      return undefined;\r\n    }\r\n\r\n    let nextSpace = line.indexOf(\" \", firstColon + 1);\r\n\r\n    if (nextSpace < 0) {\r\n      nextSpace = line.length;\r\n    }\r\n\r\n    return line.substring(firstColon + 1, nextSpace);\r\n  }\r\n\r\n  getPlayerIdFromLine(line: string) {\r\n    const playerIndex = line.indexOf(\"Player \");\r\n\r\n    if (playerIndex < 0) {\r\n      return undefined;\r\n    }\r\n\r\n    const nextColon = line.indexOf(\":\", playerIndex);\r\n\r\n    if (nextColon < 0) {\r\n      return undefined;\r\n    }\r\n\r\n    const nextComma = line.indexOf(\",\", nextColon);\r\n    if (nextComma < 0) {\r\n      return undefined;\r\n    }\r\n\r\n    return line.substring(nextColon + 2, nextComma);\r\n  }\r\n\r\n  getPlayerXuidFromLine(line: string) {\r\n    const xuidIndex = line.indexOf(\"xuid\");\r\n\r\n    if (xuidIndex < 0) {\r\n      return undefined;\r\n    }\r\n\r\n    const nextColon = line.indexOf(\":\", xuidIndex);\r\n\r\n    if (nextColon < 0) {\r\n      return undefined;\r\n    }\r\n\r\n    let nextComma = line.indexOf(\",\", nextColon);\r\n    if (nextComma < 0) {\r\n      nextComma = line.length;\r\n    }\r\n\r\n    return line.substring(nextColon + 2, nextComma);\r\n  }\r\n\r\n  async directErrors(readable: Readable) {\r\n    for await (const line of chunksToLinesAsync(readable)) {\r\n      if (line !== undefined && line.length >= 0) {\r\n        let lineUp = line.replace(/\\\\n/g, \"\");\r\n        lineUp = lineUp.replace(/\\\\r/g, \"\");\r\n\r\n        this.#onServerError.dispatch(this, lineUp);\r\n\r\n        Log.message(\"Server error: \" + lineUp);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n  BINARY_TYPES,\n  EMPTY_BUFFER: Buffer.alloc(0),\n  GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n  hasBlob,\n  kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n  kListener: Symbol('kListener'),\n  kStatusCode: Symbol('status-code'),\n  kWebSocket: Symbol('websocket'),\n  NOOP: () => {}\n};\n", "'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n  if (list.length === 0) return EMPTY_BUFFER;\n  if (list.length === 1) return list[0];\n\n  const target = Buffer.allocUnsafe(totalLength);\n  let offset = 0;\n\n  for (let i = 0; i < list.length; i++) {\n    const buf = list[i];\n    target.set(buf, offset);\n    offset += buf.length;\n  }\n\n  if (offset < totalLength) {\n    return new FastBuffer(target.buffer, target.byteOffset, offset);\n  }\n\n  return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n  for (let i = 0; i < length; i++) {\n    output[offset + i] = source[i] ^ mask[i & 3];\n  }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n  for (let i = 0; i < buffer.length; i++) {\n    buffer[i] ^= mask[i & 3];\n  }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n  if (buf.length === buf.buffer.byteLength) {\n    return buf.buffer;\n  }\n\n  return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n  toBuffer.readOnly = true;\n\n  if (Buffer.isBuffer(data)) return data;\n\n  let buf;\n\n  if (data instanceof ArrayBuffer) {\n    buf = new FastBuffer(data);\n  } else if (ArrayBuffer.isView(data)) {\n    buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n  } else {\n    buf = Buffer.from(data);\n    toBuffer.readOnly = false;\n  }\n\n  return buf;\n}\n\nmodule.exports = {\n  concat,\n  mask: _mask,\n  toArrayBuffer,\n  toBuffer,\n  unmask: _unmask\n};\n\n/* istanbul ignore else  */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n  try {\n    const bufferUtil = require('bufferutil');\n\n    module.exports.mask = function (source, mask, output, offset, length) {\n      if (length < 48) _mask(source, mask, output, offset, length);\n      else bufferUtil.mask(source, mask, output, offset, length);\n    };\n\n    module.exports.unmask = function (buffer, mask) {\n      if (buffer.length < 32) _unmask(buffer, mask);\n      else bufferUtil.unmask(buffer, mask);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\n  }\n}\n", "'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n  /**\n   * Creates a new `Limiter`.\n   *\n   * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n   *     to run concurrently\n   */\n  constructor(concurrency) {\n    this[kDone] = () => {\n      this.pending--;\n      this[kRun]();\n    };\n    this.concurrency = concurrency || Infinity;\n    this.jobs = [];\n    this.pending = 0;\n  }\n\n  /**\n   * Adds a job to the queue.\n   *\n   * @param {Function} job The job to run\n   * @public\n   */\n  add(job) {\n    this.jobs.push(job);\n    this[kRun]();\n  }\n\n  /**\n   * Removes a job from the queue and runs it if possible.\n   *\n   * @private\n   */\n  [kRun]() {\n    if (this.pending === this.concurrency) return;\n\n    if (this.jobs.length) {\n      const job = this.jobs.shift();\n\n      this.pending++;\n      job(this[kDone]);\n    }\n  }\n}\n\nmodule.exports = Limiter;\n", "'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n  /**\n   * Creates a PerMessageDeflate instance.\n   *\n   * @param {Object} [options] Configuration options\n   * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n   *     for, or request, a custom client window size\n   * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n   *     acknowledge disabling of client context takeover\n   * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n   *     calls to zlib\n   * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n   *     use of a custom server window size\n   * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n   *     disabling of server context takeover\n   * @param {Number} [options.threshold=1024] Size (in bytes) below which\n   *     messages should not be compressed if context takeover is disabled\n   * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n   *     deflate\n   * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n   *     inflate\n   * @param {Boolean} [isServer=false] Create the instance in either server or\n   *     client mode\n   * @param {Number} [maxPayload=0] The maximum allowed message length\n   */\n  constructor(options, isServer, maxPayload) {\n    this._maxPayload = maxPayload | 0;\n    this._options = options || {};\n    this._threshold =\n      this._options.threshold !== undefined ? this._options.threshold : 1024;\n    this._isServer = !!isServer;\n    this._deflate = null;\n    this._inflate = null;\n\n    this.params = null;\n\n    if (!zlibLimiter) {\n      const concurrency =\n        this._options.concurrencyLimit !== undefined\n          ? this._options.concurrencyLimit\n          : 10;\n      zlibLimiter = new Limiter(concurrency);\n    }\n  }\n\n  /**\n   * @type {String}\n   */\n  static get extensionName() {\n    return 'permessage-deflate';\n  }\n\n  /**\n   * Create an extension negotiation offer.\n   *\n   * @return {Object} Extension parameters\n   * @public\n   */\n  offer() {\n    const params = {};\n\n    if (this._options.serverNoContextTakeover) {\n      params.server_no_context_takeover = true;\n    }\n    if (this._options.clientNoContextTakeover) {\n      params.client_no_context_takeover = true;\n    }\n    if (this._options.serverMaxWindowBits) {\n      params.server_max_window_bits = this._options.serverMaxWindowBits;\n    }\n    if (this._options.clientMaxWindowBits) {\n      params.client_max_window_bits = this._options.clientMaxWindowBits;\n    } else if (this._options.clientMaxWindowBits == null) {\n      params.client_max_window_bits = true;\n    }\n\n    return params;\n  }\n\n  /**\n   * Accept an extension negotiation offer/response.\n   *\n   * @param {Array} configurations The extension negotiation offers/reponse\n   * @return {Object} Accepted configuration\n   * @public\n   */\n  accept(configurations) {\n    configurations = this.normalizeParams(configurations);\n\n    this.params = this._isServer\n      ? this.acceptAsServer(configurations)\n      : this.acceptAsClient(configurations);\n\n    return this.params;\n  }\n\n  /**\n   * Releases all resources used by the extension.\n   *\n   * @public\n   */\n  cleanup() {\n    if (this._inflate) {\n      this._inflate.close();\n      this._inflate = null;\n    }\n\n    if (this._deflate) {\n      const callback = this._deflate[kCallback];\n\n      this._deflate.close();\n      this._deflate = null;\n\n      if (callback) {\n        callback(\n          new Error(\n            'The deflate stream was closed while data was being processed'\n          )\n        );\n      }\n    }\n  }\n\n  /**\n   *  Accept an extension negotiation offer.\n   *\n   * @param {Array} offers The extension negotiation offers\n   * @return {Object} Accepted configuration\n   * @private\n   */\n  acceptAsServer(offers) {\n    const opts = this._options;\n    const accepted = offers.find((params) => {\n      if (\n        (opts.serverNoContextTakeover === false &&\n          params.server_no_context_takeover) ||\n        (params.server_max_window_bits &&\n          (opts.serverMaxWindowBits === false ||\n            (typeof opts.serverMaxWindowBits === 'number' &&\n              opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n        (typeof opts.clientMaxWindowBits === 'number' &&\n          !params.client_max_window_bits)\n      ) {\n        return false;\n      }\n\n      return true;\n    });\n\n    if (!accepted) {\n      throw new Error('None of the extension offers can be accepted');\n    }\n\n    if (opts.serverNoContextTakeover) {\n      accepted.server_no_context_takeover = true;\n    }\n    if (opts.clientNoContextTakeover) {\n      accepted.client_no_context_takeover = true;\n    }\n    if (typeof opts.serverMaxWindowBits === 'number') {\n      accepted.server_max_window_bits = opts.serverMaxWindowBits;\n    }\n    if (typeof opts.clientMaxWindowBits === 'number') {\n      accepted.client_max_window_bits = opts.clientMaxWindowBits;\n    } else if (\n      accepted.client_max_window_bits === true ||\n      opts.clientMaxWindowBits === false\n    ) {\n      delete accepted.client_max_window_bits;\n    }\n\n    return accepted;\n  }\n\n  /**\n   * Accept the extension negotiation response.\n   *\n   * @param {Array} response The extension negotiation response\n   * @return {Object} Accepted configuration\n   * @private\n   */\n  acceptAsClient(response) {\n    const params = response[0];\n\n    if (\n      this._options.clientNoContextTakeover === false &&\n      params.client_no_context_takeover\n    ) {\n      throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n    }\n\n    if (!params.client_max_window_bits) {\n      if (typeof this._options.clientMaxWindowBits === 'number') {\n        params.client_max_window_bits = this._options.clientMaxWindowBits;\n      }\n    } else if (\n      this._options.clientMaxWindowBits === false ||\n      (typeof this._options.clientMaxWindowBits === 'number' &&\n        params.client_max_window_bits > this._options.clientMaxWindowBits)\n    ) {\n      throw new Error(\n        'Unexpected or invalid parameter \"client_max_window_bits\"'\n      );\n    }\n\n    return params;\n  }\n\n  /**\n   * Normalize parameters.\n   *\n   * @param {Array} configurations The extension negotiation offers/reponse\n   * @return {Array} The offers/response with normalized parameters\n   * @private\n   */\n  normalizeParams(configurations) {\n    configurations.forEach((params) => {\n      Object.keys(params).forEach((key) => {\n        let value = params[key];\n\n        if (value.length > 1) {\n          throw new Error(`Parameter \"${key}\" must have only a single value`);\n        }\n\n        value = value[0];\n\n        if (key === 'client_max_window_bits') {\n          if (value !== true) {\n            const num = +value;\n            if (!Number.isInteger(num) || num < 8 || num > 15) {\n              throw new TypeError(\n                `Invalid value for parameter \"${key}\": ${value}`\n              );\n            }\n            value = num;\n          } else if (!this._isServer) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n        } else if (key === 'server_max_window_bits') {\n          const num = +value;\n          if (!Number.isInteger(num) || num < 8 || num > 15) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n          value = num;\n        } else if (\n          key === 'client_no_context_takeover' ||\n          key === 'server_no_context_takeover'\n        ) {\n          if (value !== true) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n        } else {\n          throw new Error(`Unknown parameter \"${key}\"`);\n        }\n\n        params[key] = value;\n      });\n    });\n\n    return configurations;\n  }\n\n  /**\n   * Decompress data. Concurrency limited.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @public\n   */\n  decompress(data, fin, callback) {\n    zlibLimiter.add((done) => {\n      this._decompress(data, fin, (err, result) => {\n        done();\n        callback(err, result);\n      });\n    });\n  }\n\n  /**\n   * Compress data. Concurrency limited.\n   *\n   * @param {(Buffer|String)} data Data to compress\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @public\n   */\n  compress(data, fin, callback) {\n    zlibLimiter.add((done) => {\n      this._compress(data, fin, (err, result) => {\n        done();\n        callback(err, result);\n      });\n    });\n  }\n\n  /**\n   * Decompress data.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @private\n   */\n  _decompress(data, fin, callback) {\n    const endpoint = this._isServer ? 'client' : 'server';\n\n    if (!this._inflate) {\n      const key = `${endpoint}_max_window_bits`;\n      const windowBits =\n        typeof this.params[key] !== 'number'\n          ? zlib.Z_DEFAULT_WINDOWBITS\n          : this.params[key];\n\n      this._inflate = zlib.createInflateRaw({\n        ...this._options.zlibInflateOptions,\n        windowBits\n      });\n      this._inflate[kPerMessageDeflate] = this;\n      this._inflate[kTotalLength] = 0;\n      this._inflate[kBuffers] = [];\n      this._inflate.on('error', inflateOnError);\n      this._inflate.on('data', inflateOnData);\n    }\n\n    this._inflate[kCallback] = callback;\n\n    this._inflate.write(data);\n    if (fin) this._inflate.write(TRAILER);\n\n    this._inflate.flush(() => {\n      const err = this._inflate[kError];\n\n      if (err) {\n        this._inflate.close();\n        this._inflate = null;\n        callback(err);\n        return;\n      }\n\n      const data = bufferUtil.concat(\n        this._inflate[kBuffers],\n        this._inflate[kTotalLength]\n      );\n\n      if (this._inflate._readableState.endEmitted) {\n        this._inflate.close();\n        this._inflate = null;\n      } else {\n        this._inflate[kTotalLength] = 0;\n        this._inflate[kBuffers] = [];\n\n        if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n          this._inflate.reset();\n        }\n      }\n\n      callback(null, data);\n    });\n  }\n\n  /**\n   * Compress data.\n   *\n   * @param {(Buffer|String)} data Data to compress\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @private\n   */\n  _compress(data, fin, callback) {\n    const endpoint = this._isServer ? 'server' : 'client';\n\n    if (!this._deflate) {\n      const key = `${endpoint}_max_window_bits`;\n      const windowBits =\n        typeof this.params[key] !== 'number'\n          ? zlib.Z_DEFAULT_WINDOWBITS\n          : this.params[key];\n\n      this._deflate = zlib.createDeflateRaw({\n        ...this._options.zlibDeflateOptions,\n        windowBits\n      });\n\n      this._deflate[kTotalLength] = 0;\n      this._deflate[kBuffers] = [];\n\n      this._deflate.on('data', deflateOnData);\n    }\n\n    this._deflate[kCallback] = callback;\n\n    this._deflate.write(data);\n    this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n      if (!this._deflate) {\n        //\n        // The deflate stream was closed while data was being processed.\n        //\n        return;\n      }\n\n      let data = bufferUtil.concat(\n        this._deflate[kBuffers],\n        this._deflate[kTotalLength]\n      );\n\n      if (fin) {\n        data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n      }\n\n      //\n      // Ensure that the callback will not be called again in\n      // `PerMessageDeflate#cleanup()`.\n      //\n      this._deflate[kCallback] = null;\n\n      this._deflate[kTotalLength] = 0;\n      this._deflate[kBuffers] = [];\n\n      if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n        this._deflate.reset();\n      }\n\n      callback(null, data);\n    });\n  }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n  this[kBuffers].push(chunk);\n  this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n  this[kTotalLength] += chunk.length;\n\n  if (\n    this[kPerMessageDeflate]._maxPayload < 1 ||\n    this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n  ) {\n    this[kBuffers].push(chunk);\n    return;\n  }\n\n  this[kError] = new RangeError('Max payload size exceeded');\n  this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n  this[kError][kStatusCode] = 1009;\n  this.removeListener('data', inflateOnData);\n\n  //\n  // The choice to employ `zlib.reset()` over `zlib.close()` is dictated by the\n  // fact that in Node.js versions prior to 13.10.0, the callback for\n  // `zlib.flush()` is not called if `zlib.close()` is used. Utilizing\n  // `zlib.reset()` ensures that either the callback is invoked or an error is\n  // emitted.\n  //\n  this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n  //\n  // There is no need to call `Zlib#close()` as the handle is automatically\n  // closed when an error is emitted.\n  //\n  this[kPerMessageDeflate]._inflate = null;\n\n  if (this[kError]) {\n    this[kCallback](this[kError]);\n    return;\n  }\n\n  err[kStatusCode] = 1007;\n  this[kCallback](err);\n}\n", "'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n  return (\n    (code >= 1000 &&\n      code <= 1014 &&\n      code !== 1004 &&\n      code !== 1005 &&\n      code !== 1006) ||\n    (code >= 3000 && code <= 4999)\n  );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n  const len = buf.length;\n  let i = 0;\n\n  while (i < len) {\n    if ((buf[i] & 0x80) === 0) {\n      // 0xxxxxxx\n      i++;\n    } else if ((buf[i] & 0xe0) === 0xc0) {\n      // 110xxxxx 10xxxxxx\n      if (\n        i + 1 === len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i] & 0xfe) === 0xc0 // Overlong\n      ) {\n        return false;\n      }\n\n      i += 2;\n    } else if ((buf[i] & 0xf0) === 0xe0) {\n      // 1110xxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 2 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n        (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n      ) {\n        return false;\n      }\n\n      i += 3;\n    } else if ((buf[i] & 0xf8) === 0xf0) {\n      // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 3 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i + 3] & 0xc0) !== 0x80 ||\n        (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n        (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n        buf[i] > 0xf4 // > U+10FFFF\n      ) {\n        return false;\n      }\n\n      i += 4;\n    } else {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n  return (\n    hasBlob &&\n    typeof value === 'object' &&\n    typeof value.arrayBuffer === 'function' &&\n    typeof value.type === 'string' &&\n    typeof value.stream === 'function' &&\n    (value[Symbol.toStringTag] === 'Blob' ||\n      value[Symbol.toStringTag] === 'File')\n  );\n}\n\nmodule.exports = {\n  isBlob,\n  isValidStatusCode,\n  isValidUTF8: _isValidUTF8,\n  tokenChars\n};\n\nif (isUtf8) {\n  module.exports.isValidUTF8 = function (buf) {\n    return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n  };\n} /* istanbul ignore else  */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n  try {\n    const isValidUTF8 = require('utf-8-validate');\n\n    module.exports.isValidUTF8 = function (buf) {\n      return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\n  }\n}\n", "'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n  BINARY_TYPES,\n  EMPTY_BUFFER,\n  kStatusCode,\n  kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n  /**\n   * Creates a Receiver instance.\n   *\n   * @param {Object} [options] Options object\n   * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {String} [options.binaryType=nodebuffer] The type for binary data\n   * @param {Object} [options.extensions] An object containing the negotiated\n   *     extensions\n   * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n   *     client or server mode\n   * @param {Number} [options.maxPayload=0] The maximum allowed message length\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   */\n  constructor(options = {}) {\n    super();\n\n    this._allowSynchronousEvents =\n      options.allowSynchronousEvents !== undefined\n        ? options.allowSynchronousEvents\n        : true;\n    this._binaryType = options.binaryType || BINARY_TYPES[0];\n    this._extensions = options.extensions || {};\n    this._isServer = !!options.isServer;\n    this._maxPayload = options.maxPayload | 0;\n    this._skipUTF8Validation = !!options.skipUTF8Validation;\n    this[kWebSocket] = undefined;\n\n    this._bufferedBytes = 0;\n    this._buffers = [];\n\n    this._compressed = false;\n    this._payloadLength = 0;\n    this._mask = undefined;\n    this._fragmented = 0;\n    this._masked = false;\n    this._fin = false;\n    this._opcode = 0;\n\n    this._totalPayloadLength = 0;\n    this._messageLength = 0;\n    this._fragments = [];\n\n    this._errored = false;\n    this._loop = false;\n    this._state = GET_INFO;\n  }\n\n  /**\n   * Implements `Writable.prototype._write()`.\n   *\n   * @param {Buffer} chunk The chunk of data to write\n   * @param {String} encoding The character encoding of `chunk`\n   * @param {Function} cb Callback\n   * @private\n   */\n  _write(chunk, encoding, cb) {\n    if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n    this._bufferedBytes += chunk.length;\n    this._buffers.push(chunk);\n    this.startLoop(cb);\n  }\n\n  /**\n   * Consumes `n` bytes from the buffered data.\n   *\n   * @param {Number} n The number of bytes to consume\n   * @return {Buffer} The consumed bytes\n   * @private\n   */\n  consume(n) {\n    this._bufferedBytes -= n;\n\n    if (n === this._buffers[0].length) return this._buffers.shift();\n\n    if (n < this._buffers[0].length) {\n      const buf = this._buffers[0];\n      this._buffers[0] = new FastBuffer(\n        buf.buffer,\n        buf.byteOffset + n,\n        buf.length - n\n      );\n\n      return new FastBuffer(buf.buffer, buf.byteOffset, n);\n    }\n\n    const dst = Buffer.allocUnsafe(n);\n\n    do {\n      const buf = this._buffers[0];\n      const offset = dst.length - n;\n\n      if (n >= buf.length) {\n        dst.set(this._buffers.shift(), offset);\n      } else {\n        dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n        this._buffers[0] = new FastBuffer(\n          buf.buffer,\n          buf.byteOffset + n,\n          buf.length - n\n        );\n      }\n\n      n -= buf.length;\n    } while (n > 0);\n\n    return dst;\n  }\n\n  /**\n   * Starts the parsing loop.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  startLoop(cb) {\n    this._loop = true;\n\n    do {\n      switch (this._state) {\n        case GET_INFO:\n          this.getInfo(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_16:\n          this.getPayloadLength16(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_64:\n          this.getPayloadLength64(cb);\n          break;\n        case GET_MASK:\n          this.getMask();\n          break;\n        case GET_DATA:\n          this.getData(cb);\n          break;\n        case INFLATING:\n        case DEFER_EVENT:\n          this._loop = false;\n          return;\n      }\n    } while (this._loop);\n\n    if (!this._errored) cb();\n  }\n\n  /**\n   * Reads the first two bytes of a frame.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getInfo(cb) {\n    if (this._bufferedBytes < 2) {\n      this._loop = false;\n      return;\n    }\n\n    const buf = this.consume(2);\n\n    if ((buf[0] & 0x30) !== 0x00) {\n      const error = this.createError(\n        RangeError,\n        'RSV2 and RSV3 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_2_3'\n      );\n\n      cb(error);\n      return;\n    }\n\n    const compressed = (buf[0] & 0x40) === 0x40;\n\n    if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n      const error = this.createError(\n        RangeError,\n        'RSV1 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_1'\n      );\n\n      cb(error);\n      return;\n    }\n\n    this._fin = (buf[0] & 0x80) === 0x80;\n    this._opcode = buf[0] & 0x0f;\n    this._payloadLength = buf[1] & 0x7f;\n\n    if (this._opcode === 0x00) {\n      if (compressed) {\n        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (!this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          'invalid opcode 0',\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._opcode = this._fragmented;\n    } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n      if (this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          `invalid opcode ${this._opcode}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._compressed = compressed;\n    } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n      if (!this._fin) {\n        const error = this.createError(\n          RangeError,\n          'FIN must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_FIN'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (compressed) {\n        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (\n        this._payloadLength > 0x7d ||\n        (this._opcode === 0x08 && this._payloadLength === 1)\n      ) {\n        const error = this.createError(\n          RangeError,\n          `invalid payload length ${this._payloadLength}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n        );\n\n        cb(error);\n        return;\n      }\n    } else {\n      const error = this.createError(\n        RangeError,\n        `invalid opcode ${this._opcode}`,\n        true,\n        1002,\n        'WS_ERR_INVALID_OPCODE'\n      );\n\n      cb(error);\n      return;\n    }\n\n    if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n    this._masked = (buf[1] & 0x80) === 0x80;\n\n    if (this._isServer) {\n      if (!this._masked) {\n        const error = this.createError(\n          RangeError,\n          'MASK must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_MASK'\n        );\n\n        cb(error);\n        return;\n      }\n    } else if (this._masked) {\n      const error = this.createError(\n        RangeError,\n        'MASK must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_MASK'\n      );\n\n      cb(error);\n      return;\n    }\n\n    if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n    else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n    else this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+16).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength16(cb) {\n    if (this._bufferedBytes < 2) {\n      this._loop = false;\n      return;\n    }\n\n    this._payloadLength = this.consume(2).readUInt16BE(0);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+64).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength64(cb) {\n    if (this._bufferedBytes < 8) {\n      this._loop = false;\n      return;\n    }\n\n    const buf = this.consume(8);\n    const num = buf.readUInt32BE(0);\n\n    //\n    // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n    // if payload length is greater than this number.\n    //\n    if (num > Math.pow(2, 53 - 32) - 1) {\n      const error = this.createError(\n        RangeError,\n        'Unsupported WebSocket frame: payload length > 2^53 - 1',\n        false,\n        1009,\n        'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n      );\n\n      cb(error);\n      return;\n    }\n\n    this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Payload length has been read.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  haveLength(cb) {\n    if (this._payloadLength && this._opcode < 0x08) {\n      this._totalPayloadLength += this._payloadLength;\n      if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n        const error = this.createError(\n          RangeError,\n          'Max payload size exceeded',\n          false,\n          1009,\n          'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n        );\n\n        cb(error);\n        return;\n      }\n    }\n\n    if (this._masked) this._state = GET_MASK;\n    else this._state = GET_DATA;\n  }\n\n  /**\n   * Reads mask bytes.\n   *\n   * @private\n   */\n  getMask() {\n    if (this._bufferedBytes < 4) {\n      this._loop = false;\n      return;\n    }\n\n    this._mask = this.consume(4);\n    this._state = GET_DATA;\n  }\n\n  /**\n   * Reads data bytes.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getData(cb) {\n    let data = EMPTY_BUFFER;\n\n    if (this._payloadLength) {\n      if (this._bufferedBytes < this._payloadLength) {\n        this._loop = false;\n        return;\n      }\n\n      data = this.consume(this._payloadLength);\n\n      if (\n        this._masked &&\n        (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n      ) {\n        unmask(data, this._mask);\n      }\n    }\n\n    if (this._opcode > 0x07) {\n      this.controlMessage(data, cb);\n      return;\n    }\n\n    if (this._compressed) {\n      this._state = INFLATING;\n      this.decompress(data, cb);\n      return;\n    }\n\n    if (data.length) {\n      //\n      // This message is not compressed so its length is the sum of the payload\n      // length of all fragments.\n      //\n      this._messageLength = this._totalPayloadLength;\n      this._fragments.push(data);\n    }\n\n    this.dataMessage(cb);\n  }\n\n  /**\n   * Decompresses data.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Function} cb Callback\n   * @private\n   */\n  decompress(data, cb) {\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n    perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n      if (err) return cb(err);\n\n      if (buf.length) {\n        this._messageLength += buf.length;\n        if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n          const error = this.createError(\n            RangeError,\n            'Max payload size exceeded',\n            false,\n            1009,\n            'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._fragments.push(buf);\n      }\n\n      this.dataMessage(cb);\n      if (this._state === GET_INFO) this.startLoop(cb);\n    });\n  }\n\n  /**\n   * Handles a data message.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  dataMessage(cb) {\n    if (!this._fin) {\n      this._state = GET_INFO;\n      return;\n    }\n\n    const messageLength = this._messageLength;\n    const fragments = this._fragments;\n\n    this._totalPayloadLength = 0;\n    this._messageLength = 0;\n    this._fragmented = 0;\n    this._fragments = [];\n\n    if (this._opcode === 2) {\n      let data;\n\n      if (this._binaryType === 'nodebuffer') {\n        data = concat(fragments, messageLength);\n      } else if (this._binaryType === 'arraybuffer') {\n        data = toArrayBuffer(concat(fragments, messageLength));\n      } else if (this._binaryType === 'blob') {\n        data = new Blob(fragments);\n      } else {\n        data = fragments;\n      }\n\n      if (this._allowSynchronousEvents) {\n        this.emit('message', data, true);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', data, true);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    } else {\n      const buf = concat(fragments, messageLength);\n\n      if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n        const error = this.createError(\n          Error,\n          'invalid UTF-8 sequence',\n          true,\n          1007,\n          'WS_ERR_INVALID_UTF8'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (this._state === INFLATING || this._allowSynchronousEvents) {\n        this.emit('message', buf, false);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', buf, false);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    }\n  }\n\n  /**\n   * Handles a control message.\n   *\n   * @param {Buffer} data Data to handle\n   * @return {(Error|RangeError|undefined)} A possible error\n   * @private\n   */\n  controlMessage(data, cb) {\n    if (this._opcode === 0x08) {\n      if (data.length === 0) {\n        this._loop = false;\n        this.emit('conclude', 1005, EMPTY_BUFFER);\n        this.end();\n      } else {\n        const code = data.readUInt16BE(0);\n\n        if (!isValidStatusCode(code)) {\n          const error = this.createError(\n            RangeError,\n            `invalid status code ${code}`,\n            true,\n            1002,\n            'WS_ERR_INVALID_CLOSE_CODE'\n          );\n\n          cb(error);\n          return;\n        }\n\n        const buf = new FastBuffer(\n          data.buffer,\n          data.byteOffset + 2,\n          data.length - 2\n        );\n\n        if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n          const error = this.createError(\n            Error,\n            'invalid UTF-8 sequence',\n            true,\n            1007,\n            'WS_ERR_INVALID_UTF8'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._loop = false;\n        this.emit('conclude', code, buf);\n        this.end();\n      }\n\n      this._state = GET_INFO;\n      return;\n    }\n\n    if (this._allowSynchronousEvents) {\n      this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n      this._state = GET_INFO;\n    } else {\n      this._state = DEFER_EVENT;\n      setImmediate(() => {\n        this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n        this._state = GET_INFO;\n        this.startLoop(cb);\n      });\n    }\n  }\n\n  /**\n   * Builds an error object.\n   *\n   * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n   * @param {String} message The error message\n   * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n   *     `message`\n   * @param {Number} statusCode The status code\n   * @param {String} errorCode The exposed error code\n   * @return {(Error|RangeError)} The error\n   * @private\n   */\n  createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n    this._loop = false;\n    this._errored = true;\n\n    const err = new ErrorCtor(\n      prefix ? `Invalid WebSocket frame: ${message}` : message\n    );\n\n    Error.captureStackTrace(err, this.createError);\n    err.code = errorCode;\n    err[kStatusCode] = statusCode;\n    return err;\n  }\n}\n\nmodule.exports = Receiver;\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n  /**\n   * Creates a Sender instance.\n   *\n   * @param {Duplex} socket The connection socket\n   * @param {Object} [extensions] An object containing the negotiated extensions\n   * @param {Function} [generateMask] The function used to generate the masking\n   *     key\n   */\n  constructor(socket, extensions, generateMask) {\n    this._extensions = extensions || {};\n\n    if (generateMask) {\n      this._generateMask = generateMask;\n      this._maskBuffer = Buffer.alloc(4);\n    }\n\n    this._socket = socket;\n\n    this._firstFragment = true;\n    this._compress = false;\n\n    this._bufferedBytes = 0;\n    this._queue = [];\n    this._state = DEFAULT;\n    this.onerror = NOOP;\n    this[kWebSocket] = undefined;\n  }\n\n  /**\n   * Frames a piece of data according to the HyBi WebSocket protocol.\n   *\n   * @param {(Buffer|String)} data The data to frame\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @return {(Buffer|String)[]} The framed data\n   * @public\n   */\n  static frame(data, options) {\n    let mask;\n    let merge = false;\n    let offset = 2;\n    let skipMasking = false;\n\n    if (options.mask) {\n      mask = options.maskBuffer || maskBuffer;\n\n      if (options.generateMask) {\n        options.generateMask(mask);\n      } else {\n        if (randomPoolPointer === RANDOM_POOL_SIZE) {\n          /* istanbul ignore else  */\n          if (randomPool === undefined) {\n            //\n            // This is lazily initialized because server-sent frames must not\n            // be masked so it may never be used.\n            //\n            randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n          }\n\n          randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n          randomPoolPointer = 0;\n        }\n\n        mask[0] = randomPool[randomPoolPointer++];\n        mask[1] = randomPool[randomPoolPointer++];\n        mask[2] = randomPool[randomPoolPointer++];\n        mask[3] = randomPool[randomPoolPointer++];\n      }\n\n      skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n      offset = 6;\n    }\n\n    let dataLength;\n\n    if (typeof data === 'string') {\n      if (\n        (!options.mask || skipMasking) &&\n        options[kByteLength] !== undefined\n      ) {\n        dataLength = options[kByteLength];\n      } else {\n        data = Buffer.from(data);\n        dataLength = data.length;\n      }\n    } else {\n      dataLength = data.length;\n      merge = options.mask && options.readOnly && !skipMasking;\n    }\n\n    let payloadLength = dataLength;\n\n    if (dataLength >= 65536) {\n      offset += 8;\n      payloadLength = 127;\n    } else if (dataLength > 125) {\n      offset += 2;\n      payloadLength = 126;\n    }\n\n    const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n    target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n    if (options.rsv1) target[0] |= 0x40;\n\n    target[1] = payloadLength;\n\n    if (payloadLength === 126) {\n      target.writeUInt16BE(dataLength, 2);\n    } else if (payloadLength === 127) {\n      target[2] = target[3] = 0;\n      target.writeUIntBE(dataLength, 4, 6);\n    }\n\n    if (!options.mask) return [target, data];\n\n    target[1] |= 0x80;\n    target[offset - 4] = mask[0];\n    target[offset - 3] = mask[1];\n    target[offset - 2] = mask[2];\n    target[offset - 1] = mask[3];\n\n    if (skipMasking) return [target, data];\n\n    if (merge) {\n      applyMask(data, mask, target, offset, dataLength);\n      return [target];\n    }\n\n    applyMask(data, mask, data, 0, dataLength);\n    return [target, data];\n  }\n\n  /**\n   * Sends a close message to the other peer.\n   *\n   * @param {Number} [code] The status code component of the body\n   * @param {(String|Buffer)} [data] The message component of the body\n   * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  close(code, data, mask, cb) {\n    let buf;\n\n    if (code === undefined) {\n      buf = EMPTY_BUFFER;\n    } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n      throw new TypeError('First argument must be a valid error code number');\n    } else if (data === undefined || !data.length) {\n      buf = Buffer.allocUnsafe(2);\n      buf.writeUInt16BE(code, 0);\n    } else {\n      const length = Buffer.byteLength(data);\n\n      if (length > 123) {\n        throw new RangeError('The message must not be greater than 123 bytes');\n      }\n\n      buf = Buffer.allocUnsafe(2 + length);\n      buf.writeUInt16BE(code, 0);\n\n      if (typeof data === 'string') {\n        buf.write(data, 2);\n      } else {\n        buf.set(data, 2);\n      }\n    }\n\n    const options = {\n      [kByteLength]: buf.length,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x08,\n      readOnly: false,\n      rsv1: false\n    };\n\n    if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, buf, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(buf, options), cb);\n    }\n  }\n\n  /**\n   * Sends a ping message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  ping(data, mask, cb) {\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x09,\n      readOnly,\n      rsv1: false\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, false, options, cb]);\n      } else {\n        this.getBlobData(data, false, options, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), cb);\n    }\n  }\n\n  /**\n   * Sends a pong message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  pong(data, mask, cb) {\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x0a,\n      readOnly,\n      rsv1: false\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, false, options, cb]);\n      } else {\n        this.getBlobData(data, false, options, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), cb);\n    }\n  }\n\n  /**\n   * Sends a data message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Object} options Options object\n   * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n   *     or text\n   * @param {Boolean} [options.compress=false] Specifies whether or not to\n   *     compress `data`\n   * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n   *     last one\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  send(data, options, cb) {\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n    let opcode = options.binary ? 2 : 1;\n    let rsv1 = options.compress;\n\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (this._firstFragment) {\n      this._firstFragment = false;\n      if (\n        rsv1 &&\n        perMessageDeflate &&\n        perMessageDeflate.params[\n          perMessageDeflate._isServer\n            ? 'server_no_context_takeover'\n            : 'client_no_context_takeover'\n        ]\n      ) {\n        rsv1 = byteLength >= perMessageDeflate._threshold;\n      }\n      this._compress = rsv1;\n    } else {\n      rsv1 = false;\n      opcode = 0;\n    }\n\n    if (options.fin) this._firstFragment = true;\n\n    const opts = {\n      [kByteLength]: byteLength,\n      fin: options.fin,\n      generateMask: this._generateMask,\n      mask: options.mask,\n      maskBuffer: this._maskBuffer,\n      opcode,\n      readOnly,\n      rsv1\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n      } else {\n        this.getBlobData(data, this._compress, opts, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n    } else {\n      this.dispatch(data, this._compress, opts, cb);\n    }\n  }\n\n  /**\n   * Gets the contents of a blob as binary data.\n   *\n   * @param {Blob} blob The blob\n   * @param {Boolean} [compress=false] Specifies whether or not to compress\n   *     the data\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  getBlobData(blob, compress, options, cb) {\n    this._bufferedBytes += options[kByteLength];\n    this._state = GET_BLOB_DATA;\n\n    blob\n      .arrayBuffer()\n      .then((arrayBuffer) => {\n        if (this._socket.destroyed) {\n          const err = new Error(\n            'The socket was closed while the blob was being read'\n          );\n\n          //\n          // `callCallbacks` is called in the next tick to ensure that errors\n          // that might be thrown in the callbacks behave like errors thrown\n          // outside the promise chain.\n          //\n          process.nextTick(callCallbacks, this, err, cb);\n          return;\n        }\n\n        this._bufferedBytes -= options[kByteLength];\n        const data = toBuffer(arrayBuffer);\n\n        if (!compress) {\n          this._state = DEFAULT;\n          this.sendFrame(Sender.frame(data, options), cb);\n          this.dequeue();\n        } else {\n          this.dispatch(data, compress, options, cb);\n        }\n      })\n      .catch((err) => {\n        //\n        // `onError` is called in the next tick for the same reason that\n        // `callCallbacks` above is.\n        //\n        process.nextTick(onError, this, err, cb);\n      });\n  }\n\n  /**\n   * Dispatches a message.\n   *\n   * @param {(Buffer|String)} data The message to send\n   * @param {Boolean} [compress=false] Specifies whether or not to compress\n   *     `data`\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  dispatch(data, compress, options, cb) {\n    if (!compress) {\n      this.sendFrame(Sender.frame(data, options), cb);\n      return;\n    }\n\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n    this._bufferedBytes += options[kByteLength];\n    this._state = DEFLATING;\n    perMessageDeflate.compress(data, options.fin, (_, buf) => {\n      if (this._socket.destroyed) {\n        const err = new Error(\n          'The socket was closed while data was being compressed'\n        );\n\n        callCallbacks(this, err, cb);\n        return;\n      }\n\n      this._bufferedBytes -= options[kByteLength];\n      this._state = DEFAULT;\n      options.readOnly = false;\n      this.sendFrame(Sender.frame(buf, options), cb);\n      this.dequeue();\n    });\n  }\n\n  /**\n   * Executes queued send operations.\n   *\n   * @private\n   */\n  dequeue() {\n    while (this._state === DEFAULT && this._queue.length) {\n      const params = this._queue.shift();\n\n      this._bufferedBytes -= params[3][kByteLength];\n      Reflect.apply(params[0], this, params.slice(1));\n    }\n  }\n\n  /**\n   * Enqueues a send operation.\n   *\n   * @param {Array} params Send operation parameters.\n   * @private\n   */\n  enqueue(params) {\n    this._bufferedBytes += params[3][kByteLength];\n    this._queue.push(params);\n  }\n\n  /**\n   * Sends a frame.\n   *\n   * @param {(Buffer | String)[]} list The frame to send\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  sendFrame(list, cb) {\n    if (list.length === 2) {\n      this._socket.cork();\n      this._socket.write(list[0]);\n      this._socket.write(list[1], cb);\n      this._socket.uncork();\n    } else {\n      this._socket.write(list[0], cb);\n    }\n  }\n}\n\nmodule.exports = Sender;\n\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n  if (typeof cb === 'function') cb(err);\n\n  for (let i = 0; i < sender._queue.length; i++) {\n    const params = sender._queue[i];\n    const callback = params[params.length - 1];\n\n    if (typeof callback === 'function') callback(err);\n  }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n  callCallbacks(sender, err, cb);\n  sender.onerror(err);\n}\n", "'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n  /**\n   * Create a new `Event`.\n   *\n   * @param {String} type The name of the event\n   * @throws {TypeError} If the `type` argument is not specified\n   */\n  constructor(type) {\n    this[kTarget] = null;\n    this[kType] = type;\n  }\n\n  /**\n   * @type {*}\n   */\n  get target() {\n    return this[kTarget];\n  }\n\n  /**\n   * @type {String}\n   */\n  get type() {\n    return this[kType];\n  }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n  /**\n   * Create a new `CloseEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {Number} [options.code=0] The status code explaining why the\n   *     connection was closed\n   * @param {String} [options.reason=''] A human-readable string explaining why\n   *     the connection was closed\n   * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n   *     connection was cleanly closed\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kCode] = options.code === undefined ? 0 : options.code;\n    this[kReason] = options.reason === undefined ? '' : options.reason;\n    this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get code() {\n    return this[kCode];\n  }\n\n  /**\n   * @type {String}\n   */\n  get reason() {\n    return this[kReason];\n  }\n\n  /**\n   * @type {Boolean}\n   */\n  get wasClean() {\n    return this[kWasClean];\n  }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n  /**\n   * Create a new `ErrorEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.error=null] The error that generated this event\n   * @param {String} [options.message=''] The error message\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kError] = options.error === undefined ? null : options.error;\n    this[kMessage] = options.message === undefined ? '' : options.message;\n  }\n\n  /**\n   * @type {*}\n   */\n  get error() {\n    return this[kError];\n  }\n\n  /**\n   * @type {String}\n   */\n  get message() {\n    return this[kMessage];\n  }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n  /**\n   * Create a new `MessageEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.data=null] The message content\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kData] = options.data === undefined ? null : options.data;\n  }\n\n  /**\n   * @type {*}\n   */\n  get data() {\n    return this[kData];\n  }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n  /**\n   * Register an event listener.\n   *\n   * @param {String} type A string representing the event type to listen for\n   * @param {(Function|Object)} handler The listener to add\n   * @param {Object} [options] An options object specifies characteristics about\n   *     the event listener\n   * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n   *     listener should be invoked at most once after being added. If `true`,\n   *     the listener would be automatically removed when invoked.\n   * @public\n   */\n  addEventListener(type, handler, options = {}) {\n    for (const listener of this.listeners(type)) {\n      if (\n        !options[kForOnEventAttribute] &&\n        listener[kListener] === handler &&\n        !listener[kForOnEventAttribute]\n      ) {\n        return;\n      }\n    }\n\n    let wrapper;\n\n    if (type === 'message') {\n      wrapper = function onMessage(data, isBinary) {\n        const event = new MessageEvent('message', {\n          data: isBinary ? data : data.toString()\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'close') {\n      wrapper = function onClose(code, message) {\n        const event = new CloseEvent('close', {\n          code,\n          reason: message.toString(),\n          wasClean: this._closeFrameReceived && this._closeFrameSent\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'error') {\n      wrapper = function onError(error) {\n        const event = new ErrorEvent('error', {\n          error,\n          message: error.message\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'open') {\n      wrapper = function onOpen() {\n        const event = new Event('open');\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else {\n      return;\n    }\n\n    wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n    wrapper[kListener] = handler;\n\n    if (options.once) {\n      this.once(type, wrapper);\n    } else {\n      this.on(type, wrapper);\n    }\n  },\n\n  /**\n   * Remove an event listener.\n   *\n   * @param {String} type A string representing the event type to remove\n   * @param {(Function|Object)} handler The listener to remove\n   * @public\n   */\n  removeEventListener(type, handler) {\n    for (const listener of this.listeners(type)) {\n      if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n        this.removeListener(type, listener);\n        break;\n      }\n    }\n  }\n};\n\nmodule.exports = {\n  CloseEvent,\n  ErrorEvent,\n  Event,\n  EventTarget,\n  MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n  if (typeof listener === 'object' && listener.handleEvent) {\n    listener.handleEvent.call(listener, event);\n  } else {\n    listener.call(thisArg, event);\n  }\n}\n", "'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n *     parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n  if (dest[name] === undefined) dest[name] = [elem];\n  else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n  const offers = Object.create(null);\n  let params = Object.create(null);\n  let mustUnescape = false;\n  let isEscaping = false;\n  let inQuotes = false;\n  let extensionName;\n  let paramName;\n  let start = -1;\n  let code = -1;\n  let end = -1;\n  let i = 0;\n\n  for (; i < header.length; i++) {\n    code = header.charCodeAt(i);\n\n    if (extensionName === undefined) {\n      if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (\n        i !== 0 &&\n        (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n      ) {\n        if (end === -1 && start !== -1) end = i;\n      } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        const name = header.slice(start, end);\n        if (code === 0x2c) {\n          push(offers, name, params);\n          params = Object.create(null);\n        } else {\n          extensionName = name;\n        }\n\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    } else if (paramName === undefined) {\n      if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (code === 0x20 || code === 0x09) {\n        if (end === -1 && start !== -1) end = i;\n      } else if (code === 0x3b || code === 0x2c) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        push(params, header.slice(start, end), true);\n        if (code === 0x2c) {\n          push(offers, extensionName, params);\n          params = Object.create(null);\n          extensionName = undefined;\n        }\n\n        start = end = -1;\n      } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n        paramName = header.slice(start, i);\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    } else {\n      //\n      // The value of a quoted-string after unescaping must conform to the\n      // token ABNF, so only token characters are valid.\n      // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n      //\n      if (isEscaping) {\n        if (tokenChars[code] !== 1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n        if (start === -1) start = i;\n        else if (!mustUnescape) mustUnescape = true;\n        isEscaping = false;\n      } else if (inQuotes) {\n        if (tokenChars[code] === 1) {\n          if (start === -1) start = i;\n        } else if (code === 0x22 /* '\"' */ && start !== -1) {\n          inQuotes = false;\n          end = i;\n        } else if (code === 0x5c /* '\\' */) {\n          isEscaping = true;\n        } else {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n      } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n        inQuotes = true;\n      } else if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n        if (end === -1) end = i;\n      } else if (code === 0x3b || code === 0x2c) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        let value = header.slice(start, end);\n        if (mustUnescape) {\n          value = value.replace(/\\\\/g, '');\n          mustUnescape = false;\n        }\n        push(params, paramName, value);\n        if (code === 0x2c) {\n          push(offers, extensionName, params);\n          params = Object.create(null);\n          extensionName = undefined;\n        }\n\n        paramName = undefined;\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    }\n  }\n\n  if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n    throw new SyntaxError('Unexpected end of input');\n  }\n\n  if (end === -1) end = i;\n  const token = header.slice(start, end);\n  if (extensionName === undefined) {\n    push(offers, token, params);\n  } else {\n    if (paramName === undefined) {\n      push(params, token, true);\n    } else if (mustUnescape) {\n      push(params, paramName, token.replace(/\\\\/g, ''));\n    } else {\n      push(params, paramName, token);\n    }\n    push(offers, extensionName, params);\n  }\n\n  return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n  return Object.keys(extensions)\n    .map((extension) => {\n      let configurations = extensions[extension];\n      if (!Array.isArray(configurations)) configurations = [configurations];\n      return configurations\n        .map((params) => {\n          return [extension]\n            .concat(\n              Object.keys(params).map((k) => {\n                let values = params[k];\n                if (!Array.isArray(values)) values = [values];\n                return values\n                  .map((v) => (v === true ? k : `${k}=${v}`))\n                  .join('; ');\n              })\n            )\n            .join('; ');\n        })\n        .join(', ');\n    })\n    .join(', ');\n}\n\nmodule.exports = { format, parse };\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n  BINARY_TYPES,\n  EMPTY_BUFFER,\n  GUID,\n  kForOnEventAttribute,\n  kListener,\n  kStatusCode,\n  kWebSocket,\n  NOOP\n} = require('./constants');\nconst {\n  EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst closeTimeout = 30 * 1000;\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n  /**\n   * Create a new `WebSocket`.\n   *\n   * @param {(String|URL)} address The URL to which to connect\n   * @param {(String|String[])} [protocols] The subprotocols\n   * @param {Object} [options] Connection options\n   */\n  constructor(address, protocols, options) {\n    super();\n\n    this._binaryType = BINARY_TYPES[0];\n    this._closeCode = 1006;\n    this._closeFrameReceived = false;\n    this._closeFrameSent = false;\n    this._closeMessage = EMPTY_BUFFER;\n    this._closeTimer = null;\n    this._errorEmitted = false;\n    this._extensions = {};\n    this._paused = false;\n    this._protocol = '';\n    this._readyState = WebSocket.CONNECTING;\n    this._receiver = null;\n    this._sender = null;\n    this._socket = null;\n\n    if (address !== null) {\n      this._bufferedAmount = 0;\n      this._isServer = false;\n      this._redirects = 0;\n\n      if (protocols === undefined) {\n        protocols = [];\n      } else if (!Array.isArray(protocols)) {\n        if (typeof protocols === 'object' && protocols !== null) {\n          options = protocols;\n          protocols = [];\n        } else {\n          protocols = [protocols];\n        }\n      }\n\n      initAsClient(this, address, protocols, options);\n    } else {\n      this._autoPong = options.autoPong;\n      this._isServer = true;\n    }\n  }\n\n  /**\n   * For historical reasons, the custom \"nodebuffer\" type is used by the default\n   * instead of \"blob\".\n   *\n   * @type {String}\n   */\n  get binaryType() {\n    return this._binaryType;\n  }\n\n  set binaryType(type) {\n    if (!BINARY_TYPES.includes(type)) return;\n\n    this._binaryType = type;\n\n    //\n    // Allow to change `binaryType` on the fly.\n    //\n    if (this._receiver) this._receiver._binaryType = type;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get bufferedAmount() {\n    if (!this._socket) return this._bufferedAmount;\n\n    return this._socket._writableState.length + this._sender._bufferedBytes;\n  }\n\n  /**\n   * @type {String}\n   */\n  get extensions() {\n    return Object.keys(this._extensions).join();\n  }\n\n  /**\n   * @type {Boolean}\n   */\n  get isPaused() {\n    return this._paused;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onclose() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onerror() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onopen() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onmessage() {\n    return null;\n  }\n\n  /**\n   * @type {String}\n   */\n  get protocol() {\n    return this._protocol;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get readyState() {\n    return this._readyState;\n  }\n\n  /**\n   * @type {String}\n   */\n  get url() {\n    return this._url;\n  }\n\n  /**\n   * Set up the socket and the internal resources.\n   *\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Object} options Options object\n   * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Number} [options.maxPayload=0] The maximum allowed message size\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @private\n   */\n  setSocket(socket, head, options) {\n    const receiver = new Receiver({\n      allowSynchronousEvents: options.allowSynchronousEvents,\n      binaryType: this.binaryType,\n      extensions: this._extensions,\n      isServer: this._isServer,\n      maxPayload: options.maxPayload,\n      skipUTF8Validation: options.skipUTF8Validation\n    });\n\n    const sender = new Sender(socket, this._extensions, options.generateMask);\n\n    this._receiver = receiver;\n    this._sender = sender;\n    this._socket = socket;\n\n    receiver[kWebSocket] = this;\n    sender[kWebSocket] = this;\n    socket[kWebSocket] = this;\n\n    receiver.on('conclude', receiverOnConclude);\n    receiver.on('drain', receiverOnDrain);\n    receiver.on('error', receiverOnError);\n    receiver.on('message', receiverOnMessage);\n    receiver.on('ping', receiverOnPing);\n    receiver.on('pong', receiverOnPong);\n\n    sender.onerror = senderOnError;\n\n    //\n    // These methods may not be available if `socket` is just a `Duplex`.\n    //\n    if (socket.setTimeout) socket.setTimeout(0);\n    if (socket.setNoDelay) socket.setNoDelay();\n\n    if (head.length > 0) socket.unshift(head);\n\n    socket.on('close', socketOnClose);\n    socket.on('data', socketOnData);\n    socket.on('end', socketOnEnd);\n    socket.on('error', socketOnError);\n\n    this._readyState = WebSocket.OPEN;\n    this.emit('open');\n  }\n\n  /**\n   * Emit the `'close'` event.\n   *\n   * @private\n   */\n  emitClose() {\n    if (!this._socket) {\n      this._readyState = WebSocket.CLOSED;\n      this.emit('close', this._closeCode, this._closeMessage);\n      return;\n    }\n\n    if (this._extensions[PerMessageDeflate.extensionName]) {\n      this._extensions[PerMessageDeflate.extensionName].cleanup();\n    }\n\n    this._receiver.removeAllListeners();\n    this._readyState = WebSocket.CLOSED;\n    this.emit('close', this._closeCode, this._closeMessage);\n  }\n\n  /**\n   * Start a closing handshake.\n   *\n   *          +----------+   +-----------+   +----------+\n   *     - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n   *    |     +----------+   +-----------+   +----------+     |\n   *          +----------+   +-----------+         |\n   * CLOSING  |ws.close()|<--|close frame|<--+-----+       CLOSING\n   *          +----------+   +-----------+   |\n   *    |           |                        |   +---+        |\n   *                +------------------------+-->|fin| - - - -\n   *    |         +---+                      |   +---+\n   *     - - - - -|fin|<---------------------+\n   *              +---+\n   *\n   * @param {Number} [code] Status code explaining why the connection is closing\n   * @param {(String|Buffer)} [data] The reason why the connection is\n   *     closing\n   * @public\n   */\n  close(code, data) {\n    if (this.readyState === WebSocket.CLOSED) return;\n    if (this.readyState === WebSocket.CONNECTING) {\n      const msg = 'WebSocket was closed before the connection was established';\n      abortHandshake(this, this._req, msg);\n      return;\n    }\n\n    if (this.readyState === WebSocket.CLOSING) {\n      if (\n        this._closeFrameSent &&\n        (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n      ) {\n        this._socket.end();\n      }\n\n      return;\n    }\n\n    this._readyState = WebSocket.CLOSING;\n    this._sender.close(code, data, !this._isServer, (err) => {\n      //\n      // This error is handled by the `'error'` listener on the socket. We only\n      // want to know if the close frame has been sent here.\n      //\n      if (err) return;\n\n      this._closeFrameSent = true;\n\n      if (\n        this._closeFrameReceived ||\n        this._receiver._writableState.errorEmitted\n      ) {\n        this._socket.end();\n      }\n    });\n\n    setCloseTimer(this);\n  }\n\n  /**\n   * Pause the socket.\n   *\n   * @public\n   */\n  pause() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = true;\n    this._socket.pause();\n  }\n\n  /**\n   * Send a ping.\n   *\n   * @param {*} [data] The data to send\n   * @param {Boolean} [mask] Indicates whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when the ping is sent\n   * @public\n   */\n  ping(data, mask, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof data === 'function') {\n      cb = data;\n      data = mask = undefined;\n    } else if (typeof mask === 'function') {\n      cb = mask;\n      mask = undefined;\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    if (mask === undefined) mask = !this._isServer;\n    this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n  }\n\n  /**\n   * Send a pong.\n   *\n   * @param {*} [data] The data to send\n   * @param {Boolean} [mask] Indicates whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when the pong is sent\n   * @public\n   */\n  pong(data, mask, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof data === 'function') {\n      cb = data;\n      data = mask = undefined;\n    } else if (typeof mask === 'function') {\n      cb = mask;\n      mask = undefined;\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    if (mask === undefined) mask = !this._isServer;\n    this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n  }\n\n  /**\n   * Resume the socket.\n   *\n   * @public\n   */\n  resume() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = false;\n    if (!this._receiver._writableState.needDrain) this._socket.resume();\n  }\n\n  /**\n   * Send a data message.\n   *\n   * @param {*} data The message to send\n   * @param {Object} [options] Options object\n   * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n   *     text\n   * @param {Boolean} [options.compress] Specifies whether or not to compress\n   *     `data`\n   * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n   *     last one\n   * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when data is written out\n   * @public\n   */\n  send(data, options, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof options === 'function') {\n      cb = options;\n      options = {};\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    const opts = {\n      binary: typeof data !== 'string',\n      mask: !this._isServer,\n      compress: true,\n      fin: true,\n      ...options\n    };\n\n    if (!this._extensions[PerMessageDeflate.extensionName]) {\n      opts.compress = false;\n    }\n\n    this._sender.send(data || EMPTY_BUFFER, opts, cb);\n  }\n\n  /**\n   * Forcibly close the connection.\n   *\n   * @public\n   */\n  terminate() {\n    if (this.readyState === WebSocket.CLOSED) return;\n    if (this.readyState === WebSocket.CONNECTING) {\n      const msg = 'WebSocket was closed before the connection was established';\n      abortHandshake(this, this._req, msg);\n      return;\n    }\n\n    if (this._socket) {\n      this._readyState = WebSocket.CLOSING;\n      this._socket.destroy();\n    }\n  }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n  enumerable: true,\n  value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n  enumerable: true,\n  value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n  enumerable: true,\n  value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n  enumerable: true,\n  value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSED')\n});\n\n[\n  'binaryType',\n  'bufferedAmount',\n  'extensions',\n  'isPaused',\n  'protocol',\n  'readyState',\n  'url'\n].forEach((property) => {\n  Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n  Object.defineProperty(WebSocket.prototype, `on${method}`, {\n    enumerable: true,\n    get() {\n      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) return listener[kListener];\n      }\n\n      return null;\n    },\n    set(handler) {\n      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) {\n          this.removeListener(method, listener);\n          break;\n        }\n      }\n\n      if (typeof handler !== 'function') return;\n\n      this.addEventListener(method, handler, {\n        [kForOnEventAttribute]: true\n      });\n    }\n  });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n *     of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n *     times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n *     automatically send a pong in response to a ping\n * @param {Function} [options.finishRequest] A function which can be used to\n *     customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n *     redirects\n * @param {Function} [options.generateMask] The function used to generate the\n *     masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n *     handshake request\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n *     size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n *     allowed\n * @param {String} [options.origin] Value of the `Origin` or\n *     `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n *     permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n *     `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n *     not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n  const opts = {\n    allowSynchronousEvents: true,\n    autoPong: true,\n    protocolVersion: protocolVersions[1],\n    maxPayload: 100 * 1024 * 1024,\n    skipUTF8Validation: false,\n    perMessageDeflate: true,\n    followRedirects: false,\n    maxRedirects: 10,\n    ...options,\n    socketPath: undefined,\n    hostname: undefined,\n    protocol: undefined,\n    timeout: undefined,\n    method: 'GET',\n    host: undefined,\n    path: undefined,\n    port: undefined\n  };\n\n  websocket._autoPong = opts.autoPong;\n\n  if (!protocolVersions.includes(opts.protocolVersion)) {\n    throw new RangeError(\n      `Unsupported protocol version: ${opts.protocolVersion} ` +\n        `(supported versions: ${protocolVersions.join(', ')})`\n    );\n  }\n\n  let parsedUrl;\n\n  if (address instanceof URL) {\n    parsedUrl = address;\n  } else {\n    try {\n      parsedUrl = new URL(address);\n    } catch (e) {\n      throw new SyntaxError(`Invalid URL: ${address}`);\n    }\n  }\n\n  if (parsedUrl.protocol === 'http:') {\n    parsedUrl.protocol = 'ws:';\n  } else if (parsedUrl.protocol === 'https:') {\n    parsedUrl.protocol = 'wss:';\n  }\n\n  websocket._url = parsedUrl.href;\n\n  const isSecure = parsedUrl.protocol === 'wss:';\n  const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n  let invalidUrlMessage;\n\n  if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n    invalidUrlMessage =\n      'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n      '\"http:\", \"https:\", or \"ws+unix:\"';\n  } else if (isIpcUrl && !parsedUrl.pathname) {\n    invalidUrlMessage = \"The URL's pathname is empty\";\n  } else if (parsedUrl.hash) {\n    invalidUrlMessage = 'The URL contains a fragment identifier';\n  }\n\n  if (invalidUrlMessage) {\n    const err = new SyntaxError(invalidUrlMessage);\n\n    if (websocket._redirects === 0) {\n      throw err;\n    } else {\n      emitErrorAndClose(websocket, err);\n      return;\n    }\n  }\n\n  const defaultPort = isSecure ? 443 : 80;\n  const key = randomBytes(16).toString('base64');\n  const request = isSecure ? https.request : http.request;\n  const protocolSet = new Set();\n  let perMessageDeflate;\n\n  opts.createConnection =\n    opts.createConnection || (isSecure ? tlsConnect : netConnect);\n  opts.defaultPort = opts.defaultPort || defaultPort;\n  opts.port = parsedUrl.port || defaultPort;\n  opts.host = parsedUrl.hostname.startsWith('[')\n    ? parsedUrl.hostname.slice(1, -1)\n    : parsedUrl.hostname;\n  opts.headers = {\n    ...opts.headers,\n    'Sec-WebSocket-Version': opts.protocolVersion,\n    'Sec-WebSocket-Key': key,\n    Connection: 'Upgrade',\n    Upgrade: 'websocket'\n  };\n  opts.path = parsedUrl.pathname + parsedUrl.search;\n  opts.timeout = opts.handshakeTimeout;\n\n  if (opts.perMessageDeflate) {\n    perMessageDeflate = new PerMessageDeflate(\n      opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},\n      false,\n      opts.maxPayload\n    );\n    opts.headers['Sec-WebSocket-Extensions'] = format({\n      [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n    });\n  }\n  if (protocols.length) {\n    for (const protocol of protocols) {\n      if (\n        typeof protocol !== 'string' ||\n        !subprotocolRegex.test(protocol) ||\n        protocolSet.has(protocol)\n      ) {\n        throw new SyntaxError(\n          'An invalid or duplicated subprotocol was specified'\n        );\n      }\n\n      protocolSet.add(protocol);\n    }\n\n    opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n  }\n  if (opts.origin) {\n    if (opts.protocolVersion < 13) {\n      opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n    } else {\n      opts.headers.Origin = opts.origin;\n    }\n  }\n  if (parsedUrl.username || parsedUrl.password) {\n    opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n  }\n\n  if (isIpcUrl) {\n    const parts = opts.path.split(':');\n\n    opts.socketPath = parts[0];\n    opts.path = parts[1];\n  }\n\n  let req;\n\n  if (opts.followRedirects) {\n    if (websocket._redirects === 0) {\n      websocket._originalIpc = isIpcUrl;\n      websocket._originalSecure = isSecure;\n      websocket._originalHostOrSocketPath = isIpcUrl\n        ? opts.socketPath\n        : parsedUrl.host;\n\n      const headers = options && options.headers;\n\n      //\n      // Shallow copy the user provided options so that headers can be changed\n      // without mutating the original object.\n      //\n      options = { ...options, headers: {} };\n\n      if (headers) {\n        for (const [key, value] of Object.entries(headers)) {\n          options.headers[key.toLowerCase()] = value;\n        }\n      }\n    } else if (websocket.listenerCount('redirect') === 0) {\n      const isSameHost = isIpcUrl\n        ? websocket._originalIpc\n          ? opts.socketPath === websocket._originalHostOrSocketPath\n          : false\n        : websocket._originalIpc\n          ? false\n          : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n      if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n        //\n        // Match curl 7.77.0 behavior and drop the following headers. These\n        // headers are also dropped when following a redirect to a subdomain.\n        //\n        delete opts.headers.authorization;\n        delete opts.headers.cookie;\n\n        if (!isSameHost) delete opts.headers.host;\n\n        opts.auth = undefined;\n      }\n    }\n\n    //\n    // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n    // If the `Authorization` header is set, then there is nothing to do as it\n    // will take precedence.\n    //\n    if (opts.auth && !options.headers.authorization) {\n      options.headers.authorization =\n        'Basic ' + Buffer.from(opts.auth).toString('base64');\n    }\n\n    req = websocket._req = request(opts);\n\n    if (websocket._redirects) {\n      //\n      // Unlike what is done for the `'upgrade'` event, no early exit is\n      // triggered here if the user calls `websocket.close()` or\n      // `websocket.terminate()` from a listener of the `'redirect'` event. This\n      // is because the user can also call `request.destroy()` with an error\n      // before calling `websocket.close()` or `websocket.terminate()` and this\n      // would result in an error being emitted on the `request` object with no\n      // `'error'` event listeners attached.\n      //\n      websocket.emit('redirect', websocket.url, req);\n    }\n  } else {\n    req = websocket._req = request(opts);\n  }\n\n  if (opts.timeout) {\n    req.on('timeout', () => {\n      abortHandshake(websocket, req, 'Opening handshake has timed out');\n    });\n  }\n\n  req.on('error', (err) => {\n    if (req === null || req[kAborted]) return;\n\n    req = websocket._req = null;\n    emitErrorAndClose(websocket, err);\n  });\n\n  req.on('response', (res) => {\n    const location = res.headers.location;\n    const statusCode = res.statusCode;\n\n    if (\n      location &&\n      opts.followRedirects &&\n      statusCode >= 300 &&\n      statusCode < 400\n    ) {\n      if (++websocket._redirects > opts.maxRedirects) {\n        abortHandshake(websocket, req, 'Maximum redirects exceeded');\n        return;\n      }\n\n      req.abort();\n\n      let addr;\n\n      try {\n        addr = new URL(location, address);\n      } catch (e) {\n        const err = new SyntaxError(`Invalid URL: ${location}`);\n        emitErrorAndClose(websocket, err);\n        return;\n      }\n\n      initAsClient(websocket, addr, protocols, options);\n    } else if (!websocket.emit('unexpected-response', req, res)) {\n      abortHandshake(\n        websocket,\n        req,\n        `Unexpected server response: ${res.statusCode}`\n      );\n    }\n  });\n\n  req.on('upgrade', (res, socket, head) => {\n    websocket.emit('upgrade', res);\n\n    //\n    // The user may have closed the connection from a listener of the\n    // `'upgrade'` event.\n    //\n    if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n    req = websocket._req = null;\n\n    const upgrade = res.headers.upgrade;\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      abortHandshake(websocket, socket, 'Invalid Upgrade header');\n      return;\n    }\n\n    const digest = createHash('sha1')\n      .update(key + GUID)\n      .digest('base64');\n\n    if (res.headers['sec-websocket-accept'] !== digest) {\n      abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n      return;\n    }\n\n    const serverProt = res.headers['sec-websocket-protocol'];\n    let protError;\n\n    if (serverProt !== undefined) {\n      if (!protocolSet.size) {\n        protError = 'Server sent a subprotocol but none was requested';\n      } else if (!protocolSet.has(serverProt)) {\n        protError = 'Server sent an invalid subprotocol';\n      }\n    } else if (protocolSet.size) {\n      protError = 'Server sent no subprotocol';\n    }\n\n    if (protError) {\n      abortHandshake(websocket, socket, protError);\n      return;\n    }\n\n    if (serverProt) websocket._protocol = serverProt;\n\n    const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n    if (secWebSocketExtensions !== undefined) {\n      if (!perMessageDeflate) {\n        const message =\n          'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n          'was requested';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      let extensions;\n\n      try {\n        extensions = parse(secWebSocketExtensions);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Extensions header';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      const extensionNames = Object.keys(extensions);\n\n      if (\n        extensionNames.length !== 1 ||\n        extensionNames[0] !== PerMessageDeflate.extensionName\n      ) {\n        const message = 'Server indicated an extension that was not requested';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      try {\n        perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Extensions header';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      websocket._extensions[PerMessageDeflate.extensionName] =\n        perMessageDeflate;\n    }\n\n    websocket.setSocket(socket, head, {\n      allowSynchronousEvents: opts.allowSynchronousEvents,\n      generateMask: opts.generateMask,\n      maxPayload: opts.maxPayload,\n      skipUTF8Validation: opts.skipUTF8Validation\n    });\n  });\n\n  if (opts.finishRequest) {\n    opts.finishRequest(req, websocket);\n  } else {\n    req.end();\n  }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n  websocket._readyState = WebSocket.CLOSING;\n  //\n  // The following assignment is practically useless and is done only for\n  // consistency.\n  //\n  websocket._errorEmitted = true;\n  websocket.emit('error', err);\n  websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n  options.path = options.socketPath;\n  return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n  options.path = undefined;\n\n  if (!options.servername && options.servername !== '') {\n    options.servername = net.isIP(options.host) ? '' : options.host;\n  }\n\n  return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n *     abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n  websocket._readyState = WebSocket.CLOSING;\n\n  const err = new Error(message);\n  Error.captureStackTrace(err, abortHandshake);\n\n  if (stream.setHeader) {\n    stream[kAborted] = true;\n    stream.abort();\n\n    if (stream.socket && !stream.socket.destroyed) {\n      //\n      // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n      // called after the request completed. See\n      // https://github.com/websockets/ws/issues/1869.\n      //\n      stream.socket.destroy();\n    }\n\n    process.nextTick(emitErrorAndClose, websocket, err);\n  } else {\n    stream.destroy(err);\n    stream.once('error', websocket.emit.bind(websocket, 'error'));\n    stream.once('close', websocket.emitClose.bind(websocket));\n  }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n  if (data) {\n    const length = isBlob(data) ? data.size : toBuffer(data).length;\n\n    //\n    // The `_bufferedAmount` property is used only when the peer is a client and\n    // the opening handshake fails. Under these circumstances, in fact, the\n    // `setSocket()` method is not called, so the `_socket` and `_sender`\n    // properties are set to `null`.\n    //\n    if (websocket._socket) websocket._sender._bufferedBytes += length;\n    else websocket._bufferedAmount += length;\n  }\n\n  if (cb) {\n    const err = new Error(\n      `WebSocket is not open: readyState ${websocket.readyState} ` +\n        `(${readyStates[websocket.readyState]})`\n    );\n    process.nextTick(cb, err);\n  }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n  const websocket = this[kWebSocket];\n\n  websocket._closeFrameReceived = true;\n  websocket._closeMessage = reason;\n  websocket._closeCode = code;\n\n  if (websocket._socket[kWebSocket] === undefined) return;\n\n  websocket._socket.removeListener('data', socketOnData);\n  process.nextTick(resume, websocket._socket);\n\n  if (code === 1005) websocket.close();\n  else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n  const websocket = this[kWebSocket];\n\n  if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n  const websocket = this[kWebSocket];\n\n  if (websocket._socket[kWebSocket] !== undefined) {\n    websocket._socket.removeListener('data', socketOnData);\n\n    //\n    // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n    // https://github.com/websockets/ws/issues/1940.\n    //\n    process.nextTick(resume, websocket._socket);\n\n    websocket.close(err[kStatusCode]);\n  }\n\n  if (!websocket._errorEmitted) {\n    websocket._errorEmitted = true;\n    websocket.emit('error', err);\n  }\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n  this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n  this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n  const websocket = this[kWebSocket];\n\n  if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP);\n  websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n  this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n  stream.resume();\n}\n\n/**\n * The `Sender` error event handler.\n *\n * @param {Error} The error\n * @private\n */\nfunction senderOnError(err) {\n  const websocket = this[kWebSocket];\n\n  if (websocket.readyState === WebSocket.CLOSED) return;\n  if (websocket.readyState === WebSocket.OPEN) {\n    websocket._readyState = WebSocket.CLOSING;\n    setCloseTimer(websocket);\n  }\n\n  //\n  // `socket.end()` is used instead of `socket.destroy()` to allow the other\n  // peer to finish sending queued data. There is no need to set a timer here\n  // because `CLOSING` means that it is already set or not needed.\n  //\n  this._socket.end();\n\n  if (!websocket._errorEmitted) {\n    websocket._errorEmitted = true;\n    websocket.emit('error', err);\n  }\n}\n\n/**\n * Set a timer to destroy the underlying raw socket of a WebSocket.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @private\n */\nfunction setCloseTimer(websocket) {\n  websocket._closeTimer = setTimeout(\n    websocket._socket.destroy.bind(websocket._socket),\n    closeTimeout\n  );\n}\n\n/**\n * The listener of the socket `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n  const websocket = this[kWebSocket];\n\n  this.removeListener('close', socketOnClose);\n  this.removeListener('data', socketOnData);\n  this.removeListener('end', socketOnEnd);\n\n  websocket._readyState = WebSocket.CLOSING;\n\n  let chunk;\n\n  //\n  // The close frame might not have been received or the `'end'` event emitted,\n  // for example, if the socket was destroyed due to an error. Ensure that the\n  // `receiver` stream is closed after writing any remaining buffered data to\n  // it. If the readable side of the socket is in flowing mode then there is no\n  // buffered data as everything has been already written and `readable.read()`\n  // will return `null`. If instead, the socket is paused, any possible buffered\n  // data will be read as a single chunk.\n  //\n  if (\n    !this._readableState.endEmitted &&\n    !websocket._closeFrameReceived &&\n    !websocket._receiver._writableState.errorEmitted &&\n    (chunk = websocket._socket.read()) !== null\n  ) {\n    websocket._receiver.write(chunk);\n  }\n\n  websocket._receiver.end();\n\n  this[kWebSocket] = undefined;\n\n  clearTimeout(websocket._closeTimer);\n\n  if (\n    websocket._receiver._writableState.finished ||\n    websocket._receiver._writableState.errorEmitted\n  ) {\n    websocket.emitClose();\n  } else {\n    websocket._receiver.on('error', receiverOnFinish);\n    websocket._receiver.on('finish', receiverOnFinish);\n  }\n}\n\n/**\n * The listener of the socket `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n  if (!this[kWebSocket]._receiver.write(chunk)) {\n    this.pause();\n  }\n}\n\n/**\n * The listener of the socket `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n  const websocket = this[kWebSocket];\n\n  websocket._readyState = WebSocket.CLOSING;\n  websocket._receiver.end();\n  this.end();\n}\n\n/**\n * The listener of the socket `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n  const websocket = this[kWebSocket];\n\n  this.removeListener('error', socketOnError);\n  this.on('error', NOOP);\n\n  if (websocket) {\n    websocket._readyState = WebSocket.CLOSING;\n    this.destroy();\n  }\n}\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^WebSocket$\" }] */\n'use strict';\n\nconst WebSocket = require('./websocket');\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n  stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n  if (!this.destroyed && this._writableState.finished) {\n    this.destroy();\n  }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n  this.removeListener('error', duplexOnError);\n  this.destroy();\n  if (this.listenerCount('error') === 0) {\n    // Do not suppress the throwing behavior.\n    this.emit('error', err);\n  }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n  let terminateOnDestroy = true;\n\n  const duplex = new Duplex({\n    ...options,\n    autoDestroy: false,\n    emitClose: false,\n    objectMode: false,\n    writableObjectMode: false\n  });\n\n  ws.on('message', function message(msg, isBinary) {\n    const data =\n      !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n    if (!duplex.push(data)) ws.pause();\n  });\n\n  ws.once('error', function error(err) {\n    if (duplex.destroyed) return;\n\n    // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n    //\n    // - If the `'error'` event is emitted before the `'open'` event, then\n    //   `ws.terminate()` is a noop as no socket is assigned.\n    // - Otherwise, the error is re-emitted by the listener of the `'error'`\n    //   event of the `Receiver` object. The listener already closes the\n    //   connection by calling `ws.close()`. This allows a close frame to be\n    //   sent to the other peer. If `ws.terminate()` is called right after this,\n    //   then the close frame might not be sent.\n    terminateOnDestroy = false;\n    duplex.destroy(err);\n  });\n\n  ws.once('close', function close() {\n    if (duplex.destroyed) return;\n\n    duplex.push(null);\n  });\n\n  duplex._destroy = function (err, callback) {\n    if (ws.readyState === ws.CLOSED) {\n      callback(err);\n      process.nextTick(emitClose, duplex);\n      return;\n    }\n\n    let called = false;\n\n    ws.once('error', function error(err) {\n      called = true;\n      callback(err);\n    });\n\n    ws.once('close', function close() {\n      if (!called) callback(err);\n      process.nextTick(emitClose, duplex);\n    });\n\n    if (terminateOnDestroy) ws.terminate();\n  };\n\n  duplex._final = function (callback) {\n    if (ws.readyState === ws.CONNECTING) {\n      ws.once('open', function open() {\n        duplex._final(callback);\n      });\n      return;\n    }\n\n    // If the value of the `_socket` property is `null` it means that `ws` is a\n    // client websocket and the handshake failed. In fact, when this happens, a\n    // socket is never assigned to the websocket. Wait for the `'error'` event\n    // that will be emitted by the websocket.\n    if (ws._socket === null) return;\n\n    if (ws._socket._writableState.finished) {\n      callback();\n      if (duplex._readableState.endEmitted) duplex.destroy();\n    } else {\n      ws._socket.once('finish', function finish() {\n        // `duplex` is not destroyed here because the `'end'` event will be\n        // emitted on `duplex` after this `'finish'` event. The EOF signaling\n        // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n        callback();\n      });\n      ws.close();\n    }\n  };\n\n  duplex._read = function () {\n    if (ws.isPaused) ws.resume();\n  };\n\n  duplex._write = function (chunk, encoding, callback) {\n    if (ws.readyState === ws.CONNECTING) {\n      ws.once('open', function open() {\n        duplex._write(chunk, encoding, callback);\n      });\n      return;\n    }\n\n    ws.send(chunk, callback);\n  };\n\n  duplex.on('end', duplexOnEnd);\n  duplex.on('error', duplexOnError);\n  return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n", "'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n  const protocols = new Set();\n  let start = -1;\n  let end = -1;\n  let i = 0;\n\n  for (i; i < header.length; i++) {\n    const code = header.charCodeAt(i);\n\n    if (end === -1 && tokenChars[code] === 1) {\n      if (start === -1) start = i;\n    } else if (\n      i !== 0 &&\n      (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n    ) {\n      if (end === -1 && start !== -1) end = i;\n    } else if (code === 0x2c /* ',' */) {\n      if (start === -1) {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n\n      if (end === -1) end = i;\n\n      const protocol = header.slice(start, end);\n\n      if (protocols.has(protocol)) {\n        throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n      }\n\n      protocols.add(protocol);\n      start = end = -1;\n    } else {\n      throw new SyntaxError(`Unexpected character at index ${i}`);\n    }\n  }\n\n  if (start === -1 || end !== -1) {\n    throw new SyntaxError('Unexpected end of input');\n  }\n\n  const protocol = header.slice(start, i);\n\n  if (protocols.has(protocol)) {\n    throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n  }\n\n  protocols.add(protocol);\n  return protocols;\n}\n\nmodule.exports = { parse };\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n  /**\n   * Create a `WebSocketServer` instance.\n   *\n   * @param {Object} options Configuration options\n   * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n   *     automatically send a pong in response to a ping\n   * @param {Number} [options.backlog=511] The maximum length of the queue of\n   *     pending connections\n   * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n   *     track clients\n   * @param {Function} [options.handleProtocols] A hook to handle protocols\n   * @param {String} [options.host] The hostname where to bind the server\n   * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n   *     size\n   * @param {Boolean} [options.noServer=false] Enable no server mode\n   * @param {String} [options.path] Accept only connections matching this path\n   * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n   *     permessage-deflate\n   * @param {Number} [options.port] The port where to bind the server\n   * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n   *     server to use\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @param {Function} [options.verifyClient] A hook to reject connections\n   * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n   *     class to use. It must be the `WebSocket` class or class that extends it\n   * @param {Function} [callback] A listener for the `listening` event\n   */\n  constructor(options, callback) {\n    super();\n\n    options = {\n      allowSynchronousEvents: true,\n      autoPong: true,\n      maxPayload: 100 * 1024 * 1024,\n      skipUTF8Validation: false,\n      perMessageDeflate: false,\n      handleProtocols: null,\n      clientTracking: true,\n      verifyClient: null,\n      noServer: false,\n      backlog: null, // use default (511 as implemented in net.js)\n      server: null,\n      host: null,\n      path: null,\n      port: null,\n      WebSocket,\n      ...options\n    };\n\n    if (\n      (options.port == null && !options.server && !options.noServer) ||\n      (options.port != null && (options.server || options.noServer)) ||\n      (options.server && options.noServer)\n    ) {\n      throw new TypeError(\n        'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n          'must be specified'\n      );\n    }\n\n    if (options.port != null) {\n      this._server = http.createServer((req, res) => {\n        const body = http.STATUS_CODES[426];\n\n        res.writeHead(426, {\n          'Content-Length': body.length,\n          'Content-Type': 'text/plain'\n        });\n        res.end(body);\n      });\n      this._server.listen(\n        options.port,\n        options.host,\n        options.backlog,\n        callback\n      );\n    } else if (options.server) {\n      this._server = options.server;\n    }\n\n    if (this._server) {\n      const emitConnection = this.emit.bind(this, 'connection');\n\n      this._removeListeners = addListeners(this._server, {\n        listening: this.emit.bind(this, 'listening'),\n        error: this.emit.bind(this, 'error'),\n        upgrade: (req, socket, head) => {\n          this.handleUpgrade(req, socket, head, emitConnection);\n        }\n      });\n    }\n\n    if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n    if (options.clientTracking) {\n      this.clients = new Set();\n      this._shouldEmitClose = false;\n    }\n\n    this.options = options;\n    this._state = RUNNING;\n  }\n\n  /**\n   * Returns the bound address, the address family name, and port of the server\n   * as reported by the operating system if listening on an IP socket.\n   * If the server is listening on a pipe or UNIX domain socket, the name is\n   * returned as a string.\n   *\n   * @return {(Object|String|null)} The address of the server\n   * @public\n   */\n  address() {\n    if (this.options.noServer) {\n      throw new Error('The server is operating in \"noServer\" mode');\n    }\n\n    if (!this._server) return null;\n    return this._server.address();\n  }\n\n  /**\n   * Stop the server from accepting new connections and emit the `'close'` event\n   * when all existing connections are closed.\n   *\n   * @param {Function} [cb] A one-time listener for the `'close'` event\n   * @public\n   */\n  close(cb) {\n    if (this._state === CLOSED) {\n      if (cb) {\n        this.once('close', () => {\n          cb(new Error('The server is not running'));\n        });\n      }\n\n      process.nextTick(emitClose, this);\n      return;\n    }\n\n    if (cb) this.once('close', cb);\n\n    if (this._state === CLOSING) return;\n    this._state = CLOSING;\n\n    if (this.options.noServer || this.options.server) {\n      if (this._server) {\n        this._removeListeners();\n        this._removeListeners = this._server = null;\n      }\n\n      if (this.clients) {\n        if (!this.clients.size) {\n          process.nextTick(emitClose, this);\n        } else {\n          this._shouldEmitClose = true;\n        }\n      } else {\n        process.nextTick(emitClose, this);\n      }\n    } else {\n      const server = this._server;\n\n      this._removeListeners();\n      this._removeListeners = this._server = null;\n\n      //\n      // The HTTP/S server was created internally. Close it, and rely on its\n      // `'close'` event.\n      //\n      server.close(() => {\n        emitClose(this);\n      });\n    }\n  }\n\n  /**\n   * See if a given request should be handled by this server instance.\n   *\n   * @param {http.IncomingMessage} req Request object to inspect\n   * @return {Boolean} `true` if the request is valid, else `false`\n   * @public\n   */\n  shouldHandle(req) {\n    if (this.options.path) {\n      const index = req.url.indexOf('?');\n      const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n      if (pathname !== this.options.path) return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Handle a HTTP Upgrade request.\n   *\n   * @param {http.IncomingMessage} req The request object\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Function} cb Callback\n   * @public\n   */\n  handleUpgrade(req, socket, head, cb) {\n    socket.on('error', socketOnError);\n\n    const key = req.headers['sec-websocket-key'];\n    const upgrade = req.headers.upgrade;\n    const version = +req.headers['sec-websocket-version'];\n\n    if (req.method !== 'GET') {\n      const message = 'Invalid HTTP method';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n      return;\n    }\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      const message = 'Invalid Upgrade header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (key === undefined || !keyRegex.test(key)) {\n      const message = 'Missing or invalid Sec-WebSocket-Key header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (version !== 13 && version !== 8) {\n      const message = 'Missing or invalid Sec-WebSocket-Version header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, {\n        'Sec-WebSocket-Version': '13, 8'\n      });\n      return;\n    }\n\n    if (!this.shouldHandle(req)) {\n      abortHandshake(socket, 400);\n      return;\n    }\n\n    const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n    let protocols = new Set();\n\n    if (secWebSocketProtocol !== undefined) {\n      try {\n        protocols = subprotocol.parse(secWebSocketProtocol);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Protocol header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\n      }\n    }\n\n    const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n    const extensions = {};\n\n    if (\n      this.options.perMessageDeflate &&\n      secWebSocketExtensions !== undefined\n    ) {\n      const perMessageDeflate = new PerMessageDeflate(\n        this.options.perMessageDeflate,\n        true,\n        this.options.maxPayload\n      );\n\n      try {\n        const offers = extension.parse(secWebSocketExtensions);\n\n        if (offers[PerMessageDeflate.extensionName]) {\n          perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n          extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n        }\n      } catch (err) {\n        const message =\n          'Invalid or unacceptable Sec-WebSocket-Extensions header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\n      }\n    }\n\n    //\n    // Optionally call external client verification handler.\n    //\n    if (this.options.verifyClient) {\n      const info = {\n        origin:\n          req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n        secure: !!(req.socket.authorized || req.socket.encrypted),\n        req\n      };\n\n      if (this.options.verifyClient.length === 2) {\n        this.options.verifyClient(info, (verified, code, message, headers) => {\n          if (!verified) {\n            return abortHandshake(socket, code || 401, message, headers);\n          }\n\n          this.completeUpgrade(\n            extensions,\n            key,\n            protocols,\n            req,\n            socket,\n            head,\n            cb\n          );\n        });\n        return;\n      }\n\n      if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n    }\n\n    this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n  }\n\n  /**\n   * Upgrade the connection to WebSocket.\n   *\n   * @param {Object} extensions The accepted extensions\n   * @param {String} key The value of the `Sec-WebSocket-Key` header\n   * @param {Set} protocols The subprotocols\n   * @param {http.IncomingMessage} req The request object\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Function} cb Callback\n   * @throws {Error} If called more than once with the same socket\n   * @private\n   */\n  completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n    //\n    // Destroy the socket if the client has already sent a FIN packet.\n    //\n    if (!socket.readable || !socket.writable) return socket.destroy();\n\n    if (socket[kWebSocket]) {\n      throw new Error(\n        'server.handleUpgrade() was called more than once with the same ' +\n          'socket, possibly due to a misconfiguration'\n      );\n    }\n\n    if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n    const digest = createHash('sha1')\n      .update(key + GUID)\n      .digest('base64');\n\n    const headers = [\n      'HTTP/1.1 101 Switching Protocols',\n      'Upgrade: websocket',\n      'Connection: Upgrade',\n      `Sec-WebSocket-Accept: ${digest}`\n    ];\n\n    const ws = new this.options.WebSocket(null, undefined, this.options);\n\n    if (protocols.size) {\n      //\n      // Optionally call external protocol selection handler.\n      //\n      const protocol = this.options.handleProtocols\n        ? this.options.handleProtocols(protocols, req)\n        : protocols.values().next().value;\n\n      if (protocol) {\n        headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n        ws._protocol = protocol;\n      }\n    }\n\n    if (extensions[PerMessageDeflate.extensionName]) {\n      const params = extensions[PerMessageDeflate.extensionName].params;\n      const value = extension.format({\n        [PerMessageDeflate.extensionName]: [params]\n      });\n      headers.push(`Sec-WebSocket-Extensions: ${value}`);\n      ws._extensions = extensions;\n    }\n\n    //\n    // Allow external modification/inspection of handshake headers.\n    //\n    this.emit('headers', headers, req);\n\n    socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n    socket.removeListener('error', socketOnError);\n\n    ws.setSocket(socket, head, {\n      allowSynchronousEvents: this.options.allowSynchronousEvents,\n      maxPayload: this.options.maxPayload,\n      skipUTF8Validation: this.options.skipUTF8Validation\n    });\n\n    if (this.clients) {\n      this.clients.add(ws);\n      ws.on('close', () => {\n        this.clients.delete(ws);\n\n        if (this._shouldEmitClose && !this.clients.size) {\n          process.nextTick(emitClose, this);\n        }\n      });\n    }\n\n    cb(ws, req);\n  }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n *     called\n * @private\n */\nfunction addListeners(server, map) {\n  for (const event of Object.keys(map)) server.on(event, map[event]);\n\n  return function removeListeners() {\n    for (const event of Object.keys(map)) {\n      server.removeListener(event, map[event]);\n    }\n  };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n  server._state = CLOSED;\n  server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n  this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n  //\n  // The socket is writable unless the user destroyed or ended it before calling\n  // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n  // error. Handling this does not make much sense as the worst that can happen\n  // is that some of the data written by the user might be discarded due to the\n  // call to `socket.end()` below, which triggers an `'error'` event that in\n  // turn causes the socket to be destroyed.\n  //\n  message = message || http.STATUS_CODES[code];\n  headers = {\n    Connection: 'close',\n    'Content-Type': 'text/html',\n    'Content-Length': Buffer.byteLength(message),\n    ...headers\n  };\n\n  socket.once('finish', socket.destroy);\n\n  socket.end(\n    `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n      Object.keys(headers)\n        .map((h) => `${h}: ${headers[h]}`)\n        .join('\\r\\n') +\n      '\\r\\n\\r\\n' +\n      message\n  );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @param {Object} [headers] The HTTP response headers\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(\n  server,\n  req,\n  socket,\n  code,\n  message,\n  headers\n) {\n  if (server.listenerCount('wsClientError')) {\n    const err = new Error(message);\n    Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n    server.emit('wsClientError', err, socket, req);\n  } else {\n    abortHandshake(socket, code, message, headers);\n  }\n}\n", "// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport abstract class _CodeOrName {\n  abstract readonly str: string\n  abstract readonly names: UsedNames\n  abstract toString(): string\n  abstract emptyStr(): boolean\n}\n\nexport const IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i\n\nexport class Name extends _CodeOrName {\n  readonly str: string\n  constructor(s: string) {\n    super()\n    if (!IDENTIFIER.test(s)) throw new Error(\"CodeGen: name must be a valid identifier\")\n    this.str = s\n  }\n\n  toString(): string {\n    return this.str\n  }\n\n  emptyStr(): boolean {\n    return false\n  }\n\n  get names(): UsedNames {\n    return {[this.str]: 1}\n  }\n}\n\nexport class _Code extends _CodeOrName {\n  readonly _items: readonly CodeItem[]\n  private _str?: string\n  private _names?: UsedNames\n\n  constructor(code: string | readonly CodeItem[]) {\n    super()\n    this._items = typeof code === \"string\" ? [code] : code\n  }\n\n  toString(): string {\n    return this.str\n  }\n\n  emptyStr(): boolean {\n    if (this._items.length > 1) return false\n    const item = this._items[0]\n    return item === \"\" || item === '\"\"'\n  }\n\n  get str(): string {\n    return (this._str ??= this._items.reduce((s: string, c: CodeItem) => `${s}${c}`, \"\"))\n  }\n\n  get names(): UsedNames {\n    return (this._names ??= this._items.reduce((names: UsedNames, c) => {\n      if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1\n      return names\n    }, {}))\n  }\n}\n\nexport type CodeItem = Name | string | number | boolean | null\n\nexport type UsedNames = Record<string, number | undefined>\n\nexport type Code = _Code | Name\n\nexport type SafeExpr = Code | number | boolean | null\n\nexport const nil = new _Code(\"\")\n\ntype CodeArg = SafeExpr | string | undefined\n\nexport function _(strs: TemplateStringsArray, ...args: CodeArg[]): _Code {\n  const code: CodeItem[] = [strs[0]]\n  let i = 0\n  while (i < args.length) {\n    addCodeArg(code, args[i])\n    code.push(strs[++i])\n  }\n  return new _Code(code)\n}\n\nconst plus = new _Code(\"+\")\n\nexport function str(strs: TemplateStringsArray, ...args: (CodeArg | string[])[]): _Code {\n  const expr: CodeItem[] = [safeStringify(strs[0])]\n  let i = 0\n  while (i < args.length) {\n    expr.push(plus)\n    addCodeArg(expr, args[i])\n    expr.push(plus, safeStringify(strs[++i]))\n  }\n  optimize(expr)\n  return new _Code(expr)\n}\n\nexport function addCodeArg(code: CodeItem[], arg: CodeArg | string[]): void {\n  if (arg instanceof _Code) code.push(...arg._items)\n  else if (arg instanceof Name) code.push(arg)\n  else code.push(interpolate(arg))\n}\n\nfunction optimize(expr: CodeItem[]): void {\n  let i = 1\n  while (i < expr.length - 1) {\n    if (expr[i] === plus) {\n      const res = mergeExprItems(expr[i - 1], expr[i + 1])\n      if (res !== undefined) {\n        expr.splice(i - 1, 3, res)\n        continue\n      }\n      expr[i++] = \"+\"\n    }\n    i++\n  }\n}\n\nfunction mergeExprItems(a: CodeItem, b: CodeItem): CodeItem | undefined {\n  if (b === '\"\"') return a\n  if (a === '\"\"') return b\n  if (typeof a == \"string\") {\n    if (b instanceof Name || a[a.length - 1] !== '\"') return\n    if (typeof b != \"string\") return `${a.slice(0, -1)}${b}\"`\n    if (b[0] === '\"') return a.slice(0, -1) + b.slice(1)\n    return\n  }\n  if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name)) return `\"${a}${b.slice(1)}`\n  return\n}\n\nexport function strConcat(c1: Code, c2: Code): Code {\n  return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`\n}\n\n// TODO do not allow arrays here\nfunction interpolate(x?: string | string[] | number | boolean | null): SafeExpr | string {\n  return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n    ? x\n    : safeStringify(Array.isArray(x) ? x.join(\",\") : x)\n}\n\nexport function stringify(x: unknown): Code {\n  return new _Code(safeStringify(x))\n}\n\nexport function safeStringify(x: unknown): string {\n  return JSON.stringify(x)\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\")\n}\n\nexport function getProperty(key: Code | string | number): Code {\n  return typeof key == \"string\" && IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`\n}\n\n//Does best effort to format the name properly\nexport function getEsmExportName(key: Code | string | number): Code {\n  if (typeof key == \"string\" && IDENTIFIER.test(key)) {\n    return new _Code(`${key}`)\n  }\n  throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)\n}\n\nexport function regexpCode(rx: RegExp): Code {\n  return new _Code(rx.toString())\n}\n", "import {_, nil, Code, Name} from \"./code\"\n\ninterface NameGroup {\n  prefix: string\n  index: number\n}\n\nexport interface NameValue {\n  ref: ValueReference // this is the reference to any value that can be referred to from generated code via `globals` var in the closure\n  key?: unknown // any key to identify a global to avoid duplicates, if not passed ref is used\n  code?: Code // this is the code creating the value needed for standalone code wit_out closure - can be a primitive value, function or import (`require`)\n}\n\nexport type ValueReference = unknown // possibly make CodeGen parameterized type on this type\n\nclass ValueError extends Error {\n  readonly value?: NameValue\n  constructor(name: ValueScopeName) {\n    super(`CodeGen: \"code\" for ${name} not defined`)\n    this.value = name.value\n  }\n}\n\ninterface ScopeOptions {\n  prefixes?: Set<string>\n  parent?: Scope\n}\n\ninterface ValueScopeOptions extends ScopeOptions {\n  scope: ScopeStore\n  es5?: boolean\n  lines?: boolean\n}\n\nexport type ScopeStore = Record<string, ValueReference[] | undefined>\n\ntype ScopeValues = {\n  [Prefix in string]?: Map<unknown, ValueScopeName>\n}\n\nexport type ScopeValueSets = {\n  [Prefix in string]?: Set<ValueScopeName>\n}\n\nexport enum UsedValueState {\n  Started,\n  Completed,\n}\n\nexport type UsedScopeValues = {\n  [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>\n}\n\nexport const varKinds = {\n  const: new Name(\"const\"),\n  let: new Name(\"let\"),\n  var: new Name(\"var\"),\n}\n\nexport class Scope {\n  protected readonly _names: {[Prefix in string]?: NameGroup} = {}\n  protected readonly _prefixes?: Set<string>\n  protected readonly _parent?: Scope\n\n  constructor({prefixes, parent}: ScopeOptions = {}) {\n    this._prefixes = prefixes\n    this._parent = parent\n  }\n\n  toName(nameOrPrefix: Name | string): Name {\n    return nameOrPrefix instanceof Name ? nameOrPrefix : this.name(nameOrPrefix)\n  }\n\n  name(prefix: string): Name {\n    return new Name(this._newName(prefix))\n  }\n\n  protected _newName(prefix: string): string {\n    const ng = this._names[prefix] || this._nameGroup(prefix)\n    return `${prefix}${ng.index++}`\n  }\n\n  private _nameGroup(prefix: string): NameGroup {\n    if (this._parent?._prefixes?.has(prefix) || (this._prefixes && !this._prefixes.has(prefix))) {\n      throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`)\n    }\n    return (this._names[prefix] = {prefix, index: 0})\n  }\n}\n\ninterface ScopePath {\n  property: string\n  itemIndex: number\n}\n\nexport class ValueScopeName extends Name {\n  readonly prefix: string\n  value?: NameValue\n  scopePath?: Code\n\n  constructor(prefix: string, nameStr: string) {\n    super(nameStr)\n    this.prefix = prefix\n  }\n\n  setValue(value: NameValue, {property, itemIndex}: ScopePath): void {\n    this.value = value\n    this.scopePath = _`.${new Name(property)}[${itemIndex}]`\n  }\n}\n\ninterface VSOptions extends ValueScopeOptions {\n  _n: Code\n}\n\nconst line = _`\\n`\n\nexport class ValueScope extends Scope {\n  protected readonly _values: ScopeValues = {}\n  protected readonly _scope: ScopeStore\n  readonly opts: VSOptions\n\n  constructor(opts: ValueScopeOptions) {\n    super(opts)\n    this._scope = opts.scope\n    this.opts = {...opts, _n: opts.lines ? line : nil}\n  }\n\n  get(): ScopeStore {\n    return this._scope\n  }\n\n  name(prefix: string): ValueScopeName {\n    return new ValueScopeName(prefix, this._newName(prefix))\n  }\n\n  value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName {\n    if (value.ref === undefined) throw new Error(\"CodeGen: ref must be passed in value\")\n    const name = this.toName(nameOrPrefix) as ValueScopeName\n    const {prefix} = name\n    const valueKey = value.key ?? value.ref\n    let vs = this._values[prefix]\n    if (vs) {\n      const _name = vs.get(valueKey)\n      if (_name) return _name\n    } else {\n      vs = this._values[prefix] = new Map()\n    }\n    vs.set(valueKey, name)\n\n    const s = this._scope[prefix] || (this._scope[prefix] = [])\n    const itemIndex = s.length\n    s[itemIndex] = value.ref\n    name.setValue(value, {property: prefix, itemIndex})\n    return name\n  }\n\n  getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n    const vs = this._values[prefix]\n    if (!vs) return\n    return vs.get(keyOrRef)\n  }\n\n  scopeRefs(scopeName: Name, values: ScopeValues | ScopeValueSets = this._values): Code {\n    return this._reduceValues(values, (name: ValueScopeName) => {\n      if (name.scopePath === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n      return _`${scopeName}${name.scopePath}`\n    })\n  }\n\n  scopeCode(\n    values: ScopeValues | ScopeValueSets = this._values,\n    usedValues?: UsedScopeValues,\n    getCode?: (n: ValueScopeName) => Code | undefined\n  ): Code {\n    return this._reduceValues(\n      values,\n      (name: ValueScopeName) => {\n        if (name.value === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n        return name.value.code\n      },\n      usedValues,\n      getCode\n    )\n  }\n\n  private _reduceValues(\n    values: ScopeValues | ScopeValueSets,\n    valueCode: (n: ValueScopeName) => Code | undefined,\n    usedValues: UsedScopeValues = {},\n    getCode?: (n: ValueScopeName) => Code | undefined\n  ): Code {\n    let code: Code = nil\n    for (const prefix in values) {\n      const vs = values[prefix]\n      if (!vs) continue\n      const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map())\n      vs.forEach((name: ValueScopeName) => {\n        if (nameSet.has(name)) return\n        nameSet.set(name, UsedValueState.Started)\n        let c = valueCode(name)\n        if (c) {\n          const def = this.opts.es5 ? varKinds.var : varKinds.const\n          code = _`${code}${def} ${name} = ${c};${this.opts._n}`\n        } else if ((c = getCode?.(name))) {\n          code = _`${code}${c}${this.opts._n}`\n        } else {\n          throw new ValueError(name)\n        }\n        nameSet.set(name, UsedValueState.Completed)\n      })\n    }\n    return code\n  }\n}\n", "import type {ScopeValueSets, NameValue, ValueScope, ValueScopeName} from \"./scope\"\nimport {_, nil, _Code, Code, Name, UsedNames, CodeItem, addCodeArg, _CodeOrName} from \"./code\"\nimport {Scope, varKinds} from \"./scope\"\n\nexport {_, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code} from \"./code\"\nexport {Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds} from \"./scope\"\n\n// type for expressions that can be safely inserted in code without quotes\nexport type SafeExpr = Code | number | boolean | null\n\n// type that is either Code of function that adds code to CodeGen instance using its methods\nexport type Block = Code | (() => void)\n\nexport const operators = {\n  GT: new _Code(\">\"),\n  GTE: new _Code(\">=\"),\n  LT: new _Code(\"<\"),\n  LTE: new _Code(\"<=\"),\n  EQ: new _Code(\"===\"),\n  NEQ: new _Code(\"!==\"),\n  NOT: new _Code(\"!\"),\n  OR: new _Code(\"||\"),\n  AND: new _Code(\"&&\"),\n  ADD: new _Code(\"+\"),\n}\n\nabstract class Node {\n  abstract readonly names: UsedNames\n\n  optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n    return this\n  }\n\n  optimizeNames(_names: UsedNames, _constants: Constants): this | undefined {\n    return this\n  }\n\n  // get count(): number {\n  //   return 1\n  // }\n}\n\nclass Def extends Node {\n  constructor(\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private rhs?: SafeExpr\n  ) {\n    super()\n  }\n\n  render({es5, _n}: CGOptions): string {\n    const varKind = es5 ? varKinds.var : this.varKind\n    const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`\n    return `${varKind} ${this.name}${rhs};` + _n\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!names[this.name.str]) return\n    if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return this.rhs instanceof _CodeOrName ? this.rhs.names : {}\n  }\n}\n\nclass Assign extends Node {\n  constructor(\n    readonly lhs: Code,\n    public rhs: SafeExpr,\n    private readonly sideEffects?: boolean\n  ) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.lhs} = ${this.rhs};` + _n\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (this.lhs instanceof Name && !names[this.lhs.str] && !this.sideEffects) return\n    this.rhs = optimizeExpr(this.rhs, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = this.lhs instanceof Name ? {} : {...this.lhs.names}\n    return addExprNames(names, this.rhs)\n  }\n}\n\nclass AssignOp extends Assign {\n  constructor(\n    lhs: Code,\n    private readonly op: Code,\n    rhs: SafeExpr,\n    sideEffects?: boolean\n  ) {\n    super(lhs, rhs, sideEffects)\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.lhs} ${this.op}= ${this.rhs};` + _n\n  }\n}\n\nclass Label extends Node {\n  readonly names: UsedNames = {}\n  constructor(readonly label: Name) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.label}:` + _n\n  }\n}\n\nclass Break extends Node {\n  readonly names: UsedNames = {}\n  constructor(readonly label?: Code) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    const label = this.label ? ` ${this.label}` : \"\"\n    return `break${label};` + _n\n  }\n}\n\nclass Throw extends Node {\n  constructor(readonly error: Code) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `throw ${this.error};` + _n\n  }\n\n  get names(): UsedNames {\n    return this.error.names\n  }\n}\n\nclass AnyCode extends Node {\n  constructor(private code: SafeExpr) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.code};` + _n\n  }\n\n  optimizeNodes(): this | undefined {\n    return `${this.code}` ? this : undefined\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this {\n    this.code = optimizeExpr(this.code, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return this.code instanceof _CodeOrName ? this.code.names : {}\n  }\n}\n\nabstract class ParentNode extends Node {\n  constructor(readonly nodes: ChildNode[] = []) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return this.nodes.reduce((code, n) => code + n.render(opts), \"\")\n  }\n\n  optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n    const {nodes} = this\n    let i = nodes.length\n    while (i--) {\n      const n = nodes[i].optimizeNodes()\n      if (Array.isArray(n)) nodes.splice(i, 1, ...n)\n      else if (n) nodes[i] = n\n      else nodes.splice(i, 1)\n    }\n    return nodes.length > 0 ? this : undefined\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    const {nodes} = this\n    let i = nodes.length\n    while (i--) {\n      // iterating backwards improves 1-pass optimization\n      const n = nodes[i]\n      if (n.optimizeNames(names, constants)) continue\n      subtractNames(names, n.names)\n      nodes.splice(i, 1)\n    }\n    return nodes.length > 0 ? this : undefined\n  }\n\n  get names(): UsedNames {\n    return this.nodes.reduce((names: UsedNames, n) => addNames(names, n.names), {})\n  }\n\n  // get count(): number {\n  //   return this.nodes.reduce((c, n) => c + n.count, 1)\n  // }\n}\n\nabstract class BlockNode extends ParentNode {\n  render(opts: CGOptions): string {\n    return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n\n  }\n}\n\nclass Root extends ParentNode {}\n\nclass Else extends BlockNode {\n  static readonly kind = \"else\"\n}\n\nclass If extends BlockNode {\n  static readonly kind = \"if\"\n  else?: If | Else\n  constructor(\n    private condition: Code | boolean,\n    nodes?: ChildNode[]\n  ) {\n    super(nodes)\n  }\n\n  render(opts: CGOptions): string {\n    let code = `if(${this.condition})` + super.render(opts)\n    if (this.else) code += \"else \" + this.else.render(opts)\n    return code\n  }\n\n  optimizeNodes(): If | ChildNode[] | undefined {\n    super.optimizeNodes()\n    const cond = this.condition\n    if (cond === true) return this.nodes // else is ignored here\n    let e = this.else\n    if (e) {\n      const ns = e.optimizeNodes()\n      e = this.else = Array.isArray(ns) ? new Else(ns) : (ns as Else | undefined)\n    }\n    if (e) {\n      if (cond === false) return e instanceof If ? e : e.nodes\n      if (this.nodes.length) return this\n      return new If(not(cond), e instanceof If ? [e] : e.nodes)\n    }\n    if (cond === false || !this.nodes.length) return undefined\n    return this\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    this.else = this.else?.optimizeNames(names, constants)\n    if (!(super.optimizeNames(names, constants) || this.else)) return\n    this.condition = optimizeExpr(this.condition, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = super.names\n    addExprNames(names, this.condition)\n    if (this.else) addNames(names, this.else.names)\n    return names\n  }\n\n  // get count(): number {\n  //   return super.count + (this.else?.count || 0)\n  // }\n}\n\nabstract class For extends BlockNode {\n  static readonly kind = \"for\"\n}\n\nclass ForLoop extends For {\n  constructor(private iteration: Code) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `for(${this.iteration})` + super.render(opts)\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!super.optimizeNames(names, constants)) return\n    this.iteration = optimizeExpr(this.iteration, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return addNames(super.names, this.iteration.names)\n  }\n}\n\nclass ForRange extends For {\n  constructor(\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private readonly from: SafeExpr,\n    private readonly to: SafeExpr\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    const varKind = opts.es5 ? varKinds.var : this.varKind\n    const {name, from, to} = this\n    return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts)\n  }\n\n  get names(): UsedNames {\n    const names = addExprNames(super.names, this.from)\n    return addExprNames(names, this.to)\n  }\n}\n\nclass ForIter extends For {\n  constructor(\n    private readonly loop: \"of\" | \"in\",\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private iterable: Code\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts)\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!super.optimizeNames(names, constants)) return\n    this.iterable = optimizeExpr(this.iterable, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return addNames(super.names, this.iterable.names)\n  }\n}\n\nclass Func extends BlockNode {\n  static readonly kind = \"func\"\n  constructor(\n    public name: Name,\n    public args: Code,\n    public async?: boolean\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    const _async = this.async ? \"async \" : \"\"\n    return `${_async}function ${this.name}(${this.args})` + super.render(opts)\n  }\n}\n\nclass Return extends ParentNode {\n  static readonly kind = \"return\"\n\n  render(opts: CGOptions): string {\n    return \"return \" + super.render(opts)\n  }\n}\n\nclass Try extends BlockNode {\n  catch?: Catch\n  finally?: Finally\n\n  render(opts: CGOptions): string {\n    let code = \"try\" + super.render(opts)\n    if (this.catch) code += this.catch.render(opts)\n    if (this.finally) code += this.finally.render(opts)\n    return code\n  }\n\n  optimizeNodes(): this {\n    super.optimizeNodes()\n    this.catch?.optimizeNodes() as Catch | undefined\n    this.finally?.optimizeNodes() as Finally | undefined\n    return this\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this {\n    super.optimizeNames(names, constants)\n    this.catch?.optimizeNames(names, constants)\n    this.finally?.optimizeNames(names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = super.names\n    if (this.catch) addNames(names, this.catch.names)\n    if (this.finally) addNames(names, this.finally.names)\n    return names\n  }\n\n  // get count(): number {\n  //   return super.count + (this.catch?.count || 0) + (this.finally?.count || 0)\n  // }\n}\n\nclass Catch extends BlockNode {\n  static readonly kind = \"catch\"\n  constructor(readonly error: Name) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `catch(${this.error})` + super.render(opts)\n  }\n}\n\nclass Finally extends BlockNode {\n  static readonly kind = \"finally\"\n  render(opts: CGOptions): string {\n    return \"finally\" + super.render(opts)\n  }\n}\n\ntype StartBlockNode = If | For | Func | Return | Try\n\ntype LeafNode = Def | Assign | Label | Break | Throw | AnyCode\n\ntype ChildNode = StartBlockNode | LeafNode\n\ntype EndBlockNodeType =\n  | typeof If\n  | typeof Else\n  | typeof For\n  | typeof Func\n  | typeof Return\n  | typeof Catch\n  | typeof Finally\n\ntype Constants = Record<string, SafeExpr | undefined>\n\nexport interface CodeGenOptions {\n  es5?: boolean\n  lines?: boolean\n  ownProperties?: boolean\n}\n\ninterface CGOptions extends CodeGenOptions {\n  _n: \"\\n\" | \"\"\n}\n\nexport class CodeGen {\n  readonly _scope: Scope\n  readonly _extScope: ValueScope\n  readonly _values: ScopeValueSets = {}\n  private readonly _nodes: ParentNode[]\n  private readonly _blockStarts: number[] = []\n  private readonly _constants: Constants = {}\n  private readonly opts: CGOptions\n\n  constructor(extScope: ValueScope, opts: CodeGenOptions = {}) {\n    this.opts = {...opts, _n: opts.lines ? \"\\n\" : \"\"}\n    this._extScope = extScope\n    this._scope = new Scope({parent: extScope})\n    this._nodes = [new Root()]\n  }\n\n  toString(): string {\n    return this._root.render(this.opts)\n  }\n\n  // returns unique name in the internal scope\n  name(prefix: string): Name {\n    return this._scope.name(prefix)\n  }\n\n  // reserves unique name in the external scope\n  scopeName(prefix: string): ValueScopeName {\n    return this._extScope.name(prefix)\n  }\n\n  // reserves unique name in the external scope and assigns value to it\n  scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name {\n    const name = this._extScope.value(prefixOrName, value)\n    const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set())\n    vs.add(name)\n    return name\n  }\n\n  getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n    return this._extScope.getValue(prefix, keyOrRef)\n  }\n\n  // return code that assigns values in the external scope to the names that are used internally\n  // (same names that were returned by gen.scopeName or gen.scopeValue)\n  scopeRefs(scopeName: Name): Code {\n    return this._extScope.scopeRefs(scopeName, this._values)\n  }\n\n  scopeCode(): Code {\n    return this._extScope.scopeCode(this._values)\n  }\n\n  private _def(\n    varKind: Name,\n    nameOrPrefix: Name | string,\n    rhs?: SafeExpr,\n    constant?: boolean\n  ): Name {\n    const name = this._scope.toName(nameOrPrefix)\n    if (rhs !== undefined && constant) this._constants[name.str] = rhs\n    this._leafNode(new Def(varKind, name, rhs))\n    return name\n  }\n\n  // `const` declaration (`var` in es5 mode)\n  const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.const, nameOrPrefix, rhs, _constant)\n  }\n\n  // `let` declaration with optional assignment (`var` in es5 mode)\n  let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.let, nameOrPrefix, rhs, _constant)\n  }\n\n  // `var` declaration with optional assignment\n  var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.var, nameOrPrefix, rhs, _constant)\n  }\n\n  // assignment code\n  assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen {\n    return this._leafNode(new Assign(lhs, rhs, sideEffects))\n  }\n\n  // `+=` code\n  add(lhs: Code, rhs: SafeExpr): CodeGen {\n    return this._leafNode(new AssignOp(lhs, operators.ADD, rhs))\n  }\n\n  // appends passed SafeExpr to code or executes Block\n  code(c: Block | SafeExpr): CodeGen {\n    if (typeof c == \"function\") c()\n    else if (c !== nil) this._leafNode(new AnyCode(c))\n    return this\n  }\n\n  // returns code for object literal for the passed argument list of key-value pairs\n  object(...keyValues: [Name | string, SafeExpr | string][]): _Code {\n    const code: CodeItem[] = [\"{\"]\n    for (const [key, value] of keyValues) {\n      if (code.length > 1) code.push(\",\")\n      code.push(key)\n      if (key !== value || this.opts.es5) {\n        code.push(\":\")\n        addCodeArg(code, value)\n      }\n    }\n    code.push(\"}\")\n    return new _Code(code)\n  }\n\n  // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n  if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen {\n    this._blockNode(new If(condition))\n\n    if (thenBody && elseBody) {\n      this.code(thenBody).else().code(elseBody).endIf()\n    } else if (thenBody) {\n      this.code(thenBody).endIf()\n    } else if (elseBody) {\n      throw new Error('CodeGen: \"else\" body without \"then\" body')\n    }\n    return this\n  }\n\n  // `else if` clause - invalid without `if` or after `else` clauses\n  elseIf(condition: Code | boolean): CodeGen {\n    return this._elseNode(new If(condition))\n  }\n\n  // `else` clause - only valid after `if` or `else if` clauses\n  else(): CodeGen {\n    return this._elseNode(new Else())\n  }\n\n  // end `if` statement (needed if gen.if was used only with condition)\n  endIf(): CodeGen {\n    return this._endBlockNode(If, Else)\n  }\n\n  private _for(node: For, forBody?: Block): CodeGen {\n    this._blockNode(node)\n    if (forBody) this.code(forBody).endFor()\n    return this\n  }\n\n  // a generic `for` clause (or statement if `forBody` is passed)\n  for(iteration: Code, forBody?: Block): CodeGen {\n    return this._for(new ForLoop(iteration), forBody)\n  }\n\n  // `for` statement for a range of values\n  forRange(\n    nameOrPrefix: Name | string,\n    from: SafeExpr,\n    to: SafeExpr,\n    forBody: (index: Name) => void,\n    varKind: Code = this.opts.es5 ? varKinds.var : varKinds.let\n  ): CodeGen {\n    const name = this._scope.toName(nameOrPrefix)\n    return this._for(new ForRange(varKind, name, from, to), () => forBody(name))\n  }\n\n  // `for-of` statement (in es5 mode replace with a normal for loop)\n  forOf(\n    nameOrPrefix: Name | string,\n    iterable: Code,\n    forBody: (item: Name) => void,\n    varKind: Code = varKinds.const\n  ): CodeGen {\n    const name = this._scope.toName(nameOrPrefix)\n    if (this.opts.es5) {\n      const arr = iterable instanceof Name ? iterable : this.var(\"_arr\", iterable)\n      return this.forRange(\"_i\", 0, _`${arr}.length`, (i) => {\n        this.var(name, _`${arr}[${i}]`)\n        forBody(name)\n      })\n    }\n    return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name))\n  }\n\n  // `for-in` statement.\n  // With option `ownProperties` replaced with a `for-of` loop for object keys\n  forIn(\n    nameOrPrefix: Name | string,\n    obj: Code,\n    forBody: (item: Name) => void,\n    varKind: Code = this.opts.es5 ? varKinds.var : varKinds.const\n  ): CodeGen {\n    if (this.opts.ownProperties) {\n      return this.forOf(nameOrPrefix, _`Object.keys(${obj})`, forBody)\n    }\n    const name = this._scope.toName(nameOrPrefix)\n    return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name))\n  }\n\n  // end `for` loop\n  endFor(): CodeGen {\n    return this._endBlockNode(For)\n  }\n\n  // `label` statement\n  label(label: Name): CodeGen {\n    return this._leafNode(new Label(label))\n  }\n\n  // `break` statement\n  break(label?: Code): CodeGen {\n    return this._leafNode(new Break(label))\n  }\n\n  // `return` statement\n  return(value: Block | SafeExpr): CodeGen {\n    const node = new Return()\n    this._blockNode(node)\n    this.code(value)\n    if (node.nodes.length !== 1) throw new Error('CodeGen: \"return\" should have one node')\n    return this._endBlockNode(Return)\n  }\n\n  // `try` statement\n  try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen {\n    if (!catchCode && !finallyCode) throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"')\n    const node = new Try()\n    this._blockNode(node)\n    this.code(tryBody)\n    if (catchCode) {\n      const error = this.name(\"e\")\n      this._currNode = node.catch = new Catch(error)\n      catchCode(error)\n    }\n    if (finallyCode) {\n      this._currNode = node.finally = new Finally()\n      this.code(finallyCode)\n    }\n    return this._endBlockNode(Catch, Finally)\n  }\n\n  // `throw` statement\n  throw(error: Code): CodeGen {\n    return this._leafNode(new Throw(error))\n  }\n\n  // start self-balancing block\n  block(body?: Block, nodeCount?: number): CodeGen {\n    this._blockStarts.push(this._nodes.length)\n    if (body) this.code(body).endBlock(nodeCount)\n    return this\n  }\n\n  // end the current self-balancing block\n  endBlock(nodeCount?: number): CodeGen {\n    const len = this._blockStarts.pop()\n    if (len === undefined) throw new Error(\"CodeGen: not in self-balancing block\")\n    const toClose = this._nodes.length - len\n    if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n      throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`)\n    }\n    this._nodes.length = len\n    return this\n  }\n\n  // `function` heading (or definition if funcBody is passed)\n  func(name: Name, args: Code = nil, async?: boolean, funcBody?: Block): CodeGen {\n    this._blockNode(new Func(name, args, async))\n    if (funcBody) this.code(funcBody).endFunc()\n    return this\n  }\n\n  // end function definition\n  endFunc(): CodeGen {\n    return this._endBlockNode(Func)\n  }\n\n  optimize(n = 1): void {\n    while (n-- > 0) {\n      this._root.optimizeNodes()\n      this._root.optimizeNames(this._root.names, this._constants)\n    }\n  }\n\n  private _leafNode(node: LeafNode): CodeGen {\n    this._currNode.nodes.push(node)\n    return this\n  }\n\n  private _blockNode(node: StartBlockNode): void {\n    this._currNode.nodes.push(node)\n    this._nodes.push(node)\n  }\n\n  private _endBlockNode(N1: EndBlockNodeType, N2?: EndBlockNodeType): CodeGen {\n    const n = this._currNode\n    if (n instanceof N1 || (N2 && n instanceof N2)) {\n      this._nodes.pop()\n      return this\n    }\n    throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`)\n  }\n\n  private _elseNode(node: If | Else): CodeGen {\n    const n = this._currNode\n    if (!(n instanceof If)) {\n      throw new Error('CodeGen: \"else\" without \"if\"')\n    }\n    this._currNode = n.else = node\n    return this\n  }\n\n  private get _root(): Root {\n    return this._nodes[0] as Root\n  }\n\n  private get _currNode(): ParentNode {\n    const ns = this._nodes\n    return ns[ns.length - 1]\n  }\n\n  private set _currNode(node: ParentNode) {\n    const ns = this._nodes\n    ns[ns.length - 1] = node\n  }\n\n  // get nodeCount(): number {\n  //   return this._root.count\n  // }\n}\n\nfunction addNames(names: UsedNames, from: UsedNames): UsedNames {\n  for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0)\n  return names\n}\n\nfunction addExprNames(names: UsedNames, from: SafeExpr): UsedNames {\n  return from instanceof _CodeOrName ? addNames(names, from.names) : names\n}\n\nfunction optimizeExpr<T extends SafeExpr | Code>(expr: T, names: UsedNames, constants: Constants): T\nfunction optimizeExpr(expr: SafeExpr, names: UsedNames, constants: Constants): SafeExpr {\n  if (expr instanceof Name) return replaceName(expr)\n  if (!canOptimize(expr)) return expr\n  return new _Code(\n    expr._items.reduce((items: CodeItem[], c: SafeExpr | string) => {\n      if (c instanceof Name) c = replaceName(c)\n      if (c instanceof _Code) items.push(...c._items)\n      else items.push(c)\n      return items\n    }, [])\n  )\n\n  function replaceName(n: Name): SafeExpr {\n    const c = constants[n.str]\n    if (c === undefined || names[n.str] !== 1) return n\n    delete names[n.str]\n    return c\n  }\n\n  function canOptimize(e: SafeExpr): e is _Code {\n    return (\n      e instanceof _Code &&\n      e._items.some(\n        (c) => c instanceof Name && names[c.str] === 1 && constants[c.str] !== undefined\n      )\n    )\n  }\n}\n\nfunction subtractNames(names: UsedNames, from: UsedNames): void {\n  for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0)\n}\n\nexport function not<T extends Code | SafeExpr>(x: T): T\nexport function not(x: Code | SafeExpr): Code | SafeExpr {\n  return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : _`!${par(x)}`\n}\n\nconst andCode = mappend(operators.AND)\n\n// boolean AND (&&) expression with the passed arguments\nexport function and(...args: Code[]): Code {\n  return args.reduce(andCode)\n}\n\nconst orCode = mappend(operators.OR)\n\n// boolean OR (||) expression with the passed arguments\nexport function or(...args: Code[]): Code {\n  return args.reduce(orCode)\n}\n\ntype MAppend = (x: Code, y: Code) => Code\n\nfunction mappend(op: Code): MAppend {\n  return (x, y) => (x === nil ? y : y === nil ? x : _`${par(x)} ${op} ${par(y)}`)\n}\n\nfunction par(x: Code): Code {\n  return x instanceof Name ? x : _`(${x})`\n}\n", "import type {AnySchema, EvaluatedProperties, EvaluatedItems} from \"../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \".\"\nimport {_, getProperty, Code, Name, CodeGen} from \"./codegen\"\nimport {_Code} from \"./codegen/code\"\nimport type {Rule, ValidationRules} from \"./rules\"\n\n// TODO refactor to use Set\nexport function toHash<T extends string = string>(arr: T[]): {[K in T]?: true} {\n  const hash: {[K in T]?: true} = {}\n  for (const item of arr) hash[item] = true\n  return hash\n}\n\nexport function alwaysValidSchema(it: SchemaCxt, schema: AnySchema): boolean | void {\n  if (typeof schema == \"boolean\") return schema\n  if (Object.keys(schema).length === 0) return true\n  checkUnknownRules(it, schema)\n  return !schemaHasRules(schema, it.self.RULES.all)\n}\n\nexport function checkUnknownRules(it: SchemaCxt, schema: AnySchema = it.schema): void {\n  const {opts, self} = it\n  if (!opts.strictSchema) return\n  if (typeof schema === \"boolean\") return\n  const rules = self.RULES.keywords\n  for (const key in schema) {\n    if (!rules[key]) checkStrictMode(it, `unknown keyword: \"${key}\"`)\n  }\n}\n\nexport function schemaHasRules(\n  schema: AnySchema,\n  rules: {[Key in string]?: boolean | Rule}\n): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (rules[key]) return true\n  return false\n}\n\nexport function schemaHasRulesButRef(schema: AnySchema, RULES: ValidationRules): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (key !== \"$ref\" && RULES.all[key]) return true\n  return false\n}\n\nexport function schemaRefOrVal(\n  {topSchemaRef, schemaPath}: SchemaObjCxt,\n  schema: unknown,\n  keyword: string,\n  $data?: string | false\n): Code | number | boolean {\n  if (!$data) {\n    if (typeof schema == \"number\" || typeof schema == \"boolean\") return schema\n    if (typeof schema == \"string\") return _`${schema}`\n  }\n  return _`${topSchemaRef}${schemaPath}${getProperty(keyword)}`\n}\n\nexport function unescapeFragment(str: string): string {\n  return unescapeJsonPointer(decodeURIComponent(str))\n}\n\nexport function escapeFragment(str: string | number): string {\n  return encodeURIComponent(escapeJsonPointer(str))\n}\n\nexport function escapeJsonPointer(str: string | number): string {\n  if (typeof str == \"number\") return `${str}`\n  return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\nexport function unescapeJsonPointer(str: string): string {\n  return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\nexport function eachItem<T>(xs: T | T[], f: (x: T) => void): void {\n  if (Array.isArray(xs)) {\n    for (const x of xs) f(x)\n  } else {\n    f(xs)\n  }\n}\n\ntype SomeEvaluated = EvaluatedProperties | EvaluatedItems\n\ntype MergeEvaluatedFunc<T extends SomeEvaluated> = (\n  gen: CodeGen,\n  from: Name | T,\n  to: Name | Exclude<T, true> | undefined,\n  toName?: typeof Name\n) => Name | T\n\ninterface MakeMergeFuncArgs<T extends SomeEvaluated> {\n  mergeNames: (gen: CodeGen, from: Name, to: Name) => void\n  mergeToName: (gen: CodeGen, from: T, to: Name) => void\n  mergeValues: (from: T, to: Exclude<T, true>) => T\n  resultToName: (gen: CodeGen, res?: T) => Name\n}\n\nfunction makeMergeEvaluated<T extends SomeEvaluated>({\n  mergeNames,\n  mergeToName,\n  mergeValues,\n  resultToName,\n}: MakeMergeFuncArgs<T>): MergeEvaluatedFunc<T> {\n  return (gen, from, to, toName) => {\n    const res =\n      to === undefined\n        ? from\n        : to instanceof Name\n        ? (from instanceof Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n        : from instanceof Name\n        ? (mergeToName(gen, to, from), from)\n        : mergeValues(from, to)\n    return toName === Name && !(res instanceof Name) ? resultToName(gen, res) : res\n  }\n}\n\ninterface MergeEvaluated {\n  props: MergeEvaluatedFunc<EvaluatedProperties>\n  items: MergeEvaluatedFunc<EvaluatedItems>\n}\n\nexport const mergeEvaluated: MergeEvaluated = {\n  props: makeMergeEvaluated({\n    mergeNames: (gen, from, to) =>\n      gen.if(_`${to} !== true && ${from} !== undefined`, () => {\n        gen.if(\n          _`${from} === true`,\n          () => gen.assign(to, true),\n          () => gen.assign(to, _`${to} || {}`).code(_`Object.assign(${to}, ${from})`)\n        )\n      }),\n    mergeToName: (gen, from, to) =>\n      gen.if(_`${to} !== true`, () => {\n        if (from === true) {\n          gen.assign(to, true)\n        } else {\n          gen.assign(to, _`${to} || {}`)\n          setEvaluated(gen, to, from)\n        }\n      }),\n    mergeValues: (from, to) => (from === true ? true : {...from, ...to}),\n    resultToName: evaluatedPropsToName,\n  }),\n  items: makeMergeEvaluated({\n    mergeNames: (gen, from, to) =>\n      gen.if(_`${to} !== true && ${from} !== undefined`, () =>\n        gen.assign(to, _`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)\n      ),\n    mergeToName: (gen, from, to) =>\n      gen.if(_`${to} !== true`, () =>\n        gen.assign(to, from === true ? true : _`${to} > ${from} ? ${to} : ${from}`)\n      ),\n    mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n    resultToName: (gen, items) => gen.var(\"items\", items),\n  }),\n}\n\nexport function evaluatedPropsToName(gen: CodeGen, ps?: EvaluatedProperties): Name {\n  if (ps === true) return gen.var(\"props\", true)\n  const props = gen.var(\"props\", _`{}`)\n  if (ps !== undefined) setEvaluated(gen, props, ps)\n  return props\n}\n\nexport function setEvaluated(gen: CodeGen, props: Name, ps: {[K in string]?: true}): void {\n  Object.keys(ps).forEach((p) => gen.assign(_`${props}${getProperty(p)}`, true))\n}\n\nconst snippets: {[S in string]?: _Code} = {}\n\nexport function useFunc(gen: CodeGen, f: {code: string}): Name {\n  return gen.scopeValue(\"func\", {\n    ref: f,\n    code: snippets[f.code] || (snippets[f.code] = new _Code(f.code)),\n  })\n}\n\nexport enum Type {\n  Num,\n  Str,\n}\n\nexport function getErrorPath(\n  dataProp: Name | string | number,\n  dataPropType?: Type,\n  jsPropertySyntax?: boolean\n): Code | string {\n  // let path\n  if (dataProp instanceof Name) {\n    const isNumber = dataPropType === Type.Num\n    return jsPropertySyntax\n      ? isNumber\n        ? _`\"[\" + ${dataProp} + \"]\"`\n        : _`\"['\" + ${dataProp} + \"']\"`\n      : isNumber\n      ? _`\"/\" + ${dataProp}`\n      : _`\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")` // TODO maybe use global escapePointer\n  }\n  return jsPropertySyntax ? getProperty(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp)\n}\n\nexport function checkStrictMode(\n  it: SchemaCxt,\n  msg: string,\n  mode: boolean | \"log\" = it.opts.strictSchema\n): void {\n  if (!mode) return\n  msg = `strict mode: ${msg}`\n  if (mode === true) throw new Error(msg)\n  it.self.logger.warn(msg)\n}\n", "import {Name} from \"./codegen\"\n\nconst names = {\n  // validation function arguments\n  data: new Name(\"data\"), // data passed to validation function\n  // args passed from referencing schema\n  valCxt: new Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n  instancePath: new Name(\"instancePath\"),\n  parentData: new Name(\"parentData\"),\n  parentDataProperty: new Name(\"parentDataProperty\"),\n  rootData: new Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n  dynamicAnchors: new Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n  // function scoped variables\n  vErrors: new Name(\"vErrors\"), // null or array of validation errors\n  errors: new Name(\"errors\"), // counter of validation errors\n  this: new Name(\"this\"),\n  // \"globals\"\n  self: new Name(\"self\"),\n  scope: new Name(\"scope\"),\n  // JTD serialize/parse name for JSON string and position\n  json: new Name(\"json\"),\n  jsonPos: new Name(\"jsonPos\"),\n  jsonLen: new Name(\"jsonLen\"),\n  jsonPart: new Name(\"jsonPart\"),\n}\n\nexport default names\n", "import type {KeywordErrorCxt, KeywordErrorDefinition} from \"../types\"\nimport type {SchemaCxt} from \"./index\"\nimport {CodeGen, _, str, strConcat, Code, Name} from \"./codegen\"\nimport {SafeExpr} from \"./codegen/code\"\nimport {getErrorPath, Type} from \"./util\"\nimport N from \"./names\"\n\nexport const keywordError: KeywordErrorDefinition = {\n  message: ({keyword}) => str`must pass \"${keyword}\" keyword validation`,\n}\n\nexport const keyword$DataError: KeywordErrorDefinition = {\n  message: ({keyword, schemaType}) =>\n    schemaType\n      ? str`\"${keyword}\" keyword must be ${schemaType} ($data)`\n      : str`\"${keyword}\" keyword is invalid ($data)`,\n}\n\nexport interface ErrorPaths {\n  instancePath?: Code\n  schemaPath?: string\n  parentSchema?: boolean\n}\n\nexport function reportError(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition = keywordError,\n  errorPaths?: ErrorPaths,\n  overrideAllErrors?: boolean\n): void {\n  const {it} = cxt\n  const {gen, compositeRule, allErrors} = it\n  const errObj = errorObjectCode(cxt, error, errorPaths)\n  if (overrideAllErrors ?? (compositeRule || allErrors)) {\n    addError(gen, errObj)\n  } else {\n    returnErrors(it, _`[${errObj}]`)\n  }\n}\n\nexport function reportExtraError(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition = keywordError,\n  errorPaths?: ErrorPaths\n): void {\n  const {it} = cxt\n  const {gen, compositeRule, allErrors} = it\n  const errObj = errorObjectCode(cxt, error, errorPaths)\n  addError(gen, errObj)\n  if (!(compositeRule || allErrors)) {\n    returnErrors(it, N.vErrors)\n  }\n}\n\nexport function resetErrorsCount(gen: CodeGen, errsCount: Name): void {\n  gen.assign(N.errors, errsCount)\n  gen.if(_`${N.vErrors} !== null`, () =>\n    gen.if(\n      errsCount,\n      () => gen.assign(_`${N.vErrors}.length`, errsCount),\n      () => gen.assign(N.vErrors, null)\n    )\n  )\n}\n\nexport function extendErrors({\n  gen,\n  keyword,\n  schemaValue,\n  data,\n  errsCount,\n  it,\n}: KeywordErrorCxt): void {\n  /* istanbul ignore if */\n  if (errsCount === undefined) throw new Error(\"ajv implementation error\")\n  const err = gen.name(\"err\")\n  gen.forRange(\"i\", errsCount, N.errors, (i) => {\n    gen.const(err, _`${N.vErrors}[${i}]`)\n    gen.if(_`${err}.instancePath === undefined`, () =>\n      gen.assign(_`${err}.instancePath`, strConcat(N.instancePath, it.errorPath))\n    )\n    gen.assign(_`${err}.schemaPath`, str`${it.errSchemaPath}/${keyword}`)\n    if (it.opts.verbose) {\n      gen.assign(_`${err}.schema`, schemaValue)\n      gen.assign(_`${err}.data`, data)\n    }\n  })\n}\n\nfunction addError(gen: CodeGen, errObj: Code): void {\n  const err = gen.const(\"err\", errObj)\n  gen.if(\n    _`${N.vErrors} === null`,\n    () => gen.assign(N.vErrors, _`[${err}]`),\n    _`${N.vErrors}.push(${err})`\n  )\n  gen.code(_`${N.errors}++`)\n}\n\nfunction returnErrors(it: SchemaCxt, errs: Code): void {\n  const {gen, validateName, schemaEnv} = it\n  if (schemaEnv.$async) {\n    gen.throw(_`new ${it.ValidationError as Name}(${errs})`)\n  } else {\n    gen.assign(_`${validateName}.errors`, errs)\n    gen.return(false)\n  }\n}\n\nconst E = {\n  keyword: new Name(\"keyword\"),\n  schemaPath: new Name(\"schemaPath\"), // also used in JTD errors\n  params: new Name(\"params\"),\n  propertyName: new Name(\"propertyName\"),\n  message: new Name(\"message\"),\n  schema: new Name(\"schema\"),\n  parentSchema: new Name(\"parentSchema\"),\n}\n\nfunction errorObjectCode(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition,\n  errorPaths?: ErrorPaths\n): Code {\n  const {createErrors} = cxt.it\n  if (createErrors === false) return _`{}`\n  return errorObject(cxt, error, errorPaths)\n}\n\nfunction errorObject(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition,\n  errorPaths: ErrorPaths = {}\n): Code {\n  const {gen, it} = cxt\n  const keyValues: [Name, SafeExpr | string][] = [\n    errorInstancePath(it, errorPaths),\n    errorSchemaPath(cxt, errorPaths),\n  ]\n  extraErrorProps(cxt, error, keyValues)\n  return gen.object(...keyValues)\n}\n\nfunction errorInstancePath({errorPath}: SchemaCxt, {instancePath}: ErrorPaths): [Name, Code] {\n  const instPath = instancePath\n    ? str`${errorPath}${getErrorPath(instancePath, Type.Str)}`\n    : errorPath\n  return [N.instancePath, strConcat(N.instancePath, instPath)]\n}\n\nfunction errorSchemaPath(\n  {keyword, it: {errSchemaPath}}: KeywordErrorCxt,\n  {schemaPath, parentSchema}: ErrorPaths\n): [Name, string | Code] {\n  let schPath = parentSchema ? errSchemaPath : str`${errSchemaPath}/${keyword}`\n  if (schemaPath) {\n    schPath = str`${schPath}${getErrorPath(schemaPath, Type.Str)}`\n  }\n  return [E.schemaPath, schPath]\n}\n\nfunction extraErrorProps(\n  cxt: KeywordErrorCxt,\n  {params, message}: KeywordErrorDefinition,\n  keyValues: [Name, SafeExpr | string][]\n): void {\n  const {keyword, data, schemaValue, it} = cxt\n  const {opts, propertyName, topSchemaRef, schemaPath} = it\n  keyValues.push(\n    [E.keyword, keyword],\n    [E.params, typeof params == \"function\" ? params(cxt) : params || _`{}`]\n  )\n  if (opts.messages) {\n    keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message])\n  }\n  if (opts.verbose) {\n    keyValues.push(\n      [E.schema, schemaValue],\n      [E.parentSchema, _`${topSchemaRef}${schemaPath}`],\n      [N.data, data]\n    )\n  }\n  if (propertyName) keyValues.push([E.propertyName, propertyName])\n}\n", "import type {KeywordErrorDefinition, KeywordErrorCxt} from \"../../types\"\nimport type {SchemaCxt} from \"..\"\nimport {reportError} from \"../errors\"\nimport {_, Name} from \"../codegen\"\nimport N from \"../names\"\n\nconst boolError: KeywordErrorDefinition = {\n  message: \"boolean schema is false\",\n}\n\nexport function topBoolOrEmptySchema(it: SchemaCxt): void {\n  const {gen, schema, validateName} = it\n  if (schema === false) {\n    falseSchemaError(it, false)\n  } else if (typeof schema == \"object\" && schema.$async === true) {\n    gen.return(N.data)\n  } else {\n    gen.assign(_`${validateName}.errors`, null)\n    gen.return(true)\n  }\n}\n\nexport function boolOrEmptySchema(it: SchemaCxt, valid: Name): void {\n  const {gen, schema} = it\n  if (schema === false) {\n    gen.var(valid, false) // TODO var\n    falseSchemaError(it)\n  } else {\n    gen.var(valid, true) // TODO var\n  }\n}\n\nfunction falseSchemaError(it: SchemaCxt, overrideAllErrors?: boolean): void {\n  const {gen, data} = it\n  // TODO maybe some other interface should be used for non-keyword validation errors...\n  const cxt: KeywordErrorCxt = {\n    gen,\n    keyword: \"false schema\",\n    data,\n    schema: false,\n    schemaCode: false,\n    schemaValue: false,\n    params: {},\n    it,\n  }\n  reportError(cxt, boolError, undefined, overrideAllErrors)\n}\n", "import type {AddedKeywordDefinition} from \"../types\"\n\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"] as const\n\nexport type JSONType = (typeof _jsonTypes)[number]\n\nconst jsonTypes: Set<string> = new Set(_jsonTypes)\n\nexport function isJSONType(x: unknown): x is JSONType {\n  return typeof x == \"string\" && jsonTypes.has(x)\n}\n\ntype ValidationTypes = {\n  [K in JSONType]: boolean | RuleGroup | undefined\n}\n\nexport interface ValidationRules {\n  rules: RuleGroup[]\n  post: RuleGroup\n  all: {[Key in string]?: boolean | Rule} // rules that have to be validated\n  keywords: {[Key in string]?: boolean} // all known keywords (superset of \"all\")\n  types: ValidationTypes\n}\n\nexport interface RuleGroup {\n  type?: JSONType\n  rules: Rule[]\n}\n\n// This interface wraps KeywordDefinition because definition can have multiple keywords\nexport interface Rule {\n  keyword: string\n  definition: AddedKeywordDefinition\n}\n\nexport function getRules(): ValidationRules {\n  const groups: Record<\"number\" | \"string\" | \"array\" | \"object\", RuleGroup> = {\n    number: {type: \"number\", rules: []},\n    string: {type: \"string\", rules: []},\n    array: {type: \"array\", rules: []},\n    object: {type: \"object\", rules: []},\n  }\n  return {\n    types: {...groups, integer: true, boolean: true, null: true},\n    rules: [{rules: []}, groups.number, groups.string, groups.array, groups.object],\n    post: {rules: []},\n    all: {},\n    keywords: {},\n  }\n}\n", "import type {AnySchemaObject} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport type {JSONType, RuleGroup, Rule} from \"../rules\"\n\nexport function schemaHasRulesForType(\n  {schema, self}: SchemaObjCxt,\n  type: JSONType\n): boolean | undefined {\n  const group = self.RULES.types[type]\n  return group && group !== true && shouldUseGroup(schema, group)\n}\n\nexport function shouldUseGroup(schema: AnySchemaObject, group: RuleGroup): boolean {\n  return group.rules.some((rule) => shouldUseRule(schema, rule))\n}\n\nexport function shouldUseRule(schema: AnySchemaObject, rule: Rule): boolean | undefined {\n  return (\n    schema[rule.keyword] !== undefined ||\n    rule.definition.implements?.some((kwd) => schema[kwd] !== undefined)\n  )\n}\n", "import type {\n  KeywordErrorDefinition,\n  KeywordErrorCxt,\n  ErrorObject,\n  AnySchemaObject,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {isJSONType, JSONType} from \"../rules\"\nimport {schemaHasRulesForType} from \"./applicability\"\nimport {reportError} from \"../errors\"\nimport {_, nil, and, not, operators, Code, Name} from \"../codegen\"\nimport {toHash, schemaRefOrVal} from \"../util\"\n\nexport enum DataType {\n  Correct,\n  Wrong,\n}\n\nexport function getSchemaTypes(schema: AnySchemaObject): JSONType[] {\n  const types = getJSONTypes(schema.type)\n  const hasNull = types.includes(\"null\")\n  if (hasNull) {\n    if (schema.nullable === false) throw new Error(\"type: null contradicts nullable: false\")\n  } else {\n    if (!types.length && schema.nullable !== undefined) {\n      throw new Error('\"nullable\" cannot be used without \"type\"')\n    }\n    if (schema.nullable === true) types.push(\"null\")\n  }\n  return types\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport function getJSONTypes(ts: unknown | unknown[]): JSONType[] {\n  const types: unknown[] = Array.isArray(ts) ? ts : ts ? [ts] : []\n  if (types.every(isJSONType)) return types\n  throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"))\n}\n\nexport function coerceAndCheckDataType(it: SchemaObjCxt, types: JSONType[]): boolean {\n  const {gen, data, opts} = it\n  const coerceTo = coerceToTypes(types, opts.coerceTypes)\n  const checkTypes =\n    types.length > 0 &&\n    !(coerceTo.length === 0 && types.length === 1 && schemaHasRulesForType(it, types[0]))\n  if (checkTypes) {\n    const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong)\n    gen.if(wrongType, () => {\n      if (coerceTo.length) coerceData(it, types, coerceTo)\n      else reportTypeError(it)\n    })\n  }\n  return checkTypes\n}\n\nconst COERCIBLE: Set<JSONType> = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"])\nfunction coerceToTypes(types: JSONType[], coerceTypes?: boolean | \"array\"): JSONType[] {\n  return coerceTypes\n    ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n    : []\n}\n\nfunction coerceData(it: SchemaObjCxt, types: JSONType[], coerceTo: JSONType[]): void {\n  const {gen, data, opts} = it\n  const dataType = gen.let(\"dataType\", _`typeof ${data}`)\n  const coerced = gen.let(\"coerced\", _`undefined`)\n  if (opts.coerceTypes === \"array\") {\n    gen.if(_`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () =>\n      gen\n        .assign(data, _`${data}[0]`)\n        .assign(dataType, _`typeof ${data}`)\n        .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))\n    )\n  }\n  gen.if(_`${coerced} !== undefined`)\n  for (const t of coerceTo) {\n    if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n      coerceSpecificType(t)\n    }\n  }\n  gen.else()\n  reportTypeError(it)\n  gen.endIf()\n\n  gen.if(_`${coerced} !== undefined`, () => {\n    gen.assign(data, coerced)\n    assignParentData(it, coerced)\n  })\n\n  function coerceSpecificType(t: string): void {\n    switch (t) {\n      case \"string\":\n        gen\n          .elseIf(_`${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n          .assign(coerced, _`\"\" + ${data}`)\n          .elseIf(_`${data} === null`)\n          .assign(coerced, _`\"\"`)\n        return\n      case \"number\":\n        gen\n          .elseIf(\n            _`${dataType} == \"boolean\" || ${data} === null\n              || (${dataType} == \"string\" && ${data} && ${data} == +${data})`\n          )\n          .assign(coerced, _`+${data}`)\n        return\n      case \"integer\":\n        gen\n          .elseIf(\n            _`${dataType} === \"boolean\" || ${data} === null\n              || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`\n          )\n          .assign(coerced, _`+${data}`)\n        return\n      case \"boolean\":\n        gen\n          .elseIf(_`${data} === \"false\" || ${data} === 0 || ${data} === null`)\n          .assign(coerced, false)\n          .elseIf(_`${data} === \"true\" || ${data} === 1`)\n          .assign(coerced, true)\n        return\n      case \"null\":\n        gen.elseIf(_`${data} === \"\" || ${data} === 0 || ${data} === false`)\n        gen.assign(coerced, null)\n        return\n\n      case \"array\":\n        gen\n          .elseIf(\n            _`${dataType} === \"string\" || ${dataType} === \"number\"\n              || ${dataType} === \"boolean\" || ${data} === null`\n          )\n          .assign(coerced, _`[${data}]`)\n    }\n  }\n}\n\nfunction assignParentData({gen, parentData, parentDataProperty}: SchemaObjCxt, expr: Name): void {\n  // TODO use gen.property\n  gen.if(_`${parentData} !== undefined`, () =>\n    gen.assign(_`${parentData}[${parentDataProperty}]`, expr)\n  )\n}\n\nexport function checkDataType(\n  dataType: JSONType,\n  data: Name,\n  strictNums?: boolean | \"log\",\n  correct = DataType.Correct\n): Code {\n  const EQ = correct === DataType.Correct ? operators.EQ : operators.NEQ\n  let cond: Code\n  switch (dataType) {\n    case \"null\":\n      return _`${data} ${EQ} null`\n    case \"array\":\n      cond = _`Array.isArray(${data})`\n      break\n    case \"object\":\n      cond = _`${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`\n      break\n    case \"integer\":\n      cond = numCond(_`!(${data} % 1) && !isNaN(${data})`)\n      break\n    case \"number\":\n      cond = numCond()\n      break\n    default:\n      return _`typeof ${data} ${EQ} ${dataType}`\n  }\n  return correct === DataType.Correct ? cond : not(cond)\n\n  function numCond(_cond: Code = nil): Code {\n    return and(_`typeof ${data} == \"number\"`, _cond, strictNums ? _`isFinite(${data})` : nil)\n  }\n}\n\nexport function checkDataTypes(\n  dataTypes: JSONType[],\n  data: Name,\n  strictNums?: boolean | \"log\",\n  correct?: DataType\n): Code {\n  if (dataTypes.length === 1) {\n    return checkDataType(dataTypes[0], data, strictNums, correct)\n  }\n  let cond: Code\n  const types = toHash(dataTypes)\n  if (types.array && types.object) {\n    const notObj = _`typeof ${data} != \"object\"`\n    cond = types.null ? notObj : _`!${data} || ${notObj}`\n    delete types.null\n    delete types.array\n    delete types.object\n  } else {\n    cond = nil\n  }\n  if (types.number) delete types.integer\n  for (const t in types) cond = and(cond, checkDataType(t as JSONType, data, strictNums, correct))\n  return cond\n}\n\nexport type TypeError = ErrorObject<\"type\", {type: string}>\n\nconst typeError: KeywordErrorDefinition = {\n  message: ({schema}) => `must be ${schema}`,\n  params: ({schema, schemaValue}) =>\n    typeof schema == \"string\" ? _`{type: ${schema}}` : _`{type: ${schemaValue}}`,\n}\n\nexport function reportTypeError(it: SchemaObjCxt): void {\n  const cxt = getTypeErrorContext(it)\n  reportError(cxt, typeError)\n}\n\nfunction getTypeErrorContext(it: SchemaObjCxt): KeywordErrorCxt {\n  const {gen, data, schema} = it\n  const schemaCode = schemaRefOrVal(it, schema, \"type\")\n  return {\n    gen,\n    keyword: \"type\",\n    data,\n    schema: schema.type,\n    schemaCode,\n    schemaValue: schemaCode,\n    parentSchema: schema,\n    params: {},\n    it,\n  }\n}\n", "import type {SchemaObjCxt} from \"..\"\nimport {_, getProperty, stringify} from \"../codegen\"\nimport {checkStrictMode} from \"../util\"\n\nexport function assignDefaults(it: SchemaObjCxt, ty?: string): void {\n  const {properties, items} = it.schema\n  if (ty === \"object\" && properties) {\n    for (const key in properties) {\n      assignDefault(it, key, properties[key].default)\n    }\n  } else if (ty === \"array\" && Array.isArray(items)) {\n    items.forEach((sch, i: number) => assignDefault(it, i, sch.default))\n  }\n}\n\nfunction assignDefault(it: SchemaObjCxt, prop: string | number, defaultValue: unknown): void {\n  const {gen, compositeRule, data, opts} = it\n  if (defaultValue === undefined) return\n  const childData = _`${data}${getProperty(prop)}`\n  if (compositeRule) {\n    checkStrictMode(it, `default is ignored for: ${childData}`)\n    return\n  }\n\n  let condition = _`${childData} === undefined`\n  if (opts.useDefaults === \"empty\") {\n    condition = _`${condition} || ${childData} === null || ${childData} === \"\"`\n  }\n  // `${childData} === undefined` +\n  // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n  gen.if(condition, _`${childData} = ${stringify(defaultValue)}`)\n}\n", "import type {AnySchema, SchemaMap} from \"../types\"\nimport type {SchemaCxt} from \"../compile\"\nimport type {KeywordCxt} from \"../compile/validate\"\nimport {CodeGen, _, and, or, not, nil, strConcat, getProperty, Code, Name} from \"../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../compile/util\"\nimport N from \"../compile/names\"\nimport {useFunc} from \"../compile/util\"\nexport function checkReportMissingProp(cxt: KeywordCxt, prop: string): void {\n  const {gen, data, it} = cxt\n  gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n    cxt.setParams({missingProperty: _`${prop}`}, true)\n    cxt.error()\n  })\n}\n\nexport function checkMissingProp(\n  {gen, data, it: {opts}}: KeywordCxt,\n  properties: string[],\n  missing: Name\n): Code {\n  return or(\n    ...properties.map((prop) =>\n      and(noPropertyInData(gen, data, prop, opts.ownProperties), _`${missing} = ${prop}`)\n    )\n  )\n}\n\nexport function reportMissingProp(cxt: KeywordCxt, missing: Name): void {\n  cxt.setParams({missingProperty: missing}, true)\n  cxt.error()\n}\n\nexport function hasPropFunc(gen: CodeGen): Name {\n  return gen.scopeValue(\"func\", {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    ref: Object.prototype.hasOwnProperty,\n    code: _`Object.prototype.hasOwnProperty`,\n  })\n}\n\nexport function isOwnProperty(gen: CodeGen, data: Name, property: Name | string): Code {\n  return _`${hasPropFunc(gen)}.call(${data}, ${property})`\n}\n\nexport function propertyInData(\n  gen: CodeGen,\n  data: Name,\n  property: Name | string,\n  ownProperties?: boolean\n): Code {\n  const cond = _`${data}${getProperty(property)} !== undefined`\n  return ownProperties ? _`${cond} && ${isOwnProperty(gen, data, property)}` : cond\n}\n\nexport function noPropertyInData(\n  gen: CodeGen,\n  data: Name,\n  property: Name | string,\n  ownProperties?: boolean\n): Code {\n  const cond = _`${data}${getProperty(property)} === undefined`\n  return ownProperties ? or(cond, not(isOwnProperty(gen, data, property))) : cond\n}\n\nexport function allSchemaProperties(schemaMap?: SchemaMap): string[] {\n  return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : []\n}\n\nexport function schemaProperties(it: SchemaCxt, schemaMap: SchemaMap): string[] {\n  return allSchemaProperties(schemaMap).filter(\n    (p) => !alwaysValidSchema(it, schemaMap[p] as AnySchema)\n  )\n}\n\nexport function callValidateCode(\n  {schemaCode, data, it: {gen, topSchemaRef, schemaPath, errorPath}, it}: KeywordCxt,\n  func: Code,\n  context: Code,\n  passSchema?: boolean\n): Code {\n  const dataAndSchema = passSchema ? _`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data\n  const valCxt: [Name, Code | number][] = [\n    [N.instancePath, strConcat(N.instancePath, errorPath)],\n    [N.parentData, it.parentData],\n    [N.parentDataProperty, it.parentDataProperty],\n    [N.rootData, N.rootData],\n  ]\n  if (it.opts.dynamicRef) valCxt.push([N.dynamicAnchors, N.dynamicAnchors])\n  const args = _`${dataAndSchema}, ${gen.object(...valCxt)}`\n  return context !== nil ? _`${func}.call(${context}, ${args})` : _`${func}(${args})`\n}\n\nconst newRegExp = _`new RegExp`\n\nexport function usePattern({gen, it: {opts}}: KeywordCxt, pattern: string): Name {\n  const u = opts.unicodeRegExp ? \"u\" : \"\"\n  const {regExp} = opts.code\n  const rx = regExp(pattern, u)\n\n  return gen.scopeValue(\"pattern\", {\n    key: rx.toString(),\n    ref: rx,\n    code: _`${regExp.code === \"new RegExp\" ? newRegExp : useFunc(gen, regExp)}(${pattern}, ${u})`,\n  })\n}\n\nexport function validateArray(cxt: KeywordCxt): Name {\n  const {gen, data, keyword, it} = cxt\n  const valid = gen.name(\"valid\")\n  if (it.allErrors) {\n    const validArr = gen.let(\"valid\", true)\n    validateItems(() => gen.assign(validArr, false))\n    return validArr\n  }\n  gen.var(valid, true)\n  validateItems(() => gen.break())\n  return valid\n\n  function validateItems(notValid: () => void): void {\n    const len = gen.const(\"len\", _`${data}.length`)\n    gen.forRange(\"i\", 0, len, (i) => {\n      cxt.subschema(\n        {\n          keyword,\n          dataProp: i,\n          dataPropType: Type.Num,\n        },\n        valid\n      )\n      gen.if(not(valid), notValid)\n    })\n  }\n}\n\nexport function validateUnion(cxt: KeywordCxt): void {\n  const {gen, schema, keyword, it} = cxt\n  /* istanbul ignore if */\n  if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n  const alwaysValid = schema.some((sch: AnySchema) => alwaysValidSchema(it, sch))\n  if (alwaysValid && !it.opts.unevaluated) return\n\n  const valid = gen.let(\"valid\", false)\n  const schValid = gen.name(\"_valid\")\n\n  gen.block(() =>\n    schema.forEach((_sch: AnySchema, i: number) => {\n      const schCxt = cxt.subschema(\n        {\n          keyword,\n          schemaProp: i,\n          compositeRule: true,\n        },\n        schValid\n      )\n      gen.assign(valid, _`${valid} || ${schValid}`)\n      const merged = cxt.mergeValidEvaluated(schCxt, schValid)\n      // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n      // or if all properties and items were evaluated (it.props === true && it.items === true)\n      if (!merged) gen.if(not(valid))\n    })\n  )\n\n  cxt.result(\n    valid,\n    () => cxt.reset(),\n    () => cxt.error(true)\n  )\n}\n", "import type {KeywordCxt} from \".\"\nimport type {\n  AnySchema,\n  SchemaValidateFunction,\n  AnyValidateFunction,\n  AddedKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, nil, not, stringify, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport type {JSONType} from \"../rules\"\nimport {callValidateCode} from \"../../vocabularies/code\"\nimport {extendErrors} from \"../errors\"\n\ntype KeywordCompilationResult = AnySchema | SchemaValidateFunction | AnyValidateFunction\n\nexport function macroKeywordCode(cxt: KeywordCxt, def: MacroKeywordDefinition): void {\n  const {gen, keyword, schema, parentSchema, it} = cxt\n  const macroSchema = def.macro.call(it.self, schema, parentSchema, it)\n  const schemaRef = useKeyword(gen, keyword, macroSchema)\n  if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true)\n\n  const valid = gen.name(\"valid\")\n  cxt.subschema(\n    {\n      schema: macroSchema,\n      schemaPath: nil,\n      errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n      topSchemaRef: schemaRef,\n      compositeRule: true,\n    },\n    valid\n  )\n  cxt.pass(valid, () => cxt.error(true))\n}\n\nexport function funcKeywordCode(cxt: KeywordCxt, def: FuncKeywordDefinition): void {\n  const {gen, keyword, schema, parentSchema, $data, it} = cxt\n  checkAsyncKeyword(it, def)\n  const validate =\n    !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate\n  const validateRef = useKeyword(gen, keyword, validate)\n  const valid = gen.let(\"valid\")\n  cxt.block$data(valid, validateKeyword)\n  cxt.ok(def.valid ?? valid)\n\n  function validateKeyword(): void {\n    if (def.errors === false) {\n      assignValid()\n      if (def.modifying) modifyData(cxt)\n      reportErrs(() => cxt.error())\n    } else {\n      const ruleErrs = def.async ? validateAsync() : validateSync()\n      if (def.modifying) modifyData(cxt)\n      reportErrs(() => addErrs(cxt, ruleErrs))\n    }\n  }\n\n  function validateAsync(): Name {\n    const ruleErrs = gen.let(\"ruleErrs\", null)\n    gen.try(\n      () => assignValid(_`await `),\n      (e) =>\n        gen.assign(valid, false).if(\n          _`${e} instanceof ${it.ValidationError as Name}`,\n          () => gen.assign(ruleErrs, _`${e}.errors`),\n          () => gen.throw(e)\n        )\n    )\n    return ruleErrs\n  }\n\n  function validateSync(): Code {\n    const validateErrs = _`${validateRef}.errors`\n    gen.assign(validateErrs, null)\n    assignValid(nil)\n    return validateErrs\n  }\n\n  function assignValid(_await: Code = def.async ? _`await ` : nil): void {\n    const passCxt = it.opts.passContext ? N.this : N.self\n    const passSchema = !((\"compile\" in def && !$data) || def.schema === false)\n    gen.assign(\n      valid,\n      _`${_await}${callValidateCode(cxt, validateRef, passCxt, passSchema)}`,\n      def.modifying\n    )\n  }\n\n  function reportErrs(errors: () => void): void {\n    gen.if(not(def.valid ?? valid), errors)\n  }\n}\n\nfunction modifyData(cxt: KeywordCxt): void {\n  const {gen, data, it} = cxt\n  gen.if(it.parentData, () => gen.assign(data, _`${it.parentData}[${it.parentDataProperty}]`))\n}\n\nfunction addErrs(cxt: KeywordCxt, errs: Code): void {\n  const {gen} = cxt\n  gen.if(\n    _`Array.isArray(${errs})`,\n    () => {\n      gen\n        .assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`)\n        .assign(N.errors, _`${N.vErrors}.length`)\n      extendErrors(cxt)\n    },\n    () => cxt.error()\n  )\n}\n\nfunction checkAsyncKeyword({schemaEnv}: SchemaObjCxt, def: FuncKeywordDefinition): void {\n  if (def.async && !schemaEnv.$async) throw new Error(\"async keyword in sync schema\")\n}\n\nfunction useKeyword(gen: CodeGen, keyword: string, result?: KeywordCompilationResult): Name {\n  if (result === undefined) throw new Error(`keyword \"${keyword}\" failed to compile`)\n  return gen.scopeValue(\n    \"keyword\",\n    typeof result == \"function\" ? {ref: result} : {ref: result, code: stringify(result)}\n  )\n}\n\nexport function validSchemaType(\n  schema: unknown,\n  schemaType: JSONType[],\n  allowUndefined = false\n): boolean {\n  // TODO add tests\n  return (\n    !schemaType.length ||\n    schemaType.some((st) =>\n      st === \"array\"\n        ? Array.isArray(schema)\n        : st === \"object\"\n        ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n        : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")\n    )\n  )\n}\n\nexport function validateKeywordUsage(\n  {schema, opts, self, errSchemaPath}: SchemaObjCxt,\n  def: AddedKeywordDefinition,\n  keyword: string\n): void {\n  /* istanbul ignore if */\n  if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n    throw new Error(\"ajv implementation error\")\n  }\n\n  const deps = def.dependencies\n  if (deps?.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n    throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`)\n  }\n\n  if (def.validateSchema) {\n    const valid = def.validateSchema(schema[keyword])\n    if (!valid) {\n      const msg =\n        `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n        self.errorsText(def.validateSchema.errors)\n      if (opts.validateSchema === \"log\") self.logger.error(msg)\n      else throw new Error(msg)\n    }\n  }\n}\n", "import type {AnySchema} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, str, getProperty, Code, Name} from \"../codegen\"\nimport {escapeFragment, getErrorPath, Type} from \"../util\"\nimport type {JSONType} from \"../rules\"\n\nexport interface SubschemaContext {\n  // TODO use Optional? align with SchemCxt property types\n  schema: AnySchema\n  schemaPath: Code\n  errSchemaPath: string\n  topSchemaRef?: Code\n  errorPath?: Code\n  dataLevel?: number\n  dataTypes?: JSONType[]\n  data?: Name\n  parentData?: Name\n  parentDataProperty?: Code | number\n  dataNames?: Name[]\n  dataPathArr?: (Code | number)[]\n  propertyName?: Name\n  jtdDiscriminator?: string\n  jtdMetadata?: boolean\n  compositeRule?: true\n  createErrors?: boolean\n  allErrors?: boolean\n}\n\nexport type SubschemaArgs = Partial<{\n  keyword: string\n  schemaProp: string | number\n  schema: AnySchema\n  schemaPath: Code\n  errSchemaPath: string\n  topSchemaRef: Code\n  data: Name | Code\n  dataProp: Code | string | number\n  dataTypes: JSONType[]\n  definedProperties: Set<string>\n  propertyName: Name\n  dataPropType: Type\n  jtdDiscriminator: string\n  jtdMetadata: boolean\n  compositeRule: true\n  createErrors: boolean\n  allErrors: boolean\n}>\n\nexport function getSubschema(\n  it: SchemaObjCxt,\n  {keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef}: SubschemaArgs\n): SubschemaContext {\n  if (keyword !== undefined && schema !== undefined) {\n    throw new Error('both \"keyword\" and \"schema\" passed, only one allowed')\n  }\n\n  if (keyword !== undefined) {\n    const sch = it.schema[keyword]\n    return schemaProp === undefined\n      ? {\n          schema: sch,\n          schemaPath: _`${it.schemaPath}${getProperty(keyword)}`,\n          errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n        }\n      : {\n          schema: sch[schemaProp],\n          schemaPath: _`${it.schemaPath}${getProperty(keyword)}${getProperty(schemaProp)}`,\n          errSchemaPath: `${it.errSchemaPath}/${keyword}/${escapeFragment(schemaProp)}`,\n        }\n  }\n\n  if (schema !== undefined) {\n    if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n      throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"')\n    }\n    return {\n      schema,\n      schemaPath,\n      topSchemaRef,\n      errSchemaPath,\n    }\n  }\n\n  throw new Error('either \"keyword\" or \"schema\" must be passed')\n}\n\nexport function extendSubschemaData(\n  subschema: SubschemaContext,\n  it: SchemaObjCxt,\n  {dataProp, dataPropType: dpType, data, dataTypes, propertyName}: SubschemaArgs\n): void {\n  if (data !== undefined && dataProp !== undefined) {\n    throw new Error('both \"data\" and \"dataProp\" passed, only one allowed')\n  }\n\n  const {gen} = it\n\n  if (dataProp !== undefined) {\n    const {errorPath, dataPathArr, opts} = it\n    const nextData = gen.let(\"data\", _`${it.data}${getProperty(dataProp)}`, true)\n    dataContextProps(nextData)\n    subschema.errorPath = str`${errorPath}${getErrorPath(dataProp, dpType, opts.jsPropertySyntax)}`\n    subschema.parentDataProperty = _`${dataProp}`\n    subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]\n  }\n\n  if (data !== undefined) {\n    const nextData = data instanceof Name ? data : gen.let(\"data\", data, true) // replaceable if used once?\n    dataContextProps(nextData)\n    if (propertyName !== undefined) subschema.propertyName = propertyName\n    // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n  }\n\n  if (dataTypes) subschema.dataTypes = dataTypes\n\n  function dataContextProps(_nextData: Name): void {\n    subschema.data = _nextData\n    subschema.dataLevel = it.dataLevel + 1\n    subschema.dataTypes = []\n    it.definedProperties = new Set<string>()\n    subschema.parentData = it.data\n    subschema.dataNames = [...it.dataNames, _nextData]\n  }\n}\n\nexport function extendSubschemaMode(\n  subschema: SubschemaContext,\n  {jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors}: SubschemaArgs\n): void {\n  if (compositeRule !== undefined) subschema.compositeRule = compositeRule\n  if (createErrors !== undefined) subschema.createErrors = createErrors\n  if (allErrors !== undefined) subschema.allErrors = allErrors\n  subschema.jtdDiscriminator = jtdDiscriminator // not inherited\n  subschema.jtdMetadata = jtdMetadata // not inherited\n}\n", "'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n", "'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n  // Legacy support for v0.3.1 and earlier.\n  if (typeof opts == 'function') {\n    cb = opts;\n    opts = {};\n  }\n\n  cb = opts.cb || cb;\n  var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n  var post = cb.post || function() {};\n\n  _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n  additionalItems: true,\n  items: true,\n  contains: true,\n  additionalProperties: true,\n  propertyNames: true,\n  not: true,\n  if: true,\n  then: true,\n  else: true\n};\n\ntraverse.arrayKeywords = {\n  items: true,\n  allOf: true,\n  anyOf: true,\n  oneOf: true\n};\n\ntraverse.propsKeywords = {\n  $defs: true,\n  definitions: true,\n  properties: true,\n  patternProperties: true,\n  dependencies: true\n};\n\ntraverse.skipKeywords = {\n  default: true,\n  enum: true,\n  const: true,\n  required: true,\n  maximum: true,\n  minimum: true,\n  exclusiveMaximum: true,\n  exclusiveMinimum: true,\n  multipleOf: true,\n  maxLength: true,\n  minLength: true,\n  pattern: true,\n  format: true,\n  maxItems: true,\n  minItems: true,\n  uniqueItems: true,\n  maxProperties: true,\n  minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n    pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n    for (var key in schema) {\n      var sch = schema[key];\n      if (Array.isArray(sch)) {\n        if (key in traverse.arrayKeywords) {\n          for (var i=0; i<sch.length; i++)\n            _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n        }\n      } else if (key in traverse.propsKeywords) {\n        if (sch && typeof sch == 'object') {\n          for (var prop in sch)\n            _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n        }\n      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n        _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n      }\n    }\n    post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n  }\n}\n\n\nfunction escapeJsonPtr(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n", "import type {AnySchema, AnySchemaObject, UriResolver} from \"../types\"\nimport type Ajv from \"../ajv\"\nimport type {URIComponent} from \"fast-uri\"\nimport {eachItem} from \"./util\"\nimport * as equal from \"fast-deep-equal\"\nimport * as traverse from \"json-schema-traverse\"\n\n// the hash of local references inside the schema (created by getSchemaRefs), used for inline resolution\nexport type LocalRefs = {[Ref in string]?: AnySchemaObject}\n\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n  \"type\",\n  \"format\",\n  \"pattern\",\n  \"maxLength\",\n  \"minLength\",\n  \"maxProperties\",\n  \"minProperties\",\n  \"maxItems\",\n  \"minItems\",\n  \"maximum\",\n  \"minimum\",\n  \"uniqueItems\",\n  \"multipleOf\",\n  \"required\",\n  \"enum\",\n  \"const\",\n])\n\nexport function inlineRef(schema: AnySchema, limit: boolean | number = true): boolean {\n  if (typeof schema == \"boolean\") return true\n  if (limit === true) return !hasRef(schema)\n  if (!limit) return false\n  return countKeys(schema) <= limit\n}\n\nconst REF_KEYWORDS = new Set([\n  \"$ref\",\n  \"$recursiveRef\",\n  \"$recursiveAnchor\",\n  \"$dynamicRef\",\n  \"$dynamicAnchor\",\n])\n\nfunction hasRef(schema: AnySchemaObject): boolean {\n  for (const key in schema) {\n    if (REF_KEYWORDS.has(key)) return true\n    const sch = schema[key]\n    if (Array.isArray(sch) && sch.some(hasRef)) return true\n    if (typeof sch == \"object\" && hasRef(sch)) return true\n  }\n  return false\n}\n\nfunction countKeys(schema: AnySchemaObject): number {\n  let count = 0\n  for (const key in schema) {\n    if (key === \"$ref\") return Infinity\n    count++\n    if (SIMPLE_INLINED.has(key)) continue\n    if (typeof schema[key] == \"object\") {\n      eachItem(schema[key], (sch) => (count += countKeys(sch)))\n    }\n    if (count === Infinity) return Infinity\n  }\n  return count\n}\n\nexport function getFullPath(resolver: UriResolver, id = \"\", normalize?: boolean): string {\n  if (normalize !== false) id = normalizeId(id)\n  const p = resolver.parse(id)\n  return _getFullPath(resolver, p)\n}\n\nexport function _getFullPath(resolver: UriResolver, p: URIComponent): string {\n  const serialized = resolver.serialize(p)\n  return serialized.split(\"#\")[0] + \"#\"\n}\n\nconst TRAILING_SLASH_HASH = /#\\/?$/\nexport function normalizeId(id: string | undefined): string {\n  return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\"\n}\n\nexport function resolveUrl(resolver: UriResolver, baseId: string, id: string): string {\n  id = normalizeId(id)\n  return resolver.resolve(baseId, id)\n}\n\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i\n\nexport function getSchemaRefs(this: Ajv, schema: AnySchema, baseId: string): LocalRefs {\n  if (typeof schema == \"boolean\") return {}\n  const {schemaId, uriResolver} = this.opts\n  const schId = normalizeId(schema[schemaId] || baseId)\n  const baseIds: {[JsonPtr in string]?: string} = {\"\": schId}\n  const pathPrefix = getFullPath(uriResolver, schId, false)\n  const localRefs: LocalRefs = {}\n  const schemaRefs: Set<string> = new Set()\n\n  traverse(schema, {allKeys: true}, (sch, jsonPtr, _, parentJsonPtr) => {\n    if (parentJsonPtr === undefined) return\n    const fullPath = pathPrefix + jsonPtr\n    let innerBaseId = baseIds[parentJsonPtr]\n    if (typeof sch[schemaId] == \"string\") innerBaseId = addRef.call(this, sch[schemaId])\n    addAnchor.call(this, sch.$anchor)\n    addAnchor.call(this, sch.$dynamicAnchor)\n    baseIds[jsonPtr] = innerBaseId\n\n    function addRef(this: Ajv, ref: string): string {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const _resolve = this.opts.uriResolver.resolve\n      ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref)\n      if (schemaRefs.has(ref)) throw ambiguos(ref)\n      schemaRefs.add(ref)\n      let schOrRef = this.refs[ref]\n      if (typeof schOrRef == \"string\") schOrRef = this.refs[schOrRef]\n      if (typeof schOrRef == \"object\") {\n        checkAmbiguosRef(sch, schOrRef.schema, ref)\n      } else if (ref !== normalizeId(fullPath)) {\n        if (ref[0] === \"#\") {\n          checkAmbiguosRef(sch, localRefs[ref], ref)\n          localRefs[ref] = sch\n        } else {\n          this.refs[ref] = fullPath\n        }\n      }\n      return ref\n    }\n\n    function addAnchor(this: Ajv, anchor: unknown): void {\n      if (typeof anchor == \"string\") {\n        if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor \"${anchor}\"`)\n        addRef.call(this, `#${anchor}`)\n      }\n    }\n  })\n\n  return localRefs\n\n  function checkAmbiguosRef(sch1: AnySchema, sch2: AnySchema | undefined, ref: string): void {\n    if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref)\n  }\n\n  function ambiguos(ref: string): Error {\n    return new Error(`reference \"${ref}\" resolves to more than one schema`)\n  }\n}\n", "import type {\n  AddedKeywordDefinition,\n  AnySchema,\n  AnySchemaObject,\n  KeywordErrorCxt,\n  KeywordCxtParams,\n} from \"../../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \"..\"\nimport type {InstanceOptions} from \"../../core\"\nimport {boolOrEmptySchema, topBoolOrEmptySchema} from \"./boolSchema\"\nimport {coerceAndCheckDataType, getSchemaTypes} from \"./dataType\"\nimport {shouldUseGroup, shouldUseRule} from \"./applicability\"\nimport {checkDataType, checkDataTypes, reportTypeError, DataType} from \"./dataType\"\nimport {assignDefaults} from \"./defaults\"\nimport {funcKeywordCode, macroKeywordCode, validateKeywordUsage, validSchemaType} from \"./keyword\"\nimport {getSubschema, extendSubschemaData, SubschemaArgs, extendSubschemaMode} from \"./subschema\"\nimport {_, nil, str, or, not, getProperty, Block, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport {resolveUrl} from \"../resolve\"\nimport {\n  schemaRefOrVal,\n  schemaHasRulesButRef,\n  checkUnknownRules,\n  checkStrictMode,\n  unescapeJsonPointer,\n  mergeEvaluated,\n} from \"../util\"\nimport type {JSONType, Rule, RuleGroup} from \"../rules\"\nimport {\n  ErrorPaths,\n  reportError,\n  reportExtraError,\n  resetErrorsCount,\n  keyword$DataError,\n} from \"../errors\"\n\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nexport function validateFunctionCode(it: SchemaCxt): void {\n  if (isSchemaObj(it)) {\n    checkKeywords(it)\n    if (schemaCxtHasRules(it)) {\n      topSchemaObjCode(it)\n      return\n    }\n  }\n  validateFunction(it, () => topBoolOrEmptySchema(it))\n}\n\nfunction validateFunction(\n  {gen, validateName, schema, schemaEnv, opts}: SchemaCxt,\n  body: Block\n): void {\n  if (opts.code.es5) {\n    gen.func(validateName, _`${N.data}, ${N.valCxt}`, schemaEnv.$async, () => {\n      gen.code(_`\"use strict\"; ${funcSourceUrl(schema, opts)}`)\n      destructureValCxtES5(gen, opts)\n      gen.code(body)\n    })\n  } else {\n    gen.func(validateName, _`${N.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () =>\n      gen.code(funcSourceUrl(schema, opts)).code(body)\n    )\n  }\n}\n\nfunction destructureValCxt(opts: InstanceOptions): Code {\n  return _`{${N.instancePath}=\"\", ${N.parentData}, ${N.parentDataProperty}, ${N.rootData}=${\n    N.data\n  }${opts.dynamicRef ? _`, ${N.dynamicAnchors}={}` : nil}}={}`\n}\n\nfunction destructureValCxtES5(gen: CodeGen, opts: InstanceOptions): void {\n  gen.if(\n    N.valCxt,\n    () => {\n      gen.var(N.instancePath, _`${N.valCxt}.${N.instancePath}`)\n      gen.var(N.parentData, _`${N.valCxt}.${N.parentData}`)\n      gen.var(N.parentDataProperty, _`${N.valCxt}.${N.parentDataProperty}`)\n      gen.var(N.rootData, _`${N.valCxt}.${N.rootData}`)\n      if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`${N.valCxt}.${N.dynamicAnchors}`)\n    },\n    () => {\n      gen.var(N.instancePath, _`\"\"`)\n      gen.var(N.parentData, _`undefined`)\n      gen.var(N.parentDataProperty, _`undefined`)\n      gen.var(N.rootData, N.data)\n      if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`{}`)\n    }\n  )\n}\n\nfunction topSchemaObjCode(it: SchemaObjCxt): void {\n  const {schema, opts, gen} = it\n  validateFunction(it, () => {\n    if (opts.$comment && schema.$comment) commentKeyword(it)\n    checkNoDefault(it)\n    gen.let(N.vErrors, null)\n    gen.let(N.errors, 0)\n    if (opts.unevaluated) resetEvaluated(it)\n    typeAndKeywords(it)\n    returnResults(it)\n  })\n  return\n}\n\nfunction resetEvaluated(it: SchemaObjCxt): void {\n  // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n  const {gen, validateName} = it\n  it.evaluated = gen.const(\"evaluated\", _`${validateName}.evaluated`)\n  gen.if(_`${it.evaluated}.dynamicProps`, () => gen.assign(_`${it.evaluated}.props`, _`undefined`))\n  gen.if(_`${it.evaluated}.dynamicItems`, () => gen.assign(_`${it.evaluated}.items`, _`undefined`))\n}\n\nfunction funcSourceUrl(schema: AnySchema, opts: InstanceOptions): Code {\n  const schId = typeof schema == \"object\" && schema[opts.schemaId]\n  return schId && (opts.code.source || opts.code.process) ? _`/*# sourceURL=${schId} */` : nil\n}\n\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it: SchemaCxt, valid: Name): void {\n  if (isSchemaObj(it)) {\n    checkKeywords(it)\n    if (schemaCxtHasRules(it)) {\n      subSchemaObjCode(it, valid)\n      return\n    }\n  }\n  boolOrEmptySchema(it, valid)\n}\n\nfunction schemaCxtHasRules({schema, self}: SchemaCxt): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (self.RULES.all[key]) return true\n  return false\n}\n\nfunction isSchemaObj(it: SchemaCxt): it is SchemaObjCxt {\n  return typeof it.schema != \"boolean\"\n}\n\nfunction subSchemaObjCode(it: SchemaObjCxt, valid: Name): void {\n  const {schema, gen, opts} = it\n  if (opts.$comment && schema.$comment) commentKeyword(it)\n  updateContext(it)\n  checkAsyncSchema(it)\n  const errsCount = gen.const(\"_errs\", N.errors)\n  typeAndKeywords(it, errsCount)\n  // TODO var\n  gen.var(valid, _`${errsCount} === ${N.errors}`)\n}\n\nfunction checkKeywords(it: SchemaObjCxt): void {\n  checkUnknownRules(it)\n  checkRefsAndKeywords(it)\n}\n\nfunction typeAndKeywords(it: SchemaObjCxt, errsCount?: Name): void {\n  if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount)\n  const types = getSchemaTypes(it.schema)\n  const checkedTypes = coerceAndCheckDataType(it, types)\n  schemaKeywords(it, types, !checkedTypes, errsCount)\n}\n\nfunction checkRefsAndKeywords(it: SchemaObjCxt): void {\n  const {schema, errSchemaPath, opts, self} = it\n  if (schema.$ref && opts.ignoreKeywordsWithRef && schemaHasRulesButRef(schema, self.RULES)) {\n    self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`)\n  }\n}\n\nfunction checkNoDefault(it: SchemaObjCxt): void {\n  const {schema, opts} = it\n  if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n    checkStrictMode(it, \"default is ignored in the schema root\")\n  }\n}\n\nfunction updateContext(it: SchemaObjCxt): void {\n  const schId = it.schema[it.opts.schemaId]\n  if (schId) it.baseId = resolveUrl(it.opts.uriResolver, it.baseId, schId)\n}\n\nfunction checkAsyncSchema(it: SchemaObjCxt): void {\n  if (it.schema.$async && !it.schemaEnv.$async) throw new Error(\"async schema in sync schema\")\n}\n\nfunction commentKeyword({gen, schemaEnv, schema, errSchemaPath, opts}: SchemaObjCxt): void {\n  const msg = schema.$comment\n  if (opts.$comment === true) {\n    gen.code(_`${N.self}.logger.log(${msg})`)\n  } else if (typeof opts.$comment == \"function\") {\n    const schemaPath = str`${errSchemaPath}/$comment`\n    const rootName = gen.scopeValue(\"root\", {ref: schemaEnv.root})\n    gen.code(_`${N.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`)\n  }\n}\n\nfunction returnResults(it: SchemaCxt): void {\n  const {gen, schemaEnv, validateName, ValidationError, opts} = it\n  if (schemaEnv.$async) {\n    // TODO assign unevaluated\n    gen.if(\n      _`${N.errors} === 0`,\n      () => gen.return(N.data),\n      () => gen.throw(_`new ${ValidationError as Name}(${N.vErrors})`)\n    )\n  } else {\n    gen.assign(_`${validateName}.errors`, N.vErrors)\n    if (opts.unevaluated) assignEvaluated(it)\n    gen.return(_`${N.errors} === 0`)\n  }\n}\n\nfunction assignEvaluated({gen, evaluated, props, items}: SchemaCxt): void {\n  if (props instanceof Name) gen.assign(_`${evaluated}.props`, props)\n  if (items instanceof Name) gen.assign(_`${evaluated}.items`, items)\n}\n\nfunction schemaKeywords(\n  it: SchemaObjCxt,\n  types: JSONType[],\n  typeErrors: boolean,\n  errsCount?: Name\n): void {\n  const {gen, schema, data, allErrors, opts, self} = it\n  const {RULES} = self\n  if (schema.$ref && (opts.ignoreKeywordsWithRef || !schemaHasRulesButRef(schema, RULES))) {\n    gen.block(() => keywordCode(it, \"$ref\", (RULES.all.$ref as Rule).definition)) // TODO typecast\n    return\n  }\n  if (!opts.jtd) checkStrictTypes(it, types)\n  gen.block(() => {\n    for (const group of RULES.rules) groupKeywords(group)\n    groupKeywords(RULES.post)\n  })\n\n  function groupKeywords(group: RuleGroup): void {\n    if (!shouldUseGroup(schema, group)) return\n    if (group.type) {\n      gen.if(checkDataType(group.type, data, opts.strictNumbers))\n      iterateKeywords(it, group)\n      if (types.length === 1 && types[0] === group.type && typeErrors) {\n        gen.else()\n        reportTypeError(it)\n      }\n      gen.endIf()\n    } else {\n      iterateKeywords(it, group)\n    }\n    // TODO make it \"ok\" call?\n    if (!allErrors) gen.if(_`${N.errors} === ${errsCount || 0}`)\n  }\n}\n\nfunction iterateKeywords(it: SchemaObjCxt, group: RuleGroup): void {\n  const {\n    gen,\n    schema,\n    opts: {useDefaults},\n  } = it\n  if (useDefaults) assignDefaults(it, group.type)\n  gen.block(() => {\n    for (const rule of group.rules) {\n      if (shouldUseRule(schema, rule)) {\n        keywordCode(it, rule.keyword, rule.definition, group.type)\n      }\n    }\n  })\n}\n\nfunction checkStrictTypes(it: SchemaObjCxt, types: JSONType[]): void {\n  if (it.schemaEnv.meta || !it.opts.strictTypes) return\n  checkContextTypes(it, types)\n  if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types)\n  checkKeywordTypes(it, it.dataTypes)\n}\n\nfunction checkContextTypes(it: SchemaObjCxt, types: JSONType[]): void {\n  if (!types.length) return\n  if (!it.dataTypes.length) {\n    it.dataTypes = types\n    return\n  }\n  types.forEach((t) => {\n    if (!includesType(it.dataTypes, t)) {\n      strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`)\n    }\n  })\n  narrowSchemaTypes(it, types)\n}\n\nfunction checkMultipleTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n  if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n    strictTypesError(it, \"use allowUnionTypes to allow union type keyword\")\n  }\n}\n\nfunction checkKeywordTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n  const rules = it.self.RULES.all\n  for (const keyword in rules) {\n    const rule = rules[keyword]\n    if (typeof rule == \"object\" && shouldUseRule(it.schema, rule)) {\n      const {type} = rule.definition\n      if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n        strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`)\n      }\n    }\n  }\n}\n\nfunction hasApplicableType(schTs: JSONType[], kwdT: JSONType): boolean {\n  return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"))\n}\n\nfunction includesType(ts: JSONType[], t: JSONType): boolean {\n  return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"))\n}\n\nfunction narrowSchemaTypes(it: SchemaObjCxt, withTypes: JSONType[]): void {\n  const ts: JSONType[] = []\n  for (const t of it.dataTypes) {\n    if (includesType(withTypes, t)) ts.push(t)\n    else if (withTypes.includes(\"integer\") && t === \"number\") ts.push(\"integer\")\n  }\n  it.dataTypes = ts\n}\n\nfunction strictTypesError(it: SchemaObjCxt, msg: string): void {\n  const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n  msg += ` at \"${schemaPath}\" (strictTypes)`\n  checkStrictMode(it, msg, it.opts.strictTypes)\n}\n\nexport class KeywordCxt implements KeywordErrorCxt {\n  readonly gen: CodeGen\n  readonly allErrors?: boolean\n  readonly keyword: string\n  readonly data: Name // Name referencing the current level of the data instance\n  readonly $data?: string | false\n  schema: any // keyword value in the schema\n  readonly schemaValue: Code | number | boolean // Code reference to keyword schema value or primitive value\n  readonly schemaCode: Code | number | boolean // Code reference to resolved schema value (different if schema is $data)\n  readonly schemaType: JSONType[] // allowed type(s) of keyword value in the schema\n  readonly parentSchema: AnySchemaObject\n  readonly errsCount?: Name // Name reference to the number of validation errors collected before this keyword,\n  // requires option trackErrors in keyword definition\n  params: KeywordCxtParams // object to pass parameters to error messages from keyword code\n  readonly it: SchemaObjCxt // schema compilation context (schema is guaranteed to be an object, not boolean)\n  readonly def: AddedKeywordDefinition\n\n  constructor(it: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string) {\n    validateKeywordUsage(it, def, keyword)\n    this.gen = it.gen\n    this.allErrors = it.allErrors\n    this.keyword = keyword\n    this.data = it.data\n    this.schema = it.schema[keyword]\n    this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data\n    this.schemaValue = schemaRefOrVal(it, this.schema, keyword, this.$data)\n    this.schemaType = def.schemaType\n    this.parentSchema = it.schema\n    this.params = {}\n    this.it = it\n    this.def = def\n\n    if (this.$data) {\n      this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it))\n    } else {\n      this.schemaCode = this.schemaValue\n      if (!validSchemaType(this.schema, def.schemaType, def.allowUndefined)) {\n        throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`)\n      }\n    }\n\n    if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n      this.errsCount = it.gen.const(\"_errs\", N.errors)\n    }\n  }\n\n  result(condition: Code, successAction?: () => void, failAction?: () => void): void {\n    this.failResult(not(condition), successAction, failAction)\n  }\n\n  failResult(condition: Code, successAction?: () => void, failAction?: () => void): void {\n    this.gen.if(condition)\n    if (failAction) failAction()\n    else this.error()\n    if (successAction) {\n      this.gen.else()\n      successAction()\n      if (this.allErrors) this.gen.endIf()\n    } else {\n      if (this.allErrors) this.gen.endIf()\n      else this.gen.else()\n    }\n  }\n\n  pass(condition: Code, failAction?: () => void): void {\n    this.failResult(not(condition), undefined, failAction)\n  }\n\n  fail(condition?: Code): void {\n    if (condition === undefined) {\n      this.error()\n      if (!this.allErrors) this.gen.if(false) // this branch will be removed by gen.optimize\n      return\n    }\n    this.gen.if(condition)\n    this.error()\n    if (this.allErrors) this.gen.endIf()\n    else this.gen.else()\n  }\n\n  fail$data(condition: Code): void {\n    if (!this.$data) return this.fail(condition)\n    const {schemaCode} = this\n    this.fail(_`${schemaCode} !== undefined && (${or(this.invalid$data(), condition)})`)\n  }\n\n  error(append?: boolean, errorParams?: KeywordCxtParams, errorPaths?: ErrorPaths): void {\n    if (errorParams) {\n      this.setParams(errorParams)\n      this._error(append, errorPaths)\n      this.setParams({})\n      return\n    }\n    this._error(append, errorPaths)\n  }\n\n  private _error(append?: boolean, errorPaths?: ErrorPaths): void {\n    ;(append ? reportExtraError : reportError)(this, this.def.error, errorPaths)\n  }\n\n  $dataError(): void {\n    reportError(this, this.def.$dataError || keyword$DataError)\n  }\n\n  reset(): void {\n    if (this.errsCount === undefined) throw new Error('add \"trackErrors\" to keyword definition')\n    resetErrorsCount(this.gen, this.errsCount)\n  }\n\n  ok(cond: Code | boolean): void {\n    if (!this.allErrors) this.gen.if(cond)\n  }\n\n  setParams(obj: KeywordCxtParams, assign?: true): void {\n    if (assign) Object.assign(this.params, obj)\n    else this.params = obj\n  }\n\n  block$data(valid: Name, codeBlock: () => void, $dataValid: Code = nil): void {\n    this.gen.block(() => {\n      this.check$data(valid, $dataValid)\n      codeBlock()\n    })\n  }\n\n  check$data(valid: Name = nil, $dataValid: Code = nil): void {\n    if (!this.$data) return\n    const {gen, schemaCode, schemaType, def} = this\n    gen.if(or(_`${schemaCode} === undefined`, $dataValid))\n    if (valid !== nil) gen.assign(valid, true)\n    if (schemaType.length || def.validateSchema) {\n      gen.elseIf(this.invalid$data())\n      this.$dataError()\n      if (valid !== nil) gen.assign(valid, false)\n    }\n    gen.else()\n  }\n\n  invalid$data(): Code {\n    const {gen, schemaCode, schemaType, def, it} = this\n    return or(wrong$DataType(), invalid$DataSchema())\n\n    function wrong$DataType(): Code {\n      if (schemaType.length) {\n        /* istanbul ignore if */\n        if (!(schemaCode instanceof Name)) throw new Error(\"ajv implementation error\")\n        const st = Array.isArray(schemaType) ? schemaType : [schemaType]\n        return _`${checkDataTypes(st, schemaCode, it.opts.strictNumbers, DataType.Wrong)}`\n      }\n      return nil\n    }\n\n    function invalid$DataSchema(): Code {\n      if (def.validateSchema) {\n        const validateSchemaRef = gen.scopeValue(\"validate$data\", {ref: def.validateSchema}) // TODO value.code for standalone\n        return _`!${validateSchemaRef}(${schemaCode})`\n      }\n      return nil\n    }\n  }\n\n  subschema(appl: SubschemaArgs, valid: Name): SchemaCxt {\n    const subschema = getSubschema(this.it, appl)\n    extendSubschemaData(subschema, this.it, appl)\n    extendSubschemaMode(subschema, appl)\n    const nextContext = {...this.it, ...subschema, items: undefined, props: undefined}\n    subschemaCode(nextContext, valid)\n    return nextContext\n  }\n\n  mergeEvaluated(schemaCxt: SchemaCxt, toName?: typeof Name): void {\n    const {it, gen} = this\n    if (!it.opts.unevaluated) return\n    if (it.props !== true && schemaCxt.props !== undefined) {\n      it.props = mergeEvaluated.props(gen, schemaCxt.props, it.props, toName)\n    }\n    if (it.items !== true && schemaCxt.items !== undefined) {\n      it.items = mergeEvaluated.items(gen, schemaCxt.items, it.items, toName)\n    }\n  }\n\n  mergeValidEvaluated(schemaCxt: SchemaCxt, valid: Name): boolean | void {\n    const {it, gen} = this\n    if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n      gen.if(valid, () => this.mergeEvaluated(schemaCxt, Name))\n      return true\n    }\n  }\n}\n\nfunction keywordCode(\n  it: SchemaObjCxt,\n  keyword: string,\n  def: AddedKeywordDefinition,\n  ruleType?: JSONType\n): void {\n  const cxt = new KeywordCxt(it, def, keyword)\n  if (\"code\" in def) {\n    def.code(cxt, ruleType)\n  } else if (cxt.$data && def.validate) {\n    funcKeywordCode(cxt, def)\n  } else if (\"macro\" in def) {\n    macroKeywordCode(cxt, def)\n  } else if (def.compile || def.validate) {\n    funcKeywordCode(cxt, def)\n  }\n}\n\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/\nexport function getData(\n  $data: string,\n  {dataLevel, dataNames, dataPathArr}: SchemaCxt\n): Code | number {\n  let jsonPointer\n  let data: Code\n  if ($data === \"\") return N.rootData\n  if ($data[0] === \"/\") {\n    if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`)\n    jsonPointer = $data\n    data = N.rootData\n  } else {\n    const matches = RELATIVE_JSON_POINTER.exec($data)\n    if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`)\n    const up: number = +matches[1]\n    jsonPointer = matches[2]\n    if (jsonPointer === \"#\") {\n      if (up >= dataLevel) throw new Error(errorMsg(\"property/index\", up))\n      return dataPathArr[dataLevel - up]\n    }\n    if (up > dataLevel) throw new Error(errorMsg(\"data\", up))\n    data = dataNames[dataLevel - up]\n    if (!jsonPointer) return data\n  }\n\n  let expr = data\n  const segments = jsonPointer.split(\"/\")\n  for (const segment of segments) {\n    if (segment) {\n      data = _`${data}${getProperty(unescapeJsonPointer(segment))}`\n      expr = _`${expr} && ${data}`\n    }\n  }\n  return expr\n\n  function errorMsg(pointerType: string, up: number): string {\n    return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`\n  }\n}\n", "import type {ErrorObject} from \"../types\"\n\nexport default class ValidationError extends Error {\n  readonly errors: Partial<ErrorObject>[]\n  readonly ajv: true\n  readonly validation: true\n\n  constructor(errors: Partial<ErrorObject>[]) {\n    super(\"validation failed\")\n    this.errors = errors\n    this.ajv = this.validation = true\n  }\n}\n", "import {resolveUrl, normalizeId, getFullPath} from \"./resolve\"\nimport type {UriResolver} from \"../types\"\n\nexport default class MissingRefError extends Error {\n  readonly missingRef: string\n  readonly missingSchema: string\n\n  constructor(resolver: UriResolver, baseId: string, ref: string, msg?: string) {\n    super(msg || `can't resolve reference ${ref} from id ${baseId}`)\n    this.missingRef = resolveUrl(resolver, baseId, ref)\n    this.missingSchema = normalizeId(getFullPath(resolver, this.missingRef))\n  }\n}\n", "import type {\n  AnySchema,\n  AnySchemaObject,\n  AnyValidateFunction,\n  AsyncValidateFunction,\n  EvaluatedProperties,\n  EvaluatedItems,\n} from \"../types\"\nimport type Ajv from \"../core\"\nimport type {InstanceOptions} from \"../core\"\nimport {CodeGen, _, nil, stringify, Name, Code, ValueScopeName} from \"./codegen\"\nimport ValidationError from \"../runtime/validation_error\"\nimport N from \"./names\"\nimport {LocalRefs, getFullPath, _getFullPath, inlineRef, normalizeId, resolveUrl} from \"./resolve\"\nimport {schemaHasRulesButRef, unescapeFragment} from \"./util\"\nimport {validateFunctionCode} from \"./validate\"\nimport {URIComponent} from \"fast-uri\"\nimport {JSONType} from \"./rules\"\n\nexport type SchemaRefs = {\n  [Ref in string]?: SchemaEnv | AnySchema\n}\n\nexport interface SchemaCxt {\n  readonly gen: CodeGen\n  readonly allErrors?: boolean // validation mode - whether to collect all errors or break on error\n  readonly data: Name // Name with reference to the current part of data instance\n  readonly parentData: Name // should be used in keywords modifying data\n  readonly parentDataProperty: Code | number // should be used in keywords modifying data\n  readonly dataNames: Name[]\n  readonly dataPathArr: (Code | number)[]\n  readonly dataLevel: number // the level of the currently validated data,\n  // it can be used to access both the property names and the data on all levels from the top.\n  dataTypes: JSONType[] // data types applied to the current part of data instance\n  definedProperties: Set<string> // set of properties to keep track of for required checks\n  readonly topSchemaRef: Code\n  readonly validateName: Name\n  evaluated?: Name\n  readonly ValidationError?: Name\n  readonly schema: AnySchema // current schema object - equal to parentSchema passed via KeywordCxt\n  readonly schemaEnv: SchemaEnv\n  readonly rootId: string\n  baseId: string // the current schema base URI that should be used as the base for resolving URIs in references (\\$ref)\n  readonly schemaPath: Code // the run-time expression that evaluates to the property name of the current schema\n  readonly errSchemaPath: string // this is actual string, should not be changed to Code\n  readonly errorPath: Code\n  readonly propertyName?: Name\n  readonly compositeRule?: boolean // true indicates that the current schema is inside the compound keyword,\n  // where failing some rule doesn't mean validation failure (`anyOf`, `oneOf`, `not`, `if`).\n  // This flag is used to determine whether you can return validation result immediately after any error in case the option `allErrors` is not `true.\n  // You only need to use it if you have many steps in your keywords and potentially can define multiple errors.\n  props?: EvaluatedProperties | Name // properties evaluated by this schema - used by parent schema or assigned to validation function\n  items?: EvaluatedItems | Name // last item evaluated by this schema - used by parent schema or assigned to validation function\n  jtdDiscriminator?: string\n  jtdMetadata?: boolean\n  readonly createErrors?: boolean\n  readonly opts: InstanceOptions // Ajv instance option.\n  readonly self: Ajv // current Ajv instance\n}\n\nexport interface SchemaObjCxt extends SchemaCxt {\n  readonly schema: AnySchemaObject\n}\ninterface SchemaEnvArgs {\n  readonly schema: AnySchema\n  readonly schemaId?: \"$id\" | \"id\"\n  readonly root?: SchemaEnv\n  readonly baseId?: string\n  readonly schemaPath?: string\n  readonly localRefs?: LocalRefs\n  readonly meta?: boolean\n}\n\nexport class SchemaEnv implements SchemaEnvArgs {\n  readonly schema: AnySchema\n  readonly schemaId?: \"$id\" | \"id\"\n  readonly root: SchemaEnv\n  baseId: string // TODO possibly, it should be readonly\n  schemaPath?: string\n  localRefs?: LocalRefs\n  readonly meta?: boolean\n  readonly $async?: boolean // true if the current schema is asynchronous.\n  readonly refs: SchemaRefs = {}\n  readonly dynamicAnchors: {[Ref in string]?: true} = {}\n  validate?: AnyValidateFunction\n  validateName?: ValueScopeName\n  serialize?: (data: unknown) => string\n  serializeName?: ValueScopeName\n  parse?: (data: string) => unknown\n  parseName?: ValueScopeName\n\n  constructor(env: SchemaEnvArgs) {\n    let schema: AnySchemaObject | undefined\n    if (typeof env.schema == \"object\") schema = env.schema\n    this.schema = env.schema\n    this.schemaId = env.schemaId\n    this.root = env.root || this\n    this.baseId = env.baseId ?? normalizeId(schema?.[env.schemaId || \"$id\"])\n    this.schemaPath = env.schemaPath\n    this.localRefs = env.localRefs\n    this.meta = env.meta\n    this.$async = schema?.$async\n    this.refs = {}\n  }\n}\n\n// let codeSize = 0\n// let nodeCount = 0\n\n// Compiles schema in SchemaEnv\nexport function compileSchema(this: Ajv, sch: SchemaEnv): SchemaEnv {\n  // TODO refactor - remove compilations\n  const _sch = getCompilingSchema.call(this, sch)\n  if (_sch) return _sch\n  const rootId = getFullPath(this.opts.uriResolver, sch.root.baseId) // TODO if getFullPath removed 1 tests fails\n  const {es5, lines} = this.opts.code\n  const {ownProperties} = this.opts\n  const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n  let _ValidationError\n  if (sch.$async) {\n    _ValidationError = gen.scopeValue(\"Error\", {\n      ref: ValidationError,\n      code: _`require(\"ajv/dist/runtime/validation_error\").default`,\n    })\n  }\n\n  const validateName = gen.scopeName(\"validate\")\n  sch.validateName = validateName\n\n  const schemaCxt: SchemaCxt = {\n    gen,\n    allErrors: this.opts.allErrors,\n    data: N.data,\n    parentData: N.parentData,\n    parentDataProperty: N.parentDataProperty,\n    dataNames: [N.data],\n    dataPathArr: [nil], // TODO can its length be used as dataLevel if nil is removed?\n    dataLevel: 0,\n    dataTypes: [],\n    definedProperties: new Set<string>(),\n    topSchemaRef: gen.scopeValue(\n      \"schema\",\n      this.opts.code.source === true\n        ? {ref: sch.schema, code: stringify(sch.schema)}\n        : {ref: sch.schema}\n    ),\n    validateName,\n    ValidationError: _ValidationError,\n    schema: sch.schema,\n    schemaEnv: sch,\n    rootId,\n    baseId: sch.baseId || rootId,\n    schemaPath: nil,\n    errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n    errorPath: _`\"\"`,\n    opts: this.opts,\n    self: this,\n  }\n\n  let sourceCode: string | undefined\n  try {\n    this._compilations.add(sch)\n    validateFunctionCode(schemaCxt)\n    gen.optimize(this.opts.code.optimize)\n    // gen.optimize(1)\n    const validateCode = gen.toString()\n    sourceCode = `${gen.scopeRefs(N.scope)}return ${validateCode}`\n    // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n    if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch)\n    // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n    const makeValidate = new Function(`${N.self}`, `${N.scope}`, sourceCode)\n    const validate: AnyValidateFunction = makeValidate(this, this.scope.get())\n    this.scope.value(validateName, {ref: validate})\n\n    validate.errors = null\n    validate.schema = sch.schema\n    validate.schemaEnv = sch\n    if (sch.$async) (validate as AsyncValidateFunction).$async = true\n    if (this.opts.code.source === true) {\n      validate.source = {validateName, validateCode, scopeValues: gen._values}\n    }\n    if (this.opts.unevaluated) {\n      const {props, items} = schemaCxt\n      validate.evaluated = {\n        props: props instanceof Name ? undefined : props,\n        items: items instanceof Name ? undefined : items,\n        dynamicProps: props instanceof Name,\n        dynamicItems: items instanceof Name,\n      }\n      if (validate.source) validate.source.evaluated = stringify(validate.evaluated)\n    }\n    sch.validate = validate\n    return sch\n  } catch (e) {\n    delete sch.validate\n    delete sch.validateName\n    if (sourceCode) this.logger.error(\"Error compiling schema, function code:\", sourceCode)\n    // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n    throw e\n  } finally {\n    this._compilations.delete(sch)\n  }\n}\n\nexport function resolveRef(\n  this: Ajv,\n  root: SchemaEnv,\n  baseId: string,\n  ref: string\n): AnySchema | SchemaEnv | undefined {\n  ref = resolveUrl(this.opts.uriResolver, baseId, ref)\n  const schOrFunc = root.refs[ref]\n  if (schOrFunc) return schOrFunc\n\n  let _sch = resolve.call(this, root, ref)\n  if (_sch === undefined) {\n    const schema = root.localRefs?.[ref] // TODO maybe localRefs should hold SchemaEnv\n    const {schemaId} = this.opts\n    if (schema) _sch = new SchemaEnv({schema, schemaId, root, baseId})\n  }\n\n  if (_sch === undefined) return\n  return (root.refs[ref] = inlineOrCompile.call(this, _sch))\n}\n\nfunction inlineOrCompile(this: Ajv, sch: SchemaEnv): AnySchema | SchemaEnv {\n  if (inlineRef(sch.schema, this.opts.inlineRefs)) return sch.schema\n  return sch.validate ? sch : compileSchema.call(this, sch)\n}\n\n// Index of schema compilation in the currently compiled list\nexport function getCompilingSchema(this: Ajv, schEnv: SchemaEnv): SchemaEnv | void {\n  for (const sch of this._compilations) {\n    if (sameSchemaEnv(sch, schEnv)) return sch\n  }\n}\n\nfunction sameSchemaEnv(s1: SchemaEnv, s2: SchemaEnv): boolean {\n  return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId\n}\n\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(\n  this: Ajv,\n  root: SchemaEnv, // information about the root schema for the current schema\n  ref: string // reference to resolve\n): SchemaEnv | undefined {\n  let sch\n  while (typeof (sch = this.refs[ref]) == \"string\") ref = sch\n  return sch || this.schemas[ref] || resolveSchema.call(this, root, ref)\n}\n\n// Resolve schema, its root and baseId\nexport function resolveSchema(\n  this: Ajv,\n  root: SchemaEnv, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\n  ref: string // reference to resolve\n): SchemaEnv | undefined {\n  const p = this.opts.uriResolver.parse(ref)\n  const refPath = _getFullPath(this.opts.uriResolver, p)\n  let baseId = getFullPath(this.opts.uriResolver, root.baseId, undefined)\n  // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n  if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n    return getJsonPointer.call(this, p, root)\n  }\n\n  const id = normalizeId(refPath)\n  const schOrRef = this.refs[id] || this.schemas[id]\n  if (typeof schOrRef == \"string\") {\n    const sch = resolveSchema.call(this, root, schOrRef)\n    if (typeof sch?.schema !== \"object\") return\n    return getJsonPointer.call(this, p, sch)\n  }\n\n  if (typeof schOrRef?.schema !== \"object\") return\n  if (!schOrRef.validate) compileSchema.call(this, schOrRef)\n  if (id === normalizeId(ref)) {\n    const {schema} = schOrRef\n    const {schemaId} = this.opts\n    const schId = schema[schemaId]\n    if (schId) baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n    return new SchemaEnv({schema, schemaId, root, baseId})\n  }\n  return getJsonPointer.call(this, p, schOrRef)\n}\n\nconst PREVENT_SCOPE_CHANGE = new Set([\n  \"properties\",\n  \"patternProperties\",\n  \"enum\",\n  \"dependencies\",\n  \"definitions\",\n])\n\nfunction getJsonPointer(\n  this: Ajv,\n  parsedRef: URIComponent,\n  {baseId, schema, root}: SchemaEnv\n): SchemaEnv | undefined {\n  if (parsedRef.fragment?.[0] !== \"/\") return\n  for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n    if (typeof schema === \"boolean\") return\n    const partSchema = schema[unescapeFragment(part)]\n    if (partSchema === undefined) return\n    schema = partSchema\n    // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n    const schId = typeof schema === \"object\" && schema[this.opts.schemaId]\n    if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n      baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n    }\n  }\n  let env: SchemaEnv | undefined\n  if (typeof schema != \"boolean\" && schema.$ref && !schemaHasRulesButRef(schema, this.RULES)) {\n    const $ref = resolveUrl(this.opts.uriResolver, baseId, schema.$ref)\n    env = resolveSchema.call(this, root, $ref)\n  }\n  // even though resolution failed we need to return SchemaEnv to throw exception\n  // so that compileAsync loads missing schema.\n  const {schemaId} = this.opts\n  env = env || new SchemaEnv({schema, schemaId, root, baseId})\n  if (env.schema !== env.root.schema) return env\n  return undefined\n}\n", "{\n  \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n  \"description\": \"Meta-schema for $data reference (JSON AnySchema extension proposal)\",\n  \"type\": \"object\",\n  \"required\": [\"$data\"],\n  \"properties\": {\n    \"$data\": {\n      \"type\": \"string\",\n      \"anyOf\": [{\"format\": \"relative-json-pointer\"}, {\"format\": \"json-pointer\"}]\n    }\n  },\n  \"additionalProperties\": false\n}\n", "'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/**\n * @param {Array<string>} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n  let acc = ''\n  let code = 0\n  let i = 0\n\n  for (i = 0; i < input.length; i++) {\n    code = input[i].charCodeAt(0)\n    if (code === 48) {\n      continue\n    }\n    if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n      return ''\n    }\n    acc += input[i]\n    break\n  }\n\n  for (i += 1; i < input.length; i++) {\n    code = input[i].charCodeAt(0)\n    if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n      return ''\n    }\n    acc += input[i]\n  }\n  return acc\n}\n\n/**\n * @typedef {Object} GetIPV6Result\n * @property {boolean} error - Indicates if there was an error parsing the IPv6 address.\n * @property {string} address - The parsed IPv6 address.\n * @property {string} [zone] - The zone identifier, if present.\n */\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/**\n * @param {Array<string>} buffer\n * @returns {boolean}\n */\nfunction consumeIsZone (buffer) {\n  buffer.length = 0\n  return true\n}\n\n/**\n * @param {Array<string>} buffer\n * @param {Array<string>} address\n * @param {GetIPV6Result} output\n * @returns {boolean}\n */\nfunction consumeHextets (buffer, address, output) {\n  if (buffer.length) {\n    const hex = stringArrayToHexStripped(buffer)\n    if (hex !== '') {\n      address.push(hex)\n    } else {\n      output.error = true\n      return false\n    }\n    buffer.length = 0\n  }\n  return true\n}\n\n/**\n * @param {string} input\n * @returns {GetIPV6Result}\n */\nfunction getIPV6 (input) {\n  let tokenCount = 0\n  const output = { error: false, address: '', zone: '' }\n  /** @type {Array<string>} */\n  const address = []\n  /** @type {Array<string>} */\n  const buffer = []\n  let endipv6Encountered = false\n  let endIpv6 = false\n\n  let consume = consumeHextets\n\n  for (let i = 0; i < input.length; i++) {\n    const cursor = input[i]\n    if (cursor === '[' || cursor === ']') { continue }\n    if (cursor === ':') {\n      if (endipv6Encountered === true) {\n        endIpv6 = true\n      }\n      if (!consume(buffer, address, output)) { break }\n      if (++tokenCount > 7) {\n        // not valid\n        output.error = true\n        break\n      }\n      if (i > 0 && input[i - 1] === ':') {\n        endipv6Encountered = true\n      }\n      address.push(':')\n      continue\n    } else if (cursor === '%') {\n      if (!consume(buffer, address, output)) { break }\n      // switch to zone detection\n      consume = consumeIsZone\n    } else {\n      buffer.push(cursor)\n      continue\n    }\n  }\n  if (buffer.length) {\n    if (consume === consumeIsZone) {\n      output.zone = buffer.join('')\n    } else if (endIpv6) {\n      address.push(buffer.join(''))\n    } else {\n      address.push(stringArrayToHexStripped(buffer))\n    }\n  }\n  output.address = address.join('')\n  return output\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n */\n\n/**\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n  if (findToken(host, ':') < 2) { return { host, isIPV6: false } }\n  const ipv6 = getIPV6(host)\n\n  if (!ipv6.error) {\n    let newHost = ipv6.address\n    let escapedHost = ipv6.address\n    if (ipv6.zone) {\n      newHost += '%' + ipv6.zone\n      escapedHost += '%25' + ipv6.zone\n    }\n    return { host: newHost, isIPV6: true, escapedHost }\n  } else {\n    return { host, isIPV6: false }\n  }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n  let ind = 0\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === token) ind++\n  }\n  return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n  let input = path\n  const output = []\n  let nextSlash = -1\n  let len = 0\n\n  // eslint-disable-next-line no-cond-assign\n  while (len = input.length) {\n    if (len === 1) {\n      if (input === '.') {\n        break\n      } else if (input === '/') {\n        output.push('/')\n        break\n      } else {\n        output.push(input)\n        break\n      }\n    } else if (len === 2) {\n      if (input[0] === '.') {\n        if (input[1] === '.') {\n          break\n        } else if (input[1] === '/') {\n          input = input.slice(2)\n          continue\n        }\n      } else if (input[0] === '/') {\n        if (input[1] === '.' || input[1] === '/') {\n          output.push('/')\n          break\n        }\n      }\n    } else if (len === 3) {\n      if (input === '/..') {\n        if (output.length !== 0) {\n          output.pop()\n        }\n        output.push('/')\n        break\n      }\n    }\n    if (input[0] === '.') {\n      if (input[1] === '.') {\n        if (input[2] === '/') {\n          input = input.slice(3)\n          continue\n        }\n      } else if (input[1] === '/') {\n        input = input.slice(2)\n        continue\n      }\n    } else if (input[0] === '/') {\n      if (input[1] === '.') {\n        if (input[2] === '/') {\n          input = input.slice(2)\n          continue\n        } else if (input[2] === '.') {\n          if (input[3] === '/') {\n            input = input.slice(3)\n            if (output.length !== 0) {\n              output.pop()\n            }\n            continue\n          }\n        }\n      }\n    }\n\n    // Rule 2E: Move normal path segment to output\n    if ((nextSlash = input.indexOf('/', 1)) === -1) {\n      output.push(input)\n      break\n    } else {\n      output.push(input.slice(0, nextSlash))\n      input = input.slice(nextSlash)\n    }\n  }\n\n  return output.join('')\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @param {boolean} esc\n * @returns {import('../types/index').URIComponent}\n */\nfunction normalizeComponentEncoding (component, esc) {\n  const func = esc !== true ? escape : unescape\n  if (component.scheme !== undefined) {\n    component.scheme = func(component.scheme)\n  }\n  if (component.userinfo !== undefined) {\n    component.userinfo = func(component.userinfo)\n  }\n  if (component.host !== undefined) {\n    component.host = func(component.host)\n  }\n  if (component.path !== undefined) {\n    component.path = func(component.path)\n  }\n  if (component.query !== undefined) {\n    component.query = func(component.query)\n  }\n  if (component.fragment !== undefined) {\n    component.fragment = func(component.fragment)\n  }\n  return component\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n  const uriTokens = []\n\n  if (component.userinfo !== undefined) {\n    uriTokens.push(component.userinfo)\n    uriTokens.push('@')\n  }\n\n  if (component.host !== undefined) {\n    let host = unescape(component.host)\n    if (!isIPv4(host)) {\n      const ipV6res = normalizeIPv6(host)\n      if (ipV6res.isIPV6 === true) {\n        host = `[${ipV6res.escapedHost}]`\n      } else {\n        host = component.host\n      }\n    }\n    uriTokens.push(host)\n  }\n\n  if (typeof component.port === 'number' || typeof component.port === 'string') {\n    uriTokens.push(':')\n    uriTokens.push(String(component.port))\n  }\n\n  return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n  nonSimpleDomain,\n  recomposeAuthority,\n  normalizeComponentEncoding,\n  removeDotSegments,\n  isIPv4,\n  isUUID,\n  normalizeIPv6,\n  stringArrayToHexStripped\n}\n", "'use strict'\n\nconst { isUUID } = require('./utils')\nconst URN_REG = /([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-.:;=@]|%[\\da-f]{2})+)/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n  'wss', 'urn', 'urn:uuid'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n  return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n  if (wsComponent.secure === true) {\n    return true\n  } else if (wsComponent.secure === false) {\n    return false\n  } else if (wsComponent.scheme) {\n    return (\n      wsComponent.scheme.length === 3 &&\n      (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n      (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n      (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n    )\n  } else {\n    return false\n  }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n  if (!component.host) {\n    component.error = component.error || 'HTTP URIs must have a host.'\n  }\n\n  return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n  const secure = String(component.scheme).toLowerCase() === 'https'\n\n  // normalize the default port\n  if (component.port === (secure ? 443 : 80) || component.port === '') {\n    component.port = undefined\n  }\n\n  // normalize the empty path\n  if (!component.path) {\n    component.path = '/'\n  }\n\n  // NOTE: We do not parse query strings for HTTP URIs\n  // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n  // and not the HTTP spec.\n\n  return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n  wsComponent.secure = wsIsSecure(wsComponent)\n\n  // construct resouce name\n  wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n  wsComponent.path = undefined\n  wsComponent.query = undefined\n\n  return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n  if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n    wsComponent.port = undefined\n  }\n\n  // ensure scheme matches secure flag\n  if (typeof wsComponent.secure === 'boolean') {\n    wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n    wsComponent.secure = undefined\n  }\n\n  // reconstruct path from resource name\n  if (wsComponent.resourceName) {\n    const [path, query] = wsComponent.resourceName.split('?')\n    wsComponent.path = (path && path !== '/' ? path : undefined)\n    wsComponent.query = query\n    wsComponent.resourceName = undefined\n  }\n\n  // forbid fragment component\n  wsComponent.fragment = undefined\n\n  return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n  if (!urnComponent.path) {\n    urnComponent.error = 'URN can not be parsed'\n    return urnComponent\n  }\n  const matches = urnComponent.path.match(URN_REG)\n  if (matches) {\n    const scheme = options.scheme || urnComponent.scheme || 'urn'\n    urnComponent.nid = matches[1].toLowerCase()\n    urnComponent.nss = matches[2]\n    const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n    const schemeHandler = getSchemeHandler(urnScheme)\n    urnComponent.path = undefined\n\n    if (schemeHandler) {\n      urnComponent = schemeHandler.parse(urnComponent, options)\n    }\n  } else {\n    urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n  }\n\n  return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n  if (urnComponent.nid === undefined) {\n    throw new Error('URN without nid cannot be serialized')\n  }\n  const scheme = options.scheme || urnComponent.scheme || 'urn'\n  const nid = urnComponent.nid.toLowerCase()\n  const urnScheme = `${scheme}:${options.nid || nid}`\n  const schemeHandler = getSchemeHandler(urnScheme)\n\n  if (schemeHandler) {\n    urnComponent = schemeHandler.serialize(urnComponent, options)\n  }\n\n  const uriComponent = urnComponent\n  const nss = urnComponent.nss\n  uriComponent.path = `${nid || options.nid}:${nss}`\n\n  options.skipEscape = true\n  return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n  const uuidComponent = urnComponent\n  uuidComponent.uuid = uuidComponent.nss\n  uuidComponent.nss = undefined\n\n  if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n    uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n  }\n\n  return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n  const urnComponent = uuidComponent\n  // normalize UUID\n  urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n  return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n  scheme: 'http',\n  domainHost: true,\n  parse: httpParse,\n  serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n  scheme: 'https',\n  domainHost: http.domainHost,\n  parse: httpParse,\n  serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n  scheme: 'ws',\n  domainHost: true,\n  parse: wsParse,\n  serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n  scheme: 'wss',\n  domainHost: ws.domainHost,\n  parse: ws.parse,\n  serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n  scheme: 'urn',\n  parse: urnParse,\n  serialize: urnSerialize,\n  skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n  scheme: 'urn:uuid',\n  parse: urnuuidParse,\n  serialize: urnuuidSerialize,\n  skipNormalize: true\n})\n\nconst SCHEMES = /** @type {Record<SchemeName, SchemeHandler>} */ ({\n  http,\n  https,\n  ws,\n  wss,\n  urn,\n  'urn:uuid': urnuuid\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n  return (\n    scheme && (\n      SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n      SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n  ) ||\n    undefined\n}\n\nmodule.exports = {\n  wsIsSecure,\n  SCHEMES,\n  isValidSchemeName,\n  getSchemeHandler,\n}\n", "'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n  if (typeof uri === 'string') {\n    uri = /** @type {T} */ (serialize(parse(uri, options), options))\n  } else if (typeof uri === 'object') {\n    uri = /** @type {T} */ (parse(serialize(uri, options), options))\n  }\n  return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n  const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n  const resolved = resolveComponent(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true)\n  schemelessOptions.skipEscape = true\n  return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n  /** @type {import('./types/index').URIComponent} */\n  const target = {}\n  if (!skipNormalization) {\n    base = parse(serialize(base, options), options) // normalize base component\n    relative = parse(serialize(relative, options), options) // normalize relative component\n  }\n  options = options || {}\n\n  if (!options.tolerant && relative.scheme) {\n    target.scheme = relative.scheme\n    // target.authority = relative.authority;\n    target.userinfo = relative.userinfo\n    target.host = relative.host\n    target.port = relative.port\n    target.path = removeDotSegments(relative.path || '')\n    target.query = relative.query\n  } else {\n    if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n      // target.authority = relative.authority;\n      target.userinfo = relative.userinfo\n      target.host = relative.host\n      target.port = relative.port\n      target.path = removeDotSegments(relative.path || '')\n      target.query = relative.query\n    } else {\n      if (!relative.path) {\n        target.path = base.path\n        if (relative.query !== undefined) {\n          target.query = relative.query\n        } else {\n          target.query = base.query\n        }\n      } else {\n        if (relative.path[0] === '/') {\n          target.path = removeDotSegments(relative.path)\n        } else {\n          if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n            target.path = '/' + relative.path\n          } else if (!base.path) {\n            target.path = relative.path\n          } else {\n            target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n          }\n          target.path = removeDotSegments(target.path)\n        }\n        target.query = relative.query\n      }\n      // target.authority = base.authority;\n      target.userinfo = base.userinfo\n      target.host = base.host\n      target.port = base.port\n    }\n    target.scheme = base.scheme\n  }\n\n  target.fragment = relative.fragment\n\n  return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n  if (typeof uriA === 'string') {\n    uriA = unescape(uriA)\n    uriA = serialize(normalizeComponentEncoding(parse(uriA, options), true), { ...options, skipEscape: true })\n  } else if (typeof uriA === 'object') {\n    uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true })\n  }\n\n  if (typeof uriB === 'string') {\n    uriB = unescape(uriB)\n    uriB = serialize(normalizeComponentEncoding(parse(uriB, options), true), { ...options, skipEscape: true })\n  } else if (typeof uriB === 'object') {\n    uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true })\n  }\n\n  return uriA.toLowerCase() === uriB.toLowerCase()\n}\n\n/**\n * @param {Readonly<import('./types/index').URIComponent>} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n  const component = {\n    host: cmpts.host,\n    scheme: cmpts.scheme,\n    userinfo: cmpts.userinfo,\n    port: cmpts.port,\n    path: cmpts.path,\n    query: cmpts.query,\n    nid: cmpts.nid,\n    nss: cmpts.nss,\n    uuid: cmpts.uuid,\n    fragment: cmpts.fragment,\n    reference: cmpts.reference,\n    resourceName: cmpts.resourceName,\n    secure: cmpts.secure,\n    error: ''\n  }\n  const options = Object.assign({}, opts)\n  const uriTokens = []\n\n  // find scheme handler\n  const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n  // perform scheme specific serialization\n  if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n  if (component.path !== undefined) {\n    if (!options.skipEscape) {\n      component.path = escape(component.path)\n\n      if (component.scheme !== undefined) {\n        component.path = component.path.split('%3A').join(':')\n      }\n    } else {\n      component.path = unescape(component.path)\n    }\n  }\n\n  if (options.reference !== 'suffix' && component.scheme) {\n    uriTokens.push(component.scheme, ':')\n  }\n\n  const authority = recomposeAuthority(component)\n  if (authority !== undefined) {\n    if (options.reference !== 'suffix') {\n      uriTokens.push('//')\n    }\n\n    uriTokens.push(authority)\n\n    if (component.path && component.path[0] !== '/') {\n      uriTokens.push('/')\n    }\n  }\n  if (component.path !== undefined) {\n    let s = component.path\n\n    if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n      s = removeDotSegments(s)\n    }\n\n    if (\n      authority === undefined &&\n      s[0] === '/' &&\n      s[1] === '/'\n    ) {\n      // don't allow the path to start with \"//\"\n      s = '/%2F' + s.slice(2)\n    }\n\n    uriTokens.push(s)\n  }\n\n  if (component.query !== undefined) {\n    uriTokens.push('?', component.query)\n  }\n\n  if (component.fragment !== undefined) {\n    uriTokens.push('#', component.fragment)\n  }\n  return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n  const options = Object.assign({}, opts)\n  /** @type {import('./types/index').URIComponent} */\n  const parsed = {\n    scheme: undefined,\n    userinfo: undefined,\n    host: '',\n    port: undefined,\n    path: '',\n    query: undefined,\n    fragment: undefined\n  }\n\n  let isIP = false\n  if (options.reference === 'suffix') {\n    if (options.scheme) {\n      uri = options.scheme + ':' + uri\n    } else {\n      uri = '//' + uri\n    }\n  }\n\n  const matches = uri.match(URI_PARSE)\n\n  if (matches) {\n    // store each component\n    parsed.scheme = matches[1]\n    parsed.userinfo = matches[3]\n    parsed.host = matches[4]\n    parsed.port = parseInt(matches[5], 10)\n    parsed.path = matches[6] || ''\n    parsed.query = matches[7]\n    parsed.fragment = matches[8]\n\n    // fix port number\n    if (isNaN(parsed.port)) {\n      parsed.port = matches[5]\n    }\n    if (parsed.host) {\n      const ipv4result = isIPv4(parsed.host)\n      if (ipv4result === false) {\n        const ipv6result = normalizeIPv6(parsed.host)\n        parsed.host = ipv6result.host.toLowerCase()\n        isIP = ipv6result.isIPV6\n      } else {\n        isIP = true\n      }\n    }\n    if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n      parsed.reference = 'same-document'\n    } else if (parsed.scheme === undefined) {\n      parsed.reference = 'relative'\n    } else if (parsed.fragment === undefined) {\n      parsed.reference = 'absolute'\n    } else {\n      parsed.reference = 'uri'\n    }\n\n    // check for reference errors\n    if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n      parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n    }\n\n    // find scheme handler\n    const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n    // check if scheme can't handle IRIs\n    if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n      // if host component is a domain name\n      if (parsed.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost)) && isIP === false && nonSimpleDomain(parsed.host)) {\n        // convert Unicode IDN -> ASCII IDN\n        try {\n          parsed.host = URL.domainToASCII(parsed.host.toLowerCase())\n        } catch (e) {\n          parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n        }\n      }\n      // convert IRI -> URI\n    }\n\n    if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n      if (uri.indexOf('%') !== -1) {\n        if (parsed.scheme !== undefined) {\n          parsed.scheme = unescape(parsed.scheme)\n        }\n        if (parsed.host !== undefined) {\n          parsed.host = unescape(parsed.host)\n        }\n      }\n      if (parsed.path) {\n        parsed.path = escape(unescape(parsed.path))\n      }\n      if (parsed.fragment) {\n        parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment))\n      }\n    }\n\n    // perform scheme specific parsing\n    if (schemeHandler && schemeHandler.parse) {\n      schemeHandler.parse(parsed, options)\n    }\n  } else {\n    parsed.error = parsed.error || 'URI can not be parsed.'\n  }\n  return parsed\n}\n\nconst fastUri = {\n  SCHEMES,\n  normalize,\n  resolve,\n  resolveComponent,\n  equal,\n  serialize,\n  parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n", "import * as uri from \"fast-uri\"\n\ntype URI = typeof uri & {code: string}\n;(uri as URI).code = 'require(\"ajv/dist/runtime/uri\").default'\n\nexport default uri as URI\n", "export {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  AnyValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport interface Plugin<Opts> {\n  (ajv: Ajv, options?: Opts): Ajv\n  [prop: string]: any\n}\n\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\n\nimport type {\n  Schema,\n  AnySchema,\n  AnySchemaObject,\n  SchemaObject,\n  AsyncSchema,\n  Vocabulary,\n  KeywordDefinition,\n  AddedKeywordDefinition,\n  AnyValidateFunction,\n  ValidateFunction,\n  AsyncValidateFunction,\n  ErrorObject,\n  Format,\n  AddedFormat,\n  RegExpEngine,\n  UriResolver,\n} from \"./types\"\nimport type {JSONSchemaType} from \"./types/json-schema\"\nimport type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nimport ValidationError from \"./runtime/validation_error\"\nimport MissingRefError from \"./compile/ref_error\"\nimport {getRules, ValidationRules, Rule, RuleGroup, JSONType} from \"./compile/rules\"\nimport {SchemaEnv, compileSchema, resolveSchema} from \"./compile\"\nimport {Code, ValueScope} from \"./compile/codegen\"\nimport {normalizeId, getSchemaRefs} from \"./compile/resolve\"\nimport {getJSONTypes} from \"./compile/validate/dataType\"\nimport {eachItem} from \"./compile/util\"\nimport * as $dataRefSchema from \"./refs/data.json\"\n\nimport DefaultUriResolver from \"./runtime/uri\"\n\nconst defaultRegExp: RegExpEngine = (str, flags) => new RegExp(str, flags)\ndefaultRegExp.code = \"new RegExp\"\n\nconst META_IGNORE_OPTIONS: (keyof Options)[] = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"]\nconst EXT_SCOPE_NAMES = new Set([\n  \"validate\",\n  \"serialize\",\n  \"parse\",\n  \"wrapper\",\n  \"root\",\n  \"schema\",\n  \"keyword\",\n  \"pattern\",\n  \"formats\",\n  \"validate$data\",\n  \"func\",\n  \"obj\",\n  \"Error\",\n])\n\nexport type Options = CurrentOptions & DeprecatedOptions\n\nexport interface CurrentOptions {\n  // strict mode options (NEW)\n  strict?: boolean | \"log\"\n  strictSchema?: boolean | \"log\"\n  strictNumbers?: boolean | \"log\"\n  strictTypes?: boolean | \"log\"\n  strictTuples?: boolean | \"log\"\n  strictRequired?: boolean | \"log\"\n  allowMatchingProperties?: boolean // disables a strict mode restriction\n  allowUnionTypes?: boolean\n  validateFormats?: boolean\n  // validation and reporting options:\n  $data?: boolean\n  allErrors?: boolean\n  verbose?: boolean\n  discriminator?: boolean\n  unicodeRegExp?: boolean\n  timestamp?: \"string\" | \"date\" // JTD only\n  parseDate?: boolean // JTD only\n  allowDate?: boolean // JTD only\n  specialNumbers?: \"fast\" | \"null\" // JTD only\n  $comment?:\n    | true\n    | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown)\n  formats?: {[Name in string]?: Format}\n  keywords?: Vocabulary\n  schemas?: AnySchema[] | {[Key in string]?: AnySchema}\n  logger?: Logger | false\n  loadSchema?: (uri: string) => Promise<AnySchemaObject>\n  // options to modify validated data:\n  removeAdditional?: boolean | \"all\" | \"failing\"\n  useDefaults?: boolean | \"empty\"\n  coerceTypes?: boolean | \"array\"\n  // advanced options:\n  next?: boolean // NEW\n  unevaluated?: boolean // NEW\n  dynamicRef?: boolean // NEW\n  schemaId?: \"id\" | \"$id\"\n  jtd?: boolean // NEW\n  meta?: SchemaObject | boolean\n  defaultMeta?: string | AnySchemaObject\n  validateSchema?: boolean | \"log\"\n  addUsedSchema?: boolean\n  inlineRefs?: boolean | number\n  passContext?: boolean\n  loopRequired?: number\n  loopEnum?: number // NEW\n  ownProperties?: boolean\n  multipleOfPrecision?: number\n  int32range?: boolean // JTD only\n  messages?: boolean\n  code?: CodeOptions // NEW\n  uriResolver?: UriResolver\n}\n\nexport interface CodeOptions {\n  es5?: boolean\n  esm?: boolean\n  lines?: boolean\n  optimize?: boolean | number\n  formats?: Code // code to require (or construct) map of available formats - for standalone code\n  source?: boolean\n  process?: (code: string, schema?: SchemaEnv) => string\n  regExp?: RegExpEngine\n}\n\ninterface InstanceCodeOptions extends CodeOptions {\n  regExp: RegExpEngine\n  optimize: number\n}\n\ninterface DeprecatedOptions {\n  /** @deprecated */\n  ignoreKeywordsWithRef?: boolean\n  /** @deprecated */\n  jsPropertySyntax?: boolean // added instead of jsonPointers\n  /** @deprecated */\n  unicode?: boolean\n}\n\ninterface RemovedOptions {\n  format?: boolean\n  errorDataPath?: \"object\" | \"property\"\n  nullable?: boolean // \"nullable\" keyword is supported by default\n  jsonPointers?: boolean\n  extendRefs?: true | \"ignore\" | \"fail\"\n  missingRefs?: true | \"ignore\" | \"fail\"\n  processCode?: (code: string, schema?: SchemaEnv) => string\n  sourceCode?: boolean\n  strictDefaults?: boolean\n  strictKeywords?: boolean\n  uniqueItems?: boolean\n  unknownFormats?: true | string[] | \"ignore\"\n  cache?: any\n  serialize?: (schema: AnySchema) => unknown\n  ajvErrors?: boolean\n}\n\ntype OptionsInfo<T extends RemovedOptions | DeprecatedOptions> = {\n  [K in keyof T]-?: string | undefined\n}\n\nconst removedOptions: OptionsInfo<RemovedOptions> = {\n  errorDataPath: \"\",\n  format: \"`validateFormats: false` can be used instead.\",\n  nullable: '\"nullable\" keyword is supported by default.',\n  jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n  extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n  missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n  processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n  sourceCode: \"Use option `code: {source: true}`\",\n  strictDefaults: \"It is default now, see option `strict`.\",\n  strictKeywords: \"It is default now, see option `strict`.\",\n  uniqueItems: '\"uniqueItems\" keyword is always validated.',\n  unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n  cache: \"Map is used as cache, schema object as key.\",\n  serialize: \"Map is used as cache, schema object as key.\",\n  ajvErrors: \"It is default now.\",\n}\n\nconst deprecatedOptions: OptionsInfo<DeprecatedOptions> = {\n  ignoreKeywordsWithRef: \"\",\n  jsPropertySyntax: \"\",\n  unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n}\n\ntype RequiredInstanceOptions = {\n  [K in\n    | \"strictSchema\"\n    | \"strictNumbers\"\n    | \"strictTypes\"\n    | \"strictTuples\"\n    | \"strictRequired\"\n    | \"inlineRefs\"\n    | \"loopRequired\"\n    | \"loopEnum\"\n    | \"meta\"\n    | \"messages\"\n    | \"schemaId\"\n    | \"addUsedSchema\"\n    | \"validateSchema\"\n    | \"validateFormats\"\n    | \"int32range\"\n    | \"unicodeRegExp\"\n    | \"uriResolver\"]: NonNullable<Options[K]>\n} & {code: InstanceCodeOptions}\n\nexport type InstanceOptions = Options & RequiredInstanceOptions\n\nconst MAX_EXPRESSION = 200\n\n// eslint-disable-next-line complexity\nfunction requiredOptions(o: Options): RequiredInstanceOptions {\n  const s = o.strict\n  const _optz = o.code?.optimize\n  const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0\n  const regExp = o.code?.regExp ?? defaultRegExp\n  const uriResolver = o.uriResolver ?? DefaultUriResolver\n  return {\n    strictSchema: o.strictSchema ?? s ?? true,\n    strictNumbers: o.strictNumbers ?? s ?? true,\n    strictTypes: o.strictTypes ?? s ?? \"log\",\n    strictTuples: o.strictTuples ?? s ?? \"log\",\n    strictRequired: o.strictRequired ?? s ?? false,\n    code: o.code ? {...o.code, optimize, regExp} : {optimize, regExp},\n    loopRequired: o.loopRequired ?? MAX_EXPRESSION,\n    loopEnum: o.loopEnum ?? MAX_EXPRESSION,\n    meta: o.meta ?? true,\n    messages: o.messages ?? true,\n    inlineRefs: o.inlineRefs ?? true,\n    schemaId: o.schemaId ?? \"$id\",\n    addUsedSchema: o.addUsedSchema ?? true,\n    validateSchema: o.validateSchema ?? true,\n    validateFormats: o.validateFormats ?? true,\n    unicodeRegExp: o.unicodeRegExp ?? true,\n    int32range: o.int32range ?? true,\n    uriResolver: uriResolver,\n  }\n}\n\nexport interface Logger {\n  log(...args: unknown[]): unknown\n  warn(...args: unknown[]): unknown\n  error(...args: unknown[]): unknown\n}\n\nexport default class Ajv {\n  opts: InstanceOptions\n  errors?: ErrorObject[] | null // errors from the last validation\n  logger: Logger\n  // shared external scope values for compiled functions\n  readonly scope: ValueScope\n  readonly schemas: {[Key in string]?: SchemaEnv} = {}\n  readonly refs: {[Ref in string]?: SchemaEnv | string} = {}\n  readonly formats: {[Name in string]?: AddedFormat} = {}\n  readonly RULES: ValidationRules\n  readonly _compilations: Set<SchemaEnv> = new Set()\n  private readonly _loading: {[Ref in string]?: Promise<AnySchemaObject>} = {}\n  private readonly _cache: Map<AnySchema, SchemaEnv> = new Map()\n  private readonly _metaOpts: InstanceOptions\n\n  static ValidationError = ValidationError\n  static MissingRefError = MissingRefError\n\n  constructor(opts: Options = {}) {\n    opts = this.opts = {...opts, ...requiredOptions(opts)}\n    const {es5, lines} = this.opts.code\n\n    this.scope = new ValueScope({scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines})\n    this.logger = getLogger(opts.logger)\n    const formatOpt = opts.validateFormats\n    opts.validateFormats = false\n\n    this.RULES = getRules()\n    checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\")\n    checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\")\n    this._metaOpts = getMetaSchemaOptions.call(this)\n\n    if (opts.formats) addInitialFormats.call(this)\n    this._addVocabularies()\n    this._addDefaultMetaSchema()\n    if (opts.keywords) addInitialKeywords.call(this, opts.keywords)\n    if (typeof opts.meta == \"object\") this.addMetaSchema(opts.meta)\n    addInitialSchemas.call(this)\n    opts.validateFormats = formatOpt\n  }\n\n  _addVocabularies(): void {\n    this.addKeyword(\"$async\")\n  }\n\n  _addDefaultMetaSchema(): void {\n    const {$data, meta, schemaId} = this.opts\n    let _dataRefSchema: SchemaObject = $dataRefSchema\n    if (schemaId === \"id\") {\n      _dataRefSchema = {...$dataRefSchema}\n      _dataRefSchema.id = _dataRefSchema.$id\n      delete _dataRefSchema.$id\n    }\n    if (meta && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false)\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    const {meta, schemaId} = this.opts\n    return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined)\n  }\n\n  // Validate data using schema\n  // AnySchema will be compiled and cached using schema itself as a key for Map\n  validate(schema: Schema | string, data: unknown): boolean\n  validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>\n  validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T\n  // This overload is only intended for typescript inference, the first\n  // argument prevents manual type annotation from matching this overload\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  validate<N extends never, T extends SomeJTDSchemaType>(\n    schema: T,\n    data: unknown\n  ): data is JTDDataType<T>\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>\n  validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>\n  validate<T>(\n    schemaKeyRef: AnySchema | string, // key, ref or schema object\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    data: unknown | T // to be validated\n  ): boolean | Promise<T> {\n    let v: AnyValidateFunction | undefined\n    if (typeof schemaKeyRef == \"string\") {\n      v = this.getSchema<T>(schemaKeyRef)\n      if (!v) throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`)\n    } else {\n      v = this.compile<T>(schemaKeyRef)\n    }\n\n    const valid = v(data)\n    if (!(\"$async\" in v)) this.errors = v.errors\n    return valid\n  }\n\n  // Create validation function for passed schema\n  // _meta: true if schema is a meta-schema. Used internally to compile meta schemas of user-defined keywords.\n  compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n  // This overload is only intended for typescript inference, the first\n  // argument prevents manual type annotation from matching this overload\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  compile<N extends never, T extends SomeJTDSchemaType>(\n    schema: T,\n    _meta?: boolean\n  ): ValidateFunction<JTDDataType<T>>\n  compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>\n  compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>\n  compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T> {\n    const sch = this._addSchema(schema, _meta)\n    return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T>\n  }\n\n  // Creates validating function for passed schema with asynchronous loading of missing schemas.\n  // `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n  // TODO allow passing schema URI\n  // meta - optional true to compile meta-schema\n  compileAsync<T = unknown>(\n    schema: SchemaObject | JSONSchemaType<T>,\n    _meta?: boolean\n  ): Promise<ValidateFunction<T>>\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>\n  compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileAsync<T = unknown>(\n    schema: AnySchemaObject,\n    meta?: boolean\n  ): Promise<AnyValidateFunction<T>>\n  compileAsync<T = unknown>(\n    schema: AnySchemaObject,\n    meta?: boolean\n  ): Promise<AnyValidateFunction<T>> {\n    if (typeof this.opts.loadSchema != \"function\") {\n      throw new Error(\"options.loadSchema should be a function\")\n    }\n    const {loadSchema} = this.opts\n    return runCompileAsync.call(this, schema, meta)\n\n    async function runCompileAsync(\n      this: Ajv,\n      _schema: AnySchemaObject,\n      _meta?: boolean\n    ): Promise<AnyValidateFunction> {\n      await loadMetaSchema.call(this, _schema.$schema)\n      const sch = this._addSchema(_schema, _meta)\n      return sch.validate || _compileAsync.call(this, sch)\n    }\n\n    async function loadMetaSchema(this: Ajv, $ref?: string): Promise<void> {\n      if ($ref && !this.getSchema($ref)) {\n        await runCompileAsync.call(this, {$ref}, true)\n      }\n    }\n\n    async function _compileAsync(this: Ajv, sch: SchemaEnv): Promise<AnyValidateFunction> {\n      try {\n        return this._compileSchemaEnv(sch)\n      } catch (e) {\n        if (!(e instanceof MissingRefError)) throw e\n        checkLoaded.call(this, e)\n        await loadMissingSchema.call(this, e.missingSchema)\n        return _compileAsync.call(this, sch)\n      }\n    }\n\n    function checkLoaded(this: Ajv, {missingSchema: ref, missingRef}: MissingRefError): void {\n      if (this.refs[ref]) {\n        throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)\n      }\n    }\n\n    async function loadMissingSchema(this: Ajv, ref: string): Promise<void> {\n      const _schema = await _loadSchema.call(this, ref)\n      if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema)\n      if (!this.refs[ref]) this.addSchema(_schema, ref, meta)\n    }\n\n    async function _loadSchema(this: Ajv, ref: string): Promise<AnySchemaObject> {\n      const p = this._loading[ref]\n      if (p) return p\n      try {\n        return await (this._loading[ref] = loadSchema(ref))\n      } finally {\n        delete this._loading[ref]\n      }\n    }\n  }\n\n  // Adds schema to the instance\n  addSchema(\n    schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored\n    key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n    _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n    _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n  ): Ajv {\n    if (Array.isArray(schema)) {\n      for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema)\n      return this\n    }\n    let id: string | undefined\n    if (typeof schema === \"object\") {\n      const {schemaId} = this.opts\n      id = schema[schemaId]\n      if (id !== undefined && typeof id != \"string\") {\n        throw new Error(`schema ${schemaId} must be string`)\n      }\n    }\n    key = normalizeId(key || id)\n    this._checkUnique(key)\n    this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true)\n    return this\n  }\n\n  // Add schema that will be used to validate other schemas\n  // options in META_IGNORE_OPTIONS are alway set to false\n  addMetaSchema(\n    schema: AnySchemaObject,\n    key?: string, // schema key\n    _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n  ): Ajv {\n    this.addSchema(schema, key, true, _validateSchema)\n    return this\n  }\n\n  //  Validate schema against its meta-schema\n  validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown> {\n    if (typeof schema == \"boolean\") return true\n    let $schema: string | AnySchemaObject | undefined\n    $schema = schema.$schema\n    if ($schema !== undefined && typeof $schema != \"string\") {\n      throw new Error(\"$schema must be a string\")\n    }\n    $schema = $schema || this.opts.defaultMeta || this.defaultMeta()\n    if (!$schema) {\n      this.logger.warn(\"meta-schema not available\")\n      this.errors = null\n      return true\n    }\n    const valid = this.validate($schema, schema)\n    if (!valid && throwOrLogError) {\n      const message = \"schema is invalid: \" + this.errorsText()\n      if (this.opts.validateSchema === \"log\") this.logger.error(message)\n      else throw new Error(message)\n    }\n    return valid\n  }\n\n  // Get compiled schema by `key` or `ref`.\n  // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n  getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {\n    let sch\n    while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\") keyRef = sch\n    if (sch === undefined) {\n      const {schemaId} = this.opts\n      const root = new SchemaEnv({schema: {}, schemaId})\n      sch = resolveSchema.call(this, root, keyRef)\n      if (!sch) return\n      this.refs[keyRef] = sch\n    }\n    return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T> | undefined\n  }\n\n  // Remove cached schema(s).\n  // If no parameter is passed all schemas but meta-schemas are removed.\n  // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n  // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n  removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv {\n    if (schemaKeyRef instanceof RegExp) {\n      this._removeAllSchemas(this.schemas, schemaKeyRef)\n      this._removeAllSchemas(this.refs, schemaKeyRef)\n      return this\n    }\n    switch (typeof schemaKeyRef) {\n      case \"undefined\":\n        this._removeAllSchemas(this.schemas)\n        this._removeAllSchemas(this.refs)\n        this._cache.clear()\n        return this\n      case \"string\": {\n        const sch = getSchEnv.call(this, schemaKeyRef)\n        if (typeof sch == \"object\") this._cache.delete(sch.schema)\n        delete this.schemas[schemaKeyRef]\n        delete this.refs[schemaKeyRef]\n        return this\n      }\n      case \"object\": {\n        const cacheKey = schemaKeyRef\n        this._cache.delete(cacheKey)\n        let id = schemaKeyRef[this.opts.schemaId]\n        if (id) {\n          id = normalizeId(id)\n          delete this.schemas[id]\n          delete this.refs[id]\n        }\n        return this\n      }\n      default:\n        throw new Error(\"ajv.removeSchema: invalid parameter\")\n    }\n  }\n\n  // add \"vocabulary\" - a collection of keywords\n  addVocabulary(definitions: Vocabulary): Ajv {\n    for (const def of definitions) this.addKeyword(def)\n    return this\n  }\n\n  addKeyword(\n    kwdOrDef: string | KeywordDefinition,\n    def?: KeywordDefinition // deprecated\n  ): Ajv {\n    let keyword: string | string[]\n    if (typeof kwdOrDef == \"string\") {\n      keyword = kwdOrDef\n      if (typeof def == \"object\") {\n        this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\")\n        def.keyword = keyword\n      }\n    } else if (typeof kwdOrDef == \"object\" && def === undefined) {\n      def = kwdOrDef\n      keyword = def.keyword\n      if (Array.isArray(keyword) && !keyword.length) {\n        throw new Error(\"addKeywords: keyword must be string or non-empty array\")\n      }\n    } else {\n      throw new Error(\"invalid addKeywords parameters\")\n    }\n\n    checkKeyword.call(this, keyword, def)\n    if (!def) {\n      eachItem(keyword, (kwd) => addRule.call(this, kwd))\n      return this\n    }\n    keywordMetaschema.call(this, def)\n    const definition: AddedKeywordDefinition = {\n      ...def,\n      type: getJSONTypes(def.type),\n      schemaType: getJSONTypes(def.schemaType),\n    }\n    eachItem(\n      keyword,\n      definition.type.length === 0\n        ? (k) => addRule.call(this, k, definition)\n        : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))\n    )\n    return this\n  }\n\n  getKeyword(keyword: string): AddedKeywordDefinition | boolean {\n    const rule = this.RULES.all[keyword]\n    return typeof rule == \"object\" ? rule.definition : !!rule\n  }\n\n  // Remove keyword\n  removeKeyword(keyword: string): Ajv {\n    // TODO return type should be Ajv\n    const {RULES} = this\n    delete RULES.keywords[keyword]\n    delete RULES.all[keyword]\n    for (const group of RULES.rules) {\n      const i = group.rules.findIndex((rule) => rule.keyword === keyword)\n      if (i >= 0) group.rules.splice(i, 1)\n    }\n    return this\n  }\n\n  // Add format\n  addFormat(name: string, format: Format): Ajv {\n    if (typeof format == \"string\") format = new RegExp(format)\n    this.formats[name] = format\n    return this\n  }\n\n  errorsText(\n    errors: ErrorObject[] | null | undefined = this.errors, // optional array of validation errors\n    {separator = \", \", dataVar = \"data\"}: ErrorsTextOptions = {} // optional options with properties `separator` and `dataVar`\n  ): string {\n    if (!errors || errors.length === 0) return \"No errors\"\n    return errors\n      .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n      .reduce((text, msg) => text + separator + msg)\n  }\n\n  $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject {\n    const rules = this.RULES.all\n    metaSchema = JSON.parse(JSON.stringify(metaSchema))\n    for (const jsonPointer of keywordsJsonPointers) {\n      const segments = jsonPointer.split(\"/\").slice(1) // first segment is an empty string\n      let keywords = metaSchema\n      for (const seg of segments) keywords = keywords[seg] as AnySchemaObject\n\n      for (const key in rules) {\n        const rule = rules[key]\n        if (typeof rule != \"object\") continue\n        const {$data} = rule.definition\n        const schema = keywords[key] as AnySchemaObject | undefined\n        if ($data && schema) keywords[key] = schemaOrData(schema)\n      }\n    }\n\n    return metaSchema\n  }\n\n  private _removeAllSchemas(schemas: {[Ref in string]?: SchemaEnv | string}, regex?: RegExp): void {\n    for (const keyRef in schemas) {\n      const sch = schemas[keyRef]\n      if (!regex || regex.test(keyRef)) {\n        if (typeof sch == \"string\") {\n          delete schemas[keyRef]\n        } else if (sch && !sch.meta) {\n          this._cache.delete(sch.schema)\n          delete schemas[keyRef]\n        }\n      }\n    }\n  }\n\n  _addSchema(\n    schema: AnySchema,\n    meta?: boolean,\n    baseId?: string,\n    validateSchema = this.opts.validateSchema,\n    addSchema = this.opts.addUsedSchema\n  ): SchemaEnv {\n    let id: string | undefined\n    const {schemaId} = this.opts\n    if (typeof schema == \"object\") {\n      id = schema[schemaId]\n    } else {\n      if (this.opts.jtd) throw new Error(\"schema must be object\")\n      else if (typeof schema != \"boolean\") throw new Error(\"schema must be object or boolean\")\n    }\n    let sch = this._cache.get(schema)\n    if (sch !== undefined) return sch\n\n    baseId = normalizeId(id || baseId)\n    const localRefs = getSchemaRefs.call(this, schema, baseId)\n    sch = new SchemaEnv({schema, schemaId, meta, baseId, localRefs})\n    this._cache.set(sch.schema, sch)\n    if (addSchema && !baseId.startsWith(\"#\")) {\n      // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n      if (baseId) this._checkUnique(baseId)\n      this.refs[baseId] = sch\n    }\n    if (validateSchema) this.validateSchema(schema, true)\n    return sch\n  }\n\n  private _checkUnique(id: string): void {\n    if (this.schemas[id] || this.refs[id]) {\n      throw new Error(`schema with key or id \"${id}\" already exists`)\n    }\n  }\n\n  private _compileSchemaEnv(sch: SchemaEnv): AnyValidateFunction {\n    if (sch.meta) this._compileMetaSchema(sch)\n    else compileSchema.call(this, sch)\n\n    /* istanbul ignore if */\n    if (!sch.validate) throw new Error(\"ajv implementation error\")\n    return sch.validate\n  }\n\n  private _compileMetaSchema(sch: SchemaEnv): void {\n    const currentOpts = this.opts\n    this.opts = this._metaOpts\n    try {\n      compileSchema.call(this, sch)\n    } finally {\n      this.opts = currentOpts\n    }\n  }\n}\n\nexport interface ErrorsTextOptions {\n  separator?: string\n  dataVar?: string\n}\n\nfunction checkOptions(\n  this: Ajv,\n  checkOpts: OptionsInfo<RemovedOptions | DeprecatedOptions>,\n  options: Options & RemovedOptions,\n  msg: string,\n  log: \"warn\" | \"error\" = \"error\"\n): void {\n  for (const key in checkOpts) {\n    const opt = key as keyof typeof checkOpts\n    if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)\n  }\n}\n\nfunction getSchEnv(this: Ajv, keyRef: string): SchemaEnv | string | undefined {\n  keyRef = normalizeId(keyRef) // TODO tests fail without this line\n  return this.schemas[keyRef] || this.refs[keyRef]\n}\n\nfunction addInitialSchemas(this: Ajv): void {\n  const optsSchemas = this.opts.schemas\n  if (!optsSchemas) return\n  if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas)\n  else for (const key in optsSchemas) this.addSchema(optsSchemas[key] as AnySchema, key)\n}\n\nfunction addInitialFormats(this: Ajv): void {\n  for (const name in this.opts.formats) {\n    const format = this.opts.formats[name]\n    if (format) this.addFormat(name, format)\n  }\n}\n\nfunction addInitialKeywords(\n  this: Ajv,\n  defs: Vocabulary | {[K in string]?: KeywordDefinition}\n): void {\n  if (Array.isArray(defs)) {\n    this.addVocabulary(defs)\n    return\n  }\n  this.logger.warn(\"keywords option as map is deprecated, pass array\")\n  for (const keyword in defs) {\n    const def = defs[keyword] as KeywordDefinition\n    if (!def.keyword) def.keyword = keyword\n    this.addKeyword(def)\n  }\n}\n\nfunction getMetaSchemaOptions(this: Ajv): InstanceOptions {\n  const metaOpts = {...this.opts}\n  for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]\n  return metaOpts\n}\n\nconst noLogs = {log() {}, warn() {}, error() {}}\n\nfunction getLogger(logger?: Partial<Logger> | false): Logger {\n  if (logger === false) return noLogs\n  if (logger === undefined) return console\n  if (logger.log && logger.warn && logger.error) return logger as Logger\n  throw new Error(\"logger must implement log, warn and error methods\")\n}\n\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i\n\nfunction checkKeyword(this: Ajv, keyword: string | string[], def?: KeywordDefinition): void {\n  const {RULES} = this\n  eachItem(keyword, (kwd) => {\n    if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`)\n    if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`)\n  })\n  if (!def) return\n  if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n    throw new Error('$data keyword must have \"code\" or \"validate\" function')\n  }\n}\n\nfunction addRule(\n  this: Ajv,\n  keyword: string,\n  definition?: AddedKeywordDefinition,\n  dataType?: JSONType\n): void {\n  const post = definition?.post\n  if (dataType && post) throw new Error('keyword with \"post\" flag cannot have \"type\"')\n  const {RULES} = this\n  let ruleGroup = post ? RULES.post : RULES.rules.find(({type: t}) => t === dataType)\n  if (!ruleGroup) {\n    ruleGroup = {type: dataType, rules: []}\n    RULES.rules.push(ruleGroup)\n  }\n  RULES.keywords[keyword] = true\n  if (!definition) return\n\n  const rule: Rule = {\n    keyword,\n    definition: {\n      ...definition,\n      type: getJSONTypes(definition.type),\n      schemaType: getJSONTypes(definition.schemaType),\n    },\n  }\n  if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before)\n  else ruleGroup.rules.push(rule)\n  RULES.all[keyword] = rule\n  definition.implements?.forEach((kwd) => this.addKeyword(kwd))\n}\n\nfunction addBeforeRule(this: Ajv, ruleGroup: RuleGroup, rule: Rule, before: string): void {\n  const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before)\n  if (i >= 0) {\n    ruleGroup.rules.splice(i, 0, rule)\n  } else {\n    ruleGroup.rules.push(rule)\n    this.logger.warn(`rule ${before} is not defined`)\n  }\n}\n\nfunction keywordMetaschema(this: Ajv, def: KeywordDefinition): void {\n  let {metaSchema} = def\n  if (metaSchema === undefined) return\n  if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema)\n  def.validateSchema = this.compile(metaSchema, true)\n}\n\nconst $dataRef = {\n  $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n}\n\nfunction schemaOrData(schema: AnySchema): AnySchemaObject {\n  return {anyOf: [schema, $dataRef]}\n}\n", "import type {CodeKeywordDefinition} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"id\",\n  code() {\n    throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID')\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {callValidateCode} from \"../code\"\nimport {_, nil, stringify, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, resolveRef} from \"../../compile\"\nimport {mergeEvaluated} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$ref\",\n  schemaType: \"string\",\n  code(cxt: KeywordCxt): void {\n    const {gen, schema: $ref, it} = cxt\n    const {baseId, schemaEnv: env, validateName, opts, self} = it\n    const {root} = env\n    if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId) return callRootRef()\n    const schOrEnv = resolveRef.call(self, root, baseId, $ref)\n    if (schOrEnv === undefined) throw new MissingRefError(it.opts.uriResolver, baseId, $ref)\n    if (schOrEnv instanceof SchemaEnv) return callValidate(schOrEnv)\n    return inlineRefSchema(schOrEnv)\n\n    function callRootRef(): void {\n      if (env === root) return callRef(cxt, validateName, env, env.$async)\n      const rootName = gen.scopeValue(\"root\", {ref: root})\n      return callRef(cxt, _`${rootName}.validate`, root, root.$async)\n    }\n\n    function callValidate(sch: SchemaEnv): void {\n      const v = getValidate(cxt, sch)\n      callRef(cxt, v, sch, sch.$async)\n    }\n\n    function inlineRefSchema(sch: AnySchema): void {\n      const schName = gen.scopeValue(\n        \"schema\",\n        opts.code.source === true ? {ref: sch, code: stringify(sch)} : {ref: sch}\n      )\n      const valid = gen.name(\"valid\")\n      const schCxt = cxt.subschema(\n        {\n          schema: sch,\n          dataTypes: [],\n          schemaPath: nil,\n          topSchemaRef: schName,\n          errSchemaPath: $ref,\n        },\n        valid\n      )\n      cxt.mergeEvaluated(schCxt)\n      cxt.ok(valid)\n    }\n  },\n}\n\nexport function getValidate(cxt: KeywordCxt, sch: SchemaEnv): Code {\n  const {gen} = cxt\n  return sch.validate\n    ? gen.scopeValue(\"validate\", {ref: sch.validate})\n    : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.validate`\n}\n\nexport function callRef(cxt: KeywordCxt, v: Code, sch?: SchemaEnv, $async?: boolean): void {\n  const {gen, it} = cxt\n  const {allErrors, schemaEnv: env, opts} = it\n  const passCxt = opts.passContext ? N.this : nil\n  if ($async) callAsyncRef()\n  else callSyncRef()\n\n  function callAsyncRef(): void {\n    if (!env.$async) throw new Error(\"async schema referenced by sync schema\")\n    const valid = gen.let(\"valid\")\n    gen.try(\n      () => {\n        gen.code(_`await ${callValidateCode(cxt, v, passCxt)}`)\n        addEvaluatedFrom(v) // TODO will not work with async, it has to be returned with the result\n        if (!allErrors) gen.assign(valid, true)\n      },\n      (e) => {\n        gen.if(_`!(${e} instanceof ${it.ValidationError as Name})`, () => gen.throw(e))\n        addErrorsFrom(e)\n        if (!allErrors) gen.assign(valid, false)\n      }\n    )\n    cxt.ok(valid)\n  }\n\n  function callSyncRef(): void {\n    cxt.result(\n      callValidateCode(cxt, v, passCxt),\n      () => addEvaluatedFrom(v),\n      () => addErrorsFrom(v)\n    )\n  }\n\n  function addErrorsFrom(source: Code): void {\n    const errs = _`${source}.errors`\n    gen.assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`) // TODO tagged\n    gen.assign(N.errors, _`${N.vErrors}.length`)\n  }\n\n  function addEvaluatedFrom(source: Code): void {\n    if (!it.opts.unevaluated) return\n    const schEvaluated = sch?.validate?.evaluated\n    // TODO refactor\n    if (it.props !== true) {\n      if (schEvaluated && !schEvaluated.dynamicProps) {\n        if (schEvaluated.props !== undefined) {\n          it.props = mergeEvaluated.props(gen, schEvaluated.props, it.props)\n        }\n      } else {\n        const props = gen.var(\"props\", _`${source}.evaluated.props`)\n        it.props = mergeEvaluated.props(gen, props, it.props, Name)\n      }\n    }\n    if (it.items !== true) {\n      if (schEvaluated && !schEvaluated.dynamicItems) {\n        if (schEvaluated.items !== undefined) {\n          it.items = mergeEvaluated.items(gen, schEvaluated.items, it.items)\n        }\n      } else {\n        const items = gen.var(\"items\", _`${source}.evaluated.items`)\n        it.items = mergeEvaluated.items(gen, items, it.items, Name)\n      }\n    }\n  }\n}\n\nexport default def\n", "import type {Vocabulary} from \"../../types\"\nimport idKeyword from \"./id\"\nimport refKeyword from \"./ref\"\n\nconst core: Vocabulary = [\n  \"$schema\",\n  \"$id\",\n  \"$defs\",\n  \"$vocabulary\",\n  {keyword: \"$comment\"},\n  \"definitions\",\n  idKeyword,\n  refKeyword,\n]\n\nexport default core\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators, Code} from \"../../compile/codegen\"\n\nconst ops = operators\n\ntype Kwd = \"maximum\" | \"minimum\" | \"exclusiveMaximum\" | \"exclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n  maximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n  minimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n  exclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n  exclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitNumberError = ErrorObject<\n  Kwd,\n  {limit: number; comparison: Comparison},\n  number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({keyword, schemaCode}) => str`must be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n  params: ({keyword, schemaCode}) =>\n    _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: Object.keys(KWDs),\n  type: \"number\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    cxt.fail$data(_`${data} ${KWDs[keyword as Kwd].fail} ${schemaCode} || isNaN(${data})`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type MultipleOfError = ErrorObject<\n  \"multipleOf\",\n  {multipleOf: number},\n  number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must be multiple of ${schemaCode}`,\n  params: ({schemaCode}) => _`{multipleOf: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"multipleOf\",\n  type: \"number\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, schemaCode, it} = cxt\n    // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n    const prec = it.opts.multipleOfPrecision\n    const res = gen.let(\"res\")\n    const invalid = prec\n      ? _`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n      : _`${res} !== parseInt(${res})`\n    cxt.fail$data(_`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`)\n  },\n}\n\nexport default def\n", "// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nexport default function ucs2length(str: string): number {\n  const len = str.length\n  let length = 0\n  let pos = 0\n  let value: number\n  while (pos < len) {\n    length++\n    value = str.charCodeAt(pos++)\n    if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n      // high surrogate, and there is a next character\n      value = str.charCodeAt(pos)\n      if ((value & 0xfc00) === 0xdc00) pos++ // low surrogate\n    }\n  }\n  return length\n}\n\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default'\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport ucs2length from \"../../runtime/ucs2length\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} characters`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxLength\", \"minLength\"],\n  type: \"string\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode, it} = cxt\n    const op = keyword === \"maxLength\" ? operators.GT : operators.LT\n    const len =\n      it.opts.unicode === false ? _`${data}.length` : _`${useFunc(cxt.gen, ucs2length)}(${data})`\n    cxt.fail$data(_`${len} ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {usePattern} from \"../code\"\nimport {useFunc} from \"../../compile/util\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type PatternError = ErrorObject<\"pattern\", {pattern: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must match pattern \"${schemaCode}\"`,\n  params: ({schemaCode}) => _`{pattern: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"pattern\",\n  type: \"string\",\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    const u = it.opts.unicodeRegExp ? \"u\" : \"\"\n    if ($data) {\n      const {regExp} = it.opts.code\n      const regExpCode = regExp.code === \"new RegExp\" ? _`new RegExp` : useFunc(gen, regExp)\n      const valid = gen.let(\"valid\")\n      gen.try(\n        () => gen.assign(valid, _`${regExpCode}(${schemaCode}, ${u}).test(${data})`),\n        () => gen.assign(valid, false)\n      )\n      cxt.fail$data(_`!${valid}`)\n    } else {\n      const regExp = usePattern(cxt, schema)\n      cxt.fail$data(_`!${regExp}.test(${data})`)\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} properties`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxProperties\", \"minProperties\"],\n  type: \"object\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    const op = keyword === \"maxProperties\" ? operators.GT : operators.LT\n    cxt.fail$data(_`Object.keys(${data}).length ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {\n  checkReportMissingProp,\n  checkMissingProp,\n  reportMissingProp,\n  propertyInData,\n  noPropertyInData,\n} from \"../code\"\nimport {_, str, nil, not, Name, Code} from \"../../compile/codegen\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nexport type RequiredError = ErrorObject<\n  \"required\",\n  {missingProperty: string},\n  string[] | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {missingProperty}}) => str`must have required property '${missingProperty}'`,\n  params: ({params: {missingProperty}}) => _`{missingProperty: ${missingProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"required\",\n  type: \"object\",\n  schemaType: \"array\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, schemaCode, data, $data, it} = cxt\n    const {opts} = it\n    if (!$data && schema.length === 0) return\n    const useLoop = schema.length >= opts.loopRequired\n    if (it.allErrors) allErrorsMode()\n    else exitOnErrorMode()\n\n    if (opts.strictRequired) {\n      const props = cxt.parentSchema.properties\n      const {definedProperties} = cxt.it\n      for (const requiredKey of schema) {\n        if (props?.[requiredKey] === undefined && !definedProperties.has(requiredKey)) {\n          const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n          const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`\n          checkStrictMode(it, msg, it.opts.strictRequired)\n        }\n      }\n    }\n\n    function allErrorsMode(): void {\n      if (useLoop || $data) {\n        cxt.block$data(nil, loopAllRequired)\n      } else {\n        for (const prop of schema) {\n          checkReportMissingProp(cxt, prop)\n        }\n      }\n    }\n\n    function exitOnErrorMode(): void {\n      const missing = gen.let(\"missing\")\n      if (useLoop || $data) {\n        const valid = gen.let(\"valid\", true)\n        cxt.block$data(valid, () => loopUntilMissing(missing, valid))\n        cxt.ok(valid)\n      } else {\n        gen.if(checkMissingProp(cxt, schema, missing))\n        reportMissingProp(cxt, missing)\n        gen.else()\n      }\n    }\n\n    function loopAllRequired(): void {\n      gen.forOf(\"prop\", schemaCode as Code, (prop) => {\n        cxt.setParams({missingProperty: prop})\n        gen.if(noPropertyInData(gen, data, prop, opts.ownProperties), () => cxt.error())\n      })\n    }\n\n    function loopUntilMissing(missing: Name, valid: Name): void {\n      cxt.setParams({missingProperty: missing})\n      gen.forOf(\n        missing,\n        schemaCode as Code,\n        () => {\n          gen.assign(valid, propertyInData(gen, data, missing, opts.ownProperties))\n          gen.if(not(valid), () => {\n            cxt.error()\n            gen.break()\n          })\n        },\n        nil\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} items`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxItems\", \"minItems\"],\n  type: \"array\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    const op = keyword === \"maxItems\" ? operators.GT : operators.LT\n    cxt.fail$data(_`${data}.length ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "// https://github.com/ajv-validator/ajv/issues/889\nimport * as equal from \"fast-deep-equal\"\n\ntype Equal = typeof equal & {code: string}\n;(equal as Equal).code = 'require(\"ajv/dist/runtime/equal\").default'\n\nexport default equal as Equal\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkDataTypes, getSchemaTypes, DataType} from \"../../compile/validate/dataType\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type UniqueItemsError = ErrorObject<\n  \"uniqueItems\",\n  {i: number; j: number},\n  boolean | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {i, j}}) =>\n    str`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n  params: ({params: {i, j}}) => _`{i: ${i}, j: ${j}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"uniqueItems\",\n  type: \"array\",\n  schemaType: \"boolean\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, parentSchema, schemaCode, it} = cxt\n    if (!$data && !schema) return\n    const valid = gen.let(\"valid\")\n    const itemTypes = parentSchema.items ? getSchemaTypes(parentSchema.items) : []\n    cxt.block$data(valid, validateUniqueItems, _`${schemaCode} === false`)\n    cxt.ok(valid)\n\n    function validateUniqueItems(): void {\n      const i = gen.let(\"i\", _`${data}.length`)\n      const j = gen.let(\"j\")\n      cxt.setParams({i, j})\n      gen.assign(valid, true)\n      gen.if(_`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j))\n    }\n\n    function canOptimize(): boolean {\n      return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\")\n    }\n\n    function loopN(i: Name, j: Name): void {\n      const item = gen.name(\"item\")\n      const wrongType = checkDataTypes(itemTypes, item, it.opts.strictNumbers, DataType.Wrong)\n      const indices = gen.const(\"indices\", _`{}`)\n      gen.for(_`;${i}--;`, () => {\n        gen.let(item, _`${data}[${i}]`)\n        gen.if(wrongType, _`continue`)\n        if (itemTypes.length > 1) gen.if(_`typeof ${item} == \"string\"`, _`${item} += \"_\"`)\n        gen\n          .if(_`typeof ${indices}[${item}] == \"number\"`, () => {\n            gen.assign(j, _`${indices}[${item}]`)\n            cxt.error()\n            gen.assign(valid, false).break()\n          })\n          .code(_`${indices}[${item}] = ${i}`)\n      })\n    }\n\n    function loopN2(i: Name, j: Name): void {\n      const eql = useFunc(gen, equal)\n      const outer = gen.name(\"outer\")\n      gen.label(outer).for(_`;${i}--;`, () =>\n        gen.for(_`${j} = ${i}; ${j}--;`, () =>\n          gen.if(_`${eql}(${data}[${i}], ${data}[${j}])`, () => {\n            cxt.error()\n            gen.assign(valid, false).break(outer)\n          })\n        )\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type ConstError = ErrorObject<\"const\", {allowedValue: any}>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must be equal to constant\",\n  params: ({schemaCode}) => _`{allowedValue: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"const\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schemaCode, schema} = cxt\n    if ($data || (schema && typeof schema == \"object\")) {\n      cxt.fail$data(_`!${useFunc(gen, equal)}(${data}, ${schemaCode})`)\n    } else {\n      cxt.fail(_`${schema} !== ${data}`)\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, or, Name, Code} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type EnumError = ErrorObject<\"enum\", {allowedValues: any[]}, any[] | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must be equal to one of the allowed values\",\n  params: ({schemaCode}) => _`{allowedValues: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"enum\",\n  schemaType: \"array\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    if (!$data && schema.length === 0) throw new Error(\"enum must have non-empty array\")\n    const useLoop = schema.length >= it.opts.loopEnum\n    let eql: Name | undefined\n    const getEql = (): Name => (eql ??= useFunc(gen, equal))\n\n    let valid: Code\n    if (useLoop || $data) {\n      valid = gen.let(\"valid\")\n      cxt.block$data(valid, loopEnum)\n    } else {\n      /* istanbul ignore if */\n      if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n      const vSchema = gen.const(\"vSchema\", schemaCode)\n      valid = or(...schema.map((_x: unknown, i: number) => equalCode(vSchema, i)))\n    }\n    cxt.pass(valid)\n\n    function loopEnum(): void {\n      gen.assign(valid, false)\n      gen.forOf(\"v\", schemaCode as Code, (v) =>\n        gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())\n      )\n    }\n\n    function equalCode(vSchema: Name, i: number): Code {\n      const sch = schema[i]\n      return typeof sch === \"object\" && sch !== null\n        ? _`${getEql()}(${data}, ${vSchema}[${i}])`\n        : _`${data} === ${sch}`\n    }\n  },\n}\n\nexport default def\n", "import type {ErrorObject, Vocabulary} from \"../../types\"\nimport limitNumber, {LimitNumberError} from \"./limitNumber\"\nimport multipleOf, {MultipleOfError} from \"./multipleOf\"\nimport limitLength from \"./limitLength\"\nimport pattern, {PatternError} from \"./pattern\"\nimport limitProperties from \"./limitProperties\"\nimport required, {RequiredError} from \"./required\"\nimport limitItems from \"./limitItems\"\nimport uniqueItems, {UniqueItemsError} from \"./uniqueItems\"\nimport constKeyword, {ConstError} from \"./const\"\nimport enumKeyword, {EnumError} from \"./enum\"\n\nconst validation: Vocabulary = [\n  // number\n  limitNumber,\n  multipleOf,\n  // string\n  limitLength,\n  pattern,\n  // object\n  limitProperties,\n  required,\n  // array\n  limitItems,\n  uniqueItems,\n  // any\n  {keyword: \"type\", schemaType: [\"string\", \"array\"]},\n  {keyword: \"nullable\", schemaType: \"boolean\"},\n  constKeyword,\n  enumKeyword,\n]\n\nexport default validation\n\ntype LimitError = ErrorObject<\n  \"maxItems\" | \"minItems\" | \"minProperties\" | \"maxProperties\" | \"minLength\" | \"maxLength\",\n  {limit: number},\n  number | {$data: string}\n>\n\nexport type ValidationKeywordError =\n  | LimitError\n  | LimitNumberError\n  | MultipleOfError\n  | PatternError\n  | RequiredError\n  | UniqueItemsError\n  | ConstError\n  | EnumError\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type AdditionalItemsError = ErrorObject<\"additionalItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"additionalItems\" as const,\n  type: \"array\",\n  schemaType: [\"boolean\", \"object\"],\n  before: \"uniqueItems\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {parentSchema, it} = cxt\n    const {items} = parentSchema\n    if (!Array.isArray(items)) {\n      checkStrictMode(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas')\n      return\n    }\n    validateAdditionalItems(cxt, items)\n  },\n}\n\nexport function validateAdditionalItems(cxt: KeywordCxt, items: AnySchema[]): void {\n  const {gen, schema, data, keyword, it} = cxt\n  it.items = true\n  const len = gen.const(\"len\", _`${data}.length`)\n  if (schema === false) {\n    cxt.setParams({len: items.length})\n    cxt.pass(_`${len} <= ${items.length}`)\n  } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n    const valid = gen.var(\"valid\", _`${len} <= ${items.length}`) // TODO var\n    gen.if(not(valid), () => validateItems(valid))\n    cxt.ok(valid)\n  }\n\n  function validateItems(valid: Name): void {\n    gen.forRange(\"i\", items.length, len, (i) => {\n      cxt.subschema({keyword, dataProp: i, dataPropType: Type.Num}, valid)\n      if (!it.allErrors) gen.if(not(valid), () => gen.break())\n    })\n  }\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema, AnySchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {alwaysValidSchema, mergeEvaluated, checkStrictMode} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"items\",\n  type: \"array\",\n  schemaType: [\"object\", \"array\", \"boolean\"],\n  before: \"uniqueItems\",\n  code(cxt: KeywordCxt) {\n    const {schema, it} = cxt\n    if (Array.isArray(schema)) return validateTuple(cxt, \"additionalItems\", schema)\n    it.items = true\n    if (alwaysValidSchema(it, schema)) return\n    cxt.ok(validateArray(cxt))\n  },\n}\n\nexport function validateTuple(\n  cxt: KeywordCxt,\n  extraItems: string,\n  schArr: AnySchema[] = cxt.schema\n): void {\n  const {gen, parentSchema, data, keyword, it} = cxt\n  checkStrictTuple(parentSchema)\n  if (it.opts.unevaluated && schArr.length && it.items !== true) {\n    it.items = mergeEvaluated.items(gen, schArr.length, it.items)\n  }\n  const valid = gen.name(\"valid\")\n  const len = gen.const(\"len\", _`${data}.length`)\n  schArr.forEach((sch: AnySchema, i: number) => {\n    if (alwaysValidSchema(it, sch)) return\n    gen.if(_`${len} > ${i}`, () =>\n      cxt.subschema(\n        {\n          keyword,\n          schemaProp: i,\n          dataProp: i,\n        },\n        valid\n      )\n    )\n    cxt.ok(valid)\n  })\n\n  function checkStrictTuple(sch: AnySchemaObject): void {\n    const {opts, errSchemaPath} = it\n    const l = schArr.length\n    const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false)\n    if (opts.strictTuples && !fullTuple) {\n      const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`\n      checkStrictMode(it, msg, opts.strictTuples)\n    }\n  }\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateTuple} from \"./items\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"prefixItems\",\n  type: \"array\",\n  schemaType: [\"array\"],\n  before: \"uniqueItems\",\n  code: (cxt) => validateTuple(cxt, \"items\"),\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\nimport {validateAdditionalItems} from \"./additionalItems\"\n\nexport type ItemsError = ErrorObject<\"items\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"items\",\n  type: \"array\",\n  schemaType: [\"object\", \"boolean\"],\n  before: \"uniqueItems\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {schema, parentSchema, it} = cxt\n    const {prefixItems} = parentSchema\n    it.items = true\n    if (alwaysValidSchema(it, schema)) return\n    if (prefixItems) validateAdditionalItems(cxt, prefixItems)\n    else cxt.ok(validateArray(cxt))\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type ContainsError = ErrorObject<\n  \"contains\",\n  {minContains: number; maxContains?: number},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {min, max}}) =>\n    max === undefined\n      ? str`must contain at least ${min} valid item(s)`\n      : str`must contain at least ${min} and no more than ${max} valid item(s)`,\n  params: ({params: {min, max}}) =>\n    max === undefined ? _`{minContains: ${min}}` : _`{minContains: ${min}, maxContains: ${max}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"contains\",\n  type: \"array\",\n  schemaType: [\"object\", \"boolean\"],\n  before: \"uniqueItems\",\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, data, it} = cxt\n    let min: number\n    let max: number | undefined\n    const {minContains, maxContains} = parentSchema\n    if (it.opts.next) {\n      min = minContains === undefined ? 1 : minContains\n      max = maxContains\n    } else {\n      min = 1\n    }\n    const len = gen.const(\"len\", _`${data}.length`)\n    cxt.setParams({min, max})\n    if (max === undefined && min === 0) {\n      checkStrictMode(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`)\n      return\n    }\n    if (max !== undefined && min > max) {\n      checkStrictMode(it, `\"minContains\" > \"maxContains\" is always invalid`)\n      cxt.fail()\n      return\n    }\n    if (alwaysValidSchema(it, schema)) {\n      let cond = _`${len} >= ${min}`\n      if (max !== undefined) cond = _`${cond} && ${len} <= ${max}`\n      cxt.pass(cond)\n      return\n    }\n\n    it.items = true\n    const valid = gen.name(\"valid\")\n    if (max === undefined && min === 1) {\n      validateItems(valid, () => gen.if(valid, () => gen.break()))\n    } else if (min === 0) {\n      gen.let(valid, true)\n      if (max !== undefined) gen.if(_`${data}.length > 0`, validateItemsWithCount)\n    } else {\n      gen.let(valid, false)\n      validateItemsWithCount()\n    }\n    cxt.result(valid, () => cxt.reset())\n\n    function validateItemsWithCount(): void {\n      const schValid = gen.name(\"_valid\")\n      const count = gen.let(\"count\", 0)\n      validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)))\n    }\n\n    function validateItems(_valid: Name, block: () => void): void {\n      gen.forRange(\"i\", 0, len, (i) => {\n        cxt.subschema(\n          {\n            keyword: \"contains\",\n            dataProp: i,\n            dataPropType: Type.Num,\n            compositeRule: true,\n          },\n          _valid\n        )\n        block()\n      })\n    }\n\n    function checkLimits(count: Name): void {\n      gen.code(_`${count}++`)\n      if (max === undefined) {\n        gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true).break())\n      } else {\n        gen.if(_`${count} > ${max}`, () => gen.assign(valid, false).break())\n        if (min === 1) gen.assign(valid, true)\n        else gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true))\n      }\n    }\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  SchemaMap,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {checkReportMissingProp, checkMissingProp, reportMissingProp, propertyInData} from \"../code\"\n\nexport type PropertyDependencies = {[K in string]?: string[]}\n\nexport interface DependenciesErrorParams {\n  property: string\n  missingProperty: string\n  depsCount: number\n  deps: string // TODO change to string[]\n}\n\ntype SchemaDependencies = SchemaMap\n\nexport type DependenciesError = ErrorObject<\n  \"dependencies\",\n  DependenciesErrorParams,\n  {[K in string]?: string[] | AnySchema}\n>\n\nexport const error: KeywordErrorDefinition = {\n  message: ({params: {property, depsCount, deps}}) => {\n    const property_ies = depsCount === 1 ? \"property\" : \"properties\"\n    return str`must have ${property_ies} ${deps} when property ${property} is present`\n  },\n  params: ({params: {property, depsCount, deps, missingProperty}}) =>\n    _`{property: ${property},\n    missingProperty: ${missingProperty},\n    depsCount: ${depsCount},\n    deps: ${deps}}`, // TODO change to reference\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"dependencies\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code(cxt: KeywordCxt) {\n    const [propDeps, schDeps] = splitDependencies(cxt)\n    validatePropertyDeps(cxt, propDeps)\n    validateSchemaDeps(cxt, schDeps)\n  },\n}\n\nfunction splitDependencies({schema}: KeywordCxt): [PropertyDependencies, SchemaDependencies] {\n  const propertyDeps: PropertyDependencies = {}\n  const schemaDeps: SchemaDependencies = {}\n  for (const key in schema) {\n    if (key === \"__proto__\") continue\n    const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps\n    deps[key] = schema[key]\n  }\n  return [propertyDeps, schemaDeps]\n}\n\nexport function validatePropertyDeps(\n  cxt: KeywordCxt,\n  propertyDeps: {[K in string]?: string[]} = cxt.schema\n): void {\n  const {gen, data, it} = cxt\n  if (Object.keys(propertyDeps).length === 0) return\n  const missing = gen.let(\"missing\")\n  for (const prop in propertyDeps) {\n    const deps = propertyDeps[prop] as string[]\n    if (deps.length === 0) continue\n    const hasProperty = propertyInData(gen, data, prop, it.opts.ownProperties)\n    cxt.setParams({\n      property: prop,\n      depsCount: deps.length,\n      deps: deps.join(\", \"),\n    })\n    if (it.allErrors) {\n      gen.if(hasProperty, () => {\n        for (const depProp of deps) {\n          checkReportMissingProp(cxt, depProp)\n        }\n      })\n    } else {\n      gen.if(_`${hasProperty} && (${checkMissingProp(cxt, deps, missing)})`)\n      reportMissingProp(cxt, missing)\n      gen.else()\n    }\n  }\n}\n\nexport function validateSchemaDeps(cxt: KeywordCxt, schemaDeps: SchemaMap = cxt.schema): void {\n  const {gen, data, keyword, it} = cxt\n  const valid = gen.name(\"valid\")\n  for (const prop in schemaDeps) {\n    if (alwaysValidSchema(it, schemaDeps[prop] as AnySchema)) continue\n    gen.if(\n      propertyInData(gen, data, prop, it.opts.ownProperties),\n      () => {\n        const schCxt = cxt.subschema({keyword, schemaProp: prop}, valid)\n        cxt.mergeValidEvaluated(schCxt, valid)\n      },\n      () => gen.var(valid, true) // TODO var\n    )\n    cxt.ok(valid)\n  }\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type PropertyNamesError = ErrorObject<\"propertyNames\", {propertyName: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: \"property name must be valid\",\n  params: ({params}) => _`{propertyName: ${params.propertyName}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"propertyNames\",\n  type: \"object\",\n  schemaType: [\"object\", \"boolean\"],\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, it} = cxt\n    if (alwaysValidSchema(it, schema)) return\n    const valid = gen.name(\"valid\")\n\n    gen.forIn(\"key\", data, (key) => {\n      cxt.setParams({propertyName: key})\n      cxt.subschema(\n        {\n          keyword: \"propertyNames\",\n          data: key,\n          dataTypes: [\"string\"],\n          propertyName: key,\n          compositeRule: true,\n        },\n        valid\n      )\n      gen.if(not(valid), () => {\n        cxt.error(true)\n        if (!it.allErrors) gen.break()\n      })\n    })\n\n    cxt.ok(valid)\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  AddedKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport {allSchemaProperties, usePattern, isOwnProperty} from \"../code\"\nimport {_, nil, or, not, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport type {SubschemaArgs} from \"../../compile/validate/subschema\"\nimport {alwaysValidSchema, schemaRefOrVal, Type} from \"../../compile/util\"\n\nexport type AdditionalPropertiesError = ErrorObject<\n  \"additionalProperties\",\n  {additionalProperty: string},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must NOT have additional properties\",\n  params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n}\n\nconst def: CodeKeywordDefinition & AddedKeywordDefinition = {\n  keyword: \"additionalProperties\",\n  type: [\"object\"],\n  schemaType: [\"boolean\", \"object\"],\n  allowUndefined: true,\n  trackErrors: true,\n  error,\n  code(cxt) {\n    const {gen, schema, parentSchema, data, errsCount, it} = cxt\n    /* istanbul ignore if */\n    if (!errsCount) throw new Error(\"ajv implementation error\")\n    const {allErrors, opts} = it\n    it.props = true\n    if (opts.removeAdditional !== \"all\" && alwaysValidSchema(it, schema)) return\n    const props = allSchemaProperties(parentSchema.properties)\n    const patProps = allSchemaProperties(parentSchema.patternProperties)\n    checkAdditionalProperties()\n    cxt.ok(_`${errsCount} === ${N.errors}`)\n\n    function checkAdditionalProperties(): void {\n      gen.forIn(\"key\", data, (key: Name) => {\n        if (!props.length && !patProps.length) additionalPropertyCode(key)\n        else gen.if(isAdditional(key), () => additionalPropertyCode(key))\n      })\n    }\n\n    function isAdditional(key: Name): Code {\n      let definedProp: Code\n      if (props.length > 8) {\n        // TODO maybe an option instead of hard-coded 8?\n        const propsSchema = schemaRefOrVal(it, parentSchema.properties, \"properties\")\n        definedProp = isOwnProperty(gen, propsSchema as Code, key)\n      } else if (props.length) {\n        definedProp = or(...props.map((p) => _`${key} === ${p}`))\n      } else {\n        definedProp = nil\n      }\n      if (patProps.length) {\n        definedProp = or(definedProp, ...patProps.map((p) => _`${usePattern(cxt, p)}.test(${key})`))\n      }\n      return not(definedProp)\n    }\n\n    function deleteAdditional(key: Name): void {\n      gen.code(_`delete ${data}[${key}]`)\n    }\n\n    function additionalPropertyCode(key: Name): void {\n      if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n        deleteAdditional(key)\n        return\n      }\n\n      if (schema === false) {\n        cxt.setParams({additionalProperty: key})\n        cxt.error()\n        if (!allErrors) gen.break()\n        return\n      }\n\n      if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n        const valid = gen.name(\"valid\")\n        if (opts.removeAdditional === \"failing\") {\n          applyAdditionalSchema(key, valid, false)\n          gen.if(not(valid), () => {\n            cxt.reset()\n            deleteAdditional(key)\n          })\n        } else {\n          applyAdditionalSchema(key, valid)\n          if (!allErrors) gen.if(not(valid), () => gen.break())\n        }\n      }\n    }\n\n    function applyAdditionalSchema(key: Name, valid: Name, errors?: false): void {\n      const subschema: SubschemaArgs = {\n        keyword: \"additionalProperties\",\n        dataProp: key,\n        dataPropType: Type.Str,\n      }\n      if (errors === false) {\n        Object.assign(subschema, {\n          compositeRule: true,\n          createErrors: false,\n          allErrors: false,\n        })\n      }\n      cxt.subschema(subschema, valid)\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport {KeywordCxt} from \"../../compile/validate\"\nimport {propertyInData, allSchemaProperties} from \"../code\"\nimport {alwaysValidSchema, toHash, mergeEvaluated} from \"../../compile/util\"\nimport apDef from \"./additionalProperties\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"properties\",\n  type: \"object\",\n  schemaType: \"object\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, data, it} = cxt\n    if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n      apDef.code(new KeywordCxt(it, apDef, \"additionalProperties\"))\n    }\n    const allProps = allSchemaProperties(schema)\n    for (const prop of allProps) {\n      it.definedProperties.add(prop)\n    }\n    if (it.opts.unevaluated && allProps.length && it.props !== true) {\n      it.props = mergeEvaluated.props(gen, toHash(allProps), it.props)\n    }\n    const properties = allProps.filter((p) => !alwaysValidSchema(it, schema[p]))\n    if (properties.length === 0) return\n    const valid = gen.name(\"valid\")\n\n    for (const prop of properties) {\n      if (hasDefault(prop)) {\n        applyPropertySchema(prop)\n      } else {\n        gen.if(propertyInData(gen, data, prop, it.opts.ownProperties))\n        applyPropertySchema(prop)\n        if (!it.allErrors) gen.else().var(valid, true)\n        gen.endIf()\n      }\n      cxt.it.definedProperties.add(prop)\n      cxt.ok(valid)\n    }\n\n    function hasDefault(prop: string): boolean | undefined {\n      return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined\n    }\n\n    function applyPropertySchema(prop: string): void {\n      cxt.subschema(\n        {\n          keyword: \"properties\",\n          schemaProp: prop,\n          dataProp: prop,\n        },\n        valid\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {allSchemaProperties, usePattern} from \"../code\"\nimport {_, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\nimport {evaluatedPropsToName, Type} from \"../../compile/util\"\nimport {AnySchema} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"patternProperties\",\n  type: \"object\",\n  schemaType: \"object\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, parentSchema, it} = cxt\n    const {opts} = it\n    const patterns = allSchemaProperties(schema)\n    const alwaysValidPatterns = patterns.filter((p) =>\n      alwaysValidSchema(it, schema[p] as AnySchema)\n    )\n\n    if (\n      patterns.length === 0 ||\n      (alwaysValidPatterns.length === patterns.length &&\n        (!it.opts.unevaluated || it.props === true))\n    ) {\n      return\n    }\n\n    const checkProperties =\n      opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties\n    const valid = gen.name(\"valid\")\n    if (it.props !== true && !(it.props instanceof Name)) {\n      it.props = evaluatedPropsToName(gen, it.props)\n    }\n    const {props} = it\n    validatePatternProperties()\n\n    function validatePatternProperties(): void {\n      for (const pat of patterns) {\n        if (checkProperties) checkMatchingProperties(pat)\n        if (it.allErrors) {\n          validateProperties(pat)\n        } else {\n          gen.var(valid, true) // TODO var\n          validateProperties(pat)\n          gen.if(valid)\n        }\n      }\n    }\n\n    function checkMatchingProperties(pat: string): void {\n      for (const prop in checkProperties) {\n        if (new RegExp(pat).test(prop)) {\n          checkStrictMode(\n            it,\n            `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`\n          )\n        }\n      }\n    }\n\n    function validateProperties(pat: string): void {\n      gen.forIn(\"key\", data, (key) => {\n        gen.if(_`${usePattern(cxt, pat)}.test(${key})`, () => {\n          const alwaysValid = alwaysValidPatterns.includes(pat)\n          if (!alwaysValid) {\n            cxt.subschema(\n              {\n                keyword: \"patternProperties\",\n                schemaProp: pat,\n                dataProp: key,\n                dataPropType: Type.Str,\n              },\n              valid\n            )\n          }\n\n          if (it.opts.unevaluated && props !== true) {\n            gen.assign(_`${props}[${key}]`, true)\n          } else if (!alwaysValid && !it.allErrors) {\n            // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n            // or if all properties were evaluated (props === true)\n            gen.if(not(valid), () => gen.break())\n          }\n        })\n      })\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type NotKeywordError = ErrorNoParams<\"not\", AnySchema>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"not\",\n  schemaType: [\"object\", \"boolean\"],\n  trackErrors: true,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, it} = cxt\n    if (alwaysValidSchema(it, schema)) {\n      cxt.fail()\n      return\n    }\n\n    const valid = gen.name(\"valid\")\n    cxt.subschema(\n      {\n        keyword: \"not\",\n        compositeRule: true,\n        createErrors: false,\n        allErrors: false,\n      },\n      valid\n    )\n\n    cxt.failResult(\n      valid,\n      () => cxt.reset(),\n      () => cxt.error()\n    )\n  },\n  error: {message: \"must NOT be valid\"},\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport {validateUnion} from \"../code\"\n\nexport type AnyOfError = ErrorNoParams<\"anyOf\", AnySchema[]>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"anyOf\",\n  schemaType: \"array\",\n  trackErrors: true,\n  code: validateUnion,\n  error: {message: \"must match a schema in anyOf\"},\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {SchemaCxt} from \"../../compile\"\n\nexport type OneOfError = ErrorObject<\n  \"oneOf\",\n  {passingSchemas: [number, number] | null},\n  AnySchema[]\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must match exactly one schema in oneOf\",\n  params: ({params}) => _`{passingSchemas: ${params.passing}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"oneOf\",\n  schemaType: \"array\",\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, it} = cxt\n    /* istanbul ignore if */\n    if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n    if (it.opts.discriminator && parentSchema.discriminator) return\n    const schArr: AnySchema[] = schema\n    const valid = gen.let(\"valid\", false)\n    const passing = gen.let(\"passing\", null)\n    const schValid = gen.name(\"_valid\")\n    cxt.setParams({passing})\n    // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n\n    gen.block(validateOneOf)\n\n    cxt.result(\n      valid,\n      () => cxt.reset(),\n      () => cxt.error(true)\n    )\n\n    function validateOneOf(): void {\n      schArr.forEach((sch: AnySchema, i: number) => {\n        let schCxt: SchemaCxt | undefined\n        if (alwaysValidSchema(it, sch)) {\n          gen.var(schValid, true)\n        } else {\n          schCxt = cxt.subschema(\n            {\n              keyword: \"oneOf\",\n              schemaProp: i,\n              compositeRule: true,\n            },\n            schValid\n          )\n        }\n\n        if (i > 0) {\n          gen\n            .if(_`${schValid} && ${valid}`)\n            .assign(valid, false)\n            .assign(passing, _`[${passing}, ${i}]`)\n            .else()\n        }\n\n        gen.if(schValid, () => {\n          gen.assign(valid, true)\n          gen.assign(passing, i)\n          if (schCxt) cxt.mergeEvaluated(schCxt, Name)\n        })\n      })\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"allOf\",\n  schemaType: \"array\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, it} = cxt\n    /* istanbul ignore if */\n    if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n    const valid = gen.name(\"valid\")\n    schema.forEach((sch: AnySchema, i: number) => {\n      if (alwaysValidSchema(it, sch)) return\n      const schCxt = cxt.subschema({keyword: \"allOf\", schemaProp: i}, valid)\n      cxt.ok(valid)\n      cxt.mergeEvaluated(schCxt)\n    })\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"../../compile\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\n\nexport type IfKeywordError = ErrorObject<\"if\", {failingKeyword: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params}) => str`must match \"${params.ifClause}\" schema`,\n  params: ({params}) => _`{failingKeyword: ${params.ifClause}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"if\",\n  schemaType: [\"object\", \"boolean\"],\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, parentSchema, it} = cxt\n    if (parentSchema.then === undefined && parentSchema.else === undefined) {\n      checkStrictMode(it, '\"if\" without \"then\" and \"else\" is ignored')\n    }\n    const hasThen = hasSchema(it, \"then\")\n    const hasElse = hasSchema(it, \"else\")\n    if (!hasThen && !hasElse) return\n\n    const valid = gen.let(\"valid\", true)\n    const schValid = gen.name(\"_valid\")\n    validateIf()\n    cxt.reset()\n\n    if (hasThen && hasElse) {\n      const ifClause = gen.let(\"ifClause\")\n      cxt.setParams({ifClause})\n      gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause))\n    } else if (hasThen) {\n      gen.if(schValid, validateClause(\"then\"))\n    } else {\n      gen.if(not(schValid), validateClause(\"else\"))\n    }\n\n    cxt.pass(valid, () => cxt.error(true))\n\n    function validateIf(): void {\n      const schCxt = cxt.subschema(\n        {\n          keyword: \"if\",\n          compositeRule: true,\n          createErrors: false,\n          allErrors: false,\n        },\n        schValid\n      )\n      cxt.mergeEvaluated(schCxt)\n    }\n\n    function validateClause(keyword: string, ifClause?: Name): () => void {\n      return () => {\n        const schCxt = cxt.subschema({keyword}, schValid)\n        gen.assign(valid, schValid)\n        cxt.mergeValidEvaluated(schCxt, valid)\n        if (ifClause) gen.assign(ifClause, _`${keyword}`)\n        else cxt.setParams({ifClause: keyword})\n      }\n    }\n  },\n}\n\nfunction hasSchema(it: SchemaObjCxt, keyword: string): boolean {\n  const schema = it.schema[keyword]\n  return schema !== undefined && !alwaysValidSchema(it, schema)\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"then\", \"else\"],\n  schemaType: [\"object\", \"boolean\"],\n  code({keyword, parentSchema, it}: KeywordCxt) {\n    if (parentSchema.if === undefined) checkStrictMode(it, `\"${keyword}\" without \"if\" is ignored`)\n  },\n}\n\nexport default def\n", "import type {ErrorNoParams, Vocabulary} from \"../../types\"\nimport additionalItems, {AdditionalItemsError} from \"./additionalItems\"\nimport prefixItems from \"./prefixItems\"\nimport items from \"./items\"\nimport items2020, {ItemsError} from \"./items2020\"\nimport contains, {ContainsError} from \"./contains\"\nimport dependencies, {DependenciesError} from \"./dependencies\"\nimport propertyNames, {PropertyNamesError} from \"./propertyNames\"\nimport additionalProperties, {AdditionalPropertiesError} from \"./additionalProperties\"\nimport properties from \"./properties\"\nimport patternProperties from \"./patternProperties\"\nimport notKeyword, {NotKeywordError} from \"./not\"\nimport anyOf, {AnyOfError} from \"./anyOf\"\nimport oneOf, {OneOfError} from \"./oneOf\"\nimport allOf from \"./allOf\"\nimport ifKeyword, {IfKeywordError} from \"./if\"\nimport thenElse from \"./thenElse\"\n\nexport default function getApplicator(draft2020 = false): Vocabulary {\n  const applicator = [\n    // any\n    notKeyword,\n    anyOf,\n    oneOf,\n    allOf,\n    ifKeyword,\n    thenElse,\n    // object\n    propertyNames,\n    additionalProperties,\n    dependencies,\n    properties,\n    patternProperties,\n  ]\n  // array\n  if (draft2020) applicator.push(prefixItems, items2020)\n  else applicator.push(additionalItems, items)\n  applicator.push(contains)\n  return applicator\n}\n\nexport type ApplicatorKeywordError =\n  | ErrorNoParams<\"false schema\">\n  | AdditionalItemsError\n  | ItemsError\n  | ContainsError\n  | AdditionalPropertiesError\n  | DependenciesError\n  | IfKeywordError\n  | AnyOfError\n  | OneOfError\n  | NotKeywordError\n  | PropertyNamesError\n", "import type {\n  AddedFormat,\n  FormatValidator,\n  AsyncFormatValidator,\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, nil, or, Code, getProperty, regexpCode} from \"../../compile/codegen\"\n\ntype FormatValidate =\n  | FormatValidator<string>\n  | FormatValidator<number>\n  | AsyncFormatValidator<string>\n  | AsyncFormatValidator<number>\n  | RegExp\n  | string\n  | true\n\nexport type FormatError = ErrorObject<\"format\", {format: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must match format \"${schemaCode}\"`,\n  params: ({schemaCode}) => _`{format: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"format\",\n  type: [\"number\", \"string\"],\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt, ruleType?: string) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    const {opts, errSchemaPath, schemaEnv, self} = it\n    if (!opts.validateFormats) return\n\n    if ($data) validate$DataFormat()\n    else validateFormat()\n\n    function validate$DataFormat(): void {\n      const fmts = gen.scopeValue(\"formats\", {\n        ref: self.formats,\n        code: opts.code.formats,\n      })\n      const fDef = gen.const(\"fDef\", _`${fmts}[${schemaCode}]`)\n      const fType = gen.let(\"fType\")\n      const format = gen.let(\"format\")\n      // TODO simplify\n      gen.if(\n        _`typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`,\n        () => gen.assign(fType, _`${fDef}.type || \"string\"`).assign(format, _`${fDef}.validate`),\n        () => gen.assign(fType, _`\"string\"`).assign(format, fDef)\n      )\n      cxt.fail$data(or(unknownFmt(), invalidFmt()))\n\n      function unknownFmt(): Code {\n        if (opts.strictSchema === false) return nil\n        return _`${schemaCode} && !${format}`\n      }\n\n      function invalidFmt(): Code {\n        const callFormat = schemaEnv.$async\n          ? _`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n          : _`${format}(${data})`\n        const validData = _`(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`\n        return _`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`\n      }\n    }\n\n    function validateFormat(): void {\n      const formatDef: AddedFormat | undefined = self.formats[schema]\n      if (!formatDef) {\n        unknownFormat()\n        return\n      }\n      if (formatDef === true) return\n      const [fmtType, format, fmtRef] = getFormat(formatDef)\n      if (fmtType === ruleType) cxt.pass(validCondition())\n\n      function unknownFormat(): void {\n        if (opts.strictSchema === false) {\n          self.logger.warn(unknownMsg())\n          return\n        }\n        throw new Error(unknownMsg())\n\n        function unknownMsg(): string {\n          return `unknown format \"${schema as string}\" ignored in schema at path \"${errSchemaPath}\"`\n        }\n      }\n\n      function getFormat(fmtDef: AddedFormat): [string, FormatValidate, Code] {\n        const code =\n          fmtDef instanceof RegExp\n            ? regexpCode(fmtDef)\n            : opts.code.formats\n            ? _`${opts.code.formats}${getProperty(schema)}`\n            : undefined\n        const fmt = gen.scopeValue(\"formats\", {key: schema, ref: fmtDef, code})\n        if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n          return [fmtDef.type || \"string\", fmtDef.validate, _`${fmt}.validate`]\n        }\n\n        return [\"string\", fmtDef, fmt]\n      }\n\n      function validCondition(): Code {\n        if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n          if (!schemaEnv.$async) throw new Error(\"async format in sync schema\")\n          return _`await ${fmtRef}(${data})`\n        }\n        return typeof format == \"function\" ? _`${fmtRef}(${data})` : _`${fmtRef}.test(${data})`\n      }\n    }\n  },\n}\n\nexport default def\n", "import type {Vocabulary} from \"../../types\"\nimport formatKeyword from \"./format\"\n\nconst format: Vocabulary = [formatKeyword]\n\nexport default format\n", "import type {Vocabulary} from \"../types\"\n\nexport const metadataVocabulary: Vocabulary = [\n  \"title\",\n  \"description\",\n  \"default\",\n  \"deprecated\",\n  \"readOnly\",\n  \"writeOnly\",\n  \"examples\",\n]\n\nexport const contentVocabulary: Vocabulary = [\n  \"contentMediaType\",\n  \"contentEncoding\",\n  \"contentSchema\",\n]\n", "import type {Vocabulary} from \"../types\"\nimport coreVocabulary from \"./core\"\nimport validationVocabulary from \"./validation\"\nimport getApplicatorVocabulary from \"./applicator\"\nimport formatVocabulary from \"./format\"\nimport {metadataVocabulary, contentVocabulary} from \"./metadata\"\n\nconst draft7Vocabularies: Vocabulary[] = [\n  coreVocabulary,\n  validationVocabulary,\n  getApplicatorVocabulary(),\n  formatVocabulary,\n  metadataVocabulary,\n  contentVocabulary,\n]\n\nexport default draft7Vocabularies\n", "import type {ErrorObject} from \"../../types\"\n\nexport enum DiscrError {\n  Tag = \"tag\",\n  Mapping = \"mapping\",\n}\n\nexport type DiscrErrorObj<E extends DiscrError> = ErrorObject<\n  \"discriminator\",\n  {error: E; tag: string; tagValue: unknown},\n  string\n>\n", "import type {CodeKeywordDefinition, AnySchemaObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Name} from \"../../compile/codegen\"\nimport {DiscrError, DiscrErrorObj} from \"../discriminator/types\"\nimport {resolveRef, SchemaEnv} from \"../../compile\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {schemaHasRulesButRef} from \"../../compile/util\"\n\nexport type DiscriminatorError = DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {discrError, tagName}}) =>\n    discrError === DiscrError.Tag\n      ? `tag \"${tagName}\" must be string`\n      : `value of tag \"${tagName}\" must be in oneOf`,\n  params: ({params: {discrError, tag, tagName}}) =>\n    _`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"discriminator\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, schema, parentSchema, it} = cxt\n    const {oneOf} = parentSchema\n    if (!it.opts.discriminator) {\n      throw new Error(\"discriminator: requires discriminator option\")\n    }\n    const tagName = schema.propertyName\n    if (typeof tagName != \"string\") throw new Error(\"discriminator: requires propertyName\")\n    if (schema.mapping) throw new Error(\"discriminator: mapping is not supported\")\n    if (!oneOf) throw new Error(\"discriminator: requires oneOf keyword\")\n    const valid = gen.let(\"valid\", false)\n    const tag = gen.const(\"tag\", _`${data}${getProperty(tagName)}`)\n    gen.if(\n      _`typeof ${tag} == \"string\"`,\n      () => validateMapping(),\n      () => cxt.error(false, {discrError: DiscrError.Tag, tag, tagName})\n    )\n    cxt.ok(valid)\n\n    function validateMapping(): void {\n      const mapping = getMapping()\n      gen.if(false)\n      for (const tagValue in mapping) {\n        gen.elseIf(_`${tag} === ${tagValue}`)\n        gen.assign(valid, applyTagSchema(mapping[tagValue]))\n      }\n      gen.else()\n      cxt.error(false, {discrError: DiscrError.Mapping, tag, tagName})\n      gen.endIf()\n    }\n\n    function applyTagSchema(schemaProp?: number): Name {\n      const _valid = gen.name(\"valid\")\n      const schCxt = cxt.subschema({keyword: \"oneOf\", schemaProp}, _valid)\n      cxt.mergeEvaluated(schCxt, Name)\n      return _valid\n    }\n\n    function getMapping(): {[T in string]?: number} {\n      const oneOfMapping: {[T in string]?: number} = {}\n      const topRequired = hasRequired(parentSchema)\n      let tagRequired = true\n      for (let i = 0; i < oneOf.length; i++) {\n        let sch = oneOf[i]\n        if (sch?.$ref && !schemaHasRulesButRef(sch, it.self.RULES)) {\n          const ref = sch.$ref\n          sch = resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref)\n          if (sch instanceof SchemaEnv) sch = sch.schema\n          if (sch === undefined) throw new MissingRefError(it.opts.uriResolver, it.baseId, ref)\n        }\n        const propSch = sch?.properties?.[tagName]\n        if (typeof propSch != \"object\") {\n          throw new Error(\n            `discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`\n          )\n        }\n        tagRequired = tagRequired && (topRequired || hasRequired(sch))\n        addMappings(propSch, i)\n      }\n      if (!tagRequired) throw new Error(`discriminator: \"${tagName}\" must be required`)\n      return oneOfMapping\n\n      function hasRequired({required}: AnySchemaObject): boolean {\n        return Array.isArray(required) && required.includes(tagName)\n      }\n\n      function addMappings(sch: AnySchemaObject, i: number): void {\n        if (sch.const) {\n          addMapping(sch.const, i)\n        } else if (sch.enum) {\n          for (const tagValue of sch.enum) {\n            addMapping(tagValue, i)\n          }\n        } else {\n          throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`)\n        }\n      }\n\n      function addMapping(tagValue: unknown, i: number): void {\n        if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n          throw new Error(`discriminator: \"${tagName}\" values must be unique strings`)\n        }\n        oneOfMapping[tagValue] = i\n      }\n    }\n  },\n}\n\nexport default def\n", "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"$id\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Core schema meta-schema\",\n  \"definitions\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$ref\": \"#\"}\n    },\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"allOf\": [{\"$ref\": \"#/definitions/nonNegativeInteger\"}, {\"default\": 0}]\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  },\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$schema\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"$ref\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$comment\": {\n      \"type\": \"string\"\n    },\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": true,\n    \"readOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": true\n    },\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"additionalItems\": {\"$ref\": \"#\"},\n    \"items\": {\n      \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}],\n      \"default\": true\n    },\n    \"maxItems\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"contains\": {\"$ref\": \"#\"},\n    \"maxProperties\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/definitions/stringArray\"},\n    \"additionalProperties\": {\"$ref\": \"#\"},\n    \"definitions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"propertyNames\": {\"format\": \"regex\"},\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/stringArray\"}]\n      }\n    },\n    \"propertyNames\": {\"$ref\": \"#\"},\n    \"const\": true,\n    \"enum\": {\n      \"type\": \"array\",\n      \"items\": true,\n      \"minItems\": 1,\n      \"uniqueItems\": true\n    },\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/definitions/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/definitions/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    },\n    \"format\": {\"type\": \"string\"},\n    \"contentMediaType\": {\"type\": \"string\"},\n    \"contentEncoding\": {\"type\": \"string\"},\n    \"if\": {\"$ref\": \"#\"},\n    \"then\": {\"$ref\": \"#\"},\n    \"else\": {\"$ref\": \"#\"},\n    \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"not\": {\"$ref\": \"#\"}\n  },\n  \"default\": true\n}\n", "import type {AnySchemaObject} from \"./types\"\nimport AjvCore from \"./core\"\nimport draft7Vocabularies from \"./vocabularies/draft7\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport * as draft7MetaSchema from \"./refs/json-schema-draft-07.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\"\n\nexport class Ajv extends AjvCore {\n  _addVocabularies(): void {\n    super._addVocabularies()\n    draft7Vocabularies.forEach((v) => this.addVocabulary(v))\n    if (this.opts.discriminator) this.addKeyword(discriminator)\n  }\n\n  _addDefaultMetaSchema(): void {\n    super._addDefaultMetaSchema()\n    if (!this.opts.meta) return\n    const metaSchema = this.opts.$data\n      ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n      : draft7MetaSchema\n    this.addMetaSchema(metaSchema, META_SCHEMA_ID, false)\n    this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    return (this.opts.defaultMeta =\n      super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n  }\n}\n\nmodule.exports = exports = Ajv\nmodule.exports.Ajv = Ajv\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv\n\nexport {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  SchemaValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n", "import type {Format, FormatDefinition} from \"ajv\"\nimport type {FormatValidator, FormatCompare} from \"ajv/dist/types\"\n\nexport type FormatMode = \"fast\" | \"full\"\n\nexport type FormatName =\n  | \"date\"\n  | \"time\"\n  | \"date-time\"\n  | \"iso-time\"\n  | \"iso-date-time\"\n  | \"duration\"\n  | \"uri\"\n  | \"uri-reference\"\n  | \"uri-template\"\n  | \"url\"\n  | \"email\"\n  | \"hostname\"\n  | \"ipv4\"\n  | \"ipv6\"\n  | \"regex\"\n  | \"uuid\"\n  | \"json-pointer\"\n  | \"json-pointer-uri-fragment\"\n  | \"relative-json-pointer\"\n  | \"byte\"\n  | \"int32\"\n  | \"int64\"\n  | \"float\"\n  | \"double\"\n  | \"password\"\n  | \"binary\"\n\nexport type DefinedFormats = {\n  [key in FormatName]: Format\n}\n\nfunction fmtDef(\n  validate: RegExp | FormatValidator<string>,\n  compare: FormatCompare<string>\n): FormatDefinition<string> {\n  return {validate, compare}\n}\n\nexport const fullFormats: DefinedFormats = {\n  // date: http://tools.ietf.org/html/rfc3339#section-5.6\n  date: fmtDef(date, compareDate),\n  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n  time: fmtDef(getTime(true), compareTime),\n  \"date-time\": fmtDef(getDateTime(true), compareDateTime),\n  \"iso-time\": fmtDef(getTime(), compareIsoTime),\n  \"iso-date-time\": fmtDef(getDateTime(), compareIsoDateTime),\n  // duration: https://tools.ietf.org/html/rfc3339#appendix-A\n  duration: /^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/,\n  uri,\n  \"uri-reference\":\n    /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,\n  // uri-template: https://tools.ietf.org/html/rfc6570\n  \"uri-template\":\n    /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,\n  // For the source: https://gist.github.com/dperini/729294\n  // For test cases: https://mathiasbynens.be/demo/url-regex\n  url: /^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\n  email:\n    /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n  hostname:\n    /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i,\n  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n  ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/,\n  ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))$/i,\n  regex,\n  // uuid: http://tools.ietf.org/html/rfc4122\n  uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n  // JSON-pointer: https://tools.ietf.org/html/rfc6901\n  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n  \"json-pointer\": /^(?:\\/(?:[^~/]|~0|~1)*)*$/,\n  \"json-pointer-uri-fragment\": /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n  // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n  \"relative-json-pointer\": /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\n  // the following formats are used by the openapi specification: https://spec.openapis.org/oas/v3.0.0#data-types\n  // byte: https://github.com/miguelmota/is-base64\n  byte,\n  // signed 32 bit integer\n  int32: {type: \"number\", validate: validateInt32},\n  // signed 64 bit integer\n  int64: {type: \"number\", validate: validateInt64},\n  // C-type float\n  float: {type: \"number\", validate: validateNumber},\n  // C-type double\n  double: {type: \"number\", validate: validateNumber},\n  // hint to the UI to hide input strings\n  password: true,\n  // unchecked string payload\n  binary: true,\n}\n\nexport const fastFormats: DefinedFormats = {\n  ...fullFormats,\n  date: fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/, compareDate),\n  time: fmtDef(\n    /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n    compareTime\n  ),\n  \"date-time\": fmtDef(\n    /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\dt(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n    compareDateTime\n  ),\n  \"iso-time\": fmtDef(\n    /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n    compareIsoTime\n  ),\n  \"iso-date-time\": fmtDef(\n    /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n    compareIsoDateTime\n  ),\n  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n  uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n  \"uri-reference\": /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n  // email (sources from jsen validator):\n  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'wilful violation')\n  email:\n    /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n}\n\nexport const formatNames = Object.keys(fullFormats) as FormatName[]\n\nfunction isLeapYear(year: number): boolean {\n  // https://tools.ietf.org/html/rfc3339#appendix-C\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)\n}\n\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction date(str: string): boolean {\n  // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n  const matches: string[] | null = DATE.exec(str)\n  if (!matches) return false\n  const year: number = +matches[1]\n  const month: number = +matches[2]\n  const day: number = +matches[3]\n  return (\n    month >= 1 &&\n    month <= 12 &&\n    day >= 1 &&\n    day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month])\n  )\n}\n\nfunction compareDate(d1: string, d2: string): number | undefined {\n  if (!(d1 && d2)) return undefined\n  if (d1 > d2) return 1\n  if (d1 < d2) return -1\n  return 0\n}\n\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d(?:\\.\\d+)?)(z|([+-])(\\d\\d)(?::?(\\d\\d))?)?$/i\n\nfunction getTime(strictTimeZone?: boolean): (str: string) => boolean {\n  return function time(str: string): boolean {\n    const matches: string[] | null = TIME.exec(str)\n    if (!matches) return false\n    const hr: number = +matches[1]\n    const min: number = +matches[2]\n    const sec: number = +matches[3]\n    const tz: string | undefined = matches[4]\n    const tzSign: number = matches[5] === \"-\" ? -1 : 1\n    const tzH: number = +(matches[6] || 0)\n    const tzM: number = +(matches[7] || 0)\n    if (tzH > 23 || tzM > 59 || (strictTimeZone && !tz)) return false\n    if (hr <= 23 && min <= 59 && sec < 60) return true\n    // leap second\n    const utcMin = min - tzM * tzSign\n    const utcHr = hr - tzH * tzSign - (utcMin < 0 ? 1 : 0)\n    return (utcHr === 23 || utcHr === -1) && (utcMin === 59 || utcMin === -1) && sec < 61\n  }\n}\n\nfunction compareTime(s1: string, s2: string): number | undefined {\n  if (!(s1 && s2)) return undefined\n  const t1 = new Date(\"2020-01-01T\" + s1).valueOf()\n  const t2 = new Date(\"2020-01-01T\" + s2).valueOf()\n  if (!(t1 && t2)) return undefined\n  return t1 - t2\n}\n\nfunction compareIsoTime(t1: string, t2: string): number | undefined {\n  if (!(t1 && t2)) return undefined\n  const a1 = TIME.exec(t1)\n  const a2 = TIME.exec(t2)\n  if (!(a1 && a2)) return undefined\n  t1 = a1[1] + a1[2] + a1[3]\n  t2 = a2[1] + a2[2] + a2[3]\n  if (t1 > t2) return 1\n  if (t1 < t2) return -1\n  return 0\n}\n\nconst DATE_TIME_SEPARATOR = /t|\\s/i\nfunction getDateTime(strictTimeZone?: boolean): (str: string) => boolean {\n  const time = getTime(strictTimeZone)\n\n  return function date_time(str: string): boolean {\n    // http://tools.ietf.org/html/rfc3339#section-5.6\n    const dateTime: string[] = str.split(DATE_TIME_SEPARATOR)\n    return dateTime.length === 2 && date(dateTime[0]) && time(dateTime[1])\n  }\n}\n\nfunction compareDateTime(dt1: string, dt2: string): number | undefined {\n  if (!(dt1 && dt2)) return undefined\n  const d1 = new Date(dt1).valueOf()\n  const d2 = new Date(dt2).valueOf()\n  if (!(d1 && d2)) return undefined\n  return d1 - d2\n}\n\nfunction compareIsoDateTime(dt1: string, dt2: string): number | undefined {\n  if (!(dt1 && dt2)) return undefined\n  const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR)\n  const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR)\n  const res = compareDate(d1, d2)\n  if (res === undefined) return undefined\n  return res || compareTime(t1, t2)\n}\n\nconst NOT_URI_FRAGMENT = /\\/|:/\nconst URI =\n  /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i\n\nfunction uri(str: string): boolean {\n  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n  return NOT_URI_FRAGMENT.test(str) && URI.test(str)\n}\n\nconst BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm\n\nfunction byte(str: string): boolean {\n  BYTE.lastIndex = 0\n  return BYTE.test(str)\n}\n\nconst MIN_INT32 = -(2 ** 31)\nconst MAX_INT32 = 2 ** 31 - 1\n\nfunction validateInt32(value: number): boolean {\n  return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32\n}\n\nfunction validateInt64(value: number): boolean {\n  // JSON and javascript max Int is 2**53, so any int that passes isInteger is valid for Int64\n  return Number.isInteger(value)\n}\n\nfunction validateNumber(): boolean {\n  return true\n}\n\nconst Z_ANCHOR = /[^\\\\]\\\\Z/\nfunction regex(str: string): boolean {\n  if (Z_ANCHOR.test(str)) return false\n  try {\n    new RegExp(str)\n    return true\n  } catch (e) {\n    return false\n  }\n}\n", "import type Ajv from \"ajv\"\nimport type {\n  Plugin,\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  Code,\n  Name,\n  ErrorObject,\n} from \"ajv\"\nimport type {AddedFormat} from \"ajv/dist/types\"\nimport type {Rule} from \"ajv/dist/compile/rules\"\nimport {KeywordCxt} from \"ajv\"\nimport {_, str, or, getProperty, operators} from \"ajv/dist/compile/codegen\"\n\ntype Kwd = \"formatMaximum\" | \"formatMinimum\" | \"formatExclusiveMaximum\" | \"formatExclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst ops = operators\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n  formatMaximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n  formatMinimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n  formatExclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n  formatExclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitFormatError = ErrorObject<Kwd, {limit: string; comparison: Comparison}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({keyword, schemaCode}) => str`should be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n  params: ({keyword, schemaCode}) =>\n    _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nexport const formatLimitDefinition: CodeKeywordDefinition = {\n  keyword: Object.keys(KWDs),\n  type: \"string\",\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt) {\n    const {gen, data, schemaCode, keyword, it} = cxt\n    const {opts, self} = it\n    if (!opts.validateFormats) return\n\n    const fCxt = new KeywordCxt(it, (self.RULES.all.format as Rule).definition, \"format\")\n    if (fCxt.$data) validate$DataFormat()\n    else validateFormat()\n\n    function validate$DataFormat(): void {\n      const fmts = gen.scopeValue(\"formats\", {\n        ref: self.formats,\n        code: opts.code.formats,\n      })\n      const fmt = gen.const(\"fmt\", _`${fmts}[${fCxt.schemaCode}]`)\n      cxt.fail$data(\n        or(\n          _`typeof ${fmt} != \"object\"`,\n          _`${fmt} instanceof RegExp`,\n          _`typeof ${fmt}.compare != \"function\"`,\n          compareCode(fmt)\n        )\n      )\n    }\n\n    function validateFormat(): void {\n      const format = fCxt.schema as string\n      const fmtDef: AddedFormat | undefined = self.formats[format]\n      if (!fmtDef || fmtDef === true) return\n      if (\n        typeof fmtDef != \"object\" ||\n        fmtDef instanceof RegExp ||\n        typeof fmtDef.compare != \"function\"\n      ) {\n        throw new Error(`\"${keyword}\": format \"${format}\" does not define \"compare\" function`)\n      }\n      const fmt = gen.scopeValue(\"formats\", {\n        key: format,\n        ref: fmtDef,\n        code: opts.code.formats ? _`${opts.code.formats}${getProperty(format)}` : undefined,\n      })\n\n      cxt.fail$data(compareCode(fmt))\n    }\n\n    function compareCode(fmt: Name): Code {\n      return _`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword as Kwd].fail} 0`\n    }\n  },\n  dependencies: [\"format\"],\n}\n\nconst formatLimitPlugin: Plugin<undefined> = (ajv: Ajv): Ajv => {\n  ajv.addKeyword(formatLimitDefinition)\n  return ajv\n}\n\nexport default formatLimitPlugin\n", "import {\n  DefinedFormats,\n  FormatMode,\n  FormatName,\n  formatNames,\n  fastFormats,\n  fullFormats,\n} from \"./formats\"\nimport formatLimit from \"./limit\"\nimport type Ajv from \"ajv\"\nimport type {Plugin, Format} from \"ajv\"\nimport {_, Name} from \"ajv/dist/compile/codegen\"\n\nexport {FormatMode, FormatName} from \"./formats\"\nexport {LimitFormatError} from \"./limit\"\nexport interface FormatOptions {\n  mode?: FormatMode\n  formats?: FormatName[]\n  keywords?: boolean\n}\n\nexport type FormatsPluginOptions = FormatName[] | FormatOptions\n\nexport interface FormatsPlugin extends Plugin<FormatsPluginOptions> {\n  get: (format: FormatName, mode?: FormatMode) => Format\n}\n\nconst fullName = new Name(\"fullFormats\")\nconst fastName = new Name(\"fastFormats\")\n\nconst formatsPlugin: FormatsPlugin = (\n  ajv: Ajv,\n  opts: FormatsPluginOptions = {keywords: true}\n): Ajv => {\n  if (Array.isArray(opts)) {\n    addFormats(ajv, opts, fullFormats, fullName)\n    return ajv\n  }\n  const [formats, exportName] =\n    opts.mode === \"fast\" ? [fastFormats, fastName] : [fullFormats, fullName]\n  const list = opts.formats || formatNames\n  addFormats(ajv, list, formats, exportName)\n  if (opts.keywords) formatLimit(ajv)\n  return ajv\n}\n\nformatsPlugin.get = (name: FormatName, mode: FormatMode = \"full\"): Format => {\n  const formats = mode === \"fast\" ? fastFormats : fullFormats\n  const f = formats[name]\n  if (!f) throw new Error(`Unknown format \"${name}\"`)\n  return f\n}\n\nfunction addFormats(ajv: Ajv, list: FormatName[], fs: DefinedFormats, exportName: Name): void {\n  ajv.opts.code.formats ??= _`require(\"ajv-formats/dist/formats\").${exportName}`\n  for (const f of list) ajv.addFormat(f, fs[f])\n}\n\nmodule.exports = exports = formatsPlugin\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default formatsPlugin\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ServerCommand - Manage Bedrock Dedicated Server lifecycle\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * Provides subcommands for starting, stopping, and querying the status of\r\n * a Bedrock Dedicated Server (BDS) instance via the MCT ToolCommand system.\r\n *\r\n * WORKFLOW:\r\n *   /server start              \u2192 Starts BDS with default settings\r\n *   /server start --project .  \u2192 Starts BDS and deploys the current project\r\n *   /server start --slot 1     \u2192 Starts on a specific slot (port offset)\r\n *   /server stop               \u2192 Stops the running BDS instance\r\n *   /server status             \u2192 Reports current BDS status\r\n *\r\n * INFRASTRUCTURE:\r\n * - Uses ServerManager.ensureActiveServer() to orchestrate BDS lifecycle\r\n * - ServerManager handles downloading BDS, provisioning slot folders,\r\n *   deploying the creator_tools_ingame addon, and managing the process\r\n * - Each slot maps to a port via getBasePortForSlot (19132 + slot * 32)\r\n * - The creator_tools_ingame addon is always deployed, providing action set\r\n *   execution and scripting infrastructure inside the running server\r\n *\r\n * RELATED FILES:\r\n * - src/local/ServerManager.ts \u2014 BDS download, provisioning, and lifecycle\r\n * - src/local/DedicatedServer.ts \u2014 Single BDS process management\r\n * - src/local/ServerMinecraft.ts \u2014 IMinecraft wrapper for DedicatedServer\r\n * - src/app/toolcommands/commands/ScriptCommand.ts \u2014 Injects code into running BDS\r\n * - src/app/IMinecraftStartMessage.ts \u2014 Start configuration\r\n *\r\n * SCOPES:\r\n * - ui: Electron app, where DedicatedServerCommandHandler manages BDS\r\n * - serveTerminal: `mct serve` mode with direct ServerManager access\r\n * - mcp: MCP server sessions with serverManager in context\r\n * - serverApi: HTTP API endpoints\r\n *\r\n * SLOT SYSTEM:\r\n * ServerManager supports multiple concurrent BDS instances via slots (0-79).\r\n * Each slot gets its own port range and runtime folder. Typical prefixes:\r\n * - \"mcp\" for MCP sessions\r\n * - \"serve\" for serve mode\r\n * - \"vscode\" for VS Code extension\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase, ToolCommandScope, ToolCommandExitCode } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport type { IMinecraftStartMessage } from \"../../IMinecraftStartMessage\";\r\nimport type { IWorldSettings, IPackageReference } from \"../../../minecraft/IWorldSettings\";\r\n\r\n/**\r\n * DedicatedServerStatus.started value. Imported dynamically along with other\r\n * server dependencies to avoid pulling in the full DedicatedServer module\r\n * (which has heavy transitive dependencies) at module initialization time.\r\n */\r\n\r\n// These value imports are lazy-loaded at runtime to avoid pulling in heavy\r\n// module dependency chains (WorldLevelDat \u2192 NbtBinary \u2192 FileBase, etc.)\r\n// at module initialization time \u2014 which causes issues in test runners.\r\nasync function getServerDependencies() {\r\n  const [\r\n    { DedicatedServerMode },\r\n    { GameType, Generator, Difficulty, PlayerPermissionsLevel },\r\n    PackageModule,\r\n    { DedicatedServerStatus },\r\n  ] = await Promise.all([\r\n    import(\"../../ICreatorToolsData\"),\r\n    import(\"../../../minecraft/WorldLevelDat\"),\r\n    import(\"../../Package\"),\r\n    import(\"../../../local/DedicatedServer\"),\r\n  ]);\r\n  return {\r\n    DedicatedServerMode,\r\n    GameType,\r\n    Generator,\r\n    Difficulty,\r\n    PlayerPermissionsLevel,\r\n    Package: PackageModule.default,\r\n    DedicatedServerStatus,\r\n  };\r\n}\r\n\r\nexport class ServerCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"server\",\r\n    description: \"Manage Bedrock Dedicated Server (start, stop, status)\",\r\n    aliases: [\"srv\", \"bds\"],\r\n    category: \"Server\",\r\n    arguments: [\r\n      {\r\n        name: \"action\",\r\n        description: \"Action to perform: start, stop, or status\",\r\n        type: \"string\",\r\n        required: true,\r\n        autocompleteProvider: async (partial: string, _context) => {\r\n          const actions = [\"start\", \"stop\", \"status\"];\r\n          if (!partial) return actions;\r\n          return actions.filter((a) => a.startsWith(partial.toLowerCase()));\r\n        },\r\n      },\r\n    ],\r\n    flags: [\r\n      {\r\n        name: \"slot\",\r\n        shortName: \"l\",\r\n        description: \"Server slot number (default: 0). Each slot runs on a separate port.\",\r\n        type: \"string\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"project\",\r\n        shortName: \"p\",\r\n        description: \"Path to project to deploy (default: current project if available)\",\r\n        type: \"string\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"session\",\r\n        shortName: \"s\",\r\n        description: \"Session name (required for MCP/API scope)\",\r\n        type: \"string\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"fresh\",\r\n        shortName: \"f\",\r\n        description: \"Force a fresh world (discard existing world data)\",\r\n        type: \"boolean\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"json\",\r\n        shortName: \"j\",\r\n        description: \"Output results in JSON format for scripts and CI/CD pipelines\",\r\n        type: \"boolean\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"wait-ready\",\r\n        shortName: \"w\",\r\n        description: \"Wait for server to be fully ready before returning\",\r\n        type: \"boolean\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"timeout\",\r\n        shortName: \"t\",\r\n        description: \"Timeout in seconds for --wait-ready (default: 60)\",\r\n        type: \"string\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"editor\",\r\n        shortName: \"e\",\r\n        description: \"Launch BDS in Minecraft Editor mode\",\r\n        type: \"boolean\",\r\n        required: false,\r\n      },\r\n    ],\r\n    scopes: [ToolCommandScope.ui, ToolCommandScope.serveTerminal, ToolCommandScope.mcp, ToolCommandScope.serverApi],\r\n    examples: [\r\n      \"/server start\",\r\n      \"/server start --project ./myAddon\",\r\n      \"/server start --slot 1 --fresh\",\r\n      \"/server start --wait-ready --timeout 120\",\r\n      \"/server start --editor\",\r\n      \"/server start --json\",\r\n      \"/server stop\",\r\n      \"/server status\",\r\n      \"/server status --json\",\r\n    ],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const action = (args[0] || \"\").toLowerCase();\r\n    const slot = parseInt(flags.slot as string, 10) || 0;\r\n\r\n    if (!action || ![\"start\", \"stop\", \"status\"].includes(action)) {\r\n      return this.error(\"INVALID_ACTION\", 'Invalid action. Use \"start\", \"stop\", or \"status\".');\r\n    }\r\n\r\n    let result: IToolCommandResult;\r\n\r\n    switch (action) {\r\n      case \"start\":\r\n        result = await this._startServer(context, slot, flags);\r\n        break;\r\n      case \"stop\":\r\n        result = await this._stopServer(context, slot, flags);\r\n        break;\r\n      case \"status\":\r\n        result = await this._getStatus(context, slot, flags);\r\n        break;\r\n      default:\r\n        result = this.error(\"INVALID_ACTION\", `Unknown action: ${action}`);\r\n        break;\r\n    }\r\n\r\n    if (flags.json === true) {\r\n      const jsonOutput = result.success\r\n        ? { ...(result.data as Record<string, unknown>), message: result.message }\r\n        : { status: \"error\", code: result.error?.code, message: result.error?.message };\r\n      context.output.info(JSON.stringify(jsonOutput));\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  private async _startServer(\r\n    context: IToolCommandContext,\r\n    slot: number,\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const serverManager = this._getServerManager(context);\r\n    if (!serverManager) {\r\n      return this.error(\r\n        \"NO_SERVER_MANAGER\",\r\n        \"No ServerManager available. This command requires a serve-mode or Electron context with BDS support.\"\r\n      );\r\n    }\r\n\r\n    context.output.info(\"Preparing Bedrock Dedicated Server...\");\r\n\r\n    try {\r\n      // Prepare ServerManager (downloads BDS if needed)\r\n      await serverManager.prepare();\r\n\r\n      // Lazy-load heavy dependencies to avoid circular import issues at module init time\r\n      const deps = await getServerDependencies();\r\n\r\n      // Build world settings with creator tools infrastructure addon\r\n      const packRefs: IPackageReference[] = [];\r\n      deps.Package.ensureMinecraftCreatorToolsPackageReference(packRefs);\r\n\r\n      const worldSettings: IWorldSettings = {\r\n        gameType: deps.GameType.creative,\r\n        generator: deps.Generator.flat,\r\n        cheatsEnabled: true,\r\n        difficulty: deps.Difficulty.peaceful,\r\n        playerPermissionLevel: deps.PlayerPermissionsLevel.operator,\r\n        permissionLevel: deps.PlayerPermissionsLevel.operator,\r\n        randomSeed: \"2000\",\r\n        packageReferences: packRefs,\r\n        worldTemplateReferences: undefined,\r\n        isEditor: flags.editor === true,\r\n      };\r\n\r\n      const forceNewWorld = flags.fresh === true || flags.fresh === \"true\";\r\n\r\n      const startMessage: IMinecraftStartMessage = {\r\n        mode: deps.DedicatedServerMode.auto,\r\n        path: undefined,\r\n        forceStartNewWorld: forceNewWorld,\r\n        worldSettings,\r\n        transientWorld: true,\r\n      };\r\n\r\n      // If a project path or current project is available, add it as additional content\r\n      const projectPath = flags.project as string | undefined;\r\n      if (projectPath) {\r\n        startMessage.additionalContentPath = projectPath;\r\n      } else if (context.project?.projectFolder) {\r\n        // Deploy current project's content if available\r\n        const folderPath = context.project.projectFolder.fullPath;\r\n        if (folderPath) {\r\n          startMessage.additionalContentPath = folderPath;\r\n        }\r\n      }\r\n\r\n      context.output.progress(1, 4, \"Provisioning server slot...\");\r\n\r\n      if (flags.editor === true) {\r\n        context.output.info(\"Editor mode enabled \u2014 BDS will launch with Editor=true\");\r\n      }\r\n\r\n      const server = await serverManager.ensureActiveServer(slot, startMessage);\r\n\r\n      if (!server) {\r\n        return this.error(\"SERVER_FAILED\", \"Failed to create server instance\");\r\n      }\r\n\r\n      context.output.progress(2, 4, \"Starting Bedrock Dedicated Server...\");\r\n\r\n      await server.startServer(false, startMessage);\r\n\r\n      context.output.progress(3, 4, \"Waiting for server to be ready...\");\r\n\r\n      await server.waitUntilStarted();\r\n\r\n      context.output.progress(4, 4, \"Server started!\");\r\n\r\n      const port = serverManager.getBasePortForSlot(slot);\r\n\r\n      // --wait-ready: additional verification that the server is fully ready\r\n      if (flags[\"wait-ready\"] === true) {\r\n        const startTime = Date.now();\r\n        const timeoutSec = parseInt(flags.timeout as string, 10) || 60;\r\n        const deadline = startTime + timeoutSec * 1000;\r\n\r\n        while (server.status !== deps.DedicatedServerStatus.started && Date.now() < deadline) {\r\n          await new Promise((resolve) => setTimeout(resolve, 250));\r\n        }\r\n\r\n        if (server.status !== deps.DedicatedServerStatus.started) {\r\n          return {\r\n            ...this.error(\"TIMEOUT\", `Server did not reach ready state within ${timeoutSec}s`),\r\n            exitCode: ToolCommandExitCode.Timeout,\r\n          };\r\n        }\r\n\r\n        const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\r\n        context.output.info(`Server ready after ${elapsed}s`);\r\n      }\r\n\r\n      context.output.success(`Server started on slot ${slot} (port ${port})`);\r\n\r\n      return this.success(`Server started on slot ${slot} (port ${port})`, {\r\n        slot,\r\n        port,\r\n        status: \"started\",\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return {\r\n        ...this.error(\"START_FAILED\", `Failed to start server: ${message}`),\r\n        exitCode: this._categorizeError(message),\r\n      };\r\n    }\r\n  }\r\n\r\n  private async _stopServer(\r\n    context: IToolCommandContext,\r\n    slot: number,\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const serverManager = this._getServerManager(context);\r\n    if (!serverManager) {\r\n      return this.error(\"NO_SERVER_MANAGER\", \"No ServerManager available.\");\r\n    }\r\n\r\n    try {\r\n      const server = serverManager.getActiveServer(slot);\r\n\r\n      if (!server) {\r\n        return this.error(\"NO_SERVER\", `No active server on slot ${slot}`);\r\n      }\r\n\r\n      context.output.info(`Stopping server on slot ${slot}...`);\r\n\r\n      await server.stopServer();\r\n\r\n      context.output.success(`Server stopped on slot ${slot}`);\r\n\r\n      return this.success(`Server stopped on slot ${slot}`, {\r\n        slot,\r\n        status: \"stopped\",\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return {\r\n        ...this.error(\"STOP_FAILED\", `Failed to stop server: ${message}`),\r\n        exitCode: this._categorizeError(message),\r\n      };\r\n    }\r\n  }\r\n\r\n  private async _getStatus(\r\n    context: IToolCommandContext,\r\n    slot: number,\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const serverManager = this._getServerManager(context);\r\n    if (!serverManager) {\r\n      return this.error(\"NO_SERVER_MANAGER\", \"No ServerManager available.\");\r\n    }\r\n\r\n    const server = serverManager.getActiveServer(slot);\r\n\r\n    if (!server) {\r\n      context.output.info(`No active server on slot ${slot}`);\r\n      return this.success(`No active server on slot ${slot}`, {\r\n        slot,\r\n        status: \"none\",\r\n        running: false,\r\n      });\r\n    }\r\n\r\n    const status = server.status;\r\n    const port = serverManager.getBasePortForSlot(slot);\r\n\r\n    const deps = await getServerDependencies();\r\n\r\n    context.output.info(`Server on slot ${slot}: status=${status}, port=${port}`);\r\n\r\n    return this.success(`Server status: ${status}`, {\r\n      slot,\r\n      port,\r\n      status: String(status),\r\n      running: status === deps.DedicatedServerStatus.started,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Categorize an error message into a standard exit code.\r\n   */\r\n  _categorizeError(message: string): ToolCommandExitCode {\r\n    const lower = message.toLowerCase();\r\n\r\n    if ((lower.includes(\"port\") && lower.includes(\"in use\")) || lower.includes(\"eaddrinuse\")) {\r\n      return ToolCommandExitCode.PortConflict;\r\n    }\r\n    if (lower.includes(\"eula\")) {\r\n      return ToolCommandExitCode.EulaNotAccepted;\r\n    }\r\n    if (lower.includes(\"download\") || lower.includes(\"network\") || lower.includes(\"econnrefused\")) {\r\n      return ToolCommandExitCode.NetworkError;\r\n    }\r\n    if (lower.includes(\"crash\") || lower.includes(\"unexpected exit\")) {\r\n      return ToolCommandExitCode.CrashOnStartup;\r\n    }\r\n    if (lower.includes(\"timeout\") || lower.includes(\"timed out\")) {\r\n      return ToolCommandExitCode.Timeout;\r\n    }\r\n\r\n    return ToolCommandExitCode.GenericError;\r\n  }\r\n\r\n  /**\r\n   * Get the ServerManager from whichever context is available.\r\n   * Priority: session.serverManager > minecraft (if it wraps a server) > undefined\r\n   */\r\n  private _getServerManager(context: IToolCommandContext) {\r\n    // Session-based (MCP/API mode)\r\n    if (context.session?.serverManager) {\r\n      return context.session.serverManager;\r\n    }\r\n\r\n    // For UI/serve modes, we need to get or create a ServerManager.\r\n    // The ServerManager is typically created by the hosting environment\r\n    // (Electron DedicatedServerCommandHandler, MinecraftMcpServer, etc.)\r\n    // We can create one on-demand for the creatorTools instance.\r\n    return undefined;\r\n  }\r\n}\r\n\r\nexport const serverCommand = new ServerCommand();\r\n", "/**\r\n * Electron Main Process Entry Point\r\n *\r\n * ARCHITECTURE:\r\n * This is the main entry point for the Minecraft Creator Tools Electron app.\r\n * It orchestrates:\r\n * - App lifecycle (startup, squirrel events, single instance)\r\n * - Window creation and management\r\n * - IPC handler registration for renderer communication\r\n * - Command handlers for server, file system features\r\n *\r\n * COMMAND LINE ARGUMENTS:\r\n * - -h, --help: Show help\r\n * - -i <path>: Input path to open\r\n * - -o, --out <path>: Output path for exports\r\n * - -c, --cmd <command>: Run a specific command (exportworld, help)\r\n * - --storage <path>: Custom storage path for all app data\r\n *\r\n * APP MODES:\r\n * - APP_MODE_MAINAPP (0): Normal Minecraft Creator Tools\r\n * - APP_MODE_EXPORTWORLD (1): Export world command\r\n * - APP_MODE_ERRORHELP (99): Show help and exit\r\n * - APP_MODE_EXIT (100): Exit immediately\r\n */\r\n\r\nimport * as path from \"path\";\r\nimport open from \"open\";\r\nimport {\r\n  app,\r\n  BrowserWindow,\r\n  Tray,\r\n  Menu,\r\n  dialog,\r\n  shell,\r\n  ipcMain,\r\n  globalShortcut,\r\n  session,\r\n  screen,\r\n  MenuItemConstructorOptions,\r\n  MenuItem,\r\n  BaseWindow,\r\n} from \"electron\";\r\n// @ts-ignore - electron-squirrel-startup doesn't have type declarations\r\nimport squirrel from \"electron-squirrel-startup\";\r\nimport * as ChildProcess from \"child_process\";\r\nimport * as fs from \"fs\";\r\n\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport Database from \"../minecraft/Database\";\r\nimport NodeStorage from \"../local/NodeStorage\";\r\nimport WindowCommandHandler from \"./WindowCommandHandler\";\r\nimport DedicatedServerCommandHandler from \"./DedicatedServerCommandHandler\";\r\nimport WebSocketCommandHandler from \"./WebSocketCommandHandler\";\r\nimport FileSystemCommandHandler from \"./FileSystemCommandHandler\";\r\nimport ContentSourceManager from \"./ContentSourceManager\";\r\nimport LocalCommandHandler from \"./LocalCommandHandler\";\r\nimport ElectronUtils from \"./ElectronUtils\";\r\nimport ContentLogWatcher from \"../local/ContentLogWatcher\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport LocalEnvironment from \"../local/LocalEnvironment\";\r\nimport Log from \"../core/Log\";\r\n\r\n// Error handler for uncaught exceptions.\r\n// Before exiting, attempt to forward the error to the focused renderer so it\r\n// can display the global error overlay (giving the user a chance to copy\r\n// details). We delay the exit briefly so the IPC message has time to land.\r\nfunction handleException(err: Error): void {\r\n  Log.error(\r\n    \"Unfortunately, the application could not continue to run.\\n\\nApplication error:\\n\" +\r\n      (err.message ? err.message : err.toString()) +\r\n      \"\\n\\nReturning to prompt.\\n\"\r\n  );\r\n\r\n  process.removeListener(\"uncaughtException\", handleException);\r\n\r\n  let notifiedRenderer = false;\r\n  try {\r\n    const target =\r\n      BrowserWindow.getFocusedWindow() ||\r\n      (BrowserWindow.getAllWindows().length > 0 ? BrowserWindow.getAllWindows()[0] : undefined);\r\n    if (target && !target.isDestroyed()) {\r\n      target.webContents.send(\"error:fatal\", {\r\n        message: err?.message || String(err),\r\n        stack: err?.stack,\r\n      });\r\n      notifiedRenderer = true;\r\n    }\r\n  } catch {\r\n    // ignore \u2014 best effort only\r\n  }\r\n\r\n  // Give the renderer a moment to paint the overlay before tearing down.\r\n  setTimeout(() => app.exit(9), notifiedRenderer ? 2000 : 0);\r\n}\r\n\r\n// Use production mode if packaged, or if ELECTRON_FORCE_PROD is set (for testing with built files)\r\nconst isDev = !app.isPackaged && process.env.ELECTRON_FORCE_PROD !== \"true\";\r\n\r\n// Support custom dev URL override (e.g., ELECTRON_DEV_URL=http://localhost:3001)\r\nconst devUrl = process.env.ELECTRON_DEV_URL || \"http://localhost:3000\";\r\n\r\nLog.debug(`[Electron] Mode: ${isDev ? \"DEVELOPMENT\" : \"PRODUCTION\"}`);\r\nLog.debug(`[Electron] Loading from: ${isDev ? devUrl : \"build/ assets\"}`);\r\n\r\nCreatorToolsHost.setHostType(2);\r\n\r\n// Install extensions in dev mode\r\nlet installExtension: any;\r\nlet REACT_DEVELOPER_TOOLS: any;\r\n\r\nif (isDev) {\r\n  const devTools = require(\"electron-devtools-installer\");\r\n  installExtension = devTools.default;\r\n  REACT_DEVELOPER_TOOLS = devTools.REACT_DEVELOPER_TOOLS;\r\n} else {\r\n  process.on(\"uncaughtException\", handleException);\r\n}\r\n\r\n// Squirrel setup handling\r\nconst appFolder = path.resolve(process.execPath, \"..\");\r\nconst rootAtomFolder = path.resolve(appFolder, \"..\");\r\nconst updateDotExe = path.resolve(path.join(rootAtomFolder, \"Update.exe\"));\r\nconst exeName = path.basename(process.execPath);\r\n\r\nfunction spawn(command: string, args: string[]): ChildProcess.ChildProcess | undefined {\r\n  let spawnedProcess: ChildProcess.ChildProcess | undefined = undefined;\r\n\r\n  try {\r\n    spawnedProcess = ChildProcess.spawn(command, args, { detached: true });\r\n  } catch (error) {\r\n    Log.error(\"Error starting process: \" + error);\r\n  }\r\n\r\n  return spawnedProcess;\r\n}\r\n\r\nfunction spawnUpdate(args: string[]): ChildProcess.ChildProcess | undefined {\r\n  return spawn(updateDotExe, args);\r\n}\r\n\r\nfunction handleStartupEvent(): boolean {\r\n  if (process.platform !== \"win32\") {\r\n    return false;\r\n  }\r\n\r\n  const squirrelCommand = process.argv[1];\r\n\r\n  switch (squirrelCommand) {\r\n    case \"--squirrel-install\":\r\n    case \"--squirrel-updated\":\r\n      spawnUpdate([\"--createShortcut\", exeName]);\r\n      setTimeout(app.quit, 1000);\r\n      return true;\r\n\r\n    case \"--squirrel-uninstall\":\r\n      spawnUpdate([\"--removeShortcut\", exeName]);\r\n      setTimeout(app.quit, 1000);\r\n      return true;\r\n\r\n    case \"--squirrel-obsolete\":\r\n      app.quit();\r\n      return true;\r\n\r\n    default:\r\n      return false;\r\n  }\r\n}\r\n\r\nhandleStartupEvent();\r\n\r\nif (squirrel) {\r\n  app.quit();\r\n}\r\n\r\n// App state\r\nlet _mainWindow: BrowserWindow | null = null;\r\nlet _commandHandler: WindowCommandHandler | null = null;\r\nlet _dedicatedServerCommandHandler: DedicatedServerCommandHandler | null = null;\r\nlet _webSocketCommandHandler: WebSocketCommandHandler | null = null;\r\nlet _fileSystemCommandHandler: FileSystemCommandHandler | null = null;\r\nlet _contentSourceManager: ContentSourceManager | null = null;\r\nlet _localCommandHandler: LocalCommandHandler | null = null;\r\n\r\nlet _tray: Tray | null = null;\r\nlet _appIsReady = false;\r\nlet _creatorToolsIsReady = false;\r\n\r\nlet _inputPath: string | null = null;\r\nlet _outPath: string | null = null;\r\nlet _oper: string | null = null;\r\nlet _appFolderNameLong = \"Minecraft Creator Tools\";\r\nlet _appFolderNameShort = \"mctools\";\r\nlet _contentLogger: ContentLogWatcher | undefined = undefined;\r\nlet _creatorTools: any = undefined;\r\nlet _env: LocalEnvironment | undefined = undefined;\r\nlet _utils: ElectronUtils | undefined = undefined;\r\nlet _customStoragePath: string | undefined = undefined;\r\n\r\nconst APP_MODE_MAINAPP = 0;\r\nconst APP_MODE_EXPORTWORLD = 1;\r\nconst APP_MODE_ERRORHELP = 99;\r\nconst APP_MODE_EXIT = 100;\r\n\r\nlet _mode = APP_MODE_MAINAPP;\r\n\r\nconst _appLock = app.requestSingleInstanceLock({ mode: _mode, initTime: new Date().getTime() });\r\n\r\nparseCommandLineArgs();\r\n\r\n/**\r\n * Get the base storage path for the app.\r\n */\r\nfunction _getStorageBasePath(): string {\r\n  if (_customStoragePath) {\r\n    let storagePath = _customStoragePath;\r\n    if (!storagePath.endsWith(NodeStorage.slashFolderDelimiter)) {\r\n      storagePath += NodeStorage.slashFolderDelimiter;\r\n    }\r\n    Log.debug(\"[Electron] Using custom storage path from --storage:\", storagePath);\r\n    return storagePath;\r\n  }\r\n\r\n  const testStorageRoot = process.env.MCT_TEST_STORAGE_ROOT;\r\n  if (testStorageRoot) {\r\n    let storagePath = testStorageRoot;\r\n    if (!storagePath.endsWith(NodeStorage.slashFolderDelimiter)) {\r\n      storagePath += NodeStorage.slashFolderDelimiter;\r\n    }\r\n    Log.debug(\"[Electron] Using test storage from MCT_TEST_STORAGE_ROOT:\", storagePath);\r\n    return storagePath;\r\n  }\r\n\r\n  return (\r\n    app.getPath(\"documents\") + NodeStorage.slashFolderDelimiter + _appFolderNameLong + NodeStorage.slashFolderDelimiter\r\n  );\r\n}\r\n\r\nfunction _getCreatorTools(): any {\r\n  const basePath = _getStorageBasePath();\r\n  Log.debug(\"[Electron] Storage base path:\", basePath);\r\n\r\n  CreatorToolsHost.prefsStorage = new NodeStorage(basePath + \"prefs\" + NodeStorage.slashFolderDelimiter, \"\");\r\n\r\n  CreatorToolsHost.projectsStorage = new NodeStorage(basePath + \"projects\" + NodeStorage.slashFolderDelimiter, \"\");\r\n\r\n  CreatorToolsHost.packStorage = new NodeStorage(basePath + \"packs\" + NodeStorage.slashFolderDelimiter, \"\");\r\n\r\n  CreatorToolsHost.worldStorage = new NodeStorage(basePath + \"worlds\" + NodeStorage.slashFolderDelimiter, \"\");\r\n\r\n  CreatorToolsHost.init();\r\n\r\n  const ct = CreatorToolsHost.getCreatorTools();\r\n\r\n  if (ct) {\r\n    ct.local = _env!.utilities;\r\n  }\r\n\r\n  return ct;\r\n}\r\n\r\nasync function _load(): Promise<void> {\r\n  _env = new LocalEnvironment(true);\r\n  _env.setWorldContainerPath(_getStorageBasePath() + \"worlds\" + path.sep);\r\n  _env.utilities.setProductNameSeed(_appFolderNameShort);\r\n\r\n  await _env.load();\r\n\r\n  _utils = new ElectronUtils(_env);\r\n\r\n  _creatorTools = _getCreatorTools();\r\n\r\n  await _creatorTools.load();\r\n\r\n  _contentLogger = new ContentLogWatcher(_env);\r\n\r\n  Database.local = _env.utilities;\r\n\r\n  _creatorToolsIsReady = true;\r\n\r\n  _creatorTools.onStatusAdded.subscribe(_handleStatusAdded);\r\n\r\n  _startWindow();\r\n}\r\n\r\n_load();\r\n\r\nif (!_appLock) {\r\n  Log.debug(\"App is already running; exiting this instance.\");\r\n  app.quit();\r\n  _mode = APP_MODE_EXIT;\r\n} else {\r\n  app.on(\"second-instance\", (_event, _commandLine, _workingDirectory, _additionalData) => {\r\n    if (_mainWindow) {\r\n      if (_mainWindow.isMinimized()) {\r\n        _mainWindow.restore();\r\n      }\r\n      _mainWindow.focus();\r\n    }\r\n  });\r\n}\r\n\r\nfunction _handleStatusAdded(_carto: any, statusItem: any): void {\r\n  Log.debug(\"Server Manager: \" + statusItem.message);\r\n\r\n  if (_mainWindow !== null && _mainWindow !== undefined) {\r\n    _mainWindow.webContents.send(\"appsvc\", \"statusMessage|\" + JSON.stringify(statusItem));\r\n  }\r\n}\r\n\r\nfunction parseCommandLineArgs(): void {\r\n  // In Electron, process.argv looks like:\r\n  // [0] = path to electron executable\r\n  // [1] = path to main script (e.g., main.mjs)\r\n  // [2+] = actual user arguments\r\n  // We need to skip argv[1] when checking for positional input path\r\n  const argsStartIndex = app.isPackaged ? 1 : 2; // Packaged app doesn't have main script in argv\r\n\r\n  for (let i = 1; i < process.argv.length; i++) {\r\n    const val = process.argv[i].toLowerCase();\r\n\r\n    if (val.length >= 2 && (val.startsWith(\"-\") || val.startsWith(\"/\"))) {\r\n      let arg = val.substring(1, val.length);\r\n\r\n      if (arg.startsWith(\"-\")) {\r\n        arg = arg.substring(1, arg.length);\r\n      }\r\n\r\n      switch (arg) {\r\n        case \"h\":\r\n        case \"?\":\r\n        case \"help\":\r\n          _mode = APP_MODE_ERRORHELP;\r\n          break;\r\n\r\n        case \"cmd\":\r\n        case \"c\":\r\n          if (i < process.argv.length - 1) {\r\n            i++;\r\n            _oper = process.argv[i];\r\n          }\r\n          break;\r\n\r\n        case \"i\":\r\n          if (i < process.argv.length - 1) {\r\n            i++;\r\n            _inputPath = process.argv[i];\r\n          }\r\n          break;\r\n\r\n        case \"outpath\":\r\n        case \"o\":\r\n        case \"out\":\r\n          if (i < process.argv.length - 1) {\r\n            i++;\r\n            _outPath = process.argv[i];\r\n          }\r\n          break;\r\n\r\n        case \"storage\":\r\n          if (i < process.argv.length - 1) {\r\n            i++;\r\n            _customStoragePath = process.argv[i];\r\n          }\r\n          break;\r\n        default:\r\n          break;\r\n      }\r\n    } else {\r\n      // Only treat as input path if it's the first user argument (after main script)\r\n      // and it's not the \".\" argument used in dev mode\r\n      if (i === argsStartIndex && process.argv[i] !== \".\") {\r\n        _inputPath = process.argv[i];\r\n      }\r\n    }\r\n  }\r\n\r\n  if (_oper != null) {\r\n    switch (_oper.toLowerCase()) {\r\n      case \"help\":\r\n        _mode = APP_MODE_ERRORHELP;\r\n        break;\r\n\r\n      case \"exportworld\":\r\n        if (_inputPath !== null && _outPath !== null) {\r\n          Log.debug(\"Running export world command - from '\" + _inputPath + \"' to '\" + _outPath + \"'\");\r\n          _mode = APP_MODE_EXPORTWORLD;\r\n        }\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n\r\n    if (_mode === APP_MODE_MAINAPP) {\r\n      _mode = APP_MODE_ERRORHELP;\r\n    }\r\n  }\r\n\r\n  if (_mode === APP_MODE_ERRORHELP) {\r\n    console.log(\"Usage: mct <input path> -cmd [command name] <additional arguments>\");\r\n    console.log(\"\\nArguments:\");\r\n    console.log(\"  <input path>   Path to the input file or folder\");\r\n    console.log(\"\\nCommands:\");\r\n    console.log(\"  server\");\r\n    console.log(\"    Runs the app in server management only mode.\");\r\n    console.log(\"\");\r\n    console.log(\"  exportworld\");\r\n    console.log(\"    Exports a starter world for a given behavior pack.\");\r\n    console.log(\"    Arguments for 'exportworld' commands\");\r\n    console.log(\"    -folder=<inputFolderPath> Input folder to read from\");\r\n    console.log(\"    -world=<output MC World file> MCWorld file to export\");\r\n    console.log(\"\");\r\n\r\n    app.quit();\r\n    app.exit(0);\r\n  } else if (_mode !== APP_MODE_EXIT) {\r\n    app.whenReady().then(() => {\r\n      if (!_appIsReady) {\r\n        session.defaultSession.webRequest.onBeforeSendHeaders(\r\n          {\r\n            urls: [\"*://*.npmjs.org/*\"],\r\n          },\r\n          (details, callback) => {\r\n            details.requestHeaders[\"Origin\"] = \"\";\r\n            callback({ requestHeaders: details.requestHeaders });\r\n          }\r\n        );\r\n      }\r\n      _appIsReady = true;\r\n      _startWindow();\r\n    });\r\n  }\r\n}\r\n\r\nfunction _startWindow(): void {\r\n  if (_creatorToolsIsReady && _appIsReady && _mode === APP_MODE_MAINAPP) {\r\n    _createTrayIcon();\r\n\r\n    _createMainAppWindow();\r\n\r\n    _contentLogger?.watchMinecraftReleaseFolder();\r\n\r\n    if (isDev) {\r\n      installExtension(REACT_DEVELOPER_TOOLS)\r\n        .then((name: any) => Log.debug(\"Added Extension:  \" + JSON.stringify(name)))\r\n        .catch((error: any) => Log.error(\"An error occurred: \" + error));\r\n    }\r\n\r\n    _registerShortcuts();\r\n  }\r\n}\r\n\r\nfunction _createMainAppWindow(): void {\r\n  const x = _creatorTools.windowX;\r\n  const y = _creatorTools.windowY;\r\n  let center = false;\r\n\r\n  if (x === 0 && y === 0) {\r\n    center = true;\r\n  }\r\n\r\n  const isMac = process.platform === \"darwin\";\r\n\r\n  _mainWindow = new BrowserWindow({\r\n    width: _creatorTools.windowWidth,\r\n    height: _creatorTools.windowHeight,\r\n    x: x,\r\n    y: y,\r\n    center: center,\r\n    frame: false,\r\n    titleBarStyle: isMac ? \"hiddenInset\" : \"hidden\",\r\n    trafficLightPosition: isMac ? { x: 16, y: 12 } : undefined,\r\n    webPreferences: {\r\n      nodeIntegration: false,\r\n      nodeIntegrationInSubFrames: false,\r\n      preload: path.join(__dirname, \"preload.js\"),\r\n      nodeIntegrationInWorker: false,\r\n      contextIsolation: true,\r\n    },\r\n    icon: path.join(__dirname, \"..\", \"..\", \"..\", \"build\", \"favicon.ico\"),\r\n  });\r\n\r\n  if (_creatorTools.windowState === 2) {\r\n    _mainWindow.maximize();\r\n  }\r\n\r\n  if (_commandHandler === null) {\r\n    _commandHandler = new WindowCommandHandler(_mainWindow, ipcMain, screen, _creatorTools);\r\n    _commandHandler.register();\r\n  }\r\n\r\n  if (_dedicatedServerCommandHandler === null) {\r\n    _dedicatedServerCommandHandler = new DedicatedServerCommandHandler(\r\n      _mainWindow,\r\n      ipcMain,\r\n      _env!,\r\n      _creatorTools,\r\n      _utils!\r\n    );\r\n  }\r\n\r\n  if (_webSocketCommandHandler === null) {\r\n    _webSocketCommandHandler = new WebSocketCommandHandler(_mainWindow, ipcMain, _env!);\r\n  }\r\n\r\n  if (_fileSystemCommandHandler === null) {\r\n    _fileSystemCommandHandler = new FileSystemCommandHandler(_mainWindow, ipcMain, _creatorTools, _env!, _utils!);\r\n  }\r\n\r\n  if (_contentSourceManager === null) {\r\n    _contentSourceManager = new ContentSourceManager(_mainWindow, ipcMain, _env!, _utils!);\r\n  }\r\n\r\n  if (_localCommandHandler === null) {\r\n    _localCommandHandler = new LocalCommandHandler(_mainWindow, ipcMain, _env!, _utils!);\r\n  }\r\n\r\n  _commandHandler.window = _mainWindow;\r\n\r\n  let indexHtmlPath = isDev\r\n    ? `${devUrl}?debug=true`\r\n    : `file://${path.join(__dirname, \"..\", \"..\", \"..\", \"build\", \"index.html\")}`;\r\n\r\n  let addedHash = false;\r\n\r\n  if (_inputPath !== null) {\r\n    if (!addedHash) {\r\n      indexHtmlPath += \"#\";\r\n      addedHash = true;\r\n    } else {\r\n      indexHtmlPath += \"&\";\r\n    }\r\n\r\n    // Resolve input path relative to app root (3 levels up from toolbuild/jsn/electron/)\r\n    const appRoot = path.join(__dirname, \"..\", \"..\", \"..\");\r\n    let currentPath = path.resolve(appRoot, _inputPath);\r\n\r\n    if (fs.existsSync(currentPath)) {\r\n      const statResult = fs.statSync(currentPath);\r\n\r\n      currentPath = StorageUtilities.canonicalizePath(currentPath);\r\n\r\n      if (statResult.isDirectory()) {\r\n        currentPath = StorageUtilities.ensureEndsWithDelimiter(currentPath);\r\n      }\r\n\r\n      const splitPath = StorageUtilities.getRootAndFocusPathFromInputPath(currentPath);\r\n\r\n      const targetPath =\r\n        StorageUtilities.ensureEndsWithDelimiter(\"<pt_\" + _utils!.ensureMappingForPath(splitPath.basePath) + \">\") +\r\n        (splitPath.focusPath ? StorageUtilities.ensureNotStartsWithDelimiter(splitPath.focusPath) : \"\");\r\n\r\n      indexHtmlPath += \"input=\" + encodeURIComponent(targetPath);\r\n    } else {\r\n      Log.debug(\"Input path does not exist appear to exist: \" + currentPath);\r\n    }\r\n  }\r\n\r\n  _mainWindow.loadURL(indexHtmlPath);\r\n\r\n  if (isDev) {\r\n    _mainWindow.webContents.openDevTools({ mode: \"detach\" });\r\n  } else {\r\n    Menu.setApplicationMenu(null);\r\n  }\r\n\r\n  _mainWindow.webContents.setWindowOpenHandler(({ url }) => {\r\n    if (url.toLowerCase().startsWith(\"https://\")) {\r\n      shell.openExternal(url);\r\n    }\r\n\r\n    return { action: \"deny\" };\r\n  });\r\n}\r\n\r\nfunction _createTrayIcon(): void {\r\n  try {\r\n    const iconName = process.platform === \"win32\" ? \"favicon.ico\" : \"favicon-32x32.png\";\r\n    const iconPath = path.join(__dirname, \"..\", \"..\", \"..\", \"build\", iconName);\r\n\r\n    _tray = new Tray(iconPath);\r\n\r\n    _tray.on(\"click\", _handleTrayClick);\r\n\r\n    _tray.setToolTip(\"Minecraft Creator Tools\");\r\n    _rebuildTrayMenu();\r\n  } catch (err: any) {\r\n    Log.debug(\"Failed to create tray icon: \" + err.message);\r\n    _tray = null;\r\n  }\r\n}\r\n\r\nfunction _rebuildTrayMenu(): void {\r\n  if (!_creatorTools || !_tray) {\r\n    return;\r\n  }\r\n\r\n  const tools: MenuItemConstructorOptions[] = [];\r\n  let addedCustomSep = false;\r\n  tools.push({ id: \"deploy\", label: \"Deploy\", click: _handleDeployClick });\r\n  tools.push({ id: \"sepA\", type: \"separator\" });\r\n  tools.push({ id: \"pinToTop\", label: \"Pin to top\", click: _pinToTop, type: \"checkbox\" });\r\n  tools.push({ id: \"viewMode\", label: \"Change View Mode\", click: _changeViewMode });\r\n\r\n  for (let i = 0; i < 9; i++) {\r\n    const ctool = _creatorTools.getCustomTool(i);\r\n\r\n    if (ctool && ctool.text) {\r\n      let name = ctool.name;\r\n\r\n      if (!name) {\r\n        name = \"Tool \" + (i + 1).toString();\r\n      }\r\n\r\n      let command: (() => void) | undefined = undefined;\r\n      switch (i) {\r\n        case 1:\r\n          command = _sendCommand1;\r\n          break;\r\n        case 2:\r\n          command = _sendCommand2;\r\n          break;\r\n        case 3:\r\n          command = _sendCommand3;\r\n          break;\r\n        case 4:\r\n          command = _sendCommand4;\r\n          break;\r\n        case 5:\r\n          command = _sendCommand5;\r\n          break;\r\n        case 6:\r\n          command = _sendCommand6;\r\n          break;\r\n        case 7:\r\n          command = _sendCommand7;\r\n          break;\r\n        case 8:\r\n          command = _sendCommand8;\r\n          break;\r\n        case 9:\r\n          command = _sendCommand9;\r\n          break;\r\n        default:\r\n          command = _sendCommand0;\r\n      }\r\n\r\n      if (!addedCustomSep) {\r\n        tools.push({ id: \"sepB\", type: \"separator\" });\r\n        addedCustomSep = true;\r\n      }\r\n\r\n      tools.push({\r\n        id: \"tool\" + i,\r\n        label: \"Ctrl-\" + (i + 1).toString() + \": \" + name,\r\n        click: command,\r\n      });\r\n    }\r\n  }\r\n  _tray.setContextMenu(Menu.buildFromTemplate(tools));\r\n}\r\n\r\nfunction _registerShortcuts(): void {\r\n  globalShortcut.register(\"CommandOrControl+`\", _sendFocus);\r\n  globalShortcut.register(\"CommandOrControl+1\", _sendCommand1);\r\n  globalShortcut.register(\"CommandOrControl+2\", _sendCommand2);\r\n  globalShortcut.register(\"CommandOrControl+3\", _sendCommand3);\r\n  globalShortcut.register(\"CommandOrControl+4\", _sendCommand4);\r\n  globalShortcut.register(\"CommandOrControl+5\", _sendCommand5);\r\n  globalShortcut.register(\"CommandOrControl+6\", _sendCommand6);\r\n  globalShortcut.register(\"CommandOrControl+7\", _sendCommand7);\r\n  globalShortcut.register(\"CommandOrControl+8\", _sendCommand8);\r\n  globalShortcut.register(\"CommandOrControl+9\", _sendCommand9);\r\n  globalShortcut.register(\"CommandOrControl+0\", _sendCommand0);\r\n}\r\n\r\nfunction _sendFocus(): void {\r\n  _mainWindow?.focus();\r\n}\r\n\r\nfunction _sendCommand1(): void {\r\n  _sendCommand(1);\r\n}\r\nfunction _sendCommand2(): void {\r\n  _sendCommand(2);\r\n}\r\nfunction _sendCommand3(): void {\r\n  _sendCommand(3);\r\n}\r\nfunction _sendCommand4(): void {\r\n  _sendCommand(4);\r\n}\r\nfunction _sendCommand5(): void {\r\n  _sendCommand(5);\r\n}\r\nfunction _sendCommand6(): void {\r\n  _sendCommand(6);\r\n}\r\nfunction _sendCommand7(): void {\r\n  _sendCommand(7);\r\n}\r\nfunction _sendCommand8(): void {\r\n  _sendCommand(8);\r\n}\r\nfunction _sendCommand9(): void {\r\n  _sendCommand(9);\r\n}\r\nfunction _sendCommand0(): void {\r\n  _sendCommand(10);\r\n}\r\n\r\nlet _isPinnedToTop = false;\r\n\r\nfunction _pinToTop(): void {\r\n  _isPinnedToTop = !_isPinnedToTop;\r\n\r\n  let level: \"normal\" | \"screen-saver\" = \"normal\";\r\n\r\n  if (_isPinnedToTop) {\r\n    level = \"screen-saver\";\r\n  }\r\n\r\n  _mainWindow?.setAlwaysOnTop(_isPinnedToTop, level);\r\n}\r\n\r\nfunction _changeViewMode(): void {}\r\n\r\nfunction _sendCommand(index: number): void {\r\n  if (_mainWindow !== null && _mainWindow !== undefined) {\r\n    _mainWindow.webContents.send(\"appsvc\", \"externalKeyPress|command\" + index);\r\n  }\r\n}\r\n\r\nfunction _handleTrayClick(): void {\r\n  if (_mainWindow === null) {\r\n    return;\r\n  }\r\n\r\n  _mainWindow.isVisible() ? _mainWindow.hide() : _mainWindow.show();\r\n}\r\n\r\nfunction _handleDeployClick(\r\n  _menuItem: MenuItem,\r\n  _window: BaseWindow | undefined,\r\n  _event: Electron.KeyboardEvent\r\n): void {\r\n  Log.debug(\"Deploying..\");\r\n}\r\n\r\nasync function minecraftShell(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n  const slargs = data.split(\"|\");\r\n\r\n  const command = slargs[1];\r\n\r\n  Log.debug(\"Running command: minecraft://\" + command);\r\n\r\n  open(\"minecraft://\" + command);\r\n\r\n  _mainWindow?.webContents.send(\"appsvc\", \"asyncminecraftShellComplete|\" + slargs[0] + \"|\");\r\n}\r\n\r\nif (_mode !== APP_MODE_ERRORHELP && _mode !== APP_MODE_EXIT) {\r\n  ipcMain.handle(\"asyncminecraftShell\", minecraftShell);\r\n\r\n  async function selectDirectory(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const results = await dialog.showOpenDialog(_mainWindow!, {\r\n      properties: [\"openDirectory\"],\r\n    });\r\n\r\n    const tokPaths: string[] = [];\r\n\r\n    if (results.filePaths) {\r\n      for (const filePath of results.filePaths) {\r\n        tokPaths.push(\"<pt_\" + _utils!.ensureMappingForPath(filePath) + \">\");\r\n      }\r\n    }\r\n\r\n    _mainWindow?.webContents.send(\"appsvc\", \"asyncselectDirectoryComplete|\" + slargs[0] + \"|\" + tokPaths);\r\n  }\r\n\r\n  ipcMain.handle(\"asyncselectDirectory\", selectDirectory);\r\n\r\n  app.on(\"window-all-closed\", () => {\r\n    if (process.platform !== \"darwin\") {\r\n      app.quit();\r\n    }\r\n  });\r\n\r\n  app.on(\"activate\", () => {\r\n    if (BrowserWindow.getAllWindows().length === 0) {\r\n      _createMainAppWindow();\r\n    }\r\n  });\r\n\r\n  async function recycleItem(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const itemPath = _utils!.deTokenizePath(slargs[1]);\r\n\r\n    if (!itemPath) {\r\n      _mainWindow?.webContents.send(\"appsvc\", \"asyncshellRecycleItemComplete|\" + slargs[0] + \"|Invalid path\");\r\n      return;\r\n    }\r\n\r\n    _utils!.validateFilePath(itemPath);\r\n\r\n    Log.debug(\"Recycling item '\" + itemPath + \"'\");\r\n\r\n    let result = \"\";\r\n\r\n    try {\r\n      await shell.trashItem(itemPath);\r\n    } catch (e: any) {\r\n      result = e.toString();\r\n    }\r\n\r\n    _mainWindow?.webContents.send(\"appsvc\", \"asyncshellRecycleItemComplete|\" + slargs[0] + \"|\" + result);\r\n  }\r\n  ipcMain.handle(\"asyncshellRecycleItem\", recycleItem);\r\n\r\n  async function reloadMct(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    await _creatorTools.load(true);\r\n\r\n    _rebuildTrayMenu();\r\n\r\n    _mainWindow?.webContents.send(\"appsvc\", \"asyncreloadMctComplete|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  ipcMain.handle(\"asyncreloadMct\", reloadMct);\r\n\r\n  async function openPath(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const itemPath = _utils!.deTokenizePath(slargs[1]);\r\n\r\n    if (!itemPath) {\r\n      _mainWindow?.webContents.send(\"appsvc\", \"asyncshellOpenPathComplete|\" + slargs[0] + \"|Invalid path\");\r\n      return;\r\n    }\r\n\r\n    _utils!.validateExecutableFilePath(itemPath);\r\n\r\n    const result = await shell.openPath(itemPath);\r\n\r\n    _mainWindow?.webContents.send(\"appsvc\", \"asyncshellOpenPathComplete|\" + slargs[0] + \"|\" + result);\r\n  }\r\n\r\n  ipcMain.handle(\"asyncshellOpenPath\", openPath);\r\n\r\n  async function openFolderInExplorer(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const folderPath = _utils!.deTokenizePath(slargs[1]);\r\n\r\n    if (!folderPath) {\r\n      _mainWindow?.webContents.send(\"appsvc\", \"asyncshellOpenFolderInExplorerComplete|\" + slargs[0] + \"|\");\r\n      return;\r\n    }\r\n\r\n    const result = await shell.openPath(folderPath);\r\n\r\n    const tok = _utils!.ensureMappingForPath(result);\r\n\r\n    let resultStr = \"asyncshellOpenFolderInExplorerComplete|\" + slargs[0] + \"|<pt_\" + tok + \">\";\r\n\r\n    _mainWindow?.webContents.send(\"appsvc\", resultStr);\r\n  }\r\n\r\n  ipcMain.handle(\"asyncshellOpenFolderInExplorer\", openFolderInExplorer);\r\n\r\n  async function logToConsole(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const firstPipe = data.indexOf(\"|\");\r\n\r\n    if (firstPipe >= 0) {\r\n      Log.debug(\"UX: \" + data.substring(firstPipe + 1, data.length));\r\n    }\r\n\r\n    _mainWindow?.webContents.send(\"appsvc\", \"asynclogToConsoleComplete|\" + data[0] + \"|\");\r\n  }\r\n\r\n  ipcMain.handle(\"asynclogToConsole\", logToConsole);\r\n}\r\n", "/**\r\n * Handles window management commands from the renderer process.\r\n *\r\n * This module manages window state (minimize, maximize, restore, side-dock)\r\n * and communicates state changes back to the renderer process via IPC.\r\n */\r\n\r\nimport { app, BrowserWindow, IpcMain, Screen, Display } from \"electron\";\r\nimport CreatorTools from \"../app/CreatorTools\";\r\nimport { WindowState } from \"../app/ICreatorToolsData\";\r\n\r\nexport class WindowCommandHandler {\r\n  displays: Display[] = [];\r\n  window: BrowserWindow;\r\n  ipcMain: IpcMain;\r\n  screen: Screen;\r\n  private _isPinnedToTop = false;\r\n  private _creatorTools: CreatorTools;\r\n\r\n  constructor(\r\n    browserWindow: BrowserWindow,\r\n    incomingIpcMain: IpcMain,\r\n    incomingScreen: Screen,\r\n    creatorTools: CreatorTools\r\n  ) {\r\n    this.window = browserWindow;\r\n    this.ipcMain = incomingIpcMain;\r\n    this.screen = incomingScreen;\r\n    this._creatorTools = creatorTools;\r\n\r\n    this.saveWindowStates = this.saveWindowStates.bind(this);\r\n\r\n    this.windowClose = this.windowClose.bind(this);\r\n    this.windowRestore = this.windowRestore.bind(this);\r\n    this.windowMaximize = this.windowMaximize.bind(this);\r\n    this.windowUpdate = this.windowUpdate.bind(this);\r\n    this.windowMinimize = this.windowMinimize.bind(this);\r\n    this.windowLeftSide = this.windowLeftSide.bind(this);\r\n    this.windowRightSide = this.windowRightSide.bind(this);\r\n    this.windowMove = this.windowMove.bind(this);\r\n    this.getWindowState = this.getWindowState.bind(this);\r\n    this.getPlatform = this.getPlatform.bind(this);\r\n    this._applySideDock = this._applySideDock.bind(this);\r\n    this.windowWasMoved = this.windowWasMoved.bind(this);\r\n    this.windowWasResized = this.windowWasResized.bind(this);\r\n\r\n    this.window.on(\"resized\", this.windowWasResized);\r\n    this.window.on(\"moved\", this.windowWasMoved);\r\n\r\n    this._loadSlots();\r\n\r\n    this._applyValues();\r\n  }\r\n\r\n  private _loadSlots(): void {\r\n    this.displays = this.screen.getAllDisplays();\r\n\r\n    // sort displays from left to right.\r\n    this.displays.sort((displayA, displayB) => {\r\n      return displayA.bounds.x * 1000 + displayA.bounds.y - (displayB.bounds.x * 1000 + displayB.bounds.y);\r\n    });\r\n\r\n    if ((this._creatorTools as any).slot === undefined) {\r\n      (this._creatorTools as any).slot = 0;\r\n    }\r\n\r\n    if ((this._creatorTools as any).slot >= this.displays.length * 2) {\r\n      (this._creatorTools as any).slot = this.displays.length * 2 - 1;\r\n    }\r\n\r\n    if ((this._creatorTools as any).windowState === WindowState.docked) {\r\n      this._applySideDock();\r\n    }\r\n  }\r\n\r\n  private _restoreFromSideDock(): void {\r\n    this._undoPinToTop();\r\n    this.window.setPosition(\r\n      Math.floor((this._creatorTools as any).windowX),\r\n      Math.floor((this._creatorTools as any).windowY)\r\n    );\r\n    this.window.setSize(\r\n      Math.floor((this._creatorTools as any).windowWidth),\r\n      Math.floor((this._creatorTools as any).windowHeight)\r\n    );\r\n  }\r\n\r\n  private _restore(): void {\r\n    if (this.window.isMaximized()) {\r\n      this.window.unmaximize();\r\n      this.window.restore();\r\n\r\n      (this._creatorTools as any).windowState = WindowState.regular;\r\n    }\r\n  }\r\n\r\n  private _applyValues(): void {\r\n    if ((this._creatorTools as any).windowX !== undefined && (this._creatorTools as any).windowY !== undefined) {\r\n      this.window.setPosition(\r\n        Math.floor((this._creatorTools as any).windowX),\r\n        Math.floor((this._creatorTools as any).windowY)\r\n      );\r\n    }\r\n\r\n    if (\r\n      (this._creatorTools as any).windowWidth !== undefined &&\r\n      (this._creatorTools as any).windowHeight !== undefined\r\n    ) {\r\n      this.window.setSize(\r\n        Math.floor((this._creatorTools as any).windowWidth),\r\n        Math.floor((this._creatorTools as any).windowHeight)\r\n      );\r\n    }\r\n  }\r\n\r\n  private _storeLastValues(): boolean {\r\n    let isChanged = false;\r\n\r\n    // Skip saving bounds when maximized or side-docked.\r\n    // On Windows, maximized windows report oversized bounds (e.g., x=-8, y=-8)\r\n    // that include hidden borders. Saving those would corrupt the normal-state\r\n    // dimensions, causing the window to restore slightly off-screen.\r\n    if (\r\n      (this._creatorTools as any).windowState !== WindowState.docked &&\r\n      (this._creatorTools as any).windowState !== WindowState.maximized &&\r\n      !this.window.isMaximized()\r\n    ) {\r\n      const pos = this.window.getPosition();\r\n\r\n      if ((this._creatorTools as any).windowX !== pos[0]) {\r\n        (this._creatorTools as any).windowX = pos[0];\r\n        isChanged = true;\r\n      }\r\n\r\n      if ((this._creatorTools as any).windowY !== pos[1]) {\r\n        (this._creatorTools as any).windowY = pos[1];\r\n        isChanged = true;\r\n      }\r\n\r\n      const size = this.window.getSize();\r\n\r\n      if ((this._creatorTools as any).windowWidth !== size[0]) {\r\n        (this._creatorTools as any).windowWidth = size[0];\r\n        isChanged = true;\r\n      }\r\n\r\n      if ((this._creatorTools as any).windowHeight !== size[1]) {\r\n        (this._creatorTools as any).windowHeight = size[1];\r\n        isChanged = true;\r\n      }\r\n    }\r\n\r\n    return isChanged;\r\n  }\r\n\r\n  private _doPinToTop(): void {\r\n    if (!this._isPinnedToTop) {\r\n      this._isPinnedToTop = true;\r\n\r\n      const level = \"screen-saver\";\r\n\r\n      this.window.setAlwaysOnTop(this._isPinnedToTop, level);\r\n    }\r\n  }\r\n\r\n  private _undoPinToTop(): void {\r\n    this._isPinnedToTop = false;\r\n\r\n    let level: \"normal\" | \"screen-saver\" = \"normal\";\r\n\r\n    if (this._isPinnedToTop) {\r\n      level = \"screen-saver\";\r\n    }\r\n\r\n    this.window.setAlwaysOnTop(this._isPinnedToTop, level);\r\n  }\r\n\r\n  private _applySideDock(): void {\r\n    this._doPinToTop();\r\n\r\n    const display = this.displays[Math.floor((this._creatorTools as any).slot / 2)];\r\n\r\n    const workArea = display.workArea;\r\n\r\n    if ((this._creatorTools as any).slot % 2 === 0) {\r\n      // Left side - not implemented\r\n    } else {\r\n      this.window.setPosition(\r\n        Math.floor(workArea.x + (workArea.width * 3) / 4),\r\n        Math.floor(workArea.y + workArea.height / 6)\r\n      );\r\n      this.window.setSize(Math.floor(workArea.width / 4), Math.floor((workArea.height * 2) / 3));\r\n    }\r\n  }\r\n\r\n  register(): void {\r\n    this.ipcMain.handle(\"asyncwindowClose\", this.windowClose);\r\n    this.ipcMain.handle(\"asyncwindowRestore\", this.windowRestore);\r\n    this.ipcMain.handle(\"asyncwindowMaximize\", this.windowMaximize);\r\n    this.ipcMain.handle(\"asyncwindowUpdate\", this.windowUpdate);\r\n    this.ipcMain.handle(\"asyncwindowMinimize\", this.windowMinimize);\r\n    this.ipcMain.handle(\"asyncwindowLeftSide\", this.windowLeftSide);\r\n    this.ipcMain.handle(\"asyncwindowRightSide\", this.windowRightSide);\r\n    this.ipcMain.handle(\"asyncgetWindowState\", this.getWindowState);\r\n    this.ipcMain.handle(\"asyncgetPlatform\", this.getPlatform);\r\n    this.ipcMain.handle(\"asyncwindowMove\", this.windowMove);\r\n  }\r\n\r\n  async getWindowState(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    let state = (this._creatorTools as any).windowState;\r\n\r\n    if (this.window.isMinimized()) {\r\n      state = WindowState.minimized;\r\n    } else if (this.window.isMaximized()) {\r\n      state = WindowState.maximized;\r\n    }\r\n\r\n    this.window.webContents.send(\"appsvc\", \"asyncgetWindowState|\" + slargs[0] + \"|\" + state);\r\n  }\r\n\r\n  async getPlatform(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    // Returns 'darwin' for macOS, 'win32' for Windows, 'linux' for Linux\r\n    const platform = process.platform;\r\n\r\n    this.window.webContents.send(\"appsvc\", \"asyncgetPlatform|\" + slargs[0] + \"|\" + platform);\r\n  }\r\n\r\n  async windowClose(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    this.window.webContents.send(\"appsvc\", \"asyncwindowClose|\" + slargs[0] + \"|\");\r\n\r\n    this.window.close();\r\n\r\n    app.quit();\r\n    app.exit(0);\r\n  }\r\n\r\n  async windowRestore(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    if (this.window.isMaximized()) {\r\n      this.window.unmaximize();\r\n    }\r\n\r\n    this.window.restore();\r\n\r\n    if ((this._creatorTools as any).windowState === WindowState.docked) {\r\n      this._restoreFromSideDock();\r\n    }\r\n\r\n    (this._creatorTools as any).windowState = WindowState.regular;\r\n\r\n    this._saveMct();\r\n\r\n    this.window.webContents.send(\"appsvc\", \"asyncwindowRestore|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  async windowLeftSide(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    if ((this._creatorTools as any).windowState !== WindowState.docked) {\r\n      this._restore();\r\n      this._storeLastValues();\r\n\r\n      this.setSlotFromClosest(10);\r\n\r\n      (this._creatorTools as any).windowState = WindowState.docked;\r\n    } else {\r\n      if ((this._creatorTools as any).slot > 0) {\r\n        (this._creatorTools as any).slot--;\r\n      }\r\n    }\r\n\r\n    this._applySideDock();\r\n    this._saveMct();\r\n\r\n    setTimeout(this._applySideDock.bind(this), 1);\r\n\r\n    this.window.webContents.send(\"appsvc\", \"asyncwindowLeftSide|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  async windowRightSide(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    if ((this._creatorTools as any).windowState !== WindowState.docked) {\r\n      this._restore();\r\n      this._storeLastValues();\r\n\r\n      this.setSlotFromClosest(1);\r\n\r\n      (this._creatorTools as any).windowState = WindowState.docked;\r\n    } else {\r\n      if ((this._creatorTools as any).slot < this.displays.length * 2) {\r\n        (this._creatorTools as any).slot++;\r\n      }\r\n    }\r\n\r\n    this._applySideDock();\r\n    this._saveMct();\r\n\r\n    setTimeout(this._applySideDock, 1);\r\n\r\n    this.window.webContents.send(\"appsvc\", \"asyncwindowRightSide|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  setSlotFromClosest(divisor: number): void {\r\n    let slotCount = 0;\r\n    let slotDist = 9999999;\r\n    const pos = this.window.getPosition();\r\n    const size = this.window.getSize();\r\n\r\n    const x = pos[0] + size[0] / divisor;\r\n\r\n    for (let i = 0; i < this.displays.length; i++) {\r\n      const display = this.displays[i];\r\n      const workArea = display.workArea;\r\n\r\n      const leftX = Math.floor(workArea.x);\r\n      const rightX = Math.floor(workArea.x + (workArea.width * 3) / 4);\r\n\r\n      if (Math.abs(leftX - x) < slotDist) {\r\n        slotCount = i * 2;\r\n        slotDist = Math.abs(leftX - x);\r\n      }\r\n\r\n      if (Math.abs(rightX - x) < slotDist) {\r\n        slotCount = i * 2 + 1;\r\n        slotDist = Math.abs(rightX - x);\r\n      }\r\n    }\r\n\r\n    (this._creatorTools as any).slot = slotCount;\r\n  }\r\n\r\n  async windowMaximize(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    if ((this._creatorTools as any).windowState === WindowState.docked) {\r\n      this._restoreFromSideDock();\r\n    }\r\n\r\n    this.window.maximize();\r\n    (this._creatorTools as any).windowState = WindowState.maximized;\r\n    this._saveMct();\r\n\r\n    this.window.webContents.send(\"appsvc\", \"asyncwindowMaximize|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  saveWindowStates(): void {\r\n    if (this._storeLastValues()) {\r\n      this._saveMct();\r\n    }\r\n  }\r\n\r\n  windowWasMoved(): void {\r\n    if ((this._creatorTools as any).windowState === WindowState.docked) {\r\n      (this._creatorTools as any).windowState = WindowState.regular;\r\n      this._undoPinToTop();\r\n    }\r\n\r\n    this.saveWindowStates();\r\n  }\r\n\r\n  windowWasResized(): void {\r\n    if ((this._creatorTools as any).windowState === WindowState.docked) {\r\n      (this._creatorTools as any).windowState = WindowState.regular;\r\n      this._undoPinToTop();\r\n    }\r\n\r\n    this.saveWindowStates();\r\n  }\r\n\r\n  async windowUpdate(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    this.saveWindowStates();\r\n\r\n    this.window.webContents.send(\"appsvc\", \"asyncwindowUpdate|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  async windowMinimize(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    this.window.minimize();\r\n    this._saveMct();\r\n\r\n    this.window.webContents.send(\"appsvc\", \"asyncwindowMinimize|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  async windowMove(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    if (slargs.length === 3) {\r\n      const xPos = parseInt(slargs[1]);\r\n      const yPos = parseInt(slargs[2]);\r\n\r\n      const curPos = this.window.getPosition();\r\n\r\n      this.window.setPosition(curPos[0] + xPos, curPos[1] + yPos);\r\n\r\n      (this._creatorTools as any).windowX = xPos;\r\n      (this._creatorTools as any).windowY = yPos;\r\n\r\n      this._saveMct();\r\n    }\r\n\r\n    this.window.webContents.send(\"appsvc\", \"asyncwindowMove|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  private _saveMct(): void {\r\n    (this._creatorTools as any).save();\r\n\r\n    if (this.window !== undefined) {\r\n      this.window.webContents.send(\"appsvc\", \"mctSavedInAppService|\");\r\n    }\r\n  }\r\n}\r\n\r\nexport default WindowCommandHandler;\r\n", "/**\r\n * Handles Dedicated Server commands from the renderer process.\r\n *\r\n * This module manages the Minecraft Dedicated Server lifecycle, including\r\n * starting, stopping, and sending commands to the server.\r\n */\r\n\r\nimport { BrowserWindow, IpcMain } from \"electron\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ServerManager from \"../local/ServerManager\";\r\nimport LocalEnvironment from \"../local/LocalEnvironment\";\r\nimport CreatorTools from \"../app/CreatorTools\";\r\nimport DedicatedServer from \"../local/DedicatedServer\";\r\nimport ServerMessage, { ServerMessageCategory } from \"../local/ServerMessage\";\r\nimport ElectronUtils from \"./ElectronUtils\";\r\nimport { IDebugSessionInfo, IStatData, IProfilerCaptureEvent } from \"../debugger/IMinecraftDebugProtocol\";\r\n\r\nexport class DedicatedServerCommandHandler {\r\n  private _dsm: ServerManager;\r\n  private _pendingCommands: string[] = [];\r\n  private _pendingRequestIds: string[] = [];\r\n\r\n  private _activeStdIn: any = null;\r\n  private _currentCommandId = 0;\r\n  private _lastResult = \"\";\r\n  private _activeProcess: any = null;\r\n  private _window: BrowserWindow;\r\n  private _ipcMain: IpcMain;\r\n  private _utils: ElectronUtils;\r\n\r\n  constructor(\r\n    browserWindow: BrowserWindow,\r\n    incomingIpcMain: IpcMain,\r\n    env: LocalEnvironment,\r\n    creatorTools: CreatorTools,\r\n    utils: ElectronUtils\r\n  ) {\r\n    this._window = browserWindow;\r\n    this._ipcMain = incomingIpcMain;\r\n    this._utils = utils;\r\n\r\n    this.startServer = this.startServer.bind(this);\r\n    this.stopServer = this.stopServer.bind(this);\r\n    this.handleServerOutput = this.handleServerOutput.bind(this);\r\n    this.handleServerStopped = this.handleServerStopped.bind(this);\r\n    this.getDedicatedServerProjectPath = this.getDedicatedServerProjectPath.bind(this);\r\n    this.getDedicatedServerWorldPath = this.getDedicatedServerWorldPath.bind(this);\r\n    this.getDedicatedServerStatus = this.getDedicatedServerStatus.bind(this);\r\n    this.command = this.command.bind(this);\r\n    this.debugPause = this.debugPause.bind(this);\r\n    this.debugResume = this.debugResume.bind(this);\r\n    this.debugStartProfiler = this.debugStartProfiler.bind(this);\r\n    this.debugStopProfiler = this.debugStopProfiler.bind(this);\r\n\r\n    this._dsm = new ServerManager(env, creatorTools as any);\r\n    this._dsm.onServerOutput.subscribe(this.handleServerOutput);\r\n    this._dsm.onServerStopped.subscribe(this.handleServerStopped);\r\n\r\n    // Subscribe to debug events from the ServerManager and forward them via IPC\r\n    this._dsm.onDebugConnected.subscribe(this._handleDebugConnected.bind(this));\r\n    this._dsm.onDebugDisconnected.subscribe(this._handleDebugDisconnected.bind(this));\r\n    this._dsm.onDebugStats.subscribe(this._handleDebugStats.bind(this));\r\n    this._dsm.onDebugPaused.subscribe(this._handleDebugPaused.bind(this));\r\n    this._dsm.onDebugResumed.subscribe(this._handleDebugResumed.bind(this));\r\n    this._dsm.onProfilerCapture.subscribe(this._handleProfilerCapture.bind(this));\r\n\r\n    this._ipcMain.handle(\"asyncstartDedicatedServer\", this.startServer);\r\n    this._ipcMain.handle(\"asyncstopDedicatedServer\", this.stopServer);\r\n    this._ipcMain.handle(\"asyncdedicatedServerCommand\", this.command);\r\n    this._ipcMain.handle(\"asyncgetDedicatedServerProjectDir\", this.getDedicatedServerProjectPath);\r\n    this._ipcMain.handle(\"asyncgetDedicatedServerStatus\", this.getDedicatedServerStatus);\r\n    this._ipcMain.handle(\"asyncgetDedicatedServerWorldDir\", this.getDedicatedServerWorldPath);\r\n    this._ipcMain.handle(\"asyncdebugPause\", this.debugPause);\r\n    this._ipcMain.handle(\"asyncdebugResume\", this.debugResume);\r\n    this._ipcMain.handle(\"asyncdebugStartProfiler\", this.debugStartProfiler);\r\n    this._ipcMain.handle(\"asyncdebugStopProfiler\", this.debugStopProfiler);\r\n  }\r\n\r\n  command(_event: Electron.IpcMainInvokeEvent, data: string): void {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const newCommand = this._pendingCommands.length;\r\n\r\n    if (Utilities.isUsableAsObjectKey(String(newCommand))) {\r\n      this._pendingCommands[newCommand] = slargs[1];\r\n      this._pendingRequestIds[newCommand] = slargs[0];\r\n    }\r\n\r\n    if (newCommand === this._currentCommandId) {\r\n      this.executeNextCommand();\r\n    }\r\n  }\r\n\r\n  async executeNextCommand(): Promise<void> {\r\n    if (this._currentCommandId < this._pendingCommands.length) {\r\n      this._currentCommandId++;\r\n\r\n      const nextCommand = this._currentCommandId - 1;\r\n\r\n      if (nextCommand >= this._pendingCommands.length) {\r\n        return;\r\n      }\r\n\r\n      const commandLine = this._pendingCommands[nextCommand];\r\n\r\n      const srv = await this._dsm.ensureActiveServer(0);\r\n\r\n      if (!srv) {\r\n        return;\r\n      }\r\n\r\n      await srv.writeToServer(commandLine);\r\n\r\n      this._window.webContents.send(\r\n        \"appsvc\",\r\n        \"asyncdedicatedServerComplete|\" + this._pendingRequestIds[nextCommand] + \"|\" + this._lastResult\r\n      );\r\n\r\n      await this.executeNextCommand();\r\n    }\r\n  }\r\n\r\n  async getDedicatedServerStatus(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const ds = this._dsm.getActiveServer(0);\r\n\r\n    if (!ds) {\r\n      this._window.webContents.send(\"appsvc\", \"asyncgetDedicatedServerStatusComplete|\" + slargs[0] + \"|-1\");\r\n    } else {\r\n      this._window.webContents.send(\r\n        \"appsvc\",\r\n        \"asyncgetDedicatedServerStatusComplete|\" + slargs[0] + \"|\" + ds.status.toString()\r\n      );\r\n    }\r\n  }\r\n\r\n  async getDedicatedServerProjectPath(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const ds = this._dsm.getActiveServer(0);\r\n\r\n    let projectPath = ds ? ds.serverPath : \"\";\r\n    if (projectPath && projectPath.length > 0) {\r\n      const uniqueId = this._utils.ensureMappingForPath(projectPath);\r\n      projectPath = \"<pt_\" + uniqueId + \">\";\r\n    }\r\n\r\n    this._window.webContents.send(\r\n      \"appsvc\",\r\n      \"asyncgetDedicatedServerProjectDirComplete|\" + slargs[0] + \"|\" + projectPath\r\n    );\r\n  }\r\n\r\n  async getDedicatedServerWorldPath(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const ds = this._dsm.getActiveServer(0);\r\n\r\n    const rawWorldPath = ds?.defaultWorldFolder?.fullPath ?? \"\";\r\n\r\n    let worldPath = rawWorldPath;\r\n    if (rawWorldPath.length > 0) {\r\n      const uniqueId = this._utils.ensureMappingForPath(rawWorldPath);\r\n      worldPath = \"<pt_\" + uniqueId + \">\";\r\n    }\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncgetDedicatedServerWorldDirComplete|\" + slargs[0] + \"|\" + worldPath);\r\n  }\r\n\r\n  async stopServer(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    await this._dsm.stopAllDedicatedServers();\r\n\r\n    this._window.webContents.send(\"appsvc\", \"dedicatedServerStopped|\");\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncdedicatedServerStopComplete|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  processServerState(serverState: string): any {\r\n    let mess: any = {};\r\n\r\n    if (serverState !== \"\") {\r\n      try {\r\n        mess = JSON.parse(serverState);\r\n      } catch (e) {\r\n        return {};\r\n      }\r\n\r\n      (\r\n        this._dsm.environment as any\r\n      ).iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula = mess.iagree;\r\n    }\r\n\r\n    return mess;\r\n  }\r\n\r\n  async startServer(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const serverState = slargs[1];\r\n\r\n    const mess = this.processServerState(serverState);\r\n\r\n    const srv = await this._dsm.ensureActiveServer(0, mess);\r\n\r\n    if (!srv) {\r\n      this._window.webContents.send(\"appsvc\", \"dedicatedServerError|Could not create a server.\");\r\n      return;\r\n    }\r\n\r\n    await srv.startServer(false, mess);\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncdedicatedServerStartComplete|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  handleServerOutput(_server: DedicatedServer, message: ServerMessage | null): void {\r\n    if (!message || !message.fullMessage) {\r\n      return;\r\n    }\r\n\r\n    // Don't forward internal system messages (e.g., querytarget polling output) to the renderer\r\n    if (message.category === ServerMessageCategory.internalSystemMessage) {\r\n      return;\r\n    }\r\n\r\n    if (message.fullMessage.indexOf(\"Server started\") >= 0) {\r\n      this._window.webContents.send(\"appsvc\", \"dedicatedServerStarted|\");\r\n    }\r\n\r\n    this._window.webContents.send(\"appsvc\", \"dedicatedServerMessage|\" + message.fullMessage);\r\n  }\r\n\r\n  handleServerStopped(_server: DedicatedServer, _message: string): void {\r\n    this._window.webContents.send(\"appsvc\", \"dedicatedServerStopped|\");\r\n  }\r\n\r\n  // ============================================================================\r\n  // Debug Event Handlers - Forward debug events from ServerManager to renderer\r\n  // ============================================================================\r\n\r\n  private _handleDebugConnected(_server: DedicatedServer, sessionInfo: IDebugSessionInfo): void {\r\n    const body = {\r\n      eventName: \"debugConnected\",\r\n      protocolVersion: sessionInfo.protocolVersion,\r\n      sessionId: sessionInfo.targetModuleUuid,\r\n    };\r\n    this._window.webContents.send(\"appsvc\", \"dedicatedServerDebugConnected|\" + JSON.stringify(body));\r\n  }\r\n\r\n  private _handleDebugDisconnected(_server: DedicatedServer, reason: string): void {\r\n    const body = {\r\n      eventName: \"debugDisconnected\",\r\n      reason: reason,\r\n    };\r\n    this._window.webContents.send(\"appsvc\", \"dedicatedServerDebugDisconnected|\" + JSON.stringify(body));\r\n  }\r\n\r\n  private _handleDebugStats(\r\n    _server: DedicatedServer,\r\n    statsData: { tick: number; stats: IStatData[] }\r\n  ): void {\r\n    // Flatten IStatData to IDebugStatItem format for the renderer\r\n    const items = statsData.stats.map((s) => ({\r\n      name: s.name,\r\n      values: s.values,\r\n      parent: s.parent_name || undefined,\r\n    }));\r\n\r\n    const body = {\r\n      eventName: \"debugStats\",\r\n      tick: statsData.tick,\r\n      stats: items,\r\n    };\r\n    this._window.webContents.send(\"appsvc\", \"dedicatedServerDebugStats|\" + JSON.stringify(body));\r\n  }\r\n\r\n  private _handleDebugPaused(_server: DedicatedServer, reason: string): void {\r\n    const body = {\r\n      eventName: \"debugPaused\",\r\n      reason: reason,\r\n    };\r\n    this._window.webContents.send(\"appsvc\", \"dedicatedServerDebugPaused|\" + JSON.stringify(body));\r\n  }\r\n\r\n  private _handleDebugResumed(_server: DedicatedServer): void {\r\n    const body = {\r\n      eventName: \"debugResumed\",\r\n    };\r\n    this._window.webContents.send(\"appsvc\", \"dedicatedServerDebugResumed|\" + JSON.stringify(body));\r\n  }\r\n\r\n  private _handleProfilerCapture(_server: DedicatedServer, captureEvent: IProfilerCaptureEvent): void {\r\n    const body = {\r\n      eventName: \"profilerCapture\",\r\n      captureBasePath: captureEvent.capture_base_path,\r\n      captureData: captureEvent.capture_data,\r\n    };\r\n    this._window.webContents.send(\"appsvc\", \"dedicatedServerProfilerCapture|\" + JSON.stringify(body));\r\n  }\r\n\r\n  // ============================================================================\r\n  // Debug Command Handlers - Forward debug commands from renderer to debug client\r\n  // ============================================================================\r\n\r\n  async debugPause(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n    const ds = this._dsm.getActiveServer(0);\r\n    if (ds?.debugClient) {\r\n      ds.debugClient.pause();\r\n    }\r\n    this._window.webContents.send(\"appsvc\", \"asyncdebugPauseComplete|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  async debugResume(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n    const ds = this._dsm.getActiveServer(0);\r\n    if (ds?.debugClient) {\r\n      ds.debugClient.resume();\r\n    }\r\n    this._window.webContents.send(\"appsvc\", \"asyncdebugResumeComplete|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  async debugStartProfiler(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n    const ds = this._dsm.getActiveServer(0);\r\n    if (ds?.debugClient) {\r\n      try {\r\n        ds.debugClient.startProfiler();\r\n        // Send profiler state update\r\n        const body = { eventName: \"debugProfilerState\", isRunning: true };\r\n        this._window.webContents.send(\r\n          \"appsvc\",\r\n          \"dedicatedServerDebugProfilerState|\" + JSON.stringify(body)\r\n        );\r\n      } catch (e) {\r\n        // Profiler not supported\r\n      }\r\n    }\r\n    this._window.webContents.send(\"appsvc\", \"asyncdebugStartProfilerComplete|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  async debugStopProfiler(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n    const ds = this._dsm.getActiveServer(0);\r\n    if (ds?.debugClient) {\r\n      try {\r\n        ds.debugClient.stopProfiler(\"profiler_captures\");\r\n        // Send profiler state update\r\n        const body = { eventName: \"debugProfilerState\", isRunning: false };\r\n        this._window.webContents.send(\r\n          \"appsvc\",\r\n          \"dedicatedServerDebugProfilerState|\" + JSON.stringify(body)\r\n        );\r\n      } catch (e) {\r\n        // Profiler not supported\r\n      }\r\n    }\r\n    this._window.webContents.send(\"appsvc\", \"asyncdebugStopProfilerComplete|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  register(): void {\r\n    // All handlers are registered in constructor\r\n  }\r\n}\r\n\r\nexport default DedicatedServerCommandHandler;\r\n", "/**\r\n * ARCHITECTURE DOCUMENTATION: ServerManager - Dedicated Server Orchestration\r\n * ===========================================================================\r\n *\r\n * ServerManager is the central orchestrator for Minecraft Bedrock Dedicated Server\r\n * instances. It handles downloading, provisioning, and managing the lifecycle of\r\n * one or more DedicatedServer instances.\r\n *\r\n * ## Core Responsibilities\r\n *\r\n * 1. **Server Version Management**: Download and track Bedrock Dedicated Server versions\r\n * 2. **Server Provisioning**: Create runtime server instances from source downloads\r\n * 3. **Multi-Slot Support**: Manage multiple concurrent server instances on different ports\r\n * 4. **Pack Cache Management**: Extract and cache add-on packages for deployment\r\n * 5. **HTTP Server Integration**: Host web API and WebSocket notifications via HttpServer\r\n * 6. **Event Aggregation**: Bubble up events from individual DedicatedServer instances\r\n *\r\n * ## Server Download & Source Architecture\r\n *\r\n * The architecture separates \"source\" servers from \"runtime\" servers:\r\n *\r\n * ```\r\n * minecraft.net                 Source Servers                  Runtime Servers\r\n *      \u2502                            \u2502                                \u2502\r\n *      \u2502 downloadLatestSourceServer \u2502                                \u2502\r\n *      \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25BA\u2502 bwv1.21.50.24/                 \u2502\r\n *      \u2502                            \u2502   \u251C\u2500 bedrock_server.exe        \u2502\r\n *      \u2502                            \u2502   \u251C\u2500 behavior_packs/           \u2502 prepareTempServerNameAndPath\r\n *      \u2502                            \u2502   \u251C\u2500 resource_packs/           \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25BA\r\n *      \u2502                            \u2502   \u251C\u2500 definitions/              \u2502 srv20260101120000/\r\n *      \u2502                            \u2502   \u2514\u2500 ...                       \u2502   \u251C\u2500 bedrock_server.exe (copy)\r\n *      \u2502                            \u2502                                \u2502   \u251C\u2500 behavior_packs/ (symlink)\r\n *      \u2502                            \u2502                                \u2502   \u251C\u2500 resource_packs/ (symlink)\r\n *      \u2502                            \u2502                                \u2502   \u251C\u2500 development_behavior_packs/\r\n *      \u2502                            \u2502                                \u2502   \u251C\u2500 development_resource_packs/\r\n *      \u2502                            \u2502                                \u2502   \u2514\u2500 worlds/defaultWorld/\r\n * ```\r\n *\r\n * **Source Servers** (stored in `%LOCALAPPDATA%/mctools_server/serverSources/`):\r\n * - Downloaded once per version from minecraft.net\r\n * - Named with format: `<type>v<version>/` (e.g., `bwv1.21.50.24/` for Bedrock Windows)\r\n * - Type prefixes: `bw` (Bedrock Windows), `bl` (Bedrock Linux), `pw`/`pl` (Preview)\r\n * - Contains the original, unmodified server files\r\n *\r\n * **Runtime Servers** (stored in `%LOCALAPPDATA%/mctools_server/servers/`):\r\n * - Created per-session with timestamp names: `srv<YYYYMMDDHHMMSS>/`\r\n * - Use symbolic links (junctions on Windows) to share static content with source\r\n * - Have their own writable folders for worlds, config, and development packs\r\n *\r\n * ## Symbolic Link Strategy\r\n *\r\n * To minimize disk usage and allow quick server provisioning, runtime servers use\r\n * symbolic links to reference static content from source servers:\r\n *\r\n * | Folder/File              | Strategy     | Reason                                  |\r\n * |--------------------------|--------------|------------------------------------------|\r\n * | bedrock_server[.exe]     | File COPY    | Symlinks don't work reliably for files  |\r\n * | behavior_packs/          | Symlink      | Read-only vanilla content               |\r\n * | resource_packs/          | Symlink      | Read-only vanilla content               |\r\n * | definitions/             | Symlink      | Read-only vanilla definitions           |\r\n * | structures/              | Symlink      | Read-only vanilla structures            |\r\n * | world_templates/         | Symlink      | Read-only vanilla world templates       |\r\n * | development_behavior_packs/ | Real folder | Writable, for deployed add-ons        |\r\n * | development_resource_packs/ | Real folder | Writable, for deployed add-ons        |\r\n * | worlds/                  | Real folder  | Writable, for world data               |\r\n * | config/                  | Real folder  | Writable, for server config            |\r\n *\r\n * **Platform-specific symlink handling:**\r\n * - Windows: Uses \"junction\" symlinks (work without admin/developer mode)\r\n * - Linux/macOS: Uses \"dir\" symlinks (work without elevated privileges)\r\n * - Fallback: If symlink creation fails, directories are copied instead\r\n *\r\n * ## Smart Reprovisioning & Backup Discipline\r\n *\r\n * To optimize stop/start cycles and protect world data, the system implements:\r\n *\r\n * **Smart Reprovisioning Detection** (`needsReprovisioning()`):\r\n * - Tracks provisioning info per slot: source path, version, timestamp\r\n * - On start, compares requested source with last-provisioned source\r\n * - If same source and folder exists: SKIP file operations (fast restart)\r\n * - If different source: REPROVISION with backup first\r\n *\r\n * **Backup Before Destructive Operations** (`backupSlotWorldData()`):\r\n * Before replacing/reprovisioning a slot's server files:\r\n * 1. Locate the default world folder (e.g., `slot0/worlds/defaultWorld/`)\r\n * 2. Create timestamped backup: `worldBackups/slot0/backup_YYYYMMDD_HHMMSS/`\r\n * 3. Copy world data to backup folder\r\n * 4. Only then proceed with destructive file operations\r\n *\r\n * **Slot Update Helpers**:\r\n * - `updateDedicatedServerSymLinkFolder()`: Removes old symlink/dir, creates fresh symlink\r\n * - `updateDedicatedServerFile()`: Overwrites file in place (critical for firewall rules)\r\n *\r\n * This discipline ensures:\r\n * - No world data is ever lost during version updates\r\n * - Users can recover from failed updates via backups\r\n * - Stop/start cycles are fast (no unnecessary file operations)\r\n * - Source server version changes are handled gracefully\r\n *\r\n * ## Linux Compatibility\r\n *\r\n * The server management system supports both Windows and Linux:\r\n *\r\n * | Feature                  | Windows                  | Linux                       |\r\n * |--------------------------|--------------------------|------------------------------|\r\n * | Executable name          | bedrock_server.exe       | bedrock_server              |\r\n * | Symlink type             | junction                 | dir                         |\r\n * | Library path             | (not needed)             | LD_LIBRARY_PATH set         |\r\n * | Executable permissions   | (not needed)             | chmod +x applied            |\r\n * | Signature verification   | Authenticode check       | Skipped (not supported)     |\r\n *\r\n * ## Pack Cache System\r\n *\r\n * Add-on packages (.mcaddon, .mcpack) are extracted to a cache folder to avoid\r\n * repeated extraction. The cache uses content hashes to identify unique versions:\r\n *\r\n * ```\r\n * %LOCALAPPDATA%/mctools_pack_cache/\r\n *   \u2514\u2500 my_addon_<hash>/\r\n *       \u251C\u2500 behavior_pack/\r\n *       \u2514\u2500 resource_pack/\r\n * ```\r\n *\r\n * During server provisioning, pack cache folders are referenced via symbolic links\r\n * in the runtime server's development_*_packs folders.\r\n *\r\n * ## Multi-Slot Architecture\r\n *\r\n * ServerManager supports running multiple server instances simultaneously using\r\n * a slot-based port allocation scheme:\r\n *\r\n * | Slot | Base Port | Use Case                                    |\r\n * |------|-----------|---------------------------------------------|\r\n * | 0    | 19132     | Default Minecraft port                      |\r\n * | 1    | 19164     | Second server instance                      |\r\n * | 2    | 19196     | Third server instance                       |\r\n * | ...  | +32/slot  | Additional instances (up to slot 79)        |\r\n *\r\n * Each slot has its own DedicatedServer instance, world backup folder, and\r\n * independent lifecycle.\r\n *\r\n * ### Slot Prefix for Context Isolation\r\n *\r\n * To prevent different commands/contexts from interfering with each other's\r\n * server instances, ServerManager supports a `slotPrefix` property. This prefix\r\n * is prepended to slot folder names:\r\n *\r\n * | Context        | Prefix   | Folder Names                           |\r\n * |----------------|----------|----------------------------------------|\r\n * | MCP command    | \"mcp\"    | mcp0/, mcp1/, ...                      |\r\n * | Serve command  | \"serve\"  | serve0/, serve1/, ...                  |\r\n * | VS Code ext    | \"vscode\" | vscode0/, vscode1/, ...                |\r\n * | Default        | \"\"       | slot0/, slot1/, ... (backward compat)  |\r\n *\r\n * This ensures that running `mct mcp` doesn't reuse or interfere with servers\r\n * from `mct serve` or the VS Code extension, and vice versa.\r\n *\r\n * ## Version Detection\r\n *\r\n * Server versions are retrieved from two sources:\r\n * 1. Primary: minecraft.net version service API\r\n * 2. Fallback: Mojang bedrock-samples GitHub repository version.json\r\n *\r\n * Both retail and preview tracks are supported, with version info including:\r\n * - Version string (e.g., \"1.21.50.24\")\r\n * - Version index for comparison (derived from version components)\r\n * - Download URL prefix for each platform\r\n *\r\n * ## Related Files\r\n *\r\n * - DedicatedServer.ts: Individual server instance management\r\n * - HttpServer.ts: Web API and WebSocket server for remote management\r\n * - LocalEnvironment.ts: Environment configuration (paths, EULA acceptance)\r\n * - LocalUtilities.ts: Platform-specific path utilities\r\n * - ServerConfigManager.ts: Manages server config JSON files\r\n * - ServerPropertiesManager.ts: Manages server.properties file\r\n * - Package.ts: Represents cached add-on packages\r\n *\r\n * ## Key Methods\r\n *\r\n * - `downloadLatestSourceServer()`: Download Bedrock server from minecraft.net\r\n * - `prepareSlotServerPath()`: Create/update slot-based runtime server (smart reprovisioning)\r\n * - `needsReprovisioning()`: Check if a slot needs file operations\r\n * - `backupSlotWorldData()`: Backup world data before destructive operations\r\n * - `ensureActiveServer()`: Get or create a DedicatedServer for a slot\r\n * - `deployPackCache()`: Extract add-on packages to cache folder\r\n * - `preparePacksAndTemplates()`: Set up pack references for a world\r\n * - `updateDedicatedServerSymLinkFolder()`: Update symlink for a slot folder\r\n * - `updateDedicatedServerFile()`: Update a file in a slot folder (overwrite in place)\r\n *\r\n * ## Event Flow\r\n *\r\n * ServerManager aggregates events from all DedicatedServer instances and forwards\r\n * them to listeners and the HttpServer for WebSocket broadcast:\r\n *\r\n * ```\r\n * DedicatedServer \u2500\u2500\u25BA ServerManager \u2500\u2500\u25BA HttpServer \u2500\u2500\u25BA WebSocket Clients\r\n *       \u2502                  \u2502                \u2502\r\n *       \u2502 onServerStarted  \u2502 bubbleServerStarted\r\n *       \u2502 onPlayerConnected\u2502 bubblePlayerConnected \u2500\u2500\u25BA notifyPlayerJoined\r\n *       \u2502 onServerOutput   \u2502 pushStatusNotification \u2500\u2500\u25BA notifyStatusUpdate\r\n * ```\r\n */\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Player from \"../minecraft/Player\";\r\nimport LocalUtilities from \"./LocalUtilities\";\r\nimport * as fs from \"fs\";\r\nimport * as os from \"os\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport LocalEnvironment from \"./LocalEnvironment\";\r\nimport axios, { AxiosProgressEvent } from \"axios\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport IMainInfoVersions from \"../minecraft/IMainInfoVersions\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\nimport DedicatedServer, { DedicatedServerStatus } from \"./DedicatedServer\";\r\nimport { IStatData, IDebugSessionInfo, IProfilerCaptureEvent } from \"../debugger/IMinecraftDebugProtocol\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ContentLogWatcher from \"./ContentLogWatcher\";\r\nimport CreatorTools from \"../app/CreatorTools\";\r\nimport HttpServer from \"./HttpServer\";\r\nimport { DedicatedServerMode, MinecraftTrack } from \"../app/ICreatorToolsData\";\r\nimport { IMinecraftStartMessage } from \"../app/IMinecraftStartMessage\";\r\nimport { FileListings } from \"./NodeFolder\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport { IPackageReference, IWorldSettings } from \"../minecraft/IWorldSettings\";\r\nimport Package from \"../app/Package\";\r\nimport Database from \"../minecraft/Database\";\r\nimport ServerMessage, { ServerMessageCategory } from \"./ServerMessage\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport { IMinecraftNetVersionService } from \"./MinecraftNetVersionService\";\r\nimport { constants } from \"../core/Constants\";\r\nimport { Platform } from \"../core/ILocalUtilities\";\r\nimport WorldBackupManager from \"./WorldBackupManager\";\r\nimport { IBackupOptions, IBackupResult } from \"./IWorldBackupData\";\r\nimport ManagedWorld from \"./ManagedWorld\";\r\nimport WorldBackup from \"./WorldBackup\";\r\n\r\nexport const ServerVersionVariants = 5;\r\n\r\nexport enum ServerManagerFeatures {\r\n  all = 0,\r\n  allWebServices = 1,\r\n  basicWebServices = 2,\r\n  dedicatedServerOnly = 3,\r\n}\r\n\r\nexport enum ServerType {\r\n  bedrockWindows = 0,\r\n  bedrockLinux = 1,\r\n  bedrockWindowsPreview = 2,\r\n  bedrockLinuxPreview = 3,\r\n  java = 4,\r\n}\r\n\r\nexport interface IServerVersion {\r\n  serverType?: ServerType;\r\n  version?: string;\r\n  versionIndex?: number;\r\n  downloadedPath?: string;\r\n  downloadedIndex?: number;\r\n  downloadPrefix?: string;\r\n}\r\n\r\n/**\r\n * Tracks the provisioning state of a slot folder.\r\n * Used to avoid unnecessary reprovisioning on stop/start cycles.\r\n *\r\n * This is persisted to disk as `slot_context.json` in each slot folder\r\n * (the \"sentinel file\") so that context survives server restarts.\r\n */\r\nexport interface ISlotProvisioningInfo {\r\n  /** The source server path used to provision this slot */\r\n  sourceServerPath: string;\r\n  /** When the slot was last provisioned (ISO string when serialized) */\r\n  provisionedAt: Date | string;\r\n  /** The server version string (e.g., \"1.21.50.24\") */\r\n  version?: string;\r\n  /** UUIDs of deployed behavior packs */\r\n  deployedBehaviorPackIds?: string[];\r\n  /** UUIDs of deployed resource packs */\r\n  deployedResourcePackIds?: string[];\r\n  /** Whether beta APIs experiment is enabled */\r\n  betaApisEnabled?: boolean;\r\n  /**\r\n   * When true, the world is transient - not backed up and reset on each deployment.\r\n   * Useful for development scenarios where you always want a fresh world.\r\n   */\r\n  transientWorld?: boolean;\r\n}\r\n\r\n/**\r\n * Options for slot provisioning.\r\n */\r\nexport interface ISlotProvisioningOptions {\r\n  /** Force reprovisioning even if source hasn't changed */\r\n  forceReprovision?: boolean;\r\n  /**\r\n   * When true, the world is transient - not backed up and cleared on each deployment.\r\n   * Useful for development scenarios where you always want a fresh world.\r\n   */\r\n  transientWorld?: boolean;\r\n}\r\n\r\n/** Filename for the slot sentinel/context file */\r\nconst SLOT_CONTEXT_FILENAME = \"slot_context.json\";\r\n\r\nexport default class ServerManager {\r\n  #servers: { [name: string]: DedicatedServer } = {};\r\n  #activeServersByPort: { [port: number]: DedicatedServer } = {};\r\n\r\n  #quiescentServersByPort: { [port: number]: DedicatedServer } = {};\r\n  #activeDirectServer: DedicatedServer | undefined;\r\n  #contentLogWatcher: ContentLogWatcher | undefined;\r\n\r\n  #usePreview: boolean | undefined;\r\n  #httpServer: HttpServer | undefined;\r\n\r\n  #creatorTools: CreatorTools;\r\n\r\n  #utilities: LocalUtilities;\r\n  #env: LocalEnvironment;\r\n\r\n  dataStorage: NodeStorage;\r\n\r\n  runOnce: boolean | undefined;\r\n\r\n  maxServerIndex: number = 0;\r\n\r\n  #features: ServerManagerFeatures = ServerManagerFeatures.all;\r\n  #isPrepared: boolean = false;\r\n\r\n  primaryServerPort = 19132;\r\n\r\n  backupWorldFileListings: FileListings = {};\r\n\r\n  /**\r\n   * Central backup manager for all world backups.\r\n   * Handles world identity, backup creation, restoration, and deduplication.\r\n   */\r\n  #worldBackupManager: WorldBackupManager | undefined;\r\n\r\n  /**\r\n   * Get the world backup manager.\r\n   */\r\n  get worldBackupManager(): WorldBackupManager | undefined {\r\n    return this.#worldBackupManager;\r\n  }\r\n\r\n  /**\r\n   * Tracks provisioning state per slot.\r\n   * Key is the slot number (0-79), value is the provisioning info.\r\n   * Used to avoid unnecessary reprovisioning when source hasn't changed.\r\n   */\r\n  #slotProvisioningInfo: { [slot: number]: ISlotProvisioningInfo } = {};\r\n\r\n  /**\r\n   * Prefix for slot folder names to avoid conflicts between different contexts.\r\n   * Different commands/contexts use different prefixes to keep their server instances separate:\r\n   * - MCP command uses \"mcp\" prefix \u2192 \"mcp0\", \"mcp1\", etc.\r\n   * - Serve command uses \"serve\" prefix \u2192 \"serve0\", \"serve1\", etc.\r\n   * - VS Code extension uses \"vscode\" prefix \u2192 \"vscode0\", \"vscode1\", etc.\r\n   * - Default (empty string) uses no prefix \u2192 \"slot0\", \"slot1\", etc.\r\n   */\r\n  #slotPrefix: string = \"\";\r\n\r\n  serverVersions: IServerVersion[] = [\r\n    {\r\n      downloadPrefix: \"https://www.minecraft.net/bedrockdedicatedserver/bin-win/bedrock-server-\",\r\n    },\r\n    {\r\n      downloadPrefix: \"https://www.minecraft.net/bedrockdedicatedserver/bin-linux/bedrock-server-\",\r\n    },\r\n    {\r\n      downloadPrefix: \"https://www.minecraft.net/bedrockdedicatedserver/bin-win-preview/bedrock-server-\",\r\n    },\r\n    {\r\n      downloadPrefix: \"https://www.minecraft.net/bedrockdedicatedserver/bin-linux-preview/bedrock-server-\",\r\n    },\r\n    {},\r\n  ];\r\n\r\n  #onServerOutput = new EventDispatcher<DedicatedServer, ServerMessage>();\r\n  #onServerError = new EventDispatcher<DedicatedServer, string>();\r\n  #onServerStarted = new EventDispatcher<DedicatedServer, string>();\r\n  #onServerRefreshed = new EventDispatcher<DedicatedServer, string>();\r\n  #onServerStarting = new EventDispatcher<DedicatedServer, string>();\r\n  #onServerStopped = new EventDispatcher<DedicatedServer, string>();\r\n  #onServerStopping = new EventDispatcher<DedicatedServer, string>();\r\n\r\n  #onShutdown = new EventDispatcher<ServerManager, string>();\r\n\r\n  #onPlayerConnected = new EventDispatcher<DedicatedServer, Player>();\r\n  #onPlayerDisconnected = new EventDispatcher<DedicatedServer, Player>();\r\n\r\n  #onTestStarted = new EventDispatcher<DedicatedServer, string>();\r\n  #onTestFailed = new EventDispatcher<DedicatedServer, string>();\r\n  #onTestSucceeded = new EventDispatcher<DedicatedServer, string>();\r\n\r\n  // Debug events from the script debugger\r\n  #onDebugConnected = new EventDispatcher<DedicatedServer, IDebugSessionInfo>();\r\n  #onDebugDisconnected = new EventDispatcher<DedicatedServer, string>();\r\n  #onDebugStats = new EventDispatcher<DedicatedServer, { tick: number; stats: IStatData[] }>();\r\n  #onDebugPaused = new EventDispatcher<DedicatedServer, string>();\r\n  #onDebugResumed = new EventDispatcher<DedicatedServer, void>();\r\n  #onProfilerCapture = new EventDispatcher<DedicatedServer, IProfilerCaptureEvent>();\r\n\r\n  public get isAnyServerRunning() {\r\n    for (const serverName in this.#servers) {\r\n      const server = this.#servers[serverName];\r\n\r\n      if (server.status === DedicatedServerStatus.started) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public get creatorTools() {\r\n    return this.#creatorTools;\r\n  }\r\n\r\n  public get effectiveAutoSourceServerPath() {\r\n    if (this.#utilities.platform === Platform.linux) {\r\n      if (this.effectiveIsUsingPreview) {\r\n        return this.serverVersions[ServerType.bedrockLinuxPreview].downloadedPath;\r\n      }\r\n\r\n      return this.serverVersions[ServerType.bedrockLinux].downloadedPath;\r\n    }\r\n\r\n    if (this.effectiveIsUsingPreview) {\r\n      return this.serverVersions[ServerType.bedrockWindowsPreview].downloadedPath;\r\n    }\r\n\r\n    return this.serverVersions[ServerType.bedrockWindows].downloadedPath;\r\n  }\r\n\r\n  public get activeDirectServer() {\r\n    return this.#activeDirectServer;\r\n  }\r\n\r\n  public get primaryActiveServer() {\r\n    if (this.#activeDirectServer) {\r\n      return this.#activeDirectServer;\r\n    }\r\n\r\n    return this.#activeServersByPort[this.primaryServerPort];\r\n  }\r\n\r\n  /**\r\n   * Get all active servers as an array.\r\n   */\r\n  public get activeServers(): DedicatedServer[] {\r\n    return Object.values(this.#activeServersByPort);\r\n  }\r\n\r\n  public get features() {\r\n    return this.#features;\r\n  }\r\n\r\n  public set features(featuresIn: ServerManagerFeatures) {\r\n    this.#features = featuresIn;\r\n  }\r\n\r\n  public get onServerOutput() {\r\n    return this.#onServerOutput.asEvent();\r\n  }\r\n\r\n  public get onServerError() {\r\n    return this.#onServerError.asEvent();\r\n  }\r\n\r\n  public get onServerStarted() {\r\n    return this.#onServerStarted.asEvent();\r\n  }\r\n\r\n  public get onServerRefreshed() {\r\n    return this.#onServerRefreshed.asEvent();\r\n  }\r\n\r\n  public get onServerStarting() {\r\n    return this.#onServerStarting.asEvent();\r\n  }\r\n\r\n  public get onServerStopped() {\r\n    return this.#onServerStopped.asEvent();\r\n  }\r\n\r\n  public get onServerStopping() {\r\n    return this.#onServerStopping.asEvent();\r\n  }\r\n\r\n  public get onTestStarted() {\r\n    return this.#onTestStarted.asEvent();\r\n  }\r\n\r\n  public get onShutdown() {\r\n    return this.#onShutdown.asEvent();\r\n  }\r\n\r\n  public get onTestFailed() {\r\n    return this.#onTestFailed.asEvent();\r\n  }\r\n\r\n  public get onTestSucceeded() {\r\n    return this.#onTestSucceeded.asEvent();\r\n  }\r\n\r\n  public get onDebugConnected() {\r\n    return this.#onDebugConnected.asEvent();\r\n  }\r\n\r\n  public get onDebugDisconnected() {\r\n    return this.#onDebugDisconnected.asEvent();\r\n  }\r\n\r\n  public get onDebugStats() {\r\n    return this.#onDebugStats.asEvent();\r\n  }\r\n\r\n  public get onDebugPaused() {\r\n    return this.#onDebugPaused.asEvent();\r\n  }\r\n\r\n  public get onDebugResumed() {\r\n    return this.#onDebugResumed.asEvent();\r\n  }\r\n\r\n  public get onProfilerCapture() {\r\n    return this.#onProfilerCapture.asEvent();\r\n  }\r\n\r\n  public get onPlayerConnected() {\r\n    return this.#onPlayerConnected.asEvent();\r\n  }\r\n\r\n  public get onPlayerDisconnected() {\r\n    return this.#onPlayerDisconnected.asEvent();\r\n  }\r\n\r\n  get usePreview() {\r\n    return this.#usePreview;\r\n  }\r\n\r\n  set usePreview(newUsePreview: boolean | undefined) {\r\n    this.#usePreview = newUsePreview;\r\n  }\r\n\r\n  /**\r\n   * Get the slot prefix used for folder naming.\r\n   * This allows different contexts (MCP, serve, VS Code) to have isolated server slots.\r\n   */\r\n  get slotPrefix(): string {\r\n    return this.#slotPrefix;\r\n  }\r\n\r\n  /**\r\n   * Set the slot prefix for folder naming.\r\n   * Different contexts should use different prefixes:\r\n   * - \"mcp\" for MCP command \u2192 \"mcp0\", \"mcp1\", etc.\r\n   * - \"serve\" for serve command \u2192 \"serve0\", \"serve1\", etc.\r\n   * - \"vscode\" for VS Code extension \u2192 \"vscode0\", \"vscode1\", etc.\r\n   * - \"\" (empty) for default/backward compatibility \u2192 \"slot0\", \"slot1\", etc.\r\n   */\r\n  set slotPrefix(prefix: string) {\r\n    this.#slotPrefix = prefix;\r\n  }\r\n\r\n  /**\r\n   * Gets the folder name for a given slot number, including the context prefix.\r\n   * Examples:\r\n   * - slotPrefix=\"\" \u2192 \"slot0\", \"slot1\", etc.\r\n   * - slotPrefix=\"mcp\" \u2192 \"mcp0\", \"mcp1\", etc.\r\n   * - slotPrefix=\"serve\" \u2192 \"serve0\", \"serve1\", etc.\r\n   * - slotPrefix=\"vscode\" \u2192 \"vscode0\", \"vscode1\", etc.\r\n   */\r\n  getSlotFolderName(slotNumber: number): string {\r\n    if (this.#slotPrefix) {\r\n      return `${this.#slotPrefix}${slotNumber}`;\r\n    }\r\n    return `slot${slotNumber}`;\r\n  }\r\n\r\n  constructor(env: LocalEnvironment, creatorTools: CreatorTools) {\r\n    this.#utilities = env.utilities;\r\n    this.#env = env;\r\n    this.#creatorTools = creatorTools;\r\n\r\n    this.dataStorage = new NodeStorage(this.getRootPath() + \"data/\", \"\");\r\n    this.bubbleServerOutput = this.bubbleServerOutput.bind(this);\r\n    this.bubblePlayerConnected = this.bubblePlayerConnected.bind(this);\r\n    this.bubblePlayerDisconnected = this.bubblePlayerDisconnected.bind(this);\r\n    this.bubbleServerError = this.bubbleServerError.bind(this);\r\n    this.bubbleServerStarted = this.bubbleServerStarted.bind(this);\r\n    this.bubbleServerStopped = this.bubbleServerStopped.bind(this);\r\n    this.bubbleServerStarting = this.bubbleServerStarting.bind(this);\r\n    this.bubbleServerStopping = this.bubbleServerStopping.bind(this);\r\n    this.bubbleTestFailed = this.bubbleTestFailed.bind(this);\r\n    this.bubbleTestStarted = this.bubbleTestStarted.bind(this);\r\n    this.bubbleTestFailed = this.bubbleTestFailed.bind(this);\r\n    this.bubbleServerRefreshed = this.bubbleServerRefreshed.bind(this);\r\n    this.bubbleServerGameEvent = this.bubbleServerGameEvent.bind(this);\r\n    this.bubbleDebugConnected = this.bubbleDebugConnected.bind(this);\r\n    this.bubbleDebugDisconnected = this.bubbleDebugDisconnected.bind(this);\r\n    this.bubbleDebugStats = this.bubbleDebugStats.bind(this);\r\n\r\n    // Register process signal handlers for graceful shutdown\r\n    // This ensures child server processes are stopped when the parent is terminated\r\n    this.registerProcessSignalHandlers();\r\n  }\r\n\r\n  /**\r\n   * Register signal handlers to gracefully shutdown all servers when the process is terminated.\r\n   * This prevents orphaned bedrock_server processes that could hold ports.\r\n   */\r\n  private registerProcessSignalHandlers() {\r\n    const gracefulShutdown = async (signal: string) => {\r\n      Log.message(`Received ${signal} signal - initiating graceful shutdown...`);\r\n      try {\r\n        await this.shutdown(`Process terminated by ${signal}`);\r\n        Log.message(\"Graceful shutdown complete.\");\r\n        process.exit(0);\r\n      } catch (e: any) {\r\n        Log.error(`Error during graceful shutdown: ${e.message}`);\r\n        process.exit(1);\r\n      }\r\n    };\r\n\r\n    // Handle common termination signals\r\n    process.on(\"SIGTERM\", () => gracefulShutdown(\"SIGTERM\"));\r\n    process.on(\"SIGINT\", () => gracefulShutdown(\"SIGINT\"));\r\n\r\n    // On Windows, handle the CTRL+BREAK and window close events\r\n    if (os.platform() === \"win32\") {\r\n      process.on(\"SIGBREAK\", () => gracefulShutdown(\"SIGBREAK\"));\r\n    }\r\n\r\n    // Handle uncaught exceptions - try to clean up before crashing\r\n    process.on(\"uncaughtException\", async (error) => {\r\n      Log.error(`Uncaught exception: ${error.message}`);\r\n      Log.error(error.stack || \"No stack trace available\");\r\n      try {\r\n        await this.stopAllDedicatedServers();\r\n      } catch (e) {\r\n        // Ignore cleanup errors during crash\r\n      }\r\n      process.exit(1);\r\n    });\r\n  }\r\n\r\n  public async stopWebServer(reason?: string) {\r\n    if (this.#httpServer) {\r\n      await this.#httpServer.stop(reason);\r\n    }\r\n  }\r\n\r\n  public async shutdown(message: string) {\r\n    await this.stopWebServer(message);\r\n\r\n    await this.stopAllDedicatedServers();\r\n\r\n    if (this.#onShutdown) {\r\n      this.#onShutdown.dispatch(this, message);\r\n    }\r\n  }\r\n\r\n  public ensureHttpServer(port?: number) {\r\n    if (!this.#httpServer) {\r\n      this.#httpServer = new HttpServer(this.#env, this);\r\n\r\n      if (port) {\r\n        this.#httpServer.port = port;\r\n      }\r\n\r\n      // Pass experimental SSL config if available (not persisted - command line only)\r\n      if (this.#env.sslConfig) {\r\n        this.#httpServer.sslConfig = this.#env.sslConfig;\r\n      }\r\n\r\n      this.#httpServer.creatorTools = this.#creatorTools;\r\n      this.#httpServer.init();\r\n    }\r\n\r\n    return this.#httpServer;\r\n  }\r\n\r\n  public get environment() {\r\n    return this.#env;\r\n  }\r\n\r\n  getRootPath() {\r\n    let fullPath = __dirname;\r\n\r\n    const lastSlash = Math.max(\r\n      fullPath.lastIndexOf(\"\\\\\", fullPath.length - 2),\r\n      fullPath.lastIndexOf(\"/\", fullPath.length - 2)\r\n    );\r\n\r\n    if (lastSlash >= 0) {\r\n      fullPath = fullPath.substring(0, lastSlash + 1);\r\n    }\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  ensureDedicatedServerForPath(name: string, serverPath: string) {\r\n    let server = this.#servers[name];\r\n\r\n    if (server) {\r\n      return server;\r\n    }\r\n\r\n    server = new DedicatedServer(\r\n      name,\r\n      this,\r\n      this.#env,\r\n      serverPath,\r\n      this.#env.worldContainerStorage.rootFolder.ensureFolder(\"world\")\r\n    );\r\n\r\n    server.onPlayerConnected.subscribe(this.bubblePlayerConnected);\r\n    server.onPlayerDisconnected.subscribe(this.bubblePlayerDisconnected);\r\n\r\n    server.onServerError.subscribe(this.bubbleServerError);\r\n    server.onServerOutput.subscribe(this.bubbleServerOutput);\r\n    server.onServerStarted.subscribe(this.bubbleServerStarted);\r\n    server.onServerRefreshed.subscribe(this.bubbleServerRefreshed);\r\n    server.onServerStarting.subscribe(this.bubbleServerStarting);\r\n    server.onServerStopped.subscribe(this.bubbleServerStopped);\r\n    server.onServerStopping.subscribe(this.bubbleServerStopping);\r\n\r\n    server.onTestFailed.subscribe(this.bubbleTestFailed);\r\n    server.onTestStarted.subscribe(this.bubbleTestStarted);\r\n    server.onTestSucceeded.subscribe(this.bubbleTestSucceeded);\r\n    server.onServerGameEvent.subscribe(this.bubbleServerGameEvent);\r\n\r\n    // Subscribe to debug events\r\n    server.onDebugConnected.subscribe(this.bubbleDebugConnected);\r\n    server.onDebugDisconnected.subscribe(this.bubbleDebugDisconnected);\r\n    server.onDebugStats.subscribe(this.bubbleDebugStats);\r\n    server.onDebugPaused.subscribe(this.bubbleDebugPaused);\r\n    server.onDebugResumed.subscribe(this.bubbleDebugResumed);\r\n    server.onProfilerCapture.subscribe(this.bubbleProfilerCapture);\r\n\r\n    this.#servers[name] = server;\r\n\r\n    return server;\r\n  }\r\n\r\n  public async stopAllDedicatedServers() {\r\n    for (const serverName in this.#servers) {\r\n      const server = this.#servers[serverName];\r\n\r\n      if (\r\n        server.status === DedicatedServerStatus.started ||\r\n        server.status === DedicatedServerStatus.launching ||\r\n        server.status === DedicatedServerStatus.starting\r\n      ) {\r\n        await server.stopServer();\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private bubblePlayerConnected(dedicatedServer: DedicatedServer, player: Player) {\r\n    this.#onPlayerConnected.dispatch(dedicatedServer, player);\r\n\r\n    // Push WebSocket notification\r\n    if (this.#httpServer) {\r\n      const slot = this.getSlotForServer(dedicatedServer);\r\n      this.#httpServer.notify({\r\n        eventName: \"playerJoined\",\r\n        timestamp: Date.now(),\r\n        slot: slot,\r\n        playerName: player.id ?? \"unknown\",\r\n        xuid: player.xuid,\r\n      });\r\n    }\r\n  }\r\n\r\n  private bubblePlayerDisconnected(dedicatedServer: DedicatedServer, player: Player) {\r\n    this.#onPlayerDisconnected.dispatch(dedicatedServer, player);\r\n\r\n    // Push WebSocket notification\r\n    if (this.#httpServer) {\r\n      const slot = this.getSlotForServer(dedicatedServer);\r\n      this.#httpServer.notify({\r\n        eventName: \"playerLeft\",\r\n        timestamp: Date.now(),\r\n        slot: slot,\r\n        playerName: player.id ?? \"unknown\",\r\n        xuid: player.xuid,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle game events from the dedicated server (e.g., PlayerTravelled, BlockBroken, etc.)\r\n   * and relay them to WebSocket clients.\r\n   */\r\n  private bubbleServerGameEvent(dedicatedServer: DedicatedServer, event: object) {\r\n    if (!this.#httpServer) {\r\n      Log.verbose(\"bubbleServerGameEvent: No httpServer available\");\r\n      return;\r\n    }\r\n\r\n    const slot = this.getSlotForServer(dedicatedServer);\r\n    const eventWithHeader = event as {\r\n      header?: { eventName?: string };\r\n      body?: { player?: { position?: { x: number; y: number; z: number }; name?: string }; dimension?: number };\r\n    };\r\n\r\n    Log.verbose(\"bubbleServerGameEvent received: \" + eventWithHeader.header?.eventName);\r\n\r\n    // Check if this is a PlayerTravelled event and send a more specific notification\r\n    if (eventWithHeader.header?.eventName === \"PlayerTravelled\" && eventWithHeader.body?.player) {\r\n      const player = eventWithHeader.body.player;\r\n      if (player.position) {\r\n        Log.message(\"Sending playerMoved notification for \" + player.name + \" to slot \" + slot);\r\n        this.#httpServer.notifyPlayerMoved(\r\n          slot,\r\n          player.name ?? \"unknown\",\r\n          player.position,\r\n          undefined,\r\n          eventWithHeader.body.dimension !== undefined ? `dimension_${eventWithHeader.body.dimension}` : undefined\r\n        );\r\n      }\r\n    }\r\n\r\n    // Also send the full game event for clients that want detailed event data\r\n    if (eventWithHeader.header?.eventName) {\r\n      this.#httpServer.notifyGameEvent(slot, eventWithHeader.header.eventName, event);\r\n    }\r\n  }\r\n\r\n  private bubbleServerError(dedicatedServer: DedicatedServer, message: string) {\r\n    this.#onServerError.dispatch(dedicatedServer, message);\r\n    this.pushStatusNotification(dedicatedServer);\r\n  }\r\n\r\n  private bubbleServerOutput(dedicatedServer: DedicatedServer, message: ServerMessage) {\r\n    // Don't forward internal system messages (e.g., querytarget polling output) to the web UI\r\n    if (message.category === ServerMessageCategory.internalSystemMessage) {\r\n      return;\r\n    }\r\n\r\n    this.#onServerOutput.dispatch(dedicatedServer, message);\r\n    // Push status update for new messages\r\n    this.pushStatusNotification(dedicatedServer);\r\n  }\r\n\r\n  private bubbleServerStarted(dedicatedServer: DedicatedServer, message: string) {\r\n    this.#onServerStarted.dispatch(dedicatedServer, message);\r\n    this.pushStatusNotification(dedicatedServer);\r\n\r\n    // Start watching the server's storage folders for real-time file updates\r\n    this.startWatchingServerStorage(dedicatedServer);\r\n  }\r\n\r\n  /**\r\n   * Start watching the server's storage folders (world, behavior_packs, resource_packs)\r\n   * for file changes and broadcast notifications to WebSocket clients.\r\n   */\r\n  private async startWatchingServerStorage(dedicatedServer: DedicatedServer) {\r\n    if (!this.#httpServer) {\r\n      return;\r\n    }\r\n\r\n    // Get the slot number for this server\r\n    const slot = this.getSlotForServer(dedicatedServer);\r\n\r\n    // Ensure server folders are initialized\r\n    await dedicatedServer.ensureServerFolders();\r\n\r\n    // Start watching world storage\r\n    const worldStorage = dedicatedServer.defaultWorldStorage;\r\n    if (worldStorage) {\r\n      this.#httpServer.startWatchingStorage(worldStorage, slot, \"world\");\r\n      Log.message(\r\n        `[ServerManager] Started watching world storage for slot ${slot}: ${worldStorage.rootFolder.fullPath}`\r\n      );\r\n    } else {\r\n      Log.debug(`[ServerManager] No world storage available for slot ${slot}`);\r\n    }\r\n\r\n    // Start watching behavior packs storage\r\n    const behaviorPacksStorage = dedicatedServer.behaviorPacksStorage;\r\n    if (behaviorPacksStorage) {\r\n      this.#httpServer.startWatchingStorage(behaviorPacksStorage, slot, \"behavior_packs\");\r\n      Log.message(`[ServerManager] Started watching behavior_packs storage for slot ${slot}`);\r\n    }\r\n\r\n    // Start watching resource packs storage\r\n    const resourcePacksStorage = dedicatedServer.resourcePacksStorage;\r\n    if (resourcePacksStorage) {\r\n      this.#httpServer.startWatchingStorage(resourcePacksStorage, slot, \"resource_packs\");\r\n      Log.message(`[ServerManager] Started watching resource_packs storage for slot ${slot}`);\r\n    }\r\n\r\n    Log.message(`[ServerManager] Completed storage watching setup for slot ${slot}`);\r\n  }\r\n\r\n  /**\r\n   * Stop watching the server's storage folders when the server stops.\r\n   */\r\n  private stopWatchingServerStorage(dedicatedServer: DedicatedServer) {\r\n    if (!this.#httpServer) {\r\n      return;\r\n    }\r\n\r\n    const worldStorage = dedicatedServer.defaultWorldStorage;\r\n    if (worldStorage) {\r\n      this.#httpServer.stopWatchingStorage(worldStorage);\r\n    }\r\n\r\n    const behaviorPacksStorage = dedicatedServer.behaviorPacksStorage;\r\n    if (behaviorPacksStorage) {\r\n      this.#httpServer.stopWatchingStorage(behaviorPacksStorage);\r\n    }\r\n\r\n    const resourcePacksStorage = dedicatedServer.resourcePacksStorage;\r\n    if (resourcePacksStorage) {\r\n      this.#httpServer.stopWatchingStorage(resourcePacksStorage);\r\n    }\r\n  }\r\n\r\n  private bubbleServerRefreshed(dedicatedServer: DedicatedServer, message: string) {\r\n    this.#onServerRefreshed.dispatch(dedicatedServer, message);\r\n    this.pushStatusNotification(dedicatedServer);\r\n  }\r\n\r\n  private bubbleServerStarting(dedicatedServer: DedicatedServer, message: string) {\r\n    this.#onServerStarting.dispatch(dedicatedServer, message);\r\n    this.pushStatusNotification(dedicatedServer);\r\n  }\r\n\r\n  private bubbleServerStopping(dedicatedServer: DedicatedServer, message: string) {\r\n    this.#onServerStopping.dispatch(dedicatedServer, message);\r\n    this.pushStatusNotification(dedicatedServer);\r\n  }\r\n\r\n  private bubbleServerStopped(dedicatedServer: DedicatedServer, message: string) {\r\n    // Stop watching storage when the server stops\r\n    this.stopWatchingServerStorage(dedicatedServer);\r\n\r\n    this.#onServerStopped.dispatch(dedicatedServer, message);\r\n    this.pushStatusNotification(dedicatedServer);\r\n  }\r\n\r\n  /**\r\n   * Get the slot number for a given DedicatedServer.\r\n   * Returns 0 if the server is not found in active servers.\r\n   */\r\n  private getSlotForServer(dedicatedServer: DedicatedServer): number {\r\n    for (const portStr in this.#activeServersByPort) {\r\n      const port = parseInt(portStr);\r\n      if (this.#activeServersByPort[port] === dedicatedServer) {\r\n        return MinecraftUtilities.getSlotFromPort(port);\r\n      }\r\n    }\r\n    return 0; // Default to slot 0\r\n  }\r\n\r\n  /**\r\n   * Push a status update notification via WebSocket.\r\n   * This replaces the need for clients to poll /api/{slot}/status/\r\n   */\r\n  private pushStatusNotification(dedicatedServer: DedicatedServer) {\r\n    if (!this.#httpServer) {\r\n      return;\r\n    }\r\n\r\n    const slot = this.getSlotForServer(dedicatedServer);\r\n    const recentMessages: Array<{ message: string; received: number; type?: number }> = [];\r\n\r\n    // Get recent messages, excluding internal system messages (e.g., querytarget polling)\r\n    let lastIndex = dedicatedServer.outputLines.length;\r\n    while (lastIndex >= 1 && recentMessages.length < 10) {\r\n      lastIndex--;\r\n      const line = dedicatedServer.outputLines[lastIndex];\r\n      if (!line.isInternal) {\r\n        recentMessages.push({\r\n          message: line.message,\r\n          received: line.received,\r\n        });\r\n      }\r\n    }\r\n\r\n    this.#httpServer.notifyStatusUpdate(slot, dedicatedServer.status, recentMessages);\r\n  }\r\n\r\n  private bubbleTestFailed(dedicatedServer: DedicatedServer, message: string) {\r\n    this.#onTestFailed.dispatch(dedicatedServer, message);\r\n  }\r\n\r\n  private bubbleTestStarted(dedicatedServer: DedicatedServer, message: string) {\r\n    this.#onTestStarted.dispatch(dedicatedServer, message);\r\n  }\r\n\r\n  private bubbleTestSucceeded(dedicatedServer: DedicatedServer, message: string) {\r\n    this.#onTestSucceeded.dispatch(dedicatedServer, message);\r\n  }\r\n\r\n  private bubbleDebugConnected(dedicatedServer: DedicatedServer, sessionInfo: IDebugSessionInfo) {\r\n    this.#onDebugConnected.dispatch(dedicatedServer, sessionInfo);\r\n\r\n    // Push WebSocket notification\r\n    if (this.#httpServer) {\r\n      const slot = this.getSlotForServer(dedicatedServer);\r\n      this.#httpServer.notify({\r\n        eventName: \"debugConnected\",\r\n        timestamp: Date.now(),\r\n        slot: slot,\r\n        protocolVersion: sessionInfo.protocolVersion,\r\n      });\r\n    }\r\n  }\r\n\r\n  private bubbleDebugDisconnected(dedicatedServer: DedicatedServer, reason: string) {\r\n    this.#onDebugDisconnected.dispatch(dedicatedServer, reason);\r\n\r\n    // Push WebSocket notification\r\n    if (this.#httpServer) {\r\n      const slot = this.getSlotForServer(dedicatedServer);\r\n      this.#httpServer.notify({\r\n        eventName: \"debugDisconnected\",\r\n        timestamp: Date.now(),\r\n        slot: slot,\r\n        reason: reason,\r\n      });\r\n    }\r\n  }\r\n\r\n  private bubbleDebugStats(dedicatedServer: DedicatedServer, statsData: { tick: number; stats: IStatData[] }) {\r\n    Log.verbose(\r\n      `[DebugStats] ServerManager: Received stats tick ${statsData.tick} with ${statsData.stats.length} stat items`\r\n    );\r\n    this.#onDebugStats.dispatch(dedicatedServer, statsData);\r\n\r\n    // Push WebSocket notification\r\n    if (this.#httpServer) {\r\n      const slot = this.getSlotForServer(dedicatedServer);\r\n      Log.verbose(`[DebugStats] Notifying WebSocket clients for slot ${slot}`);\r\n      this.#httpServer.notify({\r\n        eventName: \"debugStats\",\r\n        timestamp: Date.now(),\r\n        slot: slot,\r\n        tick: statsData.tick,\r\n        stats: statsData.stats.map((s) => ({\r\n          name: s.name,\r\n          values: s.values,\r\n          parent: s.parent_name || undefined,\r\n        })),\r\n      });\r\n    } else {\r\n      Log.verbose(`[DebugStats] No HTTP server to notify`);\r\n    }\r\n  }\r\n\r\n  private bubbleDebugPaused(dedicatedServer: DedicatedServer, reason: string) {\r\n    this.#onDebugPaused.dispatch(dedicatedServer, reason);\r\n\r\n    // Push WebSocket notification\r\n    if (this.#httpServer) {\r\n      const slot = this.getSlotForServer(dedicatedServer);\r\n      this.#httpServer.notify({\r\n        eventName: \"debugPaused\",\r\n        timestamp: Date.now(),\r\n        slot: slot,\r\n        reason: reason,\r\n      });\r\n    }\r\n  }\r\n\r\n  private bubbleDebugResumed(dedicatedServer: DedicatedServer) {\r\n    this.#onDebugResumed.dispatch(dedicatedServer);\r\n\r\n    // Push WebSocket notification\r\n    if (this.#httpServer) {\r\n      const slot = this.getSlotForServer(dedicatedServer);\r\n      this.#httpServer.notify({\r\n        eventName: \"debugResumed\",\r\n        timestamp: Date.now(),\r\n        slot: slot,\r\n      });\r\n    }\r\n  }\r\n\r\n  private bubbleProfilerCapture(dedicatedServer: DedicatedServer, captureEvent: IProfilerCaptureEvent) {\r\n    this.#onProfilerCapture.dispatch(dedicatedServer, captureEvent);\r\n\r\n    // Push WebSocket notification with profiler data\r\n    if (this.#httpServer) {\r\n      const slot = this.getSlotForServer(dedicatedServer);\r\n      this.#httpServer.notify({\r\n        eventName: \"profilerCapture\",\r\n        timestamp: Date.now(),\r\n        slot: slot,\r\n        captureBasePath: captureEvent.capture_base_path,\r\n        captureData: captureEvent.capture_data, // Base64 encoded profiler data\r\n      });\r\n    }\r\n  }\r\n\r\n  get effectiveIsUsingPreview() {\r\n    return this.#usePreview || (this.#creatorTools && this.#creatorTools.track === MinecraftTrack.preview);\r\n  }\r\n\r\n  async getLatestVersionInfo(force: boolean) {\r\n    let minecraftInfoResponse: any = undefined;\r\n\r\n    if (\r\n      this.#utilities.platform === Platform.linux &&\r\n      ((this.serverVersions[ServerType.bedrockLinux].version && !this.effectiveIsUsingPreview) ||\r\n        (this.serverVersions[ServerType.bedrockLinuxPreview].version && this.effectiveIsUsingPreview)) &&\r\n      !force\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    if (\r\n      this.#utilities.platform === Platform.windows &&\r\n      ((this.serverVersions[ServerType.bedrockWindows].version && !this.effectiveIsUsingPreview) ||\r\n        (this.serverVersions[ServerType.bedrockWindowsPreview].version && this.effectiveIsUsingPreview)) &&\r\n      !force\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    let successfullyRetrievedVersions = false;\r\n    let serverVersionUrl = \"https://net-secondary.web.minecraft-services.net/api/v1.0/download/links\";\r\n    try {\r\n      minecraftInfoResponse = (await axios.get(serverVersionUrl)) as IMinecraftNetVersionService | undefined;\r\n\r\n      if (\r\n        minecraftInfoResponse &&\r\n        minecraftInfoResponse.data &&\r\n        minecraftInfoResponse.data.result &&\r\n        minecraftInfoResponse.data.result.links\r\n      ) {\r\n        const links = minecraftInfoResponse.data.result.links;\r\n        for (const link of links) {\r\n          if (link.downloadType && link.downloadUrl) {\r\n            const lastDash = link.downloadUrl.lastIndexOf(\"-\");\r\n            const lastDot = link.downloadUrl.lastIndexOf(\".zip\");\r\n\r\n            if (lastDash > 0 && lastDot > lastDash) {\r\n              let version = link.downloadUrl.substring(lastDash + 1, lastDot);\r\n\r\n              // re-constitute the version number ourselves\r\n              const verNums = version.split(\".\");\r\n\r\n              if (verNums.length === 4) {\r\n                const verStr = String(\r\n                  String(parseInt(verNums[0])) +\r\n                    \".\" +\r\n                    String(parseInt(verNums[1])) +\r\n                    \".\" +\r\n                    String(parseInt(verNums[2])) +\r\n                    \".\" +\r\n                    String(parseInt(verNums[3]))\r\n                );\r\n\r\n                const versionIndex = Database.getVersionIndexFromVersionStr(version);\r\n                let serverType = undefined;\r\n\r\n                switch (link.downloadType) {\r\n                  case \"serverBedrockWindows\":\r\n                    serverType = ServerType.bedrockWindows;\r\n                    break;\r\n                  case \"serverBedrockLinux\":\r\n                    serverType = ServerType.bedrockLinux;\r\n                    break;\r\n                  case \"serverBedrockPreviewWindows\":\r\n                    serverType = ServerType.bedrockWindowsPreview;\r\n                    break;\r\n                  case \"serverBedrockPreviewLinux\":\r\n                    serverType = ServerType.bedrockLinuxPreview;\r\n                    break;\r\n                  case \"serverJar\":\r\n                    serverType = ServerType.java;\r\n                    break;\r\n                }\r\n\r\n                if (serverType !== undefined) {\r\n                  this.serverVersions[serverType].version = verStr;\r\n                  this.serverVersions[serverType].versionIndex = versionIndex;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n        successfullyRetrievedVersions = true;\r\n      }\r\n    } catch (e: any) {\r\n      console.log(\"Could not access Bedrock Dedicated Server details.\" + e.toString());\r\n      return false;\r\n    }\r\n\r\n    // fallback: use version.json from githubusercontent.com\r\n    if (!successfullyRetrievedVersions) {\r\n      let versionUrl = \"https://raw.githubusercontent.com/Mojang/bedrock-samples/main/version.json\";\r\n\r\n      if (this.effectiveIsUsingPreview) {\r\n        versionUrl = \"https://raw.githubusercontent.com/Mojang/bedrock-samples/preview/version.json\";\r\n      }\r\n\r\n      await this.creatorTools.notifyStatusUpdate(\r\n        \"Retrieving \" + (this.effectiveIsUsingPreview ? \"preview\" : \"retail\") + \" version data.\"\r\n      );\r\n\r\n      try {\r\n        minecraftInfoResponse = await axios.get(versionUrl);\r\n      } catch (e: any) {\r\n        console.log(\"Could not access Bedrock Dedicated Server details.\" + e);\r\n        throw new Error(e.toString());\r\n      }\r\n\r\n      let latestVersionIndex = 0;\r\n\r\n      try {\r\n        if (minecraftInfoResponse === undefined || minecraftInfoResponse.data === undefined) {\r\n          return false;\r\n        }\r\n\r\n        const responseJson: IMainInfoVersions = JSON.parse(JSON.stringify(minecraftInfoResponse.data));\r\n\r\n        if (!responseJson) {\r\n          return false;\r\n        }\r\n\r\n        for (const verId in responseJson) {\r\n          const ver = responseJson[verId].version;\r\n\r\n          if (ver) {\r\n            const isPreview = Database.getVersionIsPreview(ver); // version ends with .20 or higher\r\n            const versionIndex = Database.getVersionIndexFromVersionStr(ver);\r\n\r\n            if (versionIndex > 0 && versionIndex > latestVersionIndex && isPreview === this.effectiveIsUsingPreview) {\r\n              latestVersionIndex = versionIndex;\r\n\r\n              // re-constitute the version number ourselves\r\n              const verNums = ver.split(\".\");\r\n\r\n              const verStr = String(\r\n                String(parseInt(verNums[0])) +\r\n                  \".\" +\r\n                  String(parseInt(verNums[1])) +\r\n                  \".\" +\r\n                  String(parseInt(verNums[2])) +\r\n                  \".\" +\r\n                  String(parseInt(verNums[3]))\r\n              );\r\n\r\n              // Set version for both Windows and Linux server types\r\n              // The version.json fallback only gives us the version number, which is the same\r\n              // for both platforms - only the download URL differs\r\n              const windowsServerType = isPreview ? ServerType.bedrockWindowsPreview : ServerType.bedrockWindows;\r\n              const linuxServerType = isPreview ? ServerType.bedrockLinuxPreview : ServerType.bedrockLinux;\r\n\r\n              this.serverVersions[windowsServerType].version = verStr;\r\n              this.serverVersions[windowsServerType].versionIndex = latestVersionIndex;\r\n              this.serverVersions[linuxServerType].version = verStr;\r\n              this.serverVersions[linuxServerType].versionIndex = latestVersionIndex;\r\n            }\r\n          }\r\n        }\r\n      } catch (e: any) {\r\n        Log.error(\"Could not access Bedrock Dedicated Server details.\" + e);\r\n        return false;\r\n      }\r\n    }\r\n\r\n    if (\r\n      this.#utilities.platform === Platform.linux &&\r\n      ((!this.effectiveIsUsingPreview && !this.serverVersions[ServerType.bedrockLinux]?.version) ||\r\n        (this.effectiveIsUsingPreview && !this.serverVersions[ServerType.bedrockLinuxPreview]?.version))\r\n    ) {\r\n      Log.error(\"Could not determine latest Bedrock Dedicated Server version for Linux.\");\r\n      return false;\r\n    }\r\n\r\n    if (\r\n      this.#utilities.platform === Platform.windows &&\r\n      ((!this.effectiveIsUsingPreview && !this.serverVersions[ServerType.bedrockWindows]?.version) ||\r\n        (this.effectiveIsUsingPreview && !this.serverVersions[ServerType.bedrockWindowsPreview]?.version))\r\n    ) {\r\n      Log.error(\"Could not determine latest Bedrock Dedicated Server version for Windows.\");\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static getServerTypeStr(serverType: ServerType): string {\r\n    switch (serverType) {\r\n      case ServerType.bedrockWindows:\r\n        return \"bw\";\r\n      case ServerType.bedrockWindowsPreview:\r\n        return \"pw\";\r\n      case ServerType.bedrockLinux:\r\n        return \"bl\";\r\n      case ServerType.bedrockLinuxPreview:\r\n        return \"pl\";\r\n      case ServerType.java:\r\n        return \"jv\";\r\n      default:\r\n        throw new Error();\r\n    }\r\n  }\r\n\r\n  static getServerTypeFromString(serverVersion: string): ServerType | undefined {\r\n    if (!serverVersion || serverVersion.length !== 2) {\r\n      return undefined;\r\n    }\r\n\r\n    switch (serverVersion.toLowerCase()) {\r\n      case \"bw\":\r\n        return ServerType.bedrockWindows;\r\n      case \"pw\":\r\n        return ServerType.bedrockWindowsPreview;\r\n      case \"bl\":\r\n        return ServerType.bedrockLinux;\r\n      case \"pl\":\r\n        return ServerType.bedrockLinuxPreview;\r\n      case \"jv\":\r\n        return ServerType.java;\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  async deployPackCache() {\r\n    if (!this.#creatorTools) {\r\n      return;\r\n    }\r\n\r\n    let operId = await this.#creatorTools.notifyOperationStarted(\"Updating pack cache.\");\r\n\r\n    await this.#creatorTools.loadPacks();\r\n\r\n    if (!this.#creatorTools.packs) {\r\n      return;\r\n    }\r\n\r\n    const packs = this.#creatorTools.packs;\r\n\r\n    for (let i = 0; i < packs.length; i++) {\r\n      const pack = packs[i];\r\n\r\n      if (pack.data && pack.reportFile && pack.file && pack.data.sourceHash) {\r\n        if (!pack.file.isContentLoaded) {\r\n          await pack.file.loadContent(false);\r\n        }\r\n\r\n        if (pack.file.content && pack.file.content instanceof Uint8Array) {\r\n          const packCacheFolder = this.ensurePackCacheFolder();\r\n\r\n          const packFolder =\r\n            NodeStorage.ensureEndsWithDelimiter(packCacheFolder) +\r\n            StorageUtilities.canonicalizePathAsFileName(pack.name) +\r\n            \"_\" +\r\n            Utilities.makeHashFileSafe(pack.data.sourceHash) +\r\n            NodeStorage.platformFolderDelimiter;\r\n\r\n          const packFolderStorage = new NodeStorage(packFolder, \"\");\r\n\r\n          if (!fs.existsSync(packFolder)) {\r\n            const zipStorage = new ZipStorage();\r\n\r\n            await zipStorage.loadFromUint8Array(pack.file.content, pack.file.name);\r\n\r\n            fs.mkdirSync(packFolder, { recursive: true });\r\n\r\n            await this.creatorTools.notifyStatusUpdate(\"Extracting to \" + packFolder);\r\n\r\n            await StorageUtilities.syncFolderTo(\r\n              zipStorage.rootFolder,\r\n              packFolderStorage.rootFolder,\r\n              false,\r\n              false,\r\n              false,\r\n              [\"bedrock_server.pdb\"],\r\n              undefined,\r\n              async (message: string) => {\r\n                // Log.message(\"Extracting: \" + message + \".\");\r\n              },\r\n              false,\r\n              false,\r\n              true\r\n            );\r\n\r\n            await packFolderStorage.rootFolder.saveAll();\r\n          }\r\n\r\n          pack.cacheFolder = packFolderStorage.rootFolder;\r\n        }\r\n      }\r\n    }\r\n\r\n    await this.#creatorTools.notifyOperationEnded(operId, \"Pack cache update complete.\");\r\n  }\r\n\r\n  async downloadLatestSourceServer() {\r\n    await this.#env.load();\r\n\r\n    if (!this.#env.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula) {\r\n      throw new Error(\r\n        \"Minecraft End-user License Agreement and Privacy Policy must be accepted before we can download the server.\"\r\n      );\r\n    }\r\n\r\n    const operId = await this.creatorTools.notifyOperationStarted(\"Downloading Minecraft server.\");\r\n\r\n    let retrievedVersionInfo = await this.getLatestVersionInfo(false);\r\n\r\n    if (!retrievedVersionInfo) {\r\n      return false;\r\n    }\r\n\r\n    let serverType = ServerType.bedrockWindows;\r\n    const platform = this.#utilities.platform;\r\n\r\n    if (this.effectiveIsUsingPreview && platform === Platform.windows) {\r\n      serverType = ServerType.bedrockWindowsPreview;\r\n    } else if (this.effectiveIsUsingPreview && platform === Platform.linux) {\r\n      serverType = ServerType.bedrockLinuxPreview;\r\n    } else if (platform === Platform.linux) {\r\n      serverType = ServerType.bedrockLinux;\r\n    }\r\n\r\n    let latestServerVersionAvailableLocal = this.serverVersions[serverType]?.version;\r\n    let urlStart = this.serverVersions[serverType].downloadPrefix;\r\n\r\n    if (!latestServerVersionAvailableLocal) {\r\n      Log.message(\"Latest server version could not be determined.\");\r\n      return false;\r\n    }\r\n\r\n    if (!urlStart) {\r\n      Log.message(\"Downloads are not available for this version.\");\r\n      return false;\r\n    }\r\n\r\n    const serverZipUrl = urlStart + latestServerVersionAvailableLocal + \".zip\";\r\n\r\n    await this.creatorTools.notifyStatusUpdate(\"Downloading new server version from '\" + serverZipUrl + \"'\");\r\n\r\n    let zipContentResponse: any = undefined;\r\n\r\n    zipContentResponse = await this.tryDownloadDedicatedServer(serverZipUrl);\r\n\r\n    // test for alternate versions of the server download.\r\n    if (!zipContentResponse) {\r\n      for (let i = 6; i > 1; i--) {\r\n        let testVer = this.replaceVersion(latestServerVersionAvailableLocal, String(i) + \".01\");\r\n        // e.g., try 1.19.65.01\r\n        if (testVer) {\r\n          zipContentResponse = await this.tryDownloadDedicatedServer(urlStart + testVer + \".zip\");\r\n          if (zipContentResponse) {\r\n            latestServerVersionAvailableLocal = testVer;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!zipContentResponse) {\r\n      Log.message(\r\n        \"Could not download the Bedrock Dedicated Server from '\" +\r\n          serverZipUrl +\r\n          \"'. This version may not be available for download yet. \" +\r\n          \"The web server will continue without a dedicated server.\"\r\n      );\r\n\r\n      await this.creatorTools.notifyOperationEnded(\r\n        operId,\r\n        \"Could not successfully download a file from '\" + serverZipUrl + \"'\"\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    const zipData = zipContentResponse.data;\r\n\r\n    const zipStorage = new ZipStorage();\r\n    zipStorage.allowAllFiles = true;\r\n\r\n    await zipStorage.loadFromUint8Array(zipData);\r\n\r\n    const serverSourceFolder = this.ensureSourceServerFolder();\r\n\r\n    const serverVersionFolder =\r\n      serverSourceFolder +\r\n      NodeStorage.platformFolderDelimiter +\r\n      ServerManager.getServerTypeStr(serverType) +\r\n      \"v\" +\r\n      latestServerVersionAvailableLocal +\r\n      NodeStorage.platformFolderDelimiter;\r\n\r\n    if (!fs.existsSync(serverVersionFolder)) {\r\n      fs.mkdirSync(serverVersionFolder, { recursive: true });\r\n    }\r\n\r\n    await this.creatorTools.notifyStatusUpdate(\"Extracting to \" + serverVersionFolder);\r\n\r\n    const serverVersionStorage = new NodeStorage(serverVersionFolder, \"\");\r\n\r\n    /*\r\n    // save a copy of the zip\r\n    const file = serverVersionStorage.rootFolder.ensureFile(\"source.zip\");\r\n    file.setContent(zipData);\r\n    */\r\n\r\n    await StorageUtilities.syncFolderTo(\r\n      zipStorage.rootFolder,\r\n      serverVersionStorage.rootFolder,\r\n      false,\r\n      false,\r\n      false,\r\n      [\"bedrock_server.pdb\"],\r\n      undefined,\r\n      async (message: string) => {\r\n        // Log.message(\"Extracting: \" + message + \".\");\r\n      }\r\n    );\r\n\r\n    await serverVersionStorage.rootFolder.saveAll();\r\n\r\n    await this.creatorTools.notifyOperationEnded(operId, \"Downloaded and deployed server from '\" + serverZipUrl + \"'\");\r\n\r\n    return true;\r\n  }\r\n\r\n  replaceVersion(versionString: string, stub: string) {\r\n    if (versionString.endsWith(stub)) {\r\n      return undefined;\r\n    }\r\n\r\n    const lastPeriod = versionString.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod >= 0) {\r\n      versionString = versionString.substring(0, lastPeriod) + stub;\r\n      return versionString;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  private static _getSafeVersion(): string {\r\n    const ver = constants.version;\r\n    if (ver.includes(\"-dev\") || ver.includes(\"-semantically-released\") || ver.startsWith(\"0.0.0\")) {\r\n      return \"0.0.1\";\r\n    }\r\n    return ver;\r\n  }\r\n\r\n  private async tryDownloadDedicatedServer(serverZipUrl: string) {\r\n    let totalBytesDownloaded = 0;\r\n    try {\r\n      return await axios.get(serverZipUrl, {\r\n        headers: {\r\n          Accept: \"application/octet-stream, application/json, text/plain, */*\",\r\n          \"User-Agent\": \"minecraft-creator-tools-\" + ServerManager._getSafeVersion(),\r\n        },\r\n        maxContentLength: Infinity,\r\n        maxBodyLength: Infinity,\r\n        responseType: \"arraybuffer\",\r\n        onDownloadProgress: function (progressEvent: AxiosProgressEvent) {\r\n          totalBytesDownloaded += progressEvent.bytes;\r\n          Log.message(\"Downloading \" + serverZipUrl + \" - \" + totalBytesDownloaded + \" bytes downloaded\");\r\n        },\r\n      });\r\n    } catch (e: any) {\r\n      const status = e?.response?.status;\r\n      const statusText = e?.response?.statusText;\r\n      const code = e?.code;\r\n      const message = e?.message;\r\n\r\n      let detail = \"\";\r\n      if (status) {\r\n        detail = ` (HTTP ${status}${statusText ? \" \" + statusText : \"\"})`;\r\n      } else if (code) {\r\n        detail = ` (${code}${message ? \": \" + message : \"\"})`;\r\n      } else if (message) {\r\n        detail = ` (${message})`;\r\n      }\r\n\r\n      Log.error(\"Could not find and download '\" + serverZipUrl + \"'\" + detail);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  private ensurePackCacheFolder() {\r\n    const packCacheFolder = this.#env.utilities.packCachePath;\r\n\r\n    if (!fs.existsSync(packCacheFolder)) {\r\n      fs.mkdirSync(packCacheFolder, { recursive: true });\r\n    }\r\n\r\n    return packCacheFolder;\r\n  }\r\n\r\n  private ensureSourceServerFolder() {\r\n    const serverSourceFolder = this.#env.utilities.sourceServersPath;\r\n\r\n    if (!fs.existsSync(serverSourceFolder)) {\r\n      fs.mkdirSync(serverSourceFolder, { recursive: true });\r\n    }\r\n\r\n    return serverSourceFolder;\r\n  }\r\n\r\n  async prepare(force?: boolean) {\r\n    if (!force && this.#isPrepared) {\r\n      return;\r\n    }\r\n\r\n    Log.message(\"Preparing servers...\");\r\n\r\n    if (this.#utilities.platform === Platform.macOS || this.#utilities.platform === Platform.unsupported) {\r\n      Log.message(\"Dedicated servers are not supported on this platform.\");\r\n      return;\r\n    }\r\n\r\n    if (this.features !== ServerManagerFeatures.basicWebServices) {\r\n      if (!fs.existsSync(this.#utilities.serversPath)) {\r\n        fs.mkdirSync(this.#utilities.serversPath, { recursive: true });\r\n      }\r\n\r\n      if (!this.#contentLogWatcher) {\r\n        this.#contentLogWatcher = new ContentLogWatcher(this.#env);\r\n        this.#contentLogWatcher.watchServerFolder();\r\n      }\r\n\r\n      if (this.#env.worldContainerStorage.rootFolder) {\r\n        this.backupWorldFileListings = await this.#env.worldContainerStorage.rootFolder.generateFileListings();\r\n      }\r\n\r\n      // Initialize the world backup manager\r\n      if (this.#env.worldContainerStorage) {\r\n        this.#worldBackupManager = new WorldBackupManager(\r\n          this.#env.worldContainerStorage,\r\n          this.backupWorldFileListings\r\n        );\r\n        await this.#worldBackupManager.load();\r\n        // Logging is handled by WorldBackupManager.load()\r\n      }\r\n\r\n      await this.deployPackCache();\r\n\r\n      const usingPreview = this.effectiveIsUsingPreview;\r\n      let couldGetVersion = await this.getLatestVersionInfo(false);\r\n\r\n      this._loadLatestDownloadedSource();\r\n\r\n      const serverTypeTarget =\r\n        this.#utilities.platform === Platform.linux ? ServerType.bedrockLinux : ServerType.bedrockWindows;\r\n      const serverTypePreviewTarget =\r\n        this.#utilities.platform === Platform.linux ? ServerType.bedrockLinuxPreview : ServerType.bedrockWindowsPreview;\r\n\r\n      let versionStateStr =\r\n        (usingPreview ? \"Using preview\" : \"Using main\") +\r\n        \" dedicated server.\\n  Latest main server available on minecraft.net: \" +\r\n        (this.serverVersions[serverTypeTarget].version ? this.serverVersions[serverTypeTarget].version : \"(none)\");\r\n\r\n      if (this.serverVersions[serverTypePreviewTarget].version) {\r\n        versionStateStr +=\r\n          \"\\n  Latest preview server available on minecraft.net: \" +\r\n          (this.serverVersions[serverTypePreviewTarget]\r\n            ? this.serverVersions[serverTypePreviewTarget].version\r\n            : \"(none)\");\r\n      }\r\n\r\n      if (this.serverVersions[serverTypeTarget].downloadedPath) {\r\n        versionStateStr +=\r\n          \"\\n  Latest downloaded main server version: \" +\r\n          (this.serverVersions[serverTypeTarget].downloadedPath\r\n            ? this.serverVersions[serverTypeTarget].downloadedPath\r\n            : \"(none)\");\r\n      }\r\n\r\n      if (this.serverVersions[serverTypePreviewTarget].downloadedPath) {\r\n        versionStateStr +=\r\n          \"\\n  Latest downloaded preview server version: \" +\r\n          (this.serverVersions[serverTypePreviewTarget].downloadedPath\r\n            ? this.serverVersions[serverTypePreviewTarget].downloadedPath\r\n            : \"(none)\");\r\n      }\r\n\r\n      Log.message(versionStateStr);\r\n\r\n      const serverType = usingPreview ? serverTypePreviewTarget : serverTypeTarget;\r\n\r\n      const serverVersion = this.serverVersions[serverType];\r\n\r\n      if (this.creatorTools.dedicatedServerMode === DedicatedServerMode.auto) {\r\n        if (couldGetVersion) {\r\n          // if our source isn't up to date, download something new\r\n          if (\r\n            serverVersion.downloadedIndex === undefined ||\r\n            (serverVersion.versionIndex && serverVersion.versionIndex > serverVersion.downloadedIndex) ||\r\n            force\r\n          ) {\r\n            await this.downloadLatestSourceServer();\r\n\r\n            this._loadLatestDownloadedSource();\r\n          }\r\n        }\r\n      }\r\n\r\n      const folders = fs.readdirSync(this.#utilities.serversPath);\r\n\r\n      let latestServer: string | undefined;\r\n      let latestServerDate = new Date(0, 0, 0);\r\n\r\n      for (const folder of folders) {\r\n        if (folder.startsWith(\"srv\") && folder.length === 17) {\r\n          const dateStr = folder.substring(3);\r\n\r\n          if (Utilities.isNumeric(dateStr)) {\r\n            const fullPath =\r\n              NodeStorage.ensureEndsWithDelimiter(this.#utilities.serversPath) +\r\n              folder +\r\n              NodeStorage.platformFolderDelimiter;\r\n\r\n            const dedicatedServer = this.ensureDedicatedServerForPath(folder, fullPath);\r\n\r\n            if (dedicatedServer) {\r\n              dedicatedServer.version = serverVersion;\r\n              this.#servers[folder] = dedicatedServer;\r\n            }\r\n\r\n            const serverDate = Utilities.getDateFromStr(dateStr);\r\n\r\n            if (serverDate.getTime() > latestServerDate.getTime()) {\r\n              // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n              latestServer = folder;\r\n              latestServerDate = serverDate;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    Log.message(\"Done preparing servers.\");\r\n\r\n    this.#isPrepared = true;\r\n  }\r\n\r\n  _loadLatestDownloadedSource() {\r\n    const serverSourceFolder = this.ensureSourceServerFolder();\r\n\r\n    // e.g., C:\\\\Users\\\\<user>\\\\AppData\\\\Local\\\\mctools_server\\\\serverSources\\\\\r\n    const sourceFolders = fs.readdirSync(serverSourceFolder);\r\n\r\n    for (const folder of sourceFolders) {\r\n      if (folder.length > 3 && folder[2] === \"v\") {\r\n        const serverType = ServerManager.getServerTypeFromString(folder.substring(0, 2));\r\n\r\n        const verStr = folder.substring(3);\r\n\r\n        if (serverType !== undefined && Utilities.isNumeric(verStr.replace(/./g, \"\"))) {\r\n          const verIndex = Database.getVersionIndexFromVersionStr(verStr);\r\n          const serverVersion = this.serverVersions[serverType];\r\n\r\n          if (verIndex > 0 && serverVersion) {\r\n            const fullPath =\r\n              NodeStorage.ensureEndsWithDelimiter(this.#utilities.sourceServersPath) +\r\n              folder +\r\n              NodeStorage.platformFolderDelimiter;\r\n\r\n            if (serverVersion.downloadedIndex === undefined || verIndex > serverVersion.downloadedIndex) {\r\n              serverVersion.downloadedPath = fullPath;\r\n              serverVersion.downloadedIndex = verIndex;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  ensureDirectServer(directServerPath: string) {\r\n    if (!directServerPath) {\r\n      throw new Error(\"No direct server path was specified.\");\r\n    }\r\n\r\n    if (this.activeDirectServer === undefined) {\r\n      const dedicatedServer = this.ensureDedicatedServerForPath(\"direct\", directServerPath);\r\n\r\n      if (!dedicatedServer) {\r\n        throw new Error(\"Unexpectedly could not create a dedicated server.\");\r\n      }\r\n\r\n      return dedicatedServer;\r\n    }\r\n\r\n    return this.activeDirectServer;\r\n  }\r\n\r\n  getBasePortForSlot(slotNumber?: number) {\r\n    if (!slotNumber) {\r\n      slotNumber = 0;\r\n    }\r\n\r\n    // assume if slotNumber > 79 they actually are suggesting a base port number\r\n    if (slotNumber > 79) {\r\n      return slotNumber;\r\n    }\r\n\r\n    return MinecraftUtilities.getPortForSlot(slotNumber);\r\n  }\r\n\r\n  getActiveServer(basePortOrSlot?: number) {\r\n    const port = this.getBasePortForSlot(basePortOrSlot);\r\n\r\n    return this.#activeServersByPort[port];\r\n  }\r\n\r\n  /**\r\n   * Get all active slot numbers that have running DedicatedServer instances.\r\n   * Returns an array of slot numbers (0-79).\r\n   */\r\n  getActiveSlots(): number[] {\r\n    const slots: number[] = [];\r\n    for (const portStr in this.#activeServersByPort) {\r\n      const port = parseInt(portStr);\r\n      if (this.#activeServersByPort[port]) {\r\n        slots.push(MinecraftUtilities.getSlotFromPort(port));\r\n      }\r\n    }\r\n    return slots.sort((a, b) => a - b);\r\n  }\r\n\r\n  getHashFromStartInfo(startInfo?: IMinecraftStartMessage) {\r\n    if (!startInfo) {\r\n      return undefined;\r\n    }\r\n\r\n    let hash = \"\";\r\n\r\n    if (startInfo.track) {\r\n      hash += startInfo.track?.toString();\r\n    }\r\n\r\n    hash += \".\";\r\n\r\n    if (startInfo.mode) {\r\n      hash += startInfo.mode;\r\n    }\r\n    hash += \".\";\r\n\r\n    if (startInfo.projectKey) {\r\n      hash += startInfo.projectKey;\r\n    }\r\n\r\n    hash += \".\";\r\n\r\n    if (startInfo.worldSettings) {\r\n      hash += JSON.stringify(startInfo.worldSettings);\r\n    }\r\n\r\n    return hash;\r\n  }\r\n\r\n  async ensureActiveServer(basePortOrSlot?: number, startInfo?: IMinecraftStartMessage) {\r\n    const port = this.getBasePortForSlot(basePortOrSlot);\r\n\r\n    await this.#creatorTools.load();\r\n\r\n    let configHash = undefined;\r\n\r\n    let directServerPath = undefined;\r\n    let sourceServerPath = undefined;\r\n\r\n    let mode = DedicatedServerMode.auto;\r\n\r\n    if (startInfo) {\r\n      if (startInfo.mode === DedicatedServerMode.direct && startInfo.path) {\r\n        directServerPath = startInfo.path;\r\n        mode = DedicatedServerMode.direct;\r\n      } else if (startInfo.mode === DedicatedServerMode.source && startInfo.path) {\r\n        sourceServerPath = startInfo.path;\r\n        mode = DedicatedServerMode.source;\r\n      }\r\n\r\n      if (startInfo.track === MinecraftTrack.main || startInfo.track === undefined) {\r\n        this.#usePreview = false;\r\n      } else {\r\n        this.#usePreview = true;\r\n      }\r\n\r\n      configHash = this.getHashFromStartInfo(startInfo);\r\n    } else {\r\n      if (\r\n        this.#creatorTools.dedicatedServerMode === DedicatedServerMode.source &&\r\n        this.#creatorTools.dedicatedServerPath &&\r\n        this.#creatorTools.dedicatedServerPath.length > 3\r\n      ) {\r\n        sourceServerPath = this.#creatorTools.dedicatedServerPath;\r\n      } else if (\r\n        this.#creatorTools.dedicatedServerMode === DedicatedServerMode.direct &&\r\n        this.#creatorTools.dedicatedServerPath &&\r\n        this.#creatorTools.dedicatedServerPath.length > 3\r\n      ) {\r\n        directServerPath = this.#creatorTools.dedicatedServerPath;\r\n      }\r\n    }\r\n\r\n    /*\r\n    if (mode === DedicatedServerMode.direct && directServerPath) {\r\n      const dedicatedServer = this.ensureDirectServer(directServerPath);\r\n\r\n      if (basePortOrSlot && dedicatedServer) {\r\n        dedicatedServer.port = port;\r\n\r\n        return dedicatedServer;\r\n      }\r\n    }*/\r\n\r\n    if (this.#activeServersByPort[port]) {\r\n      const srv = this.#activeServersByPort[port];\r\n\r\n      if (configHash === undefined || srv.startConfigurationHash === configHash) {\r\n        return srv;\r\n      } else {\r\n        this.#quiescentServersByPort[port] = srv;\r\n        await srv.stopServer();\r\n      }\r\n    }\r\n\r\n    await this.prepare();\r\n\r\n    if (sourceServerPath === undefined) {\r\n      sourceServerPath = this.effectiveAutoSourceServerPath;\r\n    }\r\n\r\n    let name = undefined;\r\n    let path = undefined;\r\n\r\n    // Calculate slot number from port for consistent folder naming\r\n    const slotNumber = MinecraftUtilities.getSlotFromPort(port);\r\n\r\n    if ((mode === DedicatedServerMode.auto || mode === DedicatedServerMode.source) && sourceServerPath !== undefined) {\r\n      try {\r\n        const result = await this.prepareSlotServerPath(sourceServerPath, slotNumber, {\r\n          transientWorld: startInfo?.transientWorld,\r\n        });\r\n        name = result.name;\r\n        path = result.path;\r\n      } catch (e) {\r\n        Log.message(\"Error creating slot server path: \" + e);\r\n        return undefined;\r\n      }\r\n    } else if (mode === DedicatedServerMode.direct && directServerPath) {\r\n      path = directServerPath;\r\n      name = StorageUtilities.getLeafName(directServerPath) + \"_\" + Utilities.getDateStr(new Date());\r\n    }\r\n\r\n    if (!path || !name) {\r\n      throw new Error(\"Could not establish path for dedicated server to run.\");\r\n    }\r\n\r\n    const operId = await this.creatorTools.notifyOperationStarted(\"Provisioning new server at '\" + path + \"'\");\r\n\r\n    const worldFolderName = startInfo?.worldSettings?.name ? startInfo?.worldSettings?.name : \"world\";\r\n\r\n    const worldBackupFolder = this.#env.worldContainerStorage.rootFolder.ensureFolder(worldFolderName);\r\n\r\n    const newDedicatedServer = new DedicatedServer(name, this, this.#env, path, worldBackupFolder);\r\n\r\n    newDedicatedServer.startConfigurationHash = configHash;\r\n    newDedicatedServer.port = port;\r\n\r\n    newDedicatedServer.onPlayerConnected.subscribe(this.bubblePlayerConnected);\r\n    newDedicatedServer.onPlayerDisconnected.subscribe(this.bubblePlayerDisconnected);\r\n\r\n    newDedicatedServer.onServerError.subscribe(this.bubbleServerError);\r\n    newDedicatedServer.onServerOutput.subscribe(this.bubbleServerOutput);\r\n    newDedicatedServer.onServerStarted.subscribe(this.bubbleServerStarted);\r\n    newDedicatedServer.onServerRefreshed.subscribe(this.bubbleServerRefreshed);\r\n    newDedicatedServer.onServerStarting.subscribe(this.bubbleServerStarting);\r\n    newDedicatedServer.onServerStopping.subscribe(this.bubbleServerStopping);\r\n    newDedicatedServer.onServerStopped.subscribe(this.bubbleServerStopped);\r\n\r\n    newDedicatedServer.onTestFailed.subscribe(this.bubbleTestFailed);\r\n    newDedicatedServer.onTestStarted.subscribe(this.bubbleTestStarted);\r\n    newDedicatedServer.onTestSucceeded.subscribe(this.bubbleTestSucceeded);\r\n    newDedicatedServer.onServerGameEvent.subscribe(this.bubbleServerGameEvent);\r\n\r\n    // Subscribe to debug events\r\n    newDedicatedServer.onDebugConnected.subscribe(this.bubbleDebugConnected);\r\n    newDedicatedServer.onDebugDisconnected.subscribe(this.bubbleDebugDisconnected);\r\n    newDedicatedServer.onDebugStats.subscribe(this.bubbleDebugStats);\r\n    newDedicatedServer.onDebugPaused.subscribe(this.bubbleDebugPaused);\r\n    newDedicatedServer.onDebugResumed.subscribe(this.bubbleDebugResumed);\r\n    newDedicatedServer.onProfilerCapture.subscribe(this.bubbleProfilerCapture);\r\n\r\n    this.#activeServersByPort[port] = newDedicatedServer;\r\n    this.#servers[name] = newDedicatedServer;\r\n\r\n    await newDedicatedServer.ensureServerFolders();\r\n\r\n    if (!startInfo || (startInfo && !startInfo.forceStartNewWorld)) {\r\n      await newDedicatedServer.restoreLatestBackupWorld();\r\n    }\r\n\r\n    Log.assert(newDedicatedServer.defaultWorldFolder !== undefined, \"DSMEAS\");\r\n\r\n    if (startInfo && startInfo.worldSettings && newDedicatedServer.defaultWorldFolder) {\r\n      await this.preparePacksAndTemplates(path, newDedicatedServer.defaultWorldFolder, startInfo.worldSettings);\r\n    }\r\n\r\n    await newDedicatedServer.ensureContentDeployed(startInfo);\r\n    await newDedicatedServer.ensureWorld(startInfo);\r\n\r\n    await this.creatorTools.notifyOperationEnded(operId, \"Done provisioning new server at '\" + path + \"'\");\r\n\r\n    return newDedicatedServer;\r\n  }\r\n\r\n  /**\r\n   * Checks if a slot needs reprovisioning based on source server path changes.\r\n   * Returns true if reprovisioning is needed, false if the slot can be reused as-is.\r\n   */\r\n  needsReprovisioning(slotNumber: number, sourcePath: string): boolean {\r\n    const slotServerPath =\r\n      NodeStorage.ensureEndsWithDelimiter(this.#utilities.serversPath) +\r\n      this.getSlotFolderName(slotNumber) +\r\n      NodeStorage.platformFolderDelimiter;\r\n\r\n    // Check if the slot folder still exists\r\n    if (!fs.existsSync(slotServerPath)) {\r\n      Log.message(`Slot ${slotNumber} needs reprovisioning: folder no longer exists`);\r\n      return true;\r\n    }\r\n\r\n    // First try in-memory state\r\n    let provisioningInfo: ISlotProvisioningInfo | undefined = this.#slotProvisioningInfo[slotNumber];\r\n\r\n    // If no in-memory state, try to load from sentinel file on disk\r\n    // This handles the case where MCT was restarted but slot folder still exists\r\n    if (!provisioningInfo) {\r\n      const loadedInfo = this.loadSlotContext(slotNumber, slotServerPath);\r\n\r\n      if (loadedInfo) {\r\n        // Restore in-memory state from disk\r\n        provisioningInfo = loadedInfo;\r\n        this.#slotProvisioningInfo[slotNumber] = loadedInfo;\r\n        Log.verbose(`Slot ${slotNumber}: restored provisioning context from sentinel file`);\r\n      } else {\r\n        // Slot folder exists but no sentinel file - needs reprovisioning\r\n        Log.message(`Slot ${slotNumber} needs reprovisioning: no sentinel file found`);\r\n        return true;\r\n      }\r\n    }\r\n\r\n    // Normalize paths for comparison\r\n    const normalizedSource = NodeStorage.ensureEndsWithDelimiter(sourcePath).toLowerCase();\r\n    const normalizedProvisioned = provisioningInfo.sourceServerPath.toLowerCase();\r\n\r\n    if (normalizedSource !== normalizedProvisioned) {\r\n      Log.message(\r\n        `Slot ${slotNumber} needs reprovisioning: source changed from '${provisioningInfo.sourceServerPath}' to '${sourcePath}'`\r\n      );\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Prepares a slot-based runtime server folder.\r\n   *\r\n   * Uses persistent slot-based folder names (e.g., `slot0/`, `slot1/`) instead of\r\n   * timestamp-based names. This keeps the `bedrock_server.exe` path constant,\r\n   * preventing Windows Firewall from prompting on every server start.\r\n   *\r\n   * **Smart Reprovisioning**: If the slot already exists and was provisioned from\r\n   * the same source server path, this method returns quickly without re-doing\r\n   * file operations. This makes stop/start cycles fast.\r\n   *\r\n   * **Backup Before Clean**: If the slot exists but needs reprovisioning (different\r\n   * source version), world data is backed up before any destructive operations.\r\n   * For transient worlds, the world folder is cleared instead of backed up.\r\n   *\r\n   * @param sourcePath - Path to the downloaded source server (e.g., bwv1.21.50.24/)\r\n   * @param slotNumber - The slot number (0-79) for this server instance\r\n   * @param options - Provisioning options (forceReprovision, transientWorld)\r\n   * @returns Object with name and path for the runtime server\r\n   */\r\n  async prepareSlotServerPath(sourcePath: string, slotNumber: number = 0, options: ISlotProvisioningOptions = {}) {\r\n    const { forceReprovision = false, transientWorld = false } = options;\r\n\r\n    if (!sourcePath) {\r\n      throw new Error(\"No source server path specified.\");\r\n    }\r\n\r\n    if (!fs.existsSync(sourcePath)) {\r\n      throw new Error(\"Source server path '\" + sourcePath + \"' does not appear to exist.\");\r\n    }\r\n\r\n    sourcePath = NodeStorage.ensureEndsWithDelimiter(sourcePath);\r\n\r\n    // Use slot-based naming for persistent folder paths, with context prefix.\r\n    const name = this.getSlotFolderName(slotNumber);\r\n    const slotServerPath =\r\n      NodeStorage.ensureEndsWithDelimiter(this.#utilities.serversPath) + name + NodeStorage.platformFolderDelimiter;\r\n\r\n    const isExistingSlot = fs.existsSync(slotServerPath);\r\n\r\n    // Check if we can skip reprovisioning (same source, folder exists)\r\n    if (!forceReprovision && isExistingSlot && !this.needsReprovisioning(slotNumber, sourcePath)) {\r\n      Log.message(`Slot ${slotNumber} already provisioned from same source - reusing existing folder`);\r\n      return {\r\n        name: name,\r\n        path: slotServerPath,\r\n        wasReprovisioned: false,\r\n      };\r\n    }\r\n\r\n    Log.message(\r\n      `Preparing server from source at '${sourcePath}' to slot location '${slotServerPath}'` +\r\n        (isExistingSlot ? \" (updating existing slot)\" : \" (new slot)\") +\r\n        (transientWorld ? \" [transient - will reset world]\" : \"\")\r\n    );\r\n\r\n    // If slot exists, handle existing world data\r\n    if (isExistingSlot) {\r\n      if (transientWorld) {\r\n        // For transient worlds, clear the world folder instead of backing up\r\n        await this.clearSlotWorldData(slotNumber, slotServerPath);\r\n      } else {\r\n        await this.backupSlotWorldData(slotNumber, slotServerPath);\r\n      }\r\n    } else {\r\n      fs.mkdirSync(slotServerPath, { recursive: true });\r\n    }\r\n\r\n    // Update symlinks to point to the new source version\r\n    this.updateDedicatedServerSymLinkFolder(sourcePath, \"behavior_packs\", slotServerPath);\r\n    this.updateDedicatedServerSymLinkFolder(sourcePath, \"definitions\", slotServerPath);\r\n    this.updateDedicatedServerSymLinkFolder(sourcePath, \"resource_packs\", slotServerPath);\r\n    this.updateDedicatedServerSymLinkFolder(sourcePath, \"structures\", slotServerPath);\r\n    this.updateDedicatedServerSymLinkFolder(sourcePath, \"world_templates\", slotServerPath);\r\n\r\n    // Copy/update configuration files\r\n    this.updateDedicatedServerFile(sourcePath, \"allowlist.json\", slotServerPath);\r\n    this.updateDedicatedServerFile(sourcePath, \"invalid_known_packs.json\", slotServerPath);\r\n    this.updateDedicatedServerFile(sourcePath, \"permissions.json\", slotServerPath);\r\n    this.updateDedicatedServerFile(sourcePath, \"valid_known_packs.json\", slotServerPath);\r\n\r\n    // Copy/update the platform-specific server executable\r\n    const serverExecutable = os.platform() === \"win32\" ? \"bedrock_server.exe\" : \"bedrock_server\";\r\n    this.updateDedicatedServerFile(sourcePath, serverExecutable, slotServerPath);\r\n\r\n    // On Linux, ensure the server executable has execute permissions\r\n    if (os.platform() !== \"win32\") {\r\n      const executablePath = slotServerPath + serverExecutable;\r\n      if (fs.existsSync(executablePath)) {\r\n        try {\r\n          fs.chmodSync(executablePath, 0o755);\r\n          Log.verbose(`Set executable permissions on ${executablePath}`);\r\n        } catch (e: any) {\r\n          Log.error(`Failed to set executable permissions on ${executablePath}: ${e.message}`);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Track provisioning info for smart reprovisioning detection\r\n    const provisioningInfo: ISlotProvisioningInfo = {\r\n      sourceServerPath: sourcePath,\r\n      provisionedAt: new Date(),\r\n      version: this.extractVersionFromSourcePath(sourcePath),\r\n      transientWorld: transientWorld || undefined, // Only store if true to keep sentinel file clean\r\n    };\r\n\r\n    this.#slotProvisioningInfo[slotNumber] = provisioningInfo;\r\n\r\n    // Persist the sentinel file to disk so it survives server restarts\r\n    this.saveSlotContext(slotNumber, slotServerPath, provisioningInfo);\r\n\r\n    return {\r\n      name: name,\r\n      path: slotServerPath,\r\n      wasReprovisioned: true,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Saves the slot context/sentinel file to disk.\r\n   * This file records why/how the slot was created so we can detect context changes.\r\n   */\r\n  saveSlotContext(slotNumber: number, slotServerPath: string, info: ISlotProvisioningInfo) {\r\n    try {\r\n      const contextPath = slotServerPath + SLOT_CONTEXT_FILENAME;\r\n      const data = {\r\n        ...info,\r\n        provisionedAt: info.provisionedAt instanceof Date ? info.provisionedAt.toISOString() : info.provisionedAt,\r\n      };\r\n      fs.writeFileSync(contextPath, JSON.stringify(data, null, 2), \"utf8\");\r\n      Log.verbose(`Saved slot context to ${contextPath}`);\r\n    } catch (e: any) {\r\n      Log.error(`Failed to save slot context for slot ${slotNumber}: ${e.message}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the slot context/sentinel file from disk.\r\n   * Returns undefined if the file doesn't exist or is invalid.\r\n   */\r\n  loadSlotContext(slotNumber: number, slotServerPath: string): ISlotProvisioningInfo | undefined {\r\n    try {\r\n      const contextPath = slotServerPath + SLOT_CONTEXT_FILENAME;\r\n      if (!fs.existsSync(contextPath)) {\r\n        return undefined;\r\n      }\r\n      const data = JSON.parse(fs.readFileSync(contextPath, \"utf8\")) as ISlotProvisioningInfo;\r\n      // Convert ISO string back to Date\r\n      if (typeof data.provisionedAt === \"string\") {\r\n        data.provisionedAt = new Date(data.provisionedAt);\r\n      }\r\n      return data;\r\n    } catch (e: any) {\r\n      Log.debug(`Failed to load slot context for slot ${slotNumber}: ${e.message}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Extracts the version string from a source server path.\r\n   * E.g., \"bwv1.21.50.24/\" -> \"1.21.50.24\"\r\n   */\r\n  extractVersionFromSourcePath(sourcePath: string): string | undefined {\r\n    // Source paths look like: .../serverSources/bwv1.21.50.24/\r\n    const match = sourcePath.match(/[bp][wl]v?([\\d.]+)/i);\r\n    return match ? match[1] : undefined;\r\n  }\r\n\r\n  /**\r\n   * Backs up world data from a slot folder before destructive operations.\r\n   * Uses the centralized WorldBackupManager for backup storage and deduplication.\r\n   * Skips backup if the slot is marked as transient (transientWorld flag).\r\n   */\r\n  async backupSlotWorldData(slotNumber: number, slotServerPath: string) {\r\n    // Check if this slot is marked as transient - if so, skip backup\r\n    const slotContext = this.#slotProvisioningInfo[slotNumber];\r\n    if (slotContext?.transientWorld) {\r\n      Log.verbose(`Slot ${slotNumber}: Transient world - skipping backup`);\r\n      return;\r\n    }\r\n\r\n    const worldsPath = slotServerPath + \"worlds\" + NodeStorage.platformFolderDelimiter;\r\n    const defaultWorldPath = worldsPath + \"defaultWorld\" + NodeStorage.platformFolderDelimiter;\r\n\r\n    if (!fs.existsSync(defaultWorldPath)) {\r\n      Log.verbose(`Slot ${slotNumber}: No world data to backup`);\r\n      return;\r\n    }\r\n\r\n    // Check if there's actually any content worth backing up\r\n    const levelDatPath = defaultWorldPath + \"level.dat\";\r\n    if (!fs.existsSync(levelDatPath)) {\r\n      Log.verbose(`Slot ${slotNumber}: No level.dat found, skipping backup`);\r\n      return;\r\n    }\r\n\r\n    // Ensure world backup manager is initialized\r\n    if (!this.#worldBackupManager) {\r\n      Log.verbose(`Slot ${slotNumber}: WorldBackupManager not initialized, skipping backup`);\r\n      return;\r\n    }\r\n\r\n    const operId = await this.creatorTools.notifyOperationStarted(`Backing up world data from slot ${slotNumber}`);\r\n\r\n    try {\r\n      // Get or create the managed world for this slot\r\n      const world = await this.#worldBackupManager.getOrCreateWorldForSlot(slotNumber);\r\n\r\n      // Create backup using WorldBackupManager\r\n      const result = await this.#worldBackupManager.createBackup(world.id, defaultWorldPath);\r\n\r\n      if (result.success) {\r\n        Log.message(`Slot ${slotNumber}: World backed up (${result.backupId})`);\r\n        await this.creatorTools.notifyOperationEnded(operId, `World data backed up from slot ${slotNumber}`);\r\n      } else {\r\n        Log.error(`Slot ${slotNumber}: Backup failed - ${result.error}`);\r\n        await this.creatorTools.notifyOperationEnded(operId, `Backup failed: ${result.error}`);\r\n      }\r\n    } catch (e: any) {\r\n      Log.error(`Failed to backup world data from slot ${slotNumber}: ${e.message}`);\r\n      await this.creatorTools.notifyOperationEnded(operId, `Failed to backup world data: ${e.message}`);\r\n      // Don't throw - we still want to proceed with reprovisioning\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clears world data from a slot folder for transient worlds.\r\n   * This resets the world to a fresh state, only keeping level.dat and level_name.txt\r\n   * to preserve world name and seed settings.\r\n   */\r\n  async clearSlotWorldData(slotNumber: number, slotServerPath: string) {\r\n    const worldsPath = slotServerPath + \"worlds\" + NodeStorage.platformFolderDelimiter;\r\n    const defaultWorldPath = worldsPath + \"defaultWorld\" + NodeStorage.platformFolderDelimiter;\r\n\r\n    if (!fs.existsSync(defaultWorldPath)) {\r\n      Log.verbose(`Slot ${slotNumber}: No world data to clear`);\r\n      return;\r\n    }\r\n\r\n    Log.message(`Slot ${slotNumber}: Clearing transient world data`);\r\n\r\n    try {\r\n      const entries = fs.readdirSync(defaultWorldPath, { withFileTypes: true });\r\n\r\n      for (const entry of entries) {\r\n        const entryPath = defaultWorldPath + entry.name;\r\n\r\n        // Keep level.dat and level_name.txt (world config/seed)\r\n        // But clear db/ folder (all block/entity data) and other runtime files\r\n        if (entry.name === \"level.dat\" || entry.name === \"level_name.txt\") {\r\n          continue;\r\n        }\r\n\r\n        // Retry with delay for EBUSY errors (locked LevelDB files from stale processes)\r\n        for (let attempt = 0; attempt < 3; attempt++) {\r\n          try {\r\n            if (entry.isDirectory()) {\r\n              fs.rmSync(entryPath, { recursive: true, force: true });\r\n            } else {\r\n              fs.unlinkSync(entryPath);\r\n            }\r\n            break; // success\r\n          } catch (rmErr: any) {\r\n            if (rmErr.code === \"EBUSY\" && attempt < 2) {\r\n              Log.debug(`EBUSY on ${entry.name}, retrying in ${(attempt + 1) * 500}ms...`);\r\n              await new Promise((resolve) => setTimeout(resolve, (attempt + 1) * 500));\r\n            } else {\r\n              throw rmErr;\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      Log.verbose(`Slot ${slotNumber}: World data cleared - will start fresh on next launch`);\r\n    } catch (e: any) {\r\n      Log.error(`Failed to clear world data from slot ${slotNumber}: ${e.message}`);\r\n      // Don't throw - we still want to proceed\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @deprecated Use prepareSlotServerPath instead. This method is kept for backwards\r\n   * compatibility but creates timestamp-based folders that cause Windows Firewall prompts.\r\n   */\r\n  async prepareTempServerNameAndPath(sourcePath: string) {\r\n    Log.message(\"Warning: prepareTempServerNameAndPath is deprecated. Use prepareSlotServerPath instead.\");\r\n    // Default to slot 0 for backwards compatibility\r\n    return this.prepareSlotServerPath(sourcePath, 0);\r\n  }\r\n\r\n  async preparePacksAndTemplates(targetPath: string, targetWorldFolder: IFolder, worldSettings: IWorldSettings) {\r\n    if (!this.#creatorTools) {\r\n      return;\r\n    }\r\n\r\n    // Ensure packageReferences array exists\r\n    if (!worldSettings.packageReferences) {\r\n      worldSettings.packageReferences = [];\r\n    }\r\n\r\n    // If deployCreatorToolsInfrastructure is enabled, add the creator-tools-ingame addon\r\n    // This provides in-game script endpoints for status updates, player tracking, etc.\r\n    if (worldSettings.deployCreatorToolsInfrastructure) {\r\n      Package.ensureMinecraftCreatorToolsPackageReference(worldSettings.packageReferences);\r\n    }\r\n\r\n    const packCachePath = this.ensurePackCacheFolder();\r\n\r\n    if (!packCachePath) {\r\n      throw new Error(\"No pack cache path specified.\");\r\n    }\r\n\r\n    if (!fs.existsSync(packCachePath)) {\r\n      throw new Error(\"Pack cache path '\" + packCachePath + \"' does not appear to exist.\");\r\n    }\r\n\r\n    if (worldSettings.worldTemplateReferences) {\r\n      for (let i = 0; i < worldSettings.worldTemplateReferences.length; i++) {\r\n        const templateRef = worldSettings.worldTemplateReferences[i];\r\n\r\n        const pack = this.#creatorTools.getPackageByNameAndHash(templateRef.name, templateRef.hash);\r\n        Log.message(\"Applying pack \" + templateRef.name + \" (\" + templateRef.hash + \")\");\r\n        if (pack) {\r\n          await this.addWorldTemplate(targetWorldFolder, pack);\r\n          await this.addPackageFolders(targetPath, pack, templateRef);\r\n        } else {\r\n          Log.message(\r\n            \"Could not find pack '\" + templateRef.name + \"' referenced for world '\" + worldSettings.name + \"'\"\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < worldSettings.packageReferences.length; i++) {\r\n      const packageRef = worldSettings.packageReferences[i];\r\n\r\n      const packageI = this.#creatorTools.getPackageByNameAndHash(packageRef.name, packageRef.hash);\r\n\r\n      if (packageI) {\r\n        await this.addPackageFolders(targetPath, packageI, packageRef);\r\n      } else {\r\n        Log.message(\"Could not find pack '\" + packageRef.name + \"' referenced for world '\" + worldSettings.name + \"'\");\r\n      }\r\n    }\r\n  }\r\n\r\n  async addPackageFolders(targetPath: string, pack: Package, packRef: IPackageReference) {\r\n    if (!pack.cacheFolder) {\r\n      return;\r\n    }\r\n\r\n    let slug = StorageUtilities.canonicalizePathAsFileName(pack.name);\r\n\r\n    if (slug.length > 6) {\r\n      slug = slug.substring(0, 6);\r\n    }\r\n\r\n    if (pack.data?.sourceHash) {\r\n      slug += \"_\" + Utilities.makeHashFileSafe(pack.data?.sourceHash);\r\n    }\r\n\r\n    await this.addPackFolderReferences(targetPath, pack.cacheFolder, slug, packRef);\r\n  }\r\n\r\n  async addWorldTemplate(targetWorldFolder: IFolder, pack: Package) {\r\n    if (!pack.cacheFolder) {\r\n      return;\r\n    }\r\n\r\n    await this.copyWorldFiles(targetWorldFolder, pack.cacheFolder);\r\n  }\r\n\r\n  async addPackFolderReferences(\r\n    targetPath: string,\r\n    folder: IFolder,\r\n    folderModifier: string,\r\n    packRefSet: IPackageReference\r\n  ) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    if (MinecraftUtilities.pathLooksLikeResourcePackContainerName(folder.name)) {\r\n      this.addChildFolderReferences(targetPath, folder, folderModifier, \"development_resource_packs\");\r\n    } else if (MinecraftUtilities.pathLooksLikeBehaviorPackContainerName(folder.name)) {\r\n      this.addChildFolderReferences(targetPath, folder, folderModifier, \"development_behavior_packs\");\r\n    } else if (\r\n      (folder.files[\"manifest.json\"] !== undefined || folder.files[\"pack_manifest.json\"] !== undefined) &&\r\n      folder.files[\"level.dat\"] === undefined\r\n    ) {\r\n      const manifestFile = folder.files[\"manifest.json\"] || folder.files[\"pack_manifest.json\"];\r\n\r\n      if (manifestFile) {\r\n        await manifestFile.loadContent();\r\n        const content = manifestFile.content;\r\n\r\n        if (content && typeof content === \"string\") {\r\n          // Parse the manifest to get the header UUID - this identifies the pack itself,\r\n          // not its dependencies. Using string search was incorrect because a BP's manifest\r\n          // may contain an RP UUID in its dependencies section.\r\n          try {\r\n            const manifest = JSON.parse(content);\r\n            const headerUuid = manifest?.header?.uuid?.toLowerCase();\r\n\r\n            if (headerUuid) {\r\n              // Check if this pack's UUID matches any resource pack reference\r\n              for (const packRef of packRefSet.resourcePackReferences) {\r\n                if (headerUuid === packRef.uuid.toLowerCase()) {\r\n                  this.createSymLinkFolder(\r\n                    NodeStorage.ensureEndsWithDelimiter(targetPath) +\r\n                      \"development_resource_packs\" +\r\n                      NodeStorage.platformFolderDelimiter +\r\n                      folderModifier +\r\n                      \"_\" +\r\n                      folder.name,\r\n                    folder.fullPath\r\n                  );\r\n                  break;\r\n                }\r\n              }\r\n\r\n              // Check if this pack's UUID matches any behavior pack reference\r\n              for (const packRef of packRefSet.behaviorPackReferences) {\r\n                if (headerUuid === packRef.uuid.toLowerCase()) {\r\n                  this.createSymLinkFolder(\r\n                    NodeStorage.ensureEndsWithDelimiter(targetPath) +\r\n                      \"development_behavior_packs\" +\r\n                      NodeStorage.platformFolderDelimiter +\r\n                      folderModifier +\r\n                      \"_\" +\r\n                      folder.name,\r\n                    folder.fullPath\r\n                  );\r\n                  break;\r\n                }\r\n              }\r\n            }\r\n          } catch {\r\n            // If manifest parsing fails, skip this folder\r\n            Log.debug(`Failed to parse manifest.json in ${folder.fullPath}`);\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      for (const folderName in folder.folders) {\r\n        const childFolder = folder.folders[folderName];\r\n\r\n        if (childFolder && !childFolder.errorStatus) {\r\n          await this.addPackFolderReferences(targetPath, childFolder, folderModifier, packRefSet);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async copyWorldFiles(targetWorldFolder: IFolder, sourceFolder: IFolder) {\r\n    if (!sourceFolder.isLoaded) {\r\n      await sourceFolder.load();\r\n    }\r\n\r\n    if (sourceFolder.files[\"level.dat\"] !== undefined) {\r\n      await StorageUtilities.syncFolderTo(\r\n        sourceFolder,\r\n        targetWorldFolder,\r\n        false,\r\n        false,\r\n        false,\r\n        [\"resource_packs\", \"behavior_packs\"],\r\n        undefined,\r\n        async (message: string) => {\r\n          Log.message(\"Extracting: \" + message + \".\");\r\n        }\r\n      );\r\n\r\n      await targetWorldFolder.saveAll();\r\n    } else {\r\n      for (const folderName in sourceFolder.folders) {\r\n        const childFolder = sourceFolder.folders[folderName];\r\n\r\n        if (childFolder && !childFolder.errorStatus) {\r\n          await this.copyWorldFiles(targetWorldFolder, childFolder);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  addChildFolderReferences(targetPath: string, loadedFolder: IFolder, folderModifier: string, targetSubFolder: string) {\r\n    for (const folderName in loadedFolder.folders) {\r\n      const childFolder = loadedFolder.folders[folderName];\r\n\r\n      if (childFolder && !childFolder.errorStatus) {\r\n        this.createSymLinkFolder(\r\n          NodeStorage.ensureEndsWithDelimiter(targetPath) +\r\n            targetSubFolder +\r\n            NodeStorage.platformFolderDelimiter +\r\n            folderModifier +\r\n            \"_\" +\r\n            folderName,\r\n          childFolder.fullPath\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  cleanDedicatedServerSymLinkFolder(folder: string, tempServerPath: string) {\r\n    const targetPath = tempServerPath + folder + NodeStorage.platformFolderDelimiter;\r\n\r\n    if (fs.existsSync(targetPath)) {\r\n      const stat = fs.statSync(targetPath);\r\n\r\n      if (stat.isSymbolicLink()) {\r\n        fs.rmdirSync(targetPath);\r\n      }\r\n    }\r\n  }\r\n\r\n  createSymLinkFolder(targetPath: string, sourcePath: string) {\r\n    if (!fs.existsSync(targetPath)) {\r\n      try {\r\n        // On Windows, use 'junction' because directory symlinks require admin/developer mode.\r\n        // On Linux/macOS, use 'dir' which works without elevated privileges.\r\n        const symlinkType = os.platform() === \"win32\" ? \"junction\" : \"dir\";\r\n        fs.symlinkSync(sourcePath, targetPath, symlinkType);\r\n      } catch (e: any) {\r\n        Log.error(`Failed to create symlink from '${sourcePath}' to '${targetPath}': ${e.message}`);\r\n        Log.message(\"Falling back to directory copy...\");\r\n        // Fall back to copying the directory if symlink fails\r\n        try {\r\n          fs.cpSync(sourcePath, targetPath, { recursive: true });\r\n        } catch (copyErr: any) {\r\n          Log.error(`Failed to copy directory as fallback: ${copyErr.message}`);\r\n          throw e; // Rethrow original error\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  createDedicatedServerSymLinkFolder(sourcePath: string, folder: string, tempServerPath: string) {\r\n    const targetPath = tempServerPath + folder + NodeStorage.platformFolderDelimiter;\r\n    const sourceFullPath = sourcePath + folder + NodeStorage.platformFolderDelimiter;\r\n\r\n    if (!fs.existsSync(targetPath)) {\r\n      try {\r\n        // On Windows, use 'junction' because directory symlinks require admin/developer mode.\r\n        // On Linux/macOS, use 'dir' which works without elevated privileges.\r\n        const symlinkType = os.platform() === \"win32\" ? \"junction\" : \"dir\";\r\n        fs.symlinkSync(sourceFullPath, targetPath, symlinkType);\r\n      } catch (e: any) {\r\n        Log.error(`Failed to create symlink for '${folder}': ${e.message}`);\r\n        Log.message(`Falling back to directory copy for '${folder}'...`);\r\n        // Fall back to copying the directory if symlink fails\r\n        try {\r\n          fs.cpSync(sourceFullPath, targetPath, { recursive: true });\r\n        } catch (copyErr: any) {\r\n          Log.error(`Failed to copy directory '${folder}' as fallback: ${copyErr.message}`);\r\n          throw e; // Rethrow original error\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  cleanDedicatedServerSymLinkFile(file: string, tempServerPath: string) {\r\n    const targetPath = tempServerPath + file;\r\n\r\n    if (fs.existsSync(targetPath)) {\r\n      const stat = fs.statSync(targetPath);\r\n\r\n      if (stat.isSymbolicLink()) {\r\n        fs.unlinkSync(targetPath);\r\n      }\r\n    }\r\n  }\r\n\r\n  createDedicatedServerFile(sourcePath: string, file: string, tempServerPath: string) {\r\n    const targetPath = tempServerPath + file;\r\n\r\n    if (!fs.existsSync(targetPath) && fs.existsSync(sourcePath + file)) {\r\n      // file symbolic links don't work on non-admin, non-developer mode PCs, so just copy instead.\r\n      //fs.symlinkSync(sourcePath + file, targetPath, \"file\");\r\n      fs.copyFileSync(sourcePath + file, targetPath);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates a symlink folder for slot-based server provisioning.\r\n   * If the target exists (symlink or directory), it is removed and recreated.\r\n   * This allows updating an existing slot to point to a new source server version.\r\n   */\r\n  updateDedicatedServerSymLinkFolder(sourcePath: string, folder: string, slotServerPath: string) {\r\n    // Don't include trailing delimiter for symlink operations - it causes issues\r\n    const targetPath = slotServerPath + folder;\r\n    const sourceFullPath = sourcePath + folder;\r\n\r\n    // Check if source folder exists - if not, skip this symlink\r\n    if (!fs.existsSync(sourceFullPath)) {\r\n      Log.verbose(`Source folder '${folder}' does not exist in '${sourcePath}' - skipping symlink`);\r\n      return;\r\n    }\r\n\r\n    // If target already exists, remove it first\r\n    if (fs.existsSync(targetPath)) {\r\n      try {\r\n        const stat = fs.lstatSync(targetPath);\r\n        if (stat.isSymbolicLink()) {\r\n          // Remove symlink - use the path without trailing delimiter\r\n          fs.unlinkSync(targetPath);\r\n          Log.verbose(`Removed existing symlink: ${targetPath}`);\r\n        } else if (stat.isDirectory()) {\r\n          // Remove copied directory\r\n          fs.rmSync(targetPath, { recursive: true, force: true });\r\n          Log.verbose(`Removed existing directory: ${targetPath}`);\r\n        } else {\r\n          // It's a file - remove it\r\n          fs.unlinkSync(targetPath);\r\n          Log.verbose(`Removed existing file: ${targetPath}`);\r\n        }\r\n      } catch (e: any) {\r\n        Log.error(`Failed to remove existing '${folder}' for update: ${e.message}`);\r\n        // Try to continue anyway - the symlink creation will fail if target still exists\r\n      }\r\n    }\r\n\r\n    // Create fresh symlink\r\n    try {\r\n      const symlinkType = os.platform() === \"win32\" ? \"junction\" : \"dir\";\r\n      fs.symlinkSync(sourceFullPath, targetPath, symlinkType);\r\n      Log.verbose(`Created symlink: ${targetPath} -> ${sourceFullPath}`);\r\n    } catch (e: any) {\r\n      Log.error(`Failed to create symlink for '${folder}': ${e.message}`);\r\n      Log.message(`Falling back to directory copy for '${folder}'...`);\r\n      try {\r\n        fs.cpSync(sourceFullPath, targetPath, { recursive: true });\r\n      } catch (copyErr: any) {\r\n        Log.error(`Failed to copy directory '${folder}' as fallback: ${copyErr.message}`);\r\n        throw e;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates a file for slot-based server provisioning.\r\n   * Overwrites the existing file in place, keeping the same path.\r\n   * This is critical for bedrock_server.exe to avoid Windows Firewall prompts.\r\n   */\r\n  updateDedicatedServerFile(sourcePath: string, file: string, slotServerPath: string) {\r\n    const targetPath = slotServerPath + file;\r\n    const sourceFilePath = sourcePath + file;\r\n\r\n    if (!fs.existsSync(sourceFilePath)) {\r\n      return;\r\n    }\r\n\r\n    // Always copy (overwrite if exists), keeping the same target path\r\n    // This is especially important for bedrock_server.exe - same path means\r\n    // Windows Firewall rules persist across server version updates.\r\n    fs.copyFileSync(sourceFilePath, targetPath);\r\n  }\r\n\r\n  // ================================================================================\r\n  // WORLD BACKUP MANAGEMENT API\r\n  // These methods provide a high-level API for world and backup operations.\r\n  // They delegate to the WorldBackupManager for the actual implementation.\r\n  // ================================================================================\r\n\r\n  /**\r\n   * List all managed worlds with their backup information.\r\n   */\r\n  async listManagedWorlds(): Promise<ManagedWorld[]> {\r\n    if (!this.#worldBackupManager) {\r\n      throw new Error(\"World backup manager not initialized. Call prepare() first.\");\r\n    }\r\n    return this.#worldBackupManager.managedWorlds;\r\n  }\r\n\r\n  /**\r\n   * Get a managed world by its ID.\r\n   */\r\n  async getManagedWorld(worldId: string): Promise<ManagedWorld | undefined> {\r\n    if (!this.#worldBackupManager) {\r\n      throw new Error(\"World backup manager not initialized. Call prepare() first.\");\r\n    }\r\n    return this.#worldBackupManager.getWorld(worldId);\r\n  }\r\n\r\n  /**\r\n   * Create a new managed world with a unique ID.\r\n   * @param friendlyName Human-readable name for the world\r\n   * @param description Optional description\r\n   * @returns The newly created ManagedWorld\r\n   */\r\n  async createManagedWorld(friendlyName: string, description?: string): Promise<ManagedWorld> {\r\n    if (!this.#worldBackupManager) {\r\n      throw new Error(\"World backup manager not initialized. Call prepare() first.\");\r\n    }\r\n    return this.#worldBackupManager.createWorld(friendlyName, description);\r\n  }\r\n\r\n  /**\r\n   * Create a backup of a world from a source folder.\r\n   * @param worldId The ID of the managed world to backup to\r\n   * @param sourceFolder The folder containing the world data to backup\r\n   * @param options Backup options\r\n   * @returns The backup result\r\n   */\r\n  async createWorldBackup(worldId: string, sourceFolder: IFolder, options?: IBackupOptions): Promise<IBackupResult> {\r\n    if (!this.#worldBackupManager) {\r\n      throw new Error(\"World backup manager not initialized. Call prepare() first.\");\r\n    }\r\n    // WorldBackupManager.createBackup expects a path string\r\n    return this.#worldBackupManager.createBackup(worldId, sourceFolder.fullPath, options);\r\n  }\r\n\r\n  /**\r\n   * Restore a backup to a target folder.\r\n   * @param worldId The ID of the managed world\r\n   * @param timestamp The backup timestamp to restore (or undefined for latest)\r\n   * @param targetFolder The folder to restore to\r\n   */\r\n  async restoreWorldBackup(worldId: string, timestamp: number | undefined, targetFolder: IFolder): Promise<void> {\r\n    if (!this.#worldBackupManager) {\r\n      throw new Error(\"World backup manager not initialized. Call prepare() first.\");\r\n    }\r\n    // Convert timestamp to backupId (world{timestamp}) or get latest\r\n    let backupId: string;\r\n    if (timestamp !== undefined) {\r\n      backupId = `world${timestamp}`;\r\n    } else {\r\n      const world = this.#worldBackupManager.getWorld(worldId);\r\n      if (!world) {\r\n        throw new Error(`World ${worldId} not found`);\r\n      }\r\n      await world.loadBackups();\r\n      const latest = world.backups[world.backups.length - 1];\r\n      if (!latest) {\r\n        throw new Error(`No backups found for world ${worldId}`);\r\n      }\r\n      backupId = latest.id;\r\n    }\r\n    await this.#worldBackupManager.restoreBackup(worldId, backupId, targetFolder.fullPath);\r\n  }\r\n\r\n  /**\r\n   * Export a backup as a .mcworld file.\r\n   * @param worldId The ID of the managed world\r\n   * @param timestamp The backup timestamp to export (or undefined for latest)\r\n   * @param outputPath The path to write the .mcworld file to\r\n   */\r\n  async exportBackupAsMcWorld(worldId: string, timestamp: number | undefined, outputPath: string): Promise<void> {\r\n    if (!this.#worldBackupManager) {\r\n      throw new Error(\"World backup manager not initialized. Call prepare() first.\");\r\n    }\r\n    // Convert timestamp to backupId (world{timestamp}) or get latest\r\n    let backupId: string;\r\n    if (timestamp !== undefined) {\r\n      backupId = `world${timestamp}`;\r\n    } else {\r\n      const world = this.#worldBackupManager.getWorld(worldId);\r\n      if (!world) {\r\n        throw new Error(`World ${worldId} not found`);\r\n      }\r\n      await world.loadBackups();\r\n      const latest = world.backups[world.backups.length - 1];\r\n      if (!latest) {\r\n        throw new Error(`No backups found for world ${worldId}`);\r\n      }\r\n      backupId = latest.id;\r\n    }\r\n    await this.#worldBackupManager.exportMcWorld(worldId, backupId, outputPath);\r\n  }\r\n\r\n  /**\r\n   * Get all backups for a managed world.\r\n   * @param worldId The ID of the managed world\r\n   */\r\n  async getWorldBackups(worldId: string): Promise<WorldBackup[]> {\r\n    if (!this.#worldBackupManager) {\r\n      throw new Error(\"World backup manager not initialized. Call prepare() first.\");\r\n    }\r\n    const world = this.#worldBackupManager.getWorld(worldId);\r\n    if (!world) {\r\n      throw new Error(`World ${worldId} not found`);\r\n    }\r\n    await world.loadBackups();\r\n    return world.backups;\r\n  }\r\n\r\n  /**\r\n   * Delete a specific backup.\r\n   * @param worldId The ID of the managed world\r\n   * @param timestamp The backup timestamp to delete\r\n   */\r\n  async deleteWorldBackup(worldId: string, timestamp: number): Promise<void> {\r\n    if (!this.#worldBackupManager) {\r\n      throw new Error(\"World backup manager not initialized. Call prepare() first.\");\r\n    }\r\n    const world = this.#worldBackupManager.getWorld(worldId);\r\n    if (!world) {\r\n      throw new Error(`World ${worldId} not found`);\r\n    }\r\n    // Convert timestamp to backupId format (world{timestamp})\r\n    const backupId = `world${timestamp}`;\r\n    await world.deleteBackup(backupId);\r\n  }\r\n\r\n  /**\r\n   * Prune old backups for a world, keeping only the most recent ones.\r\n   * @param worldId The ID of the managed world\r\n   * @param keepCount Number of backups to keep (default 10)\r\n   */\r\n  async pruneWorldBackups(worldId: string, keepCount: number = 10): Promise<number> {\r\n    if (!this.#worldBackupManager) {\r\n      throw new Error(\"World backup manager not initialized. Call prepare() first.\");\r\n    }\r\n    const world = this.#worldBackupManager.getWorld(worldId);\r\n    if (!world) {\r\n      throw new Error(`World ${worldId} not found`);\r\n    }\r\n    return world.pruneBackups(keepCount);\r\n  }\r\n\r\n  /**\r\n   * Get or create a managed world for a given slot.\r\n   * This creates a mapping between server slots and managed worlds.\r\n   * @param slotNumber The server slot number\r\n   * @param createIfMissing If true, creates a new world if none exists for the slot\r\n   */\r\n  async getOrCreateWorldForSlot(\r\n    slotNumber: number,\r\n    createIfMissing: boolean = true\r\n  ): Promise<ManagedWorld | undefined> {\r\n    if (!this.#worldBackupManager) {\r\n      throw new Error(\"World backup manager not initialized. Call prepare() first.\");\r\n    }\r\n\r\n    const server = this.getActiveServer(slotNumber);\r\n    if (!server) {\r\n      if (!createIfMissing) {\r\n        return undefined;\r\n      }\r\n      throw new Error(`No active server at slot ${slotNumber}`);\r\n    }\r\n\r\n    // For now, we'll use the slot number as the friendly name\r\n    // and create a new world if needed\r\n    if (createIfMissing) {\r\n      const worldName = server.name || `Slot ${slotNumber} World`;\r\n      const world = await this.createManagedWorld(worldName, `World for server slot ${slotNumber}`);\r\n      return world;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  register() {}\r\n}\r\n", "import * as fs from \"fs\";\r\nimport MinecraftLogItem from \"./MinecraftLogItem\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport LocalEnvironment from \"./LocalEnvironment\";\r\n\r\nexport default class ContentLogWatcher {\r\n  private _onLogItem = new EventDispatcher<ContentLogWatcher, MinecraftLogItem>();\r\n\r\n  private _env: LocalEnvironment;\r\n\r\n  logItems: MinecraftLogItem[] = [];\r\n\r\n  constructor(env: LocalEnvironment) {\r\n    this._env = env;\r\n  }\r\n\r\n  public get onLogItem() {\r\n    return this._onLogItem.asEvent();\r\n  }\r\n\r\n  public watchServerFolder() {\r\n    const mcLogPath = this._env.utilities.localReleaseServerLogPath;\r\n\r\n    if (!mcLogPath || !fs.existsSync(mcLogPath)) {\r\n      return;\r\n    }\r\n\r\n    this.watchLogFolder(mcLogPath);\r\n  }\r\n\r\n  public watchMinecraftReleaseFolder() {\r\n    let mcLogPath = this._env.utilities.localReleaseServerLogPath;\r\n\r\n    if (!mcLogPath) {\r\n      return;\r\n    }\r\n    this.watchLogFolder(mcLogPath);\r\n  }\r\n\r\n  public watchLogFolder(mcLogPath: string) {\r\n    const exists = fs.existsSync(mcLogPath);\r\n\r\n    if (exists) {\r\n      // Log.message(\"Starting logging of Minecraft logs at '\" + mcLogPath + \".'\");\r\n\r\n      const now = new Date();\r\n\r\n      this.processFolder(mcLogPath, new Date(now.getTime() - 30 * 60 * 1000));\r\n      /*\r\n      fs.watch(mcLogPath, {}, async (eventType: string, fileName: string) => {\r\n        this.processFile(mcLogPath, fileName);\r\n      });*/\r\n    }\r\n  }\r\n\r\n  public processFolder(mcLogPath: string, sinceDate: Date) {\r\n    const sinceDateMs = sinceDate.getTime();\r\n    const exists = fs.existsSync(mcLogPath);\r\n\r\n    if (exists) {\r\n      const files = fs.readdirSync(mcLogPath);\r\n\r\n      for (let i = 0; i < files.length; i++) {\r\n        const file = files[i];\r\n        const stat = fs.statSync(mcLogPath + file);\r\n\r\n        if (stat.isFile() && stat.mtimeMs > sinceDateMs) {\r\n          this.processFile(mcLogPath, file);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private processFile(logPath: string, fileName: string) {\r\n    if (fileName !== null) {\r\n      fileName = fileName.toLowerCase();\r\n\r\n      if (fileName.startsWith(\"contentlog__\")) {\r\n        const content = fs.readFileSync(logPath + fileName, { encoding: \"utf8\", flag: \"r\" });\r\n\r\n        const logItem = new MinecraftLogItem();\r\n\r\n        logItem.fileName = fileName;\r\n        logItem.message = content;\r\n\r\n        this.logItems.push(logItem);\r\n\r\n        this._onLogItem.dispatch(this, logItem);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class MinecraftLogItem {\r\n  fileName: string | undefined;\r\n  message: string | undefined;\r\n}\r\n", "/**\r\n * ARCHITECTURE DOCUMENTATION: HttpServer - Web Server and Real-Time Notification Hub\r\n * ===================================================================================\r\n *\r\n * HttpServer provides the HTTP/HTTPS server for Minecraft Creator Tools and serves as\r\n * a central hub for real-time client notifications via WebSocket connections. It exposes\r\n * REST APIs for server management and proxies events from DedicatedServer instances.\r\n *\r\n * ## Core Responsibilities\r\n *\r\n * 1. **HTTP Server**: Serves static files, API endpoints, and the web application\r\n * 2. **WebSocket Notifications**: Broadcasts real-time events to connected clients\r\n * 3. **Storage Watching**: Monitors NodeStorage for file changes and broadcasts updates\r\n * 4. **Authentication**: Manages session tokens and permission levels\r\n * 5. **MCP Server Integration**: Hosts Model Context Protocol server\r\n * 6. **Server Management API**: REST endpoints for controlling DedicatedServer instances\r\n *\r\n * ## API Architecture\r\n *\r\n * The HTTP server exposes REST endpoints for remote server management:\r\n *\r\n * ```\r\n * /api/auth              - Authentication with passcode\r\n * /api/<slot>/start      - Start a DedicatedServer on the specified slot\r\n * /api/<slot>/stop       - Stop the server on the specified slot\r\n * /api/<slot>/status     - Get server status and recent log messages\r\n * /api/<slot>/command    - Send a slash command to the server\r\n * /api/<slot>/deploy     - Deploy add-on content to the server\r\n * /api/content/<path>    - Access files when in view/edit mode\r\n * /api/validate          - Validate Minecraft content\r\n * /api/shutdown          - Graceful shutdown (view mode only)\r\n * /api/acceptEula        - Accept Minecraft EULA (admin only, enables BDS features)\r\n * /api/eulaStatus        - Check if EULA has been accepted\r\n * /api/commands          - List available ToolCommands\r\n * /api/commands/<cmd>    - Execute a ToolCommand (POST with args/flags JSON body)\r\n * ```\r\n *\r\n * ## Real-Time Sync Architecture\r\n *\r\n * HttpServer sits between server-side file changes and client-side updates:\r\n *\r\n * ```\r\n * NodeStorage (fs.watch)  \u2500\u2500\u2192  HttpServer  \u2500\u2500\u2192  WebSocket  \u2500\u2500\u2192  HttpStorage (client)\r\n *      \u2502                           \u2502                                   \u2502\r\n *      \u2514\u2500\u2500 IStorageChangeEvent \u2500\u2500\u2500\u2500\u2518                                   \u2502\r\n *                                  \u2502                                   \u2502\r\n *                   IServerNotification \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192  onFileUpdated event\r\n *                                                                      \u2502\r\n *                                                               MCWorld \u2500\u2192 WorldView\r\n * ```\r\n *\r\n * ## WebSocket Event Types\r\n *\r\n * The WebSocket connection broadcasts various event types to clients:\r\n *\r\n * | Event Name         | Description                                     |\r\n * |--------------------|-------------------------------------------------|\r\n * | statusUpdate       | Server status changed (starting, started, etc.)|\r\n * | playerJoined       | Player connected to the Minecraft server        |\r\n * | playerLeft         | Player disconnected from the server             |\r\n * | playerMoved        | Player position changed (from position polling) |\r\n * | storage/change     | File in watched storage was modified            |\r\n * | debugConnected     | Script debugger connection established          |\r\n * | debugStats         | Profiling statistics from script debugger       |\r\n * | gameEvent          | Generic game event from server                  |\r\n * | serverShutdown     | MCT server is shutting down (sent before close) |\r\n *\r\n * ## Storage Watcher Integration\r\n *\r\n * The server maintains watchers for NodeStorage instances and converts storage events\r\n * to WebSocket notifications:\r\n *\r\n * - **startWatchingStorage()**: Registers a storage for watching with a unique slot ID\r\n * - **stopWatchingStorage()**: Stops watching a specific storage\r\n * - **stopAllStorageWatchers()**: Cleanup when server stops\r\n * - **_handleStorageChange()**: Converts IStorageChangeEvent to IServerNotification\r\n *\r\n * ## Authentication & Permission Levels\r\n *\r\n * Four permission levels control access to different features:\r\n *\r\n * | Level              | Access                                          |\r\n * |--------------------|-------------------------------------------------|\r\n * | displayReadOnly    | View server status and logs                     |\r\n * | fullReadOnly       | Above + file browsing                           |\r\n * | updateState        | Above + start/stop servers, deploy content      |\r\n * | admin              | Full access including shutdown                  |\r\n *\r\n * Passcodes are set via command line and validated using encrypted tokens.\r\n *\r\n * ## SSL/TLS Support (Experimental)\r\n *\r\n * HttpServer supports experimental HTTPS via command-line configuration:\r\n * - Certificate and key files specified at startup\r\n * - Not persisted to disk for security\r\n * - Optional HTTPS-only mode\r\n *\r\n * ## Integration with ServerManager\r\n *\r\n * HttpServer receives events from ServerManager and converts them to notifications:\r\n *\r\n * ```\r\n * DedicatedServer \u2500\u2500\u25BA ServerManager \u2500\u2500\u25BA HttpServer \u2500\u2500\u25BA WebSocket Clients\r\n *       \u2502                  \u2502                \u2502\r\n *       \u2502                  \u2502 bubbleServerStarted\r\n *       \u2502                  \u2502     \u2502\r\n *       \u2502                  \u2502     \u2514\u2500\u25BA notify({ eventName: 'statusUpdate', ... })\r\n *       \u2502                  \u2502\r\n *       \u2502                  \u2502 bubblePlayerConnected\r\n *       \u2502                  \u2502     \u2502\r\n *       \u2502                  \u2502     \u2514\u2500\u25BA notify({ eventName: 'playerJoined', ... })\r\n * ```\r\n *\r\n * ## Related Files\r\n *\r\n * - ServerManager.ts: Creates HttpServer and forwards server events\r\n * - IServerNotification.ts: Notification message types\r\n * - NodeStorage.ts: Server-side file watching with fs.watch()\r\n * - HttpStorage.ts: Client-side notification receiver\r\n * - IStorageWatcher.ts: Interface definitions for watcher system\r\n * - MinecraftMcpServer.ts: MCP server for AI tool integration\r\n *\r\n * ## Key Methods\r\n *\r\n * - init(): Initialize HTTP/HTTPS server and WebSocket\r\n * - stop(): Cleanup resources including storage watchers\r\n * - notify(): Broadcast notification to all connected WebSocket clients\r\n * - notifyStatusUpdate(): Send server status change to a specific slot\r\n * - sendNotificationToSlot(): Send notification to clients subscribed to a slot\r\n * - startWatchingStorage(): Begin monitoring a NodeStorage instance\r\n * - processRequest(): Main HTTP request handler and router\r\n */\r\nimport * as http from \"http\";\r\nimport * as https from \"https\";\r\nimport * as fs from \"fs\";\r\nimport WebSocket, { WebSocketServer, RawData } from \"ws\";\r\nimport { v4 as uuid } from \"uuid\";\r\nimport ServerManager, { ServerManagerFeatures } from \"./ServerManager\";\r\nimport { WorldBackupType } from \"./IWorldBackupData\";\r\nimport LocalEnvironment from \"./LocalEnvironment\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport * as crypto from \"crypto\";\r\nimport { IAuthenticationToken, ServerPermissionLevel } from \"./IAuthenticationToken\";\r\nimport Log from \"../core/Log\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport CreatorTools from \"../app/CreatorTools\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport { ISlotConfig } from \"../app/CreatorToolsAuthentication\";\r\nimport DedicatedServer, { DedicatedServerStatus, OutputLine } from \"./DedicatedServer\";\r\nimport SecurityUtilities from \"../core/SecurityUtilities\";\r\n// import { Http2ServerRequest, Http2ServerResponse } from \"http2\";\r\nimport Project from \"../app/Project\";\r\nimport { ProjectInfoSuite } from \"../info/IProjectInfoData\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ProjectInfoUtilities from \"../info/ProjectInfoUtilities\";\r\nimport IProjectMetaState from \"../info/IProjectMetaState\";\r\nimport MinecraftMcpServer from \"./MinecraftMcpServer\";\r\nimport HttpUtilities from \"./HttpUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport HttpStorage from \"../storage/HttpStorage\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport ISslConfig from \"./ISslConfig\";\r\nimport LocalUtilities from \"./LocalUtilities\";\r\nimport { IStorageChangeEvent } from \"../storage/IStorageWatcher\";\r\nimport {\r\n  initializeToolCommands,\r\n  ToolCommandRegistry,\r\n  IToolCommandOutput,\r\n  ToolCommandContextFactory,\r\n  ToolCommandScope,\r\n} from \"../app/toolcommands\";\r\nimport { registerNodeOnlyCommands } from \"../app/toolcommands/registerNodeCommands\";\r\nimport { IServerNotification, IServerNotificationBody, ServerEventName } from \"./IServerNotification\";\r\n// these definitions are duplicated for the client and should be kept in sync in CartoAuthentication.ts\r\nexport interface CartoServerAuthenticationResponse {\r\n  token?: string;\r\n  iv?: string;\r\n  authTag?: string; // GCM authentication tag\r\n  permissionLevel: ServerPermissionLevel;\r\n  serverStatus: CartoServerStatusResponse[];\r\n  /** Whether the Minecraft EULA has been accepted (required for BDS features) */\r\n  eulaAccepted?: boolean;\r\n}\r\n\r\nexport interface CartoServerStatusResponse {\r\n  id: number;\r\n  status?: DedicatedServerStatus;\r\n  time: number;\r\n  /** Recent log messages from the server */\r\n  recentMessages?: OutputLine[];\r\n  /** Slot configuration - included in initial auth response */\r\n  slotConfig?: ISlotConfig;\r\n  /** World ID currently associated with this slot */\r\n  worldId?: string;\r\n}\r\n\r\nexport default class HttpServer {\r\n  host = \"localhost\";\r\n  public port = 80;\r\n\r\n  public creatorTools: CreatorTools | undefined;\r\n\r\n  headers = {\r\n    \"Access-Control-Allow-Origin\": \"http://localhost:6126\", // Restrict to known origins\r\n    \"Access-Control-Allow-Methods\": \"OPTIONS, POST, GET\",\r\n    \"Access-Control-Max-Age\": 86400, // 24 hours instead of 30 days\r\n    \"Access-Control-Allow-Headers\": \"Content-Type, Authorization, mctpc\",\r\n    \"Access-Control-Allow-Credentials\": \"true\",\r\n  };\r\n\r\n  private _webStorage: NodeStorage;\r\n  private _resStorage: NodeStorage;\r\n  private _dataStorage: NodeStorage;\r\n  private _distStorage: NodeStorage;\r\n  private _schemasStorage: NodeStorage;\r\n  private _formsStorage: NodeStorage | undefined;\r\n  private _esbuildWasmStorage: NodeStorage | undefined;\r\n\r\n  private _serverManager: ServerManager;\r\n  private _localEnvironment: LocalEnvironment;\r\n  private _algorithm = \"aes-256-gcm\";\r\n\r\n  private _httpsServer: https.Server | undefined;\r\n  private _httpServer: http.Server | undefined;\r\n\r\n  private _mcpServer: MinecraftMcpServer | undefined;\r\n  private _pwdHash: Buffer | undefined;\r\n\r\n  // Track whether the server is listening and ready to accept connections\r\n  private _isListeningMetaFlag: boolean = false;\r\n  private _readyResolvers: (() => void)[] = [];\r\n\r\n  /**\r\n   * Returns true if the HTTP server is actually listening and accepting connections.\r\n   * This checks the underlying server state, not just the flag.\r\n   */\r\n  public get isListening(): boolean {\r\n    if (!this._isListeningMetaFlag) {\r\n      return false;\r\n    }\r\n    // Check if the underlying server is still bound\r\n    if (this._httpServer && this._httpServer.listening) {\r\n      return true;\r\n    }\r\n    if (this._httpsServer && this._httpsServer.listening) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Returns a promise that resolves when the server is ready to accept connections.\r\n   * If the server is already listening, resolves immediately.\r\n   * @param timeoutMs Optional timeout in milliseconds. If provided and the server\r\n   *   doesn't become ready in time, the promise rejects with a timeout error.\r\n   */\r\n  public waitForReady(timeoutMs?: number): Promise<void> {\r\n    if (this._isListeningMetaFlag) {\r\n      return Promise.resolve();\r\n    }\r\n    return new Promise<void>((resolve, reject) => {\r\n      let timer: ReturnType<typeof setTimeout> | undefined;\r\n\r\n      const onReady = () => {\r\n        if (timer !== undefined) {\r\n          clearTimeout(timer);\r\n        }\r\n        resolve();\r\n      };\r\n\r\n      this._readyResolvers.push(onReady);\r\n\r\n      if (timeoutMs !== undefined && timeoutMs > 0) {\r\n        timer = setTimeout(() => {\r\n          const idx = this._readyResolvers.indexOf(onReady);\r\n          if (idx !== -1) {\r\n            this._readyResolvers.splice(idx, 1);\r\n          }\r\n          reject(new Error(`HTTP server did not become ready within ${timeoutMs}ms`));\r\n        }, timeoutMs);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Called when the server starts listening to mark it as ready and resolve any pending waiters.\r\n   */\r\n  private _markAsListening(): void {\r\n    this._isListeningMetaFlag = true;\r\n    for (const resolve of this._readyResolvers) {\r\n      resolve();\r\n    }\r\n    this._readyResolvers = [];\r\n  }\r\n\r\n  // Experimental SSL configuration - passed via command line, not persisted\r\n  private _sslConfig?: ISslConfig;\r\n\r\n  public get sslConfig(): ISslConfig | undefined {\r\n    return this._sslConfig;\r\n  }\r\n\r\n  public set sslConfig(config: ISslConfig | undefined) {\r\n    this._sslConfig = config;\r\n  }\r\n\r\n  // Temporary content registry for serving dynamic content (e.g., project geometry for rendering)\r\n  private _tempContent: Map<string, { content: string | Uint8Array; contentType: string }> = new Map();\r\n\r\n  // Content storage for view mode - serves local files via /api/content\r\n  private _contentStorage: NodeStorage | undefined;\r\n  private _contentPath: string | undefined;\r\n\r\n  // View mode flag - when true, the server is running in \"view\" context (from `mct view` command)\r\n  // This enables the /api/shutdown endpoint for graceful shutdown\r\n  private _isViewMode: boolean = false;\r\n\r\n  // Edit mode flag - when true, the server allows write operations to content (from `mct edit` command)\r\n  // This enables PUT/DELETE operations on /api/content endpoints\r\n  private _isEditMode: boolean = false;\r\n\r\n  // When true, requires authentication for /mcp even from localhost.\r\n  // Set via --mcp-require-auth CLI flag. Default: false (localhost bypasses auth for MCP).\r\n  private _mcpRequireAuth: boolean = false;\r\n\r\n  // Promise to guard against concurrent MCP server initialization\r\n  private _mcpServerInitPromise: Promise<void> | undefined;\r\n\r\n  // WebSocket notification server for pushing updates to clients\r\n  private _wsServer: WebSocketServer | undefined;\r\n  private _wsClients: Map<\r\n    WebSocket,\r\n    {\r\n      id: string;\r\n      subscribedEvents: Set<ServerEventName>;\r\n      slot?: number;\r\n      permissionLevel?: ServerPermissionLevel;\r\n    }\r\n  > = new Map();\r\n\r\n  // Storage watchers for file system change notifications\r\n  // Maps storage instance to watcher ID for cleanup\r\n  private _storageWatchers: Map<NodeStorage, string> = new Map();\r\n\r\n  // Maps slot numbers to their associated storages for event routing\r\n  private _slotStorages: Map<number, { storage: NodeStorage; category: string }[]> = new Map();\r\n\r\n  // Security: Files that should never be served (security-sensitive or potentially dangerous)\r\n  private static readonly BLOCKED_FILE_NAMES: Set<string> = new Set([\r\n    \"package.json\",\r\n    \"package-lock.json\",\r\n    \"yarn.lock\",\r\n    \"pnpm-lock.yaml\",\r\n    \".env\",\r\n    \".env.local\",\r\n    \".env.development\",\r\n    \".env.production\",\r\n    \".npmrc\",\r\n    \".yarnrc\",\r\n    \"tsconfig.json\",\r\n    \"webpack.config.js\",\r\n    \"vite.config.js\",\r\n    \"rollup.config.js\",\r\n    \".gitignore\",\r\n    \".gitattributes\",\r\n    \"dockerfile\",\r\n    \"docker-compose.yml\",\r\n    \"docker-compose.yaml\",\r\n    \"makefile\",\r\n    \"cmakelists.txt\",\r\n    \".htaccess\",\r\n    \"web.config\",\r\n  ]);\r\n\r\n  // Security: File extensions that are safe to serve\r\n  private static readonly SAFE_EXTENSIONS: Set<string> = new Set([\r\n    \"json\",\r\n    \"png\",\r\n    \"jpg\",\r\n    \"jpeg\",\r\n    \"gif\",\r\n    \"tga\",\r\n    \"lang\",\r\n    \"txt\",\r\n    \"md\",\r\n    \"mcfunction\",\r\n    \"mcstructure\",\r\n    \"mcworld\",\r\n    \"mctemplate\",\r\n    \"mcaddon\",\r\n    \"mcpack\",\r\n    \"material\",\r\n    \"vertex\",\r\n    \"geometry\",\r\n    \"fragment\",\r\n    \"nbt\",\r\n    \"fsb\",\r\n    \"ogg\",\r\n    \"wav\",\r\n    \"flac\",\r\n    \"obj\",\r\n    \"svg\",\r\n    // LevelDB files for world data\r\n    \"ldb\",\r\n    \"log\",\r\n  ]);\r\n\r\n  /** Whether local res/ storage includes the vanilla serve folder with PNG textures */\r\n  private _hasLocalVanillaServe: boolean;\r\n\r\n  constructor(localEnv: LocalEnvironment, serverManager: ServerManager) {\r\n    this._serverManager = serverManager;\r\n    this._webStorage = new NodeStorage(this.getRootPath() + \"web/\", \"\");\r\n    this._resStorage = new NodeStorage(this.getResRootPath(), \"\");\r\n    this._dataStorage = serverManager.dataStorage;\r\n    this._distStorage = new NodeStorage(this.getRootPath() + \"dist/\", \"\");\r\n\r\n    // Serve schemas and forms from @minecraft/bedrock-schemas package at runtime\r\n    // instead of shipping copies in the build output.\r\n    const bsRoot = LocalUtilities.bedrockSchemasRoot;\r\n    if (bsRoot) {\r\n      this._schemasStorage = new NodeStorage(bsRoot + \"/schemas/\", \"\");\r\n      this._formsStorage = new NodeStorage(bsRoot + \"/forms/\", \"\");\r\n    } else {\r\n      this._schemasStorage = new NodeStorage(this.getRootPath() + \"schemas/\", \"\");\r\n    }\r\n\r\n    // Serve esbuild-wasm from its npm package at runtime instead of shipping\r\n    // a copy in the build output (~13 MB savings). esbuild-wasm is a declared\r\n    // dependency of the jsn package so it's always available.\r\n    try {\r\n      const esbuildWasmDir = require.resolve(\"esbuild-wasm/esbuild.wasm\").replace(/[\\\\/]esbuild\\.wasm$/, \"/\");\r\n      this._esbuildWasmStorage = new NodeStorage(esbuildWasmDir, \"\");\r\n    } catch {\r\n      // esbuild-wasm not installed \u2014 fall back to dist/\r\n    }\r\n\r\n    // Check at init time if we have local vanilla serve textures.\r\n    // When running from the app/ folder, public/res/ has a serve/ directory with\r\n    // PNG-converted textures. The remote CDN (mctools.dev) may be missing some.\r\n    const fs = require(\"fs\");\r\n    const resRoot = this.getResRootPath();\r\n    this._hasLocalVanillaServe = fs.existsSync(\r\n      resRoot + \"latest/van/serve/resource_pack/textures/terrain_texture.json\"\r\n    );\r\n\r\n    this._localEnvironment = localEnv;\r\n\r\n    this.processRequest = this.processRequest.bind(this);\r\n  }\r\n\r\n  init() {\r\n    const requestListener = this.processRequest;\r\n\r\n    if (this._localEnvironment && this._localEnvironment.serverHostPort) {\r\n      this.port = this._localEnvironment.serverHostPort;\r\n    }\r\n\r\n    if (this._localEnvironment && this._localEnvironment.serverDomainName) {\r\n      this.host = this._localEnvironment.serverDomainName;\r\n    }\r\n\r\n    // Initialize HTTPS if experimental SSL config is provided\r\n    if (this._sslConfig) {\r\n      this.initHttps(requestListener);\r\n    }\r\n\r\n    // Initialize HTTP server (unless experimental SSL-only mode is enabled)\r\n    if (!this._sslConfig?.httpsOnly) {\r\n      this._httpServer = http.createServer(requestListener);\r\n\r\n      // Bind to 127.0.0.1 when host is \"localhost\" to ensure IPv4 connectivity.\r\n      // Node.js resolves \"localhost\" via the OS, which may return only ::1 (IPv6),\r\n      // causing ECONNREFUSED for IPv4-only clients.\r\n      const listenHost = this.host === \"localhost\" ? \"127.0.0.1\" : this.host;\r\n\r\n      this._httpServer.listen(this.port, listenHost, () => {\r\n        // Server started - mark as listening to unblock waiters\r\n        this._markAsListening();\r\n      });\r\n\r\n      // Initialize WebSocket server for notifications\r\n      this.initWebSocketServer(this._httpServer);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Initialize HTTPS server with experimental SSL configuration.\r\n   * SSL config is passed via command line arguments - nothing is persisted.\r\n   */\r\n  private initHttps(requestListener: (req: http.IncomingMessage, res: http.ServerResponse) => void) {\r\n    if (!this._sslConfig) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const httpsOptions = this.buildHttpsOptions();\r\n      const httpsPort = this._sslConfig.port ?? 443;\r\n\r\n      this._httpsServer = https.createServer(httpsOptions, requestListener);\r\n      const httpsListenHost = this.host === \"localhost\" ? \"127.0.0.1\" : this.host;\r\n      this._httpsServer.listen(httpsPort, httpsListenHost, () => {\r\n        Log.message(`(EXPERIMENTAL) Minecraft HTTPS server is running on https://${this.host}:${httpsPort}`);\r\n        this._markAsListening();\r\n      });\r\n    } catch (error) {\r\n      Log.fail(`Failed to initialize experimental HTTPS server: ${error}`);\r\n      throw error;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Build HTTPS server options from experimental SSL configuration.\r\n   */\r\n  private buildHttpsOptions(): https.ServerOptions {\r\n    if (!this._sslConfig) {\r\n      throw new Error(\"SSL config is required for HTTPS\");\r\n    }\r\n\r\n    const options: https.ServerOptions = {};\r\n\r\n    if (this._sslConfig.pfxPath) {\r\n      // PKCS12/PFX format\r\n      if (!fs.existsSync(this._sslConfig.pfxPath)) {\r\n        throw new Error(`Experimental SSL: PFX file not found: ${this._sslConfig.pfxPath}`);\r\n      }\r\n      options.pfx = fs.readFileSync(this._sslConfig.pfxPath);\r\n      if (this._sslConfig.pfxPassphrase) {\r\n        options.passphrase = this._sslConfig.pfxPassphrase;\r\n      }\r\n    } else if (this._sslConfig.certPath && this._sslConfig.keyPath) {\r\n      // PEM format\r\n      if (!fs.existsSync(this._sslConfig.certPath)) {\r\n        throw new Error(`Experimental SSL: Certificate file not found: ${this._sslConfig.certPath}`);\r\n      }\r\n      if (!fs.existsSync(this._sslConfig.keyPath)) {\r\n        throw new Error(`Experimental SSL: Key file not found: ${this._sslConfig.keyPath}`);\r\n      }\r\n      options.cert = fs.readFileSync(this._sslConfig.certPath);\r\n      options.key = fs.readFileSync(this._sslConfig.keyPath);\r\n    } else {\r\n      throw new Error(\r\n        \"Experimental SSL configuration requires either (--experimental-ssl-cert + --experimental-ssl-key) or --experimental-ssl-pfx\"\r\n      );\r\n    }\r\n\r\n    // Optional CA chain\r\n    if (this._sslConfig.caPath) {\r\n      if (!fs.existsSync(this._sslConfig.caPath)) {\r\n        throw new Error(`Experimental SSL: CA certificate file not found: ${this._sslConfig.caPath}`);\r\n      }\r\n      options.ca = fs.readFileSync(this._sslConfig.caPath);\r\n    }\r\n\r\n    return options;\r\n  }\r\n\r\n  /**\r\n   * Initialize WebSocket server for pushing notifications to clients.\r\n   * The WebSocket server shares the HTTP server and handles upgrade requests to /ws/notifications.\r\n   */\r\n  private initWebSocketServer(httpServer: http.Server) {\r\n    this._wsServer = new WebSocketServer({ noServer: true, maxPayload: 64 * 1024 * 1024 });\r\n\r\n    // Handle WebSocket connections\r\n    this._wsServer.on(\"connection\", (socket: WebSocket, req: http.IncomingMessage) => {\r\n      this.handleWebSocketConnection(socket, req);\r\n    });\r\n\r\n    // Handle HTTP upgrade requests for WebSocket\r\n    httpServer.on(\"upgrade\", (request: http.IncomingMessage, socket: any, head: Buffer) => {\r\n      const url = request.url || \"\";\r\n\r\n      Log.verbose(\"WebSocket upgrade request received\");\r\n\r\n      // All WebSocket connections go through /ws/notifications.\r\n      if (url.startsWith(\"/ws/notifications\")) {\r\n        // Authenticate the WebSocket connection\r\n        const permissionLevel = this.authenticateWebSocketRequest(request);\r\n\r\n        if (permissionLevel === undefined) {\r\n          Log.debug(\"WebSocket upgrade rejected - authentication failed\");\r\n          socket.write(\"HTTP/1.1 401 Unauthorized\\r\\n\\r\\n\");\r\n          socket.destroy();\r\n          return;\r\n        }\r\n\r\n        Log.verbose(\"WebSocket upgrade accepted\");\r\n        this._wsServer!.handleUpgrade(request, socket, head, (ws) => {\r\n          // Store permission level on the request for later use\r\n          (request as any).permissionLevel = permissionLevel;\r\n          this._wsServer!.emit(\"connection\", ws, request);\r\n        });\r\n      } else {\r\n        socket.destroy();\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Authenticate a WebSocket upgrade request.\r\n   * Returns the permission level if authenticated, undefined otherwise.\r\n   *\r\n   * Requires a valid auth token via query string (?token=...) or mctauth cookie.\r\n   * Localhost connections are NOT exempted \u2014 all WebSocket clients must authenticate.\r\n   */\r\n  private authenticateWebSocketRequest(req: http.IncomingMessage): ServerPermissionLevel | undefined {\r\n    // Check for auth token in query string or cookie\r\n    const url = new URL(req.url || \"\", `http://${req.headers.host}`);\r\n    const tokenParam = url.searchParams.get(\"token\");\r\n\r\n    if (tokenParam) {\r\n      return this.validateToken(tokenParam, req);\r\n    }\r\n\r\n    // Check cookies\r\n    const cookies = this.parseCookies(req);\r\n    const authCookie = cookies[\"mctauth\"];\r\n    if (authCookie) {\r\n      return this.validateToken(authCookie, req);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Handle a new WebSocket connection.\r\n   */\r\n  private handleWebSocketConnection(socket: WebSocket, req: http.IncomingMessage) {\r\n    const clientId = uuid();\r\n    const permissionLevel = (req as any).permissionLevel as ServerPermissionLevel | undefined;\r\n\r\n    // Register the client\r\n    this._wsClients.set(socket, {\r\n      id: clientId,\r\n      subscribedEvents: new Set(),\r\n      permissionLevel: permissionLevel,\r\n    });\r\n\r\n    Log.verbose(`WebSocket client connected: ${clientId}`);\r\n\r\n    // Handle messages from client (subscriptions)\r\n    socket.on(\"message\", (data: RawData) => {\r\n      this.handleWebSocketMessage(socket, data);\r\n    });\r\n\r\n    // Handle client disconnect\r\n    socket.on(\"close\", () => {\r\n      this._wsClients.delete(socket);\r\n      Log.verbose(`WebSocket client disconnected: ${clientId}`);\r\n    });\r\n\r\n    socket.on(\"error\", (err) => {\r\n      Log.debug(`WebSocket error for client ${clientId}: ${err.message}`);\r\n      this._wsClients.delete(socket);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Handle incoming WebSocket message (subscription requests).\r\n   */\r\n  private handleWebSocketMessage(socket: WebSocket, data: RawData) {\r\n    try {\r\n      const message = JSON.parse(data.toString());\r\n      Log.verbose(`[HttpServer] Received WebSocket message: ${data.toString().substring(0, 200)}`);\r\n\r\n      if (message.header?.messageType === \"subscriptionRequest\") {\r\n        const client = this._wsClients.get(socket);\r\n        if (!client) return;\r\n\r\n        const { eventNames, slot } = message.body;\r\n\r\n        if (message.header.messagePurpose === \"subscribe\") {\r\n          // Add subscriptions\r\n          for (const eventName of eventNames) {\r\n            client.subscribedEvents.add(eventName);\r\n          }\r\n          if (slot !== undefined) {\r\n            client.slot = slot;\r\n          }\r\n          Log.verbose(\r\n            `[HttpServer] Client ${client.id} subscribed to events: ${eventNames.join(\", \")} for slot ${slot}`\r\n          );\r\n        } else if (message.header.messagePurpose === \"unsubscribe\") {\r\n          // Remove subscriptions\r\n          for (const eventName of eventNames) {\r\n            client.subscribedEvents.delete(eventName);\r\n          }\r\n        }\r\n\r\n        // Send response\r\n        const response = {\r\n          header: {\r\n            version: 1,\r\n            requestId: message.header.requestId,\r\n            messageType: \"subscriptionResponse\" as const,\r\n            messagePurpose: \"response\" as const,\r\n          },\r\n          body: {\r\n            success: true,\r\n            subscribedEvents: Array.from(client.subscribedEvents),\r\n          },\r\n        };\r\n\r\n        socket.send(JSON.stringify(response));\r\n      }\r\n    } catch (e) {\r\n      Log.debug(\"Error handling WebSocket message: \" + e);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validate an encrypted auth token and return the permission level.\r\n   */\r\n  private validateToken(encryptedToken: string, req: http.IncomingMessage): ServerPermissionLevel | undefined {\r\n    if (!encryptedToken || encryptedToken.indexOf(\"|\") < 0) {\r\n      return undefined;\r\n    }\r\n\r\n    try {\r\n      const tokenParts = Utilities.splitUntil(encryptedToken, \"|\", 2);\r\n      if (tokenParts.length < 2) {\r\n        return undefined;\r\n      }\r\n\r\n      const content = tokenParts[0];\r\n      const iv = tokenParts[1];\r\n      const authTag = tokenParts.length >= 3 ? tokenParts[2] : undefined;\r\n\r\n      const decryptedStr = this.decrypt(iv, content, authTag);\r\n      const decryptedContent = SecurityUtilities.sanitizeJsonObject(JSON.parse(decryptedStr));\r\n\r\n      if (decryptedContent.permissionLevel && decryptedContent.time) {\r\n        // Verify fingerprint if present (for enhanced security)\r\n        if (decryptedContent.fingerprint) {\r\n          const userAgent = req.headers[\"user-agent\"] as string | undefined;\r\n          const clientIp = (req.socket?.remoteAddress || req.headers[\"x-forwarded-for\"]) as string | undefined;\r\n          const fingerprint = this.generateFingerprint(userAgent, clientIp);\r\n          if (fingerprint !== decryptedContent.fingerprint) {\r\n            Log.debug(`Token validation: fingerprint mismatch (IP: ${clientIp})`);\r\n            return undefined;\r\n          }\r\n        }\r\n\r\n        return decryptedContent.permissionLevel as ServerPermissionLevel;\r\n      }\r\n    } catch (e) {\r\n      Log.debug(\"Token validation error: \" + e);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Broadcast a notification to all subscribed WebSocket clients.\r\n   * @param notification The notification to broadcast\r\n   */\r\n  public broadcastNotification(notification: IServerNotification) {\r\n    const eventName = notification.body.eventName;\r\n    const slot = notification.body.slot;\r\n    let sentCount = 0;\r\n    let skippedCount = 0;\r\n\r\n    // Log debug stats at verbose level to reduce noise (fires ~10x/sec)\r\n    if (eventName === \"debugStats\") {\r\n      const body = notification.body as any;\r\n      Log.verbose(\r\n        `[HttpServer] Broadcasting debugStats: slot=${slot}, tick=${body.tick}, statsCount=${body.stats?.length || 0}, wsClients=${this._wsClients.size}`\r\n      );\r\n    }\r\n\r\n    for (const [socket, client] of this._wsClients) {\r\n      // Check if client is subscribed to this event\r\n      if (!client.subscribedEvents.has(eventName)) {\r\n        if (eventName === \"debugStats\") {\r\n          Log.verbose(\r\n            `[HttpServer] Client ${client.id} not subscribed to debugStats (subscribed: ${Array.from(client.subscribedEvents).join(\", \")})`\r\n          );\r\n        }\r\n        skippedCount++;\r\n        continue;\r\n      }\r\n\r\n      // If client has a slot filter, check it matches\r\n      if (client.slot !== undefined && slot !== undefined && client.slot !== slot) {\r\n        if (eventName === \"debugStats\") {\r\n          Log.verbose(`[HttpServer] Client ${client.id} slot mismatch: client=${client.slot}, event=${slot}`);\r\n        }\r\n        skippedCount++;\r\n        continue;\r\n      }\r\n\r\n      try {\r\n        socket.send(JSON.stringify(notification));\r\n        if (eventName === \"debugStats\") {\r\n          Log.verbose(`[HttpServer] Sent debugStats to client ${client.id}`);\r\n        }\r\n        sentCount++;\r\n      } catch (e) {\r\n        Log.debug(`Error sending notification to client ${client.id}: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Only log broadcast stats at verbose level to reduce noise\r\n    Log.verbose(\r\n      `[HttpServer] Broadcast ${eventName} (slot ${slot}): sent to ${sentCount} clients, skipped ${skippedCount} (total ${this._wsClients.size})`\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Create and broadcast a notification.\r\n   * Helper method for common notification patterns.\r\n   */\r\n  public notify(body: IServerNotificationBody) {\r\n    const notification: IServerNotification = {\r\n      header: {\r\n        version: 1,\r\n        requestId: uuid(),\r\n        messageType: \"notification\",\r\n        messagePurpose: \"event\",\r\n      },\r\n      body: body,\r\n    };\r\n\r\n    this.broadcastNotification(notification);\r\n  }\r\n\r\n  /**\r\n   * Notify clients of a file change in world content.\r\n   */\r\n  public notifyFileChange(\r\n    eventName: \"fileChanged\" | \"fileAdded\" | \"fileRemoved\",\r\n    slot: number,\r\n    category: \"behavior_packs\" | \"resource_packs\" | \"world\",\r\n    path: string\r\n  ) {\r\n    this.notify({\r\n      eventName: eventName,\r\n      timestamp: Date.now(),\r\n      slot: slot,\r\n      category: category,\r\n      path: path,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Notify clients of a server state change.\r\n   */\r\n  public notifyServerState(\r\n    slot: number,\r\n    state: \"starting\" | \"started\" | \"stopping\" | \"stopped\" | \"error\",\r\n    message?: string\r\n  ) {\r\n    this.notify({\r\n      eventName: \"serverStateChanged\",\r\n      timestamp: Date.now(),\r\n      slot: slot,\r\n      state: state,\r\n      message: message,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Notify clients of a player movement.\r\n   */\r\n  public notifyPlayerMoved(\r\n    slot: number,\r\n    playerName: string,\r\n    position: { x: number; y: number; z: number },\r\n    rotation?: { yaw: number; pitch: number },\r\n    dimension?: string\r\n  ) {\r\n    this.notify({\r\n      eventName: \"playerMoved\",\r\n      timestamp: Date.now(),\r\n      slot: slot,\r\n      playerName: playerName,\r\n      position: position,\r\n      rotation: rotation,\r\n      dimension: dimension,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Forward a game event from Minecraft to WebSocket clients.\r\n   */\r\n  public notifyGameEvent(slot: number, minecraftEventName: string, data: object) {\r\n    this.notify({\r\n      eventName: \"gameEvent\",\r\n      timestamp: Date.now(),\r\n      slot: slot,\r\n      minecraftEventName: minecraftEventName,\r\n      data: data,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Notify clients of a full status update for a server slot.\r\n   * This replaces the need for polling /api/{slot}/status/\r\n   *\r\n   * @param slot The server slot number\r\n   * @param status The current DedicatedServerStatus value\r\n   * @param recentMessages Recent messages from the server\r\n   * @param title Optional server title\r\n   */\r\n  public notifyStatusUpdate(\r\n    slot: number,\r\n    status: number,\r\n    recentMessages?: Array<{ message: string; received: number; type?: number }>,\r\n    title?: string\r\n  ) {\r\n    this.notify({\r\n      eventName: \"statusUpdate\",\r\n      timestamp: Date.now(),\r\n      slot: slot,\r\n      status: status,\r\n      recentMessages: recentMessages,\r\n      title: title,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Start watching a NodeStorage for file changes and broadcast them via WebSocket.\r\n   * This enables real-time synchronization of file changes to connected clients.\r\n   *\r\n   * @param storage The NodeStorage to watch\r\n   * @param slot The server slot number this storage is associated with\r\n   * @param category The category of content (behavior_packs, resource_packs, world)\r\n   */\r\n  public startWatchingStorage(\r\n    storage: NodeStorage,\r\n    slot: number,\r\n    category: \"behavior_packs\" | \"resource_packs\" | \"world\"\r\n  ): void {\r\n    // Check if already watching this storage\r\n    if (this._storageWatchers.has(storage)) {\r\n      return;\r\n    }\r\n\r\n    // Start watching the storage\r\n    const watcherId = storage.startWatching();\r\n    this._storageWatchers.set(storage, watcherId);\r\n\r\n    // Track the slot association\r\n    if (!this._slotStorages.has(slot)) {\r\n      this._slotStorages.set(slot, []);\r\n    }\r\n    this._slotStorages.get(slot)!.push({ storage, category });\r\n\r\n    // Subscribe to storage change events\r\n    storage.onStorageChange.subscribe((sender, event) => {\r\n      this._handleStorageChange(slot, category, event);\r\n    });\r\n\r\n    Log.verbose(`Started watching ${category} storage for slot ${slot}`);\r\n  }\r\n\r\n  /**\r\n   * Stop watching a specific storage.\r\n   */\r\n  public stopWatchingStorage(storage: NodeStorage): void {\r\n    const watcherId = this._storageWatchers.get(storage);\r\n    if (watcherId) {\r\n      storage.stopWatching(watcherId);\r\n      this._storageWatchers.delete(storage);\r\n\r\n      // Remove from slot associations\r\n      for (const [slot, storages] of this._slotStorages) {\r\n        const index = storages.findIndex((s) => s.storage === storage);\r\n        if (index >= 0) {\r\n          storages.splice(index, 1);\r\n          if (storages.length === 0) {\r\n            this._slotStorages.delete(slot);\r\n          }\r\n          break;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Stop watching all storages.\r\n   */\r\n  public stopAllStorageWatchers(): void {\r\n    for (const [storage, watcherId] of this._storageWatchers) {\r\n      storage.stopWatching(watcherId);\r\n    }\r\n    this._storageWatchers.clear();\r\n    this._slotStorages.clear();\r\n    Log.verbose(\"Stopped all storage watchers\");\r\n  }\r\n\r\n  /**\r\n   * Handle a storage change event and broadcast it to WebSocket clients.\r\n   */\r\n  private _handleStorageChange(\r\n    slot: number,\r\n    category: \"behavior_packs\" | \"resource_packs\" | \"world\",\r\n    event: IStorageChangeEvent\r\n  ): void {\r\n    // Map storage change type to notification event name\r\n    let eventName: \"fileChanged\" | \"fileAdded\" | \"fileRemoved\" | \"folderChanged\";\r\n\r\n    if (event.isFile) {\r\n      switch (event.changeType) {\r\n        case \"added\":\r\n          eventName = \"fileAdded\";\r\n          break;\r\n        case \"removed\":\r\n          eventName = \"fileRemoved\";\r\n          break;\r\n        default:\r\n          eventName = \"fileChanged\";\r\n      }\r\n    } else {\r\n      eventName = \"folderChanged\";\r\n    }\r\n\r\n    // Broadcast the notification\r\n    this.notify({\r\n      eventName: eventName,\r\n      timestamp: event.timestamp.getTime(),\r\n      slot: slot,\r\n      category: category,\r\n      path: event.path,\r\n    });\r\n\r\n    Log.verbose(`[HttpServer] Storage change: ${eventName} ${category}${event.path} (slot ${slot})`);\r\n  }\r\n\r\n  async stop(reason?: string) {\r\n    // Stop all storage watchers\r\n    this.stopAllStorageWatchers();\r\n\r\n    // Clean up MCP server resources (cached browser, preview server, etc.)\r\n    if (this._mcpServer) {\r\n      try {\r\n        await this._mcpServer.cleanup();\r\n      } catch (e) {\r\n        // Ignore cleanup errors during shutdown\r\n      }\r\n      this._mcpServer = undefined;\r\n      this._mcpServerInitPromise = undefined;\r\n    }\r\n\r\n    // Notify all WebSocket clients that the server is shutting down BEFORE closing connections\r\n    if (this._wsServer && this._wsClients.size > 0) {\r\n      const shutdownNotification = {\r\n        header: {\r\n          version: 1,\r\n          requestId: crypto.randomUUID ? crypto.randomUUID() : `${Date.now()}-${Math.random()}`,\r\n          messageType: \"notification\",\r\n          messagePurpose: \"event\",\r\n        },\r\n        body: {\r\n          eventName: \"serverShutdown\",\r\n          timestamp: Date.now(),\r\n          reason: reason || \"Server shutting down\",\r\n          graceful: true,\r\n        },\r\n      };\r\n\r\n      const message = JSON.stringify(shutdownNotification);\r\n      let sentCount = 0;\r\n\r\n      for (const [socket] of this._wsClients) {\r\n        try {\r\n          if (socket.readyState === socket.OPEN) {\r\n            socket.send(message);\r\n            sentCount++;\r\n          }\r\n        } catch (e) {\r\n          // Ignore send errors during shutdown\r\n        }\r\n      }\r\n\r\n      Log.message(`Sent shutdown notification to ${sentCount} WebSocket clients.`);\r\n\r\n      // Give the message a moment to be delivered before closing connections\r\n      if (sentCount > 0) {\r\n        await new Promise((resolve) => setTimeout(resolve, 100));\r\n      }\r\n    }\r\n\r\n    // Close WebSocket server and all connections\r\n    if (this._wsServer) {\r\n      for (const [socket] of this._wsClients) {\r\n        try {\r\n          socket.close();\r\n        } catch (e) {\r\n          // Ignore close errors\r\n        }\r\n      }\r\n      this._wsClients.clear();\r\n      this._wsServer.close();\r\n      Log.message(\"WebSocket notification server closed.\");\r\n    }\r\n\r\n    // Reset listening state BEFORE closing servers\r\n    this._isListeningMetaFlag = false;\r\n\r\n    if (this._httpServer) {\r\n      // Force close all connections immediately\r\n      this._httpServer.closeAllConnections?.();\r\n      this._httpServer.close(() => {\r\n        Log.message(`Minecraft HTTP server closed.`);\r\n      });\r\n      // Unref the server so it doesn't keep the process alive\r\n      this._httpServer.unref();\r\n    }\r\n\r\n    if (this._httpsServer) {\r\n      this._httpsServer.closeAllConnections?.();\r\n      this._httpsServer.close(() => {\r\n        Log.message(`Minecraft https server closed.`);\r\n      });\r\n      this._httpsServer.unref();\r\n    }\r\n  }\r\n\r\n  private _salt: Buffer | undefined;\r\n\r\n  getPasswordHash() {\r\n    if (!this._pwdHash) {\r\n      // Generate salt once and store it\r\n      this._salt = crypto.randomBytes(32);\r\n      this._pwdHash = crypto.scryptSync(this._localEnvironment.tokenEncryptionKey, this._salt, 32);\r\n    }\r\n\r\n    return this._pwdHash;\r\n  }\r\n\r\n  getSalt() {\r\n    if (!this._salt) {\r\n      this.getPasswordHash(); // Initialize salt\r\n    }\r\n    return this._salt!;\r\n  }\r\n\r\n  /**\r\n   * Generates a generic fingerprint hash for token binding.\r\n   * Uses partial IP and browser family to balance security with usability.\r\n   *\r\n   * Note: This is intentionally \"soft\" binding - we only use partial IP\r\n   * to avoid breaking sessions for mobile users while still providing\r\n   * some protection against token theft across different networks.\r\n   */\r\n  generateFingerprint(userAgent?: string, ipAddress?: string): string {\r\n    // Extract only the IP network prefix (first 2 octets for IPv4, first 3 groups for IPv6)\r\n    // This provides some binding while tolerating NAT/mobile IP changes within same ISP\r\n    let networkPrefix = \"unknown\";\r\n    if (ipAddress) {\r\n      // Normalize localhost addresses to a consistent value\r\n      // This handles: 127.0.0.1, ::1, ::ffff:127.0.0.1, localhost\r\n      if (\r\n        ipAddress === \"127.0.0.1\" ||\r\n        ipAddress === \"::1\" ||\r\n        ipAddress === \"::ffff:127.0.0.1\" ||\r\n        ipAddress.startsWith(\"::ffff:127.\")\r\n      ) {\r\n        networkPrefix = \"localhost\";\r\n      } else if (ipAddress.includes(\".\")) {\r\n        // IPv4: use first 2 octets (e.g., \"192.168.x.x\" -> \"192.168\")\r\n        const parts = ipAddress.split(\".\");\r\n        if (parts.length >= 2) {\r\n          networkPrefix = `${parts[0]}.${parts[1]}`;\r\n        }\r\n      } else if (ipAddress.includes(\":\")) {\r\n        // IPv6: use first 3 groups\r\n        const parts = ipAddress.split(\":\");\r\n        if (parts.length >= 3) {\r\n          networkPrefix = `${parts[0]}:${parts[1]}:${parts[2]}`;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Extract browser family from user agent (not full string, for privacy)\r\n    let browserFamily = \"unknown\";\r\n    if (userAgent) {\r\n      if (userAgent.includes(\"Chrome\") && !userAgent.includes(\"Edg\")) {\r\n        browserFamily = \"chrome\";\r\n      } else if (userAgent.includes(\"Firefox\")) {\r\n        browserFamily = \"firefox\";\r\n      } else if (userAgent.includes(\"Safari\") && !userAgent.includes(\"Chrome\")) {\r\n        browserFamily = \"safari\";\r\n      } else if (userAgent.includes(\"Edg\")) {\r\n        browserFamily = \"edge\";\r\n      }\r\n    }\r\n\r\n    // Create a hash of the combined attributes\r\n    const combined = `${networkPrefix}|${browserFamily}`;\r\n    return crypto.createHash(\"sha256\").update(combined).digest(\"hex\").substring(0, 32);\r\n  }\r\n\r\n  /**\r\n   * Validates that a token fingerprint matches current request.\r\n   * Uses timing-safe comparison to prevent timing attacks.\r\n   */\r\n  validateFingerprint(storedFingerprint: string, currentFingerprint: string): boolean {\r\n    if (storedFingerprint.length !== currentFingerprint.length) {\r\n      return false;\r\n    }\r\n\r\n    try {\r\n      return crypto.timingSafeEqual(Buffer.from(storedFingerprint, \"utf8\"), Buffer.from(currentFingerprint, \"utf8\"));\r\n    } catch {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the expected session ID for a given permission level.\r\n   * Used to validate that tokens were issued for the current server session.\r\n   * This prevents replay attacks with tokens from previous server restarts.\r\n   */\r\n  getExpectedSessionIdForPermission(permissionLevel: ServerPermissionLevel): string | undefined {\r\n    switch (permissionLevel) {\r\n      case ServerPermissionLevel.admin:\r\n        return this._localEnvironment.adminSessionId;\r\n      case ServerPermissionLevel.displayReadOnly:\r\n        return this._localEnvironment.displayReadOnlySessionId;\r\n      case ServerPermissionLevel.fullReadOnly:\r\n        return this._localEnvironment.fullReadOnlySessionId;\r\n      case ServerPermissionLevel.updateState:\r\n        return this._localEnvironment.updateStateSessionId;\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  getAllowedCorsOrigins(): string[] {\r\n    // Default allowed origins\r\n    const defaultOrigins = [\"http://localhost:6126\", \"http://127.0.0.1:6126\"];\r\n\r\n    // Add configured origins if any\r\n    if (this._localEnvironment.allowedCorsOrigins && this._localEnvironment.allowedCorsOrigins.length > 0) {\r\n      return [...defaultOrigins, ...this._localEnvironment.allowedCorsOrigins];\r\n    }\r\n\r\n    return defaultOrigins;\r\n  }\r\n\r\n  /**\r\n   * Check if an origin is allowed for CORS.\r\n   * Allows any localhost/127.0.0.1 port for development convenience.\r\n   */\r\n  isOriginAllowed(origin: string | undefined): boolean {\r\n    if (!origin) {\r\n      return false;\r\n    }\r\n\r\n    // Allow any localhost port (e.g., localhost:3000 for Vite dev server)\r\n    // This matches http://localhost:<any-port> or http://127.0.0.1:<any-port>\r\n    const localhostPattern = /^https?:\\/\\/(localhost|127\\.0\\.0\\.1)(:\\d+)?$/;\r\n    if (localhostPattern.test(origin)) {\r\n      return true;\r\n    }\r\n\r\n    const allowedOrigins = this.getAllowedCorsOrigins();\r\n    return allowedOrigins.includes(origin);\r\n  }\r\n\r\n  getCorsHeaders(req: http.IncomingMessage): { [key: string]: string } {\r\n    const origin = req.headers.origin;\r\n    const allowedOrigin = this.isOriginAllowed(origin) ? origin : \"null\";\r\n\r\n    return {\r\n      // CORS headers\r\n      \"Access-Control-Allow-Origin\": allowedOrigin!,\r\n      \"Access-Control-Allow-Methods\": \"OPTIONS, POST, GET, DELETE\",\r\n      \"Access-Control-Max-Age\": \"86400\",\r\n      \"Access-Control-Allow-Headers\": \"Content-Type, Authorization, mctpc, mcp-session-id\",\r\n      \"Access-Control-Allow-Credentials\": \"true\",\r\n      Vary: \"Origin\", // Important for caching with multiple origins\r\n\r\n      // Security headers\r\n      \"X-Content-Type-Options\": \"nosniff\", // Prevent MIME type sniffing\r\n      \"X-Frame-Options\": \"DENY\", // Prevent clickjacking\r\n      \"X-XSS-Protection\": \"1; mode=block\", // Legacy XSS protection for older browsers\r\n      \"Referrer-Policy\": \"strict-origin-when-cross-origin\", // Control referrer information\r\n      // CSP for CLI-served web \u2014 no telemetry endpoints allowed (telemetry is only for mctools.dev)\r\n      \"Content-Security-Policy\":\r\n        \"default-src 'self'; manifest-src 'self'; worker-src 'self' blob:; script-src 'self' 'wasm-unsafe-eval' 'unsafe-inline'; connect-src 'self' https://raw.githubusercontent.com/ https://registry.npmjs.org/ https://mctools.dev wss:; font-src 'self' https://res-1.cdn.office.net https://res.cdn.office.net; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; frame-ancestors 'none';\",\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Register temporary content to be served at a specific path.\r\n   * Useful for serving project-specific content for headless rendering.\r\n   * @param urlPath The URL path to serve (e.g., \"/temp/geometry.json\")\r\n   * @param content The content to serve (string for JSON/text, Uint8Array for binary)\r\n   * @param contentType The content type (e.g., \"application/json\", \"image/png\")\r\n   */\r\n  registerTempContent(urlPath: string, content: string | Uint8Array, contentType: string) {\r\n    this._tempContent.set(urlPath, { content, contentType });\r\n  }\r\n\r\n  /**\r\n   * Unregister temporary content.\r\n   * @param urlPath The URL path to remove\r\n   */\r\n  unregisterTempContent(urlPath: string) {\r\n    this._tempContent.delete(urlPath);\r\n  }\r\n\r\n  /**\r\n   * Clear all temporary content.\r\n   */\r\n  clearTempContent() {\r\n    this._tempContent.clear();\r\n  }\r\n\r\n  /**\r\n   * Set the content path for serving local files via /api/content.\r\n   * Used by the 'view' command to serve Minecraft content for browsing.\r\n   * @param contentPath Absolute path to the local folder to serve\r\n   */\r\n  setContentPath(contentPath: string) {\r\n    this._contentPath = contentPath;\r\n    this._contentStorage = new NodeStorage(contentPath, \"\");\r\n  }\r\n\r\n  /**\r\n   * Get the content path if set.\r\n   */\r\n  getContentPath(): string | undefined {\r\n    return this._contentPath;\r\n  }\r\n\r\n  /**\r\n   * Set whether the server is running in \"view\" mode.\r\n   * When true, enables the /api/shutdown endpoint for graceful shutdown.\r\n   */\r\n  setViewMode(isViewMode: boolean) {\r\n    this._isViewMode = isViewMode;\r\n  }\r\n\r\n  /**\r\n   * Check if the server is running in view mode.\r\n   */\r\n  isViewMode(): boolean {\r\n    return this._isViewMode;\r\n  }\r\n\r\n  /**\r\n   * Set whether the server is running in \"edit\" mode.\r\n   * When true, enables write operations (PUT/DELETE) on /api/content endpoints.\r\n   * Edit mode also enables view mode features like /api/shutdown.\r\n   */\r\n  setEditMode(isEditMode: boolean) {\r\n    this._isEditMode = isEditMode;\r\n    // Edit mode implies view mode features (shutdown endpoint, etc.)\r\n    if (isEditMode) {\r\n      this._isViewMode = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if the server is running in edit mode.\r\n   */\r\n  isEditMode(): boolean {\r\n    return this._isEditMode;\r\n  }\r\n\r\n  /**\r\n   * Set whether MCP requires authentication even from localhost.\r\n   * When false (default), localhost requests to /mcp bypass authentication.\r\n   * When true, all /mcp requests must authenticate via passcode or session token.\r\n   */\r\n  setMcpRequireAuth(requireAuth: boolean) {\r\n    this._mcpRequireAuth = requireAuth;\r\n  }\r\n\r\n  /**\r\n   * Handles an MCP request by lazily initializing the MCP server and delegating.\r\n   * Sets CORS headers before handing off to the MCP transport, which manages\r\n   * its own response headers (the SDK's StreamableHTTPServerTransport).\r\n   */\r\n  private async _handleMcpRequest(\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string }\r\n  ) {\r\n    if (!this.creatorTools) {\r\n      this.sendErrorRequest(503, \"Server not ready: CreatorTools not initialized\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Ensure MCP server is initialized (with race guard).\r\n    // Always await the init promise \u2014 even if _mcpServer is already set \u2014 because\r\n    // the object is assigned before startHttp() finishes. A concurrent request could\r\n    // see _mcpServer as truthy while the transport is still being created.\r\n    if (!this._mcpServerInitPromise) {\r\n      this._mcpServerInitPromise = (async () => {\r\n        this._mcpServer = new MinecraftMcpServer();\r\n        await this._mcpServer.startHttp(this.creatorTools!, this._localEnvironment, this._serverManager);\r\n      })();\r\n    }\r\n    await this._mcpServerInitPromise;\r\n\r\n    // Set CORS headers before handing off to the MCP transport.\r\n    // The SDK's StreamableHTTPServerTransport will add its own headers via writeHead,\r\n    // but res.setHeader() calls are merged into the final headers.\r\n    for (const [key, value] of Object.entries(corsHeaders)) {\r\n      res.setHeader(key, value);\r\n    }\r\n    // Also expose the mcp-session-id header to cross-origin clients\r\n    res.setHeader(\"Access-Control-Expose-Headers\", \"mcp-session-id\");\r\n\r\n    if (this._mcpServer) {\r\n      await this._mcpServer.handleRequest(req, res);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if a file name is safe to serve (not in blocked list and has safe extension).\r\n   */\r\n  private isFileSafeToServe(fileName: string): boolean {\r\n    const fileNameLower = fileName.toLowerCase();\r\n\r\n    // Check blocked file names\r\n    if (HttpServer.BLOCKED_FILE_NAMES.has(fileNameLower)) {\r\n      return false;\r\n    }\r\n\r\n    // Allow LevelDB MANIFEST files (they don't have an extension but start with MANIFEST)\r\n    if (fileNameLower.startsWith(\"manifest-\")) {\r\n      return true;\r\n    }\r\n\r\n    // Allow CURRENT file (LevelDB metadata)\r\n    if (fileNameLower === \"current\") {\r\n      return true;\r\n    }\r\n\r\n    // Allow LOG file (LevelDB write-ahead log, no extension)\r\n    if (fileNameLower === \"log\" || fileNameLower === \"log.old\") {\r\n      return true;\r\n    }\r\n\r\n    // Allow LOCK file (LevelDB lock file)\r\n    if (fileNameLower === \"lock\") {\r\n      return true;\r\n    }\r\n\r\n    // Get extension\r\n    const lastDot = fileNameLower.lastIndexOf(\".\");\r\n    const extension = lastDot >= 0 ? fileNameLower.substring(lastDot + 1) : \"\";\r\n\r\n    // Check safe extensions\r\n    return HttpServer.SAFE_EXTENSIONS.has(extension);\r\n  }\r\n\r\n  /**\r\n   * Check if a folder name is safe to traverse (not hidden or blocked).\r\n   */\r\n  private isFolderSafeToServe(folderName: string): boolean {\r\n    const folderNameLower = folderName.toLowerCase();\r\n\r\n    // Block folders starting with a dot (hidden folders, .git, .vscode, etc.)\r\n    if (folderNameLower.startsWith(\".\")) {\r\n      return false;\r\n    }\r\n\r\n    // Block node_modules and other known unsafe folders\r\n    if (folderNameLower === \"node_modules\" || folderNameLower === \"__pycache__\") {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  getRootPath() {\r\n    let fullPath = __dirname;\r\n\r\n    const lastSlash = Math.max(\r\n      fullPath.lastIndexOf(\"\\\\\", fullPath.length - 2),\r\n      fullPath.lastIndexOf(\"/\", fullPath.length - 2)\r\n    );\r\n\r\n    if (lastSlash >= 0) {\r\n      fullPath = fullPath.substring(0, lastSlash + 1);\r\n    }\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  /**\r\n   * Get the path to the res/ folder, checking both the default location\r\n   * and the public/ folder for development environments.\r\n   *\r\n   * The serve vanilla folder (with PNG-converted textures) is often only\r\n   * available under public/res/ \u2014 not under toolbuild/jsn/res/. This method\r\n   * checks multiple candidate paths to find the one that actually contains\r\n   * vanilla resource data.\r\n   */\r\n  getResRootPath(): string {\r\n    const defaultResPath = this.getRootPath() + \"res/\";\r\n    const fs = require(\"fs\");\r\n    const serveCheck = \"latest/van/serve/resource_pack/textures/terrain_texture.json\";\r\n\r\n    if (fs.existsSync(defaultResPath + serveCheck)) {\r\n      return defaultResPath;\r\n    }\r\n\r\n    const publicResPath = this.getRootPath() + \"public/res/\";\r\n    if (fs.existsSync(publicResPath + serveCheck)) {\r\n      return publicResPath;\r\n    }\r\n\r\n    // Check one level up (for toolbuild/jsn/cli running from app/)\r\n    const parentResPath = this.getRootPath().replace(/[\\\\/]toolbuild[\\\\/]jsn[\\\\/]?$/, \"/\") + \"public/res/\";\r\n    if (fs.existsSync(parentResPath + serveCheck)) {\r\n      return parentResPath;\r\n    }\r\n\r\n    // Check cwd-based path (for npm run scripts running from app/)\r\n    const cwdResPath = process.cwd().replace(/[\\\\/]$/, \"\") + \"/public/res/\";\r\n    if (fs.existsSync(cwdResPath + serveCheck)) {\r\n      return cwdResPath;\r\n    }\r\n\r\n    return defaultResPath;\r\n  }\r\n\r\n  /**\r\n   * Check if a URL path is for vanilla resources (under /res/latest/van/)\r\n   */\r\n  isVanillaResourcePath(urlPath: string): boolean {\r\n    return urlPath.startsWith(\"/res/latest/van/\");\r\n  }\r\n\r\n  parseCookies(req: http.IncomingMessage): { [name: string]: string } {\r\n    const result: { [name: string]: string } = {};\r\n\r\n    const cookieHeader = req.headers?.cookie;\r\n\r\n    if (!cookieHeader) return result;\r\n\r\n    const cookieVals = cookieHeader.split(`;`);\r\n\r\n    for (let i = 0; i < cookieVals.length; i++) {\r\n      const cookie = cookieVals[i];\r\n\r\n      let [name, ...rest] = cookie.split(`=`);\r\n\r\n      name = name?.trim();\r\n\r\n      if (!name) {\r\n        continue;\r\n      }\r\n\r\n      const value = rest.join(`=`).trim();\r\n\r\n      if (!value) {\r\n        continue;\r\n      }\r\n\r\n      result[name] = decodeURIComponent(value);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  processRequest(req: http.IncomingMessage, res: http.ServerResponse) {\r\n    // Security: Use dynamic CORS headers based on origin\r\n    const corsHeaders = this.getCorsHeaders(req);\r\n\r\n    if (req.method === \"OPTIONS\") {\r\n      res.writeHead(204, corsHeaders);\r\n      res.end();\r\n      return;\r\n    }\r\n\r\n    if (!req.url) {\r\n      res.writeHead(404, this.headers);\r\n      Log.message(\"Requested url was not specified.\");\r\n      return;\r\n    }\r\n\r\n    let authorizedPermissionLevel: ServerPermissionLevel = ServerPermissionLevel.none;\r\n\r\n    let headerPasscode = undefined;\r\n    if (req.headers[\"mctpc\"]) {\r\n      headerPasscode = req.headers[\"mctpc\"] as string;\r\n    }\r\n\r\n    if (headerPasscode) {\r\n      if (headerPasscode === this._localEnvironment.displayReadOnlyPasscode) {\r\n        authorizedPermissionLevel = ServerPermissionLevel.displayReadOnly;\r\n      } else if (headerPasscode === this._localEnvironment.fullReadOnlyPasscode) {\r\n        authorizedPermissionLevel = ServerPermissionLevel.fullReadOnly;\r\n      } else if (headerPasscode === this._localEnvironment.updateStatePasscode) {\r\n        authorizedPermissionLevel = ServerPermissionLevel.updateState;\r\n      } else if (headerPasscode === this._localEnvironment.adminPasscode) {\r\n        authorizedPermissionLevel = ServerPermissionLevel.admin;\r\n      } else {\r\n        this.sendErrorRequest(401, \"Invalid passcode passed in via mctpc header.\", req, res);\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (req.url === \"/favicon.ico\") {\r\n      this.serveContent(\"res\", \"/res/images/favicon.ico\", this._resStorage, res);\r\n      return;\r\n    }\r\n\r\n    // Serve source map files without authentication - these are static development assets\r\n    if (req.url.startsWith(\"/min-maps/\")) {\r\n      this.serveContent(\"min-maps\", req.url, this._webStorage, res);\r\n      return;\r\n    }\r\n\r\n    if ((req.url.startsWith(\"/api/auth\") || req.url.startsWith(\"/auth/\")) && req.method === \"POST\") {\r\n      let authBody = \"\";\r\n      let authBodySize = 0;\r\n      const MAX_AUTH_BODY_SIZE = 1024; // 1KB max for auth requests\r\n\r\n      // Security: Rate limiting\r\n      const clientIp =\r\n        (req.headers[\"x-forwarded-for\"] as string)?.split(\",\")[0] || req.socket.remoteAddress || \"unknown\";\r\n      if (!SecurityUtilities.checkAuthRateLimit(clientIp)) {\r\n        this.sendErrorRequest(429, \"Too many authentication attempts. Please try again later.\", req, res);\r\n        return;\r\n      }\r\n\r\n      Log.message(HttpUtilities.getShortReqDescription(req, clientIp) + `Auth request`);\r\n\r\n      req.on(\"data\", (chunk) => {\r\n        authBodySize += chunk.length;\r\n        // Security: Limit auth body size to prevent memory exhaustion\r\n        if (authBodySize > MAX_AUTH_BODY_SIZE) {\r\n          this.sendErrorRequest(413, \"Auth request too large\", req, res);\r\n          req.destroy();\r\n          return;\r\n        }\r\n        authBody += chunk;\r\n      });\r\n\r\n      req.on(\"end\", () => {\r\n        let passcode: string | undefined;\r\n\r\n        if (authBody.startsWith(\"passcode=\")) {\r\n          passcode = authBody.trim().substring(9).toLowerCase().replace(/-/g, \"\");\r\n        } else if (req.headers[\"mctpc\"]) {\r\n          passcode = req.headers[\"mctpc\"] as string;\r\n        }\r\n\r\n        if (!passcode) {\r\n          this.sendErrorRequest(\r\n            401,\r\n            \"No passcode provided. Send passcode in body as 'passcode=<value>' or in the 'mctpc' header.\",\r\n            req,\r\n            res\r\n          );\r\n          return;\r\n        }\r\n\r\n        let sessionId: string | undefined;\r\n\r\n        if (passcode === this._localEnvironment.displayReadOnlyPasscode) {\r\n          authorizedPermissionLevel = ServerPermissionLevel.displayReadOnly;\r\n          sessionId = this._localEnvironment.displayReadOnlySessionId;\r\n        } else if (passcode === this._localEnvironment.fullReadOnlyPasscode) {\r\n          authorizedPermissionLevel = ServerPermissionLevel.fullReadOnly;\r\n          sessionId = this._localEnvironment.fullReadOnlySessionId;\r\n        } else if (passcode === this._localEnvironment.updateStatePasscode) {\r\n          authorizedPermissionLevel = ServerPermissionLevel.updateState;\r\n          sessionId = this._localEnvironment.updateStateSessionId;\r\n        } else if (passcode === this._localEnvironment.adminPasscode) {\r\n          authorizedPermissionLevel = ServerPermissionLevel.admin;\r\n          sessionId = this._localEnvironment.adminSessionId;\r\n        }\r\n\r\n        if (!authorizedPermissionLevel || !sessionId) {\r\n          this.sendErrorRequest(401, \"Login request failed.\", req, res);\r\n          return;\r\n        }\r\n\r\n        // Security: Reset rate limit on successful auth\r\n        SecurityUtilities.resetAuthRateLimit(clientIp);\r\n\r\n        // Security: Add fingerprint binding\r\n        const userAgent = req.headers[\"user-agent\"] || \"\";\r\n        const fingerprint = this.generateFingerprint(userAgent, clientIp);\r\n\r\n        const token: IAuthenticationToken = {\r\n          code: sessionId,\r\n          permissionLevel: authorizedPermissionLevel,\r\n          time: new Date().getTime(),\r\n          fingerprint: fingerprint,\r\n        };\r\n\r\n        const val = this.encrypt(JSON.stringify(token));\r\n\r\n        const response: CartoServerAuthenticationResponse = {\r\n          iv: val.iv,\r\n          token: val.content,\r\n          authTag: val.authTag, // Include auth tag for GCM\r\n          permissionLevel: authorizedPermissionLevel,\r\n          serverStatus: [],\r\n          eulaAccepted:\r\n            this._localEnvironment\r\n              .iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula === true,\r\n        };\r\n\r\n        // Include status for slots 0-3 (for backwards compatibility) plus all active slots\r\n        const activeSlots = this._serverManager.getActiveSlots();\r\n        const slotsToInclude = new Set([0, 1, 2, 3, ...activeSlots]);\r\n        const sortedSlots = Array.from(slotsToInclude).sort((a, b) => a - b);\r\n\r\n        for (const slot of sortedSlots) {\r\n          response.serverStatus[slot] = this.getStatus(slot);\r\n        }\r\n\r\n        // Build secure cookie with appropriate flags for all auth methods\r\n        // - HttpOnly: Prevents JavaScript access (XSS protection)\r\n        // - SameSite=Strict: Prevents CSRF attacks\r\n        // - Secure: Only sent over HTTPS (omitted for localhost development)\r\n        // - Max-Age: 24 hours (matches token expiry)\r\n        const isLocalhost = this.host === \"localhost\" || this.host === \"127.0.0.1\";\r\n        const cookieValue = `mctauth=${val.content}|${val.iv}|${\r\n          val.authTag\r\n        }; HttpOnly; SameSite=Strict; Max-Age=86400; Path=/${isLocalhost ? \"\" : \"; Secure\"}`;\r\n\r\n        if (req.url && req.url.startsWith(\"/api/auth\")) {\r\n          const permName = HttpUtilities.getPermissionLevelName(authorizedPermissionLevel);\r\n          const tokenThumb = HttpUtilities.getTokenThumbprint(sessionId);\r\n          Log.message(HttpUtilities.getShortReqDescription(req, clientIp, tokenThumb) + `Auth successful: ${permName}`);\r\n          res.writeHead(\r\n            200,\r\n            Object.assign(\r\n              {\r\n                \"Set-Cookie\": cookieValue,\r\n                \"Content-Type\": `application/json`,\r\n              },\r\n              corsHeaders\r\n            )\r\n          );\r\n\r\n          res.end(JSON.stringify(response));\r\n          return;\r\n        } else {\r\n          const permName = HttpUtilities.getPermissionLevelName(authorizedPermissionLevel);\r\n          const tokenThumb = HttpUtilities.getTokenThumbprint(sessionId);\r\n          Log.message(\r\n            HttpUtilities.getShortReqDescription(req, clientIp, tokenThumb) + `Page auth successful: ${permName}`\r\n          );\r\n\r\n          res.writeHead(\r\n            200,\r\n            Object.assign(\r\n              {\r\n                \"Set-Cookie\": cookieValue,\r\n                \"Content-Type\": \"text/html\",\r\n              },\r\n              corsHeaders\r\n            )\r\n          );\r\n\r\n          res.end(JSON.stringify(\"<head><meta http-equiv='Refresh' content='0; URL=/'></head>\"));\r\n          return;\r\n        }\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    // Serve temporary content (for headless rendering of project geometry, etc.)\r\n    // URL decode the path to handle cases like %2Ftemp%2Fgeometry.json -> /temp/geometry.json\r\n    const decodedUrl = decodeURIComponent(req.url.split(\"?\")[0]);\r\n    if (decodedUrl.startsWith(\"/temp/\")) {\r\n      const tempContent = this._tempContent.get(decodedUrl);\r\n      if (tempContent) {\r\n        res.writeHead(200, {\r\n          ...corsHeaders,\r\n          \"Content-Type\": tempContent.contentType,\r\n        });\r\n        res.end(tempContent.content);\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (this._serverManager.features === ServerManagerFeatures.all) {\r\n      if (req.url.startsWith(\"/app/\")) {\r\n        this.serveContent(\"app\", req.url, this._webStorage, res);\r\n        return;\r\n      }\r\n\r\n      if (req.url.startsWith(\"/res/\")) {\r\n        // For vanilla resources under /res/latest/van/, prefer local storage when\r\n        // the serve folder is available locally (has PNG-converted textures).\r\n        // Fall back to proxying from vanillaContentRoot (e.g., mctools.dev) otherwise.\r\n        if (this.isVanillaResourcePath(req.url)) {\r\n          // index.json files are generated locally by the download resources tool\r\n          // and won't exist on the CDN. Always serve them from local storage.\r\n          const isIndexJson = req.url.endsWith(\"/index.json\");\r\n\r\n          if (this._hasLocalVanillaServe || isIndexJson) {\r\n            // Local serve folder available \u2014 serve directly from _resStorage\r\n            this.serveContent(\"res\", req.url, this._resStorage, res);\r\n            return;\r\n          }\r\n\r\n          const vanillaRoot = CreatorToolsHost.getVanillaContentRoot();\r\n          if (vanillaRoot && vanillaRoot.length > 0 && vanillaRoot !== \"/\") {\r\n            const servePrefix = \"/res/latest/van/serve/\";\r\n            if (req.url.startsWith(servePrefix)) {\r\n              const vanillaServeStorage = HttpStorage.get(vanillaRoot + \"res/latest/van/serve/\");\r\n              this.serveContent(\"res/latest/van/serve\", req.url, vanillaServeStorage, res);\r\n              return;\r\n            }\r\n\r\n            const vanPrefix = \"/res/latest/van/\";\r\n\r\n            if (req.url.startsWith(vanPrefix) && req.url.indexOf(\"preview/metadata\") < 0) {\r\n              const vanillaStorage = HttpStorage.get(vanillaRoot + \"res/latest/van/\");\r\n              this.serveContent(\"res/latest/van\", req.url, vanillaStorage, res);\r\n              return;\r\n            }\r\n          }\r\n        }\r\n        this.serveContent(\"res\", req.url, this._resStorage, res);\r\n        return;\r\n      }\r\n\r\n      if (req.url.startsWith(\"/dist/\")) {\r\n        if (req.url.startsWith(\"/dist/esbuild-wasm/\") && this._esbuildWasmStorage) {\r\n          this.serveContent(\"dist/esbuild-wasm\", req.url, this._esbuildWasmStorage, res);\r\n          return;\r\n        }\r\n\r\n        this.serveContent(\"dist\", req.url, this._distStorage, res);\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (req.url.startsWith(\"/data/forms/\") && this._formsStorage) {\r\n      this.serveContent(\"data/forms\", req.url, this._formsStorage, res);\r\n      return;\r\n    }\r\n\r\n    if (req.url.startsWith(\"/data/\")) {\r\n      this.serveContent(\"data\", req.url, this._dataStorage, res);\r\n      return;\r\n    }\r\n\r\n    if (req.url.startsWith(\"/schemas/\")) {\r\n      this.serveContent(\"schemas\", req.url, this._schemasStorage, res);\r\n      return;\r\n    }\r\n\r\n    let encryptedToken: string | undefined;\r\n    const auth = req.headers.authorization;\r\n\r\n    if (auth && auth.length > 40) {\r\n      // assume that the auth token > 40\r\n      const authStr = auth as string;\r\n\r\n      const firstSection = authStr.substring(0, 7).toLowerCase();\r\n\r\n      if (firstSection === \"bearer \" && auth.indexOf(\"=\") >= 0) {\r\n        const tokenPart = authStr.substring(7);\r\n        const tokenParts = tokenPart.split(\"=\");\r\n\r\n        if (tokenParts.length === 2) {\r\n          if (tokenParts[0] === \"mctauth\") {\r\n            encryptedToken = tokenParts[1];\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!encryptedToken) {\r\n      const cookies = this.parseCookies(req);\r\n\r\n      const authCookie = cookies[\"mctauth\"];\r\n\r\n      if (authCookie) {\r\n        encryptedToken = authCookie;\r\n      }\r\n    }\r\n\r\n    if (encryptedToken) {\r\n      if (encryptedToken.indexOf(\"|\") >= 0) {\r\n        const tokenParts = Utilities.splitUntil(encryptedToken, \"|\", 2);\r\n\r\n        if (tokenParts.length === 3) {\r\n          try {\r\n            const content = tokenParts[0];\r\n            const iv = tokenParts[1];\r\n            const authTag = tokenParts.length >= 3 ? tokenParts[2] : undefined;\r\n\r\n            const decryptedStr = this.decrypt(iv, content, authTag);\r\n\r\n            const decryptedContent = SecurityUtilities.sanitizeJsonObject(JSON.parse(decryptedStr));\r\n\r\n            if (decryptedContent.code && decryptedContent.permissionLevel && decryptedContent.time) {\r\n              const tokenTime = new Date(decryptedContent.time).getTime();\r\n\r\n              const now = new Date();\r\n              const nowMs = now.getTime();\r\n\r\n              // Security: Token valid for 24 hours\r\n              const startOfToken = new Date(nowMs - 24 * 60 * 60 * 1000);\r\n\r\n              if (tokenTime > startOfToken.getTime() && tokenTime < nowMs) {\r\n                // Security: Validate that the session ID matches the current session for this permission level\r\n                // This prevents replay attacks with tokens from previous server sessions\r\n                const expectedSessionId = this.getExpectedSessionIdForPermission(decryptedContent.permissionLevel);\r\n                if (!expectedSessionId || decryptedContent.code !== expectedSessionId) {\r\n                  Log.debug(\"Token session ID mismatch - token from different server session\");\r\n                } else if (decryptedContent.fingerprint) {\r\n                  // Security: Validate fingerprint if present\r\n                  const clientIp =\r\n                    (req.headers[\"x-forwarded-for\"] as string)?.split(\",\")[0] || req.socket.remoteAddress || \"unknown\";\r\n                  const userAgent = req.headers[\"user-agent\"] || \"\";\r\n                  const currentFingerprint = this.generateFingerprint(userAgent, clientIp);\r\n\r\n                  if (this.validateFingerprint(decryptedContent.fingerprint, currentFingerprint)) {\r\n                    authorizedPermissionLevel = decryptedContent.permissionLevel;\r\n                  } else {\r\n                    Log.message(\"Token fingerprint mismatch - possible replay attack\");\r\n                  }\r\n                } else {\r\n                  // Legacy tokens without fingerprint (temporary backward compatibility)\r\n                  authorizedPermissionLevel = decryptedContent.permissionLevel;\r\n                }\r\n              }\r\n            }\r\n          } catch (e) {}\r\n        }\r\n      }\r\n    }\r\n\r\n    // Allow access to main page with query strings (e.g., /?mode=mobviewer) without auth\r\n    // Also allow for allWebServices when serving content (view mode)\r\n    const urlPath = req.url.split(\"?\")[0];\r\n    if (\r\n      urlPath === \"/\" &&\r\n      (this._serverManager.features === ServerManagerFeatures.all ||\r\n        (this._serverManager.features === ServerManagerFeatures.allWebServices && this._contentPath))\r\n    ) {\r\n      const responseHeaders: { [key: string]: string } = {\r\n        ...corsHeaders,\r\n        \"Content-Type\": \"text/html; charset=utf-8\",\r\n      };\r\n\r\n      // Support ?pc= query parameter for auto-authentication (localhost only).\r\n      // This allows tools, tests, and automation to load the page with auth in a single URL\r\n      // (e.g., /?mode=mobviewer&pc=testpswd) \u2014 the server validates the passcode,\r\n      // sets the mctauth cookie, and 302-redirects to the same URL with ?pc= stripped\r\n      // so the passcode does not persist in the browser address bar or history.\r\n      //\r\n      // SECURITY: Only accepted from localhost connections. Remote requests with ?pc=\r\n      // are silently ignored (the parameter is treated as if it were not present).\r\n      if (authorizedPermissionLevel === ServerPermissionLevel.none) {\r\n        const pageUrl = new URL(req.url, `http://${req.headers.host}`);\r\n        const pcParam = pageUrl.searchParams.get(\"pc\");\r\n        if (pcParam) {\r\n          const remoteAddr = req.socket?.remoteAddress || \"\";\r\n          const isLocalhostRequest =\r\n            remoteAddr === \"127.0.0.1\" || remoteAddr === \"::1\" || remoteAddr === \"::ffff:127.0.0.1\";\r\n\r\n          if (!isLocalhostRequest) {\r\n            Log.debug(\"Ignoring ?pc= parameter from non-localhost request: \" + remoteAddr);\r\n          } else {\r\n            const pc = pcParam.toLowerCase().replace(/-/g, \"\");\r\n            let pcPermLevel: ServerPermissionLevel = ServerPermissionLevel.none;\r\n            let pcSessionId: string | undefined;\r\n\r\n            if (pc === this._localEnvironment.displayReadOnlyPasscode) {\r\n              pcPermLevel = ServerPermissionLevel.displayReadOnly;\r\n              pcSessionId = this._localEnvironment.displayReadOnlySessionId;\r\n            } else if (pc === this._localEnvironment.fullReadOnlyPasscode) {\r\n              pcPermLevel = ServerPermissionLevel.fullReadOnly;\r\n              pcSessionId = this._localEnvironment.fullReadOnlySessionId;\r\n            } else if (pc === this._localEnvironment.updateStatePasscode) {\r\n              pcPermLevel = ServerPermissionLevel.updateState;\r\n              pcSessionId = this._localEnvironment.updateStateSessionId;\r\n            } else if (pc === this._localEnvironment.adminPasscode) {\r\n              pcPermLevel = ServerPermissionLevel.admin;\r\n              pcSessionId = this._localEnvironment.adminSessionId;\r\n            }\r\n\r\n            if (pcPermLevel !== ServerPermissionLevel.none && pcSessionId) {\r\n              const userAgent = req.headers[\"user-agent\"] || \"\";\r\n              const clientIp = req.socket.remoteAddress || \"unknown\";\r\n              const fingerprint = this.generateFingerprint(userAgent, clientIp);\r\n              const token: IAuthenticationToken = {\r\n                code: pcSessionId,\r\n                permissionLevel: pcPermLevel,\r\n                time: new Date().getTime(),\r\n                fingerprint: fingerprint,\r\n              };\r\n              const val = this.encrypt(JSON.stringify(token));\r\n              const cookieValue = `mctauth=${val.content}|${val.iv}|${val.authTag}; HttpOnly; SameSite=Strict; Max-Age=86400; Path=/`;\r\n\r\n              // 302 redirect to the same URL with ?pc= stripped so the passcode\r\n              // does not remain in the address bar, browser history, or Referer headers.\r\n              pageUrl.searchParams.delete(\"pc\");\r\n              const redirectUrl = pageUrl.pathname + pageUrl.search;\r\n              res.writeHead(302, {\r\n                ...corsHeaders,\r\n                \"Set-Cookie\": cookieValue,\r\n                Location: redirectUrl,\r\n              });\r\n              res.end();\r\n              return;\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      res.writeHead(200, responseHeaders);\r\n      res.end(this.getMainContent(req));\r\n      return;\r\n    }\r\n\r\n    // MCP endpoint: exempt from auth when request originates from localhost (unless --mcp-require-auth is set).\r\n    // Standard MCP clients (Copilot CLI, Claude, Cursor) don't support custom auth headers,\r\n    // so we allow unauthenticated access from localhost by default for usability.\r\n    const urlSegmentsPreAuth = req.url?.toLowerCase().split(\"/\");\r\n    if (urlSegmentsPreAuth && urlSegmentsPreAuth.length >= 2 && urlSegmentsPreAuth[1] === \"mcp\") {\r\n      const remoteAddr = req.socket?.remoteAddress || \"\";\r\n      const isLocalhostRequest =\r\n        remoteAddr === \"127.0.0.1\" || remoteAddr === \"::1\" || remoteAddr === \"::ffff:127.0.0.1\";\r\n\r\n      if (isLocalhostRequest && !this._mcpRequireAuth) {\r\n        // Localhost MCP: bypass auth\r\n        this._handleMcpRequest(req, res, corsHeaders).catch((e) => {\r\n          Log.debug(\"Error handling MCP request: \" + (e?.message || e));\r\n          if (!res.headersSent) {\r\n            this.sendErrorRequest(500, \"Internal MCP error\", req, res);\r\n          }\r\n        });\r\n        return;\r\n      }\r\n\r\n      // Non-localhost or auth required: fall through to normal auth check below,\r\n      // then MCP will be handled after auth succeeds.\r\n    }\r\n\r\n    if (authorizedPermissionLevel === ServerPermissionLevel.none) {\r\n      this.sendErrorRequest(401, \"No permissions granted; 401 returned.\", req, res);\r\n      return;\r\n    }\r\n\r\n    const urlSegments = req.url.toLowerCase().split(\"/\");\r\n\r\n    if (urlSegments.length >= 2) {\r\n      if (urlSegments[1] === \"mcp\") {\r\n        this._handleMcpRequest(req, res, corsHeaders).catch((e) => {\r\n          Log.debug(\"Error handling MCP request: \" + (e?.message || e));\r\n          if (!res.headersSent) {\r\n            this.sendErrorRequest(500, \"Internal MCP error\", req, res);\r\n          }\r\n        });\r\n        return;\r\n      } else if (urlSegments[1] === \"api\") {\r\n        // Handle /api/content/* endpoint for serving local content in view/edit mode\r\n        if (urlSegments[2] === \"content\" && this._contentStorage && this._contentPath) {\r\n          // Write operations (PUT, DELETE, POST) require edit mode and updateState permission\r\n          if (req.method === \"PUT\" || req.method === \"DELETE\" || req.method === \"POST\") {\r\n            if (!this._isEditMode) {\r\n              this.sendErrorRequest(403, \"Write operations not allowed in view-only mode\", req, res);\r\n              return;\r\n            }\r\n            if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n              return;\r\n            }\r\n          } else {\r\n            // Read operations (GET) require fullReadOnly permission\r\n            if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.fullReadOnly, req, res)) {\r\n              return;\r\n            }\r\n          }\r\n\r\n          this.handleContentRequest(req, res, corsHeaders, authorizedPermissionLevel)\r\n            .then(() => {\r\n              // Request handled\r\n            })\r\n            .catch((e) => {\r\n              Log.error(\"Error handling content request: \" + e.toString());\r\n              this.sendErrorRequest(500, \"Internal server error\", req, res);\r\n            });\r\n          return;\r\n        }\r\n\r\n        // Handle /api/worldContent/{slot}/* endpoint for serving dedicated server world content\r\n        // This exposes behavior_packs, resource_packs, and world folders from the active server\r\n        if (urlSegments[2] === \"worldcontent\") {\r\n          // Require fullReadOnly permission for read access\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.fullReadOnly, req, res)) {\r\n            return;\r\n          }\r\n\r\n          this.handleWorldContentRequest(req, res, corsHeaders, urlSegments)\r\n            .then(() => {\r\n              // Request handled\r\n            })\r\n            .catch((e) => {\r\n              Log.error(\"Error handling worldContent request: \" + e.toString());\r\n              this.sendErrorRequest(500, \"Internal server error\", req, res);\r\n            });\r\n          return;\r\n        }\r\n\r\n        // ==========================================================================\r\n        // WORLD BACKUP MANAGEMENT API\r\n        // /api/worlds - List managed worlds\r\n        // /api/worlds/{id} - Get specific world info\r\n        // /api/worlds/{id}/backups - List/create backups for a world\r\n        // /api/worlds/{id}/backups/{timestamp} - Get/delete specific backup\r\n        // /api/worlds/{id}/backups/{timestamp}/export - Export backup as .mcworld\r\n        // ==========================================================================\r\n        if (urlSegments[2] === \"worlds\") {\r\n          Log.debug(\"Worlds API request: \" + req.url + \" segments: \" + JSON.stringify(urlSegments));\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.fullReadOnly, req, res)) {\r\n            return;\r\n          }\r\n\r\n          this.handleWorldsRequest(req, res, corsHeaders, urlSegments, authorizedPermissionLevel)\r\n            .then(() => {\r\n              // Request handled\r\n            })\r\n            .catch((e) => {\r\n              Log.error(\"Error handling worlds request: \" + e.toString());\r\n              this.sendErrorRequest(500, \"Internal server error: \" + e.message, req, res);\r\n            });\r\n          return;\r\n        }\r\n\r\n        // ==========================================================================\r\n        // TOOLCOMMAND API\r\n        // /api/commands - List available commands\r\n        // /api/commands/<commandName> - Execute a command\r\n        // ==========================================================================\r\n        if (urlSegments[2] === \"commands\") {\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n            return;\r\n          }\r\n\r\n          this.handleCommandsRequest(req, res, corsHeaders, urlSegments)\r\n            .then(() => {\r\n              // Request handled\r\n            })\r\n            .catch((e) => {\r\n              Log.error(\"Error handling commands request: \" + e.toString());\r\n              this.sendErrorRequest(500, \"Internal server error: \" + e.message, req, res);\r\n            });\r\n          return;\r\n        }\r\n\r\n        // Handle /api/shutdown endpoint for graceful shutdown (only in view mode)\r\n        if (urlSegments[2] === \"shutdown\" && req.method === \"POST\") {\r\n          // Only allow shutdown in view mode\r\n          if (!this._isViewMode) {\r\n            this.sendErrorRequest(404, \"Not found\", req, res);\r\n            return;\r\n          }\r\n\r\n          // Require at least fullReadOnly permission\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.fullReadOnly, req, res)) {\r\n            return;\r\n          }\r\n\r\n          Log.message(\"Shutdown requested via API. Stopping server...\");\r\n\r\n          // Send success response before shutting down\r\n          res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n          res.end(JSON.stringify({ success: true, message: \"Server shutting down\" }));\r\n\r\n          // Schedule shutdown after response is sent\r\n          setTimeout(() => {\r\n            this._serverManager.shutdown(\"Shutdown requested via API\");\r\n          }, 100);\r\n\r\n          return;\r\n        }\r\n\r\n        // Handle /api/acceptEula endpoint for accepting the Minecraft EULA\r\n        // This allows admins to accept the EULA via the web UI, enabling BDS features\r\n        if (urlSegments[2] === \"accepteula\" && req.method === \"POST\") {\r\n          // Only admins can accept the EULA\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.admin, req, res)) {\r\n            return;\r\n          }\r\n\r\n          // Read the request body to get the acceptance value\r\n          let body = \"\";\r\n          req.on(\"data\", (chunk) => {\r\n            body += chunk;\r\n            if (body.length > 1024) {\r\n              this.sendErrorRequest(413, \"Request too large\", req, res);\r\n              req.destroy();\r\n              return;\r\n            }\r\n          });\r\n\r\n          req.on(\"end\", async () => {\r\n            try {\r\n              const data = JSON.parse(body);\r\n              const accepted = data.accepted === true;\r\n\r\n              if (accepted) {\r\n                this._localEnvironment.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula = true;\r\n                await this._localEnvironment.save();\r\n\r\n                Log.message(\"Minecraft EULA accepted via web API by admin user.\");\r\n\r\n                res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n                res.end(\r\n                  JSON.stringify({\r\n                    success: true,\r\n                    message: \"EULA accepted. Bedrock Dedicated Server features are now available.\",\r\n                    eulaAccepted: true,\r\n                  })\r\n                );\r\n              } else {\r\n                res.writeHead(400, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n                res.end(JSON.stringify({ success: false, message: \"EULA acceptance value must be true\" }));\r\n              }\r\n            } catch (e) {\r\n              this.sendErrorRequest(400, \"Invalid JSON body\", req, res);\r\n            }\r\n          });\r\n\r\n          return;\r\n        }\r\n\r\n        // Handle /api/eulaStatus endpoint for checking EULA acceptance status\r\n        if (urlSegments[2] === \"eulastatus\" && req.method === \"GET\") {\r\n          // Any authenticated user can check EULA status\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.displayReadOnly, req, res)) {\r\n            return;\r\n          }\r\n\r\n          const eulaAccepted =\r\n            this._localEnvironment\r\n              .iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula === true;\r\n\r\n          res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n          res.end(JSON.stringify({ eulaAccepted }));\r\n          return;\r\n        }\r\n\r\n        if (\r\n          urlSegments[2] === \"validate\" &&\r\n          req.method === \"POST\" &&\r\n          req.headers[\"content-type\"] === \"application/zip\"\r\n        ) {\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n            return;\r\n          }\r\n\r\n          const body: any[] = [];\r\n          let totalSize = 0;\r\n          req.on(\"data\", (chunk) => {\r\n            totalSize += chunk.length;\r\n            // Security: Check size limit while receiving\r\n            if (totalSize > SecurityUtilities.MAX_UPLOAD_SIZE) {\r\n              this.sendErrorRequest(413, \"Upload too large\", req, res);\r\n              req.destroy();\r\n              return;\r\n            }\r\n            body.push(Buffer.from(chunk, \"binary\"));\r\n          });\r\n          req.on(\"end\", async () => {\r\n            if (body.length >= 1) {\r\n              const bodyContent = Buffer.concat(body);\r\n\r\n              if (!this.creatorTools) {\r\n                this.sendErrorRequest(500, \"Unexpected configuration.\", req, res);\r\n                return;\r\n              }\r\n\r\n              const zipStorage = new ZipStorage();\r\n\r\n              const contentUint = new Uint8Array(bodyContent);\r\n\r\n              Log.message(\r\n                HttpUtilities.getShortReqDescription(req) + \"Received package of \" + contentUint.length + \" bytes\"\r\n              );\r\n\r\n              try {\r\n                await zipStorage.loadFromUint8Array(contentUint);\r\n              } catch (e) {\r\n                this.sendErrorRequest(400, \"Error processing passed-in validation package.\", req, res);\r\n                return;\r\n              }\r\n\r\n              if (!res.headersSent) {\r\n                res.writeHead(200, corsHeaders);\r\n              }\r\n\r\n              try {\r\n                const packProject = new Project(this.creatorTools, \"Test\", null);\r\n                packProject.setProjectFolder(zipStorage.rootFolder);\r\n\r\n                await packProject.inferProjectItemsFromFiles();\r\n\r\n                let suiteInst: ProjectInfoSuite = ProjectInfoSuite.defaultInDevelopment;\r\n                let excludeTests: string[] = [];\r\n\r\n                if (req.headers[\"mctsuite\"] && typeof req.headers[\"mctsuite\"] == \"string\") {\r\n                  suiteInst = ProjectInfoSet.getSuiteFromString(req.headers[\"mctsuite\"]);\r\n                }\r\n\r\n                if (req.headers[\"mctexcludeTests\"] && typeof req.headers[\"mctexcludeTests\"] == \"string\") {\r\n                  excludeTests = req.headers[\"mctexcludeTests\"].split(\",\");\r\n                }\r\n\r\n                // Server-side context: enable aggressive cleanup for memory efficiency\r\n                const pis = new ProjectInfoSet(packProject, suiteInst, excludeTests, undefined, undefined, undefined);\r\n\r\n                await pis.generateForProject();\r\n\r\n                let subsetReports: IProjectMetaState[] = [];\r\n\r\n                if (req.headers[\"mctsuite\"] === \"all\") {\r\n                  subsetReports = await ProjectInfoUtilities.getDerivedStates(packProject, pis);\r\n                }\r\n\r\n                // Use consistent stringify for platform-agnostic JSON key ordering\r\n                const result = Utilities.consistentStringify(\r\n                  pis.getDataObject(undefined, undefined, undefined, false, subsetReports)\r\n                );\r\n\r\n                res.write(result, () => {\r\n                  res.end();\r\n\r\n                  if (this._serverManager.runOnce) {\r\n                    this._serverManager.shutdown(\r\n                      \"Shutting down due to completion of one validation operation in runOnce mode.\"\r\n                    );\r\n                  }\r\n                });\r\n              } catch (e: any) {\r\n                this.sendErrorRequest(500, \"Error processing request. \" + (e.message || e.toString()), req, res);\r\n                return;\r\n              }\r\n\r\n              return;\r\n            } else {\r\n              this.sendErrorRequest(400, \"Unexpected post type: \" + body.length, req, res);\r\n              return;\r\n            }\r\n          });\r\n\r\n          return;\r\n        }\r\n\r\n        let portOrSlot = -1;\r\n\r\n        try {\r\n          portOrSlot = parseInt(urlSegments[2]);\r\n        } catch (e) {}\r\n\r\n        if (isNaN(portOrSlot) || portOrSlot < 0 || portOrSlot > 65536 || portOrSlot === 80 || portOrSlot === 443) {\r\n          this.sendErrorRequest(400, \"Unexpected port or slot specified\", req, res);\r\n          return;\r\n        }\r\n\r\n        // Handle upload operations with lazy server initialization\r\n        // This allows edit/view modes to deploy content without pre-configuring BDS\r\n        if (\r\n          urlSegments[3] === \"upload\" &&\r\n          (req.method === \"POST\" || req.method === \"PATCH\") &&\r\n          req.headers[\"content-type\"] === \"application/zip\"\r\n        ) {\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.admin, req, res)) {\r\n            return;\r\n          }\r\n\r\n          // Handle upload with lazy server initialization\r\n          this.handleUploadWithLazyInit(portOrSlot, req, res, corsHeaders);\r\n          return;\r\n        }\r\n\r\n        const server = this._serverManager.getActiveServer(portOrSlot);\r\n\r\n        if (!server || this._serverManager.features === ServerManagerFeatures.basicWebServices) {\r\n          this.sendErrorRequest(404, \"Service at slot \" + portOrSlot + \" not found\", req, res);\r\n\r\n          return;\r\n        }\r\n\r\n        // urlSegments[3] may contain query string, e.g., \"status?slotconfig=true\"\r\n        const actionSegment = urlSegments[3]?.split(\"?\")[0];\r\n\r\n        if (actionSegment === \"status\" && req.method === \"GET\") {\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.displayReadOnly, req, res)) {\r\n            return;\r\n          }\r\n\r\n          const status = this.getStatus(portOrSlot);\r\n\r\n          // Use verbose logging for status polling to reduce log spam\r\n          Log.verbose(HttpUtilities.getShortReqDescription(req));\r\n\r\n          res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n\r\n          res.end(JSON.stringify(status));\r\n          return;\r\n        } else if (actionSegment === \"updateStatus\" && req.method === \"POST\") {\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n            return;\r\n          }\r\n\r\n          const body: any[] = [];\r\n          let totalSize = 0;\r\n          const MAX_UPDATE_SIZE = 100000; // 100KB limit for status updates\r\n          req.on(\"data\", (chunk) => {\r\n            totalSize += chunk.length;\r\n            // Security: Limit update body size\r\n            if (totalSize > MAX_UPDATE_SIZE) {\r\n              this.sendErrorRequest(413, \"Update request too large\", req, res);\r\n              req.destroy();\r\n              return;\r\n            }\r\n            body.push(chunk);\r\n          });\r\n\r\n          req.on(\"end\", () => {\r\n            if (body.length === 1) {\r\n              const val = body[0].toString();\r\n\r\n              let updates: any | undefined;\r\n\r\n              try {\r\n                updates = JSON.parse(val);\r\n              } catch (e) {}\r\n\r\n              if (updates && updates.length) {\r\n                const ds = this._serverManager.getActiveServer(portOrSlot);\r\n\r\n                if (ds) {\r\n                  // pushUpdates expects an array, so pass the entire updates array\r\n                  ds.pushUpdates(updates);\r\n                }\r\n              }\r\n\r\n              res.writeHead(200, this.headers);\r\n              res.end();\r\n              return;\r\n            } else {\r\n              res.writeHead(500, this.headers);\r\n              res.end();\r\n              return;\r\n            }\r\n          });\r\n        } else if (actionSegment === \"stop\" && req.method === \"POST\") {\r\n          // POST /api/{slot}/stop - Stop the server on this slot\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n            return;\r\n          }\r\n\r\n          Log.message(HttpUtilities.getShortReqDescription(req) + \" Stopping server on slot \" + portOrSlot);\r\n\r\n          this.handleSlotStop(server, portOrSlot, req, res, corsHeaders)\r\n            .then(() => {\r\n              // Request handled\r\n            })\r\n            .catch((e) => {\r\n              Log.error(\"Error handling stop request: \" + e.toString());\r\n              if (!res.headersSent) {\r\n                this.sendErrorRequest(500, \"Internal server error\", req, res);\r\n              }\r\n            });\r\n          return;\r\n        } else if (actionSegment === \"restart\" && req.method === \"POST\") {\r\n          // POST /api/{slot}/restart - Restart the server on this slot\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n            return;\r\n          }\r\n\r\n          Log.message(HttpUtilities.getShortReqDescription(req) + \" Restarting server on slot \" + portOrSlot);\r\n\r\n          this.handleSlotRestart(server, portOrSlot, req, res, corsHeaders)\r\n            .then(() => {\r\n              // Request handled\r\n            })\r\n            .catch((e) => {\r\n              Log.error(\"Error handling restart request: \" + e.toString());\r\n              if (!res.headersSent) {\r\n                this.sendErrorRequest(500, \"Internal server error\", req, res);\r\n              }\r\n            });\r\n          return;\r\n        } else if (actionSegment === \"command\" && req.method === \"POST\") {\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n            return;\r\n          }\r\n\r\n          const body: any[] = [];\r\n          let totalSize = 0;\r\n          req.on(\"data\", (chunk) => {\r\n            totalSize += chunk.length;\r\n            if (totalSize > 10_000) {\r\n              // Security: 10KB limit for commands\r\n              this.sendErrorRequest(413, \"Command too large\", req, res);\r\n              req.destroy();\r\n              return;\r\n            }\r\n            body.push(chunk);\r\n          });\r\n\r\n          req.on(\"end\", () => {\r\n            if (body.length === 1) {\r\n              const val = body[0].toString();\r\n              // Security: Sanitize and validate command\r\n              const sanitizedCommand = SecurityUtilities.sanitizeCommand(val);\r\n              if (!SecurityUtilities.isCommandSafe(sanitizedCommand)) {\r\n                this.sendErrorRequest(400, \"Invalid command\", req, res);\r\n                return;\r\n              }\r\n              server.runCommand(sanitizedCommand);\r\n              res.writeHead(200, corsHeaders);\r\n              res.end();\r\n              return;\r\n            } else {\r\n              res.writeHead(500, corsHeaders);\r\n              res.end();\r\n              return;\r\n            }\r\n          });\r\n\r\n          return;\r\n        } else if (actionSegment === \"debug\" && req.method === \"POST\") {\r\n          // POST /api/{slot}/debug/{action} - Debug controls\r\n          if (!this.hasPermissionLevel(authorizedPermissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n            return;\r\n          }\r\n\r\n          const debugAction = urlSegments[4]?.split(\"?\")[0];\r\n          const debugClient = server.debugClient;\r\n\r\n          if (!debugClient) {\r\n            this.sendErrorRequest(400, \"Debug client not available\", req, res);\r\n            return;\r\n          }\r\n\r\n          if (debugAction === \"pause\") {\r\n            Log.verbose(HttpUtilities.getShortReqDescription(req) + \" Pausing debugger on slot \" + portOrSlot);\r\n            debugClient.pause();\r\n            res.writeHead(200, corsHeaders);\r\n            res.end(JSON.stringify({ success: true }));\r\n            return;\r\n          } else if (debugAction === \"resume\") {\r\n            Log.verbose(HttpUtilities.getShortReqDescription(req) + \" Resuming debugger on slot \" + portOrSlot);\r\n            debugClient.resume();\r\n            res.writeHead(200, corsHeaders);\r\n            res.end(JSON.stringify({ success: true }));\r\n            return;\r\n          } else if (debugAction === \"profiler\") {\r\n            const profilerAction = urlSegments[5]?.split(\"?\")[0];\r\n\r\n            if (profilerAction === \"start\") {\r\n              Log.message(HttpUtilities.getShortReqDescription(req) + \" Starting profiler on slot \" + portOrSlot);\r\n              try {\r\n                debugClient.startProfiler();\r\n                res.writeHead(200, corsHeaders);\r\n                res.end(JSON.stringify({ success: true }));\r\n              } catch (e: any) {\r\n                this.sendErrorRequest(400, e.message || \"Failed to start profiler\", req, res);\r\n              }\r\n              return;\r\n            } else if (profilerAction === \"stop\") {\r\n              Log.message(HttpUtilities.getShortReqDescription(req) + \" Stopping profiler on slot \" + portOrSlot);\r\n              try {\r\n                // Use a default captures path in the Minecraft data directory\r\n                const capturesPath = \"script_profiles\";\r\n                debugClient.stopProfiler(capturesPath);\r\n                res.writeHead(200, corsHeaders);\r\n                res.end(JSON.stringify({ success: true, capturesPath }));\r\n              } catch (e: any) {\r\n                this.sendErrorRequest(400, e.message || \"Failed to stop profiler\", req, res);\r\n              }\r\n              return;\r\n            }\r\n          }\r\n\r\n          this.sendErrorRequest(400, \"Unknown debug action: \" + debugAction, req, res);\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    res.writeHead(500, corsHeaders);\r\n    res.end();\r\n  }\r\n\r\n  getStatus(portOrSlot: number, includeConfig: boolean = true): CartoServerStatusResponse {\r\n    const ds = this._serverManager.getActiveServer(portOrSlot);\r\n    const recentMessages = [];\r\n\r\n    if (ds) {\r\n      let lastIndex = ds.outputLines.length;\r\n\r\n      while (lastIndex >= 1 && recentMessages.length < 10) {\r\n        lastIndex--;\r\n\r\n        // Skip internal system messages (e.g., querytarget polling output)\r\n        if (!ds.outputLines[lastIndex].isInternal) {\r\n          recentMessages.push(ds.outputLines[lastIndex]);\r\n        }\r\n      }\r\n\r\n      const result: CartoServerStatusResponse = {\r\n        id: portOrSlot,\r\n        status: ds.status,\r\n        recentMessages: recentMessages,\r\n        time: new Date().getTime(),\r\n        worldId: ds.managedWorldId,\r\n      };\r\n\r\n      // Include slot config in initial connection responses\r\n      if (includeConfig) {\r\n        // Get debug session info from the debug client\r\n        const debugClient = ds.debugClient;\r\n        const debugSessionInfo = debugClient?.sessionInfo;\r\n\r\n        result.slotConfig = {\r\n          debuggerEnabled: ds.debuggerEnabled,\r\n          debuggerStreamingEnabled: ds.debuggerStreamingEnabled,\r\n          // DebugConnectionState is a string enum, so we can use it directly\r\n          debugConnectionState: debugSessionInfo?.state ?? \"disconnected\",\r\n          debugProtocolVersion: debugSessionInfo?.protocolVersion,\r\n          debugLastStatTick: debugSessionInfo?.lastStatTick,\r\n          debugErrorMessage: debugSessionInfo?.errorMessage,\r\n        };\r\n      }\r\n\r\n      return result;\r\n    } else {\r\n      return {\r\n        id: -1,\r\n        time: new Date().getTime(),\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle requests to /api/content/* for serving local Minecraft content.\r\n   * Generates synthetic index.json files for folders and serves safe file types.\r\n   * In edit mode, also handles PUT (create/update), DELETE, and POST (mkdir) operations.\r\n   */\r\n  private async handleContentRequest(\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string },\r\n    permissionLevel?: ServerPermissionLevel\r\n  ) {\r\n    if (!this._contentStorage || !this._contentPath || !req.url) {\r\n      this.sendErrorRequest(500, \"Content storage not configured\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Parse the relative path from the URL\r\n    // URL format: /api/content/path/to/file or /api/content/path/to/folder/index.json\r\n    const urlPath = decodeURIComponent(req.url.split(\"?\")[0]);\r\n    let relativePath = urlPath.replace(/^\\/api\\/content\\/?/, \"\");\r\n\r\n    // Security: Validate path for traversal attacks\r\n    if (!SecurityUtilities.validatePathTraversal(\"/\" + relativePath)) {\r\n      this.sendErrorRequest(400, \"Invalid path\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Security: Check each path segment for hidden/blocked folders\r\n    const pathSegments = relativePath.split(\"/\").filter((s) => s.length > 0);\r\n    for (const segment of pathSegments) {\r\n      if (!this.isFolderSafeToServe(segment) && pathSegments.indexOf(segment) < pathSegments.length - 1) {\r\n        // It's a folder segment (not the last segment which could be a file)\r\n        this.sendErrorRequest(403, \"Access to this folder is not allowed\", req, res);\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Handle write operations (PUT, DELETE, POST) in edit mode\r\n    if (req.method === \"PUT\") {\r\n      await this.handleContentPut(relativePath, req, res, corsHeaders);\r\n      return;\r\n    }\r\n\r\n    if (req.method === \"DELETE\") {\r\n      await this.handleContentDelete(relativePath, req, res, corsHeaders);\r\n      return;\r\n    }\r\n\r\n    if (req.method === \"POST\") {\r\n      await this.handleContentPost(relativePath, req, res, corsHeaders);\r\n      return;\r\n    }\r\n\r\n    // Handle GET requests\r\n    // Check if this is a request for index.json (folder listing)\r\n    if (relativePath.endsWith(\"/index.json\") || relativePath === \"index.json\" || relativePath === \"\") {\r\n      // Handle folder listing request\r\n      let folderPath = relativePath.replace(/\\/?index\\.json$/, \"\");\r\n      if (folderPath === \"\") {\r\n        folderPath = \"/\";\r\n      } else if (!folderPath.startsWith(\"/\")) {\r\n        folderPath = \"/\" + folderPath;\r\n      }\r\n\r\n      await this.serveContentFolderListing(folderPath, req, res, corsHeaders);\r\n      return;\r\n    }\r\n\r\n    // Handle file request\r\n    await this.serveContentFile(relativePath, req, res, corsHeaders);\r\n  }\r\n\r\n  /**\r\n   * Generate and serve a synthetic index.json for a folder.\r\n   */\r\n  private async serveContentFolderListing(\r\n    relativeFolderPath: string,\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string }\r\n  ) {\r\n    if (!this._contentStorage) {\r\n      this.sendErrorRequest(500, \"Content storage not configured\", req, res);\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Get the folder from storage\r\n      let folder = this._contentStorage.rootFolder;\r\n\r\n      if (relativeFolderPath !== \"/\" && relativeFolderPath !== \"\") {\r\n        const pathParts = relativeFolderPath.split(\"/\").filter((p) => p.length > 0);\r\n        for (const part of pathParts) {\r\n          if (!this.isFolderSafeToServe(part)) {\r\n            this.sendErrorRequest(403, \"Access to this folder is not allowed\", req, res);\r\n            return;\r\n          }\r\n          folder = folder.ensureFolder(part);\r\n        }\r\n      }\r\n\r\n      // Load the folder contents\r\n      await folder.load();\r\n\r\n      // Build the index.json response\r\n      const files: string[] = [];\r\n      const folders: string[] = [];\r\n\r\n      // Add subfolders (filter out hidden/blocked folders)\r\n      for (const folderName in folder.folders) {\r\n        const subFolder = folder.folders[folderName];\r\n        if (subFolder && this.isFolderSafeToServe(subFolder.name)) {\r\n          folders.push(subFolder.name);\r\n        }\r\n      }\r\n\r\n      // Add files (filter by safe extensions and blocked names)\r\n      for (const fileName in folder.files) {\r\n        const file = folder.files[fileName];\r\n        if (file && this.isFileSafeToServe(file.name)) {\r\n          files.push(file.name);\r\n        }\r\n      }\r\n\r\n      // Sort alphabetically\r\n      files.sort();\r\n      folders.sort();\r\n\r\n      const indexJson = {\r\n        files: files,\r\n        folders: folders,\r\n      };\r\n\r\n      res.writeHead(200, {\r\n        ...corsHeaders,\r\n        \"Content-Type\": \"application/json\",\r\n      });\r\n      res.end(JSON.stringify(indexJson));\r\n    } catch (e: any) {\r\n      Log.debug(\"Error serving content folder listing: \" + e.message);\r\n      this.sendErrorRequest(404, \"Folder not found\", req, res);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Serve a file from the content storage.\r\n   */\r\n  private async serveContentFile(\r\n    relativePath: string,\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string }\r\n  ) {\r\n    if (!this._contentStorage) {\r\n      this.sendErrorRequest(500, \"Content storage not configured\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Get the file name and check if it's safe to serve\r\n    const fileName = relativePath.split(\"/\").pop() || \"\";\r\n    if (!this.isFileSafeToServe(fileName)) {\r\n      this.sendErrorRequest(403, \"This file type is not allowed\", req, res);\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Navigate to the file\r\n      const pathParts = relativePath.split(\"/\").filter((p) => p.length > 0);\r\n      let folder = this._contentStorage.rootFolder;\r\n\r\n      // Navigate to parent folder\r\n      for (let i = 0; i < pathParts.length - 1; i++) {\r\n        const part = pathParts[i];\r\n        if (!this.isFolderSafeToServe(part)) {\r\n          this.sendErrorRequest(403, \"Access to this folder is not allowed\", req, res);\r\n          return;\r\n        }\r\n        folder = folder.ensureFolder(part);\r\n      }\r\n\r\n      const file = folder.ensureFile(fileName);\r\n\r\n      // Check if file exists\r\n      const exists = await file.exists();\r\n      if (!exists) {\r\n        this.sendErrorRequest(404, \"File not found\", req, res);\r\n        return;\r\n      }\r\n\r\n      // Load file content\r\n      await file.loadContent(false);\r\n\r\n      if (file.content === null || file.content === undefined) {\r\n        this.sendErrorRequest(404, \"File content not found\", req, res);\r\n        return;\r\n      }\r\n\r\n      // Determine MIME type\r\n      const mimeType = this.getMimeTypeForFile(file.type) || \"application/octet-stream\";\r\n\r\n      res.writeHead(200, {\r\n        ...corsHeaders,\r\n        \"Content-Type\": mimeType,\r\n      });\r\n\r\n      if (typeof file.content === \"string\") {\r\n        res.end(file.content);\r\n      } else {\r\n        res.end(file.content);\r\n      }\r\n    } catch (e: any) {\r\n      Log.debug(\"Error serving content file: \" + e.message);\r\n      this.sendErrorRequest(404, \"File not found\", req, res);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle requests to /api/worldContent/{slot}/* for serving dedicated server world content.\r\n   * This endpoint exposes a virtualized view of the server's content folders:\r\n   * - /api/worldContent/{slot}/behavior_packs/ -> development_behavior_packs\r\n   * - /api/worldContent/{slot}/resource_packs/ -> development_resource_packs\r\n   * - /api/worldContent/{slot}/world/ -> worlds/defaultWorld\r\n   *\r\n   * The slot parameter is the port number of the dedicated server.\r\n   */\r\n  private async handleWorldContentRequest(\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string },\r\n    urlSegments: string[]\r\n  ) {\r\n    if (!req.url) {\r\n      this.sendErrorRequest(400, \"Invalid request\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Parse slot from urlSegments[3]: /api/worldContent/{slot}/...\r\n    if (urlSegments.length < 4) {\r\n      this.sendErrorRequest(400, \"Missing server slot in URL\", req, res);\r\n      return;\r\n    }\r\n\r\n    let slot = -1;\r\n    try {\r\n      slot = parseInt(urlSegments[3]);\r\n    } catch (e) {\r\n      this.sendErrorRequest(400, \"Invalid server slot\", req, res);\r\n      return;\r\n    }\r\n\r\n    if (slot < 0 || slot > 65536) {\r\n      this.sendErrorRequest(400, \"Invalid server slot range\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Get the dedicated server for this slot\r\n    const server = this._serverManager.getActiveServer(slot);\r\n    if (!server) {\r\n      this.sendErrorRequest(404, \"No active server at slot \" + slot, req, res);\r\n      return;\r\n    }\r\n\r\n    // Parse the content category and path\r\n    // URL format: /api/worldContent/{slot}/{category}/{path...}\r\n    // Categories: behavior_packs, resource_packs, world\r\n    const category = urlSegments[4];\r\n    const remainingPath = urlSegments.slice(5).join(\"/\");\r\n\r\n    // Handle root listing (list available categories)\r\n    if (!category || category === \"\" || category === \"index.json\") {\r\n      this.serveWorldContentRootListing(res, corsHeaders, slot);\r\n      return;\r\n    }\r\n\r\n    // Map category to server folder\r\n    let serverFolder: IFolder | undefined;\r\n    switch (category) {\r\n      case \"behavior_packs\":\r\n        await server.ensureServerFolders();\r\n        serverFolder = (server as any).behaviorPacksStorage?.rootFolder;\r\n        if (!serverFolder) {\r\n          // Create storage if not yet initialized\r\n          const bpStorage = new NodeStorage(\r\n            NodeStorage.ensureEndsWithDelimiter(server.serverPath) + \"development_behavior_packs\",\r\n            \"\"\r\n          );\r\n          serverFolder = bpStorage.rootFolder;\r\n        }\r\n        break;\r\n      case \"resource_packs\":\r\n        await server.ensureServerFolders();\r\n        serverFolder = (server as any).resourcePacksStorage?.rootFolder;\r\n        if (!serverFolder) {\r\n          const rpStorage = new NodeStorage(\r\n            NodeStorage.ensureEndsWithDelimiter(server.serverPath) + \"development_resource_packs\",\r\n            \"\"\r\n          );\r\n          serverFolder = rpStorage.rootFolder;\r\n        }\r\n        break;\r\n      case \"world\":\r\n        await server.ensureServerFolders();\r\n        serverFolder = server.defaultWorldFolder;\r\n        if (!serverFolder) {\r\n          const worldStorage = new NodeStorage(server.worldStoragePath, \"\");\r\n          serverFolder = worldStorage.rootFolder;\r\n        }\r\n        break;\r\n      default:\r\n        this.sendErrorRequest(404, \"Unknown content category: \" + category, req, res);\r\n        return;\r\n    }\r\n\r\n    if (!serverFolder) {\r\n      this.sendErrorRequest(500, \"Could not access server folder\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Handle folder listing or file serving\r\n    const isIndexRequest =\r\n      remainingPath === \"\" ||\r\n      remainingPath === \"index.json\" ||\r\n      remainingPath.endsWith(\"/index.json\") ||\r\n      remainingPath.endsWith(\"/\");\r\n\r\n    if (isIndexRequest) {\r\n      await this.serveWorldContentFolderListing(serverFolder, remainingPath, res, corsHeaders);\r\n    } else {\r\n      await this.serveWorldContentFile(serverFolder, remainingPath, req, res, corsHeaders);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Serve the root listing of world content categories.\r\n   */\r\n  private serveWorldContentRootListing(res: http.ServerResponse, corsHeaders: { [key: string]: string }, slot: number) {\r\n    const listing = {\r\n      folders: [\"behavior_packs\", \"resource_packs\", \"world\"],\r\n      files: [] as string[],\r\n      slot: slot,\r\n    };\r\n\r\n    res.writeHead(200, {\r\n      ...corsHeaders,\r\n      \"Content-Type\": \"application/json\",\r\n    });\r\n    res.end(JSON.stringify(listing));\r\n  }\r\n\r\n  /**\r\n   * Serve a folder listing for world content.\r\n   */\r\n  private async serveWorldContentFolderListing(\r\n    baseFolder: IFolder,\r\n    relativePath: string,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string }\r\n  ) {\r\n    try {\r\n      // Clean up path\r\n      let cleanPath = relativePath.replace(/\\/?index\\.json$/, \"\").replace(/\\/$/, \"\");\r\n\r\n      // Navigate to the target folder\r\n      let folder = baseFolder;\r\n      if (cleanPath && cleanPath.length > 0) {\r\n        const pathParts = cleanPath.split(\"/\").filter((p) => p.length > 0);\r\n        for (const part of pathParts) {\r\n          // Security check\r\n          if (!this.isFolderSafeToServe(part)) {\r\n            res.writeHead(403, corsHeaders);\r\n            res.end(JSON.stringify({ error: \"Access denied\" }));\r\n            return;\r\n          }\r\n          folder = folder.ensureFolder(part);\r\n        }\r\n      }\r\n\r\n      await folder.load(true); // Force reload to get fresh file list from disk\r\n\r\n      // Build listing\r\n      const folderNames: string[] = [];\r\n      const fileNames: string[] = [];\r\n\r\n      for (const subFolderName in folder.folders) {\r\n        const subFolder = folder.folders[subFolderName];\r\n        if (subFolder && this.isFolderSafeToServe(subFolderName)) {\r\n          folderNames.push(subFolderName);\r\n        }\r\n      }\r\n\r\n      for (const fileName in folder.files) {\r\n        const file = folder.files[fileName];\r\n        if (file && this.isFileSafeToServe(fileName)) {\r\n          fileNames.push(fileName);\r\n        }\r\n      }\r\n\r\n      const listing = {\r\n        folders: folderNames,\r\n        files: fileNames,\r\n      };\r\n\r\n      res.writeHead(200, {\r\n        ...corsHeaders,\r\n        \"Content-Type\": \"application/json\",\r\n      });\r\n      res.end(JSON.stringify(listing));\r\n    } catch (e: any) {\r\n      Log.debug(\"Error serving world content folder listing: \" + e.message);\r\n      res.writeHead(404, corsHeaders);\r\n      res.end(JSON.stringify({ error: \"Folder not found\" }));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Serve a file from world content.\r\n   */\r\n  private async serveWorldContentFile(\r\n    baseFolder: IFolder,\r\n    relativePath: string,\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string }\r\n  ) {\r\n    const pathParts = relativePath.split(\"/\").filter((p) => p.length > 0);\r\n    if (pathParts.length === 0) {\r\n      this.sendErrorRequest(400, \"Invalid file path\", req, res);\r\n      return;\r\n    }\r\n\r\n    const fileName = pathParts[pathParts.length - 1];\r\n\r\n    // Security checks\r\n    if (!this.isFileSafeToServe(fileName)) {\r\n      this.sendErrorRequest(403, \"This file type is not allowed\", req, res);\r\n      return;\r\n    }\r\n\r\n    try {\r\n      let folder = baseFolder;\r\n\r\n      // Navigate to parent folder\r\n      for (let i = 0; i < pathParts.length - 1; i++) {\r\n        const part = pathParts[i];\r\n        if (!this.isFolderSafeToServe(part)) {\r\n          this.sendErrorRequest(403, \"Access to this folder is not allowed\", req, res);\r\n          return;\r\n        }\r\n        folder = folder.ensureFolder(part);\r\n      }\r\n\r\n      const file = folder.ensureFile(fileName);\r\n\r\n      const exists = await file.exists();\r\n      if (!exists) {\r\n        this.sendErrorRequest(404, \"File not found\", req, res);\r\n        return;\r\n      }\r\n\r\n      await file.loadContent(false);\r\n\r\n      if (file.content === null || file.content === undefined) {\r\n        this.sendErrorRequest(404, \"File content not found\", req, res);\r\n        return;\r\n      }\r\n\r\n      const mimeType = this.getMimeTypeForFile(file.type) || \"application/octet-stream\";\r\n\r\n      res.writeHead(200, {\r\n        ...corsHeaders,\r\n        \"Content-Type\": mimeType,\r\n      });\r\n\r\n      if (typeof file.content === \"string\") {\r\n        res.end(file.content);\r\n      } else {\r\n        res.end(file.content);\r\n      }\r\n    } catch (e: any) {\r\n      Log.debug(\"Error serving world content file: \" + e.message);\r\n      this.sendErrorRequest(404, \"File not found\", req, res);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle PUT requests to /api/content/* for creating or updating files.\r\n   * Requires edit mode and updateState permission.\r\n   */\r\n  private async handleContentPut(\r\n    relativePath: string,\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string }\r\n  ) {\r\n    if (!this._contentStorage) {\r\n      this.sendErrorRequest(500, \"Content storage not configured\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Get the file name and check if it's safe to write\r\n    const fileName = relativePath.split(\"/\").pop() || \"\";\r\n    if (!this.isFileSafeToServe(fileName)) {\r\n      this.sendErrorRequest(403, \"This file type is not allowed for writing\", req, res);\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Read the request body\r\n      const body = await this.readRequestBody(req);\r\n\r\n      // Navigate to the file\r\n      const pathParts = relativePath.split(\"/\").filter((p) => p.length > 0);\r\n      let folder = this._contentStorage.rootFolder;\r\n\r\n      // Navigate to parent folder (create if needed)\r\n      for (let i = 0; i < pathParts.length - 1; i++) {\r\n        const part = pathParts[i];\r\n        if (!this.isFolderSafeToServe(part)) {\r\n          this.sendErrorRequest(403, \"Access to this folder is not allowed\", req, res);\r\n          return;\r\n        }\r\n        folder = folder.ensureFolder(part);\r\n      }\r\n\r\n      const file = folder.ensureFile(fileName);\r\n\r\n      // Set file content based on content type\r\n      const contentType = req.headers[\"content-type\"] || \"\";\r\n      if (\r\n        contentType.includes(\"application/json\") ||\r\n        contentType.includes(\"text/\") ||\r\n        fileName.endsWith(\".json\") ||\r\n        fileName.endsWith(\".ts\") ||\r\n        fileName.endsWith(\".js\") ||\r\n        fileName.endsWith(\".mcfunction\") ||\r\n        fileName.endsWith(\".lang\") ||\r\n        fileName.endsWith(\".txt\") ||\r\n        fileName.endsWith(\".md\") ||\r\n        fileName.endsWith(\".html\")\r\n      ) {\r\n        // Text content\r\n        file.setContent(body.toString(\"utf8\"));\r\n      } else {\r\n        // Binary content\r\n        file.setContent(body);\r\n      }\r\n\r\n      // Save the file\r\n      await file.saveContent();\r\n\r\n      res.writeHead(200, {\r\n        ...corsHeaders,\r\n        \"Content-Type\": \"application/json\",\r\n      });\r\n      res.end(JSON.stringify({ success: true, path: relativePath }));\r\n\r\n      Log.verbose(\"Content file saved: \" + relativePath);\r\n    } catch (e: any) {\r\n      Log.debug(\"Error writing content file: \" + e.message);\r\n      this.sendErrorRequest(500, \"Failed to write file: \" + e.message, req, res);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle DELETE requests to /api/content/* for deleting files.\r\n   * Requires edit mode and updateState permission.\r\n   */\r\n  private async handleContentDelete(\r\n    relativePath: string,\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string }\r\n  ) {\r\n    if (!this._contentStorage) {\r\n      this.sendErrorRequest(500, \"Content storage not configured\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Get the file name and check if it's safe to delete\r\n    const fileName = relativePath.split(\"/\").pop() || \"\";\r\n    if (!this.isFileSafeToServe(fileName)) {\r\n      this.sendErrorRequest(403, \"This file type is not allowed for deletion\", req, res);\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Navigate to the file\r\n      const pathParts = relativePath.split(\"/\").filter((p) => p.length > 0);\r\n      let folder = this._contentStorage.rootFolder;\r\n\r\n      // Navigate to parent folder\r\n      for (let i = 0; i < pathParts.length - 1; i++) {\r\n        const part = pathParts[i];\r\n        if (!this.isFolderSafeToServe(part)) {\r\n          this.sendErrorRequest(403, \"Access to this folder is not allowed\", req, res);\r\n          return;\r\n        }\r\n        folder = folder.ensureFolder(part);\r\n      }\r\n\r\n      await folder.load();\r\n\r\n      const file = folder.files[fileName];\r\n      if (!file) {\r\n        this.sendErrorRequest(404, \"File not found\", req, res);\r\n        return;\r\n      }\r\n\r\n      // Delete the file\r\n      await file.deleteThisFile();\r\n\r\n      res.writeHead(200, {\r\n        ...corsHeaders,\r\n        \"Content-Type\": \"application/json\",\r\n      });\r\n      res.end(JSON.stringify({ success: true, path: relativePath, deleted: true }));\r\n\r\n      Log.verbose(\"Content file deleted: \" + relativePath);\r\n    } catch (e: any) {\r\n      Log.debug(\"Error deleting content file: \" + e.message);\r\n      this.sendErrorRequest(500, \"Failed to delete file: \" + e.message, req, res);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle POST requests to /api/content/* for creating directories or other actions.\r\n   * Requires edit mode and updateState permission.\r\n   */\r\n  private async handleContentPost(\r\n    relativePath: string,\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string }\r\n  ) {\r\n    if (!this._contentStorage) {\r\n      this.sendErrorRequest(500, \"Content storage not configured\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Parse action from query string\r\n    const urlParts = req.url?.split(\"?\") || [];\r\n    const queryString = urlParts.length > 1 ? urlParts[1] : \"\";\r\n    const params = new URLSearchParams(queryString);\r\n    const action = params.get(\"action\");\r\n\r\n    if (action === \"mkdir\") {\r\n      // Create a directory\r\n      try {\r\n        const pathParts = relativePath.split(\"/\").filter((p) => p.length > 0);\r\n        let folder = this._contentStorage.rootFolder;\r\n\r\n        for (const part of pathParts) {\r\n          if (!this.isFolderSafeToServe(part)) {\r\n            this.sendErrorRequest(403, \"This folder name is not allowed\", req, res);\r\n            return;\r\n          }\r\n          folder = folder.ensureFolder(part);\r\n        }\r\n\r\n        // Ensure the folder exists on disk\r\n        await folder.ensureExists();\r\n\r\n        res.writeHead(200, {\r\n          ...corsHeaders,\r\n          \"Content-Type\": \"application/json\",\r\n        });\r\n        res.end(JSON.stringify({ success: true, path: relativePath, created: true }));\r\n\r\n        Log.verbose(\"Content folder created: \" + relativePath);\r\n      } catch (e: any) {\r\n        Log.debug(\"Error creating content folder: \" + e.message);\r\n        this.sendErrorRequest(500, \"Failed to create folder: \" + e.message, req, res);\r\n      }\r\n    } else {\r\n      this.sendErrorRequest(400, \"Unknown or missing action parameter\", req, res);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Read the full request body as a Buffer.\r\n   */\r\n  private readRequestBody(req: http.IncomingMessage): Promise<Buffer> {\r\n    return new Promise((resolve, reject) => {\r\n      const chunks: Buffer[] = [];\r\n      let totalSize = 0;\r\n      const MAX_BODY_SIZE = 50_000_000; // 50MB limit\r\n      req.on(\"data\", (chunk: Buffer) => {\r\n        totalSize += chunk.length;\r\n        if (totalSize > MAX_BODY_SIZE) {\r\n          reject(new Error(\"Request body too large\"));\r\n          req.destroy();\r\n          return;\r\n        }\r\n        chunks.push(chunk);\r\n      });\r\n      req.on(\"end\", () => {\r\n        resolve(Buffer.concat(chunks));\r\n      });\r\n      req.on(\"error\", reject);\r\n    });\r\n  }\r\n\r\n  sendErrorRequest(statusCode: number, message: string, req: http.IncomingMessage, res: http.ServerResponse) {\r\n    Log.message(HttpUtilities.getShortReqDescription(req) + \"Error request: \" + message);\r\n    if (!res.headersSent) {\r\n      const corsHeaders = this.getCorsHeaders(req);\r\n      res.writeHead(statusCode, { ...corsHeaders, \"Content-Type\": \"text/plain\" });\r\n    }\r\n    res.end(message);\r\n\r\n    if (this._serverManager.runOnce) {\r\n      this._serverManager.shutdown(\"Shutting down due to completion of one validation operation in runOnce mode.\");\r\n    }\r\n  }\r\n\r\n  hasPermissionLevel(\r\n    currentPermLevel: ServerPermissionLevel,\r\n    requiredPermissionLevel: ServerPermissionLevel,\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse\r\n  ) {\r\n    if (currentPermLevel < requiredPermissionLevel) {\r\n      Log.message(\r\n        HttpUtilities.getShortReqDescription(req) +\r\n          \"Current permissions (\" +\r\n          +currentPermLevel +\r\n          \") granted, but (\" +\r\n          requiredPermissionLevel +\r\n          \") needed; 401 returned.\"\r\n      );\r\n      const corsHeaders = this.getCorsHeaders(req);\r\n      res.writeHead(401, corsHeaders);\r\n      res.end(\"API call failed due to insufficient permissions (\" + requiredPermissionLevel + \")\");\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async serveContent(baseSegment: string, relativeUrl: string, storage: IStorage, res: http.ServerResponse) {\r\n    // Strip the base segment from the URL, keeping the leading slash\r\n    // e.g., \"res/latest/van\" + \"/res/latest/van/release/...\" \u2192 \"/release/...\"\r\n    relativeUrl = relativeUrl.substring(baseSegment.length + 1);\r\n\r\n    // Ensure the path has a leading slash for getFileFromRelativePath\r\n    if (relativeUrl.length > 0 && relativeUrl[0] !== \"/\") {\r\n      relativeUrl = \"/\" + relativeUrl;\r\n    }\r\n    // Note: Do NOT lowercase the URL - file systems may be case-sensitive (Linux)\r\n    // and Monaco editor files use mixed case (e.g., jsonMode.js)\r\n\r\n    // Security: Validate path to prevent directory traversal attacks\r\n    // Note: We check for traversal patterns but allow leading slashes since\r\n    // the internal storage system expects paths like \"/images/favicon.ico\"\r\n    if (!SecurityUtilities.validatePathTraversal(relativeUrl)) {\r\n      res.writeHead(400, this.headers);\r\n      res.end(\"Invalid path\");\r\n      return;\r\n    }\r\n\r\n    // Sanitize the path as an extra precaution (removes null bytes, normalizes slashes)\r\n    relativeUrl = SecurityUtilities.sanitizeStoragePath(relativeUrl);\r\n\r\n    const file = await storage.rootFolder.getFileFromRelativePath(relativeUrl);\r\n\r\n    if (file === undefined) {\r\n      // Note: req not available here, using default headers\r\n      res.writeHead(404, this.headers);\r\n      res.end(\"Could not find '\" + baseSegment + relativeUrl + \"'\");\r\n      Log.verbose(\"404 Not Found: /\" + baseSegment + relativeUrl);\r\n      return;\r\n    }\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    const mimeType = this.getMimeTypeForFile(file.type);\r\n\r\n    if (!mimeType || !file.content) {\r\n      // Note: req not available here, using default headers\r\n      res.writeHead(404, this.headers);\r\n      res.end(\"Could not find '\" + baseSegment + relativeUrl + \"'\");\r\n      return;\r\n    }\r\n\r\n    // Note: req not available here, using default headers\r\n    res.writeHead(200, {\r\n      ...this.headers,\r\n      \"Content-Type\": mimeType,\r\n    });\r\n\r\n    if (typeof file.content === \"string\") {\r\n      res.end(file.content);\r\n    } else if (file.content instanceof Buffer || file.content instanceof Uint8Array) {\r\n      // Binary content - send as Buffer\r\n      res.end(file.content);\r\n    } else if (file.content) {\r\n      res.end(file.content);\r\n    } else {\r\n      res.end();\r\n    }\r\n  }\r\n\r\n  encrypt(text: string) {\r\n    if (this._localEnvironment.tokenEncryptionKey === undefined) {\r\n      throw new Error(\"Token encryption key is not configured\");\r\n    }\r\n\r\n    // GCM requires 12-byte IV (96 bits) for optimal security\r\n    const iv = crypto.randomBytes(12);\r\n\r\n    const pwHash = this.getPasswordHash();\r\n\r\n    const cipher = crypto.createCipheriv(this._algorithm, pwHash, iv) as crypto.CipherGCM;\r\n\r\n    const encrypted = Buffer.concat([cipher.update(text, \"utf8\"), cipher.final()]);\r\n\r\n    // Get authentication tag (16 bytes for GCM)\r\n    const authTag = cipher.getAuthTag();\r\n\r\n    // Return IV, encrypted content, and auth tag\r\n    return {\r\n      iv: iv.toString(\"hex\"),\r\n      content: encrypted.toString(\"hex\"),\r\n      authTag: authTag.toString(\"hex\"),\r\n    };\r\n  }\r\n\r\n  decrypt(iv: string, content: string, authTag?: string) {\r\n    if (this._localEnvironment.tokenEncryptionKey === undefined) {\r\n      throw new Error(\"Token encryption key is not configured\");\r\n    }\r\n\r\n    const pwHash = this.getPasswordHash();\r\n\r\n    const decipher = crypto.createDecipheriv(this._algorithm, pwHash, Buffer.from(iv, \"hex\")) as crypto.DecipherGCM;\r\n\r\n    // Set auth tag for GCM authentication\r\n    if (authTag) {\r\n      decipher.setAuthTag(Buffer.from(authTag, \"hex\"));\r\n    }\r\n\r\n    try {\r\n      return Buffer.concat([decipher.update(Buffer.from(content, \"hex\")), decipher.final()]).toString(\"utf8\");\r\n    } catch (e) {\r\n      // Authentication failed - this is expected when a cookie from a different server session\r\n      // is sent (cookies are domain-scoped, not port-scoped, so localhost cookies persist\r\n      // across different server sessions on different ports)\r\n      Log.verbose(\r\n        \"Auth cookie decryption failed - likely from a different server session on localhost (cookies are domain-scoped, not port-scoped)\"\r\n      );\r\n      throw new Error(\"Token authentication failed - please refresh the page to re-authenticate\");\r\n    }\r\n  }\r\n\r\n  getMimeTypeForFile(extension: string) {\r\n    switch (extension) {\r\n      case \"json\":\r\n        return \"application/json\";\r\n      case \"png\":\r\n        return \"image/png\";\r\n      case \"jpg\":\r\n        return \"image/jpeg\";\r\n      case \"svg\":\r\n        return \"image/svg+xml\";\r\n      case \"mjs\":\r\n      case \"js\":\r\n        return \"text/javascript\";\r\n      case \"ico\":\r\n        return \"image/x-icon\";\r\n      case \"css\":\r\n        return \"text/css\";\r\n      case \"woff\":\r\n        return \"font/woff\";\r\n      case \"woff2\":\r\n        return \"font/woff2\";\r\n      case \"ttf\":\r\n        return \"font/ttf\";\r\n      case \"zip\":\r\n        return \"application/zip\";\r\n\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Escapes a string for safe inclusion in HTML/JavaScript.\r\n   * Prevents XSS attacks from user-controlled content.\r\n   */\r\n  private escapeForHtml(str: string): string {\r\n    return str\r\n      .replace(/&/g, \"&amp;\")\r\n      .replace(/</g, \"&lt;\")\r\n      .replace(/>/g, \"&gt;\")\r\n      .replace(/\"/g, \"&quot;\")\r\n      .replace(/'/g, \"&#x27;\")\r\n      .replace(/\\//g, \"&#x2F;\");\r\n  }\r\n\r\n  /**\r\n   * Escapes a string for safe inclusion in a JavaScript string literal.\r\n   */\r\n  private escapeForJs(str: string): string {\r\n    return str\r\n      .replace(/\\\\/g, \"\\\\\\\\\")\r\n      .replace(/\"/g, '\\\\\"')\r\n      .replace(/'/g, \"\\\\'\")\r\n      .replace(/\\n/g, \"\\\\n\")\r\n      .replace(/\\r/g, \"\\\\r\")\r\n      .replace(/<\\/script/gi, \"<\\\\/script\");\r\n  }\r\n\r\n  // ==========================================================================\r\n  // UPLOAD WITH LAZY SERVER INITIALIZATION\r\n  // ==========================================================================\r\n\r\n  /**\r\n   * Handle upload requests with lazy server initialization.\r\n   * This allows edit/view modes to deploy content to BDS without requiring\r\n   * the server to be pre-configured on startup.\r\n   *\r\n   * The server will be lazily initialized when the first deploy is attempted.\r\n   */\r\n  private handleUploadWithLazyInit(\r\n    portOrSlot: number,\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string }\r\n  ) {\r\n    const body: any[] = [];\r\n    let totalSize = 0;\r\n\r\n    req.on(\"data\", (chunk) => {\r\n      totalSize += chunk.length;\r\n      // Security: Check size limit\r\n      if (totalSize > SecurityUtilities.MAX_UPLOAD_SIZE) {\r\n        this.sendErrorRequest(413, \"Upload too large\", req, res);\r\n        req.destroy();\r\n        return;\r\n      }\r\n      body.push(chunk);\r\n    });\r\n\r\n    req.on(\"end\", async () => {\r\n      if (body.length < 1) {\r\n        res.writeHead(400, corsHeaders);\r\n        res.end();\r\n        return;\r\n      }\r\n\r\n      const zipStorage = new ZipStorage();\r\n\r\n      // Concatenate all chunks into a single buffer, then convert to Uint8Array\r\n      const concatenatedBuffer = Buffer.concat(body);\r\n      const contentUint = new Uint8Array(concatenatedBuffer);\r\n\r\n      Log.message(\r\n        HttpUtilities.getShortReqDescription(req) + \"Received update package of \" + contentUint.length + \" bytes\"\r\n      );\r\n\r\n      try {\r\n        await zipStorage.loadFromUint8Array(contentUint);\r\n      } catch (e) {\r\n        Log.debug(\"Failed to load zip from upload: \" + e);\r\n        res.writeHead(400, corsHeaders);\r\n        res.end();\r\n        return;\r\n      }\r\n\r\n      // Try to get existing server, or lazily initialize one\r\n      let server: DedicatedServer | undefined = this._serverManager.getActiveServer(portOrSlot);\r\n\r\n      if (!server) {\r\n        // Check if EULA has been accepted first\r\n        if (\r\n          !this._localEnvironment\r\n            .iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula\r\n        ) {\r\n          Log.message(\"EULA not accepted - cannot initialize server for deployment\");\r\n          res.writeHead(451, corsHeaders); // 451 = Unavailable For Legal Reasons\r\n          res.end(\r\n            JSON.stringify({\r\n              error: \"EULA not accepted\",\r\n              code: \"EULA_REQUIRED\",\r\n              message:\r\n                \"You must accept the Minecraft End User License Agreement before deploying to a Bedrock Dedicated Server. Please accept the EULA in the Server Settings panel.\",\r\n              eulaRequired: true,\r\n            })\r\n          );\r\n          return;\r\n        }\r\n\r\n        // Lazy initialization: ensure a server exists for this slot\r\n        Log.message(\"No active server at slot \" + portOrSlot + \", initializing server for deployment...\");\r\n\r\n        try {\r\n          server = await this._serverManager.ensureActiveServer(portOrSlot);\r\n\r\n          if (!server) {\r\n            Log.error(\"Failed to initialize server for deployment at slot \" + portOrSlot);\r\n            res.writeHead(503, corsHeaders);\r\n            res.end(\r\n              JSON.stringify({\r\n                error: \"Server initialization failed\",\r\n                code: \"INIT_FAILED\",\r\n                message:\r\n                  \"Could not initialize Bedrock Dedicated Server. Please check the server logs for more details.\",\r\n              })\r\n            );\r\n            return;\r\n          }\r\n\r\n          Log.message(\"Server initialized successfully at slot \" + portOrSlot);\r\n        } catch (e: any) {\r\n          Log.error(\"Error initializing server for deployment: \" + e.message);\r\n          res.writeHead(503, corsHeaders);\r\n          res.end(\r\n            JSON.stringify({\r\n              error: \"Server initialization error\",\r\n              code: \"INIT_ERROR\",\r\n              message: e.message || \"Failed to initialize server\",\r\n            })\r\n          );\r\n          return;\r\n        }\r\n      }\r\n\r\n      let isReloadable = false;\r\n      if (req.headers[\"mctools-reloadable\"]) {\r\n        isReloadable = true;\r\n      }\r\n\r\n      // TypeScript control flow doesn't track the early returns in nested blocks above,\r\n      // so we need an explicit guard here even though server is guaranteed to be defined\r\n      if (!server) {\r\n        res.writeHead(500, corsHeaders);\r\n        res.end(JSON.stringify({ error: \"Server unexpectedly undefined\" }));\r\n        return;\r\n      }\r\n\r\n      try {\r\n        await server.deploy(zipStorage.rootFolder, req.method === \"PATCH\", isReloadable);\r\n      } catch (e) {\r\n        Log.debug(\"Failed to deploy: \" + e);\r\n        res.writeHead(500, corsHeaders);\r\n        res.end();\r\n        return;\r\n      }\r\n\r\n      res.writeHead(200, corsHeaders);\r\n      res.end();\r\n\r\n      if (this._serverManager.runOnce) {\r\n        this._serverManager.shutdown(\"Shutting down due to completion of one deploy operation in runOnce mode.\");\r\n      }\r\n    });\r\n  }\r\n\r\n  // ==========================================================================\r\n  // SLOT STOP/RESTART HANDLERS\r\n  // ==========================================================================\r\n\r\n  /**\r\n   * Handle POST /api/{slot}/stop - Stop the server on a specific slot.\r\n   */\r\n  private async handleSlotStop(\r\n    server: DedicatedServer,\r\n    slot: number,\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string }\r\n  ) {\r\n    try {\r\n      await server.stopServer();\r\n      res.writeHead(200, corsHeaders);\r\n      res.end(JSON.stringify({ success: true, message: \"Server stopped\" }));\r\n    } catch (e: any) {\r\n      Log.error(\"Failed to stop server on slot \" + slot + \": \" + e.message);\r\n      res.writeHead(500, corsHeaders);\r\n      res.end(JSON.stringify({ success: false, error: e.message }));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle POST /api/{slot}/restart - Restart the server on a specific slot.\r\n   */\r\n  private async handleSlotRestart(\r\n    server: DedicatedServer,\r\n    slot: number,\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string }\r\n  ) {\r\n    try {\r\n      await server.stopServer();\r\n      await server.startServer(false, undefined);\r\n      res.writeHead(200, corsHeaders);\r\n      res.end(JSON.stringify({ success: true, message: \"Server restarted\" }));\r\n    } catch (e: any) {\r\n      Log.error(\"Failed to restart server on slot \" + slot + \": \" + e.message);\r\n      res.writeHead(500, corsHeaders);\r\n      res.end(JSON.stringify({ success: false, error: e.message }));\r\n    }\r\n  }\r\n\r\n  // ==========================================================================\r\n  // WORLD BACKUP MANAGEMENT HANDLERS\r\n  // ==========================================================================\r\n\r\n  /**\r\n   * Handle requests to /api/worlds/* endpoints.\r\n   * Provides CRUD operations for managed worlds and their backups.\r\n   *\r\n   * Endpoints:\r\n   * GET  /api/worlds - List all managed worlds\r\n   * POST /api/worlds - Create a new managed world\r\n   * GET  /api/worlds/{id} - Get world info\r\n   * DELETE /api/worlds/{id} - Delete a world (requires admin)\r\n   * GET  /api/worlds/{id}/backups - List backups for a world\r\n   * POST /api/worlds/{id}/backups - Create a new backup (with source slot)\r\n   * GET  /api/worlds/{id}/backups/{timestamp} - Get backup info\r\n   * DELETE /api/worlds/{id}/backups/{timestamp} - Delete a backup\r\n   * POST /api/worlds/{id}/backups/{timestamp}/restore - Restore backup to slot\r\n   * GET  /api/worlds/{id}/backups/{timestamp}/export - Export as .mcworld\r\n   */\r\n  private async handleWorldsRequest(\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string },\r\n    urlSegments: string[],\r\n    permissionLevel: ServerPermissionLevel\r\n  ): Promise<void> {\r\n    const worldBackupManager = this._serverManager.worldBackupManager;\r\n\r\n    if (!worldBackupManager) {\r\n      Log.error(\"World backup manager not initialized\");\r\n      this.sendErrorRequest(503, \"World backup manager not initialized. Server may still be starting.\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Parse URL: /api/worlds/{worldId?}/backups/{timestamp?}/{action?}\r\n    const worldId = urlSegments[3]; // may be undefined\r\n    const segment4 = urlSegments[4]; // \"backups\" or undefined\r\n    const timestamp = urlSegments[5]; // backup timestamp or undefined\r\n    const action = urlSegments[6]; // \"restore\", \"export\", or undefined\r\n\r\n    Log.debug(`handleWorldsRequest: worldId=${worldId}, segment4=${segment4}, method=${req.method}`);\r\n\r\n    // GET /api/worlds - List all worlds\r\n    if (!worldId && req.method === \"GET\") {\r\n      Log.debug(\"Handling GET /api/worlds - listing all worlds\");\r\n      const worlds = worldBackupManager.managedWorlds;\r\n      const summary = await Promise.all(\r\n        worlds.map(async (w) => {\r\n          await w.loadBackups();\r\n          return w.getSummary();\r\n        })\r\n      );\r\n\r\n      // Also include active worlds from running servers that aren't in the backup manager\r\n      const activeWorlds: any[] = [];\r\n      for (const server of this._serverManager.activeServers) {\r\n        const activeWorldId = server.managedWorldId;\r\n        // If this server's world is already in the managed worlds, skip it\r\n        if (activeWorldId && worlds.find((w) => w.id === activeWorldId)) {\r\n          continue;\r\n        }\r\n\r\n        // Add a synthetic entry for the active world\r\n        const worldName = server.properties?.levelName || \"Default World\";\r\n        activeWorlds.push({\r\n          worldId: activeWorldId || `slot-${server.port}`,\r\n          friendlyName: worldName,\r\n          description: `Active world on slot ${server.port}`,\r\n          createdAt: new Date().toISOString(),\r\n          lastModified: new Date().toISOString(),\r\n          backupCount: 0,\r\n          isActiveWorld: true,\r\n          slotPort: server.port,\r\n        });\r\n      }\r\n\r\n      res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n      res.end(JSON.stringify({ worlds: [...summary, ...activeWorlds] }));\r\n      return;\r\n    }\r\n\r\n    // POST /api/worlds - Create a new world\r\n    if (!worldId && req.method === \"POST\") {\r\n      if (!this.hasPermissionLevel(permissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n        return;\r\n      }\r\n\r\n      const body = await this.readRequestBodyJson(req, res, 4096);\r\n      if (!body) return;\r\n\r\n      const friendlyName = body.friendlyName || body.name || \"New World\";\r\n      const description = body.description;\r\n\r\n      const world = await this._serverManager.createManagedWorld(friendlyName, description);\r\n\r\n      res.writeHead(201, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n      res.end(\r\n        JSON.stringify({\r\n          worldId: world.worldId,\r\n          friendlyName: world.friendlyName,\r\n          description: world.description,\r\n        })\r\n      );\r\n      return;\r\n    }\r\n\r\n    // Validate worldId for all other routes\r\n    if (!worldId || worldId.length === 0) {\r\n      this.sendErrorRequest(400, \"World ID required\", req, res);\r\n      return;\r\n    }\r\n\r\n    const world = worldBackupManager.getWorld(worldId);\r\n\r\n    // Check if this is a synthetic active world ID (e.g., \"slot-19132\")\r\n    const isSyntheticWorldId = worldId.startsWith(\"slot-\");\r\n\r\n    // GET /api/worlds/{id} - Get world info\r\n    if (!segment4 && req.method === \"GET\") {\r\n      if (!world) {\r\n        // For synthetic world IDs, return basic info instead of 404\r\n        if (isSyntheticWorldId) {\r\n          const slotPort = parseInt(worldId.replace(\"slot-\", \"\"), 10);\r\n          const server = this._serverManager.getActiveServer(slotPort);\r\n          if (server) {\r\n            res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n            res.end(\r\n              JSON.stringify({\r\n                worldId,\r\n                friendlyName: server.properties?.levelName || \"Active World\",\r\n                description: `Active world on slot ${slotPort}`,\r\n                createdAt: new Date().toISOString(),\r\n                lastModified: new Date().toISOString(),\r\n                backupCount: 0,\r\n                isActiveWorld: true,\r\n                slotPort,\r\n              })\r\n            );\r\n            return;\r\n          }\r\n        }\r\n        this.sendErrorRequest(404, `World ${worldId} not found`, req, res);\r\n        return;\r\n      }\r\n\r\n      await world.loadBackups();\r\n      res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n      res.end(JSON.stringify(world.getSummary()));\r\n      return;\r\n    }\r\n\r\n    // DELETE /api/worlds/{id} - Delete a world (admin only)\r\n    if (!segment4 && req.method === \"DELETE\") {\r\n      if (!this.hasPermissionLevel(permissionLevel, ServerPermissionLevel.admin, req, res)) {\r\n        return;\r\n      }\r\n\r\n      if (!world) {\r\n        this.sendErrorRequest(404, `World ${worldId} not found`, req, res);\r\n        return;\r\n      }\r\n\r\n      // TODO: Implement world deletion in WorldBackupManager\r\n      this.sendErrorRequest(501, \"World deletion not yet implemented\", req, res);\r\n      return;\r\n    }\r\n\r\n    // Require world to exist for backup operations\r\n    if (segment4 === \"backups\") {\r\n      // For synthetic world IDs (active servers not yet backed up), return empty backups\r\n      if (!world && isSyntheticWorldId) {\r\n        if (!timestamp && req.method === \"GET\") {\r\n          res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n          res.end(JSON.stringify({ backups: [] }));\r\n          return;\r\n        }\r\n        // For other backup operations on synthetic worlds, return error\r\n        this.sendErrorRequest(\r\n          400,\r\n          `Cannot perform backup operations on active world without existing backups`,\r\n          req,\r\n          res\r\n        );\r\n        return;\r\n      }\r\n\r\n      if (!world) {\r\n        this.sendErrorRequest(404, `World ${worldId} not found`, req, res);\r\n        return;\r\n      }\r\n\r\n      await world.loadBackups();\r\n\r\n      // GET /api/worlds/{id}/backups - List backups\r\n      if (!timestamp && req.method === \"GET\") {\r\n        const backups = world.backups.map((b) => ({\r\n          timestamp: b.timestamp,\r\n          type: b.type,\r\n          description: b.description,\r\n          fileCount: b.fileCount,\r\n          totalBytes: b.totalBytes,\r\n          createdAt: new Date(b.timestamp).toISOString(),\r\n        }));\r\n\r\n        res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n        res.end(JSON.stringify({ backups }));\r\n        return;\r\n      }\r\n\r\n      // POST /api/worlds/{id}/backups - Create a backup\r\n      if (!timestamp && req.method === \"POST\") {\r\n        if (!this.hasPermissionLevel(permissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n          return;\r\n        }\r\n\r\n        const body = await this.readRequestBodyJson(req, res, 4096);\r\n        if (!body) return;\r\n\r\n        const slot = typeof body.slot === \"number\" ? body.slot : 0;\r\n        const description = body.description;\r\n\r\n        // Get the server for this slot\r\n        const server = this._serverManager.getActiveServer(slot);\r\n        if (!server || !server.defaultWorldFolder) {\r\n          this.sendErrorRequest(400, `No active server at slot ${slot} with world data`, req, res);\r\n          return;\r\n        }\r\n\r\n        const result = await this._serverManager.createWorldBackup(worldId, server.defaultWorldFolder, {\r\n          notes: description,\r\n          backupType: WorldBackupType.manual,\r\n        });\r\n\r\n        res.writeHead(201, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n        res.end(JSON.stringify(result));\r\n        return;\r\n      }\r\n\r\n      // Timestamp-specific operations\r\n      if (timestamp) {\r\n        const timestampNum = parseInt(timestamp, 10);\r\n        if (isNaN(timestampNum)) {\r\n          this.sendErrorRequest(400, \"Invalid timestamp format\", req, res);\r\n          return;\r\n        }\r\n\r\n        const backup = world.backups.find((b) => b.timestamp === timestampNum);\r\n\r\n        // GET /api/worlds/{id}/backups/{timestamp} - Get backup info\r\n        if (!action && req.method === \"GET\") {\r\n          if (!backup) {\r\n            this.sendErrorRequest(404, `Backup ${timestamp} not found`, req, res);\r\n            return;\r\n          }\r\n\r\n          res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n          res.end(\r\n            JSON.stringify({\r\n              timestamp: backup.timestamp,\r\n              type: backup.type,\r\n              description: backup.description,\r\n              fileCount: backup.fileCount,\r\n              totalBytes: backup.totalBytes,\r\n              createdAt: new Date(backup.timestamp).toISOString(),\r\n            })\r\n          );\r\n          return;\r\n        }\r\n\r\n        // DELETE /api/worlds/{id}/backups/{timestamp} - Delete backup\r\n        if (!action && req.method === \"DELETE\") {\r\n          if (!this.hasPermissionLevel(permissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n            return;\r\n          }\r\n\r\n          await this._serverManager.deleteWorldBackup(worldId, timestampNum);\r\n\r\n          res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n          res.end(JSON.stringify({ success: true, deleted: timestampNum }));\r\n          return;\r\n        }\r\n\r\n        // POST /api/worlds/{id}/backups/{timestamp}/restore - Restore to slot\r\n        if (action === \"restore\" && req.method === \"POST\") {\r\n          if (!this.hasPermissionLevel(permissionLevel, ServerPermissionLevel.updateState, req, res)) {\r\n            return;\r\n          }\r\n\r\n          const body = await this.readRequestBodyJson(req, res, 4096);\r\n          if (!body) return;\r\n\r\n          const slot = typeof body.slot === \"number\" ? body.slot : 0;\r\n          const server = this._serverManager.getActiveServer(slot);\r\n\r\n          if (!server || !server.defaultWorldFolder) {\r\n            this.sendErrorRequest(400, `No active server at slot ${slot} with world folder`, req, res);\r\n            return;\r\n          }\r\n\r\n          await this._serverManager.restoreWorldBackup(worldId, timestampNum, server.defaultWorldFolder);\r\n\r\n          res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n          res.end(JSON.stringify({ success: true, restoredTo: slot }));\r\n          return;\r\n        }\r\n\r\n        // GET /api/worlds/{id}/backups/{timestamp}/export - Export as .mcworld\r\n        if (action === \"export\" && req.method === \"GET\") {\r\n          if (!backup) {\r\n            this.sendErrorRequest(404, `Backup ${timestamp} not found`, req, res);\r\n            return;\r\n          }\r\n\r\n          // Create a temp file path for the export\r\n          const tempDir = require(\"os\").tmpdir();\r\n          const exportPath = require(\"path\").join(\r\n            tempDir,\r\n            `${world.friendlyName.replace(/[^a-zA-Z0-9]/g, \"_\")}_${timestamp}.mcworld`\r\n          );\r\n\r\n          await this._serverManager.exportBackupAsMcWorld(worldId, timestampNum, exportPath);\r\n\r\n          // Read the file and send it\r\n          const fs = require(\"fs\");\r\n          const content = fs.readFileSync(exportPath);\r\n\r\n          res.writeHead(200, {\r\n            ...corsHeaders,\r\n            \"Content-Type\": \"application/octet-stream\",\r\n            \"Content-Disposition\": `attachment; filename=\"${world.friendlyName.replace(\r\n              /[^a-zA-Z0-9]/g,\r\n              \"_\"\r\n            )}_${timestamp}.mcworld\"`,\r\n            \"Content-Length\": content.length,\r\n          });\r\n          res.end(content);\r\n\r\n          // Clean up temp file\r\n          fs.unlinkSync(exportPath);\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    this.sendErrorRequest(404, \"Unknown worlds API endpoint\", req, res);\r\n  }\r\n\r\n  /**\r\n   * Read request body as JSON with size limit and error handling.\r\n   */\r\n  private async readRequestBodyJson(\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    maxSize: number\r\n  ): Promise<any | null> {\r\n    return new Promise((resolve) => {\r\n      let body = \"\";\r\n      let size = 0;\r\n\r\n      req.on(\"data\", (chunk) => {\r\n        size += chunk.length;\r\n        if (size > maxSize) {\r\n          this.sendErrorRequest(413, \"Request body too large\", req, res);\r\n          req.destroy();\r\n          resolve(null);\r\n          return;\r\n        }\r\n        body += chunk;\r\n      });\r\n\r\n      req.on(\"end\", () => {\r\n        try {\r\n          const parsed = JSON.parse(body);\r\n          resolve(parsed);\r\n        } catch (e) {\r\n          this.sendErrorRequest(400, \"Invalid JSON body\", req, res);\r\n          resolve(null);\r\n        }\r\n      });\r\n\r\n      req.on(\"error\", (e) => {\r\n        this.sendErrorRequest(500, \"Error reading request body\", req, res);\r\n        resolve(null);\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Handle /api/commands/* endpoints for invoking ToolCommands via REST API.\r\n   *\r\n   * Endpoints:\r\n   * GET  /api/commands - List available commands\r\n   * POST /api/commands/{commandName} - Execute a command\r\n   *\r\n   * Request body for POST (JSON):\r\n   * {\r\n   *   \"args\": [\"arg1\", \"arg2\"],\r\n   *   \"flags\": { \"session\": \"mySession\", \"traits\": [\"tameable\"] }\r\n   * }\r\n   *\r\n   * Response (JSON):\r\n   * {\r\n   *   \"success\": true/false,\r\n   *   \"message\": \"...\",\r\n   *   \"data\": { ... },\r\n   *   \"error\": { \"code\": \"...\", \"message\": \"...\" }\r\n   * }\r\n   */\r\n  private async handleCommandsRequest(\r\n    req: http.IncomingMessage,\r\n    res: http.ServerResponse,\r\n    corsHeaders: { [key: string]: string },\r\n    urlSegments: string[]\r\n  ): Promise<void> {\r\n    // Initialize ToolCommands if not already done\r\n    initializeToolCommands();\r\n    await registerNodeOnlyCommands();\r\n\r\n    const registry = ToolCommandRegistry.instance;\r\n    const commandName = urlSegments[3]; // e.g., \"script\" from /api/commands/script\r\n\r\n    // GET /api/commands - List available commands\r\n    if (!commandName && req.method === \"GET\") {\r\n      const commands = registry.getAll(ToolCommandScope.serverApi);\r\n      const commandList = commands.map((cmd) => ({\r\n        name: cmd.metadata.name,\r\n        description: cmd.metadata.description,\r\n        category: cmd.metadata.category,\r\n        aliases: cmd.metadata.aliases,\r\n        arguments: cmd.metadata.arguments?.map((a) => ({\r\n          name: a.name,\r\n          description: a.description,\r\n          type: a.type,\r\n          required: a.required,\r\n        })),\r\n        flags: cmd.metadata.flags?.map((f) => ({\r\n          name: f.name,\r\n          shortName: f.shortName,\r\n          description: f.description,\r\n          type: f.type,\r\n          required: f.required,\r\n        })),\r\n        examples: cmd.metadata.examples,\r\n      }));\r\n\r\n      res.writeHead(200, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n      res.end(JSON.stringify({ commands: commandList }));\r\n      return;\r\n    }\r\n\r\n    // POST /api/commands/{commandName} - Execute a command\r\n    if (commandName && req.method === \"POST\") {\r\n      const command = registry.get(commandName);\r\n\r\n      if (!command) {\r\n        this.sendErrorRequest(404, `Command '${commandName}' not found`, req, res);\r\n        return;\r\n      }\r\n\r\n      // Check if command is available in serverApi scope\r\n      const scopes = command.metadata.scopes;\r\n      if (scopes && !scopes.includes(ToolCommandScope.serverApi)) {\r\n        this.sendErrorRequest(403, `Command '${commandName}' is not available via API`, req, res);\r\n        return;\r\n      }\r\n\r\n      // Read request body\r\n      let body = \"\";\r\n      let bodySize = 0;\r\n      const MAX_COMMAND_BODY_SIZE = 100 * 1024; // 100KB limit\r\n\r\n      req.on(\"data\", (chunk) => {\r\n        bodySize += chunk.length;\r\n        if (bodySize > MAX_COMMAND_BODY_SIZE) {\r\n          this.sendErrorRequest(413, \"Request body too large\", req, res);\r\n          req.destroy();\r\n          return;\r\n        }\r\n        body += chunk;\r\n      });\r\n\r\n      req.on(\"end\", async () => {\r\n        try {\r\n          let args: string[] = [];\r\n          let flags: Record<string, string | boolean | string[]> = {};\r\n          let sessionName: string | undefined;\r\n\r\n          if (body) {\r\n            const data = JSON.parse(body);\r\n            args = data.args || [];\r\n            flags = data.flags || {};\r\n            sessionName = data.sessionName || flags.session;\r\n          }\r\n\r\n          // Create output collector\r\n          const messages: string[] = [];\r\n          const output: IToolCommandOutput = {\r\n            info: (msg) => messages.push(msg),\r\n            success: (msg) => messages.push(`\u2713 ${msg}`),\r\n            warn: (msg) => messages.push(`\u26A0 ${msg}`),\r\n            error: (msg) => messages.push(`\u2717 ${msg}`),\r\n            debug: (msg) => messages.push(`  ${msg}`),\r\n            progress: (current, total, msg) => {\r\n              const pct = Math.round((current / total) * 100);\r\n              messages.push(`[${pct}%] ${msg || \"\"}`);\r\n            },\r\n          };\r\n\r\n          // Build context\r\n          if (!this.creatorTools) {\r\n            this.sendErrorRequest(500, \"Server not properly configured\", req, res);\r\n            return;\r\n          }\r\n\r\n          // Note: In serverApi context, we don't have an IMinecraft wrapper for DedicatedServer.\r\n          // Commands that need server access should use context.session.serverManager.getActiveServer()\r\n          const context = ToolCommandContextFactory.createSessionContext(\r\n            this.creatorTools,\r\n            { sessionName: sessionName || \"api\", serverManager: this._serverManager, slot: 0 },\r\n            undefined, // No IMinecraft adapter available in server API context\r\n            output,\r\n            \"serverApi\"\r\n          );\r\n\r\n          // Execute command\r\n          const result = await command.execute(context, args, flags);\r\n\r\n          // Build response\r\n          const response = {\r\n            success: result.success,\r\n            message: result.message,\r\n            data: result.data,\r\n            error: result.error,\r\n            output: messages,\r\n          };\r\n\r\n          res.writeHead(result.success ? 200 : 400, { ...corsHeaders, \"Content-Type\": \"application/json\" });\r\n          res.end(JSON.stringify(response));\r\n        } catch (e: unknown) {\r\n          const message = e instanceof Error ? e.message : String(e);\r\n          Log.error(`Error executing command ${commandName}: ${message}`);\r\n          this.sendErrorRequest(500, `Error executing command: ${message}`, req, res);\r\n        }\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    // Unsupported method\r\n    this.sendErrorRequest(405, \"Method not allowed\", req, res);\r\n  }\r\n\r\n  getMainContent(req: http.IncomingMessage) {\r\n    let title = \"Minecraft Creator Tools\";\r\n\r\n    if (this._localEnvironment.serverTitle) {\r\n      // Security: Escape title to prevent XSS\r\n      title = this.escapeForHtml(this._localEnvironment.serverTitle);\r\n    }\r\n\r\n    // Security: Escape JS strings to prevent XSS\r\n    const serverTitleJs = this._localEnvironment.serverTitle\r\n      ? `g_serverTitle = \"${this.escapeForJs(this._localEnvironment.serverTitle)}\";`\r\n      : \"\";\r\n    const serverMotdJs = this._localEnvironment.serverMessageOfTheDay\r\n      ? `g_serverMotd = \"${this.escapeForJs(this._localEnvironment.serverMessageOfTheDay)}\";`\r\n      : \"\";\r\n\r\n    // Set up content URL and read-only mode if serving local content (view/edit mode)\r\n    let contentUrlJs = \"\";\r\n    let readOnlyJs = \"\";\r\n    let initialModeJs = 'g_initialMode = \"webserver\";';\r\n\r\n    if (this._contentPath) {\r\n      contentUrlJs = `g_contentUrl = \"/api/content/\";`;\r\n      // In edit mode, allow writes; in view mode, force read-only\r\n      if (!this._isEditMode) {\r\n        readOnlyJs = `g_readOnly = true;`;\r\n      }\r\n      initialModeJs = 'g_initialMode = \"project\";';\r\n    }\r\n\r\n    return `<!doctype html>\r\n    <html lang=\"en\">\r\n    <head>\r\n      <meta charset=\"utf-8\"/>\r\n      <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"/>\r\n      <title>${title}</title>\r\n      <link rel=\"stylesheet\" href=\"/app/web.css\">\r\n      <script language='javascript'>\r\n      g_contentRoot= \"/\";\r\n      g_vanillaContentRoot = \"https://mctools.dev/\";\r\n      ${initialModeJs}\r\n      g_baseUrl = location.href;\r\n      ${serverTitleJs}\r\n      ${serverMotdJs}\r\n      ${contentUrlJs}\r\n      ${readOnlyJs}\r\n      </script>\r\n    <script defer=\"true\" src=\"/app/web.js\"></script>\r\n    </head>\r\n      <body>\r\n        <div id=\"root\" translate=\"no\" class=\"notranslate\"></div>\r\n      </body>\r\n    </html>`;\r\n  }\r\n}\r\n", "import createWebSocketStream from './lib/stream.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer };\nexport default WebSocket;\n", "/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        var _a;\n        Object.defineProperty(inst, \"_zod\", {\n            value: inst._zod ?? {},\n            enumerable: false,\n        });\n        (_a = inst._zod).traits ?? (_a.traits = new Set());\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        for (const k in _.prototype) {\n            if (!(k in inst))\n                Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n        }\n        inst._zod.constr = _;\n        inst._zod.def = def;\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n", "// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport function defineLazy(object, key, getter) {\n    const set = false;\n    Object.defineProperty(object, key, {\n        get() {\n            if (!set) {\n                const value = getter();\n                object[key] = value;\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport const captureStackTrace = Error.captureStackTrace\n    ? Error.captureStackTrace\n    : (..._args) => { };\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const newShape = {};\n    const currDef = schema._zod.def; //.shape;\n    for (const key in mask) {\n        if (!(key in currDef.shape)) {\n            throw new Error(`Unrecognized key: \"${key}\"`);\n        }\n        if (!mask[key])\n            continue;\n        // pick key\n        newShape[key] = currDef.shape[key];\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape: newShape,\n        checks: [],\n    });\n}\nexport function omit(schema, mask) {\n    const newShape = { ...schema._zod.def.shape };\n    const currDef = schema._zod.def; //.shape;\n    for (const key in mask) {\n        if (!(key in currDef.shape)) {\n            throw new Error(`Unrecognized key: \"${key}\"`);\n        }\n        if (!mask[key])\n            continue;\n        delete newShape[key];\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape: newShape,\n        checks: [],\n    });\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const def = {\n        ...schema._zod.def,\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: [], // delete existing checks\n    };\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    return clone(a, {\n        ...a._zod.def,\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        catchall: b._zod.def.catchall,\n        checks: [], // delete existing checks\n    });\n}\nexport function partial(Class, schema, mask) {\n    const oldShape = schema._zod.def.shape;\n    const shape = { ...oldShape };\n    if (mask) {\n        for (const key in mask) {\n            if (!(key in oldShape)) {\n                throw new Error(`Unrecognized key: \"${key}\"`);\n            }\n            if (!mask[key])\n                continue;\n            // if (oldShape[key]!._zod.optin === \"optional\") continue;\n            shape[key] = Class\n                ? new Class({\n                    type: \"optional\",\n                    innerType: oldShape[key],\n                })\n                : oldShape[key];\n        }\n    }\n    else {\n        for (const key in oldShape) {\n            // if (oldShape[key]!._zod.optin === \"optional\") continue;\n            shape[key] = Class\n                ? new Class({\n                    type: \"optional\",\n                    innerType: oldShape[key],\n                })\n                : oldShape[key];\n        }\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape,\n        checks: [],\n    });\n}\nexport function required(Class, schema, mask) {\n    const oldShape = schema._zod.def.shape;\n    const shape = { ...oldShape };\n    if (mask) {\n        for (const key in mask) {\n            if (!(key in shape)) {\n                throw new Error(`Unrecognized key: \"${key}\"`);\n            }\n            if (!mask[key])\n                continue;\n            // overwrite with non-optional\n            shape[key] = new Class({\n                type: \"nonoptional\",\n                innerType: oldShape[key],\n            });\n        }\n    }\n    else {\n        for (const key in oldShape) {\n            // overwrite with non-optional\n            shape[key] = new Class({\n                type: \"nonoptional\",\n                innerType: oldShape[key],\n            });\n        }\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape,\n        // optional: [],\n        checks: [],\n    });\n}\nexport function aborted(x, startIndex = 0) {\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true)\n            return true;\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const full = { ...iss, path: iss.path ?? [] };\n    // for backwards compatibility\n    if (!iss.message) {\n        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\";\n        full.message = message;\n    }\n    // delete (full as any).def;\n    delete full.inst;\n    delete full.continue;\n    if (!ctx?.reportInput) {\n        delete full.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n", "import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"message\", {\n        get() {\n            return JSON.stringify(def, util.jsonStringifyReplacer, 2);\n        },\n        enumerable: true,\n        // configurable: false,\n    });\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, _mapper) {\n    const mapper = _mapper ||\n        function (issue) {\n            return issue.message;\n        };\n    const fieldErrors = { _errors: [] };\n    const processError = (error) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.path.length === 0) {\n                fieldErrors._errors.push(mapper(issue));\n            }\n            else {\n                let curr = fieldErrors;\n                let i = 0;\n                while (i < issue.path.length) {\n                    const el = issue.path[i];\n                    const terminal = i === issue.path.length - 1;\n                    if (!terminal) {\n                        curr[el] = curr[el] || { _errors: [] };\n                    }\n                    else {\n                        curr[el] = curr[el] || { _errors: [] };\n                        curr[el]._errors.push(mapper(issue));\n                    }\n                    curr = curr[el];\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, _mapper) {\n    const mapper = _mapper ||\n        function (issue) {\n            return issue.message;\n        };\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, issue.path));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   \u2716 Expected number, received string at \"username\n * favoriteNumbers[0]\n *   \u2716 Invalid input: expected number\n * ```\n */\nexport function toDotPath(path) {\n    const segs = [];\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => a.path.length - b.path.length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`\u2716 ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  \u2192 at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n", "import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n", "export const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nexport const _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/;\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp =\n//   /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$/;\nexport const hostname = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\nexport const e164 = /^\\+(?:[0-9]){6,14}[0-9]$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^\\d+n?$/;\nexport const integer = /^\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?/i;\nexport const boolean = /true|false/i;\nconst _null = /null/i;\nexport { _null as null };\nconst _undefined = /undefined/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n", "// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n", "export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n", "export const version = {\n    major: 4,\n    minor: 0,\n    patch: 0,\n};\n", "import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    //\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        inst._zod.run = (payload, ctx) => {\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    inst[\"~standard\"] = {\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    };\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            const orig = payload.value;\n            const url = new URL(orig);\n            const href = url.href;\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: regexes.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // payload.value = url.href;\n            if (!orig.endsWith(\"/\") && href.endsWith(\"/\")) {\n                payload.value = href.slice(0, -1);\n            }\n            else {\n                payload.value = href;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv4`;\n    });\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv6`;\n    });\n    inst._zod.check = (payload) => {\n        try {\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const [address, prefix] = payload.value.split(\"/\");\n        try {\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64url\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checksp\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handleObjectResult(result, final, key) {\n    // if(isOptional)\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    final.value[key] = result.value;\n}\nfunction handleOptionalObjectResult(result, final, key, input) {\n    if (result.issues.length) {\n        // validation failed against value schema\n        if (input[key] === undefined) {\n            // if input was undefined, ignore the error\n            if (key in input) {\n                final.value[key] = undefined;\n            }\n            else {\n                final.value[key] = result.value;\n            }\n        }\n        else {\n            final.issues.push(...util.prefixIssues(key, result.issues));\n        }\n    }\n    else if (result.value === undefined) {\n        // validation returned `undefined`\n        if (key in input)\n            final.value[key] = undefined;\n    }\n    else {\n        // non-undefined value\n        final.value[key] = result.value;\n    }\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    const _normalized = util.cached(() => {\n        const keys = Object.keys(def.shape);\n        for (const k of keys) {\n            if (!(def.shape[k] instanceof $ZodType)) {\n                throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n            }\n        }\n        const okeys = util.optionalKeys(def.shape);\n        return {\n            shape: def.shape,\n            keys,\n            keySet: new Set(keys),\n            numKeys: keys.length,\n            optionalKeys: new Set(okeys),\n        };\n    });\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {}`);\n        for (const key of normalized.keys) {\n            if (normalized.optionalKeys.has(key)) {\n                const id = ids[key];\n                doc.write(`const ${id} = ${parseStr(key)};`);\n                const k = util.esc(key);\n                doc.write(`\n        if (${id}.issues.length) {\n          if (input[${k}] === undefined) {\n            if (${k} in input) {\n              newResult[${k}] = undefined;\n            }\n          } else {\n            payload.issues = payload.issues.concat(\n              ${id}.issues.map((iss) => ({\n                ...iss,\n                path: iss.path ? [${k}, ...iss.path] : [${k}],\n              }))\n            );\n          }\n        } else if (${id}.value === undefined) {\n          if (${k} in input) newResult[${k}] = undefined;\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        `);\n            }\n            else {\n                const id = ids[key];\n                //  const id = ids[key];\n                doc.write(`const ${id} = ${parseStr(key)};`);\n                doc.write(`\n          if (${id}.issues.length) payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${util.esc(key)}, ...iss.path] : [${util.esc(key)}]\n          })));`);\n                doc.write(`newResult[${util.esc(key)}] = ${id}.value`);\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n        }\n        else {\n            payload.value = {};\n            const shape = value.shape;\n            for (const key of value.keys) {\n                const el = shape[key];\n                // do not add omitted optional keys\n                // if (!(key in input)) {\n                //   if (optionalKeys.has(key)) continue;\n                //   payload.issues.push({\n                //     code: \"invalid_type\",\n                //     path: [key],\n                //     expected: \"nonoptional\",\n                //     note: `Missing required key: \"${key}\"`,\n                //     input,\n                //     inst,\n                //   });\n                // }\n                const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n                const isOptional = el._zod.optin === \"optional\" && el._zod.optout === \"optional\";\n                if (r instanceof Promise) {\n                    proms.push(r.then((r) => isOptional ? handleOptionalObjectResult(r, payload, key, input) : handleObjectResult(r, payload, key)));\n                }\n                else if (isOptional) {\n                    handleOptionalObjectResult(r, payload, key, input);\n                }\n                else {\n                    handleObjectResult(r, payload, key);\n                }\n            }\n        }\n        if (!catchall) {\n            // return payload;\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        const unrecognized = [];\n        // iterate over input keys\n        const keySet = value.keySet;\n        const _catchall = catchall._zod;\n        const t = _catchall.def.type;\n        for (const key of Object.keys(input)) {\n            if (keySet.has(key))\n                continue;\n            if (t === \"never\") {\n                unrecognized.push(key);\n                continue;\n            }\n            const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handleObjectResult(r, payload, key)));\n            }\n            else {\n                handleObjectResult(r, payload, key);\n            }\n        }\n        if (unrecognized.length) {\n            payload.issues.push({\n                code: \"unrecognized_keys\",\n                keys: unrecognized,\n                input,\n                inst,\n            });\n        }\n        if (!proms.length)\n            return payload;\n        return Promise.all(proms).then(() => {\n            return payload;\n        });\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        if (def.unionFallback) {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    if (left.issues.length) {\n        result.issues.push(...left.issues);\n    }\n    if (right.issues.length) {\n        result.issues.push(...right.issues);\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        if (!def.rest) {\n            const tooBig = input.length > items.length;\n            const tooSmall = input.length < optStart - 1;\n            if (tooBig || tooSmall) {\n                payload.issues.push({\n                    input,\n                    inst,\n                    origin: \"array\",\n                    ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\n                });\n                return payload;\n            }\n        }\n        let i = -1;\n        for (const item of items) {\n            i++;\n            if (i >= input.length)\n                if (i >= optStart)\n                    continue;\n            const result = item._zod.run({\n                value: input[i],\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n            }\n            else {\n                handleTupleResult(result, payload, i);\n            }\n        }\n        if (def.rest) {\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({\n                    value: el,\n                    issues: [],\n                }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (def.keyType._zod.values) {\n            const values = def.keyType._zod.values;\n            payload.value = {};\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[key] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[key] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!values.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                if (keyResult.issues.length) {\n                    payload.issues.push({\n                        origin: \"record\",\n                        code: \"invalid_key\",\n                        issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        input: key,\n                        path: [key],\n                        inst,\n                    });\n                    payload.value[keyResult.value] = keyResult.value;\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_key\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    inst._zod.values = new Set(values);\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.values = new Set(def.values);\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? o.toString() : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const _out = def.transform(payload.value, payload);\n        if (_ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault always returns the default value immediately.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def, ctx));\n        }\n        return handlePipeResult(left, def, ctx);\n    };\n});\nfunction handlePipeResult(left, def, ctx) {\n    if (util.aborted(left)) {\n        return left;\n    }\n    return def.out._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (part instanceof $ZodType) {\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"template_literal\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType._zod.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n", "import * as util from \"../core/util.js\";\nexport const parsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"NaN\" : \"number\";\n        }\n        case \"object\": {\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                return data.constructor.name;\n            }\n        }\n    }\n    return t;\n};\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const Nouns = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Invalid input: expected ${issue.expected}, received ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "export const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new Map();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            if (this._idmap.has(meta.id)) {\n                throw new Error(`ID ${meta.id} already exists in the registry`);\n            }\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new Map();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            return { ...pm, ...this._map.get(schema) };\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\nexport const globalRegistry = /*@__PURE__*/ registry();\n", "import * as checks from \"./checks.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// export function _refine<T>(\n//   Class: util.SchemaClass<schemas.$ZodCustom>,\n//   fn: (arg: NoInfer<T>) => util.MaybeAsync<unknown>,\n//   _params: string | $ZodCustomParams = {}\n// ): checks.$ZodCheck<T> {\n//   return _custom(Class, fn, _params);\n// }\n// same as _custom but defaults to abort:false\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Pipe = Classes.Pipe ?? schemas.$ZodPipe;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const _Transform = Classes.Transform ?? schemas.$ZodTransform;\n    const tx = new _Transform({\n        type: \"transform\",\n        transform: (input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: tx,\n                });\n                return {};\n            }\n        },\n        error: params.error,\n    });\n    // params.error;\n    const innerPipe = new _Pipe({\n        type: \"pipe\",\n        in: new _String({ type: \"string\", error: params.error }),\n        out: tx,\n        error: params.error,\n    });\n    const outerPipe = new _Pipe({\n        type: \"pipe\",\n        in: innerPipe,\n        out: new _Boolean({\n            type: \"boolean\",\n            error: params.error,\n        }),\n        error: params.error,\n    });\n    return outerPipe;\n}\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n", "import { $ZodRegistry, globalRegistry } from \"./registries.js\";\nimport { getEnumValues } from \"./util.js\";\nexport class JSONSchemaGenerator {\n    constructor(params) {\n        this.counter = 0;\n        this.metadataRegistry = params?.metadata ?? globalRegistry;\n        this.target = params?.target ?? \"draft-2020-12\";\n        this.unrepresentable = params?.unrepresentable ?? \"throw\";\n        this.override = params?.override ?? (() => { });\n        this.io = params?.io ?? \"output\";\n        this.seen = new Map();\n    }\n    process(schema, _params = { path: [], schemaPath: [] }) {\n        var _a;\n        const def = schema._zod.def;\n        const formatMap = {\n            guid: \"uuid\",\n            url: \"uri\",\n            datetime: \"date-time\",\n            json_string: \"json-string\",\n            regex: \"\", // do not set\n        };\n        // check for schema in seens\n        const seen = this.seen.get(schema);\n        if (seen) {\n            seen.count++;\n            // check if cycle\n            const isCycle = _params.schemaPath.includes(schema);\n            if (isCycle) {\n                seen.cycle = _params.path;\n            }\n            return seen.schema;\n        }\n        // initialize\n        const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n        this.seen.set(schema, result);\n        // custom method overrides default behavior\n        const overrideSchema = schema._zod.toJSONSchema?.();\n        if (overrideSchema) {\n            result.schema = overrideSchema;\n        }\n        else {\n            const params = {\n                ..._params,\n                schemaPath: [..._params.schemaPath, schema],\n                path: _params.path,\n            };\n            const parent = schema._zod.parent;\n            if (parent) {\n                // schema was cloned from another schema\n                result.ref = parent;\n                this.process(parent, params);\n                this.seen.get(parent).isParent = true;\n            }\n            else {\n                const _json = result.schema;\n                switch (def.type) {\n                    case \"string\": {\n                        const json = _json;\n                        json.type = \"string\";\n                        const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n                            .bag;\n                        if (typeof minimum === \"number\")\n                            json.minLength = minimum;\n                        if (typeof maximum === \"number\")\n                            json.maxLength = maximum;\n                        // custom pattern overrides format\n                        if (format) {\n                            json.format = formatMap[format] ?? format;\n                            if (json.format === \"\")\n                                delete json.format; // empty format is not valid\n                        }\n                        if (contentEncoding)\n                            json.contentEncoding = contentEncoding;\n                        if (patterns && patterns.size > 0) {\n                            const regexes = [...patterns];\n                            if (regexes.length === 1)\n                                json.pattern = regexes[0].source;\n                            else if (regexes.length > 1) {\n                                result.schema.allOf = [\n                                    ...regexes.map((regex) => ({\n                                        ...(this.target === \"draft-7\" ? { type: \"string\" } : {}),\n                                        pattern: regex.source,\n                                    })),\n                                ];\n                            }\n                        }\n                        break;\n                    }\n                    case \"number\": {\n                        const json = _json;\n                        const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n                        if (typeof format === \"string\" && format.includes(\"int\"))\n                            json.type = \"integer\";\n                        else\n                            json.type = \"number\";\n                        if (typeof exclusiveMinimum === \"number\")\n                            json.exclusiveMinimum = exclusiveMinimum;\n                        if (typeof minimum === \"number\") {\n                            json.minimum = minimum;\n                            if (typeof exclusiveMinimum === \"number\") {\n                                if (exclusiveMinimum >= minimum)\n                                    delete json.minimum;\n                                else\n                                    delete json.exclusiveMinimum;\n                            }\n                        }\n                        if (typeof exclusiveMaximum === \"number\")\n                            json.exclusiveMaximum = exclusiveMaximum;\n                        if (typeof maximum === \"number\") {\n                            json.maximum = maximum;\n                            if (typeof exclusiveMaximum === \"number\") {\n                                if (exclusiveMaximum <= maximum)\n                                    delete json.maximum;\n                                else\n                                    delete json.exclusiveMaximum;\n                            }\n                        }\n                        if (typeof multipleOf === \"number\")\n                            json.multipleOf = multipleOf;\n                        break;\n                    }\n                    case \"boolean\": {\n                        const json = _json;\n                        json.type = \"boolean\";\n                        break;\n                    }\n                    case \"bigint\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"BigInt cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"symbol\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Symbols cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"null\": {\n                        _json.type = \"null\";\n                        break;\n                    }\n                    case \"any\": {\n                        break;\n                    }\n                    case \"unknown\": {\n                        break;\n                    }\n                    case \"undefined\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Undefined cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"void\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Void cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"never\": {\n                        _json.not = {};\n                        break;\n                    }\n                    case \"date\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Date cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"array\": {\n                        const json = _json;\n                        const { minimum, maximum } = schema._zod.bag;\n                        if (typeof minimum === \"number\")\n                            json.minItems = minimum;\n                        if (typeof maximum === \"number\")\n                            json.maxItems = maximum;\n                        json.type = \"array\";\n                        json.items = this.process(def.element, { ...params, path: [...params.path, \"items\"] });\n                        break;\n                    }\n                    case \"object\": {\n                        const json = _json;\n                        json.type = \"object\";\n                        json.properties = {};\n                        const shape = def.shape; // params.shapeCache.get(schema)!;\n                        for (const key in shape) {\n                            json.properties[key] = this.process(shape[key], {\n                                ...params,\n                                path: [...params.path, \"properties\", key],\n                            });\n                        }\n                        // required keys\n                        const allKeys = new Set(Object.keys(shape));\n                        // const optionalKeys = new Set(def.optional);\n                        const requiredKeys = new Set([...allKeys].filter((key) => {\n                            const v = def.shape[key]._zod;\n                            if (this.io === \"input\") {\n                                return v.optin === undefined;\n                            }\n                            else {\n                                return v.optout === undefined;\n                            }\n                        }));\n                        if (requiredKeys.size > 0) {\n                            json.required = Array.from(requiredKeys);\n                        }\n                        // catchall\n                        if (def.catchall?._zod.def.type === \"never\") {\n                            // strict\n                            json.additionalProperties = false;\n                        }\n                        else if (!def.catchall) {\n                            // regular\n                            if (this.io === \"output\")\n                                json.additionalProperties = false;\n                        }\n                        else if (def.catchall) {\n                            json.additionalProperties = this.process(def.catchall, {\n                                ...params,\n                                path: [...params.path, \"additionalProperties\"],\n                            });\n                        }\n                        break;\n                    }\n                    case \"union\": {\n                        const json = _json;\n                        json.anyOf = def.options.map((x, i) => this.process(x, {\n                            ...params,\n                            path: [...params.path, \"anyOf\", i],\n                        }));\n                        break;\n                    }\n                    case \"intersection\": {\n                        const json = _json;\n                        const a = this.process(def.left, {\n                            ...params,\n                            path: [...params.path, \"allOf\", 0],\n                        });\n                        const b = this.process(def.right, {\n                            ...params,\n                            path: [...params.path, \"allOf\", 1],\n                        });\n                        const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n                        const allOf = [\n                            ...(isSimpleIntersection(a) ? a.allOf : [a]),\n                            ...(isSimpleIntersection(b) ? b.allOf : [b]),\n                        ];\n                        json.allOf = allOf;\n                        break;\n                    }\n                    case \"tuple\": {\n                        const json = _json;\n                        json.type = \"array\";\n                        const prefixItems = def.items.map((x, i) => this.process(x, { ...params, path: [...params.path, \"prefixItems\", i] }));\n                        if (this.target === \"draft-2020-12\") {\n                            json.prefixItems = prefixItems;\n                        }\n                        else {\n                            json.items = prefixItems;\n                        }\n                        if (def.rest) {\n                            const rest = this.process(def.rest, {\n                                ...params,\n                                path: [...params.path, \"items\"],\n                            });\n                            if (this.target === \"draft-2020-12\") {\n                                json.items = rest;\n                            }\n                            else {\n                                json.additionalItems = rest;\n                            }\n                        }\n                        // additionalItems\n                        if (def.rest) {\n                            json.items = this.process(def.rest, {\n                                ...params,\n                                path: [...params.path, \"items\"],\n                            });\n                        }\n                        // length\n                        const { minimum, maximum } = schema._zod.bag;\n                        if (typeof minimum === \"number\")\n                            json.minItems = minimum;\n                        if (typeof maximum === \"number\")\n                            json.maxItems = maximum;\n                        break;\n                    }\n                    case \"record\": {\n                        const json = _json;\n                        json.type = \"object\";\n                        json.propertyNames = this.process(def.keyType, { ...params, path: [...params.path, \"propertyNames\"] });\n                        json.additionalProperties = this.process(def.valueType, {\n                            ...params,\n                            path: [...params.path, \"additionalProperties\"],\n                        });\n                        break;\n                    }\n                    case \"map\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Map cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"set\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Set cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"enum\": {\n                        const json = _json;\n                        const values = getEnumValues(def.entries);\n                        // Number enums can have both string and number values\n                        if (values.every((v) => typeof v === \"number\"))\n                            json.type = \"number\";\n                        if (values.every((v) => typeof v === \"string\"))\n                            json.type = \"string\";\n                        json.enum = values;\n                        break;\n                    }\n                    case \"literal\": {\n                        const json = _json;\n                        const vals = [];\n                        for (const val of def.values) {\n                            if (val === undefined) {\n                                if (this.unrepresentable === \"throw\") {\n                                    throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n                                }\n                                else {\n                                    // do not add to vals\n                                }\n                            }\n                            else if (typeof val === \"bigint\") {\n                                if (this.unrepresentable === \"throw\") {\n                                    throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n                                }\n                                else {\n                                    vals.push(Number(val));\n                                }\n                            }\n                            else {\n                                vals.push(val);\n                            }\n                        }\n                        if (vals.length === 0) {\n                            // do nothing (an undefined literal was stripped)\n                        }\n                        else if (vals.length === 1) {\n                            const val = vals[0];\n                            json.type = val === null ? \"null\" : typeof val;\n                            json.const = val;\n                        }\n                        else {\n                            if (vals.every((v) => typeof v === \"number\"))\n                                json.type = \"number\";\n                            if (vals.every((v) => typeof v === \"string\"))\n                                json.type = \"string\";\n                            if (vals.every((v) => typeof v === \"boolean\"))\n                                json.type = \"string\";\n                            if (vals.every((v) => v === null))\n                                json.type = \"null\";\n                            json.enum = vals;\n                        }\n                        break;\n                    }\n                    case \"file\": {\n                        const json = _json;\n                        const file = {\n                            type: \"string\",\n                            format: \"binary\",\n                            contentEncoding: \"binary\",\n                        };\n                        const { minimum, maximum, mime } = schema._zod.bag;\n                        if (minimum !== undefined)\n                            file.minLength = minimum;\n                        if (maximum !== undefined)\n                            file.maxLength = maximum;\n                        if (mime) {\n                            if (mime.length === 1) {\n                                file.contentMediaType = mime[0];\n                                Object.assign(json, file);\n                            }\n                            else {\n                                json.anyOf = mime.map((m) => {\n                                    const mFile = { ...file, contentMediaType: m };\n                                    return mFile;\n                                });\n                            }\n                        }\n                        else {\n                            Object.assign(json, file);\n                        }\n                        // if (this.unrepresentable === \"throw\") {\n                        //   throw new Error(\"File cannot be represented in JSON Schema\");\n                        // }\n                        break;\n                    }\n                    case \"transform\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Transforms cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"nullable\": {\n                        const inner = this.process(def.innerType, params);\n                        _json.anyOf = [inner, { type: \"null\" }];\n                        break;\n                    }\n                    case \"nonoptional\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        break;\n                    }\n                    case \"success\": {\n                        const json = _json;\n                        json.type = \"boolean\";\n                        break;\n                    }\n                    case \"default\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        _json.default = JSON.parse(JSON.stringify(def.defaultValue));\n                        break;\n                    }\n                    case \"prefault\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        if (this.io === \"input\")\n                            _json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n                        break;\n                    }\n                    case \"catch\": {\n                        // use conditionals\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        let catchValue;\n                        try {\n                            catchValue = def.catchValue(undefined);\n                        }\n                        catch {\n                            throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n                        }\n                        _json.default = catchValue;\n                        break;\n                    }\n                    case \"nan\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"NaN cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"template_literal\": {\n                        const json = _json;\n                        const pattern = schema._zod.pattern;\n                        if (!pattern)\n                            throw new Error(\"Pattern not found in template literal\");\n                        json.type = \"string\";\n                        json.pattern = pattern.source;\n                        break;\n                    }\n                    case \"pipe\": {\n                        const innerType = this.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n                        this.process(innerType, params);\n                        result.ref = innerType;\n                        break;\n                    }\n                    case \"readonly\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        _json.readOnly = true;\n                        break;\n                    }\n                    // passthrough types\n                    case \"promise\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        break;\n                    }\n                    case \"optional\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        break;\n                    }\n                    case \"lazy\": {\n                        const innerType = schema._zod.innerType;\n                        this.process(innerType, params);\n                        result.ref = innerType;\n                        break;\n                    }\n                    case \"custom\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Custom types cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    default: {\n                        def;\n                    }\n                }\n            }\n        }\n        // metadata\n        const meta = this.metadataRegistry.get(schema);\n        if (meta)\n            Object.assign(result.schema, meta);\n        if (this.io === \"input\" && isTransforming(schema)) {\n            // examples/defaults only apply to output type of pipe\n            delete result.schema.examples;\n            delete result.schema.default;\n        }\n        // set prefault as default\n        if (this.io === \"input\" && result.schema._prefault)\n            (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n        delete result.schema._prefault;\n        // pulling fresh from this.seen in case it was overwritten\n        const _result = this.seen.get(schema);\n        return _result.schema;\n    }\n    emit(schema, _params) {\n        const params = {\n            cycles: _params?.cycles ?? \"ref\",\n            reused: _params?.reused ?? \"inline\",\n            // unrepresentable: _params?.unrepresentable ?? \"throw\",\n            // uri: _params?.uri ?? ((id) => `${id}`),\n            external: _params?.external ?? undefined,\n        };\n        // iterate over seen map;\n        const root = this.seen.get(schema);\n        if (!root)\n            throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n        // initialize result with root schema fields\n        // Object.assign(result, seen.cached);\n        // returns a ref to the schema\n        // defId will be empty if the ref points to an external schema (or #)\n        const makeURI = (entry) => {\n            // comparing the seen objects because sometimes\n            // multiple schemas map to the same seen object.\n            // e.g. lazy\n            // external is configured\n            const defsSegment = this.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            if (params.external) {\n                const externalId = params.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${this.counter++}`;\n                // check if schema is in the external registry\n                const uriGenerator = params.external.uri ?? ((id) => id);\n                if (externalId) {\n                    return { ref: uriGenerator(externalId) };\n                }\n                // otherwise, add to __shared\n                const id = entry[1].defId ?? entry[1].schema.id ?? `schema${this.counter++}`;\n                entry[1].defId = id; // set defId so it will be reused if needed\n                return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n            }\n            if (entry[1] === root) {\n                return { ref: \"#\" };\n            }\n            // self-contained schema\n            const uriPrefix = `#`;\n            const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n            const defId = entry[1].schema.id ?? `__schema${this.counter++}`;\n            return { defId, ref: defUriPrefix + defId };\n        };\n        // stored cached version in `def` property\n        // remove all properties, set $ref\n        const extractToDef = (entry) => {\n            // if the schema is already a reference, do not extract it\n            if (entry[1].schema.$ref) {\n                return;\n            }\n            const seen = entry[1];\n            const { ref, defId } = makeURI(entry);\n            seen.def = { ...seen.schema };\n            // defId won't be set if the schema is a reference to an external schema\n            if (defId)\n                seen.defId = defId;\n            // wipe away all properties except $ref\n            const schema = seen.schema;\n            for (const key in schema) {\n                delete schema[key];\n            }\n            schema.$ref = ref;\n        };\n        // throw on cycles\n        // break cycles\n        if (params.cycles === \"throw\") {\n            for (const entry of this.seen.entries()) {\n                const seen = entry[1];\n                if (seen.cycle) {\n                    throw new Error(\"Cycle detected: \" +\n                        `#/${seen.cycle?.join(\"/\")}/<root>` +\n                        '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n                }\n            }\n        }\n        // extract schemas into $defs\n        for (const entry of this.seen.entries()) {\n            const seen = entry[1];\n            // convert root schema to # $ref\n            if (schema === entry[0]) {\n                extractToDef(entry); // this has special handling for the root schema\n                continue;\n            }\n            // extract schemas that are in the external registry\n            if (params.external) {\n                const ext = params.external.registry.get(entry[0])?.id;\n                if (schema !== entry[0] && ext) {\n                    extractToDef(entry);\n                    continue;\n                }\n            }\n            // extract schemas with `id` meta\n            const id = this.metadataRegistry.get(entry[0])?.id;\n            if (id) {\n                extractToDef(entry);\n                continue;\n            }\n            // break cycles\n            if (seen.cycle) {\n                // any\n                extractToDef(entry);\n                continue;\n            }\n            // extract reused schemas\n            if (seen.count > 1) {\n                if (params.reused === \"ref\") {\n                    extractToDef(entry);\n                    // biome-ignore lint:\n                    continue;\n                }\n            }\n        }\n        // flatten _refs\n        const flattenRef = (zodSchema, params) => {\n            const seen = this.seen.get(zodSchema);\n            const schema = seen.def ?? seen.schema;\n            const _cached = { ...schema };\n            // already seen\n            if (seen.ref === null) {\n                return;\n            }\n            // flatten ref if defined\n            const ref = seen.ref;\n            seen.ref = null; // prevent recursion\n            if (ref) {\n                flattenRef(ref, params);\n                // merge referenced schema into current\n                const refSchema = this.seen.get(ref).schema;\n                if (refSchema.$ref && params.target === \"draft-7\") {\n                    schema.allOf = schema.allOf ?? [];\n                    schema.allOf.push(refSchema);\n                }\n                else {\n                    Object.assign(schema, refSchema);\n                    Object.assign(schema, _cached); // prevent overwriting any fields in the original schema\n                }\n            }\n            // execute overrides\n            if (!seen.isParent)\n                this.override({\n                    zodSchema: zodSchema,\n                    jsonSchema: schema,\n                    path: seen.path ?? [],\n                });\n        };\n        for (const entry of [...this.seen.entries()].reverse()) {\n            flattenRef(entry[0], { target: this.target });\n        }\n        const result = {};\n        if (this.target === \"draft-2020-12\") {\n            result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n        }\n        else if (this.target === \"draft-7\") {\n            result.$schema = \"http://json-schema.org/draft-07/schema#\";\n        }\n        else {\n            console.warn(`Invalid target: ${this.target}`);\n        }\n        if (params.external?.uri) {\n            const id = params.external.registry.get(schema)?.id;\n            if (!id)\n                throw new Error(\"Schema is missing an `id` property\");\n            result.$id = params.external.uri(id);\n        }\n        Object.assign(result, root.def);\n        // build defs object\n        const defs = params.external?.defs ?? {};\n        for (const entry of this.seen.entries()) {\n            const seen = entry[1];\n            if (seen.def && seen.defId) {\n                defs[seen.defId] = seen.def;\n            }\n        }\n        // set definitions in result\n        if (params.external) {\n        }\n        else {\n            if (Object.keys(defs).length > 0) {\n                if (this.target === \"draft-2020-12\") {\n                    result.$defs = defs;\n                }\n                else {\n                    result.definitions = defs;\n                }\n            }\n        }\n        try {\n            // this \"finalizes\" this schema and ensures all cycles are removed\n            // each call to .emit() is functionally independent\n            // though the seen map is shared\n            return JSON.parse(JSON.stringify(result));\n        }\n        catch (_err) {\n            throw new Error(\"Error converting schema to JSON.\");\n        }\n    }\n}\nexport function toJSONSchema(input, _params) {\n    if (input instanceof $ZodRegistry) {\n        const gen = new JSONSchemaGenerator(_params);\n        const defs = {};\n        for (const entry of input._idmap.entries()) {\n            const [_, schema] = entry;\n            gen.process(schema);\n        }\n        const schemas = {};\n        const external = {\n            registry: input,\n            uri: _params?.uri,\n            defs,\n        };\n        for (const entry of input._idmap.entries()) {\n            const [key, schema] = entry;\n            schemas[key] = gen.emit(schema, {\n                ..._params,\n                external,\n            });\n        }\n        if (Object.keys(defs).length > 0) {\n            const defsSegment = gen.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            schemas.__shared = {\n                [defsSegment]: defs,\n            };\n        }\n        return { schemas };\n    }\n    const gen = new JSONSchemaGenerator(_params);\n    gen.process(input);\n    return gen.emit(input, _params);\n}\nfunction isTransforming(_schema, _ctx) {\n    const ctx = _ctx ?? { seen: new Set() };\n    if (ctx.seen.has(_schema))\n        return false;\n    ctx.seen.add(_schema);\n    const schema = _schema;\n    const def = schema._zod.def;\n    switch (def.type) {\n        case \"string\":\n        case \"number\":\n        case \"bigint\":\n        case \"boolean\":\n        case \"date\":\n        case \"symbol\":\n        case \"undefined\":\n        case \"null\":\n        case \"any\":\n        case \"unknown\":\n        case \"never\":\n        case \"void\":\n        case \"literal\":\n        case \"enum\":\n        case \"nan\":\n        case \"file\":\n        case \"template_literal\":\n            return false;\n        case \"array\": {\n            return isTransforming(def.element, ctx);\n        }\n        case \"object\": {\n            for (const key in def.shape) {\n                if (isTransforming(def.shape[key], ctx))\n                    return true;\n            }\n            return false;\n        }\n        case \"union\": {\n            for (const option of def.options) {\n                if (isTransforming(option, ctx))\n                    return true;\n            }\n            return false;\n        }\n        case \"intersection\": {\n            return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n        }\n        case \"tuple\": {\n            for (const item of def.items) {\n                if (isTransforming(item, ctx))\n                    return true;\n            }\n            if (def.rest && isTransforming(def.rest, ctx))\n                return true;\n            return false;\n        }\n        case \"record\": {\n            return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n        }\n        case \"map\": {\n            return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n        }\n        case \"set\": {\n            return isTransforming(def.valueType, ctx);\n        }\n        // inner types\n        case \"promise\":\n        case \"optional\":\n        case \"nonoptional\":\n        case \"nullable\":\n        case \"readonly\":\n            return isTransforming(def.innerType, ctx);\n        case \"lazy\":\n            return isTransforming(def.getter(), ctx);\n        case \"default\": {\n            return isTransforming(def.innerType, ctx);\n        }\n        case \"prefault\": {\n            return isTransforming(def.innerType, ctx);\n        }\n        case \"custom\": {\n            return false;\n        }\n        case \"transform\": {\n            return true;\n        }\n        case \"pipe\": {\n            return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n        }\n        case \"success\": {\n            return false;\n        }\n        case \"catch\": {\n            return false;\n        }\n        default:\n            def;\n    }\n    throw new Error(`Unknown schema type: ${def.type}`);\n}\n", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodMiniType = /*@__PURE__*/ core.$constructor(\"ZodMiniType\", (inst, def) => {\n    if (!inst._zod)\n        throw new Error(\"Uninitialized schema in ZodMiniType.\");\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.check = (...checks) => {\n        return inst.clone({\n            ...def,\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }\n        // { parent: true }\n        );\n    };\n    inst.clone = (_def, params) => core.clone(inst, _def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n});\nexport const ZodMiniString = /*@__PURE__*/ core.$constructor(\"ZodMiniString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function string(params) {\n    return core._string(ZodMiniString, params);\n}\nexport const ZodMiniStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    ZodMiniString.init(inst, def);\n});\nexport const ZodMiniEmail = /*@__PURE__*/ core.$constructor(\"ZodMiniEmail\", (inst, def) => {\n    core.$ZodEmail.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodMiniEmail, params);\n}\nexport const ZodMiniGUID = /*@__PURE__*/ core.$constructor(\"ZodMiniGUID\", (inst, def) => {\n    core.$ZodGUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodMiniGUID, params);\n}\nexport const ZodMiniUUID = /*@__PURE__*/ core.$constructor(\"ZodMiniUUID\", (inst, def) => {\n    core.$ZodUUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodMiniUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodMiniUUID, params);\n}\nexport const ZodMiniURL = /*@__PURE__*/ core.$constructor(\"ZodMiniURL\", (inst, def) => {\n    core.$ZodURL.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodMiniURL, params);\n}\nexport const ZodMiniEmoji = /*@__PURE__*/ core.$constructor(\"ZodMiniEmoji\", (inst, def) => {\n    core.$ZodEmoji.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodMiniEmoji, params);\n}\nexport const ZodMiniNanoID = /*@__PURE__*/ core.$constructor(\"ZodMiniNanoID\", (inst, def) => {\n    core.$ZodNanoID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodMiniNanoID, params);\n}\nexport const ZodMiniCUID = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID\", (inst, def) => {\n    core.$ZodCUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodMiniCUID, params);\n}\nexport const ZodMiniCUID2 = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID2\", (inst, def) => {\n    core.$ZodCUID2.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodMiniCUID2, params);\n}\nexport const ZodMiniULID = /*@__PURE__*/ core.$constructor(\"ZodMiniULID\", (inst, def) => {\n    core.$ZodULID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodMiniULID, params);\n}\nexport const ZodMiniXID = /*@__PURE__*/ core.$constructor(\"ZodMiniXID\", (inst, def) => {\n    core.$ZodXID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodMiniXID, params);\n}\nexport const ZodMiniKSUID = /*@__PURE__*/ core.$constructor(\"ZodMiniKSUID\", (inst, def) => {\n    core.$ZodKSUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodMiniKSUID, params);\n}\nexport const ZodMiniIPv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv4\", (inst, def) => {\n    core.$ZodIPv4.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodMiniIPv4, params);\n}\nexport const ZodMiniIPv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv6\", (inst, def) => {\n    core.$ZodIPv6.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodMiniIPv6, params);\n}\nexport const ZodMiniCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodMiniCIDRv4, params);\n}\nexport const ZodMiniCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodMiniCIDRv6, params);\n}\nexport const ZodMiniBase64 = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64\", (inst, def) => {\n    core.$ZodBase64.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodMiniBase64, params);\n}\nexport const ZodMiniBase64URL = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64URL\", (inst, def) => {\n    core.$ZodBase64URL.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodMiniBase64URL, params);\n}\nexport const ZodMiniE164 = /*@__PURE__*/ core.$constructor(\"ZodMiniE164\", (inst, def) => {\n    core.$ZodE164.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodMiniE164, params);\n}\nexport const ZodMiniJWT = /*@__PURE__*/ core.$constructor(\"ZodMiniJWT\", (inst, def) => {\n    core.$ZodJWT.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodMiniJWT, params);\n}\nexport const ZodMiniCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniCustomStringFormat\", (inst, def) => {\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodMiniCustomStringFormat, format, fnOrRegex, _params);\n}\nexport const ZodMiniNumber = /*@__PURE__*/ core.$constructor(\"ZodMiniNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function number(params) {\n    return core._number(ZodMiniNumber, params);\n}\nexport const ZodMiniNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodMiniNumber.init(inst, def);\n});\n// int\nexport function int(params) {\n    return core._int(ZodMiniNumberFormat, params);\n}\n// float32\nexport function float32(params) {\n    return core._float32(ZodMiniNumberFormat, params);\n}\n// float64\nexport function float64(params) {\n    return core._float64(ZodMiniNumberFormat, params);\n}\n// int32\nexport function int32(params) {\n    return core._int32(ZodMiniNumberFormat, params);\n}\n// uint32\nexport function uint32(params) {\n    return core._uint32(ZodMiniNumberFormat, params);\n}\nexport const ZodMiniBoolean = /*@__PURE__*/ core.$constructor(\"ZodMiniBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function boolean(params) {\n    return core._boolean(ZodMiniBoolean, params);\n}\nexport const ZodMiniBigInt = /*@__PURE__*/ core.$constructor(\"ZodMiniBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function bigint(params) {\n    return core._bigint(ZodMiniBigInt, params);\n}\nexport const ZodMiniBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodMiniBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodMiniBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodMiniBigIntFormat, params);\n}\nexport const ZodMiniSymbol = /*@__PURE__*/ core.$constructor(\"ZodMiniSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function symbol(params) {\n    return core._symbol(ZodMiniSymbol, params);\n}\nexport const ZodMiniUndefined = /*@__PURE__*/ core.$constructor(\"ZodMiniUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodMiniUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodMiniNull = /*@__PURE__*/ core.$constructor(\"ZodMiniNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _null(params) {\n    return core._null(ZodMiniNull, params);\n}\nexport { _null as null };\nexport const ZodMiniAny = /*@__PURE__*/ core.$constructor(\"ZodMiniAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function any() {\n    return core._any(ZodMiniAny);\n}\nexport const ZodMiniUnknown = /*@__PURE__*/ core.$constructor(\"ZodMiniUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function unknown() {\n    return core._unknown(ZodMiniUnknown);\n}\nexport const ZodMiniNever = /*@__PURE__*/ core.$constructor(\"ZodMiniNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function never(params) {\n    return core._never(ZodMiniNever, params);\n}\nexport const ZodMiniVoid = /*@__PURE__*/ core.$constructor(\"ZodMiniVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _void(params) {\n    return core._void(ZodMiniVoid, params);\n}\nexport { _void as void };\nexport const ZodMiniDate = /*@__PURE__*/ core.$constructor(\"ZodMiniDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function date(params) {\n    return core._date(ZodMiniDate, params);\n}\nexport const ZodMiniArray = /*@__PURE__*/ core.$constructor(\"ZodMiniArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function array(element, params) {\n    return new ZodMiniArray({\n        type: \"array\",\n        element: element,\n        ...util.normalizeParams(params),\n    });\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return literal(Object.keys(shape));\n}\nexport const ZodMiniObject = /*@__PURE__*/ core.$constructor(\"ZodMiniObject\", (inst, def) => {\n    core.$ZodObject.init(inst, def);\n    ZodMiniType.init(inst, def);\n    util.defineLazy(inst, \"shape\", () => def.shape);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        ...util.normalizeParams(params),\n    };\n    return new ZodMiniObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodMiniObject({\n        type: \"object\",\n        // shape: shape as core.$ZodLooseShape,\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodMiniObject({\n        type: \"object\",\n        // shape: shape as core.$ZodLooseShape,\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        // get optional() {\n        //   return util.optionalKeys(shape);\n        // },\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\n// object methods\nexport function extend(schema, shape) {\n    return util.extend(schema, shape);\n}\nexport function merge(schema, shape) {\n    return util.extend(schema, shape);\n}\nexport function pick(schema, mask) {\n    return util.pick(schema, mask);\n}\n// .omit\nexport function omit(schema, mask) {\n    return util.omit(schema, mask);\n}\nexport function partial(schema, mask) {\n    return util.partial(ZodMiniOptional, schema, mask);\n}\nexport function required(schema, mask) {\n    return util.required(ZodMiniNonOptional, schema, mask);\n}\nexport function catchall(inst, catchall) {\n    return inst.clone({ ...inst._zod.def, catchall: catchall });\n}\nexport const ZodMiniUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function union(options, params) {\n    return new ZodMiniUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniDiscriminatedUnion\", (inst, def) => {\n    core.$ZodDiscriminatedUnion.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    return new ZodMiniDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniIntersection = /*@__PURE__*/ core.$constructor(\"ZodMiniIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function intersection(left, right) {\n    return new ZodMiniIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodMiniTuple = /*@__PURE__*/ core.$constructor(\"ZodMiniTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodMiniTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniRecord = /*@__PURE__*/ core.$constructor(\"ZodMiniRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function record(keyType, valueType, params) {\n    return new ZodMiniRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function partialRecord(keyType, valueType, params) {\n    return new ZodMiniRecord({\n        type: \"record\",\n        keyType: union([keyType, never()]),\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniMap = /*@__PURE__*/ core.$constructor(\"ZodMiniMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMiniMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniSet = /*@__PURE__*/ core.$constructor(\"ZodMiniSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function set(valueType, params) {\n    return new ZodMiniSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniEnum = /*@__PURE__*/ core.$constructor(\"ZodMiniEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodMiniEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodMiniEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function literal(value, params) {\n    return new ZodMiniLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniFile = /*@__PURE__*/ core.$constructor(\"ZodMiniFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function file(params) {\n    return core._file(ZodMiniFile, params);\n}\nexport const ZodMiniTransform = /*@__PURE__*/ core.$constructor(\"ZodMiniTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function transform(fn) {\n    return new ZodMiniTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodMiniOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function optional(innerType) {\n    return new ZodMiniOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniNullable = /*@__PURE__*/ core.$constructor(\"ZodMiniNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function nullable(innerType) {\n    return new ZodMiniNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodMiniDefault = /*@__PURE__*/ core.$constructor(\"ZodMiniDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodMiniDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodMiniPrefault = /*@__PURE__*/ core.$constructor(\"ZodMiniPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodMiniPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodMiniNonOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function nonoptional(innerType, params) {\n    return new ZodMiniNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniSuccess = /*@__PURE__*/ core.$constructor(\"ZodMiniSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function success(innerType) {\n    return new ZodMiniSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniCatch = /*@__PURE__*/ core.$constructor(\"ZodMiniCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodMiniCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodMiniNaN = /*@__PURE__*/ core.$constructor(\"ZodMiniNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function nan(params) {\n    return core._nan(ZodMiniNaN, params);\n}\nexport const ZodMiniPipe = /*@__PURE__*/ core.$constructor(\"ZodMiniPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function pipe(in_, out) {\n    return new ZodMiniPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n    });\n}\nexport const ZodMiniReadonly = /*@__PURE__*/ core.$constructor(\"ZodMiniReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function readonly(innerType) {\n    return new ZodMiniReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodMiniTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniLazy = /*@__PURE__*/ core.$constructor(\"ZodMiniLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// export function lazy<T extends object>(getter: () => T): T {\n//   return util.createTransparentProxy<T>(getter);\n// }\nfunction _lazy(getter) {\n    return new ZodMiniLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport { _lazy as lazy };\nexport const ZodMiniPromise = /*@__PURE__*/ core.$constructor(\"ZodMiniPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function promise(innerType) {\n    return new ZodMiniPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniCustom = /*@__PURE__*/ core.$constructor(\"ZodMiniCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// custom checks\nexport function check(fn, params) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// ZodCustom\n// custom schema\nexport function custom(fn, _params) {\n    return core._custom(ZodMiniCustom, fn ?? (() => true), _params);\n}\n// refine\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodMiniCustom, fn, _params);\n}\n// instanceof\nclass Class {\n    constructor(..._args) { }\n}\nfunction _instanceof(cls, params = {\n    error: `Input not instance of ${cls.name}`,\n}) {\n    const inst = custom((data) => data instanceof cls, params);\n    inst._zod.bag.Class = cls;\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Pipe: ZodMiniPipe,\n    Boolean: ZodMiniBoolean,\n    String: ZodMiniString,\n    Transform: ZodMiniTransform,\n}, ...args);\nexport function json() {\n    const jsonSchema = _lazy(() => {\n        return union([string(), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n", null, "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n", "import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => inst.issues.push(issue),\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => inst.issues.push(...issues),\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n", "import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // base methods\n    inst.check = (...checks) => {\n        return inst.clone({\n            ...def,\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }\n        // { parent: true }\n        );\n    };\n    inst.clone = (def, params) => core.clone(inst, def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n    // parsing\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    // refinements\n    inst.refine = (check, params) => inst.check(refine(check, params));\n    inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n    inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n    // wrappers\n    inst.optional = () => optional(inst);\n    inst.nullable = () => nullable(inst);\n    inst.nullish = () => optional(nullable(inst));\n    inst.nonoptional = (params) => nonoptional(inst, params);\n    inst.array = () => array(inst);\n    inst.or = (arg) => union([inst, arg]);\n    inst.and = (arg) => intersection(inst, arg);\n    inst.transform = (tx) => pipe(inst, transform(tx));\n    inst.default = (def) => _default(inst, def);\n    inst.prefault = (def) => prefault(inst, def);\n    // inst.coalesce = (def, params) => coalesce(inst, def, params);\n    inst.catch = (params) => _catch(inst, params);\n    inst.pipe = (target) => pipe(inst, target);\n    inst.readonly = () => readonly(inst);\n    // meta\n    inst.describe = (description) => {\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    };\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    inst.meta = (...args) => {\n        if (args.length === 0) {\n            return core.globalRegistry.get(inst);\n        }\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    };\n    // helpers\n    inst.isOptional = () => inst.safeParse(undefined).success;\n    inst.isNullable = () => inst.safeParse(null).success;\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    // validations\n    inst.regex = (...args) => inst.check(checks.regex(...args));\n    inst.includes = (...args) => inst.check(checks.includes(...args));\n    inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n    inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n    inst.min = (...args) => inst.check(checks.minLength(...args));\n    inst.max = (...args) => inst.check(checks.maxLength(...args));\n    inst.length = (...args) => inst.check(checks.length(...args));\n    inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n    inst.lowercase = (params) => inst.check(checks.lowercase(params));\n    inst.uppercase = (params) => inst.check(checks.uppercase(params));\n    // transforms\n    inst.trim = () => inst.check(checks.trim());\n    inst.normalize = (...args) => inst.check(checks.normalize(...args));\n    inst.toLowerCase = () => inst.check(checks.toLowerCase());\n    inst.toUpperCase = () => inst.check(checks.toUpperCase());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.int = (params) => inst.check(int(params));\n    inst.safe = (params) => inst.check(int(params));\n    inst.positive = (params) => inst.check(checks.gt(0, params));\n    inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n    inst.negative = (params) => inst.check(checks.lt(0, params));\n    inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n    // inst.finite = (params) => inst.check(core.finite(params));\n    inst.finite = () => inst;\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst.element = def.element;\n    inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n    inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n    inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n    inst.length = (len, params) => inst.check(checks.length(len, params));\n    inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return literal(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObject.init(inst, def);\n    ZodType.init(inst, def);\n    util.defineLazy(inst, \"shape\", () => def.shape);\n    inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n    inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n    inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    // inst.nonstrict = () => inst.clone({ ...inst._zod.def, catchall: api.unknown() });\n    inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n    inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n    inst.extend = (incoming) => {\n        return util.extend(inst, incoming);\n    };\n    inst.merge = (other) => util.merge(inst, other);\n    inst.pick = (mask) => util.pick(inst, mask);\n    inst.omit = (mask) => util.omit(inst, mask);\n    inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n    inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType: union([keyType, never()]),\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                _issue.continue ?? (_issue.continue = true);\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n    const ch = check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort);\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    });\n    return ch;\n}\nfunction _instanceof(cls, params = {\n    error: `Input not instance of ${cls.name}`,\n}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Pipe: ZodPipe,\n    Boolean: ZodBoolean,\n    String: ZodString,\n    Transform: ZodTransform,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n    return pipe(transform(fn), schema);\n}\n", "export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, function, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, toJSONSchema, TimePrecision, NEVER, } from \"../core/index.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n", null, null, "export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n    if (def.description) {\n        try {\n            return {\n                ...jsonSchema,\n                ...JSON.parse(def.description),\n            };\n        }\n        catch { }\n    }\n    return jsonSchema;\n};\nexport const defaultOptions = {\n    name: undefined,\n    $refStrategy: \"root\",\n    basePath: [\"#\"],\n    effectStrategy: \"input\",\n    pipeStrategy: \"all\",\n    dateStrategy: \"format:date-time\",\n    mapStrategy: \"entries\",\n    removeAdditionalStrategy: \"passthrough\",\n    allowedAdditionalProperties: true,\n    rejectedAdditionalProperties: false,\n    definitionPath: \"definitions\",\n    target: \"jsonSchema7\",\n    strictUnions: false,\n    definitions: {},\n    errorMessages: false,\n    markdownDescription: false,\n    patternStrategy: \"escape\",\n    applyRegexFlags: false,\n    emailStrategy: \"format:email\",\n    base64Strategy: \"contentEncoding:base64\",\n    nameStrategy: \"ref\",\n    openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n    ? {\n        ...defaultOptions,\n        name: options,\n    }\n    : {\n        ...defaultOptions,\n        ...options,\n    });\n", "import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n    const _options = getDefaultOptions(options);\n    const currentPath = _options.name !== undefined\n        ? [..._options.basePath, _options.definitionPath, _options.name]\n        : _options.basePath;\n    return {\n        ..._options,\n        flags: { hasReferencedOpenAiAnyType: false },\n        currentPath: currentPath,\n        propertyPath: undefined,\n        seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n            def._def,\n            {\n                def: def._def,\n                path: [..._options.basePath, _options.definitionPath, name],\n                // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n                jsonSchema: undefined,\n            },\n        ])),\n    };\n};\n", "export function addErrorMessage(res, key, errorMessage, refs) {\n    if (!refs?.errorMessages)\n        return;\n    if (errorMessage) {\n        res.errorMessage = {\n            ...res.errorMessage,\n            [key]: errorMessage,\n        };\n    }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n    res[key] = value;\n    addErrorMessage(res, key, errorMessage, refs);\n}\n", "export const getRelativePath = (pathA, pathB) => {\n    let i = 0;\n    for (; i < pathA.length && i < pathB.length; i++) {\n        if (pathA[i] !== pathB[i])\n            break;\n    }\n    return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n", "import { getRelativePath } from \"../getRelativePath.js\";\nexport function parseAnyDef(refs) {\n    if (refs.target !== \"openAi\") {\n        return {};\n    }\n    const anyDefinitionPath = [\n        ...refs.basePath,\n        refs.definitionPath,\n        refs.openAiAnyTypeName,\n    ];\n    refs.flags.hasReferencedOpenAiAnyType = true;\n    return {\n        $ref: refs.$refStrategy === \"relative\"\n            ? getRelativePath(anyDefinitionPath, refs.currentPath)\n            : anyDefinitionPath.join(\"/\"),\n    };\n}\n", "import { ZodFirstPartyTypeKind } from \"zod/v3\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n    const res = {\n        type: \"array\",\n    };\n    if (def.type?._def &&\n        def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n        res.items = parseDef(def.type._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"items\"],\n        });\n    }\n    if (def.minLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n    }\n    if (def.maxLength) {\n        setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n    }\n    if (def.exactLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n        setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n    }\n    return res;\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n    const res = {\n        type: \"integer\",\n        format: \"int64\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n", "export function parseBooleanDef() {\n    return {\n        type: \"boolean\",\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n    return parseDef(_def.type._def, refs);\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n    const strategy = overrideDateStrategy ?? refs.dateStrategy;\n    if (Array.isArray(strategy)) {\n        return {\n            anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n        };\n    }\n    switch (strategy) {\n        case \"string\":\n        case \"format:date-time\":\n            return {\n                type: \"string\",\n                format: \"date-time\",\n            };\n        case \"format:date\":\n            return {\n                type: \"string\",\n                format: \"date\",\n            };\n        case \"integer\":\n            return integerDateParser(def, refs);\n    }\n}\nconst integerDateParser = (def, refs) => {\n    const res = {\n        type: \"integer\",\n        format: \"unix-time\",\n    };\n    if (refs.target === \"openApi3\") {\n        return res;\n    }\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n            case \"max\":\n                setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n        }\n    }\n    return res;\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n    return {\n        ...parseDef(_def.innerType._def, refs),\n        default: _def.defaultValue(),\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseEffectsDef(_def, refs) {\n    return refs.effectStrategy === \"input\"\n        ? parseDef(_def.schema._def, refs)\n        : parseAnyDef(refs);\n}\n", "export function parseEnumDef(def) {\n    return {\n        type: \"string\",\n        enum: Array.from(def.values),\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n    if (\"type\" in type && type.type === \"string\")\n        return false;\n    return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n    const allOf = [\n        parseDef(def.left._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n        }),\n        parseDef(def.right._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n        }),\n    ].filter((x) => !!x);\n    let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n        ? { unevaluatedProperties: false }\n        : undefined;\n    const mergedAllOf = [];\n    // If either of the schemas is an allOf, merge them into a single allOf\n    allOf.forEach((schema) => {\n        if (isJsonSchema7AllOfType(schema)) {\n            mergedAllOf.push(...schema.allOf);\n            if (schema.unevaluatedProperties === undefined) {\n                // If one of the schemas has no unevaluatedProperties set,\n                // the merged schema should also have no unevaluatedProperties set\n                unevaluatedProperties = undefined;\n            }\n        }\n        else {\n            let nestedSchema = schema;\n            if (\"additionalProperties\" in schema &&\n                schema.additionalProperties === false) {\n                const { additionalProperties, ...rest } = schema;\n                nestedSchema = rest;\n            }\n            else {\n                // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n                unevaluatedProperties = undefined;\n            }\n            mergedAllOf.push(nestedSchema);\n        }\n    });\n    return mergedAllOf.length\n        ? {\n            allOf: mergedAllOf,\n            ...unevaluatedProperties,\n        }\n        : undefined;\n}\n", "export function parseLiteralDef(def, refs) {\n    const parsedType = typeof def.value;\n    if (parsedType !== \"bigint\" &&\n        parsedType !== \"number\" &&\n        parsedType !== \"boolean\" &&\n        parsedType !== \"string\") {\n        return {\n            type: Array.isArray(def.value) ? \"array\" : \"object\",\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        return {\n            type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n            enum: [def.value],\n        };\n    }\n    return {\n        type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n        const: def.value,\n    };\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n    /**\n     * `c` was changed to `[cC]` to replicate /i flag\n     */\n    cuid: /^[cC][^\\s-]{8,}$/,\n    cuid2: /^[0-9a-z]+$/,\n    ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n    /**\n     * `a-z` was added to replicate /i flag\n     */\n    email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n    /**\n     * Constructed a valid Unicode RegExp\n     *\n     * Lazily instantiate since this type of regex isn't supported\n     * in all envs (e.g. React Native).\n     *\n     * See:\n     * https://github.com/colinhacks/zod/issues/2433\n     * Fix in Zod:\n     * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n     */\n    emoji: () => {\n        if (emojiRegex === undefined) {\n            emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n        }\n        return emojiRegex;\n    },\n    /**\n     * Unused\n     */\n    uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n    /**\n     * Unused\n     */\n    ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n    ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n    /**\n     * Unused\n     */\n    ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n    ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n    base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n    base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n    nanoid: /^[a-zA-Z0-9_-]{21}$/,\n    jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n    const res = {\n        type: \"string\",\n    };\n    if (def.checks) {\n        for (const check of def.checks) {\n            switch (check.kind) {\n                case \"min\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"max\":\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"email\":\n                    switch (refs.emailStrategy) {\n                        case \"format:email\":\n                            addFormat(res, \"email\", check.message, refs);\n                            break;\n                        case \"format:idn-email\":\n                            addFormat(res, \"idn-email\", check.message, refs);\n                            break;\n                        case \"pattern:zod\":\n                            addPattern(res, zodPatterns.email, check.message, refs);\n                            break;\n                    }\n                    break;\n                case \"url\":\n                    addFormat(res, \"uri\", check.message, refs);\n                    break;\n                case \"uuid\":\n                    addFormat(res, \"uuid\", check.message, refs);\n                    break;\n                case \"regex\":\n                    addPattern(res, check.regex, check.message, refs);\n                    break;\n                case \"cuid\":\n                    addPattern(res, zodPatterns.cuid, check.message, refs);\n                    break;\n                case \"cuid2\":\n                    addPattern(res, zodPatterns.cuid2, check.message, refs);\n                    break;\n                case \"startsWith\":\n                    addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n                    break;\n                case \"endsWith\":\n                    addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n                    break;\n                case \"datetime\":\n                    addFormat(res, \"date-time\", check.message, refs);\n                    break;\n                case \"date\":\n                    addFormat(res, \"date\", check.message, refs);\n                    break;\n                case \"time\":\n                    addFormat(res, \"time\", check.message, refs);\n                    break;\n                case \"duration\":\n                    addFormat(res, \"duration\", check.message, refs);\n                    break;\n                case \"length\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"includes\": {\n                    addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n                    break;\n                }\n                case \"ip\": {\n                    if (check.version !== \"v6\") {\n                        addFormat(res, \"ipv4\", check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addFormat(res, \"ipv6\", check.message, refs);\n                    }\n                    break;\n                }\n                case \"base64url\":\n                    addPattern(res, zodPatterns.base64url, check.message, refs);\n                    break;\n                case \"jwt\":\n                    addPattern(res, zodPatterns.jwt, check.message, refs);\n                    break;\n                case \"cidr\": {\n                    if (check.version !== \"v6\") {\n                        addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n                    }\n                    break;\n                }\n                case \"emoji\":\n                    addPattern(res, zodPatterns.emoji(), check.message, refs);\n                    break;\n                case \"ulid\": {\n                    addPattern(res, zodPatterns.ulid, check.message, refs);\n                    break;\n                }\n                case \"base64\": {\n                    switch (refs.base64Strategy) {\n                        case \"format:binary\": {\n                            addFormat(res, \"binary\", check.message, refs);\n                            break;\n                        }\n                        case \"contentEncoding:base64\": {\n                            setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n                            break;\n                        }\n                        case \"pattern:zod\": {\n                            addPattern(res, zodPatterns.base64, check.message, refs);\n                            break;\n                        }\n                    }\n                    break;\n                }\n                case \"nanoid\": {\n                    addPattern(res, zodPatterns.nanoid, check.message, refs);\n                }\n                case \"toLowerCase\":\n                case \"toUpperCase\":\n                case \"trim\":\n                    break;\n                default:\n                    ((_) => { })(check);\n            }\n        }\n    }\n    return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n    return refs.patternStrategy === \"escape\"\n        ? escapeNonAlphaNumeric(literal)\n        : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n    let result = \"\";\n    for (let i = 0; i < source.length; i++) {\n        if (!ALPHA_NUMERIC.has(source[i])) {\n            result += \"\\\\\";\n        }\n        result += source[i];\n    }\n    return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n    if (schema.format || schema.anyOf?.some((x) => x.format)) {\n        if (!schema.anyOf) {\n            schema.anyOf = [];\n        }\n        if (schema.format) {\n            schema.anyOf.push({\n                format: schema.format,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { format: schema.errorMessage.format },\n                }),\n            });\n            delete schema.format;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.format;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.anyOf.push({\n            format: value,\n            ...(message &&\n                refs.errorMessages && { errorMessage: { format: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"format\", value, message, refs);\n    }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n    if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n        if (!schema.allOf) {\n            schema.allOf = [];\n        }\n        if (schema.pattern) {\n            schema.allOf.push({\n                pattern: schema.pattern,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { pattern: schema.errorMessage.pattern },\n                }),\n            });\n            delete schema.pattern;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.pattern;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.allOf.push({\n            pattern: stringifyRegExpWithFlags(regex, refs),\n            ...(message &&\n                refs.errorMessages && { errorMessage: { pattern: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n    }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n    if (!refs.applyRegexFlags || !regex.flags) {\n        return regex.source;\n    }\n    // Currently handled flags\n    const flags = {\n        i: regex.flags.includes(\"i\"),\n        m: regex.flags.includes(\"m\"),\n        s: regex.flags.includes(\"s\"), // `.` matches newlines\n    };\n    // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n    const source = flags.i ? regex.source.toLowerCase() : regex.source;\n    let pattern = \"\";\n    let isEscaped = false;\n    let inCharGroup = false;\n    let inCharRange = false;\n    for (let i = 0; i < source.length; i++) {\n        if (isEscaped) {\n            pattern += source[i];\n            isEscaped = false;\n            continue;\n        }\n        if (flags.i) {\n            if (inCharGroup) {\n                if (source[i].match(/[a-z]/)) {\n                    if (inCharRange) {\n                        pattern += source[i];\n                        pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n                        inCharRange = false;\n                    }\n                    else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n                        pattern += source[i];\n                        inCharRange = true;\n                    }\n                    else {\n                        pattern += `${source[i]}${source[i].toUpperCase()}`;\n                    }\n                    continue;\n                }\n            }\n            else if (source[i].match(/[a-z]/)) {\n                pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n                continue;\n            }\n        }\n        if (flags.m) {\n            if (source[i] === \"^\") {\n                pattern += `(^|(?<=[\\r\\n]))`;\n                continue;\n            }\n            else if (source[i] === \"$\") {\n                pattern += `($|(?=[\\r\\n]))`;\n                continue;\n            }\n        }\n        if (flags.s && source[i] === \".\") {\n            pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n            continue;\n        }\n        pattern += source[i];\n        if (source[i] === \"\\\\\") {\n            isEscaped = true;\n        }\n        else if (inCharGroup && source[i] === \"]\") {\n            inCharGroup = false;\n        }\n        else if (!inCharGroup && source[i] === \"[\") {\n            inCharGroup = true;\n        }\n    }\n    try {\n        new RegExp(pattern);\n    }\n    catch {\n        console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n        return regex.source;\n    }\n    return pattern;\n}\n", "import { ZodFirstPartyTypeKind, } from \"zod/v3\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseRecordDef(def, refs) {\n    if (refs.target === \"openAi\") {\n        console.warn(\"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\");\n    }\n    if (refs.target === \"openApi3\" &&\n        def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            type: \"object\",\n            required: def.keyType._def.values,\n            properties: def.keyType._def.values.reduce((acc, key) => ({\n                ...acc,\n                [key]: parseDef(def.valueType._def, {\n                    ...refs,\n                    currentPath: [...refs.currentPath, \"properties\", key],\n                }) ?? parseAnyDef(refs),\n            }), {}),\n            additionalProperties: refs.rejectedAdditionalProperties,\n        };\n    }\n    const schema = {\n        type: \"object\",\n        additionalProperties: parseDef(def.valueType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"additionalProperties\"],\n        }) ?? refs.allowedAdditionalProperties,\n    };\n    if (refs.target === \"openApi3\") {\n        return schema;\n    }\n    if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n        def.keyType._def.checks?.length) {\n        const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n        return {\n            ...schema,\n            propertyNames: keyType,\n        };\n    }\n    else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            ...schema,\n            propertyNames: {\n                enum: def.keyType._def.values,\n            },\n        };\n    }\n    else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n        def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n        def.keyType._def.type._def.checks?.length) {\n        const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);\n        return {\n            ...schema,\n            propertyNames: keyType,\n        };\n    }\n    return schema;\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseMapDef(def, refs) {\n    if (refs.mapStrategy === \"record\") {\n        return parseRecordDef(def, refs);\n    }\n    const keys = parseDef(def.keyType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n    }) || parseAnyDef(refs);\n    const values = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n    }) || parseAnyDef(refs);\n    return {\n        type: \"array\",\n        maxItems: 125,\n        items: {\n            type: \"array\",\n            items: [keys, values],\n            minItems: 2,\n            maxItems: 2,\n        },\n    };\n}\n", "export function parseNativeEnumDef(def) {\n    const object = def.values;\n    const actualKeys = Object.keys(def.values).filter((key) => {\n        return typeof object[object[key]] !== \"number\";\n    });\n    const actualValues = actualKeys.map((key) => object[key]);\n    const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n    return {\n        type: parsedTypes.length === 1\n            ? parsedTypes[0] === \"string\"\n                ? \"string\"\n                : \"number\"\n            : [\"string\", \"number\"],\n        enum: actualValues,\n    };\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseNeverDef(refs) {\n    return refs.target === \"openAi\"\n        ? undefined\n        : {\n            not: parseAnyDef({\n                ...refs,\n                currentPath: [...refs.currentPath, \"not\"],\n            }),\n        };\n}\n", "export function parseNullDef(refs) {\n    return refs.target === \"openApi3\"\n        ? {\n            enum: [\"null\"],\n            nullable: true,\n        }\n        : {\n            type: \"null\",\n        };\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n    ZodString: \"string\",\n    ZodNumber: \"number\",\n    ZodBigInt: \"integer\",\n    ZodBoolean: \"boolean\",\n    ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n    if (refs.target === \"openApi3\")\n        return asAnyOf(def, refs);\n    const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n    // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n    if (options.every((x) => x._def.typeName in primitiveMappings &&\n        (!x._def.checks || !x._def.checks.length))) {\n        // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n        const types = options.reduce((types, x) => {\n            const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n            return type && !types.includes(type) ? [...types, type] : types;\n        }, []);\n        return {\n            type: types.length > 1 ? types : types[0],\n        };\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n        // all options literals\n        const types = options.reduce((acc, x) => {\n            const type = typeof x._def.value;\n            switch (type) {\n                case \"string\":\n                case \"number\":\n                case \"boolean\":\n                    return [...acc, type];\n                case \"bigint\":\n                    return [...acc, \"integer\"];\n                case \"object\":\n                    if (x._def.value === null)\n                        return [...acc, \"null\"];\n                case \"symbol\":\n                case \"undefined\":\n                case \"function\":\n                default:\n                    return acc;\n            }\n        }, []);\n        if (types.length === options.length) {\n            // all the literals are primitive, as far as null can be considered primitive\n            const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n            return {\n                type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n                enum: options.reduce((acc, x) => {\n                    return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n                }, []),\n            };\n        }\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n        return {\n            type: \"string\",\n            enum: options.reduce((acc, x) => [\n                ...acc,\n                ...x._def.values.filter((x) => !acc.includes(x)),\n            ], []),\n        };\n    }\n    return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n    const anyOf = (def.options instanceof Map\n        ? Array.from(def.options.values())\n        : def.options)\n        .map((x, i) => parseDef(x._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n    }))\n        .filter((x) => !!x &&\n        (!refs.strictUnions ||\n            (typeof x === \"object\" && Object.keys(x).length > 0)));\n    return anyOf.length ? { anyOf } : undefined;\n};\n", "import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n    if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n        (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n        if (refs.target === \"openApi3\") {\n            return {\n                type: primitiveMappings[def.innerType._def.typeName],\n                nullable: true,\n            };\n        }\n        return {\n            type: [\n                primitiveMappings[def.innerType._def.typeName],\n                \"null\",\n            ],\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        const base = parseDef(def.innerType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath],\n        });\n        if (base && \"$ref\" in base)\n            return { allOf: [base], nullable: true };\n        return base && { ...base, nullable: true };\n    }\n    const base = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n    });\n    return base && { anyOf: [base, { type: \"null\" }] };\n}\n", "import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n    const res = {\n        type: \"number\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"int\":\n                res.type = \"integer\";\n                addErrorMessage(res, \"type\", check.message, refs);\n                break;\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseObjectDef(def, refs) {\n    const forceOptionalIntoNullable = refs.target === \"openAi\";\n    const result = {\n        type: \"object\",\n        properties: {},\n    };\n    const required = [];\n    const shape = def.shape();\n    for (const propName in shape) {\n        let propDef = shape[propName];\n        if (propDef === undefined || propDef._def === undefined) {\n            continue;\n        }\n        let propOptional = safeIsOptional(propDef);\n        if (propOptional && forceOptionalIntoNullable) {\n            if (propDef._def.typeName === \"ZodOptional\") {\n                propDef = propDef._def.innerType;\n            }\n            if (!propDef.isNullable()) {\n                propDef = propDef.nullable();\n            }\n            propOptional = false;\n        }\n        const parsedDef = parseDef(propDef._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"properties\", propName],\n            propertyPath: [...refs.currentPath, \"properties\", propName],\n        });\n        if (parsedDef === undefined) {\n            continue;\n        }\n        result.properties[propName] = parsedDef;\n        if (!propOptional) {\n            required.push(propName);\n        }\n    }\n    if (required.length) {\n        result.required = required;\n    }\n    const additionalProperties = decideAdditionalProperties(def, refs);\n    if (additionalProperties !== undefined) {\n        result.additionalProperties = additionalProperties;\n    }\n    return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n    if (def.catchall._def.typeName !== \"ZodNever\") {\n        return parseDef(def.catchall._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"additionalProperties\"],\n        });\n    }\n    switch (def.unknownKeys) {\n        case \"passthrough\":\n            return refs.allowedAdditionalProperties;\n        case \"strict\":\n            return refs.rejectedAdditionalProperties;\n        case \"strip\":\n            return refs.removeAdditionalStrategy === \"strict\"\n                ? refs.allowedAdditionalProperties\n                : refs.rejectedAdditionalProperties;\n    }\n}\nfunction safeIsOptional(schema) {\n    try {\n        return schema.isOptional();\n    }\n    catch {\n        return true;\n    }\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport const parseOptionalDef = (def, refs) => {\n    if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n        return parseDef(def.innerType._def, refs);\n    }\n    const innerSchema = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n    });\n    return innerSchema\n        ? {\n            anyOf: [\n                {\n                    not: parseAnyDef(refs),\n                },\n                innerSchema,\n            ],\n        }\n        : parseAnyDef(refs);\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n    if (refs.pipeStrategy === \"input\") {\n        return parseDef(def.in._def, refs);\n    }\n    else if (refs.pipeStrategy === \"output\") {\n        return parseDef(def.out._def, refs);\n    }\n    const a = parseDef(def.in._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n    });\n    const b = parseDef(def.out._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n    });\n    return {\n        allOf: [a, b].filter((x) => x !== undefined),\n    };\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n    return parseDef(def.type._def, refs);\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n    const items = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\"],\n    });\n    const schema = {\n        type: \"array\",\n        uniqueItems: true,\n        items,\n    };\n    if (def.minSize) {\n        setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n    }\n    if (def.maxSize) {\n        setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n    }\n    return schema;\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n    if (def.rest) {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n            additionalItems: parseDef(def.rest._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"additionalItems\"],\n            }),\n        };\n    }\n    else {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            maxItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n        };\n    }\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n    return {\n        not: parseAnyDef(refs),\n    };\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n    return parseAnyDef(refs);\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n", "import { ZodFirstPartyTypeKind } from \"zod/v3\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n    switch (typeName) {\n        case ZodFirstPartyTypeKind.ZodString:\n            return parseStringDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNumber:\n            return parseNumberDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodObject:\n            return parseObjectDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBigInt:\n            return parseBigintDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBoolean:\n            return parseBooleanDef();\n        case ZodFirstPartyTypeKind.ZodDate:\n            return parseDateDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUndefined:\n            return parseUndefinedDef(refs);\n        case ZodFirstPartyTypeKind.ZodNull:\n            return parseNullDef(refs);\n        case ZodFirstPartyTypeKind.ZodArray:\n            return parseArrayDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUnion:\n        case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n            return parseUnionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodIntersection:\n            return parseIntersectionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodTuple:\n            return parseTupleDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodRecord:\n            return parseRecordDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLiteral:\n            return parseLiteralDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodEnum:\n            return parseEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNativeEnum:\n            return parseNativeEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNullable:\n            return parseNullableDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodOptional:\n            return parseOptionalDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodMap:\n            return parseMapDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodSet:\n            return parseSetDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLazy:\n            return () => def.getter()._def;\n        case ZodFirstPartyTypeKind.ZodPromise:\n            return parsePromiseDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNaN:\n        case ZodFirstPartyTypeKind.ZodNever:\n            return parseNeverDef(refs);\n        case ZodFirstPartyTypeKind.ZodEffects:\n            return parseEffectsDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodAny:\n            return parseAnyDef(refs);\n        case ZodFirstPartyTypeKind.ZodUnknown:\n            return parseUnknownDef(refs);\n        case ZodFirstPartyTypeKind.ZodDefault:\n            return parseDefaultDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBranded:\n            return parseBrandedDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodReadonly:\n            return parseReadonlyDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodCatch:\n            return parseCatchDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodPipeline:\n            return parsePipelineDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodFunction:\n        case ZodFirstPartyTypeKind.ZodVoid:\n        case ZodFirstPartyTypeKind.ZodSymbol:\n            return undefined;\n        default:\n            return ((_) => undefined)(typeName);\n    }\n};\n", "import { ignoreOverride } from \"./Options.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n    const seenItem = refs.seen.get(def);\n    if (refs.override) {\n        const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n        if (overrideResult !== ignoreOverride) {\n            return overrideResult;\n        }\n    }\n    if (seenItem && !forceResolution) {\n        const seenSchema = get$ref(seenItem, refs);\n        if (seenSchema !== undefined) {\n            return seenSchema;\n        }\n    }\n    const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n    refs.seen.set(def, newItem);\n    const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n    // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n    const jsonSchema = typeof jsonSchemaOrGetter === \"function\"\n        ? parseDef(jsonSchemaOrGetter(), refs)\n        : jsonSchemaOrGetter;\n    if (jsonSchema) {\n        addMeta(def, refs, jsonSchema);\n    }\n    if (refs.postProcess) {\n        const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n        newItem.jsonSchema = jsonSchema;\n        return postProcessResult;\n    }\n    newItem.jsonSchema = jsonSchema;\n    return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n    switch (refs.$refStrategy) {\n        case \"root\":\n            return { $ref: item.path.join(\"/\") };\n        case \"relative\":\n            return { $ref: getRelativePath(refs.currentPath, item.path) };\n        case \"none\":\n        case \"seen\": {\n            if (item.path.length < refs.currentPath.length &&\n                item.path.every((value, index) => refs.currentPath[index] === value)) {\n                console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n                return parseAnyDef(refs);\n            }\n            return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n        }\n    }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n    if (def.description) {\n        jsonSchema.description = def.description;\n        if (refs.markdownDescription) {\n            jsonSchema.markdownDescription = def.description;\n        }\n    }\n    return jsonSchema;\n};\n", "import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n    const refs = getRefs(options);\n    let definitions = typeof options === \"object\" && options.definitions\n        ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n            ...acc,\n            [name]: parseDef(schema._def, {\n                ...refs,\n                currentPath: [...refs.basePath, refs.definitionPath, name],\n            }, true) ?? parseAnyDef(refs),\n        }), {})\n        : undefined;\n    const name = typeof options === \"string\"\n        ? options\n        : options?.nameStrategy === \"title\"\n            ? undefined\n            : options?.name;\n    const main = parseDef(schema._def, name === undefined\n        ? refs\n        : {\n            ...refs,\n            currentPath: [...refs.basePath, refs.definitionPath, name],\n        }, false) ?? parseAnyDef(refs);\n    const title = typeof options === \"object\" &&\n        options.name !== undefined &&\n        options.nameStrategy === \"title\"\n        ? options.name\n        : undefined;\n    if (title !== undefined) {\n        main.title = title;\n    }\n    if (refs.flags.hasReferencedOpenAiAnyType) {\n        if (!definitions) {\n            definitions = {};\n        }\n        if (!definitions[refs.openAiAnyTypeName]) {\n            definitions[refs.openAiAnyTypeName] = {\n                // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n                type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n                items: {\n                    $ref: refs.$refStrategy === \"relative\"\n                        ? \"1\"\n                        : [\n                            ...refs.basePath,\n                            refs.definitionPath,\n                            refs.openAiAnyTypeName,\n                        ].join(\"/\"),\n                },\n            };\n        }\n    }\n    const combined = name === undefined\n        ? definitions\n            ? {\n                ...main,\n                [refs.definitionPath]: definitions,\n            }\n            : main\n        : {\n            $ref: [\n                ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n                refs.definitionPath,\n                name,\n            ].join(\"/\"),\n            [refs.definitionPath]: {\n                ...definitions,\n                [name]: main,\n            },\n        };\n    if (refs.target === \"jsonSchema7\") {\n        combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n        combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n    }\n    if (refs.target === \"openAi\" &&\n        (\"anyOf\" in combined ||\n            \"oneOf\" in combined ||\n            \"allOf\" in combined ||\n            (\"type\" in combined && Array.isArray(combined.type)))) {\n        console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n    }\n    return combined;\n};\nexport { zodToJsonSchema };\n", null, null, null, null, null, null, null, null, null, null, null, null, null, "import { McpServer, ResourceTemplate } from \"@modelcontextprotocol/sdk/server/mcp.js\";\r\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\r\nimport * as http from \"http\";\r\nimport { z } from \"zod\";\r\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\r\nimport { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\r\nimport { randomUUID } from \"crypto\";\r\nimport { DedicatedServerStatus } from \"./DedicatedServer\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport Log from \"../core/Log\";\r\nimport HttpUtilities from \"./HttpUtilities\";\r\nimport CreatorTools from \"../app/CreatorTools\";\r\nimport Database from \"../minecraft/Database\";\r\nimport DataFormZod from \"../dataform/DataFormZod\";\r\nimport ServerManager from \"./ServerManager\";\r\nimport LocalEnvironment from \"./LocalEnvironment\";\r\nimport { IMinecraftStartMessage } from \"../app/IMinecraftStartMessage\";\r\nimport { DedicatedServerMode } from \"../app/ICreatorToolsData\";\r\nimport { Difficulty, GameType, Generator, PlayerPermissionsLevel } from \"../minecraft/WorldLevelDat\";\r\nimport { IPackageReference, IWorldSettings } from \"../minecraft/IWorldSettings\";\r\nimport IStatus, { StatusType } from \"../app/Status\";\r\nimport Package from \"../app/Package\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IVector3 from \"../minecraft/IVector3\";\r\nimport Project from \"../app/Project\";\r\nimport IGalleryItem from \"../app/IGalleryItem\";\r\nimport ProjectExporter from \"../app/ProjectExporter\";\r\nimport ProjectUtilities from \"../app/ProjectUtilities\";\r\nimport ProjectItemCreateManager from \"../app/ProjectItemCreateManager\";\r\nimport ClUtils from \"../cli/ClUtils\";\r\nimport { CommandContextFactory } from \"../cli/core/CommandContextFactory\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ModelDesignUtilities from \"../minecraft/ModelDesignUtilities\";\r\nimport { IMcpModelDesign } from \"../minecraft/IMcpModelDesign\";\r\nimport { ModelTemplateType, getAvailableTemplateTypes, getModelTemplateAsync } from \"../minecraft/ModelDesignTemplates\";\r\nimport StructureUtilities from \"../minecraft/StructureUtilities\";\r\nimport { IBlockVolume } from \"../minecraft/IBlockVolume\";\r\nimport { MinecraftContentSchema } from \"../minecraft/ContentMetaSchemaZod\";\r\nimport { ContentGenerator } from \"../minecraft/ContentGenerator\";\r\nimport ContentSchemaInferrer, { IInferrerOptions } from \"../minecraft/ContentSchemaInferrer\";\r\nimport PlaywrightPageRenderer from \"./PlaywrightPageRenderer\";\r\nimport ImageGenerationUtilities from \"./ImageGenerationUtilities\";\r\nimport { ServerManagerFeatures } from \"./ServerManager\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport ModelDesignDefinition from \"../design/ModelDesignDefinition\";\r\nimport StructureDesignDefinition from \"../design/StructureDesignDefinition\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport { initializeToolCommands } from \"../app/toolcommands\";\r\nimport { registerNodeOnlyCommands } from \"../app/toolcommands/registerNodeCommands\";\r\n\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport * as net from \"net\";\r\nimport { PNG } from \"pngjs\";\r\nimport { UNSAFE_PORTS } from \"./LocalUtilities\";\r\n\r\n/**\r\n * Interface for MCT MCP preferences that can be stored in .mct/mcp/prefs.json files.\r\n * These preferences control security and feature flags for MCP operations.\r\n */\r\nexport interface IMctMcpPrefs {\r\n  /** If true, allows the readImageFile tool to read image files from this folder and its subfolders */\r\n  allowImageFileReadsInDescendentFolders?: boolean;\r\n  /** If true, allows the writeImageFile tool to write image files to this folder and its subfolders */\r\n  allowImageFileWritesInDescendentFolders?: boolean;\r\n}\r\n\r\n/**\r\n * Cached MCP preferences, keyed by the folder path where the prefs.json was found.\r\n * This allows us to load prefs only once per session for each unique folder.\r\n */\r\ninterface IMctMcpPrefsCache {\r\n  [folderPath: string]: IMctMcpPrefs;\r\n}\r\n\r\n/**\r\n * Maps a user-facing session name (e.g., \"default\", \"myTestWorld\") to a BDS slot number.\r\n * This allows MCP tools to route commands to the correct server instance.\r\n */\r\ninterface ISessionInfo {\r\n  /** The BDS slot number (0-79) backing this named session */\r\n  slot: number;\r\n  /** Optional description provided when the session was connected/created */\r\n  description?: string;\r\n}\r\n\r\nexport default class MinecraftMcpServer {\r\n  /** Starting port for the internal HTTP server range */\r\n  private static readonly PORT_RANGE_START = 6136;\r\n  /** Ending port for the internal HTTP server range (200 ports available) */\r\n  private static readonly PORT_RANGE_END = 6336;\r\n  /** Maximum attempts to find an available port before giving up */\r\n  private static readonly PORT_MAX_ATTEMPTS = 20;\r\n\r\n  private _server: McpServer;\r\n  private _env: LocalEnvironment | undefined = undefined;\r\n  /** Single HTTP transport instance. Created once in startHttp() and reused for all requests. */\r\n  private _httpTransport: StreamableHTTPServerTransport | undefined = undefined;\r\n  private _creatorTools: CreatorTools | undefined = undefined;\r\n\r\n  private _serverManager: ServerManager | undefined;\r\n\r\n  /** Cache for loaded MCP preferences, keyed by folder path where prefs.json was found */\r\n  private _mcpPrefsCache: IMctMcpPrefsCache = {};\r\n\r\n  /** Folders we've already checked and found no prefs.json (negative cache) */\r\n  private _mcpPrefsNotFoundFolders: Set<string> = new Set();\r\n\r\n  /** HTTP server port for model preview rendering (dynamically assigned on startup) */\r\n  private _previewServerPort: number = MinecraftMcpServer.PORT_RANGE_START;\r\n\r\n  /**\r\n   * Cached PlaywrightPageRenderer for reuse across preview operations.\r\n   *\r\n   * TODO: The renderer init/health-check/reinit boilerplate is duplicated ~4 times\r\n   * in this file (preview_model, preview_volume, preview_structure, screenshot).\r\n   * Extract into a shared `ensureRendererReady(baseUrl, httpServer)` method.\r\n   */\r\n  private _cachedRenderer: PlaywrightPageRenderer | undefined;\r\n\r\n  /** Flag to prevent multiple cleanup calls */\r\n  private _cleaningUp: boolean = false;\r\n\r\n  /**\r\n   * Maps user-facing session names to BDS slot numbers.\r\n   * The \"default\" session is auto-registered when `mct serve` starts BDS on slot 0.\r\n   * Additional sessions can be created via createMinecraftSessionWithContent or\r\n   * connected to existing slots via connectToMinecraftSession.\r\n   */\r\n  private _sessions: { [name: string]: ISessionInfo } = {};\r\n\r\n  /**\r\n   * Working folder path for MCP operations.\r\n   * When set via the -i argument, this folder is used as the default context for\r\n   * file operations and is exposed to AI assistants via the MCP protocol's prompts.\r\n   */\r\n  private _workingFolder: string | undefined = undefined;\r\n\r\n  /** Getter for the working folder */\r\n  get workingFolder(): string | undefined {\r\n    return this._workingFolder;\r\n  }\r\n\r\n  constructor() {\r\n    this._server = new McpServer({\r\n      name: \"minecraft-creator-tools\",\r\n      version: \"1.0.0\",\r\n    });\r\n\r\n    this._processValidateContent = this._processValidateContent.bind(this);\r\n    this._processValidateContentAtPath = this._processValidateContentAtPath.bind(this);\r\n    this._runActionSet = this._runActionSet.bind(this);\r\n    this._moveSessionPlayerToLocation = this._moveSessionPlayerToLocation.bind(this);\r\n    this._sessionOp = this._sessionOp.bind(this);\r\n    this._runActionSetOp = this._runActionSetOp.bind(this);\r\n    this._createOp = this._createOp.bind(this);\r\n    this._addOp = this._addOp.bind(this);\r\n    this._createMinecraftSession = this._createMinecraftSession.bind(this);\r\n    this._runCommandOp = this._runCommandOp.bind(this);\r\n    this._readImageFileOp = this._readImageFileOp.bind(this);\r\n    this._writeImageFileFromBase64Op = this._writeImageFileFromBase64Op.bind(this);\r\n    this._writeImageFileFromSvgOp = this._writeImageFileFromSvgOp.bind(this);\r\n    this._writeImageFileFromPixelArtOp = this._writeImageFileFromPixelArtOp.bind(this);\r\n    this._designModelOp = this._designModelOp.bind(this);\r\n    this._designStructureOp = this._designStructureOp.bind(this);\r\n    this._createMinecraftContentOp = this._createMinecraftContentOp.bind(this);\r\n    this._getEffectiveContentSchemaOp = this._getEffectiveContentSchemaOp.bind(this);\r\n    this._listMinecraftSessionsOp = this._listMinecraftSessionsOp.bind(this);\r\n    this._connectToMinecraftSessionOp = this._connectToMinecraftSessionOp.bind(this);\r\n  }\r\n\r\n  /**\r\n   * Wrapper for McpServer.registerTool that avoids TS2589 \"Type instantiation is\r\n   * excessively deep and possibly infinite\" caused by the SDK's complex generic\r\n   * inference on ToolCallback<InputArgs>. Casts the callback to `any` to break the\r\n   * recursive type chain while preserving runtime behavior.\r\n   */\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  private _registerTool(name: string, config: Record<string, any>, cb: (...args: any[]) => any): void {\r\n    this._server.registerTool(name, config as any, cb as any);\r\n  }\r\n\r\n  /**\r\n   * Ensures a ServerManager instance is available, creating one if needed.\r\n   * If a ServerManager was provided externally (e.g., from HttpServer in `mct serve` mode),\r\n   * it will be reused. Otherwise, a new one is created with the \"mcp\" slot prefix\r\n   * to isolate MCP servers from other contexts.\r\n   */\r\n  private ensureServerManager(): ServerManager {\r\n    if (!this._env || !this._creatorTools) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    if (!this._serverManager) {\r\n      this._serverManager = new ServerManager(this._env, this._creatorTools);\r\n      // Use \"mcp\" prefix to isolate MCP server slots from other contexts (serve, vscode)\r\n      this._serverManager.slotPrefix = \"mcp\";\r\n    }\r\n\r\n    return this._serverManager;\r\n  }\r\n\r\n  /**\r\n   * Resolve a session name to a slot number.\r\n   * - If sessionName is empty/undefined or \"default\", returns slot 0 (the default session).\r\n   * - Otherwise, looks up the session in the registered sessions map.\r\n   * - Throws if the session name is not found.\r\n   */\r\n  private _resolveSlot(sessionName?: string): number {\r\n    if (!sessionName || sessionName === \"default\") {\r\n      return 0;\r\n    }\r\n\r\n    const info = this._sessions[sessionName];\r\n    if (info !== undefined) {\r\n      return info.slot;\r\n    }\r\n\r\n    throw new Error(\r\n      `Unknown session \"${sessionName}\". Use listMinecraftSessions to discover sessions or connectToMinecraftSession to register one.`\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Handle an incoming HTTP request by delegating to the single transport.\r\n   *\r\n   * Architecture: We use one StreamableHTTPServerTransport created in startHttp()\r\n   * and connected once to the McpServer. The transport handles session management,\r\n   * initialization, and request routing internally. This avoids the SDK limitation\r\n   * where registerCapabilities() cannot be called after connect().\r\n   *\r\n   * For POST requests, we pre-parse the body since Node's http.IncomingMessage\r\n   * doesn't auto-parse JSON (unlike Express). The parsed body is passed to\r\n   * transport.handleRequest() so it doesn't try to re-parse.\r\n   */\r\n  async handleRequest(req: http.IncomingMessage, res: http.ServerResponse<http.IncomingMessage>) {\r\n    if (!this._httpTransport) {\r\n      this.sendErrorRequest(503, \"MCP server transport not initialized\", req, res);\r\n      return;\r\n    }\r\n\r\n    if (req.method === \"POST\") {\r\n      const body: Buffer[] = [];\r\n      req.on(\"data\", (chunk: Buffer) => {\r\n        body.push(chunk);\r\n      });\r\n\r\n      req.on(\"end\", async () => {\r\n        try {\r\n          if (body.length < 1) {\r\n            this.sendErrorRequest(400, \"Empty request body\", req, res);\r\n            return;\r\n          }\r\n\r\n          // Parse body as JSON before passing to the transport.\r\n          // The MCP SDK expects a parsed object, not a raw Buffer.\r\n          // (Express does this automatically via express.json() middleware;\r\n          // we must do it manually with Node's raw http server.)\r\n          let parsedBody: unknown;\r\n          try {\r\n            parsedBody = JSON.parse(Buffer.concat(body).toString());\r\n          } catch {\r\n            this.sendErrorRequest(400, \"Invalid JSON in request body\", req, res);\r\n            return;\r\n          }\r\n\r\n          await this._httpTransport!.handleRequest(req, res, parsedBody);\r\n        } catch (e: any) {\r\n          Log.debug(\"Error handling MCP POST request: \" + (e?.message || e));\r\n          if (!res.headersSent) {\r\n            this.sendErrorRequest(500, \"Internal server error processing MCP request\", req, res);\r\n          }\r\n        }\r\n      });\r\n    } else if (req.method === \"GET\" || req.method === \"DELETE\") {\r\n      // GET (SSE streams) and DELETE (session termination) are forwarded directly\r\n      // to the transport which handles session validation internally.\r\n      try {\r\n        await this._httpTransport.handleRequest(req, res);\r\n      } catch (e: any) {\r\n        Log.debug(\"Error handling MCP \" + req.method + \" request: \" + (e?.message || e));\r\n        if (!res.headersSent) {\r\n          this.sendErrorRequest(500, \"Internal server error processing MCP request\", req, res);\r\n        }\r\n      }\r\n    } else {\r\n      this.sendErrorRequest(405, \"Method not allowed\", req, res);\r\n    }\r\n  }\r\n\r\n  sendErrorRequest(statusCode: number, message: string, req: http.IncomingMessage, res: http.ServerResponse) {\r\n    Log.message(HttpUtilities.getShortReqDescription(req) + \"Error request: \" + message);\r\n\r\n    if (!res.headersSent) {\r\n      res.writeHead(statusCode);\r\n    }\r\n    res.end(message);\r\n  }\r\n\r\n  /**\r\n   * Finds MCP preferences for a given file path by looking for .mct/mcp/prefs.json\r\n   * in the file's parent folder and up to 11 levels of parent folders.\r\n   * Results are cached per session to avoid redundant file system reads.\r\n   *\r\n   * @param filePath The absolute path to the file being accessed\r\n   * @returns The MCP preferences if found, or undefined if no prefs.json exists`\r\n   */\r\n  getMcpPrefsForPath(filePath: string): IMctMcpPrefs | undefined {\r\n    const normalizedPath = path.normalize(filePath);\r\n    let currentDir = path.dirname(normalizedPath);\r\n\r\n    // Check up to 11 levels (current parent + 10 ancestors)\r\n    for (let i = 0; i < 10; i++) {\r\n      // Check if we've already found prefs for this folder\r\n      if (this._mcpPrefsCache[currentDir]) {\r\n        return this._mcpPrefsCache[currentDir];\r\n      }\r\n\r\n      // Check if we've already determined there are no prefs in this folder\r\n      if (this._mcpPrefsNotFoundFolders.has(currentDir)) {\r\n        // Continue to parent folder\r\n        const parentDir = path.dirname(currentDir);\r\n        if (parentDir === currentDir) {\r\n          // Reached root\r\n          break;\r\n        }\r\n        currentDir = parentDir;\r\n        continue;\r\n      }\r\n\r\n      // Look for .mct/mcp/prefs.json in this folder\r\n      const prefsPath = path.join(currentDir, \".mct\", \"mcp\", \"prefs.json\");\r\n\r\n      if (fs.existsSync(prefsPath)) {\r\n        try {\r\n          const prefsContent = fs.readFileSync(prefsPath, \"utf-8\");\r\n          const prefs: IMctMcpPrefs = JSON.parse(prefsContent);\r\n          // Cache the prefs for this folder\r\n          this._mcpPrefsCache[currentDir] = prefs;\r\n          return prefs;\r\n        } catch (error) {\r\n          Log.debugAlert(`Failed to parse MCP prefs at ${prefsPath}: ${error}`);\r\n          // Mark as not found so we don't keep trying to parse a malformed file\r\n          this._mcpPrefsNotFoundFolders.add(currentDir);\r\n        }\r\n      } else {\r\n        // Mark this folder as checked (no prefs found)\r\n        this._mcpPrefsNotFoundFolders.add(currentDir);\r\n      }\r\n\r\n      // Move to parent folder\r\n      const parentDir = path.dirname(currentDir);\r\n      if (parentDir === currentDir) {\r\n        // Reached root\r\n        break;\r\n      }\r\n      currentDir = parentDir;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Checks if a specific MCP preference flag is enabled for a given file path.\r\n   *\r\n   * @param filePath The absolute path to the file being accessed\r\n   * @param prefKey The preference key to check\r\n   * @returns true if the preference is explicitly set to true, false otherwise\r\n   */\r\n  isMcpPrefEnabled(filePath: string, prefKey: keyof IMctMcpPrefs): boolean {\r\n    const prefs = this.getMcpPrefsForPath(filePath);\r\n    if (!prefs) {\r\n      return false;\r\n    }\r\n    return prefs[prefKey] === true;\r\n  }\r\n\r\n  /**\r\n   * Validates that a file path is safe for MCP operations.\r\n   * Ensures the path doesn't use traversal sequences and that the resolved path\r\n   * stays within the directory tree authorized by the prefs.json file.\r\n   */\r\n  private _validateMcpFilePath(filePath: string): { valid: boolean; error?: string } {\r\n    if (!filePath) {\r\n      return { valid: false, error: \"File path is required.\" };\r\n    }\r\n\r\n    // Reject null bytes\r\n    if (filePath.includes(\"\\0\")) {\r\n      return { valid: false, error: \"File path contains invalid characters.\" };\r\n    }\r\n\r\n    // Resolve to absolute and normalize\r\n    const resolved = path.resolve(filePath);\r\n\r\n    // Reject if the resolved path differs from the normalized input in a way that indicates traversal.\r\n    // path.resolve handles ../  but we also explicitly reject the sequences.\r\n    const normalized = path.normalize(filePath);\r\n    if (normalized.includes(\"..\")) {\r\n      return { valid: false, error: \"File path must not contain directory traversal sequences (..).\" };\r\n    }\r\n\r\n    // Reject symlinks on the parent directory to prevent symlink-based escapes\r\n    const parentDir = path.dirname(resolved);\r\n    try {\r\n      if (fs.existsSync(parentDir)) {\r\n        const realParent = fs.realpathSync(parentDir);\r\n        if (realParent !== parentDir) {\r\n          return {\r\n            valid: false,\r\n            error: \"File path parent directory resolves through a symlink, which is not allowed.\",\r\n          };\r\n        }\r\n      }\r\n    } catch {\r\n      // If we can't check, allow -- the subsequent fs operations will fail naturally\r\n    }\r\n\r\n    return { valid: true };\r\n  }\r\n\r\n  /**\r\n   * Validates an MCP file path and returns an error CallToolResult if invalid,\r\n   * or undefined if the path is safe. Use as an early-return guard in MCP tool handlers.\r\n   */\r\n  private _checkMcpFilePath(filePath: string): CallToolResult | undefined {\r\n    const pathCheck = this._validateMcpFilePath(filePath);\r\n    if (!pathCheck.valid) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error: ${pathCheck.error}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  async _processValidateContent(args: { jsonContentOrBase64ZipContent: string }): Promise<CallToolResult> {\r\n    if (!this._creatorTools) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    const projectOrError = await this._creatorTools.createProjectFromContent(args.jsonContentOrBase64ZipContent);\r\n\r\n    if (!projectOrError || typeof projectOrError === \"string\") {\r\n      throw new Error(\r\n        \"Failed to create project. Was the content a valid Base64-encoded ZIP file?\" +\r\n          (typeof projectOrError === \"string\" ? \" Error: \" + projectOrError : \"\")\r\n      );\r\n    }\r\n\r\n    const pis = projectOrError.indevInfoSet;\r\n\r\n    await pis.generateForProject();\r\n\r\n    const resultObject = pis.getDataObject(undefined, undefined, undefined);\r\n\r\n    return {\r\n      content: [{ type: \"text\", text: JSON.stringify(resultObject, null, 2) }],\r\n      structuredContent: { info: resultObject },\r\n    };\r\n  }\r\n\r\n  async _sessionOp(args: { sessionName: string }): Promise<CallToolResult> {\r\n    return {\r\n      content: [{ type: \"text\", text: \"Successfully completed\" }],\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Lists all Minecraft sessions \u2014 both registered named sessions and any\r\n   * active BDS slots discovered via the ServerManager.\r\n   */\r\n  async _listMinecraftSessionsOp(): Promise<CallToolResult> {\r\n    if (!this._creatorTools || !this._env) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    const serverManager = this.ensureServerManager();\r\n    const activeSlots = serverManager.getActiveSlots();\r\n\r\n    // Build a merged view: named sessions + any unnamed active slots\r\n    const sessions: {\r\n      name: string;\r\n      slot: number;\r\n      port: number;\r\n      status: string;\r\n    }[] = [];\r\n\r\n    // Emit all named sessions\r\n    for (const name of Object.keys(this._sessions)) {\r\n      const info = this._sessions[name];\r\n      const slot = info.slot;\r\n      const port = MinecraftUtilities.getPortForSlot(slot);\r\n      const server = serverManager.getActiveServer(slot);\r\n      const status = server ? DedicatedServerStatus[server.status] : \"stopped\";\r\n      sessions.push({ name, slot, port, status });\r\n    }\r\n\r\n    // Discover active slots that have no name registered\r\n    const namedSlots = new Set(Object.values(this._sessions).map((s) => s.slot));\r\n    for (const slot of activeSlots) {\r\n      if (!namedSlots.has(slot)) {\r\n        const port = MinecraftUtilities.getPortForSlot(slot);\r\n        const server = serverManager.getActiveServer(slot);\r\n        const status = server ? DedicatedServerStatus[server.status] : \"stopped\";\r\n        sessions.push({ name: `(unnamed slot ${slot})`, slot, port, status });\r\n      }\r\n    }\r\n\r\n    return {\r\n      content: [{ type: \"text\", text: JSON.stringify(sessions, null, 2) }],\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Registers an existing BDS slot as a named session so that subsequent\r\n   * tool calls can reference it by name.\r\n   */\r\n  async _connectToMinecraftSessionOp(args: { sessionName: string; slot?: number }): Promise<CallToolResult> {\r\n    if (!this._creatorTools || !this._env) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    const slot = args.slot ?? 0;\r\n    const serverManager = this.ensureServerManager();\r\n    const server = serverManager.getActiveServer(slot);\r\n\r\n    if (!server) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text:\r\n              `No active server found on slot ${slot} (port ${MinecraftUtilities.getPortForSlot(slot)}). ` +\r\n              `Use listMinecraftSessions to see active slots, or createMinecraftSessionWithContent to start a new one.`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    this._sessions[args.sessionName] = { slot, description: `Connected to existing slot ${slot}` };\r\n\r\n    const status = DedicatedServerStatus[server.status];\r\n    return {\r\n      content: [\r\n        {\r\n          type: \"text\",\r\n          text: `Session \"${args.sessionName}\" registered on slot ${slot} (port ${MinecraftUtilities.getPortForSlot(slot)}, status: ${status}).`,\r\n        },\r\n      ],\r\n    };\r\n  }\r\n\r\n  async _moveSessionPlayerToLocation(args: {\r\n    sessionName: string;\r\n    playerName: string;\r\n    locationToHavePlayerMoveTo: IVector3;\r\n  }): Promise<CallToolResult> {\r\n    const slot = this._resolveSlot(args.sessionName);\r\n\r\n    let result = await this._runActionSet(\r\n      {\r\n        name: \"Test Player Move Action Set\",\r\n        targetType: 1,\r\n        actions: [\r\n          {\r\n            type: \"test_simulated_player_move\",\r\n            name: args.playerName,\r\n            location: [\r\n              args.locationToHavePlayerMoveTo.x,\r\n              args.locationToHavePlayerMoveTo.y,\r\n              args.locationToHavePlayerMoveTo.z,\r\n            ],\r\n          },\r\n        ],\r\n      },\r\n      slot\r\n    );\r\n\r\n    return {\r\n      content: [{ type: \"text\", text: \"Successfully moved player in session\" }],\r\n      structuredContent: { state: result ?? {} },\r\n    };\r\n  }\r\n\r\n  async _createMinecraftSession(args: {\r\n    sessionName: string;\r\n    packagedMcaddonOrMcworldFilePath: string;\r\n    testPlayerNameToUse: string;\r\n  }): Promise<CallToolResult> {\r\n    if (!this._creatorTools || !this._env) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    const serverManager = this.ensureServerManager();\r\n\r\n    await this._env.load();\r\n    await serverManager.prepare();\r\n\r\n    serverManager.ensureHttpServer(6128);\r\n\r\n    // Find the next free slot. If slot 0 is already occupied by an active server,\r\n    // pick the first unused slot so we don't clobber an existing session.\r\n    const activeSlots = new Set(serverManager.getActiveSlots());\r\n    const usedSlots = new Set(Object.values(this._sessions).map((s) => s.slot));\r\n    let targetSlot = 0;\r\n    while (activeSlots.has(targetSlot) || usedSlots.has(targetSlot)) {\r\n      targetSlot++;\r\n      if (targetSlot >= 80) {\r\n        throw new Error(\"No free server slots available (all 80 are in use).\");\r\n      }\r\n    }\r\n\r\n    const startMessage: IMinecraftStartMessage = {\r\n      mode: DedicatedServerMode.auto,\r\n      path: undefined,\r\n      additionalContentPath: args.packagedMcaddonOrMcworldFilePath,\r\n      forceStartNewWorld: true, // Always start with a fresh world for MCP sessions\r\n      worldSettings: this.getWorldSettings(),\r\n      transientWorld: true, // Mark as transient - world data is reset each deployment\r\n    };\r\n\r\n    let srvr = await serverManager.ensureActiveServer(targetSlot, startMessage);\r\n\r\n    if (srvr) {\r\n      await srvr.startServer(false, startMessage);\r\n      await srvr.waitUntilStarted();\r\n    }\r\n\r\n    // Register the newly created session\r\n    this._sessions[args.sessionName] = { slot: targetSlot, description: `Created with content` };\r\n\r\n    let result = await this._runActionSet(\r\n      {\r\n        name: \"Test Player Spawn Action Set\",\r\n        targetType: 1,\r\n        actions: [{ type: \"test_simulated_player_spawn\", name: args.testPlayerNameToUse, location: [0, 0, 0] }],\r\n      },\r\n      targetSlot\r\n    );\r\n\r\n    const port = MinecraftUtilities.getPortForSlot(targetSlot);\r\n    return {\r\n      content: [\r\n        {\r\n          type: \"text\",\r\n          text: `Successfully started session \"${args.sessionName}\" on slot ${targetSlot} (port ${port}).`,\r\n        },\r\n      ],\r\n      structuredContent: { state: result ?? {} },\r\n    };\r\n  }\r\n\r\n  async _runActionSet(actionSet: IActionSetData, slot?: number) {\r\n    let actionSetStr = JSON.stringify(actionSet);\r\n\r\n    actionSetStr = actionSetStr.replace(/\\\"/g, \"|\");\r\n\r\n    let token = Utilities.createRandomLowerId(6);\r\n\r\n    let result = await this.runCommand(\r\n      'scriptevent mct:actionset \"' + token + \"|\" + actionSetStr + '\"',\r\n      token + \"|\",\r\n      slot\r\n    );\r\n    if (result) {\r\n      let rasIndex = result.indexOf(\"ras|\");\r\n\r\n      if (rasIndex) {\r\n        let nextPipe = result.indexOf(\"|\", rasIndex + 5);\r\n\r\n        if (nextPipe >= 0) {\r\n          const resultJsonStr = result.substring(nextPipe + 1);\r\n\r\n          try {\r\n            const resultObject = JSON.parse(resultJsonStr);\r\n            return resultObject;\r\n          } catch (e) {\r\n            return undefined;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  getWorldSettings() {\r\n    let gt: GameType = GameType.survival;\r\n\r\n    let generator: Generator = Generator.infinite;\r\n\r\n    let difficulty: Difficulty = Difficulty.easy;\r\n\r\n    let randomSeed = \"2000\";\r\n\r\n    const packRefs: IPackageReference[] = [];\r\n\r\n    Package.ensureMinecraftCreatorToolsPackageReference(packRefs);\r\n\r\n    const worldSettings: IWorldSettings = {\r\n      gameType: gt,\r\n      generator: generator,\r\n      cheatsEnabled: true,\r\n      difficulty: difficulty,\r\n      playerPermissionLevel: PlayerPermissionsLevel.operator,\r\n      permissionLevel: PlayerPermissionsLevel.operator,\r\n      randomSeed: randomSeed,\r\n      packageReferences: packRefs,\r\n      worldTemplateReferences: undefined,\r\n    };\r\n\r\n    return worldSettings;\r\n  }\r\n\r\n  async _runActionSetOp(args: { actionSet?: any; sessionName?: string }): Promise<CallToolResult> {\r\n    if (!this._creatorTools || !this._env || !args.actionSet) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    const slot = this._resolveSlot(args.sessionName);\r\n    const serverManager = this.ensureServerManager();\r\n\r\n    let srvr = await serverManager.ensureActiveServer(slot);\r\n\r\n    if (srvr) {\r\n      await this._runActionSet(args.actionSet, slot);\r\n    }\r\n\r\n    return {\r\n      content: [{ type: \"text\", text: \"Successfully ran action set operation\" }],\r\n    };\r\n  }\r\n\r\n  async _runCommandOp(args: { sessionName: string; command: string }): Promise<CallToolResult> {\r\n    const slot = this._resolveSlot(args.sessionName);\r\n    let result = await this.runCommand(args.command, undefined, slot);\r\n    return {\r\n      content: [{ type: \"text\", text: result ? result : \"No result from command\" }],\r\n    };\r\n  }\r\n\r\n  async runCommand(command: string, token?: string, slot?: number): Promise<string | undefined> {\r\n    if (!this._creatorTools || !this._env) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    const serverManager = this.ensureServerManager();\r\n\r\n    let srvr = await serverManager.ensureActiveServer(slot ?? 0);\r\n\r\n    let result = undefined;\r\n\r\n    if (srvr) {\r\n      result = await srvr.runCommandImmediate(command, token);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  async _processValidateContentAtPath(args: { filePath: string }): Promise<CallToolResult> {\r\n    if (!this._creatorTools) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    const projectOrError = await this._creatorTools.createProjectFromPath(args.filePath);\r\n\r\n    if (!projectOrError || typeof projectOrError === \"string\") {\r\n      throw new Error(\r\n        \"Failed to create project. Was the content a valid Base64-encoded ZIP file?\" +\r\n          (typeof projectOrError === \"string\" ? \" Error: \" + projectOrError : \"\")\r\n      );\r\n    }\r\n\r\n    const pis = projectOrError.indevInfoSet;\r\n\r\n    await pis.generateForProject();\r\n\r\n    const resultObject = pis.getDataObject(undefined, undefined, undefined);\r\n\r\n    return {\r\n      content: [{ type: \"text\", text: JSON.stringify(resultObject, null, 2) }],\r\n      structuredContent: { info: resultObject },\r\n    };\r\n  }\r\n\r\n  async _create(\r\n    project: Project,\r\n    title: string,\r\n    description: string,\r\n    newName: string,\r\n    creator: string,\r\n    template: string\r\n  ) {\r\n    if (!this._env || !this._creatorTools) {\r\n      return;\r\n    }\r\n\r\n    await this._env.load();\r\n\r\n    if (!this._env.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula) {\r\n      Log.message(\"The Minecraft End User License Agreement and Privacy Statement was not agreed to.\");\r\n      return;\r\n    }\r\n\r\n    await this._creatorTools.loadGallery();\r\n\r\n    if (!this._creatorTools.gallery) {\r\n      Log.message(\"Not configured correctly to create a project (no gallery).\");\r\n      return;\r\n    }\r\n    const galProjects = this._creatorTools.gallery.items;\r\n    let galProject: IGalleryItem | undefined;\r\n\r\n    if (template) {\r\n      for (let i = 0; i < galProjects.length; i++) {\r\n        const galProjectCand = galProjects[i];\r\n        if (galProjectCand && galProjectCand.id && galProjectCand.id.toLowerCase() === template.toLowerCase()) {\r\n          galProject = galProjectCand;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!newName) {\r\n      Log.error(\"Not configured correctly to create a project.\");\r\n      return;\r\n    }\r\n\r\n    if (!galProject) {\r\n      Log.error(\"No project was selected.\");\r\n      return;\r\n    }\r\n\r\n    project = await ProjectExporter.syncProjectFromGitHub(\r\n      true,\r\n      this._creatorTools,\r\n      galProject.gitHubRepoName,\r\n      galProject.gitHubOwner,\r\n      galProject.gitHubBranch,\r\n      galProject.gitHubFolder,\r\n      newName,\r\n      project,\r\n      galProject.fileList,\r\n      async (message: string) => {\r\n        Log.message(message);\r\n      },\r\n      true\r\n    );\r\n\r\n    let suggestedShortName: string | undefined = undefined;\r\n\r\n    if (newName && creator) {\r\n      suggestedShortName = ProjectUtilities.getSuggestedProjectShortName(creator, newName);\r\n    }\r\n\r\n    if (creator) {\r\n      await ProjectUtilities.applyCreator(project, creator);\r\n    }\r\n\r\n    await ProjectUtilities.processNewProject(project, title, description, suggestedShortName, false);\r\n  }\r\n\r\n  async _add(project: Project, templateType: string, newName: string): Promise<boolean> {\r\n    if (!this._env || !this._creatorTools) {\r\n      Log.error(\"Not configured correctly to create a project (no mctools core).\");\r\n      return false;\r\n    }\r\n\r\n    await this._env.load();\r\n\r\n    if (!this._env.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula) {\r\n      Log.message(\"The Minecraft End User License Agreement and Privacy Statement was not agreed to.\");\r\n      return false;\r\n    }\r\n\r\n    await this._creatorTools.loadGallery();\r\n\r\n    if (!this._creatorTools.gallery) {\r\n      Log.message(\"Not configured correctly to add an item (no gallery).\");\r\n      return false;\r\n    }\r\n\r\n    if (templateType && newName) {\r\n      for (const galItem of this._creatorTools.gallery.items) {\r\n        if (galItem.id === templateType) {\r\n          await ProjectItemCreateManager.addFromGallery(project, newName, galItem);\r\n          await project.save();\r\n\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async _createOp(args: {\r\n    folderPathToCreateProjectAt: string;\r\n    title: string;\r\n    description?: string;\r\n    newName: string;\r\n    creator: string;\r\n    template:\r\n      | \"addonStarter\"\r\n      | \"tsStarter\"\r\n      | \"addonFull\"\r\n      | \"scriptBox\"\r\n      | \"dlStarter\"\r\n      | \"editor-scriptBox\"\r\n      | \"editor-basics\";\r\n  }): Promise<CallToolResult> {\r\n    if (!this._creatorTools) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    if (!fs.existsSync(args.folderPathToCreateProjectAt)) {\r\n      fs.mkdirSync(args.folderPathToCreateProjectAt, { recursive: true });\r\n    }\r\n\r\n    const project = ClUtils.createProject(this._creatorTools, {\r\n      ctorProjectName: args.newName,\r\n      localFolderPath: args.folderPathToCreateProjectAt,\r\n    });\r\n\r\n    await this._create(\r\n      project,\r\n      args.title,\r\n      args.description ? args.description : \"\",\r\n      args.newName,\r\n      args.creator,\r\n      args.template\r\n    );\r\n\r\n    return {\r\n      content: [{ type: \"text\", text: \"Created! Additional files were added to your project.\" }],\r\n    };\r\n  }\r\n\r\n  async _addOp(args: {\r\n    folderPathToCreateProjectAt: string;\r\n    templateType:\r\n      | \"basicUnitCubeBlock\"\r\n      | \"crateBlock\"\r\n      | \"basicDieBlock\"\r\n      | \"sushiRollBlock\"\r\n      | \"fishBowlBlock\"\r\n      | \"hardBiscuit\"\r\n      | \"pear\"\r\n      | \"elixir\"\r\n      | \"rod\"\r\n      | \"key\"\r\n      | \"customSword\"\r\n      | \"wrench\"\r\n      | \"allay\"\r\n      | \"axolotl\"\r\n      | \"cat\"\r\n      | \"cow\"\r\n      | \"creeper\"\r\n      | \"enderman\"\r\n      | \"rabbit\"\r\n      | \"pig\"\r\n      | \"sheep\"\r\n      | \"skeleton\"\r\n      | \"wolf\"\r\n      | \"zombie\"\r\n      | \"spawn_rule\"\r\n      | \"loot_table\"\r\n      | \"recipe_shapeless\"\r\n      | \"recipe_shaped\"\r\n      | \"feature_rule\"\r\n      | \"jigsaw\"\r\n      | \"atmospherics\"\r\n      | \"color_grading\"\r\n      | \"lighting\"\r\n      | \"pbr\"\r\n      | \"biome_behavior\"\r\n      | \"entity_behavior\"\r\n      | \"entity_resources\"\r\n      | \"item_behavior\"\r\n      | \"attachable\"\r\n      | \"block_behavior\"\r\n      | \"block_culling\"\r\n      | \"block_catalog\"\r\n      | \"biome_resource\"\r\n      | \"aggregate_feature\"\r\n      | \"animation\"\r\n      | \"animation_controller\"\r\n      | \"render_controller\";\r\n    name: string;\r\n  }): Promise<CallToolResult> {\r\n    if (!this._creatorTools) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    if (!fs.existsSync(args.folderPathToCreateProjectAt)) {\r\n      fs.mkdirSync(args.folderPathToCreateProjectAt, { recursive: true });\r\n    }\r\n\r\n    const project = ClUtils.createProject(this._creatorTools, {\r\n      ctorProjectName: args.name,\r\n      localFolderPath: args.folderPathToCreateProjectAt,\r\n    });\r\n\r\n    // Load existing project structure so that addFromGallery places files into\r\n    // the correct existing pack folders rather than creating new ones.\r\n    await project.inferProjectItemsFromFiles();\r\n\r\n    let result = await this._add(project, args.templateType, args.name);\r\n\r\n    if (!result) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"No items were added.\" }],\r\n      };\r\n    } else {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Additional items were added.\" }],\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Creates Minecraft content from a meta-schema definition.\r\n   * This is a simplified, AI-friendly format that generates all required files.\r\n   */\r\n  async _createMinecraftContentOp(args: {\r\n    definition: z.infer<typeof MinecraftContentSchema>;\r\n    outputPath: string;\r\n  }): Promise<CallToolResult> {\r\n    if (!this._creatorTools) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    try {\r\n      // Validate the definition\r\n      const parseResult = MinecraftContentSchema.safeParse(args.definition);\r\n      if (!parseResult.success) {\r\n        return {\r\n          content: [\r\n            {\r\n              type: \"text\",\r\n              text: `Validation error: ${parseResult.error.errors\r\n                .map((e) => `${e.path.join(\".\")}: ${e.message}`)\r\n                .join(\", \")}`,\r\n            },\r\n          ],\r\n        };\r\n      }\r\n\r\n      // Generate the content\r\n      const generator = new ContentGenerator(parseResult.data as any);\r\n      const generated = await generator.generate();\r\n\r\n      // Resolve where artifacts should actually land. The user may have passed a\r\n      // folder that's inside an existing project, a newly-created empty folder, or\r\n      // a folder that already has unrelated content. See _resolveProjectRoot for\r\n      // the heuristic.\r\n      const resolved = MinecraftMcpServer._resolveProjectRoot(args.outputPath, {\r\n        namespace: parseResult.data.namespace,\r\n        displayName: parseResult.data.displayName,\r\n      });\r\n      const projectRoot = resolved.root;\r\n\r\n      // Ensure the resolved project root exists\r\n      if (!fs.existsSync(projectRoot)) {\r\n        fs.mkdirSync(projectRoot, { recursive: true });\r\n      }\r\n\r\n      const namespace = parseResult.data.namespace || \"custom\";\r\n\r\n      // Detect existing pack folders so we can reuse them instead of creating duplicates.\r\n      // If a project was previously created (e.g., via createProject), use the first existing\r\n      // behavior/resource pack folder rather than creating a new namespace-based one.\r\n      let bpBasePath = path.join(projectRoot, \"behavior_packs\", namespace);\r\n      let rpBasePath = path.join(projectRoot, \"resource_packs\", namespace);\r\n\r\n      const existingBpFolder = MinecraftMcpServer._findExistingPackFolder(path.join(projectRoot, \"behavior_packs\"));\r\n      const existingRpFolder = MinecraftMcpServer._findExistingPackFolder(path.join(projectRoot, \"resource_packs\"));\r\n\r\n      if (existingBpFolder) {\r\n        bpBasePath = existingBpFolder;\r\n      }\r\n      if (existingRpFolder) {\r\n        rpBasePath = existingRpFolder;\r\n      }\r\n\r\n      // Write generated files\r\n      const filesWritten: string[] = [];\r\n\r\n      // Helper to write files\r\n      const writeFile = (file: { path: string; pack: string; type: string; content: object | string | Uint8Array }) => {\r\n        let basePath = projectRoot;\r\n        if (file.pack === \"behavior\") {\r\n          basePath = bpBasePath;\r\n        } else if (file.pack === \"resource\") {\r\n          basePath = rpBasePath;\r\n        }\r\n\r\n        const fullPath = path.resolve(basePath, file.path);\r\n        const resolvedOutputPath = path.resolve(projectRoot);\r\n\r\n        // Prevent path traversal: ensure the resolved path stays within the output directory\r\n        if (!fullPath.startsWith(resolvedOutputPath + path.sep) && fullPath !== resolvedOutputPath) {\r\n          Log.error(\"Skipping file with path traversal outside output directory: \" + file.path);\r\n          return;\r\n        }\r\n\r\n        const dirPath = path.dirname(fullPath);\r\n\r\n        if (!fs.existsSync(dirPath)) {\r\n          fs.mkdirSync(dirPath, { recursive: true });\r\n        }\r\n\r\n        // Do not overwrite files that already exist (e.g., files created by\r\n        // designModel or manually by the user). Only write new files.\r\n        if (fs.existsSync(fullPath)) {\r\n          return;\r\n        }\r\n\r\n        if (file.type === \"json\") {\r\n          fs.writeFileSync(fullPath, JSON.stringify(file.content, null, 2), \"utf-8\");\r\n        } else if (file.type === \"text\") {\r\n          fs.writeFileSync(fullPath, file.content as string, \"utf-8\");\r\n        } else if (file.type === \"png\") {\r\n          // Handle both Uint8Array (from ContentGenerator) and base64 string\r\n          if (file.content instanceof Uint8Array) {\r\n            fs.writeFileSync(fullPath, Buffer.from(file.content));\r\n          } else {\r\n            fs.writeFileSync(fullPath, Buffer.from(file.content as string, \"base64\"));\r\n          }\r\n        }\r\n\r\n        filesWritten.push(fullPath);\r\n      };\r\n\r\n      // Write all generated files \u2014 but preserve existing manifest UUIDs\r\n      // and merge texture atlas files rather than overwriting them.\r\n      if (generated.behaviorPackManifest) {\r\n        MinecraftMcpServer._writeManifestPreservingUuids(bpBasePath, generated.behaviorPackManifest, filesWritten);\r\n      }\r\n      if (generated.resourcePackManifest) {\r\n        MinecraftMcpServer._writeManifestPreservingUuids(rpBasePath, generated.resourcePackManifest, filesWritten);\r\n      }\r\n\r\n      for (const file of generated.entityBehaviors) writeFile(file);\r\n      for (const file of generated.entityResources) writeFile(file);\r\n      for (const file of generated.blockBehaviors) writeFile(file);\r\n      for (const file of generated.blockResources) writeFile(file);\r\n      for (const file of generated.itemBehaviors) writeFile(file);\r\n      for (const file of generated.itemResources) writeFile(file);\r\n      for (const file of generated.lootTables) writeFile(file);\r\n      for (const file of generated.recipes) writeFile(file);\r\n      for (const file of generated.spawnRules) writeFile(file);\r\n      for (const file of generated.features) writeFile(file);\r\n      for (const file of generated.featureRules) writeFile(file);\r\n      for (const file of generated.textures) writeFile(file);\r\n      for (const file of generated.geometries) writeFile(file);\r\n      for (const file of generated.renderControllers) writeFile(file);\r\n\r\n      // Merge singleton resource pack files: these are pack-wide catalogs where\r\n      // each MCP call should ADD entries rather than overwrite the entire file.\r\n      if (generated.terrainTextures) {\r\n        MinecraftMcpServer._writeSingletonJsonMerging(rpBasePath, generated.terrainTextures, filesWritten);\r\n      }\r\n      if (generated.itemTextures) {\r\n        MinecraftMcpServer._writeSingletonJsonMerging(rpBasePath, generated.itemTextures, filesWritten);\r\n      }\r\n      if (generated.blocksCatalog) {\r\n        MinecraftMcpServer._writeSingletonJsonMerging(rpBasePath, generated.blocksCatalog, filesWritten);\r\n      }\r\n      if (generated.soundDefinitions) {\r\n        MinecraftMcpServer._writeSingletonJsonMerging(rpBasePath, generated.soundDefinitions, filesWritten);\r\n      }\r\n      if (generated.musicDefinitions) {\r\n        MinecraftMcpServer._writeSingletonJsonMerging(rpBasePath, generated.musicDefinitions, filesWritten);\r\n      }\r\n\r\n      // Also merge any items in the sounds array that target singleton files\r\n      for (const file of generated.sounds) {\r\n        MinecraftMcpServer._writeSingletonJsonMerging(rpBasePath, file, filesWritten);\r\n      }\r\n\r\n      // Build summary\r\n      const summary = generated.summary;\r\n      let summaryText = `Generated ${filesWritten.length} files for namespace \"${summary.namespace}\":\\n`;\r\n      summaryText += `- ${summary.entityCount} entity types\\n`;\r\n      summaryText += `- ${summary.blockCount} block types\\n`;\r\n      summaryText += `- ${summary.itemCount} item types\\n`;\r\n      summaryText += `- ${summary.lootTableCount} loot tables\\n`;\r\n      summaryText += `- ${summary.recipeCount} recipes\\n`;\r\n      summaryText += `- ${summary.spawnRuleCount} spawn rules\\n`;\r\n      summaryText += `- ${summary.featureCount} features\\n`;\r\n      summaryText += `\\nProject root: ${projectRoot}\\n(${resolved.reason})\\n`;\r\n\r\n      if (summary.warnings.length > 0) {\r\n        summaryText += `\\nWarnings:\\n${summary.warnings.map((w) => `- ${w}`).join(\"\\n\")}`;\r\n      }\r\n\r\n      if (summary.errors.length > 0) {\r\n        summaryText += `\\nErrors:\\n${summary.errors.map((e) => `- ${e}`).join(\"\\n\")}`;\r\n      }\r\n\r\n      return {\r\n        content: [{ type: \"text\", text: summaryText }],\r\n        structuredContent: {\r\n          filesWritten,\r\n          projectRoot,\r\n          projectRootReason: resolved.reason,\r\n          summary: generated.summary,\r\n        },\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error generating content: ${error}` }],\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Finds the first existing pack folder inside a container directory (e.g., behavior_packs/).\r\n   * Returns the folder path if a pack (folder with manifest.json) is found, otherwise undefined.\r\n   */\r\n  private static _findExistingPackFolder(containerPath: string): string | undefined {\r\n    if (!fs.existsSync(containerPath)) {\r\n      return undefined;\r\n    }\r\n\r\n    try {\r\n      for (const entry of fs.readdirSync(containerPath, { withFileTypes: true })) {\r\n        if (entry.isDirectory()) {\r\n          const manifestPath = path.join(containerPath, entry.name, \"manifest.json\");\r\n          if (fs.existsSync(manifestPath)) {\r\n            return path.join(containerPath, entry.name);\r\n          }\r\n        }\r\n      }\r\n    } catch {\r\n      // If we can't read the directory, fall through to create a new folder\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Returns true when the supplied folder already looks like a Bedrock resource\r\n   * pack \u2014 i.e. it contains a top-level manifest.json whose modules include a\r\n   * `resources` module. Used by designModel to avoid creating a nested\r\n   * `resource_packs/` subdirectory inside an RP that the caller passed\r\n   * directly, which previously caused a recurring \"files written to the wrong\r\n   * path\" symptom.\r\n   */\r\n  private static _isResourcePackFolder(folderPath: string): boolean {\r\n    try {\r\n      const manifestPath = path.join(folderPath, \"manifest.json\");\r\n      if (!fs.existsSync(manifestPath)) {\r\n        return false;\r\n      }\r\n      const raw = fs.readFileSync(manifestPath, \"utf8\");\r\n      const parsed = JSON.parse(raw);\r\n      const modules: any[] = Array.isArray(parsed?.modules) ? parsed.modules : [];\r\n      return modules.some((m) => m && typeof m.type === \"string\" && m.type === \"resources\");\r\n    } catch {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sanitize a display name or namespace into a safe folder name.\r\n   * Lower-cases, replaces non-alphanumeric runs with '_', trims.\r\n   * Caps length at 64 characters to keep resulting paths well under the\r\n   * Windows MAX_PATH limit once nested inside the project/pack hierarchy.\r\n   */\r\n  private static _toSafeFolderName(name: string): string {\r\n    return (\r\n      name\r\n        .toLowerCase()\r\n        .replace(/[^a-z0-9]+/g, \"_\")\r\n        .replace(/^_+|_+$/g, \"\")\r\n        .slice(0, 64) || \"addon\"\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Returns the list of visible child entries in a directory, or an empty array if\r\n   * the directory doesn't exist / can't be read. Hidden/system files (.git, .DS_Store,\r\n   * Thumbs.db, desktop.ini) are ignored when deciding whether a folder is \"empty\".\r\n   */\r\n  private static _visibleChildren(folder: string): string[] {\r\n    if (!fs.existsSync(folder)) {\r\n      return [];\r\n    }\r\n    try {\r\n      return fs.readdirSync(folder).filter((name) => {\r\n        if (name.startsWith(\".\")) return false;\r\n        const lower = name.toLowerCase();\r\n        return lower !== \"thumbs.db\" && lower !== \"desktop.ini\";\r\n      });\r\n    } catch {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Resolves where content should actually be generated, given a user-provided outputPath.\r\n   *\r\n   * Heuristic (in priority order):\r\n   *   1. If outputPath (or a parent within 2 levels) has a Minecraft project reference point\r\n   *      \u2014 package.json, behavior_packs/, resource_packs/, or a manifest.json \u2014 anchor to\r\n   *      that project root. This is the most common \"add to existing project\" case.\r\n   *   2. If outputPath doesn't exist, or is empty (ignoring hidden/system files), use it\r\n   *      directly as the project root.\r\n   *   3. Otherwise (outputPath is non-empty with unrelated content), create a subfolder\r\n   *      named after the namespace/displayName and use that as the root.\r\n   *\r\n   * Returns both the resolved root and a human-readable reason string (useful for the\r\n   * tool response so agents learn where files landed and why).\r\n   */\r\n  private static _resolveProjectRoot(\r\n    outputPath: string,\r\n    definition: { namespace?: string; displayName?: string }\r\n  ): { root: string; reason: string } {\r\n    const normalized = path.resolve(outputPath);\r\n\r\n    // Walk up at most 2 levels looking for a project reference point.\r\n    let current = normalized;\r\n    for (let depth = 0; depth <= 2; depth++) {\r\n      if (!fs.existsSync(current)) {\r\n        // Parent doesn't exist \u2014 stop walking up.\r\n        break;\r\n      }\r\n      const entries = new Set(MinecraftMcpServer._visibleChildren(current));\r\n\r\n      if (entries.has(\"behavior_packs\") || entries.has(\"resource_packs\")) {\r\n        return {\r\n          root: current,\r\n          reason:\r\n            depth === 0\r\n              ? \"outputPath already contains behavior_packs/ or resource_packs/ \u2014 using it as project root\"\r\n              : `found behavior_packs/ or resource_packs/ ${depth} level(s) above outputPath \u2014 anchoring to that project root`,\r\n        };\r\n      }\r\n      if (entries.has(\"manifest.json\")) {\r\n        // outputPath itself is a pack folder \u2014 use its grandparent (project root).\r\n        const grandparent = path.dirname(path.dirname(current));\r\n        return {\r\n          root: grandparent,\r\n          reason: \"outputPath appears to be inside a pack (manifest.json present) \u2014 anchoring to the project root\",\r\n        };\r\n      }\r\n      if (entries.has(\"package.json\")) {\r\n        return {\r\n          root: current,\r\n          reason:\r\n            depth === 0\r\n              ? \"outputPath contains package.json \u2014 treating it as the project root\"\r\n              : `package.json found ${depth} level(s) above outputPath \u2014 anchoring to that repo root`,\r\n        };\r\n      }\r\n      // Don't walk up further if the current folder isn't obviously a candidate for \"inside a project\"\r\n      if (depth === 0) {\r\n        current = path.dirname(current);\r\n      } else {\r\n        break;\r\n      }\r\n    }\r\n\r\n    // No reference point found. Check whether outputPath is empty.\r\n    const visible = MinecraftMcpServer._visibleChildren(normalized);\r\n    if (!fs.existsSync(normalized) || visible.length === 0) {\r\n      return {\r\n        root: normalized,\r\n        reason: \"outputPath is empty (or does not yet exist) \u2014 using it directly as the project root\",\r\n      };\r\n    }\r\n\r\n    // Non-empty with unrelated content \u2014 create a namespaced subfolder to avoid collisions.\r\n    const subfolderName = MinecraftMcpServer._toSafeFolderName(\r\n      definition.namespace || definition.displayName || \"addon\"\r\n    );\r\n    return {\r\n      root: path.join(normalized, subfolderName),\r\n      reason: `outputPath is non-empty and has no Minecraft project markers \u2014 creating subfolder \"${subfolderName}\" to avoid clobbering existing content`,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Writes a manifest.json file, but preserves the UUIDs from any existing manifest\r\n   * at the same location. This prevents breaking worlds that already reference the pack\r\n   * when content is added across multiple MCP calls.\r\n   */\r\n  private static _writeManifestPreservingUuids(\r\n    packBasePath: string,\r\n    manifestFile: { path: string; pack: string; type: string; content: object | string | Uint8Array },\r\n    filesWritten: string[]\r\n  ) {\r\n    const fullPath = path.join(packBasePath, manifestFile.path);\r\n    const dirPath = path.dirname(fullPath);\r\n\r\n    if (!fs.existsSync(dirPath)) {\r\n      fs.mkdirSync(dirPath, { recursive: true });\r\n    }\r\n\r\n    const newManifest = manifestFile.content as any;\r\n\r\n    // If an existing manifest is present, preserve its header UUID, module UUIDs, and dependencies\r\n    if (fs.existsSync(fullPath)) {\r\n      try {\r\n        const existing = JSON.parse(fs.readFileSync(fullPath, \"utf-8\"));\r\n\r\n        if (existing.header?.uuid) {\r\n          newManifest.header.uuid = existing.header.uuid;\r\n        }\r\n        if (existing.header?.version) {\r\n          newManifest.header.version = existing.header.version;\r\n        }\r\n\r\n        // Preserve module UUIDs\r\n        if (existing.modules && Array.isArray(existing.modules) && newManifest.modules) {\r\n          for (let i = 0; i < Math.min(existing.modules.length, newManifest.modules.length); i++) {\r\n            if (existing.modules[i]?.uuid) {\r\n              newManifest.modules[i].uuid = existing.modules[i].uuid;\r\n            }\r\n          }\r\n        }\r\n\r\n        // Preserve dependencies (they contain cross-pack UUID references)\r\n        if (existing.dependencies && !newManifest.dependencies) {\r\n          newManifest.dependencies = existing.dependencies;\r\n        }\r\n      } catch {\r\n        // If existing manifest is malformed, just write the new one\r\n      }\r\n    }\r\n\r\n    fs.writeFileSync(fullPath, JSON.stringify(newManifest, null, 2), \"utf-8\");\r\n    filesWritten.push(fullPath);\r\n  }\r\n\r\n  /**\r\n   * Writes a singleton JSON file (terrain_texture.json, item_texture.json, blocks.json,\r\n   * sound_definitions.json, music_definitions.json, etc.), deep-merging with any existing\r\n   * data so that previously-added entries are preserved instead of being overwritten.\r\n   *\r\n   * Merge strategy:\r\n   * - Recursively merges object keys: new entries win on conflict, but existing\r\n   *   object-valued entries are recursively merged rather than replaced.\r\n   * - Scalar top-level keys from the existing file are preserved if absent in the new content.\r\n   * - This handles texture_data in terrain/item_texture.json, block entries in blocks.json,\r\n   *   entity_sounds.entities in sounds.json, sound_definitions entries, etc.\r\n   */\r\n  private static _writeSingletonJsonMerging(\r\n    packBasePath: string,\r\n    singletonFile: { path: string; pack: string; type: string; content: object | string | Uint8Array },\r\n    filesWritten: string[]\r\n  ) {\r\n    const fullPath = path.join(packBasePath, singletonFile.path);\r\n    const dirPath = path.dirname(fullPath);\r\n\r\n    if (!fs.existsSync(dirPath)) {\r\n      fs.mkdirSync(dirPath, { recursive: true });\r\n    }\r\n\r\n    let newContent = singletonFile.content as any;\r\n\r\n    if (fs.existsSync(fullPath)) {\r\n      try {\r\n        const existing = JSON.parse(fs.readFileSync(fullPath, \"utf-8\"));\r\n        newContent = StorageUtilities.deepMergeJsonObjects(existing, newContent);\r\n      } catch {\r\n        // If existing file is malformed JSON, just write the new content\r\n      }\r\n    }\r\n\r\n    fs.writeFileSync(fullPath, JSON.stringify(newContent, null, 2), \"utf-8\");\r\n    filesWritten.push(fullPath);\r\n  }\r\n\r\n  /**\r\n   * Gets the effective content schema for an existing Minecraft project.\r\n   * This analyzes the project's entities, blocks, items, etc. and infers what\r\n   * traits and simplified properties would represent them in meta-schema format.\r\n   *\r\n   * This is the inverse of createMinecraftContentOp - instead of generating\r\n   * native content from a schema, it analyzes native content to produce a schema.\r\n   */\r\n  async _getEffectiveContentSchemaOp(args: {\r\n    folderPath: string;\r\n    options?: {\r\n      minTraitConfidence?: number;\r\n      includeRawComponents?: boolean;\r\n      inferNamespace?: boolean;\r\n      includeBehaviorPresets?: boolean;\r\n      includeComponentGroups?: boolean;\r\n      includeEvents?: boolean;\r\n    };\r\n  }): Promise<CallToolResult> {\r\n    if (!this._creatorTools) {\r\n      throw new Error(\"Creator Tools is not initialized\");\r\n    }\r\n\r\n    try {\r\n      // Check if path exists\r\n      if (!fs.existsSync(args.folderPath)) {\r\n        return {\r\n          content: [{ type: \"text\", text: `Error: Folder not found at path: ${args.folderPath}` }],\r\n          isError: true,\r\n        };\r\n      }\r\n\r\n      // Create a project from the path\r\n      const projectOrError = await this._creatorTools.createProjectFromPath(args.folderPath);\r\n\r\n      if (!projectOrError || typeof projectOrError === \"string\") {\r\n        return {\r\n          content: [\r\n            {\r\n              type: \"text\",\r\n              text:\r\n                `Error: Failed to load project from path: ${args.folderPath}` +\r\n                (typeof projectOrError === \"string\" ? `. ${projectOrError}` : \"\"),\r\n            },\r\n          ],\r\n          isError: true,\r\n        };\r\n      }\r\n\r\n      // Build inferrer options\r\n      const options: IInferrerOptions = {\r\n        minTraitConfidence: args.options?.minTraitConfidence ?? 0.6,\r\n        includeRawComponents: args.options?.includeRawComponents ?? true,\r\n        inferNamespace: args.options?.inferNamespace ?? true,\r\n        includeBehaviorPresets: args.options?.includeBehaviorPresets ?? true,\r\n        includeComponentGroups: args.options?.includeComponentGroups ?? false,\r\n        includeEvents: args.options?.includeEvents ?? false,\r\n      };\r\n\r\n      // Run the inference\r\n      const result = await ContentSchemaInferrer.inferFromProject(projectOrError, options);\r\n\r\n      // Build summary text\r\n      let summaryText = `Analyzed content in \"${args.folderPath}\":\\n`;\r\n      summaryText += `- ${result.metadata.entitiesAnalyzed} entities analyzed\\n`;\r\n      summaryText += `- ${result.metadata.blocksAnalyzed} blocks analyzed\\n`;\r\n      summaryText += `- ${result.metadata.itemsAnalyzed} items analyzed\\n`;\r\n      summaryText += `- Inference took ${result.metadata.inferenceTimeMs}ms\\n`;\r\n\r\n      // Report detected traits\r\n      const entityTraits = Object.entries(result.metadata.allDetectedTraits.entity);\r\n      if (entityTraits.length > 0) {\r\n        summaryText += `\\nEntity traits detected:\\n`;\r\n        for (const [trait, count] of entityTraits.sort((a, b) => b[1] - a[1])) {\r\n          summaryText += `  - ${trait}: ${count} entities\\n`;\r\n        }\r\n      }\r\n\r\n      const blockTraits = Object.entries(result.metadata.allDetectedTraits.block);\r\n      if (blockTraits.length > 0) {\r\n        summaryText += `\\nBlock traits detected:\\n`;\r\n        for (const [trait, count] of blockTraits.sort((a, b) => b[1] - a[1])) {\r\n          summaryText += `  - ${trait}: ${count} blocks\\n`;\r\n        }\r\n      }\r\n\r\n      const itemTraits = Object.entries(result.metadata.allDetectedTraits.item);\r\n      if (itemTraits.length > 0) {\r\n        summaryText += `\\nItem traits detected:\\n`;\r\n        for (const [trait, count] of itemTraits.sort((a, b) => b[1] - a[1])) {\r\n          summaryText += `  - ${trait}: ${count} items\\n`;\r\n        }\r\n      }\r\n\r\n      if (result.metadata.warnings.length > 0) {\r\n        summaryText += `\\nWarnings:\\n${result.metadata.warnings.map((w) => `- ${w}`).join(\"\\n\")}`;\r\n      }\r\n\r\n      return {\r\n        content: [\r\n          { type: \"text\", text: summaryText },\r\n          {\r\n            type: \"text\",\r\n            text: \"\\n\\nInferred Content Schema:\\n```json\\n\" + JSON.stringify(result.definition, null, 2) + \"\\n```\",\r\n          },\r\n        ],\r\n        structuredContent: {\r\n          definition: result.definition,\r\n          metadata: result.metadata,\r\n        },\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error analyzing content: ${error}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Reads an image file and returns its contents as base64-encoded image data\r\n   * that can be displayed by the AI.\r\n   *\r\n   * Requires allowImageFileReadsInDescendentFolders to be set to true in\r\n   * .mct/mcp/prefs.json in the file's parent folder or up to 3 levels above.\r\n   */\r\n  async _readImageFileOp(args: { filePath: string }): Promise<CallToolResult> {\r\n    const filePath = args.filePath;\r\n\r\n    // Security check: verify that image file reads are allowed for this path\r\n    if (!this.isMcpPrefEnabled(filePath, \"allowImageFileReadsInDescendentFolders\")) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Error: Image file reading is not authorized for this path.\\n\\nTo enable image file reading, create a file at .mct/mcp/prefs.json in the project folder (or up to 3 parent folders above the image) with the following content:\\n\\n{\\n  \"allowImageFileReadsInDescendentFolders\": true\\n}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate file path against traversal and symlink attacks\r\n    const pathError1 = this._checkMcpFilePath(filePath);\r\n    if (pathError1) {\r\n      return pathError1;\r\n    }\r\n\r\n    // Check if file exists\r\n    if (!fs.existsSync(filePath)) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error: File not found at path: ${filePath}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Get file stats\r\n    const stats = fs.statSync(filePath);\r\n\r\n    if (stats.isDirectory()) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error: Path is a directory, not a file: ${filePath}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    const mimeType = StorageUtilities.getMimeTypeFromName(filePath);\r\n\r\n    // Only allow image files\r\n    if (!StorageUtilities.isImageMimeType(mimeType)) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Error: Not an image file: ${filePath}\\nMIME type: ${mimeType}\\n\\nThis tool only supports image files (.png, .jpg, .gif, .webp, .bmp, .tiff, etc.).`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    try {\r\n      const fileBuffer = fs.readFileSync(filePath);\r\n      const base64Data = fileBuffer.toString(\"base64\");\r\n      const fitted = MinecraftMcpServer.ensureImageFitsContext(base64Data, mimeType);\r\n\r\n      const content: any[] = [];\r\n\r\n      // Build image metadata description\r\n      const fileName = path.basename(filePath);\r\n      const fileSizeBytes = fileBuffer.length;\r\n      let dimensionsStr = \"\";\r\n\r\n      // Try to extract image dimensions from the buffer\r\n      try {\r\n        if (mimeType === \"image/png\" && fileSizeBytes >= 24) {\r\n          // PNG dimensions are at byte offsets 16-23 in the IHDR chunk\r\n          const width = fileBuffer.readUInt32BE(16);\r\n          const height = fileBuffer.readUInt32BE(20);\r\n          dimensionsStr = `${width}x${height}`;\r\n        } else if ((mimeType === \"image/jpeg\" || mimeType === \"image/jpg\") && fileSizeBytes > 2) {\r\n          dimensionsStr = MinecraftMcpServer._getJpegDimensions(fileBuffer);\r\n        } else if (mimeType === \"image/gif\" && fileSizeBytes >= 10) {\r\n          const width = fileBuffer.readUInt16LE(6);\r\n          const height = fileBuffer.readUInt16LE(8);\r\n          dimensionsStr = `${width}x${height}`;\r\n        } else if (mimeType === \"image/bmp\" && fileSizeBytes >= 26) {\r\n          const width = fileBuffer.readUInt32LE(18);\r\n          const height = Math.abs(fileBuffer.readInt32LE(22));\r\n          dimensionsStr = `${width}x${height}`;\r\n        }\r\n      } catch {\r\n        // Dimension extraction is best-effort; don't fail the whole operation\r\n      }\r\n\r\n      let sizeStr: string;\r\n      if (fileSizeBytes >= 1024 * 1024) {\r\n        sizeStr = `${(fileSizeBytes / (1024 * 1024)).toFixed(2)}MB`;\r\n      } else if (fileSizeBytes >= 1024) {\r\n        sizeStr = `${(fileSizeBytes / 1024).toFixed(1)}KB`;\r\n      } else {\r\n        sizeStr = `${fileSizeBytes}B`;\r\n      }\r\n\r\n      const modifiedDate = stats.mtime.toLocaleDateString(\"en-US\", {\r\n        year: \"numeric\",\r\n        month: \"short\",\r\n        day: \"numeric\",\r\n      });\r\n      const modifiedTime = stats.mtime.toLocaleTimeString(\"en-US\", {\r\n        hour: \"2-digit\",\r\n        minute: \"2-digit\",\r\n        hour12: false,\r\n      });\r\n\r\n      let metaLines = `Image: ${fileName}`;\r\n      if (dimensionsStr) {\r\n        metaLines += ` | ${dimensionsStr}`;\r\n      }\r\n      metaLines += ` @ ${sizeStr} | ${modifiedDate} ${modifiedTime} | ${mimeType}`;\r\n\r\n      if (fitted.wasDownscaled) {\r\n        metaLines += `\\nNote: The original image was automatically downscaled to fit within AI context limits. The original file on disk is unchanged.`;\r\n      }\r\n\r\n      content.push({\r\n        type: \"text\",\r\n        text: metaLines,\r\n      });\r\n\r\n      content.push({\r\n        type: \"image\",\r\n        data: fitted.base64,\r\n        mimeType: fitted.mimeType,\r\n      });\r\n\r\n      return { content };\r\n    } catch (error) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error reading image file: ${error}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Extract dimensions from a JPEG buffer by scanning for SOF markers.\r\n   * Returns a \"widthxheight\" string, or empty string if extraction fails.\r\n   */\r\n  private static _getJpegDimensions(buffer: Buffer): string {\r\n    try {\r\n      let offset = 2; // skip SOI marker (0xFFD8)\r\n      while (offset < buffer.length - 1) {\r\n        if (buffer[offset] !== 0xff) break;\r\n        const marker = buffer[offset + 1];\r\n        // SOF0 through SOF3 (0xC0-0xC3) contain dimensions\r\n        if (marker >= 0xc0 && marker <= 0xc3) {\r\n          if (offset + 9 <= buffer.length) {\r\n            const height = buffer.readUInt16BE(offset + 5);\r\n            const width = buffer.readUInt16BE(offset + 7);\r\n            return `${width}x${height}`;\r\n          }\r\n          break;\r\n        }\r\n        // Skip to next marker\r\n        if (offset + 3 >= buffer.length) break;\r\n        const segmentLength = buffer.readUInt16BE(offset + 2);\r\n        offset += 2 + segmentLength;\r\n      }\r\n    } catch {\r\n      // Best-effort\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  /**\r\n   * Maximum base64 size for images returned from MCP tools to stay safely under\r\n   * API request limits (e.g., Claude's ~4MB total request limit).\r\n   * Base64 encoding inflates binary data by ~33%, and we need headroom for the rest\r\n   * of the request payload (tool definitions, conversation history, etc.), so we\r\n   * cap individual images at ~1.5MB base64. This is more conservative than the 3MB\r\n   * limit to account for conversations with multiple images.\r\n   */\r\n  private static readonly MAX_IMAGE_BASE64_BYTES = 1.5 * 1024 * 1024;\r\n\r\n  /**\r\n   * Ensure a base64-encoded image fits within AI context limits.\r\n   * If the image is too large, it will be downscaled and re-encoded as PNG.\r\n   *\r\n   * This should be called before returning any image from an MCP tool to prevent\r\n   * 413 Request Entity Too Large errors from the AI backend.\r\n   *\r\n   * @param base64Data Base64-encoded image data\r\n   * @param mimeType MIME type of the image\r\n   * @returns Object with (possibly downscaled) base64 data and mimeType. The mimeType\r\n   *          may change to \"image/png\" if the image was re-encoded.\r\n   */\r\n  static ensureImageFitsContext(\r\n    base64Data: string,\r\n    mimeType: string\r\n  ): { base64: string; mimeType: string; wasDownscaled: boolean } {\r\n    if (base64Data.length <= MinecraftMcpServer.MAX_IMAGE_BASE64_BYTES) {\r\n      return { base64: base64Data, mimeType, wasDownscaled: false };\r\n    }\r\n\r\n    Log.debug(\r\n      `Image too large for AI context (${(base64Data.length / (1024 * 1024)).toFixed(1)}MB base64). ` +\r\n        `Downscaling to fit under ${(MinecraftMcpServer.MAX_IMAGE_BASE64_BYTES / (1024 * 1024)).toFixed(1)}MB.`\r\n    );\r\n\r\n    try {\r\n      const imageBuffer = Buffer.from(base64Data, \"base64\");\r\n      const result = MinecraftMcpServer._downscaleImageToFit(\r\n        imageBuffer,\r\n        mimeType,\r\n        MinecraftMcpServer.MAX_IMAGE_BASE64_BYTES\r\n      );\r\n\r\n      if (result) {\r\n        return { base64: result.base64, mimeType: \"image/png\", wasDownscaled: true };\r\n      }\r\n    } catch (e) {\r\n      Log.debug(`ensureImageFitsContext failed: ${e}`);\r\n    }\r\n\r\n    // If downscaling failed, return original \u2014 the caller will get a 413 but at least\r\n    // we tried. This is better than silently dropping the image.\r\n    return { base64: base64Data, mimeType, wasDownscaled: false };\r\n  }\r\n\r\n  /**\r\n   * Downscale an image buffer so its base64 representation fits within maxBase64Bytes.\r\n   * Decodes the image to RGBA pixels, computes a scale factor, resizes using bilinear\r\n   * interpolation, and re-encodes as PNG.\r\n   *\r\n   * @param imageBuffer Raw image file bytes (PNG, JPEG, etc.)\r\n   * @param mimeType MIME type of the source image\r\n   * @param maxBase64Bytes Maximum allowed base64 string length\r\n   * @returns Object with base64 string, or undefined if downscaling fails\r\n   */\r\n  private static _downscaleImageToFit(\r\n    imageBuffer: Buffer,\r\n    mimeType: string,\r\n    maxBase64Bytes: number\r\n  ): { base64: string } | undefined {\r\n    try {\r\n      // Decode the source image to RGBA pixels\r\n      let srcWidth: number;\r\n      let srcHeight: number;\r\n      let srcPixels: Uint8Array;\r\n\r\n      if (mimeType === \"image/png\") {\r\n        const png = PNG.sync.read(imageBuffer);\r\n        srcWidth = png.width;\r\n        srcHeight = png.height;\r\n        srcPixels = new Uint8Array(png.data);\r\n      } else {\r\n        // For non-PNG formats (JPEG, BMP, etc.), try pngjs which handles some formats,\r\n        // or fall back gracefully\r\n        try {\r\n          const png = PNG.sync.read(imageBuffer);\r\n          srcWidth = png.width;\r\n          srcHeight = png.height;\r\n          srcPixels = new Uint8Array(png.data);\r\n        } catch {\r\n          Log.debug(`Cannot decode ${mimeType} for downscaling \u2014 pngjs only supports PNG directly.`);\r\n          return undefined;\r\n        }\r\n      }\r\n\r\n      if (srcWidth <= 0 || srcHeight <= 0) {\r\n        return undefined;\r\n      }\r\n\r\n      // Calculate target size. PNG compression ratio varies, but for typical screenshots\r\n      // and Minecraft textures, we estimate ~2-4 bytes per pixel after PNG compression.\r\n      // We use a conservative estimate and may iterate if needed.\r\n      const maxBinaryBytes = Math.floor((maxBase64Bytes * 3) / 4);\r\n\r\n      // Start with a scale factor based on area ratio.\r\n      // Estimate compressed PNG at ~3 bytes/pixel average for typical content.\r\n      const estimatedBytesPerPixel = 3;\r\n      const maxPixels = Math.floor(maxBinaryBytes / estimatedBytesPerPixel);\r\n      const currentPixels = srcWidth * srcHeight;\r\n\r\n      let scale = Math.sqrt(maxPixels / currentPixels);\r\n      scale = Math.min(scale, 1.0); // Never upscale\r\n\r\n      // Apply scale with a small safety margin\r\n      scale *= 0.9;\r\n\r\n      let dstWidth = Math.max(1, Math.floor(srcWidth * scale));\r\n      let dstHeight = Math.max(1, Math.floor(srcHeight * scale));\r\n\r\n      // Iteratively resize until the encoded result fits\r\n      for (let attempt = 0; attempt < 5; attempt++) {\r\n        const resizedPixels = MinecraftMcpServer._bilinearResize(srcPixels, srcWidth, srcHeight, dstWidth, dstHeight);\r\n\r\n        const outPng = new PNG({ width: dstWidth, height: dstHeight });\r\n        outPng.data = Buffer.from(resizedPixels);\r\n        const pngBuffer = PNG.sync.write(outPng);\r\n\r\n        const base64 = pngBuffer.toString(\"base64\");\r\n\r\n        if (base64.length <= maxBase64Bytes) {\r\n          Log.debug(\r\n            `Downscaled image from ${srcWidth}x${srcHeight} to ${dstWidth}x${dstHeight} ` +\r\n              `(${(base64.length / (1024 * 1024)).toFixed(2)}MB base64)`\r\n          );\r\n          return { base64 };\r\n        }\r\n\r\n        // Still too large \u2014 shrink further\r\n        const overshoot = base64.length / maxBase64Bytes;\r\n        const shrinkFactor = Math.sqrt(1 / overshoot) * 0.9;\r\n        dstWidth = Math.max(1, Math.floor(dstWidth * shrinkFactor));\r\n        dstHeight = Math.max(1, Math.floor(dstHeight * shrinkFactor));\r\n      }\r\n\r\n      Log.debug(\"Failed to downscale image to fit within limits after 5 attempts\");\r\n      return undefined;\r\n    } catch (e) {\r\n      Log.debug(`Image downscaling failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Resize RGBA pixel data using bilinear interpolation.\r\n   * Produces smoother results than nearest-neighbor for downscaling screenshots and textures.\r\n   *\r\n   * @param srcPixels Source RGBA pixel data (4 bytes per pixel)\r\n   * @param srcW Source width\r\n   * @param srcH Source height\r\n   * @param dstW Destination width\r\n   * @param dstH Destination height\r\n   * @returns Resized RGBA pixel data\r\n   */\r\n  private static _bilinearResize(\r\n    srcPixels: Uint8Array,\r\n    srcW: number,\r\n    srcH: number,\r\n    dstW: number,\r\n    dstH: number\r\n  ): Uint8Array {\r\n    const dst = new Uint8Array(dstW * dstH * 4);\r\n\r\n    const xRatio = srcW / dstW;\r\n    const yRatio = srcH / dstH;\r\n\r\n    for (let dstY = 0; dstY < dstH; dstY++) {\r\n      const srcYf = (dstY + 0.5) * yRatio - 0.5;\r\n      const srcY0 = Math.max(0, Math.floor(srcYf));\r\n      const srcY1 = Math.min(srcH - 1, srcY0 + 1);\r\n      const yLerp = srcYf - srcY0;\r\n\r\n      for (let dstX = 0; dstX < dstW; dstX++) {\r\n        const srcXf = (dstX + 0.5) * xRatio - 0.5;\r\n        const srcX0 = Math.max(0, Math.floor(srcXf));\r\n        const srcX1 = Math.min(srcW - 1, srcX0 + 1);\r\n        const xLerp = srcXf - srcX0;\r\n\r\n        const idx00 = (srcY0 * srcW + srcX0) * 4;\r\n        const idx10 = (srcY0 * srcW + srcX1) * 4;\r\n        const idx01 = (srcY1 * srcW + srcX0) * 4;\r\n        const idx11 = (srcY1 * srcW + srcX1) * 4;\r\n\r\n        const dstIdx = (dstY * dstW + dstX) * 4;\r\n\r\n        for (let c = 0; c < 4; c++) {\r\n          const top = srcPixels[idx00 + c] * (1 - xLerp) + srcPixels[idx10 + c] * xLerp;\r\n          const bot = srcPixels[idx01 + c] * (1 - xLerp) + srcPixels[idx11 + c] * xLerp;\r\n          dst[dstIdx + c] = Math.round(top * (1 - yLerp) + bot * yLerp);\r\n        }\r\n      }\r\n    }\r\n\r\n    return dst;\r\n  }\r\n\r\n  /**\r\n   * Writes base64-encoded image data to a file.\r\n   *\r\n   * Requires allowImageFileWritesInDescendentFolders to be set to true in\r\n   * .mct/mcp/prefs.json in the file's parent folder or up to 3 levels above.\r\n   */\r\n  async _writeImageFileFromBase64Op(args: {\r\n    filePath: string;\r\n    base64Data: string;\r\n    mimeType?: string;\r\n  }): Promise<CallToolResult> {\r\n    const filePath = args.filePath;\r\n\r\n    // Security check: verify that image file writes are allowed for this path\r\n    if (!this.isMcpPrefEnabled(filePath, \"allowImageFileWritesInDescendentFolders\")) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Error: Image file writing is not authorized for this path.\\n\\nTo enable image file writing, create a file at .mct/mcp/prefs.json in the project folder (or up to 3 parent folders above the target location) with the following content:\\n\\n{\\n  \"allowImageFileWritesInDescendentFolders\": true\\n}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate file path against traversal and symlink attacks\r\n    const pathError2 = this._checkMcpFilePath(filePath);\r\n    if (pathError2) {\r\n      return pathError2;\r\n    }\r\n\r\n    // Determine MIME type from file extension or provided mimeType\r\n    const mimeType = args.mimeType || StorageUtilities.getMimeTypeFromName(filePath);\r\n\r\n    // Only allow image files\r\n    if (!StorageUtilities.isImageMimeType(mimeType)) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Error: Not a valid image file extension: ${filePath}\\nMIME type: ${mimeType}\\n\\nThis tool only supports image files (.png, .jpg, .webp, .bmp, .tiff, etc.).`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    try {\r\n      // Ensure the parent directory exists\r\n      const parentDir = path.dirname(filePath);\r\n      if (!fs.existsSync(parentDir)) {\r\n        fs.mkdirSync(parentDir, { recursive: true });\r\n      }\r\n\r\n      // Decode base64 and write to file\r\n      const buffer = Buffer.from(args.base64Data, \"base64\");\r\n      fs.writeFileSync(filePath, buffer);\r\n\r\n      // Get file stats for confirmation\r\n      const stats = fs.statSync(filePath);\r\n\r\n      // Convert buffer to base64 for returning the image, downscaling if needed\r\n      const resultBase64 = buffer.toString(\"base64\");\r\n      const fitted = MinecraftMcpServer.ensureImageFitsContext(resultBase64, mimeType);\r\n\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Successfully wrote image file:\\n  Path: ${filePath}\\n  Size: ${stats.size} bytes\\n  MIME type: ${mimeType}`,\r\n          },\r\n          {\r\n            type: \"image\",\r\n            data: fitted.base64,\r\n            mimeType: fitted.mimeType,\r\n          },\r\n        ],\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error writing image file: ${error}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Converts SVG markup to PNG and writes it to a file.\r\n   *\r\n   * Requires allowImageFileWritesInDescendentFolders to be set to true in\r\n   * .mct/mcp/prefs.json in the file's parent folder or up to 3 levels above.\r\n   */\r\n  async _writeImageFileFromSvgOp(args: {\r\n    filePath: string;\r\n    svgContent: string;\r\n    width?: number;\r\n    height?: number;\r\n  }): Promise<CallToolResult> {\r\n    const filePath = args.filePath;\r\n\r\n    // Security check: verify that image file writes are allowed for this path\r\n    if (!this.isMcpPrefEnabled(filePath, \"allowImageFileWritesInDescendentFolders\")) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Error: Image file writing is not authorized for this path.\\n\\nTo enable image file writing, create a file at .mct/mcp/prefs.json in the project folder (or up to 3 parent folders above the target location) with the following content:\\n\\n{\\n  \"allowImageFileWritesInDescendentFolders\": true\\n}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate file path against traversal and symlink attacks\r\n    const pathError3 = this._checkMcpFilePath(filePath);\r\n    if (pathError3) {\r\n      return pathError3;\r\n    }\r\n\r\n    try {\r\n      // Ensure the parent directory exists\r\n      const parentDir = path.dirname(filePath);\r\n      if (!fs.existsSync(parentDir)) {\r\n        fs.mkdirSync(parentDir, { recursive: true });\r\n      }\r\n\r\n      // Convert SVG to PNG using resvg\r\n      const opts: any = {};\r\n\r\n      // Set dimensions if provided\r\n      if (args.width || args.height) {\r\n        opts.fitTo =\r\n          args.width && args.height\r\n            ? { mode: \"width\", value: args.width } // Use width, height will scale proportionally\r\n            : args.width\r\n              ? { mode: \"width\", value: args.width }\r\n              : { mode: \"height\", value: args.height };\r\n      }\r\n\r\n      const { Resvg } = await import(\"@resvg/resvg-js\");\r\n\r\n      const resvg = new Resvg(args.svgContent, opts);\r\n      const pngData = resvg.render();\r\n      const buffer = Buffer.from(pngData.asPng());\r\n\r\n      fs.writeFileSync(filePath, buffer);\r\n\r\n      // Get file stats for confirmation\r\n      const stats = fs.statSync(filePath);\r\n\r\n      // Convert buffer to base64 for returning the image, downscaling if needed\r\n      const resultBase64 = buffer.toString(\"base64\");\r\n      const fitted = MinecraftMcpServer.ensureImageFitsContext(resultBase64, \"image/png\");\r\n\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Successfully wrote image file:\\n  Path: ${filePath}\\n  Size: ${stats.size} bytes\\n  Dimensions: ${pngData.width}x${pngData.height}\\n  (converted from SVG to PNG)`,\r\n          },\r\n          {\r\n            type: \"image\",\r\n            data: fitted.base64,\r\n            mimeType: fitted.mimeType,\r\n          },\r\n        ],\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error writing image file: ${error}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Writes an image file from a pixel art definition with paletted pixels.\r\n   *\r\n   * The pixel art format uses ASCII-style lines where each character maps to a color\r\n   * in a palette. Spaces are transparent. This is ideal for creating Minecraft-style\r\n   * pixel art textures.\r\n   *\r\n   * Requires allowImageFileWritesInDescendentFolders to be set to true in\r\n   * .mct/mcp/prefs.json in the file's parent folder or up to 3 levels above.\r\n   */\r\n  async _writeImageFileFromPixelArtOp(args: {\r\n    filePath: string;\r\n    lines: string[];\r\n    palette: { [char: string]: { r?: number; g?: number; b?: number; a?: number; hex?: string } };\r\n    scale?: number;\r\n    backgroundColor?: { r?: number; g?: number; b?: number; a?: number; hex?: string };\r\n  }): Promise<CallToolResult> {\r\n    const filePath = args.filePath;\r\n\r\n    // Security check: verify that image file writes are allowed for this path\r\n    if (!this.isMcpPrefEnabled(filePath, \"allowImageFileWritesInDescendentFolders\")) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Error: Image file writing is not authorized for this path.\\n\\nTo enable image file writing, create a file at .mct/mcp/prefs.json in the project folder (or up to 3 parent folders above the target location) with the following content:\\n\\n{\\n  \"allowImageFileWritesInDescendentFolders\": true\\n}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate file path against traversal and symlink attacks\r\n    const pathError4 = this._checkMcpFilePath(filePath);\r\n    if (pathError4) {\r\n      return pathError4;\r\n    }\r\n\r\n    // Validate file extension is PNG\r\n    const ext = path.extname(filePath).toLowerCase();\r\n    if (ext !== \".png\") {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Error: Pixel art output must be a PNG file. Got extension: ${ext}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate lines\r\n    if (!args.lines || args.lines.length === 0) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: lines array is required and must not be empty\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate palette\r\n    if (!args.palette || Object.keys(args.palette).length === 0) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: palette is required and must not be empty\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    try {\r\n      // Calculate dimensions from pixel art lines\r\n      const scale = args.scale || 1;\r\n      const artHeight = args.lines.length;\r\n      let artWidth = 0;\r\n      for (const line of args.lines) {\r\n        artWidth = Math.max(artWidth, line.length);\r\n      }\r\n\r\n      if (artWidth === 0) {\r\n        return {\r\n          content: [{ type: \"text\", text: \"Error: All lines are empty\" }],\r\n          isError: true,\r\n        };\r\n      }\r\n\r\n      const width = artWidth * scale;\r\n      const height = artHeight * scale;\r\n\r\n      // Create pixel buffer\r\n      const pixels = new Uint8Array(width * height * 4);\r\n\r\n      // Helper to parse color\r\n      const parseColor = (\r\n        color: { r?: number; g?: number; b?: number; a?: number; hex?: string } | undefined\r\n      ): { r: number; g: number; b: number; a: number } => {\r\n        if (!color) return { r: 0, g: 0, b: 0, a: 0 };\r\n\r\n        if (color.hex) {\r\n          // Parse hex color\r\n          let hex = color.hex;\r\n          if (hex.startsWith(\"#\")) hex = hex.slice(1);\r\n\r\n          if (hex.length === 3) {\r\n            // Short form #RGB -> #RRGGBB\r\n            hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\r\n          }\r\n\r\n          const r = parseInt(hex.slice(0, 2), 16) || 0;\r\n          const g = parseInt(hex.slice(2, 4), 16) || 0;\r\n          const b = parseInt(hex.slice(4, 6), 16) || 0;\r\n          const a = hex.length >= 8 ? parseInt(hex.slice(6, 8), 16) : 255;\r\n          return { r, g, b, a };\r\n        }\r\n\r\n        return {\r\n          r: color.r ?? 0,\r\n          g: color.g ?? 0,\r\n          b: color.b ?? 0,\r\n          a: color.a ?? 255,\r\n        };\r\n      };\r\n\r\n      // Pre-parse palette\r\n      const parsedPalette: { [char: string]: { r: number; g: number; b: number; a: number } } = {};\r\n      for (const char in args.palette) {\r\n        parsedPalette[char] = parseColor(args.palette[char]);\r\n      }\r\n\r\n      // Parse background color\r\n      const bgColor = args.backgroundColor ? parseColor(args.backgroundColor) : { r: 0, g: 0, b: 0, a: 0 };\r\n\r\n      // Fill with background color first\r\n      for (let i = 0; i < width * height; i++) {\r\n        pixels[i * 4] = bgColor.r;\r\n        pixels[i * 4 + 1] = bgColor.g;\r\n        pixels[i * 4 + 2] = bgColor.b;\r\n        pixels[i * 4 + 3] = bgColor.a;\r\n      }\r\n\r\n      // Draw pixel art\r\n      for (let lineIdx = 0; lineIdx < args.lines.length; lineIdx++) {\r\n        const line = args.lines[lineIdx];\r\n\r\n        for (let charIdx = 0; charIdx < line.length; charIdx++) {\r\n          const char = line[charIdx];\r\n\r\n          // Space is transparent - skip (background remains)\r\n          if (char === \" \") continue;\r\n\r\n          const color = parsedPalette[char];\r\n          if (!color) continue; // Unknown character - skip\r\n\r\n          // Fill the scaled pixel region\r\n          const startX = charIdx * scale;\r\n          const startY = lineIdx * scale;\r\n          const endX = startX + scale;\r\n          const endY = startY + scale;\r\n\r\n          for (let y = startY; y < endY; y++) {\r\n            for (let x = startX; x < endX; x++) {\r\n              const idx = (y * width + x) * 4;\r\n              pixels[idx] = color.r;\r\n              pixels[idx + 1] = color.g;\r\n              pixels[idx + 2] = color.b;\r\n              pixels[idx + 3] = color.a;\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // Encode to PNG\r\n      const pngData = ImageGenerationUtilities.encodeRgbaToPng(pixels, width, height);\r\n      if (!pngData) {\r\n        return {\r\n          content: [{ type: \"text\", text: \"Error: Failed to encode PNG\" }],\r\n          isError: true,\r\n        };\r\n      }\r\n\r\n      // Ensure the parent directory exists\r\n      const parentDir = path.dirname(filePath);\r\n      if (!fs.existsSync(parentDir)) {\r\n        fs.mkdirSync(parentDir, { recursive: true });\r\n      }\r\n\r\n      // Write file\r\n      fs.writeFileSync(filePath, Buffer.from(pngData));\r\n\r\n      // Get file stats for confirmation\r\n      const stats = fs.statSync(filePath);\r\n\r\n      // Convert to base64 for returning the image, downscaling if needed\r\n      const resultBase64 = Buffer.from(pngData).toString(\"base64\");\r\n      const fitted = MinecraftMcpServer.ensureImageFitsContext(resultBase64, \"image/png\");\r\n\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Successfully wrote pixel art image:\\n  Path: ${filePath}\\n  Size: ${\r\n              stats.size\r\n            } bytes\\n  Dimensions: ${width}x${height} (${artWidth}x${artHeight} at ${scale}x scale)\\n  Palette: ${\r\n              Object.keys(args.palette).length\r\n            } colors`,\r\n          },\r\n          {\r\n            type: \"image\",\r\n            data: fitted.base64,\r\n            mimeType: fitted.mimeType,\r\n          },\r\n        ],\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error writing pixel art image: ${error}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Preview a model design by converting it to geometry and rendering a preview image.\r\n   * Returns the preview as a base64-encoded PNG image.\r\n   */\r\n  async _previewModelDesignOp(args: any): Promise<CallToolResult> {\r\n    if (!this._creatorTools || !this._env) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: Creator Tools is not initialized\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    const design = args.design as IMcpModelDesign;\r\n    if (!design) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: design is required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate the design\r\n    const validationErrors = ModelDesignUtilities.validateDesign(design);\r\n    if (validationErrors.length > 0) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Design validation errors:\\n${validationErrors.map((e) => `  - ${e}`).join(\"\\n\")}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Convert the design to geometry\r\n    const conversionResult = ModelDesignUtilities.convertToGeometry(design);\r\n    const geometryJson = JSON.stringify(conversionResult.geometry, null, 2);\r\n\r\n    // Generate the texture atlas SVG (for debugging/reference)\r\n    const _atlasSvg = ModelDesignUtilities.generateAtlasSvg(\r\n      conversionResult.atlasRegions,\r\n      conversionResult.textureSize\r\n    );\r\n\r\n    // For now, create a simple colored PNG from the SVG using node-canvas or similar\r\n    // Since we may not have those dependencies, we'll generate a simple texture programmatically\r\n    const textureDataUrl = await ImageGenerationUtilities.generateTextureFromAtlas(\r\n      conversionResult.atlasRegions,\r\n      conversionResult.textureSize,\r\n      conversionResult.pixelsPerUnit\r\n    );\r\n\r\n    // Set up the HTTP server for rendering\r\n    const serverManager = this.ensureServerManager();\r\n    serverManager.features = ServerManagerFeatures.all;\r\n\r\n    const httpServer = serverManager.ensureHttpServer(this._previewServerPort);\r\n\r\n    // Generate unique URLs for this render to prevent browser caching\r\n    // Use a random token to ensure each render gets fresh content\r\n    const renderToken = Math.random().toString(36).substring(2, 15) + Date.now().toString(36);\r\n    const geometryPath = `/temp/preview-geometry-${renderToken}.json`;\r\n    const texturePath = `/temp/preview-texture-${renderToken}.png`;\r\n\r\n    // Register temporary content with unique paths\r\n    httpServer.registerTempContent(geometryPath, geometryJson, \"application/json\");\r\n\r\n    if (textureDataUrl) {\r\n      // Convert data URL to binary\r\n      const base64Match = textureDataUrl.match(/^data:image\\/png;base64,(.*)$/);\r\n      if (base64Match) {\r\n        const binaryData = Buffer.from(base64Match[1], \"base64\");\r\n        httpServer.registerTempContent(texturePath, binaryData, \"image/png\");\r\n      }\r\n    }\r\n\r\n    // Use the actual port the HTTP server is listening on (may differ from _previewServerPort\r\n    // if the server was already created for another purpose)\r\n    const baseUrl = `http://localhost:${httpServer.port}`;\r\n\r\n    // Wait for the HTTP server to be ready to accept connections\r\n    // This prevents race conditions on first render after MCP server start\r\n    if (!httpServer.isListening) {\r\n      await httpServer.waitForReady();\r\n    }\r\n\r\n    // Verify the HTTP server is actually still listening (could have crashed)\r\n    if (!httpServer.isListening) {\r\n      Log.debugAlert(`HTTP server on port ${httpServer.port} is not actually listening. Server may have crashed.`);\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Error: Internal HTTP server on port ${httpServer.port} is not responding. Please restart the MCP server.`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Initialize headless renderer (reuse if already created)\r\n    if (!this._cachedRenderer) {\r\n      this._cachedRenderer = new PlaywrightPageRenderer(baseUrl);\r\n      const initialized = await this._cachedRenderer.initialize();\r\n\r\n      if (!initialized) {\r\n        httpServer.clearTempContent();\r\n        this._cachedRenderer = undefined;\r\n        return {\r\n          content: [\r\n            {\r\n              type: \"text\",\r\n              text: \"Error: Could not initialize headless renderer. Ensure Chrome/Edge is available.\",\r\n            },\r\n          ],\r\n          isError: true,\r\n        };\r\n      }\r\n\r\n      // Warm up the browser to improve first-render reliability\r\n      // This creates and destroys a test context to ensure the browser is fully ready\r\n      await this._cachedRenderer.warmUp();\r\n    }\r\n\r\n    // Verify browser is still connected (it may have crashed or been disconnected)\r\n    if (!this._cachedRenderer.isBrowserReady()) {\r\n      Log.debug(\"Browser disconnected, reinitializing...\");\r\n      this._cachedRenderer = new PlaywrightPageRenderer(baseUrl);\r\n      const reinitialized = await this._cachedRenderer.initialize();\r\n      if (!reinitialized) {\r\n        httpServer.clearTempContent();\r\n        this._cachedRenderer = undefined;\r\n        return {\r\n          content: [{ type: \"text\", text: \"Error: Browser disconnected and could not be reinitialized.\" }],\r\n          isError: true,\r\n        };\r\n      }\r\n      await this._cachedRenderer.warmUp();\r\n    }\r\n\r\n    const renderer = this._cachedRenderer;\r\n\r\n    // Build the model viewer URL with unique paths to prevent browser caching\r\n    // Use skipVanilla=true for isolated rendering with procedural sky (no vanilla texture dependencies)\r\n    let modelViewerUrl = `/?mode=modelviewer&geometry=${encodeURIComponent(geometryPath)}&skipVanilla=true`;\r\n    if (textureDataUrl) {\r\n      modelViewerUrl += `&texture=${encodeURIComponent(texturePath)}`;\r\n    }\r\n\r\n    const width = args.width || 768;\r\n    const height = args.height || 768;\r\n    const multiAngle = args.multiAngle === true;\r\n    const imageFormat = args.imageFormat || \"png\"; // PNG default for better MCP client compatibility\r\n    const jpegQuality = args.jpegQuality || 80;\r\n\r\n    // Calculate model bounds for dynamic camera positioning\r\n    // Model bounds are in Minecraft pixel coordinates (16 units = 1 block)\r\n    const modelBoundsPixels = ModelDesignUtilities.calculateModelBounds(design);\r\n\r\n    // Convert to block coordinates for camera positioning (divide by 16)\r\n    const modelBounds = {\r\n      minX: modelBoundsPixels.minX / 16,\r\n      minY: modelBoundsPixels.minY / 16,\r\n      minZ: modelBoundsPixels.minZ / 16,\r\n      maxX: modelBoundsPixels.maxX / 16,\r\n      maxY: modelBoundsPixels.maxY / 16,\r\n      maxZ: modelBoundsPixels.maxZ / 16,\r\n      maxDimension: modelBoundsPixels.maxDimension / 16,\r\n      center: {\r\n        x: modelBoundsPixels.center.x / 16,\r\n        y: modelBoundsPixels.center.y / 16,\r\n        z: modelBoundsPixels.center.z / 16,\r\n      },\r\n    };\r\n\r\n    // Camera distance based on model size for proper framing\r\n    // With narrow FOV (0.35 rad ~20\u00B0), we need sufficient distance to see the full model\r\n    // Formula: distance = modelSize * multiplier + baseline offset\r\n    // For humanoid (2 blocks): 2 * 1.2 + 1.5 = 3.9 blocks distance\r\n    // For block (1 block): 1 * 1.2 + 1.5 = 2.7 blocks distance\r\n    const modelSize = modelBounds.maxDimension;\r\n    const radius = Math.max(modelSize * 1.2 + 1.5, 2.5); // Increased for full model visibility\r\n\r\n    // The entity is placed at (3.5, 2.0, 3.5) in the viewer world coordinates\r\n    // Model local coordinates need to be offset by this entity position\r\n    const entityWorldX = 3.5;\r\n    const entityWorldY = 2.0;\r\n    const entityWorldZ = 3.5;\r\n\r\n    // Center on the actual model bounds, offset by entity world position\r\n    const centerX = entityWorldX + modelBounds.center.x;\r\n    const centerY = entityWorldY + modelBounds.center.y;\r\n    const centerZ = entityWorldZ + modelBounds.center.z;\r\n\r\n    // Minimum camera height - never go below the ground plane (y = -0.5) plus margin\r\n    const minCameraY = 0.5;\r\n\r\n    // Calculate isometric camera Y - camera should be ABOVE the model center looking down\r\n    // Add radius * factor to place camera at elevated position for proper isometric view\r\n    const isometricY = Math.max(centerY + radius * 0.8, minCameraY);\r\n    const sideViewY = Math.max(centerY + radius * 0.3, minCameraY);\r\n\r\n    const anglePresets: { [key: string]: { x: number; y: number; z: number; label: string } } = {\r\n      // Front views - true isometric angle (~35 degrees from horizontal)\r\n      \"front-right\": {\r\n        x: centerX + radius * 0.7,\r\n        y: isometricY,\r\n        z: centerZ + radius * 0.7,\r\n        label: \"Front Right\",\r\n      },\r\n      \"front-left\": {\r\n        x: centerX - radius * 0.7,\r\n        y: isometricY,\r\n        z: centerZ + radius * 0.7,\r\n        label: \"Front Left\",\r\n      },\r\n      // Back views - isometric\r\n      \"back-right\": {\r\n        x: centerX + radius * 0.7,\r\n        y: isometricY,\r\n        z: centerZ - radius * 0.7,\r\n        label: \"Back Right\",\r\n      },\r\n      \"back-left\": {\r\n        x: centerX - radius * 0.7,\r\n        y: isometricY,\r\n        z: centerZ - radius * 0.7,\r\n        label: \"Back Left\",\r\n      },\r\n      // Top-down view - steeper angle\r\n      \"top-down\": {\r\n        x: centerX + radius * 0.4,\r\n        y: centerY + radius * 0.85,\r\n        z: centerZ + radius * 0.4,\r\n        label: \"Top Down\",\r\n      },\r\n      // Pure side views - below center but clamped\r\n      \"side-right\": { x: centerX + radius, y: sideViewY, z: centerZ, label: \"Side Right\" },\r\n      \"side-left\": { x: centerX - radius, y: sideViewY, z: centerZ, label: \"Side Left\" },\r\n      // Front and back center views\r\n      front: { x: centerX, y: isometricY, z: centerZ + radius, label: \"Front\" },\r\n      back: { x: centerX, y: isometricY, z: centerZ - radius, label: \"Back\" },\r\n    };\r\n\r\n    let result: { imageData: Uint8Array | undefined; error?: string };\r\n    // Track actual image dimensions (may differ from requested due to stitching labels)\r\n    let actualWidth = width;\r\n    let actualHeight = height;\r\n\r\n    if (multiAngle) {\r\n      // Multi-angle rendering: render from multiple camera positions and stitch together\r\n      // Use four distinct diagonal quadrants for 2x2 grid\r\n      const requestedAngles = args.anglePresets || [\"front-right\", \"front-left\", \"back-right\", \"back-left\"];\r\n      const anglesToRender = requestedAngles\r\n        .filter((a: string) => anglePresets[a.toLowerCase()])\r\n        .map((a: string) => ({ key: a.toLowerCase(), ...anglePresets[a.toLowerCase()] }));\r\n\r\n      if (anglesToRender.length === 0) {\r\n        anglesToRender.push({ key: \"front-right\", ...anglePresets[\"front-right\"] });\r\n        anglesToRender.push({ key: \"back-left\", ...anglePresets[\"back-left\"] });\r\n        anglesToRender.push({ key: \"side-right\", ...anglePresets[\"side-right\"] });\r\n        anglesToRender.push({ key: \"top-down\", ...anglePresets[\"top-down\"] });\r\n      }\r\n\r\n      // Determine grid layout:\r\n      // - 4 images: 2x2 grid\r\n      // - 3 images: pyramid layout (2 on top, 1 spanning bottom)\r\n      // - Otherwise: horizontal row\r\n      const usePyramidLayout = anglesToRender.length === 3;\r\n      const useGrid = anglesToRender.length === 4;\r\n      const cols = useGrid ? 2 : usePyramidLayout ? 2 : anglesToRender.length;\r\n      const rows = useGrid ? 2 : usePyramidLayout ? 2 : 1;\r\n\r\n      // Render each angle\r\n      const renderedImages: { label: string; imageData: Uint8Array; isWide?: boolean }[] = [];\r\n\r\n      // Calculate timeouts based on model complexity - more bones/cubes need more time\r\n      const boneCount = design.bones?.length || 1;\r\n      const cubeCount = design.bones?.reduce((sum: number, b: any) => sum + (b.cubes?.length || 0), 0) || 1;\r\n      // Canvas timeout: time to wait for page to load and initialize (8s base + up to 12s for complex models)\r\n      const baseCanvasTimeout = 8000;\r\n      const additionalCanvasTimeout = Math.min(boneCount * 500 + cubeCount * 100, 12000);\r\n      const canvasTimeout = Math.round(baseCanvasTimeout + additionalCanvasTimeout);\r\n      // Render wait time: time to wait for meshes to render after canvas appears\r\n      const baseWaitTime = 1500;\r\n      const additionalWaitTime = Math.min(boneCount * 200 + cubeCount * 50, 4000);\r\n      const renderWaitTime = Math.round(baseWaitTime + additionalWaitTime);\r\n\r\n      // Track render errors for all angles to provide detailed diagnostics\r\n      const renderErrors: string[] = [];\r\n\r\n      for (let i = 0; i < anglesToRender.length; i++) {\r\n        const angle = anglesToRender[i];\r\n        // For pyramid layout: first 2 images are half-width, 3rd is full-width\r\n        const isWideImage = usePyramidLayout && i === 2;\r\n        const imgWidth = isWideImage ? width : Math.floor(width / cols);\r\n        const imgHeight = Math.floor(height / rows);\r\n\r\n        const angleUrl = modelViewerUrl + `&cameraX=${angle.x}&cameraY=${angle.y}&cameraZ=${angle.z}`;\r\n\r\n        // Add delay between renders to ensure browser stability\r\n        // This is critical for multi-angle renders where we create new contexts in sequence\r\n        if (i > 0) {\r\n          await new Promise((resolve) => setTimeout(resolve, 300));\r\n        }\r\n\r\n        const angleResult = await renderer.renderModelFast(angleUrl, {\r\n          width: imgWidth,\r\n          height: imgHeight,\r\n          renderWaitTime: renderWaitTime,\r\n          canvasTimeout: canvasTimeout,\r\n          imageFormat: \"png\", // Use PNG for intermediate renders, compress after stitching\r\n          forceNewContext: true, // Force fresh context for each angle to ensure clean render state\r\n        });\r\n\r\n        if (angleResult.imageData) {\r\n          renderedImages.push({ label: angle.label, imageData: angleResult.imageData, isWide: isWideImage });\r\n        } else {\r\n          // Capture error for diagnostics\r\n          const errorMsg = angleResult.error || \"unknown error\";\r\n          renderErrors.push(`${angle.label}: ${errorMsg}`);\r\n          Log.debug(\r\n            `Multi-angle render failed for angle ${angle.key} (${i + 1}/${anglesToRender.length}): ${errorMsg}`\r\n          );\r\n          // For the first failure, include more context to help debugging\r\n          if (i === 0) {\r\n            Log.debug(`  URL: ${angleUrl.substring(0, 100)}...`);\r\n            Log.debug(`  Dimensions: ${imgWidth}x${imgHeight}`);\r\n            Log.debug(`  Timeout: ${canvasTimeout}ms, RenderWait: ${renderWaitTime}ms`);\r\n          }\r\n        }\r\n      }\r\n\r\n      // Stitch images together with labels\r\n      // - 2x2 grid for 4 images\r\n      // - Pyramid layout for 3 images (2 on top, 1 spanning bottom)\r\n      // - Horizontal row otherwise\r\n      if (renderedImages.length > 0) {\r\n        const singleWidth = Math.floor(width / cols);\r\n        const singleHeight = Math.floor(height / rows);\r\n        const stitchedImage = await ImageGenerationUtilities.stitchImagesWithLabels(\r\n          renderedImages,\r\n          singleWidth,\r\n          singleHeight,\r\n          cols,\r\n          rows,\r\n          usePyramidLayout ? \"pyramid\" : undefined\r\n        );\r\n        result = { imageData: stitchedImage };\r\n        // Update actual dimensions: stitched image includes 30px label per row\r\n        const labelHeight = 30;\r\n        actualWidth = singleWidth * cols;\r\n        actualHeight = (singleHeight + labelHeight) * rows;\r\n      } else {\r\n        // All renders failed - provide detailed diagnostic message\r\n        let errorMsg = `No images rendered for multi-angle view. `;\r\n        errorMsg += `Attempted ${anglesToRender.length} angles. `;\r\n        if (renderErrors.length > 0) {\r\n          errorMsg += `Errors: ${renderErrors.join(\"; \")}`;\r\n        } else {\r\n          errorMsg += `No specific errors captured - browser may not be fully initialized.`;\r\n        }\r\n        result = { imageData: undefined, error: errorMsg };\r\n      }\r\n    } else {\r\n      // Single angle rendering - use front-right angle\r\n      const defaultAngle = anglePresets[\"front-right\"];\r\n      const singleAngleUrl =\r\n        modelViewerUrl + `&cameraX=${defaultAngle.x}&cameraY=${defaultAngle.y}&cameraZ=${defaultAngle.z}`;\r\n\r\n      // Calculate timeouts based on model complexity\r\n      const boneCount = design.bones?.length || 1;\r\n      const cubeCount = design.bones?.reduce((sum: number, b: any) => sum + (b.cubes?.length || 0), 0) || 1;\r\n      const baseCanvasTimeout = 8000;\r\n      const additionalCanvasTimeout = Math.min(boneCount * 500 + cubeCount * 100, 12000);\r\n      const canvasTimeout = Math.round(baseCanvasTimeout + additionalCanvasTimeout);\r\n      const baseWaitTime = 1500;\r\n      const additionalWaitTime = Math.min(boneCount * 200 + cubeCount * 50, 4000);\r\n      const renderWaitTime = Math.round(baseWaitTime + additionalWaitTime);\r\n\r\n      result = await renderer.renderModelFast(singleAngleUrl, {\r\n        width,\r\n        height,\r\n        renderWaitTime: renderWaitTime,\r\n        canvasTimeout: canvasTimeout,\r\n        imageFormat: imageFormat as \"png\" | \"jpeg\",\r\n        jpegQuality,\r\n        forceNewContext: true, // Always use fresh context since temp content changes between calls\r\n      });\r\n    }\r\n\r\n    // Don't close renderer - it's cached for reuse\r\n    httpServer.clearTempContent();\r\n\r\n    if (result.error) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Rendering failed: ${result.error}\\n\\nGenerated geometry:\\n${geometryJson}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    if (result.imageData) {\r\n      let finalImageData = result.imageData;\r\n\r\n      // Extract texture swatches from the design and append below the render\r\n      // Use combined function to minimize browser launches for reliability\r\n      // Use actual dimensions (which account for stitching label heights in multi-angle mode)\r\n      const swatches = ImageGenerationUtilities.extractTextureSwatches(design);\r\n      if (swatches.length > 0) {\r\n        finalImageData = await ImageGenerationUtilities.generateAndAppendSwatchStrip(\r\n          result.imageData,\r\n          swatches,\r\n          actualWidth,\r\n          actualHeight,\r\n          6\r\n        );\r\n      }\r\n\r\n      // Post-process based on format\r\n      let outputFormat = imageFormat as \"png\" | \"jpeg\";\r\n      if (imageFormat === \"jpeg\") {\r\n        // Convert to JPEG (multi-angle stitched images are always PNG initially)\r\n        if (multiAngle) {\r\n          finalImageData = await ImageGenerationUtilities.convertPngToJpeg(finalImageData, jpegQuality);\r\n        }\r\n      }\r\n      // Note: PNG recompression disabled for performance - the parsePng/recompressPng\r\n      // functions are too slow. If response size becomes an issue, consider using\r\n      // a native image library like sharp instead.\r\n      // else {\r\n      //   finalImageData = ImageGenerationUtilities.recompressPng(finalImageData);\r\n      // }\r\n\r\n      const rawBase64Image = Buffer.from(finalImageData).toString(\"base64\");\r\n      const outputMimeType = outputFormat === \"jpeg\" ? \"image/jpeg\" : \"image/png\";\r\n      const fitted = MinecraftMcpServer.ensureImageFitsContext(rawBase64Image, outputMimeType);\r\n\r\n      // Save image to a temp file so the Electron app can display it\r\n      // The Copilot SDK summarizes MCP tool responses and doesn't expose raw image data\r\n      // to the client, so we need this workaround for UI display\r\n      let tempImagePath: string | undefined;\r\n      try {\r\n        const tempDir = path.join(process.cwd(), \"debugoutput\", \"mcp-previews\");\r\n        if (!fs.existsSync(tempDir)) {\r\n          fs.mkdirSync(tempDir, { recursive: true });\r\n        }\r\n        const fileName = `preview-${Date.now()}-${Math.random().toString(36).substring(2, 8)}.${outputFormat}`;\r\n        tempImagePath = path.join(tempDir, fileName);\r\n        fs.writeFileSync(tempImagePath, finalImageData);\r\n        Log.debug(`Saved preview image to: ${tempImagePath}`);\r\n      } catch (saveErr) {\r\n        Log.debug(`Failed to save preview image to temp file: ${(saveErr as Error).message}`);\r\n      }\r\n\r\n      const responseContent: any[] = [\r\n        {\r\n          type: \"image\",\r\n          data: fitted.base64,\r\n          mimeType: fitted.mimeType,\r\n        },\r\n      ];\r\n\r\n      // Add text with image path so Electron can find it (SDK doesn't expose raw image to client)\r\n      if (tempImagePath) {\r\n        responseContent.push({\r\n          type: \"text\",\r\n          text: `[MCT_IMAGE_PATH:${tempImagePath}]`,\r\n        });\r\n      }\r\n\r\n      // Add warnings if any\r\n      if (conversionResult.warnings.length > 0) {\r\n        responseContent.push({\r\n          type: \"text\",\r\n          text: `Warnings:\\n${conversionResult.warnings.map((w) => `  - ${w}`).join(\"\\n\")}`,\r\n        });\r\n      }\r\n\r\n      return {\r\n        content: responseContent,\r\n        structuredContent: {\r\n          geometryJson: conversionResult.geometry,\r\n          textureSize: conversionResult.textureSize,\r\n          warnings: conversionResult.warnings,\r\n        },\r\n      };\r\n    }\r\n\r\n    return {\r\n      content: [{ type: \"text\", text: \"Error: No image data returned from renderer\" }],\r\n      isError: true,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Export a model design to .geo.json and texture.png files.\r\n   */\r\n  async _exportModelDesignOp(args: any): Promise<CallToolResult> {\r\n    const design = args.design as IMcpModelDesign;\r\n    const geometryOutputPath = args.geometryOutputPath as string;\r\n    const textureOutputPath = args.textureOutputPath as string;\r\n    const overwrite = args.overwrite as boolean | undefined;\r\n\r\n    if (!design) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: design is required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    if (!geometryOutputPath || !textureOutputPath) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: geometryOutputPath and textureOutputPath are required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate the design\r\n    const validationErrors = ModelDesignUtilities.validateDesign(design);\r\n    if (validationErrors.length > 0) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Design validation errors:\\n${validationErrors.map((e) => `  - ${e}`).join(\"\\n\")}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Check if files exist and overwrite is not set\r\n    if (!overwrite) {\r\n      if (fs.existsSync(geometryOutputPath)) {\r\n        return {\r\n          content: [\r\n            {\r\n              type: \"text\",\r\n              text: `Error: File already exists: ${geometryOutputPath}\\nUse overwrite: true to replace it.`,\r\n            },\r\n          ],\r\n          isError: true,\r\n        };\r\n      }\r\n      if (fs.existsSync(textureOutputPath)) {\r\n        return {\r\n          content: [\r\n            {\r\n              type: \"text\",\r\n              text: `Error: File already exists: ${textureOutputPath}\\nUse overwrite: true to replace it.`,\r\n            },\r\n          ],\r\n          isError: true,\r\n        };\r\n      }\r\n    }\r\n\r\n    // Convert the design to geometry\r\n    const conversionResult = ModelDesignUtilities.convertToGeometry(design);\r\n    const geometryJson = JSON.stringify(conversionResult.geometry, null, 2);\r\n\r\n    // Generate the texture\r\n    const textureDataUrl = await ImageGenerationUtilities.generateTextureFromAtlas(\r\n      conversionResult.atlasRegions,\r\n      conversionResult.textureSize,\r\n      conversionResult.pixelsPerUnit\r\n    );\r\n\r\n    const filesWritten: string[] = [];\r\n    const errors: string[] = [];\r\n\r\n    // Write geometry file\r\n    try {\r\n      const geoDir = path.dirname(geometryOutputPath);\r\n      if (!fs.existsSync(geoDir)) {\r\n        fs.mkdirSync(geoDir, { recursive: true });\r\n      }\r\n      fs.writeFileSync(geometryOutputPath, geometryJson, \"utf-8\");\r\n      filesWritten.push(geometryOutputPath);\r\n    } catch (e) {\r\n      errors.push(`Failed to write geometry file: ${e}`);\r\n    }\r\n\r\n    // Write texture file\r\n    if (textureDataUrl) {\r\n      try {\r\n        const texDir = path.dirname(textureOutputPath);\r\n        if (!fs.existsSync(texDir)) {\r\n          fs.mkdirSync(texDir, { recursive: true });\r\n        }\r\n\r\n        const base64Match = textureDataUrl.match(/^data:image\\/png;base64,(.*)$/);\r\n        if (base64Match) {\r\n          const binaryData = Buffer.from(base64Match[1], \"base64\");\r\n          fs.writeFileSync(textureOutputPath, binaryData);\r\n          filesWritten.push(textureOutputPath);\r\n        }\r\n      } catch (e) {\r\n        errors.push(`Failed to write texture file: ${e}`);\r\n      }\r\n    } else {\r\n      errors.push(\"Could not generate texture image\");\r\n    }\r\n\r\n    if (errors.length > 0 && filesWritten.length === 0) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Export failed:\\n${errors.map((e) => `  - ${e}`).join(\"\\n\")}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    let resultText = `Successfully exported model design:\\n`;\r\n    for (const file of filesWritten) {\r\n      resultText += `  \u2713 ${file}\\n`;\r\n    }\r\n\r\n    if (conversionResult.warnings.length > 0) {\r\n      resultText += `\\nWarnings:\\n${conversionResult.warnings.map((w) => `  - ${w}`).join(\"\\n\")}`;\r\n    }\r\n\r\n    if (errors.length > 0) {\r\n      resultText += `\\nErrors:\\n${errors.map((e) => `  - ${e}`).join(\"\\n\")}`;\r\n    }\r\n\r\n    return {\r\n      content: [{ type: \"text\", text: resultText }],\r\n      structuredContent: {\r\n        success: filesWritten.length > 0,\r\n        filesWritten,\r\n        geometryJson: conversionResult.geometry,\r\n        warnings: conversionResult.warnings,\r\n        errors,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Unified tool: Creates a 3D model, exports files to project, and returns a preview.\r\n   *\r\n   * This combines the functionality of previewModelDesign and exportModelDesign into\r\n   * a single, project-aware operation that:\r\n   * 1. Validates and converts the design to geometry + texture\r\n   * 2. Saves files to the appropriate project folder (auto-detected)\r\n   * 3. Persists the design to an accessory folder for future iteration\r\n   * 4. Auto-wires to matching entity/block/item if found\r\n   * 5. Returns a preview image\r\n   */\r\n  async _designModelOp(args: any): Promise<CallToolResult> {\r\n    if (!this._creatorTools) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: Creator Tools is not initialized\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    const design = args.design as IMcpModelDesign;\r\n    if (!design) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: design is required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    const modelId = args.modelId as string;\r\n    if (!modelId) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: modelId is required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    const projectPath = args.projectPath as string;\r\n    if (!projectPath) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: projectPath is required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    const usage = (args.usage as \"entity\" | \"block\" | \"item\") || \"entity\";\r\n\r\n    // Validate the design\r\n    const validationErrors = ModelDesignUtilities.validateDesign(design);\r\n    if (validationErrors.length > 0) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Design validation errors:\\n${validationErrors.map((e) => `  - ${e}`).join(\"\\n\")}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Create/load project from the folder path\r\n    const storage = new NodeStorage(projectPath, \"\");\r\n    const projectFolder = storage.rootFolder;\r\n    await projectFolder.ensureExists();\r\n\r\n    const project = new Project(this._creatorTools, path.basename(projectPath), null);\r\n    project.setProjectFolder(projectFolder);\r\n\r\n    // Determine the resource-pack folder to write into.\r\n    //\r\n    // Previously this always called\r\n    // `ensureDefaultResourcePackFolder()`, which created a nested\r\n    // `resource_packs/<auto-named>/` *inside* the supplied projectPath. When\r\n    // callers passed projectPath = `\u2026/resource_packs/<my_rp>` (i.e. the RP\r\n    // itself), files landed at `\u2026/resource_packs/<my_rp>/resource_packs/contoso_*/models/\u2026`\r\n    // instead of `\u2026/resource_packs/<my_rp>/models/\u2026`, leaving the entity\r\n    // referencing a non-existent geometry and rendering as the default cube.\r\n    //\r\n    // We now detect when the supplied folder already IS a resource pack \u2014 by\r\n    // the presence of a manifest.json with a `resources` module \u2014 and write\r\n    // directly into it.\r\n    let rpFolder;\r\n    if (MinecraftMcpServer._isResourcePackFolder(projectPath)) {\r\n      rpFolder = projectFolder;\r\n      Log.debug(`designModel: projectPath is already a resource pack \u2014 writing directly into it.`);\r\n    } else {\r\n      rpFolder = await project.ensureDefaultResourcePackFolder();\r\n    }\r\n\r\n    // Infer existing items for auto-wiring discovery\r\n    await project.inferProjectItemsFromFilesRootFolder();\r\n\r\n    // Determine folder paths based on usage\r\n    const modelsSubPath =\r\n      usage === \"block\" ? \"/models/blocks/\" : usage === \"item\" ? \"/models/item/\" : \"/models/entity/\";\r\n    const texturesSubPath =\r\n      usage === \"block\" ? \"/textures/blocks/\" : usage === \"item\" ? \"/textures/items/\" : \"/textures/entity/\";\r\n\r\n    const modelsFolder = await rpFolder.ensureFolderFromRelativePath(modelsSubPath);\r\n    const texturesFolder = await rpFolder.ensureFolderFromRelativePath(texturesSubPath);\r\n\r\n    // Generate geometry and texture\r\n    const conversionResult = ModelDesignUtilities.convertToGeometry(design);\r\n    const geometryJson = JSON.stringify(conversionResult.geometry, null, 2);\r\n\r\n    const textureDataUrl = await ImageGenerationUtilities.generateTextureFromAtlas(\r\n      conversionResult.atlasRegions,\r\n      conversionResult.textureSize,\r\n      conversionResult.pixelsPerUnit\r\n    );\r\n\r\n    const filesWritten: string[] = [];\r\n    const errors: string[] = [];\r\n\r\n    // Write geometry file\r\n    const geoFile = modelsFolder.ensureFile(`${modelId}.geo.json`);\r\n    try {\r\n      geoFile.setContent(geometryJson);\r\n      await geoFile.saveContent(false);\r\n      filesWritten.push(geoFile.storageRelativePath || `${modelId}.geo.json`);\r\n    } catch (e) {\r\n      errors.push(`Failed to write geometry file: ${e}`);\r\n    }\r\n\r\n    // Write texture file\r\n    let textureBytes: Uint8Array | undefined;\r\n    if (textureDataUrl) {\r\n      const texFile = texturesFolder.ensureFile(`${modelId}.png`);\r\n      try {\r\n        const base64Match = textureDataUrl.match(/^data:image\\/png;base64,(.*)$/);\r\n        if (base64Match) {\r\n          textureBytes = Buffer.from(base64Match[1], \"base64\");\r\n          texFile.setContent(textureBytes);\r\n          await texFile.saveContent(false);\r\n          filesWritten.push(texFile.storageRelativePath || `${modelId}.png`);\r\n        }\r\n      } catch (e) {\r\n        errors.push(`Failed to write texture file: ${e}`);\r\n      }\r\n    } else {\r\n      errors.push(\"Could not generate texture image\");\r\n    }\r\n\r\n    // Determine wiring target\r\n    let wireTarget: string | undefined = undefined;\r\n    if (args.wireTo === false) {\r\n      // Explicit opt-out\r\n      wireTarget = undefined;\r\n    } else if (typeof args.wireTo === \"string\") {\r\n      // Explicit target\r\n      wireTarget = args.wireTo;\r\n    } else {\r\n      // Auto-discover matching item by modelId\r\n      const matchingItem = project.items.find((item) => {\r\n        if (usage === \"entity\" && item.itemType === ProjectItemType.entityTypeBehavior) {\r\n          return item.name === modelId;\r\n        }\r\n        if (usage === \"block\" && item.itemType === ProjectItemType.blockTypeBehavior) {\r\n          return item.name === modelId;\r\n        }\r\n        if (usage === \"item\" && item.itemType === ProjectItemType.itemTypeBehavior) {\r\n          return item.name === modelId;\r\n        }\r\n        return false;\r\n      });\r\n\r\n      if (matchingItem) {\r\n        wireTarget = matchingItem.name;\r\n        Log.debug(`designModel: Auto-discovered matching ${usage}: ${wireTarget}`);\r\n      }\r\n    }\r\n\r\n    // TODO: Implement actual wiring to entity/block/item definitions\r\n    // This would update entity_resources.json, terrain_texture.json, etc.\r\n    // For now, we just note if wiring would happen\r\n    let wiringNote = \"\";\r\n    if (wireTarget) {\r\n      wiringNote = `\\n\\n\uD83D\uDCA1 Found matching ${usage} \"${wireTarget}\" - wiring support coming soon.`;\r\n    }\r\n\r\n    // Re-infer to get the new project item for the geometry file\r\n    await project.inferProjectItemsFromFilesRootFolder();\r\n\r\n    // Save design to accessory folder for future iteration\r\n    const geoProjectItem = project.items.find(\r\n      (item) => item.projectPath && item.projectPath.endsWith(`${modelId}.geo.json`)\r\n    );\r\n\r\n    if (geoProjectItem) {\r\n      try {\r\n        const designDef = await ModelDesignDefinition.ensureAsAccessoryOnProjectItem(geoProjectItem);\r\n        if (designDef) {\r\n          await designDef.updateDesign(design, {\r\n            usage,\r\n            wiredTo: wireTarget,\r\n          });\r\n          Log.debug(`designModel: Saved design to accessory folder for ${modelId}`);\r\n        }\r\n      } catch (e) {\r\n        Log.debug(`designModel: Failed to save design to accessory folder: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Generate preview image\r\n    let previewImageData: Uint8Array | undefined;\r\n    let previewError: string | undefined;\r\n\r\n    try {\r\n      Log.debug(`designModel: Starting preview generation for ${modelId}`);\r\n\r\n      // Use the existing preview rendering infrastructure (same pattern as previewModelDesign)\r\n      const serverManager = this.ensureServerManager();\r\n      serverManager.features = ServerManagerFeatures.all;\r\n\r\n      const httpServer = serverManager.ensureHttpServer(this._previewServerPort);\r\n\r\n      // Generate unique URLs for this render\r\n      const renderToken = Math.random().toString(36).substring(2, 15) + Date.now().toString(36);\r\n      const geometryPath = `/temp/designmodel-geometry-${renderToken}.json`;\r\n      const texturePath = `/temp/designmodel-texture-${renderToken}.png`;\r\n\r\n      // Register temporary content\r\n      httpServer.registerTempContent(geometryPath, geometryJson, \"application/json\");\r\n\r\n      if (textureDataUrl) {\r\n        const base64Match = textureDataUrl.match(/^data:image\\/png;base64,(.*)$/);\r\n        if (base64Match) {\r\n          const binaryData = Buffer.from(base64Match[1], \"base64\");\r\n          httpServer.registerTempContent(texturePath, binaryData, \"image/png\");\r\n        }\r\n      }\r\n\r\n      // Use the actual port the HTTP server is listening on (may differ from _previewServerPort\r\n      // if the server was already created for another purpose)\r\n      const baseUrl = `http://localhost:${httpServer.port}`;\r\n\r\n      // Wait for HTTP server to be ready\r\n      if (!httpServer.isListening) {\r\n        await httpServer.waitForReady();\r\n      }\r\n\r\n      // Initialize headless renderer (reuse if already created)\r\n      if (!this._cachedRenderer) {\r\n        this._cachedRenderer = new PlaywrightPageRenderer(baseUrl);\r\n        const initialized = await this._cachedRenderer.initialize();\r\n        if (!initialized) {\r\n          httpServer.clearTempContent();\r\n          throw new Error(\"Could not initialize headless renderer\");\r\n        }\r\n        await this._cachedRenderer.warmUp();\r\n      }\r\n\r\n      // Verify browser is still connected\r\n      if (!this._cachedRenderer.isBrowserReady()) {\r\n        this._cachedRenderer = new PlaywrightPageRenderer(baseUrl);\r\n        const reinitialized = await this._cachedRenderer.initialize();\r\n        if (!reinitialized) {\r\n          httpServer.clearTempContent();\r\n          throw new Error(\"Browser disconnected and could not be reinitialized\");\r\n        }\r\n        await this._cachedRenderer.warmUp();\r\n      }\r\n\r\n      const renderer = this._cachedRenderer;\r\n\r\n      // Build model viewer URL.\r\n      // NOTE: Do NOT append cameraX/cameraY/cameraZ here. VolumeEditor's ModelPreview\r\n      // view mode auto-frames the shot based on the model's actual bounds (see\r\n      // _calculateEntityMeshBounds / _calculateModelBoundsFromEntities). Passing fixed\r\n      // camera coordinates overrides auto-framing and produces shots that are either\r\n      // comically zoomed in for large models or tiny for small models.\r\n      let modelViewerUrl = `/?mode=modelviewer&geometry=${encodeURIComponent(geometryPath)}&skipVanilla=true`;\r\n      if (textureDataUrl) {\r\n        modelViewerUrl += `&texture=${encodeURIComponent(texturePath)}`;\r\n      }\r\n\r\n      const angleUrl = modelViewerUrl;\r\n\r\n      const result = await renderer.renderModelFast(angleUrl, {\r\n        width: 768,\r\n        height: 768,\r\n        renderWaitTime: 2000,\r\n        canvasTimeout: 10000,\r\n        imageFormat: \"png\",\r\n        forceNewContext: true,\r\n      });\r\n\r\n      httpServer.clearTempContent();\r\n\r\n      if (result.imageData) {\r\n        previewImageData = result.imageData;\r\n        Log.debug(`designModel: Preview image generated, size=${previewImageData.length} bytes`);\r\n\r\n        // Also save preview to accessory folder\r\n        if (geoProjectItem) {\r\n          try {\r\n            const designDef = await ModelDesignDefinition.ensureAsAccessoryOnProjectItem(geoProjectItem);\r\n            if (designDef) {\r\n              await designDef.savePreview(previewImageData);\r\n            }\r\n          } catch (e) {\r\n            Log.debug(`designModel: Failed to save preview to accessory folder: ${e}`);\r\n          }\r\n        }\r\n      } else {\r\n        previewError = result.error || \"No image data returned from renderer\";\r\n        Log.debug(`designModel: No preview image - ${previewError}`);\r\n      }\r\n    } catch (e) {\r\n      previewError = `Preview generation failed: ${e}`;\r\n      Log.debug(`designModel: Preview failed with exception: ${e}`);\r\n    }\r\n\r\n    // Build response\r\n    if (errors.length > 0 && filesWritten.length === 0) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Model creation failed:\\n${errors.map((e) => `  - ${e}`).join(\"\\n\")}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    let resultText = `\u2705 Created model \"${modelId}\" (${usage}):\\n`;\r\n    for (const file of filesWritten) {\r\n      resultText += `  \u2713 ${file}\\n`;\r\n    }\r\n\r\n    if (conversionResult.warnings.length > 0) {\r\n      resultText += `\\nWarnings:\\n${conversionResult.warnings.map((w) => `  - ${w}`).join(\"\\n\")}`;\r\n    }\r\n\r\n    if (errors.length > 0) {\r\n      resultText += `\\nErrors:\\n${errors.map((e) => `  - ${e}`).join(\"\\n\")}`;\r\n    }\r\n\r\n    if (previewError) {\r\n      resultText += `\\nPreview: ${previewError}`;\r\n    }\r\n\r\n    resultText += wiringNote;\r\n\r\n    const responseContent: any[] = [];\r\n    let previewImagePath: string | undefined;\r\n\r\n    // Include preview image if available\r\n    if (previewImageData) {\r\n      const rawBase64 = Buffer.from(previewImageData).toString(\"base64\");\r\n      const fitted = MinecraftMcpServer.ensureImageFitsContext(rawBase64, \"image/png\");\r\n\r\n      responseContent.push({\r\n        type: \"image\",\r\n        data: fitted.base64,\r\n        mimeType: fitted.mimeType,\r\n      });\r\n\r\n      // Save to temp file for Electron UI display (SDK workaround)\r\n      // Save in the project folder so it's accessible and not lost\r\n      try {\r\n        const tempDir = path.join(projectPath, \".mct\", \"previews\");\r\n        if (!fs.existsSync(tempDir)) {\r\n          fs.mkdirSync(tempDir, { recursive: true });\r\n        }\r\n        const fileName = `designmodel-${modelId}-${Date.now()}.png`;\r\n        previewImagePath = path.join(tempDir, fileName);\r\n        fs.writeFileSync(previewImagePath, previewImageData);\r\n\r\n        responseContent.push({\r\n          type: \"text\",\r\n          text: `[MCT_IMAGE_PATH:${previewImagePath}]\\n\\n${resultText}`,\r\n        });\r\n      } catch (saveErr) {\r\n        responseContent.push({\r\n          type: \"text\",\r\n          text: resultText,\r\n        });\r\n      }\r\n    } else {\r\n      responseContent.push({\r\n        type: \"text\",\r\n        text: resultText,\r\n      });\r\n    }\r\n\r\n    return {\r\n      content: responseContent,\r\n      structuredContent: {\r\n        success: filesWritten.length > 0,\r\n        filesWritten,\r\n        modelId,\r\n        usage,\r\n        wiredTo: wireTarget,\r\n        geometryJson: conversionResult.geometry,\r\n        warnings: conversionResult.warnings,\r\n        errors,\r\n        // Include preview status for debugging\r\n        previewStatus: previewImagePath ? \"generated\" : previewError || \"no-preview\",\r\n        // Include preview image path for Electron app (SDK filters out large base64 data)\r\n        previewImagePath,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Unified tool for building structures in Minecraft projects.\r\n   * Combines structure preview + export + project integration into one step.\r\n   */\r\n  async _designStructureOp(args: any): Promise<CallToolResult> {\r\n    if (!this._creatorTools || !this._env) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: Creator Tools is not initialized\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    const blockVolume = args.blockVolume as IBlockVolume;\r\n    if (!blockVolume) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: blockVolume is required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    const structureId = args.structureId as string;\r\n    if (!structureId) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: structureId is required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    const projectPath = args.projectPath as string;\r\n    if (!projectPath) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: projectPath is required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate the block volume\r\n    if (!blockVolume.blockLayersBottomToTop || !blockVolume.key) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: blockVolume must have blockLayersBottomToTop and key properties\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate basic structure\r\n    const dimensionError = this._validateBlockVolumeDimensions(blockVolume);\r\n    if (dimensionError) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error: ${dimensionError}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Get effective size for reporting (infers if not explicit)\r\n    const effectiveSize = StructureUtilities.getEffectiveSize(blockVolume);\r\n\r\n    // Convert IBlockVolume to Structure\r\n    const structure = StructureUtilities.createStructureFromIBlockVolume(blockVolume);\r\n\r\n    // Generate MCStructure bytes\r\n    const structureBytes = structure.getMCStructureBytes();\r\n    if (!structureBytes) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: Failed to generate MCStructure bytes from block volume\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Set up project from path\r\n    let project: Project;\r\n    try {\r\n      const nodeStorage = new NodeStorage(projectPath, \"\");\r\n      const projectFolder = nodeStorage.rootFolder;\r\n      await projectFolder.ensureExists();\r\n\r\n      project = new Project(this._creatorTools, path.basename(projectPath), null);\r\n      project.setProjectFolder(projectFolder);\r\n      await project.inferProjectItemsFromFilesRootFolder();\r\n    } catch (e) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error: Failed to open project at ${projectPath}: ${e}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Determine structure folder path\r\n    let bpFolder: IFolder | undefined = await project.ensureDefaultBehaviorPackFolder();\r\n    if (!bpFolder) {\r\n      // Create a behavior_packs structure\r\n      bpFolder = project.projectFolder?.ensureFolder(\"behavior_packs\");\r\n      if (!bpFolder) {\r\n        return {\r\n          content: [{ type: \"text\", text: \"Error: Could not create behavior_packs folder\" }],\r\n          isError: true,\r\n        };\r\n      }\r\n      bpFolder = bpFolder.ensureFolder(\"main_bp\");\r\n      if (!bpFolder) {\r\n        return {\r\n          content: [{ type: \"text\", text: \"Error: Could not create main_bp folder\" }],\r\n          isError: true,\r\n        };\r\n      }\r\n    }\r\n\r\n    const structuresFolder = bpFolder.ensureFolder(\"structures\");\r\n    await structuresFolder.ensureExists();\r\n\r\n    // Write the structure file\r\n    const structureFile = structuresFolder.ensureFile(`${structureId}.mcstructure`);\r\n    structureFile.setContent(structureBytes);\r\n    await structureFile.saveContent();\r\n\r\n    const filesWritten: string[] = [];\r\n    filesWritten.push(structureFile.fullPath);\r\n\r\n    // Re-infer to get the new project item for the structure file\r\n    await project.inferProjectItemsFromFilesRootFolder();\r\n\r\n    // Save design to accessory folder for future iteration\r\n    const structureProjectItem = project.items.find(\r\n      (item) => item.projectPath && item.projectPath.endsWith(`${structureId}.mcstructure`)\r\n    );\r\n\r\n    if (structureProjectItem) {\r\n      try {\r\n        const designDef = await StructureDesignDefinition.ensureAsAccessoryOnProjectItem(structureProjectItem);\r\n        if (designDef) {\r\n          await designDef.updateDesign(blockVolume);\r\n          Log.debug(`designStructure: Saved design to accessory folder for ${structureId}`);\r\n        }\r\n      } catch (e) {\r\n        Log.debug(`designStructure: Failed to save design to accessory folder: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Generate preview image\r\n    let previewImageData: Uint8Array | undefined;\r\n    let previewError: string | undefined;\r\n\r\n    try {\r\n      // Use the existing preview rendering infrastructure\r\n      const serverManager = this.ensureServerManager();\r\n      serverManager.features = ServerManagerFeatures.all;\r\n\r\n      const httpServer = serverManager.ensureHttpServer(this._previewServerPort);\r\n\r\n      // Generate unique URLs for this render\r\n      const renderToken = Math.random().toString(36).substring(2, 15) + Date.now().toString(36);\r\n      const structurePath = `/temp/designstructure-${renderToken}.mcstructure`;\r\n\r\n      // Register temporary content\r\n      httpServer.registerTempContent(structurePath, structureBytes, \"application/octet-stream\");\r\n\r\n      // Use the actual port the HTTP server is listening on (may differ from _previewServerPort\r\n      // if the server was already created for another purpose)\r\n      const baseUrl = `http://localhost:${httpServer.port}`;\r\n\r\n      // Wait for HTTP server to be ready\r\n      if (!httpServer.isListening) {\r\n        await httpServer.waitForReady();\r\n      }\r\n\r\n      // Initialize headless renderer (reuse if already created)\r\n      if (!this._cachedRenderer) {\r\n        this._cachedRenderer = new PlaywrightPageRenderer(baseUrl);\r\n        const initialized = await this._cachedRenderer.initialize();\r\n        if (!initialized) {\r\n          httpServer.clearTempContent();\r\n          throw new Error(\"Could not initialize headless renderer\");\r\n        }\r\n        await this._cachedRenderer.warmUp();\r\n      }\r\n\r\n      // Verify browser is still connected\r\n      if (!this._cachedRenderer.isBrowserReady()) {\r\n        this._cachedRenderer = new PlaywrightPageRenderer(baseUrl);\r\n        const reinitialized = await this._cachedRenderer.initialize();\r\n        if (!reinitialized) {\r\n          httpServer.clearTempContent();\r\n          throw new Error(\"Browser disconnected and could not be reinitialized\");\r\n        }\r\n        await this._cachedRenderer.warmUp();\r\n      }\r\n\r\n      const renderer = this._cachedRenderer;\r\n\r\n      // Build structure viewer URL.\r\n      // NOTE: Do NOT append cameraX/cameraY/cameraZ here. VolumeEditor's Structure\r\n      // view mode auto-frames the shot based on the block volume's dimensions\r\n      // (maxDim * 1.5 diagonal offset). Passing fixed camera coordinates overrides\r\n      // auto-framing and mis-frames both tiny and large structures.\r\n      let structureViewerUrl = `/?mode=structureviewer&structure=${encodeURIComponent(structurePath)}&hideChrome=true`;\r\n      structureViewerUrl += `&skipVanilla=false`;\r\n      structureViewerUrl += `&contentRoot=${encodeURIComponent(\"https://mctools.dev/\")}`;\r\n\r\n      const angleUrl = structureViewerUrl;\r\n\r\n      const result = await renderer.renderModelFast(angleUrl, {\r\n        width: 800,\r\n        height: 600,\r\n        renderWaitTime: 3000,\r\n        canvasTimeout: 15000,\r\n        imageFormat: \"png\",\r\n        forceNewContext: true,\r\n      });\r\n\r\n      httpServer.clearTempContent();\r\n\r\n      if (result.imageData) {\r\n        previewImageData = result.imageData;\r\n\r\n        // Also save preview to accessory folder\r\n        if (structureProjectItem) {\r\n          try {\r\n            const designDef = await StructureDesignDefinition.ensureAsAccessoryOnProjectItem(structureProjectItem);\r\n            if (designDef) {\r\n              await designDef.savePreview(previewImageData);\r\n            }\r\n          } catch (e) {\r\n            Log.debug(`designStructure: Failed to save preview to accessory folder: ${e}`);\r\n          }\r\n        }\r\n      } else {\r\n        previewError = result.error || \"No image data returned from renderer\";\r\n      }\r\n    } catch (e) {\r\n      previewError = `Preview generation failed: ${e}`;\r\n    }\r\n\r\n    // Build response\r\n    let resultText = `\u2705 Built structure \"${structureId}\":\\n`;\r\n    for (const file of filesWritten) {\r\n      resultText += `  \u2713 ${file}\\n`;\r\n    }\r\n    resultText += `\\n  Size: ${effectiveSize.x}x${effectiveSize.y}x${effectiveSize.z} blocks`;\r\n    resultText += `\\n  Origin: (${blockVolume.southWestBottom.x}, ${blockVolume.southWestBottom.y}, ${blockVolume.southWestBottom.z})`;\r\n    resultText += `\\n  Block types: ${Object.keys(blockVolume.key).length}`;\r\n\r\n    if (previewError) {\r\n      resultText += `\\n\\nPreview: ${previewError}`;\r\n    }\r\n\r\n    const responseContent: any[] = [];\r\n\r\n    // Include preview image if available\r\n    if (previewImageData) {\r\n      const rawBase64 = Buffer.from(previewImageData).toString(\"base64\");\r\n      const fitted = MinecraftMcpServer.ensureImageFitsContext(rawBase64, \"image/png\");\r\n\r\n      responseContent.push({\r\n        type: \"image\",\r\n        data: fitted.base64,\r\n        mimeType: fitted.mimeType,\r\n      });\r\n\r\n      // Save to temp file for Electron UI display (SDK workaround)\r\n      // Save in the project folder so it's accessible and not lost\r\n      try {\r\n        const tempDir = path.join(projectPath, \".mct\", \"previews\");\r\n        if (!fs.existsSync(tempDir)) {\r\n          fs.mkdirSync(tempDir, { recursive: true });\r\n        }\r\n        const fileName = `designstructure-${structureId}-${Date.now()}.png`;\r\n        const tempImagePath = path.join(tempDir, fileName);\r\n        fs.writeFileSync(tempImagePath, previewImageData);\r\n\r\n        responseContent.push({\r\n          type: \"text\",\r\n          text: `[MCT_IMAGE_PATH:${tempImagePath}]\\n\\n${resultText}`,\r\n        });\r\n      } catch (saveErr) {\r\n        responseContent.push({\r\n          type: \"text\",\r\n          text: resultText,\r\n        });\r\n      }\r\n    } else {\r\n      responseContent.push({\r\n        type: \"text\",\r\n        text: resultText,\r\n      });\r\n    }\r\n\r\n    return {\r\n      content: responseContent,\r\n      structuredContent: {\r\n        success: filesWritten.length > 0,\r\n        filesWritten,\r\n        structureId,\r\n        size: effectiveSize,\r\n        origin: blockVolume.southWestBottom,\r\n        blockTypeCount: Object.keys(blockVolume.key).length,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Returns starter model templates for common Minecraft entity types.\r\n   * These provide proper Minecraft-scale geometry with blocky pixel-art style textures.\r\n   */\r\n  async _getModelTemplatesOp(args: { templateType: ModelTemplateType }): Promise<CallToolResult> {\r\n    const template = await getModelTemplateAsync(args.templateType);\r\n    if (!template) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Unknown template type: ${args.templateType}. Available types: ${getAvailableTemplateTypes().join(\r\n              \", \"\r\n            )}`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    return {\r\n      content: [\r\n        {\r\n          type: \"text\",\r\n          text:\r\n            `Template: ${args.templateType}\\n\\n` +\r\n            `${template.description}\\n\\n` +\r\n            `This template can be passed directly to designModel.\\n` +\r\n            `Customize the colors in the 'textures' dictionary and adjust cube dimensions as needed.\\n\\n` +\r\n            `Template JSON:\\n` +\r\n            \"```json\\n\" +\r\n            JSON.stringify(template, null, 2) +\r\n            \"\\n```\",\r\n        },\r\n      ],\r\n      structuredContent: {\r\n        template: template,\r\n        templateType: args.templateType,\r\n        description: template.description,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Validates an IBlockVolume has the required basic structure.\r\n   * Size is now optional - if not provided, it will be inferred from the data.\r\n   * String lengths and row counts don't need to match exactly - shorter strings\r\n   * and missing rows are treated as air blocks.\r\n   *\r\n   * Returns an error message if validation fails, or undefined if valid.\r\n   */\r\n  private _validateBlockVolumeDimensions(blockVolume: IBlockVolume): string | undefined {\r\n    const layers = blockVolume.blockLayersBottomToTop;\r\n\r\n    // Just validate that we have at least some data\r\n    if (!layers || layers.length === 0) {\r\n      return \"blockLayersBottomToTop must have at least one layer\";\r\n    }\r\n\r\n    // Check that each layer has at least one row with content\r\n    let hasContent = false;\r\n    for (const layer of layers) {\r\n      if (layer && layer.length > 0) {\r\n        for (const row of layer) {\r\n          if (row && row.length > 0) {\r\n            hasContent = true;\r\n            break;\r\n          }\r\n        }\r\n        if (hasContent) break;\r\n      }\r\n    }\r\n\r\n    if (!hasContent) {\r\n      return \"blockLayersBottomToTop must have at least one non-empty row\";\r\n    }\r\n\r\n    return undefined; // Valid\r\n  }\r\n\r\n  /**\r\n   * Preview a structure design (IBlockVolume) by converting it to an MCStructure and rendering a preview image.\r\n   * Returns the preview as a base64-encoded PNG image from multiple angles.\r\n   */\r\n  async _previewStructureDesignOp(args: any): Promise<CallToolResult> {\r\n    if (!this._creatorTools || !this._env) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: Creator Tools is not initialized\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    const blockVolume = args.blockVolume as IBlockVolume;\r\n    if (!blockVolume) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: blockVolume is required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate the block volume\r\n    if (!blockVolume.blockLayersBottomToTop || !blockVolume.key) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: blockVolume must have blockLayersBottomToTop and key properties\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate basic structure (size is optional and will be inferred if not provided)\r\n    const dimensionError = this._validateBlockVolumeDimensions(blockVolume);\r\n    if (dimensionError) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error: ${dimensionError}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Get effective size for reporting (infers if not explicit)\r\n    const effectiveSize = StructureUtilities.getEffectiveSize(blockVolume);\r\n\r\n    // Convert IBlockVolume to Structure\r\n    const structure = StructureUtilities.createStructureFromIBlockVolume(blockVolume);\r\n\r\n    // Generate MCStructure bytes\r\n    const structureBytes = structure.getMCStructureBytes();\r\n    if (!structureBytes) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: Failed to generate MCStructure bytes from block volume\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Set up the HTTP server for rendering\r\n    const serverManager = this.ensureServerManager();\r\n    serverManager.features = ServerManagerFeatures.all;\r\n\r\n    const httpServer = serverManager.ensureHttpServer(this._previewServerPort);\r\n\r\n    // Generate unique URL for this render\r\n    const renderToken = Math.random().toString(36).substring(2, 15) + Date.now().toString(36);\r\n    const structurePath = `/temp/preview-structure-${renderToken}.mcstructure`;\r\n\r\n    // Register temporary content\r\n    httpServer.registerTempContent(structurePath, structureBytes, \"application/octet-stream\");\r\n\r\n    // Use the actual port the HTTP server is listening on (may differ from _previewServerPort\r\n    // if the server was already created for another purpose)\r\n    const baseUrl = `http://localhost:${httpServer.port}`;\r\n\r\n    // Wait for the HTTP server to be ready to accept connections\r\n    // This prevents race conditions on first render after MCP server start\r\n    if (!httpServer.isListening) {\r\n      await httpServer.waitForReady();\r\n    }\r\n\r\n    // Verify the HTTP server is actually still listening (could have crashed)\r\n    if (!httpServer.isListening) {\r\n      Log.debugAlert(`HTTP server on port ${httpServer.port} is not actually listening. Server may have crashed.`);\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Error: Internal HTTP server on port ${httpServer.port} is not responding. Please restart the MCP server.`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Initialize headless renderer (reuse if already created)\r\n    if (!this._cachedRenderer) {\r\n      this._cachedRenderer = new PlaywrightPageRenderer(baseUrl);\r\n      const initialized = await this._cachedRenderer.initialize();\r\n\r\n      if (!initialized) {\r\n        httpServer.clearTempContent();\r\n        this._cachedRenderer = undefined;\r\n        return {\r\n          content: [\r\n            {\r\n              type: \"text\",\r\n              text: \"Error: Could not initialize headless renderer. Ensure Chrome/Edge is available.\",\r\n            },\r\n          ],\r\n          isError: true,\r\n        };\r\n      }\r\n\r\n      // Warm up the browser to improve first-render reliability\r\n      await this._cachedRenderer.warmUp();\r\n    }\r\n\r\n    // Verify browser is still connected (it may have crashed or been disconnected)\r\n    if (!this._cachedRenderer.isBrowserReady()) {\r\n      Log.debug(\"Browser disconnected, reinitializing for structure preview...\");\r\n      this._cachedRenderer = new PlaywrightPageRenderer(baseUrl);\r\n      const reinitialized = await this._cachedRenderer.initialize();\r\n      if (!reinitialized) {\r\n        httpServer.clearTempContent();\r\n        this._cachedRenderer = undefined;\r\n        return {\r\n          content: [{ type: \"text\", text: \"Error: Browser disconnected and could not be reinitialized.\" }],\r\n          isError: true,\r\n        };\r\n      }\r\n      await this._cachedRenderer.warmUp();\r\n    }\r\n\r\n    const renderer = this._cachedRenderer;\r\n\r\n    const width = args.width || 800;\r\n    const height = args.height || 600;\r\n    const multiAngle = args.multiAngle !== false; // Default to true for structures\r\n    const imageFormat = args.imageFormat || \"png\";\r\n    const jpegQuality = args.jpegQuality || 80;\r\n\r\n    // Build the structure viewer URL\r\n    let structureViewerUrl = `/?mode=structureviewer&structure=${encodeURIComponent(structurePath)}&hideChrome=true`;\r\n    structureViewerUrl += `&skipVanilla=false`;\r\n    structureViewerUrl += `&contentRoot=${encodeURIComponent(\"https://mctools.dev/\")}`;\r\n\r\n    // Calculate dimensions (used for camera positioning and timeout calculations)\r\n    const sizeX = effectiveSize.x;\r\n    const sizeY = effectiveSize.y;\r\n    const sizeZ = effectiveSize.z;\r\n\r\n    let result: { imageData: Uint8Array | undefined; error?: string };\r\n\r\n    if (multiAngle) {\r\n      // Multi-angle rendering for structures\r\n      // Calculate center based on structure dimensions (using inferred size)\r\n      const maxDim = Math.max(sizeX, sizeY, sizeZ);\r\n      const radius = maxDim * 1.5 + 5;\r\n\r\n      const centerX = sizeX / 2;\r\n      const centerY = sizeY / 2;\r\n      const centerZ = sizeZ / 2;\r\n\r\n      const anglePresets = [\r\n        {\r\n          key: \"front-right\",\r\n          x: centerX + radius * 0.7,\r\n          y: centerY + radius * 0.5,\r\n          z: centerZ + radius * 0.7,\r\n          label: \"Front Right\",\r\n        },\r\n        {\r\n          key: \"front-left\",\r\n          x: centerX - radius * 0.7,\r\n          y: centerY + radius * 0.5,\r\n          z: centerZ + radius * 0.7,\r\n          label: \"Front Left\",\r\n        },\r\n        {\r\n          key: \"back-right\",\r\n          x: centerX + radius * 0.7,\r\n          y: centerY + radius * 0.5,\r\n          z: centerZ - radius * 0.7,\r\n          label: \"Back Right\",\r\n        },\r\n        {\r\n          key: \"back-left\",\r\n          x: centerX - radius * 0.7,\r\n          y: centerY + radius * 0.5,\r\n          z: centerZ - radius * 0.7,\r\n          label: \"Back Left\",\r\n        },\r\n        {\r\n          key: \"top-down\",\r\n          x: centerX,\r\n          y: centerY + radius * 1.2,\r\n          z: centerZ + 0.1, // Slight offset to avoid looking straight down\r\n          label: \"Top Down\",\r\n        },\r\n        {\r\n          key: \"side-right\",\r\n          x: centerX + radius,\r\n          y: centerY + radius * 0.3,\r\n          z: centerZ,\r\n          label: \"Side Right\",\r\n        },\r\n        {\r\n          key: \"side-left\",\r\n          x: centerX - radius,\r\n          y: centerY + radius * 0.3,\r\n          z: centerZ,\r\n          label: \"Side Left\",\r\n        },\r\n      ];\r\n\r\n      const requestedAngles = args.anglePresets || [\"front-right\", \"back-left\"];\r\n      const anglesToRender = requestedAngles\r\n        .map((a: string) => anglePresets.find((p) => p.key === a.toLowerCase()))\r\n        .filter(Boolean);\r\n\r\n      if (anglesToRender.length === 0) {\r\n        anglesToRender.push(anglePresets[0], anglePresets[3]); // front-right and back-left\r\n      }\r\n\r\n      const cols = anglesToRender.length >= 4 ? 2 : anglesToRender.length;\r\n      const rows = anglesToRender.length >= 4 ? 2 : 1;\r\n\r\n      const renderedImages: { label: string; imageData: Uint8Array }[] = [];\r\n      const renderErrors: string[] = [];\r\n\r\n      // Calculate timeouts based on structure size - larger structures need more time\r\n      const blockCount = sizeX * sizeY * sizeZ;\r\n      // Canvas timeout: time to wait for page to load and initialize (8s base + up to 15s for large structures)\r\n      const baseCanvasTimeout = 8000;\r\n      const additionalCanvasTimeout = Math.min(blockCount / 500, 15000);\r\n      const canvasTimeout = Math.round(baseCanvasTimeout + additionalCanvasTimeout);\r\n      // Render wait time: time to wait for meshes to render after canvas appears\r\n      const baseWaitTime = 2500;\r\n      const additionalWaitTime = Math.min(blockCount / 250, 6000); // Up to 6 more seconds for very large structures\r\n      const renderWaitTime = Math.round(baseWaitTime + additionalWaitTime);\r\n\r\n      for (let i = 0; i < anglesToRender.length; i++) {\r\n        const angle = anglesToRender[i];\r\n        const imgWidth = Math.floor(width / cols);\r\n        const imgHeight = Math.floor(height / rows);\r\n\r\n        // Add timestamp to force unique URL and prevent browser caching\r\n        const angleUrl =\r\n          structureViewerUrl + `&cameraX=${angle.x}&cameraY=${angle.y}&cameraZ=${angle.z}&t=${Date.now()}_${i}`;\r\n\r\n        const angleResult = await renderer.renderModelFast(angleUrl, {\r\n          width: imgWidth,\r\n          height: imgHeight,\r\n          renderWaitTime: renderWaitTime,\r\n          canvasTimeout: canvasTimeout,\r\n          imageFormat: \"png\",\r\n          forceNewContext: true, // Force new context for each angle to ensure camera position is applied\r\n        });\r\n\r\n        if (angleResult.imageData) {\r\n          renderedImages.push({ label: angle.label, imageData: angleResult.imageData });\r\n        } else if (angleResult.error) {\r\n          renderErrors.push(`${angle.label}: ${angleResult.error}`);\r\n        }\r\n      }\r\n\r\n      if (renderedImages.length > 0) {\r\n        const stitchedImage = await ImageGenerationUtilities.stitchImagesWithLabels(\r\n          renderedImages,\r\n          Math.floor(width / cols),\r\n          Math.floor(height / rows),\r\n          cols,\r\n          rows\r\n        );\r\n        result = { imageData: stitchedImage };\r\n      } else {\r\n        // No images rendered - provide helpful error message\r\n        let errorMsg = `No images rendered for multi-angle view. `;\r\n        errorMsg += `Structure size: ${sizeX}x${sizeY}x${sizeZ} (${blockCount} blocks). `;\r\n        errorMsg += `Requested angles: ${requestedAngles.join(\", \")}. `;\r\n        errorMsg += `Valid angles found: ${anglesToRender.length}. `;\r\n        if (renderErrors.length > 0) {\r\n          errorMsg += `Render errors: ${renderErrors.join(\"; \")}`;\r\n        }\r\n        result = { imageData: undefined, error: errorMsg };\r\n      }\r\n    } else {\r\n      // Single angle rendering\r\n      // Calculate timeouts based on structure size - larger structures need more time\r\n      const blockCount = sizeX * sizeY * sizeZ;\r\n      const baseCanvasTimeout = 8000;\r\n      const additionalCanvasTimeout = Math.min(blockCount / 500, 15000);\r\n      const canvasTimeout = Math.round(baseCanvasTimeout + additionalCanvasTimeout);\r\n      const baseWaitTime = 2500;\r\n      const additionalWaitTime = Math.min(blockCount / 250, 6000);\r\n      const renderWaitTime = Math.round(baseWaitTime + additionalWaitTime);\r\n\r\n      result = await renderer.renderModelFast(structureViewerUrl, {\r\n        width,\r\n        height,\r\n        renderWaitTime: renderWaitTime,\r\n        canvasTimeout: canvasTimeout,\r\n        imageFormat: imageFormat as \"png\" | \"jpeg\",\r\n        jpegQuality,\r\n        forceNewContext: true,\r\n      });\r\n    }\r\n\r\n    httpServer.clearTempContent();\r\n\r\n    if (result.error) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Rendering failed: ${result.error}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    if (result.imageData) {\r\n      let finalImageData = result.imageData;\r\n\r\n      if (imageFormat === \"jpeg\" && multiAngle) {\r\n        finalImageData = await ImageGenerationUtilities.convertPngToJpeg(finalImageData, jpegQuality);\r\n      }\r\n\r\n      const rawBase64Image = Buffer.from(finalImageData).toString(\"base64\");\r\n      const structOutputMime = imageFormat === \"jpeg\" ? \"image/jpeg\" : \"image/png\";\r\n      const fitted = MinecraftMcpServer.ensureImageFitsContext(rawBase64Image, structOutputMime);\r\n\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"image\",\r\n            data: fitted.base64,\r\n            mimeType: fitted.mimeType,\r\n          },\r\n          {\r\n            type: \"text\",\r\n            text: `Structure preview generated: ${effectiveSize.x}x${effectiveSize.y}x${effectiveSize.z} blocks`,\r\n          },\r\n        ],\r\n        structuredContent: {\r\n          size: effectiveSize,\r\n          origin: blockVolume.southWestBottom,\r\n          blockTypeCount: Object.keys(blockVolume.key).length,\r\n        },\r\n      };\r\n    }\r\n\r\n    return {\r\n      content: [{ type: \"text\", text: \"Error: No image data returned from renderer\" }],\r\n      isError: true,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Export a structure design (IBlockVolume) to an MCStructure file.\r\n   */\r\n  async _exportStructureDesignOp(args: any): Promise<CallToolResult> {\r\n    const blockVolume = args.blockVolume as IBlockVolume;\r\n    const outputPath = args.outputPath as string;\r\n    const overwrite = args.overwrite as boolean | undefined;\r\n\r\n    if (!blockVolume) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: blockVolume is required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    if (!outputPath) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: outputPath is required\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate the block volume (size is optional and will be inferred if not provided)\r\n    if (!blockVolume.blockLayersBottomToTop || !blockVolume.key) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: blockVolume must have blockLayersBottomToTop and key properties\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Validate basic structure\r\n    const dimensionError = this._validateBlockVolumeDimensions(blockVolume);\r\n    if (dimensionError) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error: ${dimensionError}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Get effective size for reporting (infers if not explicit)\r\n    const effectiveSize = StructureUtilities.getEffectiveSize(blockVolume);\r\n\r\n    // Check if file exists and overwrite is not set\r\n    if (!overwrite && fs.existsSync(outputPath)) {\r\n      return {\r\n        content: [\r\n          {\r\n            type: \"text\",\r\n            text: `Error: File already exists: ${outputPath}\\nUse overwrite: true to replace it.`,\r\n          },\r\n        ],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Convert IBlockVolume to Structure\r\n    const structure = StructureUtilities.createStructureFromIBlockVolume(blockVolume);\r\n\r\n    // Generate MCStructure bytes\r\n    const structureBytes = structure.getMCStructureBytes();\r\n    if (!structureBytes) {\r\n      return {\r\n        content: [{ type: \"text\", text: \"Error: Failed to generate MCStructure bytes from block volume\" }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    // Write the file\r\n    try {\r\n      const outputDir = path.dirname(outputPath);\r\n      if (!fs.existsSync(outputDir)) {\r\n        fs.mkdirSync(outputDir, { recursive: true });\r\n      }\r\n      fs.writeFileSync(outputPath, Buffer.from(structureBytes));\r\n    } catch (e) {\r\n      return {\r\n        content: [{ type: \"text\", text: `Error: Failed to write file: ${e}` }],\r\n        isError: true,\r\n      };\r\n    }\r\n\r\n    const resultText =\r\n      `Successfully exported structure:\\n` +\r\n      `  \u2713 ${outputPath}\\n` +\r\n      `  Size: ${effectiveSize.x}x${effectiveSize.y}x${effectiveSize.z} blocks\\n` +\r\n      `  Origin: (${blockVolume.southWestBottom.x}, ${blockVolume.southWestBottom.y}, ${blockVolume.southWestBottom.z})\\n` +\r\n      `  Block types: ${Object.keys(blockVolume.key).length}`;\r\n\r\n    return {\r\n      content: [{ type: \"text\", text: resultText }],\r\n      structuredContent: {\r\n        success: true,\r\n        filePath: outputPath,\r\n        size: effectiveSize,\r\n        origin: blockVolume.southWestBottom,\r\n        blockTypeCount: Object.keys(blockVolume.key).length,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Configure MCP prompts that expose server configuration to AI assistants.\r\n   * The main prompt is \"working-folder\" which tells the AI where to write content.\r\n   */\r\n  _configurePrompts() {\r\n    // Register a prompt that exposes the working folder to AI assistants\r\n    // SDK signature: prompt(name: string, cb: PromptCallback): RegisteredPrompt\r\n    this._server.prompt(\"working-folder\", async () => {\r\n      if (this._workingFolder) {\r\n        return {\r\n          messages: [\r\n            {\r\n              role: \"user\" as const,\r\n              content: {\r\n                type: \"text\" as const,\r\n                text: `The working folder for Minecraft content is: ${this._workingFolder}\\n\\nWhen creating Minecraft content, use this folder as the base path for all file operations. For example:\\n- Create projects at: ${this._workingFolder}\\n- Write model designs to: ${this._workingFolder}\\n- Save structures to: ${this._workingFolder}\\n\\nAlways use absolute paths based on this working folder.`,\r\n              },\r\n            },\r\n          ],\r\n        };\r\n      } else {\r\n        return {\r\n          messages: [\r\n            {\r\n              role: \"user\" as const,\r\n              content: {\r\n                type: \"text\" as const,\r\n                text: \"No working folder has been set. The MCP server was started without the -i argument. You should ask the user where they want to create Minecraft content, or use the current working directory.\",\r\n              },\r\n            },\r\n          ],\r\n        };\r\n      }\r\n    });\r\n\r\n    // Also register a resource that provides the working folder info\r\n    // SDK signature: resource(name: string, uri: string, readCallback: ReadResourceCallback)\r\n    this._server.resource(\"working-folder-config\", \"config://working-folder\", async (uri) => {\r\n      return {\r\n        contents: [\r\n          {\r\n            uri: uri.href,\r\n            mimeType: \"application/json\",\r\n            text: JSON.stringify(\r\n              {\r\n                workingFolder: this._workingFolder || null,\r\n                hasWorkingFolder: !!this._workingFolder,\r\n                message: this._workingFolder\r\n                  ? `Use ${this._workingFolder} as the base path for Minecraft content operations.`\r\n                  : \"No working folder set. Use current directory or ask user for path.\",\r\n              },\r\n              null,\r\n              2\r\n            ),\r\n          },\r\n        ],\r\n      };\r\n    });\r\n  }\r\n\r\n  async _configureTools() {\r\n    const infoSetForm = Database.ensureFormLoadedSync(\"info_set\", \"info\");\r\n    const stateForm = Database.ensureFormLoadedSync(\"action_set\", \"world_state\");\r\n    const actionSetForm = Database.ensureFormLoadedSync(\"action_set\", \"action_group\");\r\n\r\n    if (infoSetForm && actionSetForm && stateForm) {\r\n      const validationResultForm = { info: DataFormZod.getZodSchema(infoSetForm) };\r\n      const actionSetResultForm = { actionSet: DataFormZod.getZodSchema(actionSetForm) };\r\n      const stateResultForm = { state: DataFormZod.getZodSchema(stateForm) };\r\n\r\n      this._registerTool(\r\n        \"createProject\",\r\n        {\r\n          title: \"Creates scaffolding and files for a new Minecraft project\",\r\n          description: \"Creates all of the foundational files for a new Minecraft project.\",\r\n          inputSchema: {\r\n            folderPathToCreateProjectAt: z.string(),\r\n            title: z.string(),\r\n            description: z.string().optional(),\r\n            newName: z.string(),\r\n            creator: z.string(),\r\n            template: z.enum([\r\n              \"addonStarter\",\r\n              \"tsStarter\",\r\n              \"addonFull\",\r\n              \"scriptBox\",\r\n              \"dlStarter\",\r\n              \"editor-scriptBox\",\r\n              \"editor-basics\",\r\n            ]),\r\n          },\r\n        },\r\n        this._createOp\r\n      );\r\n\r\n      this._registerTool(\r\n        \"addItem\",\r\n        {\r\n          title: \"Adds files for Minecraft items to a project\",\r\n          description: \"Adds files for Minecraft items to a project.\",\r\n          inputSchema: {\r\n            folderPathToCreateProjectAt: z.string(),\r\n            templateType: z.enum([\r\n              \"basicUnitCubeBlock\",\r\n              \"crateBlock\",\r\n              \"basicDieBlock\",\r\n              \"sushiRollBlock\",\r\n              \"fishBowlBlock\",\r\n              \"hardBiscuit\",\r\n              \"pear\",\r\n              \"elixir\",\r\n              \"rod\",\r\n              \"key\",\r\n              \"customSword\",\r\n              \"wrench\",\r\n              \"allay\",\r\n              \"axolotl\",\r\n              \"cat\",\r\n              \"cow\",\r\n              \"creeper\",\r\n              \"enderman\",\r\n              \"rabbit\",\r\n              \"pig\",\r\n              \"sheep\",\r\n              \"skeleton\",\r\n              \"wolf\",\r\n              \"zombie\",\r\n              \"spawn_rule\",\r\n              \"loot_table\",\r\n              \"recipe_shapeless\",\r\n              \"recipe_shaped\",\r\n              \"feature_rule\",\r\n              \"jigsaw\",\r\n              \"atmospherics\",\r\n              \"color_grading\",\r\n              \"lighting\",\r\n              \"pbr\",\r\n              \"biome_behavior\",\r\n              \"entity_behavior\",\r\n              \"entity_resources\",\r\n              \"item_behavior\",\r\n              \"attachable\",\r\n              \"block_behavior\",\r\n              \"block_culling\",\r\n              \"block_catalog\",\r\n              \"biome_resource\",\r\n              \"aggregate_feature\",\r\n              \"animation\",\r\n              \"animation_controller\",\r\n              \"render_controller\",\r\n            ]),\r\n            name: z.string(),\r\n          },\r\n        },\r\n        this._addOp\r\n      );\r\n\r\n      // Create Minecraft content from meta-schema definition\r\n      this._registerTool(\r\n        \"createMinecraftContent\",\r\n        {\r\n          title: \"Create Minecraft content from simplified meta-schema\",\r\n          description:\r\n            \"Create a complete Minecraft Bedrock behavior-pack + resource-pack from a single AI-friendly meta-schema. \" +\r\n            \"Use this when you are authoring an add-on with multiple entities/blocks/items, loot tables, recipes, spawn rules, \" +\r\n            \"features, or structures \\u2014 it emits manifests and cross-references for you. \" +\r\n            \"\\n\\n\" +\r\n            \"When NOT to use this tool:\\n\" +\r\n            \"  - For a standalone 3D model preview (no project, just a PNG + .geo.json): use `designModel`.\\n\" +\r\n            \"  - For a standalone structure preview (.mcstructure only): use `designStructure`.\\n\" +\r\n            \"  - For a single texture PNG from pixel art: use `writeImageFileFromPixelArt` or `previewTextureSpec`.\\n\" +\r\n            \"  - To analyze or reverse-engineer an existing project: use `getEffectiveContentSchema`.\\n\" +\r\n            \"\\n\" +\r\n            \"The meta-schema has three layers of abstraction you can mix freely: \" +\r\n            \"(1) traits \\u2014 pre-packaged bundles (e.g. 'sword', 'humanoid', 'container'); \" +\r\n            \"(2) simplified properties (health, damage, color, icon, etc.); \" +\r\n            \"(3) raw `components` \\u2014 full escape hatch to native Minecraft JSON.\",\r\n          inputSchema: {\r\n            definition: MinecraftContentSchema,\r\n            outputPath: z\r\n              .string()\r\n              .describe(\r\n                \"Absolute path to the folder where content should be generated. Pass the user's current \" +\r\n                  \"project folder AS-IS \\u2014 do NOT append a new subfolder named after the project. \" +\r\n                  \"The tool auto-resolves the actual write location: \" +\r\n                  \"(1) if the folder already contains behavior_packs/, resource_packs/, package.json, or a \" +\r\n                  \"manifest.json, it anchors to that project root; \" +\r\n                  \"(2) if the folder is empty or doesn't exist yet, it writes directly there; \" +\r\n                  \"(3) only if the folder has unrelated existing content does it create a namespaced subfolder. \" +\r\n                  \"The response reports the resolved project root under `projectRoot`.\"\r\n              ),\r\n          },\r\n        },\r\n        this._createMinecraftContentOp\r\n      );\r\n\r\n      // Get effective content schema from existing project\r\n      this._registerTool(\r\n        \"getEffectiveContentSchema\",\r\n        {\r\n          title: \"Get effective content schema for a Minecraft project\",\r\n          description:\r\n            \"Analyzes an existing Minecraft Bedrock project and infers what traits and simplified properties \" +\r\n            \"would represent it in the meta-schema format. This is useful for understanding existing content, \" +\r\n            \"importing legacy projects into the simplified format, or generating documentation. \" +\r\n            \"Returns an IMinecraftContentDefinition that could be used with createMinecraftContent to recreate similar content.\",\r\n          inputSchema: {\r\n            folderPath: z.string().describe(\"Absolute path to the project folder to analyze\"),\r\n            options: z\r\n              .object({\r\n                minTraitConfidence: z\r\n                  .number()\r\n                  .min(0)\r\n                  .max(1)\r\n                  .optional()\r\n                  .describe(\"Minimum confidence (0-1) for trait detection. Default: 0.6\"),\r\n                includeRawComponents: z\r\n                  .boolean()\r\n                  .optional()\r\n                  .describe(\"Include raw components not explained by traits. Default: true\"),\r\n                inferNamespace: z\r\n                  .boolean()\r\n                  .optional()\r\n                  .describe(\"Try to detect namespace from identifiers. Default: true\"),\r\n                includeBehaviorPresets: z\r\n                  .boolean()\r\n                  .optional()\r\n                  .describe(\"Include behavior presets in addition to traits. Default: true\"),\r\n                includeComponentGroups: z\r\n                  .boolean()\r\n                  .optional()\r\n                  .describe(\"Include component groups as raw data. Default: false\"),\r\n                includeEvents: z.boolean().optional().describe(\"Include events as raw data. Default: false\"),\r\n              })\r\n              .optional()\r\n              .describe(\"Options for controlling inference behavior\"),\r\n          },\r\n        },\r\n        this._getEffectiveContentSchemaOp\r\n      );\r\n\r\n      // add a validation tool\r\n      this._registerTool(\r\n        \"validateContent\",\r\n        {\r\n          title: \"Validate Minecraft Bedrock content\",\r\n          description:\r\n            \"Validates content (either single JSON files or a ZIP file encoded as a base64 string) and returns validation results.\",\r\n          inputSchema: { jsonContentOrBase64ZipContent: z.string() },\r\n          outputSchema: validationResultForm,\r\n        },\r\n        this._processValidateContent\r\n      );\r\n\r\n      // add a validation tool\r\n      this._registerTool(\r\n        \"validateFile\",\r\n        {\r\n          title: \"Validate Minecraft Bedrock at a file path\",\r\n          description: \"Validates content at a particular file path\",\r\n          inputSchema: { filePath: z.string() },\r\n          outputSchema: validationResultForm,\r\n        },\r\n        this._processValidateContentAtPath\r\n      );\r\n\r\n      // create a Minecraft server session\r\n      this._registerTool(\r\n        \"createMinecraftSessionWithContent\",\r\n        {\r\n          title: \"Starts a new Minecraft session\",\r\n          description:\r\n            \"Starts a new Minecraft session using the specified content, which can be used for validating content and gameplay.\",\r\n          inputSchema: {\r\n            sessionName: z.string(),\r\n            packagedMcaddonOrMcworldFilePath: z.string(),\r\n            testPlayerNameToUse: z.string(),\r\n          },\r\n          outputSchema: stateResultForm,\r\n        },\r\n        this._createMinecraftSession\r\n      );\r\n\r\n      // create a Minecraft server session\r\n      this._registerTool(\r\n        \"moveSessionPlayerToLocation\",\r\n        {\r\n          title: \"Moves a Minecraft player to a specific location in the Minecraft session\",\r\n          description: \"Moves a player to the specified X/Y/Z coordinates within an active Minecraft session.\",\r\n          inputSchema: {\r\n            sessionName: z.string(),\r\n            playerName: z.string(),\r\n            locationToHavePlayerMoveTo: z.object({ x: z.number(), y: z.number(), z: z.number() }),\r\n          },\r\n          outputSchema: stateResultForm,\r\n        },\r\n        this._moveSessionPlayerToLocation\r\n      );\r\n\r\n      // run a command\r\n      this._registerTool(\r\n        \"runCommandInMinecraft\",\r\n        {\r\n          title: \"Runs a command in the specified Minecraft session\",\r\n          description: \"Runs a command in the specified Minecraft session.\",\r\n          inputSchema: { sessionName: z.string(), command: z.string() },\r\n        },\r\n        this._runCommandOp\r\n      );\r\n\r\n      // run a command\r\n      this._registerTool(\r\n        \"runActionSetInMinecraft\",\r\n        {\r\n          title: \"Runs a set of actions in the specified Minecraft session and returns a resulting state.\",\r\n          description: \"Runs a set of actions in the specified Minecraft session.\",\r\n          inputSchema: actionSetResultForm,\r\n        },\r\n        this._runActionSetOp\r\n      );\r\n\r\n      // List all active Minecraft sessions and BDS slots\r\n      this._registerTool(\r\n        \"listMinecraftSessions\",\r\n        {\r\n          title: \"List all active Minecraft sessions\",\r\n          description:\r\n            \"Lists all active Minecraft sessions, including named sessions and any unnamed active BDS server slots. \" +\r\n            \"Returns session name, slot number, port, and server status for each.\",\r\n          inputSchema: {},\r\n        },\r\n        this._listMinecraftSessionsOp\r\n      );\r\n\r\n      // Connect to an existing BDS slot as a named session\r\n      this._registerTool(\r\n        \"connectToMinecraftSession\",\r\n        {\r\n          title: \"Connect to an existing Minecraft session\",\r\n          description:\r\n            \"Registers an existing Bedrock Dedicated Server slot as a named session. \" +\r\n            \"Once registered, all session-based tools (runCommandInMinecraft, moveSessionPlayerToLocation, etc.) \" +\r\n            \"can reference this session by name. Use listMinecraftSessions first to discover available slots.\",\r\n          inputSchema: {\r\n            sessionName: z.string().describe(\"Name to assign to this session for future tool calls\"),\r\n            slot: z.number().optional().describe(\"Server slot number to connect to (0-79). Defaults to 0.\"),\r\n          },\r\n        },\r\n        this._connectToMinecraftSessionOp\r\n      );\r\n    }\r\n\r\n    // Define the Zod schema for model design input\r\n\r\n    // Schema for textured rectangle - unified concept for filling rectangular areas\r\n    // This replaces the separate \"color\" and \"noise\" properties for easier AI reasoning\r\n    const mcpTexturedRectangleSchema = z\r\n      .object({\r\n        type: z\r\n          .enum([\"none\", \"solid\", \"random_noise\", \"dither_noise\", \"perlin_noise\", \"stipple_noise\", \"gradient\"])\r\n          .describe(\r\n            \"Fill algorithm. \" +\r\n              \"'none' = fully transparent background (pair with pixelArt for icon-style textures with see-through edges). \" +\r\n              \"'solid' = flat single color (uses first entry in colors). \" +\r\n              \"'stipple_noise' = organic materials (skin, stone, leather). \" +\r\n              \"'dither_noise' = structured patterns (metal, fabric, bricks). \" +\r\n              \"'perlin_noise' = smooth organic (grass, water, clouds). \" +\r\n              \"'random_noise' = rough/grainy textures (gravel, sand). \" +\r\n              \"'gradient' = smooth color transitions.\"\r\n          ),\r\n        colors: z\r\n          .array(z.string())\r\n          .optional()\r\n          .describe(\r\n            \"Colors to use (hex like '#FF0000'). Required for all types except 'none' (omit or pass []). \" +\r\n              \"For 'solid', only the first color is used. For noise types, provide 2+ colors for richer textures.\"\r\n          ),\r\n        factor: z\r\n          .number()\r\n          .optional()\r\n          .describe(\r\n            \"Noise intensity from 0 to 1. Higher = more variation. Default: 0.2. Ignored for 'solid' and 'none'.\"\r\n          ),\r\n        seed: z.number().optional().describe(\"Random seed for deterministic results. Ignored for 'solid' and 'none'.\"),\r\n        pixelSize: z\r\n          .number()\r\n          .optional()\r\n          .describe(\"Size of noise pixels. Larger = blockier. Default: 1. Ignored for 'solid' and 'none'.\"),\r\n        scale: z.number().optional().describe(\"For perlin_noise: controls smoothness. Larger = smoother. Default: 4.\"),\r\n      })\r\n      .describe(\r\n        \"Textured rectangle fill. Use type:'none' for transparent icon backgrounds with pixelArt overlays, \" +\r\n          \"type:'solid' for flat colors, or one of the noise/gradient types for Minecraft-style procedural textures.\"\r\n      );\r\n\r\n    // ============================================================================\r\n    // TEXTURE EFFECTS SCHEMAS\r\n    // ============================================================================\r\n\r\n    // Lighting effect schema\r\n    const mcpLightingEffectSchema = z\r\n      .object({\r\n        preset: z\r\n          .enum([\"inset\", \"outset\", \"pillow\", \"ambient_occlusion\"])\r\n          .describe(\r\n            \"Lighting preset: \" +\r\n              \"'inset' = darken top/left, lighten bottom/right (recessed panels); \" +\r\n              \"'outset' = lighten top/left, darken bottom/right (raised blocks); \" +\r\n              \"'pillow' = darken edges, lighten center (rounded look); \" +\r\n              \"'ambient_occlusion' = darken corners/edges (realistic depth)\"\r\n          ),\r\n        intensity: z\r\n          .number()\r\n          .optional()\r\n          .describe(\"Effect intensity (0.0-1.0). Default: 0.3. Higher = more pronounced effect.\"),\r\n        angle: z\r\n          .number()\r\n          .optional()\r\n          .describe(\r\n            \"Light source angle in degrees (0-360). Default: 315 (top-left). 0=right, 90=bottom, 180=left, 270=top.\"\r\n          ),\r\n      })\r\n      .describe(\"Lighting effect for pseudo-3D depth simulation\");\r\n\r\n    // Border side schema (CSS-like individual side configuration)\r\n    const mcpBorderSideSchema = z\r\n      .object({\r\n        style: z\r\n          .enum([\"solid\", \"dashed\", \"worn\", \"highlight\"])\r\n          .describe(\r\n            \"Border style: \" +\r\n              \"'solid' = continuous line; \" +\r\n              \"'dashed' = alternating segments; \" +\r\n              \"'worn' = irregular/weathered edge; \" +\r\n              \"'highlight' = bright/glowing edge\"\r\n          ),\r\n        width: z.number().optional().describe(\"Border width in pixels (1-8). Default: 1.\"),\r\n        color: z\r\n          .string()\r\n          .optional()\r\n          .describe(\"Border color (hex). If not specified, auto-calculated from texture (darker or lighter).\"),\r\n      })\r\n      .describe(\"Configuration for a single border side\");\r\n\r\n    // Border effect schema (CSS-like syntax with 'all' shorthand and individual sides)\r\n    const mcpBorderEffectSchema = z\r\n      .object({\r\n        all: mcpBorderSideSchema\r\n          .optional()\r\n          .describe(\"Shorthand: apply this configuration to all sides. Individual side properties override this.\"),\r\n        top: mcpBorderSideSchema.optional().describe(\"Top border configuration (overrides 'all').\"),\r\n        right: mcpBorderSideSchema.optional().describe(\"Right border configuration (overrides 'all').\"),\r\n        bottom: mcpBorderSideSchema.optional().describe(\"Bottom border configuration (overrides 'all').\"),\r\n        left: mcpBorderSideSchema.optional().describe(\"Left border configuration (overrides 'all').\"),\r\n        seed: z.number().optional().describe(\"Random seed for 'worn' style deterministic weathering.\"),\r\n      })\r\n      .describe(\r\n        \"Border effect with CSS-like syntax. Use 'all' for uniform borders, or specify individual sides. \" +\r\n          \"Example: { all: { style: 'highlight', width: 1 } } or { top: { style: 'highlight' }, left: { style: 'highlight' } }\"\r\n      );\r\n\r\n    // Overlay effect schema\r\n    const mcpOverlayEffectSchema = z\r\n      .object({\r\n        pattern: z\r\n          .enum([\"cracks\", \"scratches\", \"moss\", \"rust\", \"sparkle\", \"veins\"])\r\n          .describe(\r\n            \"Overlay pattern: \" +\r\n              \"'cracks' = dark fracture lines; \" +\r\n              \"'scratches' = light linear marks; \" +\r\n              \"'moss' = green organic patches; \" +\r\n              \"'rust' = orange/brown oxidation; \" +\r\n              \"'sparkle' = bright highlight dots; \" +\r\n              \"'veins' = dark branching lines\"\r\n          ),\r\n        density: z.number().optional().describe(\"Coverage density (0.0-1.0). Default: 0.3. Higher = more coverage.\"),\r\n        color: z\r\n          .string()\r\n          .optional()\r\n          .describe(\"Override color for the pattern (hex). Uses pattern-appropriate default if not specified.\"),\r\n        seed: z.number().optional().describe(\"Random seed for deterministic pattern placement.\"),\r\n      })\r\n      .describe(\"Overlay effect for surface weathering and detail\");\r\n\r\n    // Color variation effect schema\r\n    const mcpColorVariationEffectSchema = z\r\n      .object({\r\n        mode: z\r\n          .enum([\"hue_shift\", \"saturation_jitter\", \"value_jitter\", \"palette_snap\"])\r\n          .describe(\r\n            \"Color variation mode: \" +\r\n              \"'hue_shift' = randomly shift hue; \" +\r\n              \"'saturation_jitter' = randomly vary saturation; \" +\r\n              \"'value_jitter' = randomly vary brightness; \" +\r\n              \"'palette_snap' = snap colors to nearest palette entry\"\r\n          ),\r\n        amount: z.number().optional().describe(\"Variation amount (0.0-1.0). Default: 0.1. Higher = more variation.\"),\r\n        palette: z\r\n          .array(z.string())\r\n          .optional()\r\n          .describe(\"For 'palette_snap': array of colors to snap to (hex strings).\"),\r\n        seed: z.number().optional().describe(\"Random seed for deterministic variation.\"),\r\n      })\r\n      .describe(\"Color variation effect to reduce flatness\");\r\n\r\n    // Tiling effect schema\r\n    const mcpTilingEffectSchema = z\r\n      .object({\r\n        seamless: z.boolean().optional().describe(\"Make edges seamless for repeating textures by blending edges.\"),\r\n        pattern: z\r\n          .enum([\"brick\", \"herringbone\", \"basketweave\", \"random\"])\r\n          .optional()\r\n          .describe(\"Tiling pattern for block arrangement (applied during generation, not post-process).\"),\r\n        offset: z.number().optional().describe(\"Offset amount for brick pattern (0.0-1.0). Default: 0.5.\"),\r\n      })\r\n      .describe(\"Tiling effect for seamless and patterned textures\");\r\n\r\n    // Combined texture effects schema\r\n    const mcpTextureEffectsSchema = z\r\n      .object({\r\n        lighting: mcpLightingEffectSchema.optional().describe(\"Lighting effect for pseudo-3D depth.\"),\r\n        border: mcpBorderEffectSchema.optional().describe(\"Border effect for edges/outlines (CSS-like syntax).\"),\r\n        overlay: z\r\n          .union([mcpOverlayEffectSchema, z.array(mcpOverlayEffectSchema)])\r\n          .optional()\r\n          .describe(\r\n            \"Overlay effect(s) for surface detail. Can be a single effect or array of effects applied in order.\"\r\n          ),\r\n        colorVariation: mcpColorVariationEffectSchema.optional().describe(\"Color variation effect.\"),\r\n        tiling: mcpTilingEffectSchema.optional().describe(\"Tiling effect for seamless textures.\"),\r\n      })\r\n      .describe(\r\n        \"Post-processing effects applied to the texture. \" +\r\n          \"Order: colorVariation -> lighting -> overlay -> border -> tiling. \" +\r\n          \"Example: { lighting: { preset: 'inset', intensity: 0.3 }, border: { all: { style: 'highlight' } } }\"\r\n      );\r\n\r\n    // Schema for pixel color (can use RGBA or hex)\r\n    const mcpPixelColorSchema = z\r\n      .object({\r\n        r: z.number().optional().describe(\"Red channel (0-255)\"),\r\n        g: z.number().optional().describe(\"Green channel (0-255)\"),\r\n        b: z.number().optional().describe(\"Blue channel (0-255)\"),\r\n        a: z.number().optional().describe(\"Alpha channel (0-255, default 255 = opaque)\"),\r\n        hex: z.string().optional().describe(\"Alternative: hex color string like '#FF0000'\"),\r\n      })\r\n      .describe(\"Pixel color: use either r/g/b values or hex string\");\r\n\r\n    // Schema for pixel art overlay\r\n    const mcpPixelArtSchema = z\r\n      .object({\r\n        scaleMode: z\r\n          .enum([\"unit\", \"exact\", \"cover\"])\r\n          .optional()\r\n          .describe(\r\n            \"How to scale the pixel art: \" +\r\n              \"'unit' (default) = each character is 1 Minecraft unit, x/y are in units; \" +\r\n              \"'exact' = each character is 1 pixel, x/y are in pixels; \" +\r\n              \"'cover' = stretch to fill the face, x/y ignored\"\r\n          ),\r\n        x: z\r\n          .number()\r\n          .optional()\r\n          .describe(\"X offset (in units for 'unit' mode, pixels for 'exact' mode, ignored for 'cover')\"),\r\n        y: z\r\n          .number()\r\n          .optional()\r\n          .describe(\"Y offset (in units for 'unit' mode, pixels for 'exact' mode, ignored for 'cover')\"),\r\n        lines: z\r\n          .array(z.string())\r\n          .describe(\"ASCII art lines where each character maps to a palette color. Space = transparent.\"),\r\n        palette: z\r\n          .record(z.string(), mcpPixelColorSchema)\r\n          .describe(\"Map of characters to colors. Do not define space ' ' - it is reserved for transparency.\"),\r\n      })\r\n      .describe(\r\n        \"Pixel art overlay using ASCII patterns. Default scaleMode='unit' means each character = 1 Minecraft unit. \" +\r\n          \"Example: { lines: ['E E', ' n '], palette: { E: { hex: '#000000' }, n: { hex: '#402020' } } }\"\r\n      );\r\n\r\n    // Schema for face content - can reference a texture by ID or specify inline content\r\n    const mcpFaceContentSchema = z\r\n      .object({\r\n        textureId: z.string().optional().describe(\"Reference to a texture defined in the model's textures dictionary\"),\r\n        background: mcpTexturedRectangleSchema\r\n          .optional()\r\n          .describe(\r\n            \"Background fill using a textured rectangle. \" +\r\n              \"Examples: { type: 'solid', colors: ['#808080'] } or \" +\r\n              \"{ type: 'stipple_noise', colors: ['#8B8B8B', '#7A7A7A'], seed: 123 }\"\r\n          ),\r\n        svg: z.string().optional().describe(\"SVG content overlay (rendered on top of background)\"),\r\n        pixelArt: z\r\n          .array(mcpPixelArtSchema)\r\n          .optional()\r\n          .describe(\"Pixel art overlays rendered on top of background/texture. Layers are applied in order.\"),\r\n        effects: mcpTextureEffectsSchema\r\n          .optional()\r\n          .describe(\r\n            \"Post-processing effects applied after rendering. \" +\r\n              \"Example: { lighting: { preset: 'inset', intensity: 0.3 }, border: { all: { style: 'highlight' } } }\"\r\n          ),\r\n        rotation: z.number().optional().describe(\"Rotation in degrees (0, 90, 180, 270)\"),\r\n      })\r\n      .describe(\r\n        \"Face content: use textureId to reference a named texture, or specify background (preferred) for inline content\"\r\n      );\r\n\r\n    const mcpCubeFacesSchema = z.object({\r\n      north: mcpFaceContentSchema.optional(),\r\n      south: mcpFaceContentSchema.optional(),\r\n      east: mcpFaceContentSchema.optional(),\r\n      west: mcpFaceContentSchema.optional(),\r\n      up: mcpFaceContentSchema.optional(),\r\n      down: mcpFaceContentSchema.optional(),\r\n    });\r\n\r\n    // Schema for texture definitions (reusable across faces)\r\n    const mcpTextureDefinitionSchema = z\r\n      .object({\r\n        background: mcpTexturedRectangleSchema\r\n          .optional()\r\n          .describe(\r\n            \"Background fill for this texture. \" +\r\n              \"Examples: { type: 'solid', colors: ['#FF0000'] } or \" +\r\n              \"{ type: 'stipple_noise', colors: ['#8B8B8B', '#7A7A7A'], seed: 123 }\"\r\n          ),\r\n        svg: z.string().optional().describe(\"SVG content overlay (rendered on top of background)\"),\r\n        pixelArt: z\r\n          .array(mcpPixelArtSchema)\r\n          .optional()\r\n          .describe(\"Pixel art overlays rendered on top of background. Layers are applied in order.\"),\r\n        effects: mcpTextureEffectsSchema\r\n          .optional()\r\n          .describe(\r\n            \"Post-processing effects applied after rendering. \" +\r\n              \"Example: { lighting: { preset: 'outset', intensity: 0.3 }, overlay: { pattern: 'cracks', density: 0.2 } }\"\r\n          ),\r\n      })\r\n      .describe(\"A reusable texture definition with background fill and optional SVG/pixelArt overlay and effects\");\r\n\r\n    // Helper for 3-element number arrays (replaces z.tuple which generates invalid JSON schema for some validators)\r\n    const vector3Schema = z.array(z.number()).min(3).max(3);\r\n    const vector2Schema = z.array(z.number()).min(2).max(2);\r\n\r\n    // Cube schema - NO pivot/rotation at cube level; all rotation is done at bone level\r\n    const mcpDesignCubeSchema = z.object({\r\n      origin: vector3Schema,\r\n      size: vector3Schema,\r\n      faces: mcpCubeFacesSchema,\r\n      inflate: z.number().optional(),\r\n      mirror: z.boolean().optional(),\r\n    });\r\n\r\n    // Bone schema - pivot and rotation ARE supported here for animations/posing\r\n    const mcpDesignBoneSchema = z.object({\r\n      name: z.string(),\r\n      parent: z.string().optional(),\r\n      pivot: vector3Schema.optional(),\r\n      rotation: vector3Schema.optional(),\r\n      cubes: z.array(mcpDesignCubeSchema),\r\n      mirror: z.boolean().optional(),\r\n    });\r\n\r\n    const mcpModelDesignSchema = z.object({\r\n      formatVersion: z.string().optional(),\r\n      identifier: z.string().describe(\"Model identifier, e.g., 'custom_block' or 'geometry.custom_block'\"),\r\n      description: z.string().optional(),\r\n      textureSize: vector2Schema.optional().describe(\"Texture atlas size [width, height], default [64, 64]\"),\r\n      pixelsPerUnit: z\r\n        .number()\r\n        .optional()\r\n        .describe(\r\n          \"Pixels per Minecraft unit for texture generation. \" +\r\n            \"pixelsPerUnit \u00D7 16 = pixels per block. \" +\r\n            \"Values: 1 (16px/block, vanilla), 2 (32px/block, default HD), 4 (64px/block, high-res)\"\r\n        ),\r\n      textures: z\r\n        .record(z.string(), mcpTextureDefinitionSchema)\r\n        .optional()\r\n        .describe(\r\n          \"Named texture definitions that can be referenced by faces using textureId. \" +\r\n            \"Define textures once here, then reference them in faces with { textureId: 'texture_name' }. \" +\r\n            \"This enables texture reuse across multiple faces and reduces token usage.\"\r\n        ),\r\n      visibleBoundsSize: vector3Schema.optional(),\r\n      visibleBoundsOffset: vector3Schema.optional(),\r\n      bones: z.array(mcpDesignBoneSchema).describe(\"The bones that make up this model, each containing cubes\"),\r\n    });\r\n\r\n    // Register unified designModel tool - combines design preview + export + project integration\r\n    this._registerTool(\r\n      \"designModel\",\r\n      {\r\n        title: \"Design a 3D model in a Minecraft project\",\r\n        description:\r\n          \"Designs a 3D model (geometry + texture) and saves it to a Minecraft project folder. \" +\r\n          \"Use this tool for iterative model design - it handles everything in one step:\\n\\n\" +\r\n          \"1. \u2705 Validates the model design\\n\" +\r\n          \"2. \u2705 Creates geometry (.geo.json) and texture (.png) files\\n\" +\r\n          \"3. \u2705 Saves files to the correct project location (auto-detects pack structure)\\n\" +\r\n          \"4. \u2705 Persists the design for future iteration (update existing models)\\n\" +\r\n          \"5. \u2705 Auto-wires to matching entity/block/item if found\\n\" +\r\n          \"6. \u2705 Returns a preview image\\n\\n\" +\r\n          \"**Usage parameter:**\\n\" +\r\n          \"- 'entity': Saves to /models/entity/ and /textures/entity/ (default)\\n\" +\r\n          \"- 'block': Saves to /models/blocks/ and /textures/blocks/\\n\" +\r\n          \"- 'item': Saves to /models/item/ and /textures/items/\\n\\n\" +\r\n          \"**Wiring behavior:**\\n\" +\r\n          \"- By default, auto-discovers matching entity/block/item by modelId and wires the model\\n\" +\r\n          \"- Set wireTo to a specific ID to wire to a different target\\n\" +\r\n          \"- Set wireTo to false to skip wiring entirely\\n\\n\" +\r\n          \"**Iteration:** Running this tool again with the same modelId updates the existing files in place.\",\r\n        inputSchema: {\r\n          projectPath: z.string().describe(\"Absolute path to the Minecraft project folder (can be empty folder)\"),\r\n          design: mcpModelDesignSchema.describe(\"The model design specification\"),\r\n          modelId: z.string().describe(\"Unique identifier for the model (e.g., 'disco_pig', 'magic_sword')\"),\r\n          usage: z\r\n            .enum([\"entity\", \"block\", \"item\"])\r\n            .optional()\r\n            .describe(\"What the model is for - determines save location. Default: 'entity'\"),\r\n          wireTo: z\r\n            .union([z.string(), z.literal(false)])\r\n            .optional()\r\n            .describe(\r\n              \"Wire the model to a specific entity/block/item ID, or false to skip wiring. \" +\r\n                \"Default: auto-discover matching item by modelId\"\r\n            ),\r\n        },\r\n      },\r\n      this._designModelOp\r\n    );\r\n\r\n    // Register model templates tool - provides starter designs for common entity types\r\n    this._registerTool(\r\n      \"getModelTemplates\",\r\n      {\r\n        title: \"Get starter model templates for common Minecraft entity types\",\r\n        description:\r\n          \"Returns starter model designs for common Minecraft entity types. \" +\r\n          \"These templates provide proper Minecraft-scale geometry with blocky pixel-art textures. \" +\r\n          \"Use these as starting points and customize colors, proportions, and details. \" +\r\n          \"\\n\\n\" +\r\n          \"Available template types (all coordinates in Minecraft units where 16 units = 1 block):\\n\" +\r\n          \"- 'humanoid': A humanoid mob with head, body, arms, legs (~32 units tall, ~2 blocks)\\n\" +\r\n          \"- 'small_animal': A small quadruped like a pig or sheep (~14 units tall, ~1 block)\\n\" +\r\n          \"- 'large_animal': A larger quadruped like a horse or cow (~24 units tall, ~1.5 blocks)\\n\" +\r\n          \"- 'vehicle': A wheeled vehicle or machine (~48 units long, ~3 blocks)\\n\" +\r\n          \"- 'block': A simple unit cube block (16x16x16 units = 1 block)\\n\" +\r\n          \"- 'item': A handheld sword (~30 units tall, ~2 blocks)\\n\" +\r\n          \"- 'bird': A bipedal bird with wings and beak (~12 units tall, ~0.75 blocks)\\n\" +\r\n          \"- 'insect': An 8-legged spider/insect (~14 units tall, ~38 units wide with legs)\\n\" +\r\n          \"- 'flying': A flying creature with articulated wings (~44 units wingspan, ~2.75 blocks)\\n\" +\r\n          \"- 'fish': An aquatic fish with fins (~6 units long, ~0.4 blocks)\\n\" +\r\n          \"- 'slime': A simple bouncy cube creature (~6 units, great for beginners)\\n\" +\r\n          \"- 'wizard': A robed humanoid spellcaster with pointed hat (~40 units tall)\\n\" +\r\n          \"- 'golem': A large bulky construct (~40 units tall, ~2.5 blocks)\\n\" +\r\n          \"- 'fox': A sleek quadruped with fluffy tail (~12 units tall)\\n\" +\r\n          \"- 'crystal': A geometric floating crystal formation (~20 units tall)\\n\" +\r\n          \"- 'enchanted_sword': A glowing magical sword (~36 units tall)\\n\" +\r\n          \"- 'tropical_fish': A colorful aquatic fish (~6 units)\\n\" +\r\n          \"- 'ghost': A hovering spectral entity (~28 units tall)\\n\" +\r\n          \"- 'robot': A mechanical humanoid (~36 units tall)\\n\" +\r\n          \"- 'mushroom_creature': A fungal creature (~20 units tall)\\n\" +\r\n          \"- 'treasure_chest': An openable container (~12 units tall)\\n\" +\r\n          \"\\n--- BLOCK TEMPLATES (16x16x16 = 1 block) ---\\n\" +\r\n          \"- 'stone_brick': Classic masonry block with mortar lines\\n\" +\r\n          \"- 'wooden_crate': Storage crate with metal corner brackets\\n\" +\r\n          \"- 'glowing_ore': Luminescent mineral ore block\\n\" +\r\n          \"- 'mossy_stone': Weathered stone with moss overlay\\n\" +\r\n          \"- 'crystal_block': Translucent crystalline block\\n\" +\r\n          \"- 'tech_block': Sci-fi mechanical block with vents\\n\" +\r\n          \"\\n--- ITEM TEMPLATES (handheld objects) ---\\n\" +\r\n          \"- 'potion_bottle': Glass flask with cork stopper\\n\" +\r\n          \"- 'magic_wand': Spellcasting wand with crystal tip\\n\" +\r\n          \"- 'ornate_key': Decorative key with gem inlay\\n\" +\r\n          \"- 'gemstone': Faceted precious stone\\n\" +\r\n          \"- 'apple': Red apple with stem and leaf\\n\" +\r\n          \"- 'pickaxe': Mining tool with iron head\",\r\n        inputSchema: {\r\n          templateType: z\r\n            .enum([\r\n              \"humanoid\",\r\n              \"small_animal\",\r\n              \"large_animal\",\r\n              \"vehicle\",\r\n              \"block\",\r\n              \"item\",\r\n              \"bird\",\r\n              \"insect\",\r\n              \"flying\",\r\n              \"fish\",\r\n              \"slime\",\r\n              \"wizard\",\r\n              \"golem\",\r\n              \"fox\",\r\n              \"crystal\",\r\n              \"enchanted_sword\",\r\n              \"tropical_fish\",\r\n              \"ghost\",\r\n              \"robot\",\r\n              \"mushroom_creature\",\r\n              \"treasure_chest\",\r\n              \"stone_brick\",\r\n              \"wooden_crate\",\r\n              \"glowing_ore\",\r\n              \"mossy_stone\",\r\n              \"crystal_block\",\r\n              \"tech_block\",\r\n              \"potion_bottle\",\r\n              \"magic_wand\",\r\n              \"ornate_key\",\r\n              \"gemstone\",\r\n              \"apple\",\r\n              \"pickaxe\",\r\n            ])\r\n            .describe(\"The type of template to return (entity, block, or item)\"),\r\n        },\r\n      },\r\n      this._getModelTemplatesOp.bind(this)\r\n    );\r\n\r\n    // Define the IBlockVolume schema for structure design tools\r\n    const blockVolumeVector3Schema = z.object({\r\n      x: z.number(),\r\n      y: z.number(),\r\n      z: z.number(),\r\n    });\r\n\r\n    const blockTypeDataSchema = z.object({\r\n      typeId: z.string().describe(\"Block type identifier, e.g., 'minecraft:stone' or 'stone'\"),\r\n      properties: z\r\n        .record(z.union([z.string(), z.number(), z.boolean()]))\r\n        .optional()\r\n        .describe(\"Optional block state properties, e.g., { facing: 'north', half: 'bottom' }\"),\r\n    });\r\n\r\n    const blockVolumeSchema = z.object({\r\n      entities: z\r\n        .array(\r\n          z.object({\r\n            locationWithinVolume: blockVolumeVector3Schema,\r\n            typeId: z.string(),\r\n          })\r\n        )\r\n        .optional()\r\n        .describe(\"Entities within the structure (optional)\"),\r\n      southWestBottom: blockVolumeVector3Schema.describe(\r\n        \"The world position of the south-west-bottom corner of the structure\"\r\n      ),\r\n      size: blockVolumeVector3Schema\r\n        .optional()\r\n        .describe(\r\n          \"Optional dimensions (x=width, y=height, z=depth). If omitted, size is automatically inferred from the data.\"\r\n        ),\r\n      blockLayersBottomToTop: z\r\n        .array(z.array(z.string()))\r\n        .describe(\r\n          \"2D array of horizontal layers. Outer array is Y layers from BOTTOM to TOP (like stacking floors). Each layer is array of strings for Z rows from NORTH to SOUTH. Each character in string is X from WEST to EAST. Strings do NOT need to be the same length - shorter strings are treated as having trailing air blocks.\"\r\n        ),\r\n      key: z\r\n        .record(blockTypeDataSchema)\r\n        .describe(\"Map of single characters to block type definitions. Use ' ' (space) for air.\"),\r\n    });\r\n\r\n    // Register unified designStructure tool - combines preview + export + project integration\r\n    this._registerTool(\r\n      \"designStructure\",\r\n      {\r\n        title: \"Design a structure in a Minecraft project\",\r\n        description:\r\n          \"Designs a structure (.mcstructure) and saves it to a Minecraft project folder. \" +\r\n          \"Use this tool for iterative structure design - it handles everything in one step:\\n\\n\" +\r\n          \"1. \u2705 Validates the block volume design\\n\" +\r\n          \"2. \u2705 Creates the .mcstructure file\\n\" +\r\n          \"3. \u2705 Saves to the correct project location (behavior_packs/<pack>/structures/)\\n\" +\r\n          \"4. \u2705 Persists the design for future iteration (update existing structures)\\n\" +\r\n          \"5. \u2705 Returns a preview image\\n\\n\" +\r\n          \"**Block Volume Format:**\\n\" +\r\n          \"IBlockVolume represents a volume of blocks using horizontal layers (like stacking floors):\\n\" +\r\n          \"- blockLayersBottomToTop: Array of Y layers from BOTTOM to TOP (ground floor first, roof last)\\n\" +\r\n          \"- Each layer: Array of strings for Z rows from NORTH to SOUTH (back to front)\\n\" +\r\n          \"- Each string character: X position from WEST to EAST (left to right)\\n\" +\r\n          \"- key: Maps characters to block types\\n\\n\" +\r\n          \"**Flexible dimensions:**\\n\" +\r\n          \"- 'size' is OPTIONAL - it will be automatically inferred from your data\\n\" +\r\n          \"- Strings do NOT need to be the same length - shorter strings are treated as trailing air\\n\\n\" +\r\n          \"**Iteration:** Running this tool again with the same structureId updates the existing file in place.\",\r\n        inputSchema: {\r\n          projectPath: z.string().describe(\"Absolute path to the Minecraft project folder (can be empty folder)\"),\r\n          blockVolume: blockVolumeSchema.describe(\"The block volume design to build\"),\r\n          structureId: z\r\n            .string()\r\n            .describe(\"Unique identifier for the structure (e.g., 'castle_tower', 'dungeon_room')\"),\r\n        },\r\n      },\r\n      this._designStructureOp\r\n    );\r\n\r\n    // ========================================================================\r\n    // TEXTURE / IMAGE FILE TOOLS\r\n    // ========================================================================\r\n\r\n    this._registerTool(\r\n      \"writeImageFile\",\r\n      {\r\n        title: \"Write a texture image from base64 data\",\r\n        description:\r\n          \"Writes base64-encoded image data to a PNG file. Use this for saving textures generated externally \" +\r\n          \"or for converting between image formats. The image is returned as a preview after writing.\\n\\n\" +\r\n          \"Requires `allowImageFileWritesInDescendentFolders: true` in `.mct/mcp/prefs.json`.\",\r\n        inputSchema: {\r\n          filePath: z.string().describe(\"Absolute path to write the image file (should end in .png)\"),\r\n          base64Data: z.string().describe(\"Base64-encoded image data (PNG, JPEG, or WebP)\"),\r\n          mimeType: z\r\n            .string()\r\n            .optional()\r\n            .describe(\"MIME type of the input image (e.g., 'image/png'). Auto-detected if omitted.\"),\r\n        },\r\n      },\r\n      this._writeImageFileFromBase64Op\r\n    );\r\n\r\n    this._registerTool(\r\n      \"writeImageFileFromSvg\",\r\n      {\r\n        title: \"Create a texture image from SVG markup\",\r\n        description:\r\n          \"Converts SVG markup to a PNG texture file. Great for creating Minecraft textures with crisp lines, \" +\r\n          \"geometric patterns, and precise color control. SVG is rendered at the specified dimensions \" +\r\n          \"(default: native SVG size) and saved as PNG.\\n\\n\" +\r\n          \"Requires `allowImageFileWritesInDescendentFolders: true` in `.mct/mcp/prefs.json`.\",\r\n        inputSchema: {\r\n          filePath: z.string().describe(\"Absolute path to write the PNG file\"),\r\n          svgContent: z.string().describe(\"SVG markup string to render as a texture\"),\r\n          width: z.number().optional().describe(\"Output width in pixels (e.g., 16 for a standard Minecraft texture)\"),\r\n          height: z.number().optional().describe(\"Output height in pixels (e.g., 16 for a standard Minecraft texture)\"),\r\n        },\r\n      },\r\n      this._writeImageFileFromSvgOp\r\n    );\r\n\r\n    this._registerTool(\r\n      \"writeImageFileFromPixelArt\",\r\n      {\r\n        title: \"Create a texture image from ASCII pixel art\",\r\n        description:\r\n          \"Creates a PNG texture from an ASCII art definition with a color palette. \" +\r\n          \"Each character in the art maps to a color, and space characters are transparent. \" +\r\n          \"Perfect for creating Minecraft block textures (16x16), item icons, and entity skins \" +\r\n          \"with a simple, readable format.\\n\\n\" +\r\n          \"Example: lines=['RRR','RGR','RRR'], palette={R:{hex:'#FF0000'},G:{hex:'#00FF00'}}\\n\\n\" +\r\n          \"Requires `allowImageFileWritesInDescendentFolders: true` in `.mct/mcp/prefs.json`.\",\r\n        inputSchema: {\r\n          filePath: z.string().describe(\"Absolute path to write the PNG file\"),\r\n          lines: z\r\n            .array(z.string())\r\n            .describe(\r\n              \"Array of strings forming the pixel art. Each character maps to a palette color. Space = transparent.\"\r\n            ),\r\n          palette: z\r\n            .record(\r\n              z.string(),\r\n              z.object({\r\n                r: z.number().optional().describe(\"Red (0-255)\"),\r\n                g: z.number().optional().describe(\"Green (0-255)\"),\r\n                b: z.number().optional().describe(\"Blue (0-255)\"),\r\n                a: z.number().optional().describe(\"Alpha (0-255, default 255)\"),\r\n                hex: z.string().optional().describe(\"Hex color like '#FF0000' (alternative to r/g/b)\"),\r\n              })\r\n            )\r\n            .describe(\"Map of single characters to colors. Do not define space \u2014 it is reserved for transparency.\"),\r\n          scale: z\r\n            .number()\r\n            .optional()\r\n            .describe(\"Scale factor \u2014 each art pixel becomes scale\u00D7scale output pixels. Default: 1.\"),\r\n          backgroundColor: z\r\n            .object({\r\n              r: z.number().optional(),\r\n              g: z.number().optional(),\r\n              b: z.number().optional(),\r\n              a: z.number().optional(),\r\n              hex: z.string().optional(),\r\n            })\r\n            .optional()\r\n            .describe(\"Background fill color. Default: fully transparent.\"),\r\n        },\r\n      },\r\n      this._writeImageFileFromPixelArtOp\r\n    );\r\n\r\n    // Add a dynamic worldSession resource that returns real session data\r\n    this._server.registerResource(\r\n      \"worldSession\",\r\n      new ResourceTemplate(\"worldSession://{name}\", { list: undefined }),\r\n      {\r\n        title: \"World Session\",\r\n        description: \"Minecraft world session information including slot, port, and server status\",\r\n      },\r\n      async (uri: any, name: any) => {\r\n        const sessionInfo = this._sessions[name as string];\r\n        if (!sessionInfo) {\r\n          return {\r\n            contents: [\r\n              {\r\n                uri: uri.href,\r\n                text: JSON.stringify({ error: `No session named \"${name}\" found` }),\r\n              },\r\n            ],\r\n          };\r\n        }\r\n\r\n        const slot = sessionInfo.slot;\r\n        const port = MinecraftUtilities.getPortForSlot(slot);\r\n        const serverManager = this.ensureServerManager();\r\n        const server = serverManager.getActiveServer(slot);\r\n        const status = server ? DedicatedServerStatus[server.status] : \"stopped\";\r\n\r\n        return {\r\n          contents: [\r\n            {\r\n              uri: uri.href,\r\n              text: JSON.stringify({ name, slot, port, status, description: sessionInfo.description }),\r\n            },\r\n          ],\r\n        };\r\n      }\r\n    );\r\n\r\n    // Initialize ToolCommands (used by CLI, UI, etc. but no longer auto-registered as MCP tools)\r\n    if (this._creatorTools) {\r\n      initializeToolCommands();\r\n      await registerNodeOnlyCommands();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if a port is available for use.\r\n   * @param port The port number to check\r\n   * @returns Promise that resolves to true if the port is available, false otherwise\r\n   */\r\n  private static isPortAvailable(port: number): Promise<boolean> {\r\n    return new Promise((resolve) => {\r\n      const server = net.createServer();\r\n\r\n      server.once(\"error\", (err: NodeJS.ErrnoException) => {\r\n        if (err.code === \"EADDRINUSE\") {\r\n          resolve(false);\r\n        } else {\r\n          // Other errors also mean we can't use this port\r\n          resolve(false);\r\n        }\r\n      });\r\n\r\n      server.once(\"listening\", () => {\r\n        server.close(() => {\r\n          resolve(true);\r\n        });\r\n      });\r\n\r\n      server.listen(port, \"localhost\");\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Find an available port by randomly selecting from the configured range.\r\n   * Excludes browser-unsafe ports that would cause ERR_UNSAFE_PORT errors.\r\n   * @returns Promise that resolves to an available port, or a random port if none found after max attempts\r\n   */\r\n  private async findAvailablePort(): Promise<number> {\r\n    // Build array of safe ports in range (excluding browser-unsafe ports)\r\n    const safePorts: number[] = [];\r\n    for (let port = MinecraftMcpServer.PORT_RANGE_START; port <= MinecraftMcpServer.PORT_RANGE_END; port++) {\r\n      if (!UNSAFE_PORTS.has(port)) {\r\n        safePorts.push(port);\r\n      }\r\n    }\r\n\r\n    const triedPorts = new Set<number>();\r\n\r\n    for (let attempt = 0; attempt < MinecraftMcpServer.PORT_MAX_ATTEMPTS; attempt++) {\r\n      // Pick a random safe port that we haven't tried yet\r\n      let port: number;\r\n      do {\r\n        port = safePorts[Math.floor(Math.random() * safePorts.length)];\r\n      } while (triedPorts.has(port) && triedPorts.size < safePorts.length);\r\n\r\n      triedPorts.add(port);\r\n\r\n      const available = await MinecraftMcpServer.isPortAvailable(port);\r\n      if (available) {\r\n        Log.verbose(`Found available port: ${port} (attempt ${attempt + 1})`);\r\n        return port;\r\n      }\r\n      Log.verbose(`Port ${port} is in use, trying another random port...`);\r\n    }\r\n\r\n    // If no port is available after max attempts, return a random safe one and let the server handle the error\r\n    const fallbackPort = safePorts[Math.floor(Math.random() * safePorts.length)];\r\n    Log.debugAlert(\r\n      `No available ports found after ${MinecraftMcpServer.PORT_MAX_ATTEMPTS} attempts, using ${fallbackPort}`\r\n    );\r\n    return fallbackPort;\r\n  }\r\n\r\n  async startStdio(creatorTools: CreatorTools, env: LocalEnvironment, workingFolder?: string) {\r\n    CreatorToolsHost.contentWebRoot = \"https://mctools.dev/\";\r\n\r\n    this._creatorTools = creatorTools;\r\n    this._env = env;\r\n\r\n    // Apply project root auto-discovery to the working folder\r\n    if (workingFolder) {\r\n      this._workingFolder = CommandContextFactory.resolveProjectRoot(workingFolder);\r\n    } else {\r\n      this._workingFolder = workingFolder;\r\n    }\r\n\r\n    this._creatorTools.onStatusAdded.subscribe(MinecraftMcpServer.handleStatusAdded);\r\n\r\n    if (this._workingFolder) {\r\n      Log.verbose(`MCP server working folder: ${this._workingFolder}`);\r\n    }\r\n\r\n    // Find an available port for the internal HTTP server\r\n    this._previewServerPort = await this.findAvailablePort();\r\n    Log.verbose(`MCP server will use port ${this._previewServerPort} for internal HTTP server`);\r\n\r\n    await this._configureTools();\r\n    this._configurePrompts();\r\n\r\n    const transport = new StdioServerTransport();\r\n\r\n    // Helper to clean up and exit\r\n    const cleanupAndExit = async () => {\r\n      // Set a force-exit timeout in case cleanup hangs\r\n      const forceExitTimeout = setTimeout(() => {\r\n        Log.verbose(\"Force exiting after cleanup timeout\");\r\n        process.exit(0);\r\n      }, 3000);\r\n      forceExitTimeout.unref(); // Don't let this timer keep the process alive\r\n\r\n      await this.cleanup();\r\n      clearTimeout(forceExitTimeout);\r\n      process.exit(0);\r\n    };\r\n\r\n    // Set up cleanup on transport close\r\n    transport.onclose = cleanupAndExit;\r\n\r\n    // Handle stdin close (client disconnected)\r\n    process.stdin.on(\"end\", cleanupAndExit);\r\n    process.stdin.on(\"close\", cleanupAndExit);\r\n\r\n    // Also handle process signals for clean shutdown\r\n    process.once(\"SIGINT\", cleanupAndExit);\r\n    process.once(\"SIGTERM\", cleanupAndExit);\r\n\r\n    this._server.connect(transport);\r\n  }\r\n\r\n  /**\r\n   * Clean up resources (browser, HTTP server, etc.)\r\n   */\r\n  async cleanup(): Promise<void> {\r\n    // Prevent multiple cleanup calls\r\n    if (this._cleaningUp) {\r\n      return;\r\n    }\r\n    this._cleaningUp = true;\r\n\r\n    // Close the HTTP transport if active\r\n    if (this._httpTransport) {\r\n      try {\r\n        await this._httpTransport.close();\r\n      } catch (e) {\r\n        // Ignore close errors\r\n      }\r\n      this._httpTransport = undefined;\r\n    }\r\n\r\n    if (this._cachedRenderer) {\r\n      try {\r\n        await this._cachedRenderer.close();\r\n      } catch (e) {\r\n        // Ignore close errors\r\n      }\r\n      this._cachedRenderer = undefined;\r\n    }\r\n\r\n    // Clean up the static cached browser in ImageGenerationUtilities\r\n    try {\r\n      await ImageGenerationUtilities.closeCachedBrowser();\r\n    } catch (e) {\r\n      // Ignore close errors\r\n    }\r\n\r\n    if (this._serverManager) {\r\n      // Stop the HTTP server to allow the process to exit\r\n      this._serverManager.stopWebServer();\r\n      this._serverManager = undefined;\r\n    }\r\n  }\r\n\r\n  static handleStatusAdded(creatorTools: CreatorTools, status: IStatus) {\r\n    let message = status.message;\r\n\r\n    if (status.type === StatusType.operationStarted) {\r\n      message = \"[[ START: (\" + status.operationId + \") \" + message;\r\n    } else if (status.type === StatusType.operationEndedComplete) {\r\n      message = \"          \" + message + \" (\" + status.operationId + \")  :END ]]\";\r\n    } else if (status.type === StatusType.operationEndedErrors) {\r\n      message = \"          \" + message + \" :END - ERRORS (\" + status.operationId + \") ]]\";\r\n    }\r\n\r\n    Log.message(message);\r\n  }\r\n\r\n  async startHttp(creatorTools: CreatorTools, env: LocalEnvironment, serverManager?: ServerManager) {\r\n    CreatorToolsHost.contentWebRoot = \"https://mctools.dev/\";\r\n\r\n    this._creatorTools = creatorTools;\r\n    this._env = env;\r\n\r\n    // If a ServerManager is provided (e.g., from HttpServer in `mct serve` mode),\r\n    // reuse it so MCP tools operate on the same BDS instance.\r\n    if (serverManager) {\r\n      this._serverManager = serverManager;\r\n    }\r\n\r\n    // Subscribe to status events for logging\r\n    this._creatorTools.onStatusAdded.subscribe(MinecraftMcpServer.handleStatusAdded);\r\n\r\n    // Find an available port for the internal preview HTTP server\r\n    this._previewServerPort = await this.findAvailablePort();\r\n    Log.verbose(`MCP HTTP server will use port ${this._previewServerPort} for internal preview server`);\r\n\r\n    // Register all tools and prompts BEFORE connecting to transport.\r\n    // The MCP SDK forbids registerCapabilities() after connect(), so the order matters.\r\n    await this._configureTools();\r\n    this._configurePrompts();\r\n\r\n    // Create a single transport and connect it to the server.\r\n    // The transport handles session management (init, session IDs, SSE) internally.\r\n    // This follows the MCP SDK's recommended pattern for stateful HTTP servers.\r\n    //\r\n    // DNS rebinding protection is disabled here because HttpServer already restricts\r\n    // MCP access to localhost connections. The SDK's allowedHosts does an exact match\r\n    // on the Host header (e.g., \"localhost:6126\"), which requires knowing the port at\r\n    // transport creation time and listing every host:port variant. Since the HttpServer\r\n    // layer already validates the remote address, this is unnecessary.\r\n    this._httpTransport = new StreamableHTTPServerTransport({\r\n      sessionIdGenerator: () => randomUUID(),\r\n    });\r\n\r\n    this._httpTransport.onerror = (error: Error) => {\r\n      Log.debug(\"MCP HTTP transport error: \" + error.message);\r\n    };\r\n\r\n    await this._server.connect(this._httpTransport);\r\n    Log.verbose(\"MCP HTTP transport connected and ready for requests\");\r\n\r\n    // Auto-register the \"default\" session if a ServerManager was provided and slot 0\r\n    // already has an active server (e.g., `mct serve` started BDS before MCP).\r\n    if (this._serverManager) {\r\n      const server = this._serverManager.getActiveServer(0);\r\n      if (server) {\r\n        this._sessions[\"default\"] = { slot: 0, description: \"Auto-registered from serve\" };\r\n        Log.verbose(\r\n          `Auto-registered \"default\" session on slot 0 (port ${MinecraftUtilities.getPortForSlot(0)}, status: ${DedicatedServerStatus[server.status]})`\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// src/server.ts\nimport { createServer as createServerHTTP } from \"http\";\n\n// src/listener.ts\nimport { Http2ServerRequest as Http2ServerRequest2, constants as h2constants } from \"http2\";\n\n// src/request.ts\nimport { Http2ServerRequest } from \"http2\";\nimport { Readable } from \"stream\";\nvar RequestError = class extends Error {\n  constructor(message, options) {\n    super(message, options);\n    this.name = \"RequestError\";\n  }\n};\nvar toRequestError = (e) => {\n  if (e instanceof RequestError) {\n    return e;\n  }\n  return new RequestError(e.message, { cause: e });\n};\nvar GlobalRequest = global.Request;\nvar Request = class extends GlobalRequest {\n  constructor(input, options) {\n    if (typeof input === \"object\" && getRequestCache in input) {\n      input = input[getRequestCache]();\n    }\n    if (typeof options?.body?.getReader !== \"undefined\") {\n      ;\n      options.duplex ??= \"half\";\n    }\n    super(input, options);\n  }\n};\nvar newHeadersFromIncoming = (incoming) => {\n  const headerRecord = [];\n  const rawHeaders = incoming.rawHeaders;\n  for (let i = 0; i < rawHeaders.length; i += 2) {\n    const { [i]: key, [i + 1]: value } = rawHeaders;\n    if (key.charCodeAt(0) !== /*:*/\n    58) {\n      headerRecord.push([key, value]);\n    }\n  }\n  return new Headers(headerRecord);\n};\nvar wrapBodyStream = Symbol(\"wrapBodyStream\");\nvar newRequestFromIncoming = (method, url, headers, incoming, abortController) => {\n  const init = {\n    method,\n    headers,\n    signal: abortController.signal\n  };\n  if (method === \"TRACE\") {\n    init.method = \"GET\";\n    const req = new Request(url, init);\n    Object.defineProperty(req, \"method\", {\n      get() {\n        return \"TRACE\";\n      }\n    });\n    return req;\n  }\n  if (!(method === \"GET\" || method === \"HEAD\")) {\n    if (\"rawBody\" in incoming && incoming.rawBody instanceof Buffer) {\n      init.body = new ReadableStream({\n        start(controller) {\n          controller.enqueue(incoming.rawBody);\n          controller.close();\n        }\n      });\n    } else if (incoming[wrapBodyStream]) {\n      let reader;\n      init.body = new ReadableStream({\n        async pull(controller) {\n          try {\n            reader ||= Readable.toWeb(incoming).getReader();\n            const { done, value } = await reader.read();\n            if (done) {\n              controller.close();\n            } else {\n              controller.enqueue(value);\n            }\n          } catch (error) {\n            controller.error(error);\n          }\n        }\n      });\n    } else {\n      init.body = Readable.toWeb(incoming);\n    }\n  }\n  return new Request(url, init);\n};\nvar getRequestCache = Symbol(\"getRequestCache\");\nvar requestCache = Symbol(\"requestCache\");\nvar incomingKey = Symbol(\"incomingKey\");\nvar urlKey = Symbol(\"urlKey\");\nvar headersKey = Symbol(\"headersKey\");\nvar abortControllerKey = Symbol(\"abortControllerKey\");\nvar getAbortController = Symbol(\"getAbortController\");\nvar requestPrototype = {\n  get method() {\n    return this[incomingKey].method || \"GET\";\n  },\n  get url() {\n    return this[urlKey];\n  },\n  get headers() {\n    return this[headersKey] ||= newHeadersFromIncoming(this[incomingKey]);\n  },\n  [getAbortController]() {\n    this[getRequestCache]();\n    return this[abortControllerKey];\n  },\n  [getRequestCache]() {\n    this[abortControllerKey] ||= new AbortController();\n    return this[requestCache] ||= newRequestFromIncoming(\n      this.method,\n      this[urlKey],\n      this.headers,\n      this[incomingKey],\n      this[abortControllerKey]\n    );\n  }\n};\n[\n  \"body\",\n  \"bodyUsed\",\n  \"cache\",\n  \"credentials\",\n  \"destination\",\n  \"integrity\",\n  \"mode\",\n  \"redirect\",\n  \"referrer\",\n  \"referrerPolicy\",\n  \"signal\",\n  \"keepalive\"\n].forEach((k) => {\n  Object.defineProperty(requestPrototype, k, {\n    get() {\n      return this[getRequestCache]()[k];\n    }\n  });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n  Object.defineProperty(requestPrototype, k, {\n    value: function() {\n      return this[getRequestCache]()[k]();\n    }\n  });\n});\nObject.setPrototypeOf(requestPrototype, Request.prototype);\nvar newRequest = (incoming, defaultHostname) => {\n  const req = Object.create(requestPrototype);\n  req[incomingKey] = incoming;\n  const incomingUrl = incoming.url || \"\";\n  if (incomingUrl[0] !== \"/\" && // short-circuit for performance. most requests are relative URL.\n  (incomingUrl.startsWith(\"http://\") || incomingUrl.startsWith(\"https://\"))) {\n    if (incoming instanceof Http2ServerRequest) {\n      throw new RequestError(\"Absolute URL for :path is not allowed in HTTP/2\");\n    }\n    try {\n      const url2 = new URL(incomingUrl);\n      req[urlKey] = url2.href;\n    } catch (e) {\n      throw new RequestError(\"Invalid absolute URL\", { cause: e });\n    }\n    return req;\n  }\n  const host = (incoming instanceof Http2ServerRequest ? incoming.authority : incoming.headers.host) || defaultHostname;\n  if (!host) {\n    throw new RequestError(\"Missing host header\");\n  }\n  let scheme;\n  if (incoming instanceof Http2ServerRequest) {\n    scheme = incoming.scheme;\n    if (!(scheme === \"http\" || scheme === \"https\")) {\n      throw new RequestError(\"Unsupported scheme\");\n    }\n  } else {\n    scheme = incoming.socket && incoming.socket.encrypted ? \"https\" : \"http\";\n  }\n  const url = new URL(`${scheme}://${host}${incomingUrl}`);\n  if (url.hostname.length !== host.length && url.hostname !== host.replace(/:\\d+$/, \"\")) {\n    throw new RequestError(\"Invalid host header\");\n  }\n  req[urlKey] = url.href;\n  return req;\n};\n\n// src/response.ts\nvar responseCache = Symbol(\"responseCache\");\nvar getResponseCache = Symbol(\"getResponseCache\");\nvar cacheKey = Symbol(\"cache\");\nvar GlobalResponse = global.Response;\nvar Response2 = class _Response {\n  #body;\n  #init;\n  [getResponseCache]() {\n    delete this[cacheKey];\n    return this[responseCache] ||= new GlobalResponse(this.#body, this.#init);\n  }\n  constructor(body, init) {\n    let headers;\n    this.#body = body;\n    if (init instanceof _Response) {\n      const cachedGlobalResponse = init[responseCache];\n      if (cachedGlobalResponse) {\n        this.#init = cachedGlobalResponse;\n        this[getResponseCache]();\n        return;\n      } else {\n        this.#init = init.#init;\n        headers = new Headers(init.#init.headers);\n      }\n    } else {\n      this.#init = init;\n    }\n    if (typeof body === \"string\" || typeof body?.getReader !== \"undefined\" || body instanceof Blob || body instanceof Uint8Array) {\n      ;\n      this[cacheKey] = [init?.status || 200, body, headers || init?.headers];\n    }\n  }\n  get headers() {\n    const cache = this[cacheKey];\n    if (cache) {\n      if (!(cache[2] instanceof Headers)) {\n        cache[2] = new Headers(\n          cache[2] || { \"content-type\": \"text/plain; charset=UTF-8\" }\n        );\n      }\n      return cache[2];\n    }\n    return this[getResponseCache]().headers;\n  }\n  get status() {\n    return this[cacheKey]?.[0] ?? this[getResponseCache]().status;\n  }\n  get ok() {\n    const status = this.status;\n    return status >= 200 && status < 300;\n  }\n};\n[\"body\", \"bodyUsed\", \"redirected\", \"statusText\", \"trailers\", \"type\", \"url\"].forEach((k) => {\n  Object.defineProperty(Response2.prototype, k, {\n    get() {\n      return this[getResponseCache]()[k];\n    }\n  });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n  Object.defineProperty(Response2.prototype, k, {\n    value: function() {\n      return this[getResponseCache]()[k]();\n    }\n  });\n});\nObject.setPrototypeOf(Response2, GlobalResponse);\nObject.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);\n\n// src/utils.ts\nasync function readWithoutBlocking(readPromise) {\n  return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);\n}\nfunction writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {\n  const cancel = (error) => {\n    reader.cancel(error).catch(() => {\n    });\n  };\n  writable.on(\"close\", cancel);\n  writable.on(\"error\", cancel);\n  (currentReadPromise ?? reader.read()).then(flow, handleStreamError);\n  return reader.closed.finally(() => {\n    writable.off(\"close\", cancel);\n    writable.off(\"error\", cancel);\n  });\n  function handleStreamError(error) {\n    if (error) {\n      writable.destroy(error);\n    }\n  }\n  function onDrain() {\n    reader.read().then(flow, handleStreamError);\n  }\n  function flow({ done, value }) {\n    try {\n      if (done) {\n        writable.end();\n      } else if (!writable.write(value)) {\n        writable.once(\"drain\", onDrain);\n      } else {\n        return reader.read().then(flow, handleStreamError);\n      }\n    } catch (e) {\n      handleStreamError(e);\n    }\n  }\n}\nfunction writeFromReadableStream(stream, writable) {\n  if (stream.locked) {\n    throw new TypeError(\"ReadableStream is locked.\");\n  } else if (writable.destroyed) {\n    return;\n  }\n  return writeFromReadableStreamDefaultReader(stream.getReader(), writable);\n}\nvar buildOutgoingHttpHeaders = (headers) => {\n  const res = {};\n  if (!(headers instanceof Headers)) {\n    headers = new Headers(headers ?? void 0);\n  }\n  const cookies = [];\n  for (const [k, v] of headers) {\n    if (k === \"set-cookie\") {\n      cookies.push(v);\n    } else {\n      res[k] = v;\n    }\n  }\n  if (cookies.length > 0) {\n    res[\"set-cookie\"] = cookies;\n  }\n  res[\"content-type\"] ??= \"text/plain; charset=UTF-8\";\n  return res;\n};\n\n// src/utils/response/constants.ts\nvar X_ALREADY_SENT = \"x-hono-already-sent\";\n\n// src/globals.ts\nimport crypto from \"crypto\";\nif (typeof global.crypto === \"undefined\") {\n  global.crypto = crypto;\n}\n\n// src/listener.ts\nvar outgoingEnded = Symbol(\"outgoingEnded\");\nvar incomingDraining = Symbol(\"incomingDraining\");\nvar DRAIN_TIMEOUT_MS = 500;\nvar MAX_DRAIN_BYTES = 64 * 1024 * 1024;\nvar drainIncoming = (incoming) => {\n  const incomingWithDrainState = incoming;\n  if (incoming.destroyed || incomingWithDrainState[incomingDraining]) {\n    return;\n  }\n  incomingWithDrainState[incomingDraining] = true;\n  if (incoming instanceof Http2ServerRequest2) {\n    try {\n      ;\n      incoming.stream?.close?.(h2constants.NGHTTP2_NO_ERROR);\n    } catch {\n    }\n    return;\n  }\n  let bytesRead = 0;\n  const cleanup = () => {\n    clearTimeout(timer);\n    incoming.off(\"data\", onData);\n    incoming.off(\"end\", cleanup);\n    incoming.off(\"error\", cleanup);\n  };\n  const forceClose = () => {\n    cleanup();\n    const socket = incoming.socket;\n    if (socket && !socket.destroyed) {\n      socket.destroySoon();\n    }\n  };\n  const timer = setTimeout(forceClose, DRAIN_TIMEOUT_MS);\n  timer.unref?.();\n  const onData = (chunk) => {\n    bytesRead += chunk.length;\n    if (bytesRead > MAX_DRAIN_BYTES) {\n      forceClose();\n    }\n  };\n  incoming.on(\"data\", onData);\n  incoming.on(\"end\", cleanup);\n  incoming.on(\"error\", cleanup);\n  incoming.resume();\n};\nvar handleRequestError = () => new Response(null, {\n  status: 400\n});\nvar handleFetchError = (e) => new Response(null, {\n  status: e instanceof Error && (e.name === \"TimeoutError\" || e.constructor.name === \"TimeoutError\") ? 504 : 500\n});\nvar handleResponseError = (e, outgoing) => {\n  const err = e instanceof Error ? e : new Error(\"unknown error\", { cause: e });\n  if (err.code === \"ERR_STREAM_PREMATURE_CLOSE\") {\n    console.info(\"The user aborted a request.\");\n  } else {\n    console.error(e);\n    if (!outgoing.headersSent) {\n      outgoing.writeHead(500, { \"Content-Type\": \"text/plain\" });\n    }\n    outgoing.end(`Error: ${err.message}`);\n    outgoing.destroy(err);\n  }\n};\nvar flushHeaders = (outgoing) => {\n  if (\"flushHeaders\" in outgoing && outgoing.writable) {\n    outgoing.flushHeaders();\n  }\n};\nvar responseViaCache = async (res, outgoing) => {\n  let [status, body, header] = res[cacheKey];\n  let hasContentLength = false;\n  if (!header) {\n    header = { \"content-type\": \"text/plain; charset=UTF-8\" };\n  } else if (header instanceof Headers) {\n    hasContentLength = header.has(\"content-length\");\n    header = buildOutgoingHttpHeaders(header);\n  } else if (Array.isArray(header)) {\n    const headerObj = new Headers(header);\n    hasContentLength = headerObj.has(\"content-length\");\n    header = buildOutgoingHttpHeaders(headerObj);\n  } else {\n    for (const key in header) {\n      if (key.length === 14 && key.toLowerCase() === \"content-length\") {\n        hasContentLength = true;\n        break;\n      }\n    }\n  }\n  if (!hasContentLength) {\n    if (typeof body === \"string\") {\n      header[\"Content-Length\"] = Buffer.byteLength(body);\n    } else if (body instanceof Uint8Array) {\n      header[\"Content-Length\"] = body.byteLength;\n    } else if (body instanceof Blob) {\n      header[\"Content-Length\"] = body.size;\n    }\n  }\n  outgoing.writeHead(status, header);\n  if (typeof body === \"string\" || body instanceof Uint8Array) {\n    outgoing.end(body);\n  } else if (body instanceof Blob) {\n    outgoing.end(new Uint8Array(await body.arrayBuffer()));\n  } else {\n    flushHeaders(outgoing);\n    await writeFromReadableStream(body, outgoing)?.catch(\n      (e) => handleResponseError(e, outgoing)\n    );\n  }\n  ;\n  outgoing[outgoingEnded]?.();\n};\nvar isPromise = (res) => typeof res.then === \"function\";\nvar responseViaResponseObject = async (res, outgoing, options = {}) => {\n  if (isPromise(res)) {\n    if (options.errorHandler) {\n      try {\n        res = await res;\n      } catch (err) {\n        const errRes = await options.errorHandler(err);\n        if (!errRes) {\n          return;\n        }\n        res = errRes;\n      }\n    } else {\n      res = await res.catch(handleFetchError);\n    }\n  }\n  if (cacheKey in res) {\n    return responseViaCache(res, outgoing);\n  }\n  const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);\n  if (res.body) {\n    const reader = res.body.getReader();\n    const values = [];\n    let done = false;\n    let currentReadPromise = void 0;\n    if (resHeaderRecord[\"transfer-encoding\"] !== \"chunked\") {\n      let maxReadCount = 2;\n      for (let i = 0; i < maxReadCount; i++) {\n        currentReadPromise ||= reader.read();\n        const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {\n          console.error(e);\n          done = true;\n        });\n        if (!chunk) {\n          if (i === 1) {\n            await new Promise((resolve) => setTimeout(resolve));\n            maxReadCount = 3;\n            continue;\n          }\n          break;\n        }\n        currentReadPromise = void 0;\n        if (chunk.value) {\n          values.push(chunk.value);\n        }\n        if (chunk.done) {\n          done = true;\n          break;\n        }\n      }\n      if (done && !(\"content-length\" in resHeaderRecord)) {\n        resHeaderRecord[\"content-length\"] = values.reduce((acc, value) => acc + value.length, 0);\n      }\n    }\n    outgoing.writeHead(res.status, resHeaderRecord);\n    values.forEach((value) => {\n      ;\n      outgoing.write(value);\n    });\n    if (done) {\n      outgoing.end();\n    } else {\n      if (values.length === 0) {\n        flushHeaders(outgoing);\n      }\n      await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);\n    }\n  } else if (resHeaderRecord[X_ALREADY_SENT]) {\n  } else {\n    outgoing.writeHead(res.status, resHeaderRecord);\n    outgoing.end();\n  }\n  ;\n  outgoing[outgoingEnded]?.();\n};\nvar getRequestListener = (fetchCallback, options = {}) => {\n  const autoCleanupIncoming = options.autoCleanupIncoming ?? true;\n  if (options.overrideGlobalObjects !== false && global.Request !== Request) {\n    Object.defineProperty(global, \"Request\", {\n      value: Request\n    });\n    Object.defineProperty(global, \"Response\", {\n      value: Response2\n    });\n  }\n  return async (incoming, outgoing) => {\n    let res, req;\n    try {\n      req = newRequest(incoming, options.hostname);\n      let incomingEnded = !autoCleanupIncoming || incoming.method === \"GET\" || incoming.method === \"HEAD\";\n      if (!incomingEnded) {\n        ;\n        incoming[wrapBodyStream] = true;\n        incoming.on(\"end\", () => {\n          incomingEnded = true;\n        });\n        if (incoming instanceof Http2ServerRequest2) {\n          ;\n          outgoing[outgoingEnded] = () => {\n            if (!incomingEnded) {\n              setTimeout(() => {\n                if (!incomingEnded) {\n                  setTimeout(() => {\n                    drainIncoming(incoming);\n                  });\n                }\n              });\n            }\n          };\n        }\n        outgoing.on(\"finish\", () => {\n          if (!incomingEnded) {\n            drainIncoming(incoming);\n          }\n        });\n      }\n      outgoing.on(\"close\", () => {\n        const abortController = req[abortControllerKey];\n        if (abortController) {\n          if (incoming.errored) {\n            req[abortControllerKey].abort(incoming.errored.toString());\n          } else if (!outgoing.writableFinished) {\n            req[abortControllerKey].abort(\"Client connection prematurely closed.\");\n          }\n        }\n        if (!incomingEnded) {\n          setTimeout(() => {\n            if (!incomingEnded) {\n              setTimeout(() => {\n                drainIncoming(incoming);\n              });\n            }\n          });\n        }\n      });\n      res = fetchCallback(req, { incoming, outgoing });\n      if (cacheKey in res) {\n        return responseViaCache(res, outgoing);\n      }\n    } catch (e) {\n      if (!res) {\n        if (options.errorHandler) {\n          res = await options.errorHandler(req ? e : toRequestError(e));\n          if (!res) {\n            return;\n          }\n        } else if (!req) {\n          res = handleRequestError();\n        } else {\n          res = handleFetchError(e);\n        }\n      } else {\n        return handleResponseError(e, outgoing);\n      }\n    }\n    try {\n      return await responseViaResponseObject(res, outgoing, options);\n    } catch (e) {\n      return handleResponseError(e, outgoing);\n    }\n  };\n};\n\n// src/server.ts\nvar createAdaptorServer = (options) => {\n  const fetchCallback = options.fetch;\n  const requestListener = getRequestListener(fetchCallback, {\n    hostname: options.hostname,\n    overrideGlobalObjects: options.overrideGlobalObjects,\n    autoCleanupIncoming: options.autoCleanupIncoming\n  });\n  const createServer = options.createServer || createServerHTTP;\n  const server = createServer(options.serverOptions || {}, requestListener);\n  return server;\n};\nvar serve = (options, listeningListener) => {\n  const server = createAdaptorServer(options);\n  server.listen(options?.port ?? 3e3, options.hostname, () => {\n    const serverInfo = server.address();\n    listeningListener && listeningListener(serverInfo);\n  });\n  return server;\n};\nexport {\n  RequestError,\n  createAdaptorServer,\n  getRequestListener,\n  serve\n};\n", null, null, "import * as http from \"http\";\r\nimport * as crypto from \"crypto\";\r\nimport { ServerPermissionLevel } from \"./IAuthenticationToken\";\r\n\r\nexport default class HttpUtilities {\r\n  /**\r\n   * Creates a short, human-readable request description for logging.\r\n   * Format: [HH:MM:SS] [usr:AABBCC] METHOD /path:\r\n   * Or with token: [HH:MM:SS] [usr:AABBCCDDEE] METHOD /path:\r\n   * @param req The HTTP request\r\n   * @param clientIp The client IP address (used to generate user thumbprint)\r\n   * @param tokenThumb Optional 4-char token thumbprint to append for authenticated users\r\n   */\r\n  static getShortReqDescription(req: http.IncomingMessage, clientIp?: string, tokenThumb?: string) {\r\n    const now = new Date();\r\n    const time = `${String(now.getHours()).padStart(2, \"0\")}:${String(now.getMinutes()).padStart(2, \"0\")}:${String(now.getSeconds()).padStart(2, \"0\")}`;\r\n\r\n    let userPart = \"\";\r\n    if (clientIp) {\r\n      const ipThumb = this.getThumbprint(clientIp);\r\n      if (this.isLocalIp(clientIp)) {\r\n        // For local connections, show \"local\" instead of IP thumbprint\r\n        userPart = tokenThumb ? `[usr:local-${tokenThumb}]` : `[usr:local]`;\r\n      } else {\r\n        userPart = tokenThumb ? `[usr:${ipThumb}-${tokenThumb}]` : `[usr:${ipThumb}]`;\r\n      }\r\n      return `[${time}] ${userPart} ${req.method} ${req.url}: `;\r\n    }\r\n\r\n    return `[${time}] ${req.method} ${req.url}: `;\r\n  }\r\n\r\n  /**\r\n   * Creates a 6-character thumbprint from an IP address or token for session identification.\r\n   *\r\n   * NOTE: This is NOT password hashing - it creates a short visual identifier for display/logging.\r\n   * SHA-256 is appropriate here as we only need a collision-resistant fingerprint.\r\n   */\r\n  static getThumbprint(value: string): string {\r\n    // Not password hashing; this is only a short display thumbprint.\r\n    const hash = crypto.createHash(\"sha256\").update(value).digest(\"hex\");\r\n    return hash.substring(0, 6).toUpperCase();\r\n  }\r\n\r\n  /**\r\n   * Creates a 4-character thumbprint from an identifier for appending to user identification in logs.\r\n   *\r\n   * NOTE: This is NOT password hashing - it creates a short visual identifier for display/logging.\r\n   * SHA-256 is appropriate here as we only need a collision-resistant fingerprint, not a secure\r\n   * password hash. Actual authentication uses AES-GCM encryption, not this thumbprint.\r\n   *\r\n   * @param identifier A unique session identifier (NOT a password) to create a thumbprint from\r\n   */\r\n  static getTokenThumbprint(identifier: string): string {\r\n    // Not password hashing; this is only a short display thumbprint.\r\n    const hash = crypto.createHash(\"sha256\").update(identifier).digest(\"hex\");\r\n    return hash.substring(0, 4).toUpperCase();\r\n  }\r\n\r\n  /**\r\n   * Checks if an IP address is a local/loopback address.\r\n   */\r\n  static isLocalIp(clientIp: string): boolean {\r\n    return clientIp === \"127.0.0.1\" || clientIp === \"::1\" || clientIp === \"::ffff:127.0.0.1\";\r\n  }\r\n\r\n  /**\r\n   * Formats a client IP address for display, with friendly names for local addresses.\r\n   */\r\n  static formatClientIp(clientIp: string): string {\r\n    if (this.isLocalIp(clientIp)) {\r\n      return \"(local)\";\r\n    }\r\n    return clientIp;\r\n  }\r\n\r\n  /**\r\n   * Returns a human-readable name for a server permission level.\r\n   */\r\n  static getPermissionLevelName(level: ServerPermissionLevel): string {\r\n    switch (level) {\r\n      case ServerPermissionLevel.none:\r\n        return \"none\";\r\n      case ServerPermissionLevel.displayReadOnly:\r\n        return \"display-read-only\";\r\n      case ServerPermissionLevel.fullReadOnly:\r\n        return \"full-read-only\";\r\n      case ServerPermissionLevel.updateState:\r\n        return \"update-state\";\r\n      case ServerPermissionLevel.admin:\r\n        return \"admin\";\r\n      default:\r\n        return `unknown(${level})`;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { z, ZodTypeAny } from \"zod\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IField, { FieldDataType } from \"./IField\";\r\nimport IFormDefinition from \"./IFormDefinition\";\r\nimport DataFormUtilities from \"./DataFormUtilities\";\r\n\r\nexport default class DataFormZod {\r\n  public static getZodSchema(formDefinition: IFormDefinition) {\r\n    const cache = new WeakMap<IFormDefinition, ZodTypeAny>();\r\n\r\n    return DataFormZod.buildZodSchema(formDefinition, cache);\r\n  }\r\n\r\n  private static buildZodSchema(\r\n    formDefinition: IFormDefinition,\r\n    cache: WeakMap<IFormDefinition, ZodTypeAny>\r\n  ): ZodTypeAny {\r\n    if (cache.has(formDefinition)) {\r\n      return cache.get(formDefinition)!;\r\n    }\r\n\r\n    const placeholder = z.lazy(() => cache.get(formDefinition) ?? z.unknown());\r\n    cache.set(formDefinition, placeholder);\r\n\r\n    const fieldSchemas: { [key: string]: ZodTypeAny } = {};\r\n\r\n    if (Array.isArray(formDefinition.fields)) {\r\n      for (const field of formDefinition.fields) {\r\n        if (\r\n          !field ||\r\n          !field.id ||\r\n          !Utilities.isUsableAsObjectKey(field.id) ||\r\n          field.id === \"__scalar\" ||\r\n          field.id.indexOf(\"<\") >= 0 ||\r\n          field.id.indexOf(\">\") >= 0\r\n        ) {\r\n          continue;\r\n        }\r\n\r\n        fieldSchemas[field.id] = DataFormZod.getFieldSchema(field, cache);\r\n      }\r\n    }\r\n\r\n    const baseObject = z.object(fieldSchemas);\r\n\r\n    const objectSchema: ZodTypeAny = formDefinition.customField\r\n      ? baseObject.catchall(\r\n          DataFormZod.getFieldSchema(formDefinition.customField, cache, {\r\n            skipOptionalWrap: true,\r\n          })\r\n        )\r\n      : baseObject.passthrough();\r\n\r\n    let finalSchema: ZodTypeAny = objectSchema;\r\n\r\n    if (formDefinition.scalarField && !formDefinition.scalarFieldUpgradeName) {\r\n      const scalarSchema = DataFormZod.getFieldSchema(formDefinition.scalarField, cache, {\r\n        skipOptionalWrap: true,\r\n      });\r\n      finalSchema = finalSchema.or(scalarSchema);\r\n    }\r\n\r\n    cache.set(formDefinition, finalSchema);\r\n\r\n    return finalSchema;\r\n  }\r\n\r\n  private static getFieldSchema(\r\n    field: IField,\r\n    cache: WeakMap<IFormDefinition, ZodTypeAny>,\r\n    options?: { skipOptionalWrap?: boolean }\r\n  ): ZodTypeAny {\r\n    const variants = DataFormUtilities.getFieldAndAlternates(field);\r\n    const schemas: ZodTypeAny[] = [];\r\n\r\n    for (const variant of variants) {\r\n      const schema = DataFormZod.getSingleFieldSchema(variant, cache);\r\n\r\n      if (schema) {\r\n        schemas.push(schema);\r\n      }\r\n    }\r\n\r\n    let combined = DataFormZod.combineSchemas(schemas);\r\n\r\n    if (!options?.skipOptionalWrap) {\r\n      const isRequired = variants.some((variant) => variant.isRequired);\r\n\r\n      if (!isRequired) {\r\n        combined = combined.optional();\r\n      }\r\n    }\r\n\r\n    return combined;\r\n  }\r\n\r\n  private static combineSchemas(schemas: ZodTypeAny[]): ZodTypeAny {\r\n    if (!schemas.length) {\r\n      return z.unknown();\r\n    }\r\n\r\n    let combined = schemas[0];\r\n\r\n    for (let i = 1; i < schemas.length; i++) {\r\n      combined = combined.or(schemas[i]);\r\n    }\r\n\r\n    return combined;\r\n  }\r\n\r\n  private static getSingleFieldSchema(field: IField, cache: WeakMap<IFormDefinition, ZodTypeAny>): ZodTypeAny {\r\n    switch (field.dataType) {\r\n      case FieldDataType.boolean:\r\n        return z.boolean();\r\n      case FieldDataType.intBoolean: {\r\n        const booleanNumber = DataFormZod.createNumberSchema(field, { integer: true }).min(0).max(1);\r\n        return booleanNumber.or(z.boolean());\r\n      }\r\n      case FieldDataType.int:\r\n      case FieldDataType.intEnum:\r\n      case FieldDataType.intValueLookup: {\r\n        if (field.dataType === FieldDataType.intEnum && field.choices && field.choices.length > 0) {\r\n          const numericChoices = field.choices\r\n            .map((choice) => choice.id)\r\n            .filter((id): id is number => typeof id === \"number\");\r\n\r\n          if (numericChoices.length > 0) {\r\n            let literalSchema: ZodTypeAny = z.literal(numericChoices[0]);\r\n\r\n            for (let i = 1; i < numericChoices.length; i++) {\r\n              literalSchema = literalSchema.or(z.literal(numericChoices[i]));\r\n            }\r\n\r\n            return literalSchema;\r\n          }\r\n        }\r\n\r\n        return DataFormZod.createNumberSchema(field, { integer: true });\r\n      }\r\n      case FieldDataType.float:\r\n      case FieldDataType.number:\r\n      case FieldDataType.long:\r\n        return DataFormZod.createNumberSchema(field);\r\n      case FieldDataType.percentRange:\r\n        return DataFormZod.createRangeSchema(field, { clamp01: true });\r\n      case FieldDataType.intRange:\r\n        return DataFormZod.createRangeSchema(field, { integer: true });\r\n      case FieldDataType.floatRange:\r\n        return DataFormZod.createRangeSchema(field);\r\n      case FieldDataType.stringEnum: {\r\n        if (field.choices && field.choices.length > 0) {\r\n          const stringChoices = field.choices\r\n            .map((choice) => choice.id)\r\n            .filter((id): id is string => typeof id === \"string\");\r\n\r\n          if (stringChoices.length > 0) {\r\n            return z.enum(stringChoices as [string, ...string[]]);\r\n          }\r\n        }\r\n\r\n        return DataFormZod.createStringSchema(field);\r\n      }\r\n      case FieldDataType.string:\r\n      case FieldDataType.stringLookup:\r\n      case FieldDataType.longFormString:\r\n      case FieldDataType.molang:\r\n      case FieldDataType.localizableString:\r\n        return DataFormZod.createStringSchema(field);\r\n      case FieldDataType.uuid:\r\n        return DataFormZod.createStringSchema(field).uuid();\r\n      case FieldDataType.longFormStringArray:\r\n      case FieldDataType.stringArray:\r\n      case FieldDataType.checkboxListAsStringArray:\r\n      case FieldDataType.molangArray:\r\n        return DataFormZod.createArraySchema(z.string(), field);\r\n      case FieldDataType.twoDStringArray:\r\n        return DataFormZod.createArraySchema(z.array(z.string()), field);\r\n      case FieldDataType.numberArray:\r\n        return DataFormZod.createArraySchema(z.number(), field);\r\n      case FieldDataType.point2:\r\n        return DataFormZod.createVectorSchema(2, field);\r\n      case FieldDataType.point3:\r\n        return DataFormZod.createVectorSchema(3, field);\r\n      case FieldDataType.intPoint3:\r\n      case FieldDataType.location:\r\n      case FieldDataType.locationOffset:\r\n        return DataFormZod.createVectorSchema(3, field, { integer: field.dataType === FieldDataType.intPoint3 });\r\n      case FieldDataType.keyedStringCollection:\r\n        return z.record(z.string());\r\n      case FieldDataType.keyedBooleanCollection:\r\n        return z.record(z.boolean());\r\n      case FieldDataType.keyedStringArrayCollection:\r\n        return z.record(z.array(z.string()));\r\n      case FieldDataType.keyedNumberCollection:\r\n        return z.record(z.number());\r\n      case FieldDataType.keyedNumberArrayCollection:\r\n        return z.record(z.array(z.number()));\r\n      case FieldDataType.arrayOfKeyedStringCollection:\r\n        return DataFormZod.createArraySchema(z.record(z.string()), field);\r\n      case FieldDataType.keyedKeyedStringArrayCollection:\r\n        return z.record(z.record(z.array(z.string())));\r\n      case FieldDataType.keyedObjectCollection: {\r\n        const subSchema = DataFormZod.getSubFormSchema(field, cache) ?? z.record(z.unknown());\r\n        return z.record(subSchema);\r\n      }\r\n      case FieldDataType.objectArray: {\r\n        const subSchema = DataFormZod.getSubFormSchema(field, cache) ?? z.record(z.unknown());\r\n        return DataFormZod.createArraySchema(subSchema, field);\r\n      }\r\n      case FieldDataType.object: {\r\n        return DataFormZod.getSubFormSchema(field, cache) ?? z.record(z.unknown());\r\n      }\r\n      case FieldDataType.minecraftFilter:\r\n      case FieldDataType.minecraftEventTrigger:\r\n        return z.record(z.unknown());\r\n      case FieldDataType.minecraftEventTriggerArray:\r\n        return DataFormZod.createArraySchema(z.record(z.unknown()), field);\r\n      case FieldDataType.minecraftEventReference:\r\n        return DataFormZod.createStringSchema(field);\r\n      case FieldDataType.version: {\r\n        const tupleSchema = z.tuple([z.number().int(), z.number().int(), z.number().int()]);\r\n        return z.string().or(z.number()).or(tupleSchema);\r\n      }\r\n      default:\r\n        return z.unknown();\r\n    }\r\n  }\r\n\r\n  private static createNumberSchema(field: IField, options?: { integer?: boolean; clamp01?: boolean }) {\r\n    let schema = options?.integer ? z.number().int() : z.number();\r\n\r\n    if (options?.clamp01) {\r\n      schema = schema.min(0).max(1);\r\n    }\r\n\r\n    if (field.minValue !== undefined) {\r\n      schema = schema.min(field.minValue);\r\n    }\r\n\r\n    if (field.maxValue !== undefined) {\r\n      schema = schema.max(field.maxValue);\r\n    }\r\n\r\n    return schema;\r\n  }\r\n\r\n  private static createStringSchema(field: IField) {\r\n    let schema = z.string();\r\n\r\n    if (field.minLength !== undefined) {\r\n      schema = schema.min(field.minLength);\r\n    }\r\n\r\n    if (field.maxLength !== undefined) {\r\n      schema = schema.max(field.maxLength);\r\n    }\r\n\r\n    return schema;\r\n  }\r\n\r\n  private static createArraySchema(elementType: ZodTypeAny, field: IField) {\r\n    let schema = z.array(elementType);\r\n\r\n    if (field.fixedLength !== undefined) {\r\n      schema = schema.length(field.fixedLength);\r\n    } else {\r\n      if (field.minLength !== undefined) {\r\n        schema = schema.min(field.minLength);\r\n      }\r\n\r\n      if (field.maxLength !== undefined) {\r\n        schema = schema.max(field.maxLength);\r\n      }\r\n    }\r\n\r\n    return schema;\r\n  }\r\n\r\n  private static createRangeSchema(field: IField, options?: { integer?: boolean; clamp01?: boolean }) {\r\n    const numberSchema = DataFormZod.createNumberSchema(field, options);\r\n    const tupleSchema = z.tuple([numberSchema, numberSchema]);\r\n    const objectSchema = z.object({\r\n      min: numberSchema.optional(),\r\n      max: numberSchema.optional(),\r\n    });\r\n\r\n    return numberSchema.or(tupleSchema).or(objectSchema);\r\n  }\r\n\r\n  private static createVectorSchema(dimension: number, field: IField, options?: { integer?: boolean }): ZodTypeAny {\r\n    const numberFactory = () => DataFormZod.createNumberSchema(field, { integer: options?.integer });\r\n\r\n    if (dimension === 2) {\r\n      const tupleSchema = z.tuple([numberFactory(), numberFactory()]);\r\n      const objectSchema = z\r\n        .object({\r\n          x: numberFactory(),\r\n          y: numberFactory(),\r\n        })\r\n        .passthrough();\r\n      const altObjectSchema = z\r\n        .object({\r\n          a: numberFactory(),\r\n          b: numberFactory(),\r\n        })\r\n        .passthrough();\r\n\r\n      return tupleSchema.or(objectSchema).or(altObjectSchema);\r\n    }\r\n\r\n    if (dimension === 3) {\r\n      const tupleSchema = z.tuple([numberFactory(), numberFactory(), numberFactory()]);\r\n      const objectSchema = z\r\n        .object({\r\n          x: numberFactory(),\r\n          y: numberFactory(),\r\n          z: numberFactory(),\r\n        })\r\n        .passthrough();\r\n\r\n      return tupleSchema.or(objectSchema);\r\n    }\r\n\r\n    return z.array(numberFactory()).length(dimension);\r\n  }\r\n\r\n  private static getSubFormSchema(field: IField, cache: WeakMap<IFormDefinition, ZodTypeAny>): ZodTypeAny | undefined {\r\n    let subForm = field.subForm;\r\n\r\n    if (!subForm && field.subFormId) {\r\n      subForm = Database.getFormByPath(field.subFormId);\r\n    }\r\n\r\n    if (!subForm) {\r\n      return undefined;\r\n    }\r\n\r\n    return DataFormZod.buildZodSchema(subForm, cache);\r\n  }\r\n}\r\n", "import CreatorTools from \"../app/CreatorTools\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport Project, { ProjectAutoDeploymentMode } from \"../app/Project\";\r\nimport IStatus, { StatusType } from \"../app/Status\";\r\nimport Log from \"../core/Log\";\r\nimport LocalEnvironment, { OperationColors, consoleText_reset } from \"../local/LocalEnvironment\";\r\nimport LocalUtilities from \"../local/LocalUtilities\";\r\nimport NodeStorage from \"../local/NodeStorage\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IProjectStartInfo from \"./IProjectStartInfo\";\r\nimport * as path from \"path\";\r\n\r\nexport enum TaskType {\r\n  noCommand = 0,\r\n  runTests = 1,\r\n  exportAddon = 2,\r\n  exportWorld = 3,\r\n  ensureRefWorld = 4,\r\n  deploy = 5,\r\n  runDedicatedServer = 6,\r\n  info = 7,\r\n  add = 8,\r\n  create = 9,\r\n  validate = 10,\r\n  serve = 11,\r\n  version = 12,\r\n  passcodes = 13,\r\n  setPasscode = 14,\r\n  setServerProperties = 15,\r\n  minecraftEulaAndPrivacyStatement = 16,\r\n  deployTestWorld = 17,\r\n  world = 18,\r\n  fix = 19,\r\n  setProjectProperty = 20,\r\n  autoTest = 21,\r\n  aggregateReports = 22,\r\n  docsUpdateFormSource = 23,\r\n  docsGenerateFormJson = 24,\r\n  docsGenerateMarkdown = 25,\r\n  search = 26,\r\n  docsGenerateTypes = 27,\r\n  profileValidation = 28,\r\n  mcp = 29,\r\n  docsUpdateMCCat = 30,\r\n  renderModel = 31,\r\n  renderVanilla = 32,\r\n  renderStructure = 33,\r\n  buildStructure = 34,\r\n  view = 35,\r\n  edit = 36,\r\n  docsGenerateJsonSchema = 37,\r\n  setup = 38,\r\n  generateSchemaPackage = 39,\r\n}\r\n\r\nexport enum OutputType {\r\n  normal = 0,\r\n  noReports = 1,\r\n  json = 2,\r\n}\r\n\r\nexport default class ClUtils {\r\n  static createProject(creatorTools: CreatorTools, startInfo: IProjectStartInfo) {\r\n    const proj = new Project(creatorTools, startInfo.ctorProjectName, null);\r\n\r\n    if (startInfo.localFilePath) {\r\n      proj.localFilePath = startInfo.localFilePath;\r\n    }\r\n\r\n    if (startInfo.localFolderPath) {\r\n      proj.localFolderPath = startInfo.localFolderPath;\r\n    }\r\n\r\n    if (startInfo.accessoryFiles) {\r\n      proj.accessoryFilePaths = startInfo.accessoryFiles;\r\n    }\r\n\r\n    proj.autoDeploymentMode = ProjectAutoDeploymentMode.noAutoDeployment;\r\n\r\n    return proj;\r\n  }\r\n\r\n  static handleStatusAdded(creatorTools: CreatorTools, status: IStatus) {\r\n    let message = status.message;\r\n\r\n    if (status.type === StatusType.operationStarted) {\r\n      message =\r\n        OperationColors[(status.operationId ? status.operationId : 0) % OperationColors.length] +\r\n        \"[[ START: \" +\r\n        message +\r\n        consoleText_reset;\r\n    } else if (status.type === StatusType.operationEndedComplete) {\r\n      message =\r\n        OperationColors[(status.operationId ? status.operationId : 0) % OperationColors.length] +\r\n        \"          \" +\r\n        message +\r\n        \" :END ]]\" +\r\n        consoleText_reset;\r\n    } else if (status.type === StatusType.operationEndedErrors) {\r\n      message =\r\n        OperationColors[(status.operationId ? status.operationId : 0) % OperationColors.length] +\r\n        \"          \" +\r\n        message +\r\n        \" :END - ERRORS ]]\" +\r\n        consoleText_reset;\r\n    }\r\n\r\n    Log.verbose(message);\r\n  }\r\n\r\n  static async localFolderExists(path: string) {\r\n    const ls = new NodeStorage(path, \"\");\r\n\r\n    return await ls.rootFolder.exists();\r\n  }\r\n\r\n  static async localFileExists(path: string) {\r\n    const folderPath = StorageUtilities.getFolderPath(path);\r\n    const fileName = StorageUtilities.getLeafName(path);\r\n\r\n    if (!fileName || fileName.length < 2 || !folderPath || folderPath.length < 2) {\r\n      throw new Error(\"Could not process file with path: `\" + path + \"`\");\r\n    }\r\n\r\n    const ls = new NodeStorage(folderPath, \"\");\r\n\r\n    const file = ls.rootFolder.ensureFile(fileName);\r\n\r\n    return await file.exists();\r\n  }\r\n\r\n  static ensureLocalFolder(path: string) {\r\n    const ls = new NodeStorage(path, \"\");\r\n\r\n    return ls.rootFolder;\r\n  }\r\n\r\n  static getIsWriteCommand(taskType: TaskType) {\r\n    return (\r\n      taskType === TaskType.world ||\r\n      taskType === TaskType.create ||\r\n      taskType === TaskType.add ||\r\n      taskType === TaskType.fix\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Returns true for commands that edit content in place (no separate output folder).\r\n   * These commands: edit, view, add, create, fix\r\n   */\r\n  static getIsEditInPlaceCommand(taskType: TaskType) {\r\n    return (\r\n      taskType === TaskType.edit ||\r\n      taskType === TaskType.view ||\r\n      taskType === TaskType.add ||\r\n      taskType === TaskType.create ||\r\n      taskType === TaskType.fix\r\n    );\r\n  }\r\n\r\n  static async getMainWorkFolder(taskType: TaskType, inputFolder?: string, outputFolder?: string) {\r\n    // console.log(\"Using local path: '\" + inputFolder + \"' from '\" + __dirname + \"'\");\r\n    let workFolder: IFolder | undefined;\r\n\r\n    if (!inputFolder && outputFolder && ClUtils.getIsWriteCommand(taskType)) {\r\n      // Resolve relative output paths against current working directory\r\n      const resolvedOutput = path.isAbsolute(outputFolder) ? outputFolder : path.resolve(process.cwd(), outputFolder);\r\n      const outputStorage = new NodeStorage(resolvedOutput, \"\");\r\n      workFolder = outputStorage.rootFolder;\r\n      await workFolder.ensureExists();\r\n    }\r\n\r\n    if (!workFolder) {\r\n      if (!inputFolder) {\r\n        inputFolder = process.cwd();\r\n      } else {\r\n        // Resolve relative input paths against current working directory\r\n        inputFolder = path.isAbsolute(inputFolder) ? inputFolder : path.resolve(process.cwd(), inputFolder);\r\n      }\r\n\r\n      const inputStorage = new NodeStorage(inputFolder, \"\");\r\n      inputStorage.readOnly = true;\r\n      workFolder = inputStorage.rootFolder;\r\n    }\r\n\r\n    const exists = await workFolder.exists();\r\n\r\n    if (!exists) {\r\n      // Use a CLI-friendly message \u2014 referring to the bundled CLI's own\r\n      // installation directory (\"__dirname\") only confuses creators who are\r\n      // pointing at their own project folder.\r\n      throw new Error(\r\n        `Input folder does not exist: '${workFolder.fullPath}'. Use -i <path> to specify the project folder, or run from inside the project.`\r\n      );\r\n    }\r\n\r\n    await workFolder.load();\r\n\r\n    return workFolder;\r\n  }\r\n\r\n  static getCreatorTools(localEnv: LocalEnvironment, basePath?: string) {\r\n    CreatorToolsHost.localFolderExists = ClUtils.localFolderExists;\r\n    CreatorToolsHost.localFileExists = ClUtils.localFileExists;\r\n    CreatorToolsHost.ensureLocalFolder = ClUtils.ensureLocalFolder;\r\n\r\n    CreatorToolsHost.prefsStorage = new NodeStorage(\r\n      path.join(localEnv.utilities.cliWorkingPath, \"prefs\") + NodeStorage.platformFolderDelimiter,\r\n      \"\"\r\n    );\r\n\r\n    CreatorToolsHost.projectsStorage = new NodeStorage(\r\n      path.join(localEnv.utilities.cliWorkingPath, \"projects\") + NodeStorage.platformFolderDelimiter,\r\n      \"\"\r\n    );\r\n\r\n    CreatorToolsHost.packStorage = new NodeStorage(\r\n      path.join(localEnv.utilities.cliWorkingPath, \"packs\") + NodeStorage.platformFolderDelimiter,\r\n      \"\"\r\n    );\r\n\r\n    CreatorToolsHost.workingStorage = new NodeStorage(\r\n      path.join(localEnv.utilities.cliWorkingPath, \"working\") + NodeStorage.platformFolderDelimiter,\r\n      \"\"\r\n    );\r\n\r\n    if (localEnv.utilities && basePath) {\r\n      (localEnv.utilities as LocalUtilities).basePathAdjust = basePath;\r\n    }\r\n\r\n    const coreStorage = new NodeStorage(__dirname + \"/../data/content/\", \"\");\r\n    Database.contentFolder = coreStorage.rootFolder;\r\n\r\n    Database.local = localEnv.utilities;\r\n\r\n    CreatorToolsHost.init();\r\n\r\n    const ct = CreatorToolsHost.getCreatorTools();\r\n\r\n    if (ct) {\r\n      ct.local = localEnv.utilities;\r\n    }\r\n\r\n    return ct;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport ILocalEnvironmentData from \"./ILocalEnvironmentData\";\r\nimport ISslConfig from \"./ISslConfig\";\r\nimport LocalUtilities from \"./LocalUtilities\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport IFolder from \"./../storage/IFolder\";\r\nimport * as fs from \"fs\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport * as crypto from \"crypto\";\r\nimport { threadId } from \"worker_threads\";\r\nimport Log, { LogItem, LogItemLevel } from \"../core/Log\";\r\n\r\nexport const consoleText_reset = \"\\x1b[0m\";\r\nexport const consoleText_bright = \"\\x1b[1m\";\r\nexport const consoleText_dim = \"\\x1b[2m\";\r\nexport const consoleText_underscore = \"\\x1b[4m\";\r\nexport const consoleText_blink = \"\\x1b[5m\";\r\nexport const consoleText_reverse = \"\\x1b[7m\";\r\nexport const consoleText_hidden = \"\\x1b[8m\";\r\n\r\nexport const consoleText_fgBlack = \"\\x1b[30m\";\r\nexport const consoleText_fgRed = \"\\x1b[31m\";\r\nexport const consoleText_fgGreen = \"\\x1b[32m\";\r\nexport const consoleText_fgYellow = \"\\x1b[33m\";\r\nexport const consoleText_fgBlue = \"\\x1b[34m\";\r\nexport const consoleText_fgMagenta = \"\\x1b[35m\";\r\nexport const consoleText_fgCyan = \"\\x1b[36m\";\r\nexport const consoleText_fgWhite = \"\\x1b[37m\";\r\nexport const consoleText_fgGray = \"\\x1b[90m\";\r\n\r\nexport const consoleText_bgBlack = \"\\x1b[40m\";\r\nexport const consoleText_bgRed = \"\\x1b[41m\";\r\nexport const consoleText_bgGreen = \"\\x1b[42m\";\r\nexport const consoleText_bgYellow = \"\\x1b[43m\";\r\nexport const consoleText_bgBlue = \"\\x1b[44m\";\r\nexport const consoleText_bgMagenta = \"\\x1b[45m\";\r\nexport const consoleText_bgCyan = \"\\x1b[46m\";\r\nexport const consoleText_bgWhite = \"\\x1b[47m\";\r\nexport const consoleText_bgGray = \"\\x1b[100m\";\r\n\r\nexport const OperationColors = [consoleText_fgGreen, consoleText_fgCyan, consoleText_fgBlue, consoleText_fgMagenta];\r\n\r\nexport default class LocalEnvironment {\r\n  #data: ILocalEnvironmentData;\r\n  public utilities: LocalUtilities;\r\n  #isLoaded: boolean = false;\r\n  #prefsStorage: NodeStorage;\r\n  #rootPrefFolder: IFolder;\r\n  #configFile: IFile;\r\n  #worldContainerStorage: NodeStorage;\r\n\r\n  logToStdError: boolean = false;\r\n  #displayInfo: boolean = false;\r\n  #displayVerbose: boolean = false;\r\n\r\n  _inmemTokenEncryptionPassword?: string;\r\n\r\n  _inmemDisplayReadOnlyPasscode?: string;\r\n  _inmemDisplayReadOnlySessionId?: string;\r\n\r\n  _inmemFullReadOnlyPasscode?: string;\r\n  _inmemFullReadOnlySessionId?: string;\r\n\r\n  _inmemUpdateStatePasscode?: string;\r\n  _inmemUpdateStateSessionId?: string;\r\n\r\n  _inmemAdminPasscode?: string;\r\n  _inmemAdminSessionId?: string;\r\n\r\n  // Experimental SSL config - intentionally not persisted to disk\r\n  private _sslConfig?: ISslConfig;\r\n\r\n  public get sslConfig(): ISslConfig | undefined {\r\n    return this._sslConfig;\r\n  }\r\n\r\n  public set sslConfig(config: ISslConfig | undefined) {\r\n    this._sslConfig = config;\r\n  }\r\n\r\n  public get pathMappings() {\r\n    if (this.#data.pathMappings === undefined) {\r\n      return {};\r\n    }\r\n\r\n    return this.#data.pathMappings;\r\n  }\r\n\r\n  public set pathMappings(newVal: { [path: string]: string } | undefined) {\r\n    this.#data.pathMappings = newVal;\r\n  }\r\n\r\n  public get displayInfo() {\r\n    return this.#displayInfo;\r\n  }\r\n\r\n  public set displayInfo(newInfoValue: boolean) {\r\n    this.#displayInfo = newInfoValue;\r\n  }\r\n\r\n  public get displayVerbose() {\r\n    return this.#displayVerbose;\r\n  }\r\n\r\n  public set displayVerbose(newVerboseValue: boolean) {\r\n    this.#displayVerbose = newVerboseValue;\r\n  }\r\n\r\n  public get worldContainerStorage() {\r\n    return this.#worldContainerStorage;\r\n  }\r\n\r\n  public get worldContainerPath() {\r\n    return this.#data.worldContainerPath;\r\n  }\r\n\r\n  public get serverHostPort() {\r\n    return this.#data.serverHostPort;\r\n  }\r\n\r\n  public set serverHostPort(newPort: number | undefined) {\r\n    if (newPort !== this.#data.serverHostPort) {\r\n      this.#data.serverHostPort = newPort;\r\n    }\r\n  }\r\n\r\n  public get serverDomainName() {\r\n    return this.#data.serverDomainName;\r\n  }\r\n\r\n  public set serverDomainName(newDomainName: string | undefined) {\r\n    if (newDomainName !== this.#data.serverDomainName) {\r\n      this.#data.serverDomainName = newDomainName;\r\n    }\r\n  }\r\n\r\n  public get serverTitle() {\r\n    return this.#data.serverTitle;\r\n  }\r\n\r\n  public set serverTitle(newTitle: string | undefined) {\r\n    if (newTitle !== this.#data.serverTitle) {\r\n      this.#data.serverTitle = newTitle;\r\n    }\r\n  }\r\n\r\n  public get serverMessageOfTheDay() {\r\n    return this.#data.serverMessageOfTheDay;\r\n  }\r\n\r\n  public set serverMessageOfTheDay(messageOfTheDay: string | undefined) {\r\n    if (messageOfTheDay !== this.#data.serverMessageOfTheDay) {\r\n      this.#data.serverMessageOfTheDay = messageOfTheDay;\r\n    }\r\n  }\r\n\r\n  public get allowedCorsOrigins() {\r\n    return this.#data.allowedCorsOrigins;\r\n  }\r\n\r\n  public set allowedCorsOrigins(newOrigins: string[] | undefined) {\r\n    if (newOrigins !== this.#data.allowedCorsOrigins) {\r\n      this.#data.allowedCorsOrigins = newOrigins;\r\n    }\r\n  }\r\n\r\n  get tokenEncryptionKey() {\r\n    if (this._inmemTokenEncryptionPassword === undefined) {\r\n      this._inmemTokenEncryptionPassword = this.generateRandomTokenPassword();\r\n    }\r\n\r\n    return this._inmemTokenEncryptionPassword;\r\n  }\r\n\r\n  get displayReadOnlyPasscode() {\r\n    return this._inmemDisplayReadOnlyPasscode; //this.#data.displayReadOnlyPasscode;\r\n  }\r\n\r\n  get displayReadOnlySessionId() {\r\n    return this._inmemDisplayReadOnlySessionId; //this.#data.displayReadOnlySessionId;\r\n  }\r\n\r\n  setDisplayReadOnlyPasscodeAndRandomizeComplement(newPasscode: string | undefined) {\r\n    if (newPasscode === undefined) {\r\n      throw new Error();\r\n    }\r\n\r\n    newPasscode = newPasscode.toLowerCase();\r\n    newPasscode = newPasscode.replace(\"-\", \"\");\r\n\r\n    if (newPasscode.length !== 8 || !Utilities.isAlphaNumeric(newPasscode)) {\r\n      throw new Error(\r\n        \"Improperly formatted display read-only passcode. Passcodes should be 8 alphanumeric characters.\"\r\n      );\r\n    }\r\n\r\n    this._inmemDisplayReadOnlyPasscode = newPasscode;\r\n    this._inmemDisplayReadOnlySessionId = this.generateRandomPasscode();\r\n  }\r\n\r\n  get fullReadOnlyPasscode() {\r\n    return this._inmemFullReadOnlyPasscode;\r\n  }\r\n\r\n  get fullReadOnlySessionId() {\r\n    return this._inmemFullReadOnlySessionId;\r\n  }\r\n\r\n  setFullReadOnlyPasscodeAndRandomizeComplement(newPasscode: string | undefined) {\r\n    if (newPasscode === undefined) {\r\n      throw new Error();\r\n    }\r\n\r\n    newPasscode = newPasscode.toLowerCase();\r\n    newPasscode = newPasscode.replace(\"-\", \"\");\r\n\r\n    if (newPasscode.length !== 8 || !Utilities.isAlphaNumeric(newPasscode)) {\r\n      throw new Error(\"Improperly formatted full read-only passcode. Passcodes should be 8 alphanumeric characters.\");\r\n    }\r\n\r\n    this._inmemFullReadOnlyPasscode = newPasscode;\r\n    this._inmemFullReadOnlySessionId = this.generateRandomPasscode();\r\n  }\r\n\r\n  get updateStatePasscode() {\r\n    return this._inmemUpdateStatePasscode;\r\n  }\r\n\r\n  get updateStateSessionId() {\r\n    return this._inmemUpdateStateSessionId;\r\n  }\r\n\r\n  setUpdateStatePasscodeAndRandomizeComplement(newPasscode: string | undefined) {\r\n    if (newPasscode === undefined) {\r\n      throw new Error();\r\n    }\r\n\r\n    newPasscode = newPasscode.toLowerCase();\r\n    newPasscode = newPasscode.replace(\"-\", \"\");\r\n\r\n    if (newPasscode.length !== 8 || !Utilities.isAlphaNumeric(newPasscode)) {\r\n      throw new Error(\"Improperly formatted update passcode. Passcodes should be 8 alphanumeric characters.\");\r\n    }\r\n\r\n    this._inmemUpdateStatePasscode = newPasscode;\r\n    this._inmemUpdateStateSessionId = this.generateRandomPasscode();\r\n  }\r\n\r\n  get adminPasscode() {\r\n    return this._inmemAdminPasscode;\r\n  }\r\n\r\n  get adminSessionId() {\r\n    return this._inmemAdminSessionId;\r\n  }\r\n\r\n  setAdminPasscodeAndRandomizeComplement(newPasscode: string | undefined) {\r\n    if (newPasscode === undefined) {\r\n      throw new Error();\r\n    }\r\n\r\n    newPasscode = newPasscode.toLowerCase();\r\n    newPasscode = newPasscode.replace(\"-\", \"\");\r\n\r\n    if (newPasscode.length !== 8 || !Utilities.isAlphaNumeric(newPasscode)) {\r\n      throw new Error(\"Improperly formatted admin passcode. Passcodes should be 8 alphanumeric characters.\");\r\n    }\r\n\r\n    this._inmemAdminPasscode = newPasscode;\r\n    this._inmemAdminSessionId = this.generateRandomPasscode();\r\n  }\r\n\r\n  get iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula() {\r\n    return this.#data.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula;\r\n  }\r\n\r\n  set iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula(\r\n    iAgreeValue: boolean | undefined\r\n  ) {\r\n    this.#data.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula = iAgreeValue;\r\n  }\r\n\r\n  public constructor(subscribeToLog: boolean) {\r\n    this.#data = {};\r\n\r\n    this.load = this.load.bind(this);\r\n    this.save = this.save.bind(this);\r\n\r\n    this.utilities = new LocalUtilities();\r\n\r\n    this.handleNewLogMessage = this.handleNewLogMessage.bind(this);\r\n\r\n    if (subscribeToLog) {\r\n      Log.onItemAdded.subscribe(this.handleNewLogMessage);\r\n    }\r\n\r\n    if (!fs.existsSync(this.utilities.serverWorkingPath)) {\r\n      fs.mkdirSync(this.utilities.serverWorkingPath, { recursive: true });\r\n    }\r\n\r\n    this.#data.worldContainerPath = this.utilities.worldsWorkingPath;\r\n\r\n    if (this.utilities.worldsWorkingPath && !fs.existsSync(this.utilities.worldsWorkingPath)) {\r\n      fs.mkdirSync(this.utilities.worldsWorkingPath, { recursive: true });\r\n    }\r\n\r\n    this.#worldContainerStorage = new NodeStorage(this.utilities.worldsWorkingPath, \"\");\r\n\r\n    if (!fs.existsSync(this.utilities.cliWorkingPath)) {\r\n      fs.mkdirSync(this.utilities.cliWorkingPath, { recursive: true });\r\n    }\r\n\r\n    if (!fs.existsSync(this.utilities.envPrefsPath)) {\r\n      fs.mkdirSync(this.utilities.envPrefsPath, { recursive: true });\r\n    }\r\n\r\n    if (!fs.existsSync(this.utilities.packCachePath)) {\r\n      fs.mkdirSync(this.utilities.packCachePath, { recursive: true });\r\n    }\r\n\r\n    this.#prefsStorage = new NodeStorage(this.utilities.envPrefsPath, \"\");\r\n\r\n    this.#rootPrefFolder = this.#prefsStorage.rootFolder;\r\n\r\n    this.#configFile = this.#rootPrefFolder.ensureFile(\"envprefs.json\");\r\n  }\r\n\r\n  public setWorldContainerPath(newPath: string | undefined) {\r\n    if (newPath !== this.#data.worldContainerPath) {\r\n      this.#data.worldContainerPath = newPath;\r\n\r\n      if (newPath) {\r\n        if (!fs.existsSync(newPath)) {\r\n          fs.mkdirSync(newPath, { recursive: true });\r\n        }\r\n\r\n        this.#worldContainerStorage = new NodeStorage(newPath, \"\");\r\n      }\r\n    }\r\n  }\r\n\r\n  handleNewLogMessage(log: Log, item: LogItem) {\r\n    if (item.level === LogItemLevel.verbose && !this.displayVerbose) {\r\n      return;\r\n    }\r\n\r\n    // In MCP/stdio mode, only send errors and important messages to stderr.\r\n    // Regular messages and debug output would show as [warning] in VS Code's\r\n    // MCP output panel, which is confusing for users.\r\n    if (this.logToStdError) {\r\n      let context = \"\";\r\n      if (item.context && item.context.length > 0) {\r\n        context = item.context + \" \";\r\n      }\r\n\r\n      if (item.level === LogItemLevel.error) {\r\n        console.error(consoleText_fgRed + context + \"Error: \" + item.message + consoleText_reset);\r\n      } else if (item.level === LogItemLevel.important) {\r\n        console.error(consoleText_fgYellow + context + item.message + consoleText_reset);\r\n      }\r\n      // Suppress message/verbose/debug in MCP mode \u2014 they're not actionable\r\n      return;\r\n    }\r\n\r\n    let context = \"\";\r\n\r\n    if (this.displayVerbose) {\r\n      context = threadId + \": \";\r\n    }\r\n\r\n    if (item.context && item.context.length > 0) {\r\n      context = item.context + \" \";\r\n    }\r\n\r\n    if (item.level === LogItemLevel.verbose) {\r\n      console.log(consoleText_fgGray + context + item.message + consoleText_reset);\r\n    } else if (item.level === LogItemLevel.error) {\r\n      console.error(consoleText_fgRed + context + \"Error: \" + item.message + consoleText_reset);\r\n    } else if (item.level === LogItemLevel.important) {\r\n      // NOTE: This is the Log framework's own output handler \u2014 using Log.important()\r\n      // here would cause infinite recursion. console.log with yellow coloring is intentional.\r\n      console.log(consoleText_fgYellow + context + \"Important: \" + item.message + consoleText_reset);\r\n    } else {\r\n      console.log(context + item.message);\r\n    }\r\n  }\r\n\r\n  async load() {\r\n    if (this.#isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this.#configFile.isContentLoaded) {\r\n      await this.#configFile.loadContent(false);\r\n    }\r\n\r\n    if (\r\n      this.#configFile.content !== null &&\r\n      this.#configFile.content !== undefined &&\r\n      typeof this.#configFile.content === \"string\"\r\n    ) {\r\n      this.#data = JSON.parse(this.#configFile.content as string);\r\n    }\r\n\r\n    this.#isLoaded = true;\r\n  }\r\n\r\n  async setDefaults() {\r\n    await this.load();\r\n\r\n    if (this.#data.serverDomainName === undefined) {\r\n      this.#data.serverDomainName = \"localhost\";\r\n    }\r\n\r\n    if (this.#data.serverHostPort === undefined) {\r\n      this.#data.serverHostPort = 6126;\r\n    }\r\n\r\n    if (this._inmemDisplayReadOnlyPasscode === undefined || this._inmemDisplayReadOnlySessionId === undefined) {\r\n      this.setDisplayReadOnlyPasscodeAndRandomizeComplement(this.generateRandomPasscode());\r\n    }\r\n\r\n    if (this._inmemAdminPasscode === undefined || this._inmemAdminSessionId === undefined) {\r\n      this.setAdminPasscodeAndRandomizeComplement(this.generateRandomPasscode());\r\n    }\r\n\r\n    if (this._inmemFullReadOnlyPasscode === undefined || this._inmemFullReadOnlySessionId === undefined) {\r\n      this.setFullReadOnlyPasscodeAndRandomizeComplement(this.generateRandomPasscode());\r\n    }\r\n\r\n    if (this._inmemUpdateStatePasscode === undefined || this._inmemUpdateStateSessionId === undefined) {\r\n      this.setUpdateStatePasscodeAndRandomizeComplement(this.generateRandomPasscode());\r\n    }\r\n\r\n    await this.save();\r\n  }\r\n\r\n  generateRandomPasscode() {\r\n    let newPasscode = \"\";\r\n\r\n    for (let i = 0; i < 8; i++) {\r\n      const rand = crypto.randomInt(34); // don't include 0 and 1 to preclude O/I confusion\r\n\r\n      if (rand <= 7) {\r\n        newPasscode += String.fromCharCode(rand + 50);\r\n      } else {\r\n        newPasscode += String.fromCharCode(rand + 89); // 89 + 8 = starts at A range.\r\n      }\r\n    }\r\n\r\n    return newPasscode;\r\n  }\r\n\r\n  generateRandomTokenPassword() {\r\n    let newPasscode = \"\";\r\n\r\n    for (let i = 0; i < 12; i++) {\r\n      const rand = crypto.randomInt(36);\r\n\r\n      if (rand <= 9) {\r\n        newPasscode += String.fromCharCode(rand + 48);\r\n      } else {\r\n        newPasscode += String.fromCharCode(rand + 87); // 87 + 10 = starts at A range.\r\n      }\r\n    }\r\n\r\n    return newPasscode;\r\n  }\r\n\r\n  async save() {\r\n    const content = JSON.stringify(this.#data, null, 2);\r\n\r\n    this.#configFile.setContent(content);\r\n\r\n    this.#configFile.saveContent();\r\n  }\r\n}\r\n", "/**\r\n * CommandContextFactory - Creates fully-hydrated ICommandContext from CLI options\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * This factory is the central point for:\r\n * 1. Parsing Commander.js options into typed structures\r\n * 2. Detecting and loading projects (moved from loadProjects() in index.ts)\r\n * 3. Setting up storage abstractions\r\n * 4. Creating worker pools\r\n * 5. Configuring logging\r\n *\r\n * ENTRY POINT:\r\n * CommandContextFactory.create() is called from index.ts after Commander.js\r\n * parses the command line. It returns a fully-hydrated ICommandContext that\r\n * commands use to access projects, storage, logging, and worker pools.\r\n *\r\n * KEY METHODS:\r\n * - create(): Main entry point, orchestrates all setup\r\n * - loadProjects(): Detects and loads projects from input path\r\n * - parseThreads(): Converts thread option to number\r\n * - parseOutputType(): Converts output type string to enum\r\n * - resolveSuite(): Converts suite string to ProjectInfoSuite enum\r\n *\r\n * PROJECT DETECTION LOGIC:\r\n * The project detection supports several modes:\r\n *\r\n * 1. Single File Mode (-f, --file):\r\n *    - Input is a single file (e.g., .mcaddon, .mcpack, .zip)\r\n *    - Creates one project from that file\r\n *\r\n * 2. Multi-Level Multi-Project:\r\n *    - Root folder contains subfolders\r\n *    - Each subfolder contains .zip/.mcaddon files + optional .data.json\r\n *    - Each zip becomes a separate project\r\n *\r\n * 3. Children-of-Folder Multi-Project:\r\n *    - Root folder contains zip files directly OR subfolders that are projects\r\n *    - Subfolders with manifest.json, behavior_packs/, etc. are detected\r\n *\r\n * 4. Single Project (fallback):\r\n *    - Treat the entire input folder as one project\r\n *\r\n * STORAGE SETUP:\r\n * - inputStorage: NodeStorage pointing to input folder (read-only for non-edit commands)\r\n * - outputStorage: NodeStorage pointing to output folder (or same as input)\r\n * - Additional storage for Minecraft paths, deployment, etc.\r\n *\r\n * WORKER POOL:\r\n * - Created via createWorkerPool() from WorkerPool.ts\r\n * - Supports parallel execution with configurable thread count\r\n * - Falls back to single-threaded mode when threads=1\r\n *\r\n * LOGGING:\r\n * - Created via createLogger() from Logger.ts\r\n * - Supports verbose, quiet, and debug modes\r\n * - ConsoleLogger for normal output, SilentLogger for testing\r\n *\r\n * KEY FILES:\r\n * - ICommandContext.ts: Interface definitions\r\n * - WorkerPool.ts: Parallel execution\r\n * - Logger.ts: Logging implementation\r\n * - ClUtils.ts: Legacy utilities (being migrated)\r\n */\r\n\r\nimport path from \"path\";\r\nimport fs from \"fs\";\r\nimport Project, { ProjectAutoDeploymentMode } from \"../../app/Project\";\r\nimport CreatorTools from \"../../app/CreatorTools\";\r\nimport LocalEnvironment from \"../../local/LocalEnvironment\";\r\nimport NodeStorage from \"../../local/NodeStorage\";\r\nimport IFolder from \"../../storage/IFolder\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport MinecraftUtilities from \"../../minecraft/MinecraftUtilities\";\r\nimport IProjectStartInfo from \"../IProjectStartInfo\";\r\nimport ClUtils, { OutputType, TaskType } from \"../ClUtils\";\r\nimport {\r\n  ICommandContext,\r\n  ILogger,\r\n  IServerOptions,\r\n  IWorldOptions,\r\n  IValidationOptions,\r\n  ErrorCodes,\r\n} from \"./ICommandContext\";\r\nimport { createWorkerPool } from \"./WorkerPool\";\r\nimport { createLogger } from \"./Logger\";\r\nimport Log from \"../../core/Log\";\r\n\r\n/**\r\n * Raw options as parsed by Commander.js.\r\n * This interface captures all the global options.\r\n */\r\nexport interface IRawOptions {\r\n  // Input/Output\r\n  inputFolder?: string;\r\n  outputFolder?: string;\r\n  outputFile?: string;\r\n  inputFile?: string;\r\n  additionalFiles?: string;\r\n  basePath?: string;\r\n\r\n  // Execution\r\n  threads?: string;\r\n  single?: boolean;\r\n  force?: boolean;\r\n  debug?: boolean;\r\n\r\n  // Output control\r\n  verbose?: boolean;\r\n  quiet?: boolean;\r\n  json?: boolean;\r\n  yes?: boolean;\r\n  dryRun?: boolean;\r\n\r\n  // Output\r\n  outputType?: string;\r\n\r\n  // Server\r\n  port?: string;\r\n  httpsPort?: string;\r\n  slot?: string;\r\n  adminpc?: string;\r\n  updatepc?: string;\r\n  displaypc?: string;\r\n  fullpc?: string;\r\n  title?: string;\r\n  domain?: string;\r\n  motd?: string;\r\n  runOnce?: boolean;\r\n  timeout?: string;\r\n  forceInk?: boolean;\r\n  mcpRequireAuth?: boolean;\r\n  logFile?: string;\r\n  features?: string;\r\n\r\n  // SSL (experimental)\r\n  experimentalSslCert?: string;\r\n  experimentalSslKey?: string;\r\n  experimentalSslPfx?: string;\r\n  experimentalSslPfxPassphrase?: string;\r\n  experimentalSslCa?: string;\r\n  experimentalSslPort?: string;\r\n  experimentalSslOnly?: boolean;\r\n\r\n  // World\r\n  betaApis?: boolean;\r\n  editor?: boolean;\r\n  difficulty?: string;\r\n  gameMode?: string;\r\n  worldName?: string;\r\n  seed?: string;\r\n  ensureWorld?: boolean;\r\n  testWorld?: boolean;\r\n  launch?: boolean;\r\n\r\n  // Validation\r\n  suite?: string;\r\n  exclusions?: string;\r\n  aggregateReports?: string;\r\n  warnOnly?: boolean;\r\n\r\n  // Filtering\r\n  projectStartsWith?: string;\r\n\r\n  // Misc\r\n  isolated?: boolean;\r\n\r\n  // Documentation\r\n  referenceFolder?: string;\r\n\r\n  /** Raw command-specific options forwarded from Commander (escape hatch for per-command flags). */\r\n  commandOptions?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Command-specific arguments parsed from Commander.js.\r\n */\r\nexport interface ICommandArgs {\r\n  subCommand?: string;\r\n  propertyValue?: string;\r\n  searchTerm?: string;\r\n  mode?: string;\r\n  type?: string;\r\n  newName?: string;\r\n  description?: string;\r\n}\r\n\r\n/**\r\n * Factory for creating ICommandContext instances.\r\n */\r\nexport class CommandContextFactory {\r\n  /** Folder names that indicate a Minecraft project root. */\r\n  static readonly PROJECT_INDICATOR_FOLDERS = [\r\n    \"behavior_packs\",\r\n    \"behavior_pack\",\r\n    \"development_behavior_packs\",\r\n    \"resource_packs\",\r\n    \"resource_pack\",\r\n    \"development_resource_packs\",\r\n  ];\r\n\r\n  /** Maximum number of parent levels to walk when auto-discovering a project root. */\r\n  static readonly MAX_DISCOVERY_LEVELS = 8;\r\n\r\n  /**\r\n   * Walk up from `startDir` to find the nearest Minecraft project root.\r\n   *\r\n   * A folder qualifies as a project root if it contains:\r\n   * - A `package.json` file, OR\r\n   * - A child folder matching one of the Minecraft pack folder conventions\r\n   *   (behavior_packs, resource_packs, etc.)\r\n   *\r\n   * The search stops when:\r\n   * - A qualifying folder is found (returned immediately)\r\n   * - MAX_DISCOVERY_LEVELS parent directories have been checked\r\n   * - The folder is at a \"second-order root\" \u2014 its parent is a filesystem\r\n   *   root (e.g. `C:\\projects` on Windows, `/home` on Unix), to avoid\r\n   *   scanning broad top-level directories\r\n   * - The filesystem root is reached\r\n   *\r\n   * If no qualifying folder is found, `startDir` is returned unchanged\r\n   * (preserving the current cwd-fallback behavior).\r\n   */\r\n  static resolveProjectRoot(startDir: string, log?: ILogger): string {\r\n    let current = path.resolve(startDir);\r\n\r\n    for (let level = 0; level <= CommandContextFactory.MAX_DISCOVERY_LEVELS; level++) {\r\n      // Second-order root boundary: stop if the parent of `current` is a\r\n      // filesystem root.  This prevents considering folders like C:\\projects\\\r\n      // or /home/ which are too broad to be a project root.\r\n      const parent = path.dirname(current);\r\n\r\n      if (level > 0 && parent === path.dirname(parent)) {\r\n        // `parent` is a filesystem root (e.g. C:\\ or /), so `current` is a\r\n        // top-level directory \u2014 too high to be a project.\r\n        break;\r\n      }\r\n\r\n      if (CommandContextFactory.isProjectRoot(current)) {\r\n        if (level > 0) {\r\n          log?.verbose(`Auto-discovered project root: ${current}`);\r\n        }\r\n        return current;\r\n      }\r\n\r\n      // Move to parent directory\r\n      if (parent === current) {\r\n        // Reached filesystem root\r\n        break;\r\n      }\r\n\r\n      current = parent;\r\n    }\r\n\r\n    return startDir;\r\n  }\r\n\r\n  /**\r\n   * Check whether a directory looks like a Minecraft project root.\r\n   *\r\n   * Returns true if the directory contains a `package.json` file or any\r\n   * of the standard Minecraft pack folder names.\r\n   */\r\n  static isProjectRoot(dir: string): boolean {\r\n    try {\r\n      if (fs.existsSync(path.join(dir, \"package.json\"))) {\r\n        return true;\r\n      }\r\n\r\n      for (const folderName of CommandContextFactory.PROJECT_INDICATOR_FOLDERS) {\r\n        const candidate = path.join(dir, folderName);\r\n\r\n        try {\r\n          if (fs.statSync(candidate).isDirectory()) {\r\n            return true;\r\n          }\r\n        } catch {\r\n          // Folder doesn't exist \u2014 continue\r\n        }\r\n      }\r\n    } catch (err) {\r\n      // Permission error or similar \u2014 can't read this directory\r\n      Log.debug(`isProjectRoot: could not inspect '${dir}': ${err}`);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Create a fully-hydrated command context.\r\n   *\r\n   * @param creatorTools Initialized CreatorTools instance\r\n   * @param localEnv Initialized LocalEnvironment\r\n   * @param taskType The command being executed\r\n   * @param options Raw options from Commander.js\r\n   * @param args Command-specific arguments\r\n   */\r\n  static async create(\r\n    creatorTools: CreatorTools,\r\n    localEnv: LocalEnvironment,\r\n    taskType: TaskType,\r\n    options: IRawOptions,\r\n    args: ICommandArgs = {}\r\n  ): Promise<ICommandContext> {\r\n    // Parse numeric and boolean options\r\n    const threads = CommandContextFactory.parseThreads(options.threads);\r\n    const force = options.force ?? false;\r\n    const isolated = options.isolated ?? false;\r\n    const debug = options.debug ?? false;\r\n    const verbose = options.verbose ?? false;\r\n    const quiet = options.quiet ?? false;\r\n    const json = options.json ?? false;\r\n    // Implicit --yes: when --json is set, the caller is non-interactive (CI / MCP).\r\n    // Treat it as if --yes was also supplied so commands skip prompts and use defaults.\r\n    const yes = options.yes ?? json;\r\n    const dryRun = options.dryRun ?? false;\r\n\r\n    // Parse output type - if --json flag is set, use json output type\r\n    const outputType = json ? OutputType.json : CommandContextFactory.parseOutputType(options.outputType);\r\n\r\n    // Create logger (quiet mode suppresses non-essential output, json mode routes non-data to stderr)\r\n    const log = createLogger(verbose, quiet, debug, false, json);\r\n\r\n    // Resolve input/output folders to absolute paths\r\n    // When -i is not specified, auto-discover the nearest project root by\r\n    // walking up from cwd (checks for package.json or *_packs folders).\r\n    let inputFolderAutoDiscovered = false;\r\n    let rawInputFolder: string;\r\n\r\n    if (options.inputFolder) {\r\n      rawInputFolder = options.inputFolder;\r\n    } else {\r\n      const cwd = process.cwd();\r\n      const discovered = CommandContextFactory.resolveProjectRoot(cwd, log);\r\n      rawInputFolder = discovered;\r\n      inputFolderAutoDiscovered = discovered !== cwd;\r\n    }\r\n\r\n    const inputFolder = path.isAbsolute(rawInputFolder) ? rawInputFolder : path.resolve(process.cwd(), rawInputFolder);\r\n\r\n    const rawOutputFolder = options.outputFolder || rawInputFolder;\r\n    const outputFolder = path.isAbsolute(rawOutputFolder)\r\n      ? rawOutputFolder\r\n      : path.resolve(process.cwd(), rawOutputFolder);\r\n\r\n    // Create storage instances\r\n    const inputStorage = new NodeStorage(inputFolder, \"\");\r\n    inputStorage.readOnly = !ClUtils.getIsEditInPlaceCommand(taskType);\r\n\r\n    const outputStorage = new NodeStorage(outputFolder, \"\");\r\n\r\n    // Get work folders\r\n    const inputWorkFolder = await CommandContextFactory.getWorkFolder(\r\n      inputStorage.rootFolder,\r\n      taskType,\r\n      options.inputFolder,\r\n      options.outputFolder,\r\n      false // isOutputFolder\r\n    );\r\n\r\n    // For commands with a separate output folder, ensure the output folder exists\r\n    // This applies to validate, write commands, and any command with explicit -o flag\r\n    const shouldCreateOutputFolder = outputFolder !== inputFolder && options.outputFolder !== undefined;\r\n\r\n    const outputWorkFolder =\r\n      outputFolder === inputFolder\r\n        ? inputWorkFolder\r\n        : await CommandContextFactory.getWorkFolder(\r\n            outputStorage.rootFolder,\r\n            taskType,\r\n            options.inputFolder,\r\n            options.outputFolder,\r\n            shouldCreateOutputFolder // isOutputFolder - will create if needed\r\n          );\r\n\r\n    // Detect and load projects\r\n    // For isEditInPlace commands (like 'add') where only -o is specified (no -i),\r\n    // we should detect/create projects in the output folder, not the current directory\r\n    const isEditInPlace = ClUtils.getIsEditInPlaceCommand(taskType);\r\n    const onlyOutputSpecified = !options.inputFolder && options.outputFolder !== undefined;\r\n    const projectDetectionFolder = isEditInPlace && onlyOutputSpecified ? outputWorkFolder : inputWorkFolder;\r\n\r\n    const projectStarts = await CommandContextFactory.detectProjects(\r\n      creatorTools,\r\n      taskType,\r\n      options,\r\n      projectDetectionFolder,\r\n      log\r\n    );\r\n\r\n    if (projectStarts.length === 0) {\r\n      Log.debug(\"No Minecraft projects detected in \" + projectDetectionFolder.fullPath);\r\n    }\r\n\r\n    // Hydrate projects\r\n    const projects = CommandContextFactory.hydrateProjects(creatorTools, projectStarts);\r\n\r\n    // Create worker pool\r\n    // Note: For now we create a placeholder pool. Commands will use the pool\r\n    // which internally creates workers with the TaskWorker.js script.\r\n    const workerPool = createWorkerPool(threads);\r\n\r\n    // Parse server options\r\n    const server = CommandContextFactory.parseServerOptions(options);\r\n\r\n    // Parse world options\r\n    const world = CommandContextFactory.parseWorldOptions(options);\r\n\r\n    // Parse validation options\r\n    const validation = CommandContextFactory.parseValidationOptions(options);\r\n\r\n    // Build the context\r\n    let exitCode = 0;\r\n\r\n    const context: ICommandContext = {\r\n      // Core\r\n      creatorTools,\r\n      localEnv,\r\n      workerPool,\r\n      log,\r\n\r\n      // Projects\r\n      projects,\r\n      projectCount: projects.length,\r\n      isSingleProject: projects.length === 1,\r\n\r\n      // Input/Output\r\n      inputFolder,\r\n      inputFolderSpecified: options.inputFolder !== undefined,\r\n      inputFolderAutoDiscovered,\r\n      outputFolder,\r\n      outputFile: options.outputFile,\r\n      inputStorage,\r\n      outputStorage,\r\n      inputWorkFolder,\r\n      outputWorkFolder,\r\n\r\n      // Global options\r\n      threads,\r\n      force,\r\n      isolated,\r\n      debug,\r\n      verbose,\r\n      quiet,\r\n      json,\r\n      yes,\r\n      dryRun,\r\n      outputType,\r\n      taskType,\r\n\r\n      // Command args\r\n      subCommand: args.subCommand,\r\n      propertyValue: args.propertyValue,\r\n      searchTerm: args.searchTerm,\r\n      mode: args.mode,\r\n      type: args.type,\r\n      newName: args.newName,\r\n      description: args.description,\r\n      projectStartsWith: options.projectStartsWith,\r\n      referenceFolder: options.referenceFolder,\r\n      commandOptions: options.commandOptions || {},\r\n\r\n      // Grouped options\r\n      server,\r\n      world,\r\n      validation,\r\n\r\n      // Exit state\r\n      exitCode,\r\n      setExitCode(code: number): void {\r\n        if (code > exitCode) {\r\n          exitCode = code;\r\n          context.exitCode = code;\r\n        }\r\n      },\r\n\r\n      // Utility method\r\n      async forEachProject(fn: (project: Project, index: number) => Promise<void>, label?: string): Promise<void> {\r\n        for (let i = 0; i < projects.length; i++) {\r\n          const project = projects[i];\r\n          try {\r\n            if (projects.length > 1) {\r\n              log.info(`${label || \"Processing\"} project ${i + 1}/${projects.length}: ${project.name}`);\r\n            }\r\n            await fn(project, i);\r\n          } catch (error: unknown) {\r\n            const message = error instanceof Error ? error.message : String(error);\r\n            log.error(`Error with project ${project.name}: ${message}`);\r\n            context.setExitCode(ErrorCodes.INIT_ERROR);\r\n          }\r\n        }\r\n      },\r\n    };\r\n\r\n    return context;\r\n  }\r\n\r\n  /**\r\n   * Parse threads option.\r\n   */\r\n  private static parseThreads(threadsStr?: string): number {\r\n    if (!threadsStr) {\r\n      return 1;\r\n    }\r\n    const parsed = parseInt(threadsStr, 10);\r\n    if (isNaN(parsed) || parsed < 1) {\r\n      return 1;\r\n    }\r\n    return Math.min(parsed, 8); // Cap at 8 threads\r\n  }\r\n\r\n  /**\r\n   * Parse output type option.\r\n   */\r\n  private static parseOutputType(outputTypeStr?: string): OutputType {\r\n    if (outputTypeStr === \"noreports\") {\r\n      return OutputType.noReports;\r\n    }\r\n    return OutputType.normal;\r\n  }\r\n\r\n  /**\r\n   * Get work folder, creating if needed for write commands.\r\n   */\r\n  private static async getWorkFolder(\r\n    folder: IFolder,\r\n    taskType: TaskType,\r\n    inputFolder?: string,\r\n    outputFolder?: string,\r\n    shouldCreateIfMissing: boolean = false\r\n  ): Promise<IFolder> {\r\n    // Create folder if:\r\n    // 1. shouldCreateIfMissing flag is set (for output folders of write commands)\r\n    // 2. OR legacy behavior: no inputFolder but outputFolder exists and it's a write command\r\n    if (shouldCreateIfMissing || (!inputFolder && outputFolder && ClUtils.getIsWriteCommand(taskType))) {\r\n      await folder.ensureExists();\r\n    }\r\n\r\n    const exists = await folder.exists();\r\n    if (!exists) {\r\n      throw new Error(`Folder does not exist: ${folder.fullPath}`);\r\n    }\r\n\r\n    await folder.load();\r\n    return folder;\r\n  }\r\n\r\n  /**\r\n   * Detect projects in the input folder/file.\r\n   *\r\n   * This is the core project detection logic migrated from loadProjects() in index.ts.\r\n   */\r\n  private static async detectProjects(\r\n    creatorTools: CreatorTools,\r\n    taskType: TaskType,\r\n    options: IRawOptions,\r\n    workFolder: IFolder,\r\n    log: ILogger\r\n  ): Promise<IProjectStartInfo[]> {\r\n    const projectStarts: IProjectStartInfo[] = [];\r\n    const psw = options.projectStartsWith?.toLowerCase();\r\n    const additionalFiles = CommandContextFactory.parseAdditionalFiles(options.additionalFiles);\r\n\r\n    // -------------------------------------------------------------------------\r\n    // Single file mode\r\n    // -------------------------------------------------------------------------\r\n    if (options.inputFile) {\r\n      if (options.inputFolder) {\r\n        throw new Error(\"Cannot specify both an input file and an input folder.\");\r\n      }\r\n\r\n      const inputFolderPath = StorageUtilities.getFolderPath(options.inputFile);\r\n      const inputFileName = StorageUtilities.getLeafName(options.inputFile);\r\n\r\n      if (!inputFileName || inputFileName.length < 2 || !inputFolderPath || inputFolderPath.length < 2) {\r\n        throw new Error(`Could not process file with path: '${options.inputFile}'`);\r\n      }\r\n\r\n      if (!creatorTools.ensureLocalFolder) {\r\n        throw new Error(\"CreatorTools.ensureLocalFolder is not configured\");\r\n      }\r\n\r\n      const containingFolder = creatorTools.ensureLocalFolder(inputFolderPath);\r\n      containingFolder.storage.readOnly = true;\r\n\r\n      const file = containingFolder.ensureFile(inputFileName);\r\n      const fileExists = await file.exists();\r\n\r\n      if (!fileExists) {\r\n        throw new Error(`Could not find file with path: '${options.inputFile}'`);\r\n      }\r\n\r\n      projectStarts.push({\r\n        ctorProjectName: inputFileName,\r\n        localFilePath: options.inputFile,\r\n        accessoryFiles: additionalFiles,\r\n      });\r\n\r\n      return projectStarts;\r\n    }\r\n\r\n    // -------------------------------------------------------------------------\r\n    // Folder-based detection\r\n    // -------------------------------------------------------------------------\r\n    const name = StorageUtilities.getLeafName(workFolder.fullPath);\r\n\r\n    // Check for --single flag\r\n    if (options.single) {\r\n      projectStarts.push({\r\n        ctorProjectName: name,\r\n        localFolderPath: workFolder.fullPath,\r\n        accessoryFiles: additionalFiles,\r\n      });\r\n      return projectStarts;\r\n    }\r\n\r\n    // Try multi-level multi-project detection\r\n    const multiLevelProjects = await CommandContextFactory.detectMultiLevelProjects(\r\n      workFolder,\r\n      additionalFiles,\r\n      psw,\r\n      log\r\n    );\r\n\r\n    if (multiLevelProjects.length > 0) {\r\n      return multiLevelProjects;\r\n    }\r\n\r\n    // Try children-of-folder multi-project detection\r\n    const childrenProjects = await CommandContextFactory.detectChildrenProjects(workFolder, additionalFiles, psw, log);\r\n\r\n    if (childrenProjects.length > 0) {\r\n      return childrenProjects;\r\n    }\r\n\r\n    // Fallback: treat as single project\r\n    projectStarts.push({\r\n      ctorProjectName: name,\r\n      localFolderPath: workFolder.fullPath,\r\n      accessoryFiles: additionalFiles,\r\n    });\r\n\r\n    return projectStarts;\r\n  }\r\n\r\n  /**\r\n   * Detect multi-level multi-project layout.\r\n   *\r\n   * Structure:\r\n   * root/\r\n   *   subfolder1/\r\n   *     project1.zip\r\n   *     project1.data.json\r\n   *   subfolder2/\r\n   *     project2.mcaddon\r\n   */\r\n  private static async detectMultiLevelProjects(\r\n    workFolder: IFolder,\r\n    additionalFiles: string[],\r\n    psw?: string,\r\n    log?: ILogger\r\n  ): Promise<IProjectStartInfo[]> {\r\n    const projectStarts: IProjectStartInfo[] = [];\r\n\r\n    // Root folder must have no non-storage files\r\n    if (workFolder.fileCount > 0) {\r\n      for (const subFileName in workFolder.files) {\r\n        const file = workFolder.files[subFileName];\r\n        if (file && !StorageUtilities.isFileStorageItem(file) && !file.fullPath.endsWith(\".mci.json.zip\")) {\r\n          return []; // Not multi-level\r\n        }\r\n      }\r\n    }\r\n\r\n    let storageItemCount = 0;\r\n\r\n    // Check subfolders for storage items\r\n    for (const subFolderName in workFolder.folders) {\r\n      const subFolder = workFolder.folders[subFolderName];\r\n      if (!subFolder) continue;\r\n\r\n      await subFolder.load();\r\n\r\n      for (const subFileName in subFolder.files) {\r\n        const subFile = subFolder.files[subFileName];\r\n        if (!subFile) continue;\r\n\r\n        if (StorageUtilities.isFileStorageItem(subFile) && !subFile.fullPath.endsWith(\".mci.json.zip\")) {\r\n          storageItemCount++;\r\n        }\r\n\r\n        const typeFromName = StorageUtilities.getTypeFromName(subFileName);\r\n        if (\r\n          !StorageUtilities.isFileStorageItem(subFile) &&\r\n          !subFile.fullPath.endsWith(\".mci.json.zip\") &&\r\n          typeFromName !== \"json\" &&\r\n          typeFromName !== \"csv\" &&\r\n          typeFromName !== \"\" &&\r\n          typeFromName !== \"html\"\r\n        ) {\r\n          return []; // Not multi-level\r\n        }\r\n      }\r\n    }\r\n\r\n    if (storageItemCount < 2) {\r\n      return [];\r\n    }\r\n\r\n    log?.verbose(`Working across subfolders with projects at '${workFolder.fullPath}'`);\r\n\r\n    // Collect projects from subfolders\r\n    for (const subFolderName in workFolder.folders) {\r\n      const subFolder = workFolder.folders[subFolderName];\r\n      if (!subFolder || subFolder.errorStatus) continue;\r\n\r\n      await subFolder.load();\r\n\r\n      for (const fileName in subFolder.files) {\r\n        const file = subFolder.files[fileName];\r\n        if (!file || !StorageUtilities.isFileStorageItem(file) || file.fullPath.endsWith(\".mci.json.zip\")) {\r\n          continue;\r\n        }\r\n\r\n        const ps: IProjectStartInfo = {\r\n          ctorProjectName: file.name,\r\n          accessoryFiles: [...additionalFiles],\r\n        };\r\n\r\n        // Look for associated .data.json files\r\n        let baseName = StorageUtilities.getBaseFromName(file.name);\r\n        if (subFolder.files[baseName + \".data.json\"]) {\r\n          ps.accessoryFiles?.push(baseName + \".data.json\");\r\n        }\r\n\r\n        const lastDash = baseName.lastIndexOf(\"-\");\r\n        if (lastDash > 0) {\r\n          baseName = baseName.substring(0, lastDash);\r\n          if (subFolder.files[baseName + \".data.json\"]) {\r\n            ps.accessoryFiles?.push(baseName + \".data.json\");\r\n          }\r\n        }\r\n\r\n        ps.localFilePath = file.fullPath;\r\n\r\n        if (!psw || baseName.toLowerCase().startsWith(psw)) {\r\n          projectStarts.push(ps);\r\n        }\r\n      }\r\n    }\r\n\r\n    return projectStarts;\r\n  }\r\n\r\n  /**\r\n   * Detect children-of-folder multi-project layout.\r\n   *\r\n   * Structure:\r\n   * root/\r\n   *   project1.mcaddon\r\n   *   project2.zip\r\n   *   project3/\r\n   *     manifest.json\r\n   *     ...\r\n   */\r\n  private static async detectChildrenProjects(\r\n    workFolder: IFolder,\r\n    additionalFiles: string[],\r\n    psw?: string,\r\n    log?: ILogger\r\n  ): Promise<IProjectStartInfo[]> {\r\n    const projectStarts: IProjectStartInfo[] = [];\r\n    let isChildrenOfFolderMultiProject = true;\r\n    let foundASubProject = false;\r\n\r\n    // Check files in root\r\n    for (const fileName in workFolder.files) {\r\n      const file = workFolder.files[fileName];\r\n      if (!file) continue;\r\n\r\n      if (!StorageUtilities.isFileStorageItem(file)) {\r\n        isChildrenOfFolderMultiProject = false;\r\n        continue;\r\n      } else {\r\n        foundASubProject = true;\r\n      }\r\n    }\r\n\r\n    // Check folders for pack-like names\r\n    for (const folderName in workFolder.folders) {\r\n      if (\r\n        MinecraftUtilities.pathLooksLikePackName(folderName) ||\r\n        MinecraftUtilities.pathLooksLikePackContainerName(folderName)\r\n      ) {\r\n        isChildrenOfFolderMultiProject = false;\r\n        continue;\r\n      }\r\n    }\r\n\r\n    if (!isChildrenOfFolderMultiProject) {\r\n      return [];\r\n    }\r\n\r\n    // Check subfolders for project markers\r\n    for (const folderName in workFolder.folders) {\r\n      const folder = workFolder.folders[folderName];\r\n      if (!folder || folder.errorStatus) continue;\r\n\r\n      await folder.load(true);\r\n\r\n      if (\r\n        folder.files[\"manifest.json\"] ||\r\n        folder.files[\"pack_manifest.json\"] ||\r\n        folder.folders[\"content\"] ||\r\n        folder.folders[\"Content\"] ||\r\n        folder.folders[\"world_template\"] ||\r\n        folder.folders[\"behavior_packs\"]\r\n      ) {\r\n        foundASubProject = true;\r\n      }\r\n\r\n      if (StorageUtilities.isMinecraftInternalFolder(folder)) {\r\n        isChildrenOfFolderMultiProject = false;\r\n        continue;\r\n      }\r\n    }\r\n\r\n    // Must have found a sub-project AND not have internal folder markers\r\n    if (!foundASubProject || !isChildrenOfFolderMultiProject) {\r\n      return [];\r\n    }\r\n\r\n    log?.verbose(`Working across subfolders/packages at '${workFolder.fullPath}'`);\r\n\r\n    // Collect file-based projects\r\n    for (const fileName in workFolder.files) {\r\n      const file = workFolder.files[fileName];\r\n      if (!file || !StorageUtilities.isFileStorageItem(file) || file.fullPath.endsWith(\".mci.json.zip\")) {\r\n        continue;\r\n      }\r\n\r\n      if (!psw || file.name.toLowerCase().startsWith(psw)) {\r\n        projectStarts.push({\r\n          ctorProjectName: file.name,\r\n          localFilePath: file.fullPath,\r\n          accessoryFiles: [...additionalFiles],\r\n        });\r\n      }\r\n    }\r\n\r\n    // Collect folder-based projects\r\n    for (const folderName in workFolder.folders) {\r\n      const folder = workFolder.folders[folderName];\r\n      if (!folder || folder.errorStatus || folder.name === \"out\") continue;\r\n\r\n      await folder.load();\r\n\r\n      if (folder.folderCount > 0) {\r\n        if (!psw || folder.name.toLowerCase().startsWith(psw)) {\r\n          projectStarts.push({\r\n            ctorProjectName: folder.name,\r\n            localFolderPath: folder.fullPath,\r\n            accessoryFiles: [...additionalFiles],\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    return projectStarts;\r\n  }\r\n\r\n  /**\r\n   * Hydrate project start infos into full Project instances.\r\n   */\r\n  private static hydrateProjects(creatorTools: CreatorTools, projectStarts: IProjectStartInfo[]): Project[] {\r\n    return projectStarts.map((ps) => {\r\n      const project = new Project(creatorTools, ps.ctorProjectName, null);\r\n\r\n      if (ps.localFilePath) {\r\n        project.localFilePath = ps.localFilePath;\r\n      }\r\n\r\n      if (ps.localFolderPath) {\r\n        project.localFolderPath = ps.localFolderPath;\r\n      }\r\n\r\n      if (ps.accessoryFiles) {\r\n        project.accessoryFilePaths = ps.accessoryFiles;\r\n      }\r\n\r\n      project.autoDeploymentMode = ProjectAutoDeploymentMode.noAutoDeployment;\r\n\r\n      return project;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Parse additional files option.\r\n   */\r\n  private static parseAdditionalFiles(additionalFilesStr?: string): string[] {\r\n    if (!additionalFilesStr) {\r\n      return [];\r\n    }\r\n    return additionalFilesStr.split(\",\").map((p) => p.trim());\r\n  }\r\n\r\n  /**\r\n   * Parse a port string into a valid port number, falling back to a default.\r\n   */\r\n  static parsePort(portStr: string | undefined, defaultPort: number): number {\r\n    const portNum = parseInt(portStr || String(defaultPort), 10);\r\n    if (isNaN(portNum) || portNum < 1 || portNum > 65535) {\r\n      Log.debug(\"Invalid port number: \" + portStr + \", using default \" + defaultPort);\r\n      return defaultPort;\r\n    }\r\n    return portNum;\r\n  }\r\n\r\n  /**\r\n   * Parse server-related options.\r\n   */\r\n  private static parseServerOptions(options: IRawOptions): IServerOptions {\r\n    return {\r\n      port: CommandContextFactory.parsePort(options.port, 6126),\r\n      httpsPort: options.httpsPort ? CommandContextFactory.parsePort(options.httpsPort, 443) : undefined,\r\n      slot: options.slot ? Math.max(0, parseInt(options.slot, 10) || 0) : undefined,\r\n      displayReadOnlyPasscode: options.displaypc,\r\n      fullReadOnlyPasscode: options.fullpc,\r\n      updateStatePasscode: options.updatepc,\r\n      adminPasscode: options.adminpc,\r\n      title: options.title,\r\n      domainName: options.domain ? options.domain.trim().substring(0, 253) : undefined,\r\n      messageOfTheDay: options.motd ? options.motd.substring(0, 256) : undefined,\r\n      runOnce: options.runOnce ?? false,\r\n      timeout: options.timeout ? parseInt(options.timeout, 10) : undefined,\r\n      forceInk: options.forceInk ?? false,\r\n      mcpRequireAuth: options.mcpRequireAuth ?? false,\r\n      logFile: options.logFile,\r\n      features: options.features,\r\n      ssl:\r\n        options.experimentalSslCert || options.experimentalSslPfx\r\n          ? {\r\n              certPath: options.experimentalSslCert,\r\n              keyPath: options.experimentalSslKey,\r\n              pfxPath: options.experimentalSslPfx,\r\n              pfxPassphrase: options.experimentalSslPfxPassphrase,\r\n              caPath: options.experimentalSslCa,\r\n              port: CommandContextFactory.parsePort(options.experimentalSslPort, 443),\r\n              httpsOnly: options.experimentalSslOnly ?? false,\r\n            }\r\n          : undefined,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Parse world-related options.\r\n   */\r\n  private static parseWorldOptions(options: IRawOptions): IWorldOptions {\r\n    return {\r\n      betaApis: options.betaApis ?? false,\r\n      editor: options.editor ?? false,\r\n      difficulty: options.difficulty,\r\n      gameMode: options.gameMode,\r\n      name: options.worldName,\r\n      seed: options.seed,\r\n      ensureWorld: options.ensureWorld ?? false,\r\n      testWorld: options.testWorld ?? false,\r\n      launch: options.launch ?? false,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Parse validation-specific options.\r\n   */\r\n  private static parseValidationOptions(options: IRawOptions): IValidationOptions {\r\n    // Pass suite as string - TaskWorker will convert to ProjectInfoSuite\r\n    const validSuites = [\"all\", \"default\", \"addon\", \"currentplatform\", \"main\"];\r\n    const rawSuite = options.suite || \"main\";\r\n    if (rawSuite && !validSuites.includes(rawSuite)) {\r\n      Log.message(\r\n        \"Unknown validation suite '\" + rawSuite + \"'. Valid suites: \" + validSuites.join(\", \") + \". Using 'main'.\"\r\n      );\r\n    }\r\n\r\n    // Handle shell comma-splitting: PowerShell treats \"A,B\" as two separate args,\r\n    // so \"PATHLENGTH,PACKSIZE\" becomes exclusions=\"PATHLENGTH\", aggregateReports=\"PACKSIZE\".\r\n    // Detect non-aggregate values in aggregateReports and merge them back into exclusions.\r\n    const validAggregateValues = [\"aggregatenoindex\", \"aggregate\", \"true\", \"false\", \"1\", \"0\"];\r\n    let exclusions = options.exclusions;\r\n    let rawAggregate = options.aggregateReports;\r\n\r\n    if (rawAggregate && !validAggregateValues.includes(rawAggregate)) {\r\n      exclusions = exclusions ? exclusions + \",\" + rawAggregate : rawAggregate;\r\n      rawAggregate = undefined;\r\n    }\r\n\r\n    const isAggregate =\r\n      rawAggregate === \"aggregate\" ||\r\n      rawAggregate === \"aggregatenoindex\" ||\r\n      rawAggregate === \"true\" ||\r\n      rawAggregate === \"1\";\r\n\r\n    return {\r\n      suite: validSuites.includes(rawSuite) ? rawSuite : \"main\",\r\n      exclusionList: exclusions,\r\n      outputMci: false,\r\n      aggregateReports: isAggregate,\r\n      warnOnly: options.warnOnly ?? false,\r\n    };\r\n  }\r\n}\r\n", "/**\r\n * ICommandContext - Core interface for CLI command execution context\r\n *\r\n * This interface provides a centralized, fully-hydrated context that commands\r\n * receive when executed. Commands should NOT parse arguments or detect projects\r\n * themselves - all that logic is handled by CommandContextFactory before commands run.\r\n *\r\n * Key Design Principles:\r\n * - Commands receive hydrated Project[] array, never raw paths\r\n * - All global options are parsed and typed\r\n * - Worker pool abstraction for parallelization\r\n * - Unified logging interface\r\n * - Storage abstractions for input/output\r\n *\r\n * @see CommandContextFactory.ts for context creation\r\n * @see ICommand.ts for command interface\r\n */\r\n\r\nimport Project from \"../../app/Project\";\r\nimport CreatorTools from \"../../app/CreatorTools\";\r\nimport LocalEnvironment from \"../../local/LocalEnvironment\";\r\nimport IStorage from \"../../storage/IStorage\";\r\nimport IFolder from \"../../storage/IFolder\";\r\nimport { OutputType, TaskType } from \"../ClUtils\";\r\n\r\n// ============================================================================\r\n// LOGGING INTERFACE\r\n// ============================================================================\r\n\r\n/**\r\n * ILogger provides a unified logging interface for commands.\r\n * Implementations can route to console, file, or structured outputs.\r\n */\r\nexport interface ILogger {\r\n  /** Standard informational message */\r\n  info(message: string): void;\r\n\r\n  /** Warning message - something may be wrong but execution continues */\r\n  warn(message: string): void;\r\n\r\n  /** Error message - something went wrong */\r\n  error(message: string): void;\r\n\r\n  /** Debug/verbose message - only shown if verbose mode is enabled */\r\n  verbose(message: string): void;\r\n\r\n  /** Debug message - only shown if debug mode is enabled */\r\n  debug(message: string): void;\r\n\r\n  /** Success message - indicates a positive outcome */\r\n  success(message: string): void;\r\n\r\n  /** Machine-readable data output (e.g., JSON). Always writes to stdout, even in quiet mode. */\r\n  data(message: string): void;\r\n\r\n  /** Progress update for long-running operations */\r\n  progress(current: number, total: number, message?: string): void;\r\n}\r\n\r\n// ============================================================================\r\n// WORKER POOL INTERFACE\r\n// ============================================================================\r\n\r\n/**\r\n * IWorkerTask represents a unit of work to be executed by a worker.\r\n * The task includes all data needed for execution in an isolated context.\r\n */\r\nexport interface IWorkerTask<TArgs = unknown, TResult = unknown> {\r\n  /** Task type identifier */\r\n  taskType: TaskType;\r\n\r\n  /** Task-specific arguments */\r\n  args: TArgs;\r\n\r\n  /** Expected result type (for type inference) */\r\n  _resultType?: TResult;\r\n}\r\n\r\n/**\r\n * IWorkerResult wraps the result of a worker task execution.\r\n */\r\nexport interface IWorkerResult<TResult = unknown> {\r\n  /** Whether the task succeeded */\r\n  success: boolean;\r\n\r\n  /** The result if successful */\r\n  result?: TResult;\r\n\r\n  /** Error message if failed */\r\n  error?: string;\r\n\r\n  /** Error stack if failed */\r\n  stack?: string;\r\n}\r\n\r\n/**\r\n * IWorkerPool provides an abstraction over parallel task execution.\r\n * Implementations may use Node.js worker threads, process pools, or\r\n * single-threaded sequential execution.\r\n */\r\nexport interface IWorkerPool {\r\n  /** Maximum concurrent workers */\r\n  readonly concurrency: number;\r\n\r\n  /**\r\n   * Execute a batch of tasks in parallel (up to concurrency limit).\r\n   * @param tasks Array of tasks to execute\r\n   * @param onProgress Optional callback for progress updates\r\n   * @returns Array of results in same order as input tasks\r\n   */\r\n  executeBatch<TArgs, TResult>(\r\n    tasks: IWorkerTask<TArgs, TResult>[],\r\n    onProgress?: (completed: number, total: number) => void\r\n  ): Promise<IWorkerResult<TResult>[]>;\r\n\r\n  /**\r\n   * Execute a single task.\r\n   * @param task The task to execute\r\n   * @returns The task result\r\n   */\r\n  execute<TArgs, TResult>(task: IWorkerTask<TArgs, TResult>): Promise<IWorkerResult<TResult>>;\r\n\r\n  /**\r\n   * Shutdown the worker pool, terminating all workers.\r\n   */\r\n  shutdown(): Promise<void>;\r\n}\r\n\r\n// ============================================================================\r\n// SERVER OPTIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Server-related options for serve/mcp/dedicatedserver commands.\r\n */\r\nexport interface IServerOptions {\r\n  /** HTTP port for the server */\r\n  port: number;\r\n\r\n  /** HTTPS port if SSL is enabled */\r\n  httpsPort?: number;\r\n\r\n  /** Server slot identifier */\r\n  slot?: number;\r\n\r\n  /** Server path for dedicated server */\r\n  serverPath?: string;\r\n\r\n  /** Server features mode (all, allwebservices, basicwebservices, dedicatedserver) */\r\n  features?: string;\r\n\r\n  /** Display-only passcode */\r\n  displayReadOnlyPasscode?: string;\r\n\r\n  /** Full read-only passcode */\r\n  fullReadOnlyPasscode?: string;\r\n\r\n  /** Update state passcode */\r\n  updateStatePasscode?: string;\r\n\r\n  /** Admin passcode */\r\n  adminPasscode?: string;\r\n\r\n  /** Server title */\r\n  title?: string;\r\n\r\n  /** Server domain name */\r\n  domainName?: string;\r\n\r\n  /** Message of the day */\r\n  messageOfTheDay?: string;\r\n\r\n  /** Run server once and exit */\r\n  runOnce: boolean;\r\n\r\n  /** Auto-exit after N seconds (for testing) */\r\n  timeout?: number;\r\n\r\n  /** Force Ink UI even if not a TTY (for testing) */\r\n  forceInk?: boolean;\r\n\r\n  /** Require authentication for MCP endpoint even from localhost */\r\n  mcpRequireAuth?: boolean;\r\n\r\n  /** Path to write continuous log file */\r\n  logFile?: string;\r\n\r\n  /** SSL configuration */\r\n  ssl?: {\r\n    certPath?: string;\r\n    keyPath?: string;\r\n    pfxPath?: string;\r\n    pfxPassphrase?: string;\r\n    caPath?: string;\r\n    port: number;\r\n    httpsOnly: boolean;\r\n  };\r\n}\r\n\r\n// ============================================================================\r\n// WORLD OPTIONS\r\n// ============================================================================\r\n\r\n/**\r\n * World-related options for world/ensureworld commands.\r\n */\r\nexport interface IWorldOptions {\r\n  /** Enable beta APIs in the world */\r\n  betaApis: boolean;\r\n\r\n  /** Use editor mode */\r\n  editor: boolean;\r\n\r\n  /** World difficulty */\r\n  difficulty?: string;\r\n\r\n  /** World game mode */\r\n  gameMode?: string;\r\n\r\n  /** World name override */\r\n  name?: string;\r\n\r\n  /** World seed */\r\n  seed?: string;\r\n\r\n  /** Ensure world exists before other operations */\r\n  ensureWorld: boolean;\r\n\r\n  /** Deploy as a test world (generate world with project packs) */\r\n  testWorld: boolean;\r\n\r\n  /** Launch the world after deployment */\r\n  launch: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// VALIDATION OPTIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Options specific to validation commands.\r\n */\r\nexport interface IValidationOptions {\r\n  /** Validation suite to use (string name of ProjectInfoSuite) */\r\n  suite?: string;\r\n\r\n  /** Comma-separated list of validators to exclude */\r\n  exclusionList?: string;\r\n\r\n  /** Output MCI format instead of reports */\r\n  outputMci: boolean;\r\n\r\n  /** Aggregate reports after validation */\r\n  aggregateReports: boolean;\r\n\r\n  /** When true, report validation errors as warnings and don't set a failure exit code */\r\n  warnOnly: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// MAIN COMMAND CONTEXT\r\n// ============================================================================\r\n\r\n/**\r\n * ICommandContext is the main context interface passed to all commands.\r\n *\r\n * It provides:\r\n * - Fully hydrated projects (not just paths)\r\n * - Typed global options\r\n * - Storage abstractions\r\n * - Worker pool for parallelization\r\n * - Unified logging\r\n *\r\n * Commands should receive this context and NOT access globals or parse arguments.\r\n */\r\nexport interface ICommandContext {\r\n  // -------------------------------------------------------------------------\r\n  // Core Infrastructure\r\n  // -------------------------------------------------------------------------\r\n\r\n  /** Main CreatorTools instance */\r\n  creatorTools: CreatorTools;\r\n\r\n  /** Local environment settings */\r\n  localEnv: LocalEnvironment;\r\n\r\n  /** Worker pool for parallel task execution */\r\n  workerPool: IWorkerPool;\r\n\r\n  /** Logging interface */\r\n  log: ILogger;\r\n\r\n  // -------------------------------------------------------------------------\r\n  // Projects\r\n  // -------------------------------------------------------------------------\r\n\r\n  /**\r\n   * Fully hydrated projects ready for use.\r\n   * Commands iterate over this array instead of managing project detection.\r\n   */\r\n  projects: Project[];\r\n\r\n  /** Convenience: number of projects */\r\n  projectCount: number;\r\n\r\n  /** Convenience: true if exactly one project */\r\n  isSingleProject: boolean;\r\n\r\n  // -------------------------------------------------------------------------\r\n  // Input/Output\r\n  // -------------------------------------------------------------------------\r\n\r\n  /** Input folder path (resolved to absolute) */\r\n  inputFolder: string;\r\n\r\n  /** True if the user explicitly specified -i / --input-folder on the command line */\r\n  inputFolderSpecified: boolean;\r\n\r\n  /** True if the input folder was auto-discovered by walking up from cwd to find a project root */\r\n  inputFolderAutoDiscovered: boolean;\r\n\r\n  /** Output folder path (resolved to absolute), may equal inputFolder */\r\n  outputFolder: string;\r\n\r\n  /** Output file path specified via --of / --output-file */\r\n  outputFile?: string;\r\n\r\n  /** Storage for reading input content */\r\n  inputStorage: IStorage;\r\n\r\n  /** Storage for writing output content */\r\n  outputStorage: IStorage;\r\n\r\n  /** Input work folder (loaded and ready) */\r\n  inputWorkFolder: IFolder;\r\n\r\n  /** Output work folder (loaded and ready) */\r\n  outputWorkFolder: IFolder;\r\n\r\n  // -------------------------------------------------------------------------\r\n  // Global Options\r\n  // -------------------------------------------------------------------------\r\n\r\n  /** Number of worker threads to use */\r\n  threads: number;\r\n\r\n  /** Force overwrite of existing files */\r\n  force: boolean;\r\n\r\n  /** Run in isolated mode (no external network requests) */\r\n  isolated: boolean;\r\n\r\n  /** Enable debug output */\r\n  debug: boolean;\r\n\r\n  /** Enable verbose output */\r\n  verbose: boolean;\r\n\r\n  /** Suppress non-essential output */\r\n  quiet: boolean;\r\n\r\n  /** Output in JSON format for machine parsing */\r\n  json: boolean;\r\n\r\n  /**\r\n   * Non-interactive mode (`-y` / `--yes`). When true, commands MUST NOT prompt the user\r\n   * via inquirer or stdin. They should accept supplied args + sensible defaults, or fail\r\n   * fast with a clear error if a required value is missing. This is what CI scripts\r\n   * and `mct mcp` (MCP server) use to drive commands without a TTY.\r\n   *\r\n   * Implies the same behaviour as `--quiet` for prompts (but does not silence output).\r\n   */\r\n  yes: boolean;\r\n\r\n  /** Dry-run mode - show what would be done without making changes */\r\n  dryRun: boolean;\r\n\r\n  /** Output format type */\r\n  outputType: OutputType;\r\n\r\n  /** The task type being executed */\r\n  taskType: TaskType;\r\n\r\n  // -------------------------------------------------------------------------\r\n  // Command Arguments\r\n  // -------------------------------------------------------------------------\r\n\r\n  /** Sub-command or sub-action (e.g., for 'fix' command) */\r\n  subCommand?: string;\r\n\r\n  /** Property value for set commands */\r\n  propertyValue?: string;\r\n\r\n  /** Search term for search command */\r\n  searchTerm?: string;\r\n\r\n  /** Mode string (e.g., 'blockviewer', 'entityviewer') */\r\n  mode?: string;\r\n\r\n  /** Type string (e.g., entity type identifier) */\r\n  type?: string;\r\n\r\n  /** New name for create/rename operations */\r\n  newName?: string;\r\n\r\n  /** Description text for create operations */\r\n  description?: string;\r\n\r\n  /** Project name filter (starts with) */\r\n  projectStartsWith?: string;\r\n\r\n  /** Reference folder path for documentation generation (skip existing files) */\r\n  referenceFolder?: string;\r\n\r\n  /**\r\n   * Raw command-specific options captured from Commander.js for this invocation.\r\n   * Use this when a single command introduces an option that doesn't merit its\r\n   * own typed field on the context. Prefer adding a typed field for options that\r\n   * are shared by multiple commands.\r\n   *\r\n   * Example: `context.commandOptions.format` for `mct exportaddon --format mcaddon`.\r\n   */\r\n  commandOptions: Record<string, any>;\r\n\r\n  // -------------------------------------------------------------------------\r\n  // Grouped Options\r\n  // -------------------------------------------------------------------------\r\n\r\n  /** Server-related options */\r\n  server: IServerOptions;\r\n\r\n  /** World-related options */\r\n  world: IWorldOptions;\r\n\r\n  /** Validation-specific options */\r\n  validation: IValidationOptions;\r\n\r\n  // -------------------------------------------------------------------------\r\n  // Exit State\r\n  // -------------------------------------------------------------------------\r\n\r\n  /** Exit code to return (0 = success) */\r\n  exitCode: number;\r\n\r\n  /** Set the exit code (updates only if higher than current) */\r\n  setExitCode(code: number): void;\r\n\r\n  // -------------------------------------------------------------------------\r\n  // Utility Methods\r\n  // -------------------------------------------------------------------------\r\n\r\n  /**\r\n   * Run a function for each project with progress logging.\r\n   * @param fn Function to run for each project\r\n   * @param label Optional label for progress messages\r\n   */\r\n  forEachProject(fn: (project: Project, index: number) => Promise<void>, label?: string): Promise<void>;\r\n}\r\n\r\n// ============================================================================\r\n// ERROR CODES\r\n// ============================================================================\r\n\r\n/**\r\n * Standard error codes for CLI exit status.\r\n * Higher numbers indicate more severe errors.\r\n */\r\nexport const ErrorCodes = {\r\n  SUCCESS: 0,\r\n  INIT_ERROR: 1,\r\n  VALIDATION_WARNING: 2,\r\n  VALIDATION_ERROR: 3,\r\n  VALIDATION_TESTFAIL: 4,\r\n  VALIDATION_INTERNALPROCESSINGERROR: 5,\r\n} as const;\r\n\r\nexport type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];\r\n", "/**\r\n * WorkerPool - Abstraction for parallel task execution\r\n *\r\n * This module provides:\r\n * - IWorkerPool interface (from ICommandContext)\r\n * - ThreadWorkerPool: Node.js worker_threads implementation\r\n * - SingleThreadPool: Executes tasks via worker but one at a time\r\n *\r\n * Both pools use the same TaskWorker.js script for execution,\r\n * ensuring consistent behavior between single and multi-threaded modes.\r\n *\r\n * The factory function createWorkerPool() selects the appropriate\r\n * implementation based on thread count.\r\n */\r\n\r\nimport { Worker as NodeWorker } from \"worker_threads\";\r\nimport * as path from \"path\";\r\nimport { IWorkerPool, IWorkerTask, IWorkerResult } from \"./ICommandContext\";\r\n\r\n/**\r\n * Get the path to the TaskWorker.mjs script.\r\n * The TaskWorker.mjs is in the same directory as the main CLI bundle.\r\n */\r\nfunction getWorkerPath(): string {\r\n  return path.resolve(__dirname, \"TaskWorker.mjs\");\r\n}\r\n\r\n/**\r\n * SingleThreadPool executes tasks one at a time using a single worker.\r\n * This provides consistent behavior with ThreadWorkerPool but without parallelism.\r\n */\r\nexport class SingleThreadPool implements IWorkerPool {\r\n  readonly concurrency = 1;\r\n\r\n  private workerPath: string;\r\n  private memoryLimitMb: number;\r\n\r\n  constructor(workerPath?: string, memoryLimitMb = 16384) {\r\n    this.workerPath = workerPath || getWorkerPath();\r\n    this.memoryLimitMb = memoryLimitMb;\r\n  }\r\n\r\n  async execute<TArgs, TResult>(task: IWorkerTask<TArgs, TResult>): Promise<IWorkerResult<TResult>> {\r\n    return executeInWorker<TArgs, TResult>(task, this.workerPath, this.memoryLimitMb);\r\n  }\r\n\r\n  async executeBatch<TArgs, TResult>(\r\n    tasks: IWorkerTask<TArgs, TResult>[],\r\n    onProgress?: (completed: number, total: number) => void\r\n  ): Promise<IWorkerResult<TResult>[]> {\r\n    const results: IWorkerResult<TResult>[] = [];\r\n\r\n    for (let i = 0; i < tasks.length; i++) {\r\n      const result = await this.execute(tasks[i]);\r\n      results.push(result);\r\n\r\n      if (onProgress) {\r\n        onProgress(i + 1, tasks.length);\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async shutdown(): Promise<void> {\r\n    // Nothing to clean up - workers are created per-task\r\n  }\r\n}\r\n\r\n/**\r\n * ThreadWorkerPool uses Node.js worker_threads for parallel execution.\r\n */\r\nexport class ThreadWorkerPool implements IWorkerPool {\r\n  readonly concurrency: number;\r\n\r\n  private workerPath: string;\r\n  private memoryLimitMb: number;\r\n  private activeWorkers: Set<NodeWorker> = new Set();\r\n  private isShutdown = false;\r\n\r\n  /**\r\n   * Create a thread worker pool.\r\n   * @param concurrency Maximum concurrent workers\r\n   * @param workerPath Path to the worker script (TaskWorker.js)\r\n   * @param memoryLimitMb Memory limit per worker in MB\r\n   */\r\n  constructor(concurrency: number, workerPath?: string, memoryLimitMb = 16384) {\r\n    this.concurrency = Math.max(1, Math.min(concurrency, 8));\r\n    this.workerPath = workerPath || getWorkerPath();\r\n    this.memoryLimitMb = memoryLimitMb;\r\n  }\r\n\r\n  async execute<TArgs, TResult>(task: IWorkerTask<TArgs, TResult>): Promise<IWorkerResult<TResult>> {\r\n    if (this.isShutdown) {\r\n      return {\r\n        success: false,\r\n        error: \"Worker pool has been shutdown\",\r\n      };\r\n    }\r\n\r\n    return new Promise((resolve) => {\r\n      const worker = new NodeWorker(this.workerPath, {\r\n        resourceLimits: {\r\n          maxOldGenerationSizeMb: this.memoryLimitMb,\r\n        },\r\n      });\r\n\r\n      this.activeWorkers.add(worker);\r\n\r\n      const cleanup = () => {\r\n        worker.removeAllListeners();\r\n        this.activeWorkers.delete(worker);\r\n        worker.terminate();\r\n      };\r\n\r\n      const onMessage = (result: unknown) => {\r\n        cleanup();\r\n        // Handle error strings returned from worker\r\n        if (typeof result === \"string\" && result.startsWith(\"Error\")) {\r\n          resolve({\r\n            success: false,\r\n            error: result,\r\n          });\r\n        } else {\r\n          resolve({\r\n            success: true,\r\n            result: result as TResult,\r\n          });\r\n        }\r\n      };\r\n\r\n      const onError = (error: Error) => {\r\n        cleanup();\r\n        resolve({\r\n          success: false,\r\n          error: error.message,\r\n          stack: error.stack,\r\n        });\r\n      };\r\n\r\n      const onExit = (code: number) => {\r\n        cleanup();\r\n        if (code !== 0) {\r\n          resolve({\r\n            success: false,\r\n            error: `Worker exited with code ${code}`,\r\n          });\r\n        }\r\n      };\r\n\r\n      worker.on(\"message\", onMessage);\r\n      worker.on(\"error\", onError);\r\n      worker.on(\"exit\", onExit);\r\n\r\n      // Post the task data to the worker\r\n      worker.postMessage({\r\n        task: task.taskType,\r\n        ...task.args,\r\n      });\r\n    });\r\n  }\r\n\r\n  async executeBatch<TArgs, TResult>(\r\n    tasks: IWorkerTask<TArgs, TResult>[],\r\n    onProgress?: (completed: number, total: number) => void\r\n  ): Promise<IWorkerResult<TResult>[]> {\r\n    if (this.isShutdown) {\r\n      return tasks.map(() => ({\r\n        success: false,\r\n        error: \"Worker pool has been shutdown\",\r\n      }));\r\n    }\r\n\r\n    const results: IWorkerResult<TResult>[] = new Array(tasks.length);\r\n    let currentIndex = 0;\r\n    let completedCount = 0;\r\n\r\n    const processNextBatch = async (): Promise<void> => {\r\n      const batchPromises: Promise<void>[] = [];\r\n      const batchIndices: number[] = [];\r\n\r\n      // Start up to concurrency tasks\r\n      for (let i = 0; i < this.concurrency && currentIndex < tasks.length; i++) {\r\n        const taskIndex = currentIndex++;\r\n        batchIndices.push(taskIndex);\r\n\r\n        const promise = this.execute(tasks[taskIndex]).then((result) => {\r\n          results[taskIndex] = result;\r\n          completedCount++;\r\n          if (onProgress) {\r\n            onProgress(completedCount, tasks.length);\r\n          }\r\n        });\r\n\r\n        batchPromises.push(promise);\r\n      }\r\n\r\n      await Promise.all(batchPromises);\r\n    };\r\n\r\n    // Process all tasks in batches\r\n    while (currentIndex < tasks.length) {\r\n      await processNextBatch();\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async shutdown(): Promise<void> {\r\n    this.isShutdown = true;\r\n\r\n    const terminatePromises: Promise<number>[] = [];\r\n    for (const worker of this.activeWorkers) {\r\n      terminatePromises.push(worker.terminate());\r\n    }\r\n\r\n    await Promise.all(terminatePromises);\r\n    this.activeWorkers.clear();\r\n  }\r\n}\r\n\r\n/**\r\n * Execute a single task in a worker and return the result.\r\n * This is a helper used by both SingleThreadPool and ThreadWorkerPool.\r\n */\r\nasync function executeInWorker<TArgs, TResult>(\r\n  task: IWorkerTask<TArgs, TResult>,\r\n  workerPath: string,\r\n  memoryLimitMb: number\r\n): Promise<IWorkerResult<TResult>> {\r\n  return new Promise((resolve) => {\r\n    const worker = new NodeWorker(workerPath, {\r\n      resourceLimits: {\r\n        maxOldGenerationSizeMb: memoryLimitMb,\r\n      },\r\n    });\r\n\r\n    const cleanup = () => {\r\n      worker.removeAllListeners();\r\n      worker.terminate();\r\n    };\r\n\r\n    const onMessage = (result: unknown) => {\r\n      cleanup();\r\n      // Handle error strings returned from worker\r\n      if (typeof result === \"string\" && result.startsWith(\"Error\")) {\r\n        resolve({\r\n          success: false,\r\n          error: result,\r\n        });\r\n      } else {\r\n        resolve({\r\n          success: true,\r\n          result: result as TResult,\r\n        });\r\n      }\r\n    };\r\n\r\n    const onError = (error: Error) => {\r\n      cleanup();\r\n      resolve({\r\n        success: false,\r\n        error: error.message,\r\n        stack: error.stack,\r\n      });\r\n    };\r\n\r\n    const onExit = (code: number) => {\r\n      cleanup();\r\n      if (code !== 0) {\r\n        resolve({\r\n          success: false,\r\n          error: `Worker exited with code ${code}`,\r\n        });\r\n      }\r\n    };\r\n\r\n    worker.on(\"message\", onMessage);\r\n    worker.on(\"error\", onError);\r\n    worker.on(\"exit\", onExit);\r\n\r\n    // Post the task data to the worker\r\n    // Convert IWorkerTask to the format expected by TaskWorker\r\n    worker.postMessage({\r\n      task: task.taskType,\r\n      ...task.args,\r\n    });\r\n  });\r\n}\r\n\r\n/**\r\n * Factory function to create the appropriate worker pool.\r\n * @param threads Number of threads (1 = single-threaded, >1 = multi-threaded)\r\n * @param workerPath Optional path to worker script (defaults to TaskWorker.js)\r\n */\r\nexport function createWorkerPool(threads: number, workerPath?: string): IWorkerPool {\r\n  if (threads <= 1) {\r\n    return new SingleThreadPool(workerPath);\r\n  }\r\n\r\n  return new ThreadWorkerPool(threads, workerPath);\r\n}\r\n", "/**\r\n * Logger - Implementation of ILogger for CLI output\r\n *\r\n * Provides:\r\n * - ConsoleLogger: Standard console output with ANSI colors\r\n * - SilentLogger: No output (for testing)\r\n *\r\n * Colors match the existing MCT CLI styling.\r\n */\r\n\r\nimport { ILogger } from \"./ICommandContext\";\r\n\r\n// ANSI color codes (matching existing index.ts style)\r\nconst RESET = \"\\x1b[0m\";\r\nconst RED = \"\\x1b[31m\";\r\nconst GREEN = \"\\x1b[32m\";\r\nconst YELLOW = \"\\x1b[33m\";\r\nconst BLUE = \"\\x1b[34m\";\r\nconst MAGENTA = \"\\x1b[35m\";\r\nconst CYAN = \"\\x1b[36m\";\r\nconst DIM = \"\\x1b[2m\";\r\n\r\n/**\r\n * ConsoleLogger outputs to console with ANSI colors.\r\n */\r\nexport class ConsoleLogger implements ILogger {\r\n  private verboseEnabled: boolean;\r\n  private quietEnabled: boolean;\r\n  private debugEnabled: boolean;\r\n  private jsonMode: boolean;\r\n\r\n  constructor(verbose = false, quiet = false, debug = false, jsonMode = false) {\r\n    this.verboseEnabled = verbose;\r\n    this.quietEnabled = quiet;\r\n    this.debugEnabled = debug;\r\n    this.jsonMode = jsonMode;\r\n  }\r\n\r\n  info(message: string): void {\r\n    if (!this.quietEnabled) {\r\n      // In JSON mode, non-data output goes to stderr to keep stdout clean for JSON\r\n      if (this.jsonMode) {\r\n        console.error(message);\r\n      } else {\r\n        console.log(message);\r\n      }\r\n    }\r\n  }\r\n\r\n  warn(message: string): void {\r\n    // In quiet mode, suppress warnings (important for --warn-only -q which\r\n    // downgrades errors to warnings and expects them to be silenced).\r\n    if (this.quietEnabled) return;\r\n    // In JSON mode, non-data output goes to stderr to keep stdout clean for JSON\r\n    if (this.jsonMode) {\r\n      console.error(`${YELLOW}Warning: ${message}${RESET}`);\r\n    } else {\r\n      console.log(`${YELLOW}Warning: ${message}${RESET}`);\r\n    }\r\n  }\r\n\r\n  error(message: string): void {\r\n    // Errors always show, even in quiet mode\r\n    console.error(`${RED}Error: ${message}${RESET}`);\r\n  }\r\n\r\n  verbose(message: string): void {\r\n    if (this.verboseEnabled) {\r\n      // In JSON mode, non-data output goes to stderr to keep stdout clean for JSON\r\n      if (this.jsonMode) {\r\n        console.error(`${DIM}${message}${RESET}`);\r\n      } else {\r\n        console.log(`${DIM}${message}${RESET}`);\r\n      }\r\n    }\r\n  }\r\n\r\n  debug(message: string): void {\r\n    if (this.debugEnabled) {\r\n      // In JSON mode, non-data output goes to stderr to keep stdout clean for JSON\r\n      if (this.jsonMode) {\r\n        console.error(`${MAGENTA}[DEBUG] ${message}${RESET}`);\r\n      } else {\r\n        console.log(`${MAGENTA}[DEBUG] ${message}${RESET}`);\r\n      }\r\n    }\r\n  }\r\n\r\n  success(message: string): void {\r\n    // In JSON mode, non-data output goes to stderr to keep stdout clean for JSON\r\n    if (this.jsonMode) {\r\n      console.error(`${GREEN}${message}${RESET}`);\r\n    } else {\r\n      console.log(`${GREEN}${message}${RESET}`);\r\n    }\r\n  }\r\n\r\n  data(message: string): void {\r\n    // Machine-readable output (e.g., JSON) always goes to stdout, even in quiet mode\r\n    console.log(message);\r\n  }\r\n\r\n  progress(current: number, total: number, message?: string): void {\r\n    if (this.quietEnabled || this.jsonMode) {\r\n      return; // Suppress progress in quiet mode and JSON mode\r\n    }\r\n    const percent = Math.round((current / total) * 100);\r\n    const bar = this.createProgressBar(percent);\r\n    const msg = message ? ` ${message}` : \"\";\r\n    process.stdout.write(`\\r${CYAN}${bar} ${current}/${total} (${percent}%)${msg}${RESET}`);\r\n\r\n    if (current === total) {\r\n      console.log(); // New line when complete\r\n    }\r\n  }\r\n\r\n  private createProgressBar(percent: number): string {\r\n    const width = 20;\r\n    const filled = Math.round((percent / 100) * width);\r\n    const empty = width - filled;\r\n    return `[${\"=\".repeat(filled)}${\" \".repeat(empty)}]`;\r\n  }\r\n}\r\n\r\n/**\r\n * SilentLogger produces no output.\r\n * Useful for testing or when output should be suppressed.\r\n */\r\nexport class SilentLogger implements ILogger {\r\n  info(_message: string): void {}\r\n  warn(_message: string): void {}\r\n  error(_message: string): void {}\r\n  verbose(_message: string): void {}\r\n  debug(_message: string): void {}\r\n  success(_message: string): void {}\r\n  data(_message: string): void {}\r\n  progress(_current: number, _total: number, _message?: string): void {}\r\n}\r\n\r\n/**\r\n * BufferedLogger stores all log messages for later retrieval.\r\n * Useful for testing or capturing output.\r\n */\r\nexport class BufferedLogger implements ILogger {\r\n  readonly messages: Array<{ level: string; message: string }> = [];\r\n\r\n  info(message: string): void {\r\n    this.messages.push({ level: \"info\", message });\r\n  }\r\n\r\n  warn(message: string): void {\r\n    this.messages.push({ level: \"warn\", message });\r\n  }\r\n\r\n  error(message: string): void {\r\n    this.messages.push({ level: \"error\", message });\r\n  }\r\n\r\n  verbose(message: string): void {\r\n    this.messages.push({ level: \"verbose\", message });\r\n  }\r\n\r\n  debug(message: string): void {\r\n    this.messages.push({ level: \"debug\", message });\r\n  }\r\n\r\n  success(message: string): void {\r\n    this.messages.push({ level: \"success\", message });\r\n  }\r\n\r\n  data(message: string): void {\r\n    this.messages.push({ level: \"data\", message });\r\n  }\r\n\r\n  progress(current: number, total: number, message?: string): void {\r\n    this.messages.push({\r\n      level: \"progress\",\r\n      message: `${current}/${total}${message ? ` ${message}` : \"\"}`,\r\n    });\r\n  }\r\n\r\n  clear(): void {\r\n    this.messages.length = 0;\r\n  }\r\n\r\n  getErrors(): string[] {\r\n    return this.messages.filter((m) => m.level === \"error\").map((m) => m.message);\r\n  }\r\n\r\n  getWarnings(): string[] {\r\n    return this.messages.filter((m) => m.level === \"warn\").map((m) => m.message);\r\n  }\r\n}\r\n\r\n/**\r\n * Create a logger based on options.\r\n * @param verbose Enable verbose output\r\n * @param quiet Suppress non-essential output (errors and warnings still shown)\r\n * @param debug Enable debug output\r\n * @param silent Completely suppress all output (for testing)\r\n * @param jsonMode When true, route all non-data output to stderr so stdout contains only machine-readable JSON\r\n */\r\nexport function createLogger(verbose = false, quiet = false, debug = false, silent = false, jsonMode = false): ILogger {\r\n  if (silent) {\r\n    return new SilentLogger();\r\n  }\r\n  return new ConsoleLogger(verbose, quiet, debug, jsonMode);\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { IBlockVolume, IBlockTypeData } from \"./IBlockVolume\";\r\nimport Structure from \"./Structure\";\r\nimport BlockVolume from \"./BlockVolume\";\r\nimport Block from \"./Block\";\r\n\r\n/**\r\n * Utility functions for working with Structure (MCStructure) objects.\r\n */\r\nexport default class StructureUtilities {\r\n  /**\r\n   * Infers the size of an IBlockVolume from its data.\r\n   * - size.y = number of layers in blockLayersBottomToTop\r\n   * - size.z = maximum number of rows across all layers\r\n   * - size.x = maximum string length across all rows\r\n   *\r\n   * @param blockVolume The IBlockVolume to measure\r\n   * @returns The inferred size as an IVector3\r\n   */\r\n  static inferBlockVolumeSize(blockVolume: IBlockVolume): { x: number; y: number; z: number } {\r\n    const layers = blockVolume.blockLayersBottomToTop;\r\n    const sizeY = layers.length;\r\n\r\n    let sizeZ = 0;\r\n    let sizeX = 0;\r\n\r\n    for (const layer of layers) {\r\n      if (layer.length > sizeZ) {\r\n        sizeZ = layer.length;\r\n      }\r\n      for (const row of layer) {\r\n        if (row.length > sizeX) {\r\n          sizeX = row.length;\r\n        }\r\n      }\r\n    }\r\n\r\n    return { x: sizeX, y: sizeY, z: sizeZ };\r\n  }\r\n\r\n  /**\r\n   * Gets the effective size of an IBlockVolume, using the explicit size if provided,\r\n   * or inferring it from the data if not.\r\n   *\r\n   * @param blockVolume The IBlockVolume to get the size of\r\n   * @returns The effective size as an IVector3\r\n   */\r\n  static getEffectiveSize(blockVolume: IBlockVolume): { x: number; y: number; z: number } {\r\n    if (blockVolume.size) {\r\n      return blockVolume.size;\r\n    }\r\n    return StructureUtilities.inferBlockVolumeSize(blockVolume);\r\n  }\r\n\r\n  /**\r\n   * Creates a Structure (MCStructure) from an IBlockVolume.\r\n   *\r\n   * IBlockVolume uses blockLayersBottomToTop format:\r\n   * - Outer array: Y layers from bottom (Y=0) to top\r\n   * - Each layer: rows from north (Z=0) to south (Z=max)\r\n   * - Each character: X position from west (X=0) to east (X=max)\r\n   *\r\n   * Think of it like stacking floors: first layer is ground floor, last is roof.\r\n   *\r\n   * If size is not explicitly provided, it is inferred from the data.\r\n   * Shorter strings and missing rows are treated as air.\r\n   *\r\n   * @param blockVolume The IBlockVolume containing layer-based block data\r\n   * @returns A Structure populated with blocks from the IBlockVolume\r\n   */\r\n  static createStructureFromIBlockVolume(blockVolume: IBlockVolume): Structure {\r\n    const structure = new Structure();\r\n    const cube = new BlockVolume();\r\n\r\n    // Use explicit size if provided, otherwise infer from data\r\n    const effectiveSize = StructureUtilities.getEffectiveSize(blockVolume);\r\n    const sizeX = effectiveSize.x;\r\n    const sizeY = effectiveSize.y;\r\n    const sizeZ = effectiveSize.z;\r\n\r\n    cube.setMaxDimensions(sizeX, sizeY, sizeZ);\r\n\r\n    // Set the origin based on the IBlockVolume's southWestBottom\r\n    structure.originX = blockVolume.southWestBottom.x;\r\n    structure.originY = blockVolume.southWestBottom.y;\r\n    structure.originZ = blockVolume.southWestBottom.z;\r\n\r\n    // Process each Y layer (bottom to top)\r\n    for (let y = 0; y < sizeY && y < blockVolume.blockLayersBottomToTop.length; y++) {\r\n      const layer = blockVolume.blockLayersBottomToTop[y];\r\n\r\n      if (!layer) {\r\n        continue;\r\n      }\r\n\r\n      // Process each Z row within the layer (north to south)\r\n      for (let z = 0; z < layer.length && z < sizeZ; z++) {\r\n        const row = layer[z];\r\n\r\n        if (!row) {\r\n          continue;\r\n        }\r\n\r\n        // Process each X position in the row (west to east)\r\n        for (let x = 0; x < row.length && x < sizeX; x++) {\r\n          const charRef = row[x];\r\n          const blockTypeData = blockVolume.key[charRef];\r\n\r\n          if (blockTypeData) {\r\n            const block = cube.x(x).y(y).z(z);\r\n            StructureUtilities.applyBlockTypeDataToBlock(block, blockTypeData);\r\n          }\r\n          // If no blockTypeData found for the character, the block remains as default (air)\r\n        }\r\n      }\r\n    }\r\n\r\n    structure.cube = cube;\r\n\r\n    return structure;\r\n  }\r\n\r\n  /**\r\n   * Applies block type data from IBlockTypeData to a Block.\r\n   * Handles the properties field and also legacy parsing of block states from the typeId if present.\r\n   *\r\n   * @param block The Block to apply the type data to\r\n   * @param blockTypeData The IBlockTypeData containing the type ID and optional properties\r\n   */\r\n  static applyBlockTypeDataToBlock(block: Block, blockTypeData: IBlockTypeData): void {\r\n    let typeId = blockTypeData.typeId;\r\n\r\n    // First, apply properties from the properties field (preferred method)\r\n    if (blockTypeData.properties) {\r\n      for (const propName in blockTypeData.properties) {\r\n        const prop = block.ensureProperty(propName);\r\n        prop.value = blockTypeData.properties[propName];\r\n      }\r\n    }\r\n\r\n    // Also support legacy parsing of block states from the typeId\r\n    // Format: \"minecraft:block_name[state1=value1,state2=value2]\" or \"minecraft:block_name{state1:value1,state2:value2}\"\r\n    const squareBracketIndex = typeId.indexOf(\"[\");\r\n    const curlyBracketIndex = typeId.indexOf(\"{\");\r\n\r\n    if (squareBracketIndex >= 0) {\r\n      // Handle square bracket format: block_name[state=value]\r\n      const endBracket = typeId.indexOf(\"]\");\r\n      if (endBracket > squareBracketIndex) {\r\n        const statesStr = typeId.substring(squareBracketIndex + 1, endBracket);\r\n        typeId = typeId.substring(0, squareBracketIndex);\r\n\r\n        StructureUtilities.parseAndApplyBlockStates(block, statesStr, \",\", \"=\");\r\n      }\r\n    } else if (curlyBracketIndex >= 0) {\r\n      // Handle curly bracket format: block_name{state:value}\r\n      const endBracket = typeId.indexOf(\"}\");\r\n      if (endBracket > curlyBracketIndex) {\r\n        const statesStr = typeId.substring(curlyBracketIndex + 1, endBracket);\r\n        typeId = typeId.substring(0, curlyBracketIndex);\r\n\r\n        StructureUtilities.parseAndApplyBlockStates(block, statesStr, \",\", \":\");\r\n      }\r\n    }\r\n\r\n    // Ensure the typeId has the minecraft: prefix if it doesn't have a namespace\r\n    if (!typeId.includes(\":\")) {\r\n      typeId = \"minecraft:\" + typeId;\r\n    }\r\n\r\n    block.typeName = typeId;\r\n  }\r\n\r\n  /**\r\n   * Parses a block states string and applies the states to the block.\r\n   *\r\n   * @param block The block to apply states to\r\n   * @param statesStr The states string (e.g., \"facing=north,half=bottom\")\r\n   * @param stateSeparator The character separating multiple states (usually \",\")\r\n   * @param keyValueSeparator The character separating key from value (\"=\" or \":\")\r\n   */\r\n  static parseAndApplyBlockStates(\r\n    block: Block,\r\n    statesStr: string,\r\n    stateSeparator: string,\r\n    keyValueSeparator: string\r\n  ): void {\r\n    const states = statesStr.split(stateSeparator);\r\n\r\n    for (const state of states) {\r\n      const trimmedState = state.trim();\r\n      if (!trimmedState) {\r\n        continue;\r\n      }\r\n\r\n      const separatorIndex = trimmedState.indexOf(keyValueSeparator);\r\n      if (separatorIndex > 0) {\r\n        const key = trimmedState.substring(0, separatorIndex).trim();\r\n        const valueStr = trimmedState.substring(separatorIndex + 1).trim();\r\n\r\n        const prop = block.ensureProperty(key);\r\n\r\n        // Try to parse the value as appropriate type\r\n        if (valueStr === \"true\") {\r\n          prop.value = true;\r\n        } else if (valueStr === \"false\") {\r\n          prop.value = false;\r\n        } else {\r\n          const numValue = parseInt(valueStr, 10);\r\n          if (!isNaN(numValue) && numValue.toString() === valueStr) {\r\n            prop.value = numValue;\r\n          } else {\r\n            // Remove quotes if present\r\n            prop.value = valueStr.replace(/^[\"']|[\"']$/g, \"\");\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Creates an IBlockVolume from a Structure.\r\n   * This is the inverse operation of createStructureFromIBlockVolume.\r\n   *\r\n   * Output uses blockLayersBottomToTop format:\r\n   * - Outer array: Y layers from bottom to top\r\n   * - Each layer: rows from north to south\r\n   * - Each character: X position from west to east\r\n   *\r\n   * @param structure The Structure to convert\r\n   * @returns An IBlockVolume representation of the structure\r\n   */\r\n  static createIBlockVolumeFromStructure(structure: Structure): IBlockVolume | undefined {\r\n    const cube = structure.cube;\r\n\r\n    if (!cube) {\r\n      return undefined;\r\n    }\r\n\r\n    const key: { [characterReference: string]: IBlockTypeData } = {};\r\n    const blockLayersBottomToTop: string[][] = [];\r\n    const blockTypeToChar: Map<string, string> = new Map();\r\n\r\n    // Character set for block references (avoiding space which is used for air)\r\n    const charSet = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=[]{}|;':\\\",./<>?`~\";\r\n    let charIndex = 0;\r\n\r\n    // Process each Y layer (bottom to top)\r\n    for (let y = 0; y < cube.maxY; y++) {\r\n      const layer: string[] = [];\r\n\r\n      // Process each Z row within the layer (north to south)\r\n      for (let z = 0; z < cube.maxZ; z++) {\r\n        let row = \"\";\r\n\r\n        // Process each X position (west to east)\r\n        for (let x = 0; x < cube.maxX; x++) {\r\n          const block = cube.x(x).y(y).z(z);\r\n          const blockFingerprint = block.toString();\r\n\r\n          // Check for air blocks\r\n          if (block.typeName === null || block.typeName === undefined || block.shortTypeId === \"air\") {\r\n            row += \" \";\r\n            continue;\r\n          }\r\n\r\n          // Look up or assign a character for this block type\r\n          let charRef = blockTypeToChar.get(blockFingerprint);\r\n          if (charRef === undefined) {\r\n            if (charIndex >= charSet.length) {\r\n              // If we run out of characters, start using multi-character references\r\n              // This is a fallback that shouldn't happen often\r\n              charRef = `{${charIndex}}`;\r\n            } else {\r\n              charRef = charSet[charIndex];\r\n            }\r\n            charIndex++;\r\n\r\n            blockTypeToChar.set(blockFingerprint, charRef);\r\n            key[charRef] = StructureUtilities.getBlockTypeDataFromBlock(block);\r\n          }\r\n\r\n          row += charRef;\r\n        }\r\n\r\n        layer.push(row);\r\n      }\r\n\r\n      blockLayersBottomToTop.push(layer);\r\n    }\r\n\r\n    return {\r\n      entities: [], // TODO: Support entity conversion\r\n      southWestBottom: {\r\n        x: structure.originX ?? 0,\r\n        y: structure.originY ?? 0,\r\n        z: structure.originZ ?? 0,\r\n      },\r\n      size: {\r\n        x: cube.maxX,\r\n        y: cube.maxY,\r\n        z: cube.maxZ,\r\n      },\r\n      blockLayersBottomToTop,\r\n      key,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Creates an IBlockTypeData from a Block, with typeId and properties separated.\r\n   *\r\n   * @param block The block to get the type data for\r\n   * @returns An IBlockTypeData with the block's type ID and properties\r\n   */\r\n  static getBlockTypeDataFromBlock(block: Block): IBlockTypeData {\r\n    const typeId = block.typeName ?? \"minecraft:air\";\r\n    const propertyNames = Object.keys(block.properties);\r\n\r\n    if (propertyNames.length === 0) {\r\n      return { typeId };\r\n    }\r\n\r\n    const properties: { [key: string]: string | number | boolean } = {};\r\n\r\n    for (const propName of propertyNames) {\r\n      const prop = block.getProperty(propName);\r\n      if (prop && prop.value !== undefined) {\r\n        const value = prop.value;\r\n        // Convert to compatible types for IBlockTypeData.properties\r\n        if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\r\n          properties[propName] = value;\r\n        } else if (typeof value === \"bigint\") {\r\n          // Convert bigint to number (may lose precision for very large values)\r\n          properties[propName] = Number(value);\r\n        } else if (Array.isArray(value)) {\r\n          // Convert arrays to string representation\r\n          properties[propName] = value.join(\",\");\r\n        }\r\n      }\r\n    }\r\n\r\n    return { typeId, properties };\r\n  }\r\n\r\n  /**\r\n   * Gets the full block type ID with states in square bracket notation.\r\n   * @deprecated Use getBlockTypeDataFromBlock instead for the new properties-based format.\r\n   *\r\n   * @param block The block to get the type ID for\r\n   * @returns The block type ID, optionally with states (e.g., \"minecraft:oak_stairs[facing=north,half=bottom]\")\r\n   */\r\n  static getBlockTypeIdWithStates(block: Block): string {\r\n    let typeId = block.typeName ?? \"minecraft:air\";\r\n\r\n    const propertyNames = Object.keys(block.properties);\r\n    if (propertyNames.length > 0) {\r\n      const states: string[] = [];\r\n\r\n      for (const propName of propertyNames) {\r\n        const prop = block.getProperty(propName);\r\n        if (prop && prop.value !== undefined) {\r\n          states.push(`${propName}=${prop.value}`);\r\n        }\r\n      }\r\n\r\n      if (states.length > 0) {\r\n        typeId += `[${states.join(\",\")}]`;\r\n      }\r\n    }\r\n\r\n    return typeId;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Zod schemas for Minecraft Content Meta-Schema.\r\n *\r\n * These schemas are used for:\r\n * 1. MCP tool input validation\r\n * 2. Runtime type checking\r\n * 3. AI-friendly schema descriptions\r\n *\r\n * The schemas mirror the TypeScript interfaces in IContentMetaSchema.ts\r\n */\r\n\r\nimport { z } from \"zod\";\r\n\r\n// ============================================================================\r\n// TEXTURE AND GEOMETRY SCHEMAS (reusing existing patterns)\r\n// ============================================================================\r\n\r\n/**\r\n * Color specification - hex string or RGB object.\r\n */\r\nexport const McpColorSchema = z.union([\r\n  z.string().describe(\"Hex color like '#FF0000' or 'rgb(255,0,0)'\"),\r\n  z.object({\r\n    r: z.number().min(0).max(255).describe(\"Red channel (0-255)\"),\r\n    g: z.number().min(0).max(255).describe(\"Green channel (0-255)\"),\r\n    b: z.number().min(0).max(255).describe(\"Blue channel (0-255)\"),\r\n    a: z.number().min(0).max(255).optional().describe(\"Alpha channel (0-255, default 255)\"),\r\n  }),\r\n]);\r\n\r\n/**\r\n * Textured rectangle - procedural texture generation.\r\n */\r\nexport const TexturedRectangleSchema = z\r\n  .object({\r\n    type: z\r\n      .enum([\"none\", \"solid\", \"random_noise\", \"dither_noise\", \"perlin_noise\", \"stipple_noise\", \"gradient\"])\r\n      .describe(\r\n        \"Fill algorithm: 'none' (fully transparent background \u2014 use with pixelArt for icon-style overlays), 'solid' (single color), or noise/gradient types for Minecraft-style textures\"\r\n      ),\r\n    colors: z\r\n      .array(McpColorSchema)\r\n      .optional()\r\n      .describe(\r\n        \"Colors to use. Required for all types except 'none'. For 'solid', only the first color is used. Omit or pass [] when type is 'none'.\"\r\n      ),\r\n    factor: z.number().min(0).max(1).optional().describe(\"Noise intensity (0-1). Default: 0.2\"),\r\n    seed: z.number().int().optional().describe(\"Random seed for deterministic results\"),\r\n    pixelSize: z.number().int().min(1).optional().describe(\"Pixel size for noise. Default: 1\"),\r\n    scale: z.number().optional().describe(\"Scale for perlin noise. Default: 4\"),\r\n  })\r\n  .describe(\"Procedural texture using Minecraft-style patterns (or a transparent background when type is 'none')\");\r\n\r\n/**\r\n * Pixel art overlay.\r\n */\r\nexport const PixelArtSchema = z\r\n  .object({\r\n    scaleMode: z\r\n      .enum([\"unit\", \"exact\", \"cover\"])\r\n      .optional()\r\n      .describe(\r\n        \"How the lines/palette grid is scaled onto the target rectangle. Default is 'unit'. \" +\r\n          \"'unit' = each character represents 1 Minecraft unit (recommended for blocks/entities); x and y are in Minecraft units. \" +\r\n          \"'exact' = each character represents 1 pixel at the native texture resolution; x and y are in pixels (use for precise 16x16 item icons). \" +\r\n          \"'cover' = the grid is stretched to fill the entire face/texture (x and y are ignored; can cause non-square stretching).\"\r\n      ),\r\n    x: z.number().optional().describe(\"X offset from the left edge. Units depend on scaleMode (see scaleMode).\"),\r\n    y: z.number().optional().describe(\"Y offset from the top edge. Units depend on scaleMode (see scaleMode).\"),\r\n    lines: z.array(z.string()).describe(\"Rows of characters from top to bottom. Space (' ') is always transparent.\"),\r\n    palette: z\r\n      .record(\r\n        z.object({\r\n          r: z.number().min(0).max(255).optional(),\r\n          g: z.number().min(0).max(255).optional(),\r\n          b: z.number().min(0).max(255).optional(),\r\n          a: z.number().min(0).max(255).optional(),\r\n          hex: z.string().optional(),\r\n        })\r\n      )\r\n      .describe(\"Map characters to colors. Don't define space - it's always transparent\"),\r\n  })\r\n  .describe(\"ASCII-art style pixel overlay for textures\");\r\n\r\n/**\r\n * Texture specification.\r\n */\r\nexport const TextureSpecSchema = z\r\n  .object({\r\n    file: z.string().optional().describe(\"Reference existing texture file (relative to resource pack)\"),\r\n    generate: TexturedRectangleSchema.optional().describe(\r\n      \"Generate texture procedurally. Use type:'none' with pixelArt for icon-style textures with a transparent background.\"\r\n    ),\r\n    pixelArt: z\r\n      .array(PixelArtSchema)\r\n      .optional()\r\n      .describe(\r\n        \"Pixel art overlays drawn on top of the background. Space characters are transparent so you can layer art over (or without) a generated background.\"\r\n      ),\r\n  })\r\n  .describe(\r\n    \"Texture specification. Precedence: 'file' (use existing PNG) > 'generate'+'pixelArt' (procedural) > fallback (item.color / block.mapColor + trait-based template).\"\r\n  );\r\n\r\n/**\r\n * Geometry template types.\r\n */\r\nexport const GeometryTemplateSchema = z\r\n  .enum([\"humanoid\", \"quadruped\", \"quadruped_small\", \"bird\", \"fish\", \"insect\", \"slime\", \"flying\", \"block\", \"item\"])\r\n  .describe(\"Pre-built geometry template\");\r\n\r\n/**\r\n * Geometry specification.\r\n */\r\nexport const GeometrySpecSchema = z\r\n  .object({\r\n    file: z.string().optional().describe(\"Reference an existing geometry file (relative to the resource pack).\"),\r\n    template: GeometryTemplateSchema.optional().describe(\r\n      \"Use a built-in template (humanoid, quadruped, etc.). Fastest path for common body types.\"\r\n    ),\r\n    // Note: full IMcpModelDesign is complex, accepting any object for now\r\n    design: z\r\n      .record(z.any())\r\n      .optional()\r\n      .describe(\"Inline model design (IMcpModelDesign format). Use for fully custom geometry with bones and cubes.\"),\r\n  })\r\n  .describe(\r\n    \"Geometry specification. Precedence (if multiple are provided): 'file' > 'design' > 'template'. \" +\r\n      \"Use 'template' for a quick start, 'design' for custom models, 'file' to reference a .geo.json asset you already ship.\"\r\n  );\r\n\r\n// ============================================================================\r\n// ENTITY TYPE SCHEMAS\r\n// ============================================================================\r\n\r\n/**\r\n * Entity traits.\r\n */\r\nexport const EntityTraitSchema = z\r\n  .enum([\r\n    // Body types\r\n    \"humanoid\",\r\n    \"quadruped\",\r\n    \"quadruped_small\",\r\n    \"flying\",\r\n    \"aquatic\",\r\n    \"arthropod\",\r\n    \"slime\",\r\n    // Behavior archetypes\r\n    \"hostile\",\r\n    \"passive\",\r\n    \"neutral\",\r\n    \"boss\",\r\n    // Combat styles\r\n    \"melee_attacker\",\r\n    \"ranged_attacker\",\r\n    \"exploder\",\r\n    // Interaction\r\n    \"trader\",\r\n    \"tameable\",\r\n    \"rideable\",\r\n    \"breedable\",\r\n    \"leasable\",\r\n    // Special\r\n    \"undead\",\r\n    \"illager\",\r\n    \"aquatic_only\",\r\n    \"baby_variant\",\r\n    \"wanders\",\r\n    \"patrols\",\r\n    \"guards\",\r\n    \"flees_daylight\",\r\n    \"teleporter\",\r\n  ])\r\n  .describe(\"Pre-packaged bundle of components, behaviors, and appearance\");\r\n\r\n/**\r\n * Entity behavior presets.\r\n */\r\nexport const EntityBehaviorPresetSchema = z\r\n  .enum([\r\n    // Movement\r\n    \"wander\",\r\n    \"swim\",\r\n    \"fly_around\",\r\n    \"float\",\r\n    \"climb\",\r\n    // Combat\r\n    \"melee_attack\",\r\n    \"ranged_attack\",\r\n    \"target_players\",\r\n    \"target_monsters\",\r\n    \"flee_when_hurt\",\r\n    \"retaliate\",\r\n    // Social\r\n    \"follow_owner\",\r\n    \"follow_parent\",\r\n    \"herd\",\r\n    \"avoid_players\",\r\n    // Interaction\r\n    \"look_at_player\",\r\n    \"beg\",\r\n    \"tempt\",\r\n    \"sit_command\",\r\n    // Actions\r\n    \"eat_grass\",\r\n    \"break_doors\",\r\n    \"open_doors\",\r\n    \"pick_up_items\",\r\n    \"sleep_in_bed\",\r\n    // Environment\r\n    \"hide_from_sun\",\r\n    \"go_home_at_night\",\r\n    \"seek_water\",\r\n    \"seek_land\",\r\n  ])\r\n  .describe(\r\n    \"Pre-built AI behavior that maps to one or more native minecraft:behavior.* components. \" +\r\n      \"Movement: 'wander' (random walks, most land mobs), 'swim' (aquatic mobs), 'fly_around' (flying mobs), 'float' (stay upright in water), 'climb' (spiders/cave-dwellers). \" +\r\n      \"Combat: 'melee_attack' (approach+strike, zombies), 'ranged_attack' (pair with ranged_attacker trait/projectile), \" +\r\n      \"'target_players' (aggros players in range), 'target_monsters' (iron-golem style), 'flee_when_hurt' (run from attacker), 'retaliate' (fight back when hit). \" +\r\n      \"Social: 'follow_owner' (tamed pets), 'follow_parent' (babies follow adults), 'herd' (cluster with same type), 'avoid_players' (endermen/foxes). \" +\r\n      \"Interaction: 'look_at_player' (turns head), 'beg' (wolf begging for food), 'tempt' (follow held breed items), 'sit_command' (tamed sit/stand). \" +\r\n      \"Actions: 'eat_grass' (cow/sheep grass-eating), 'break_doors' (zombie-style), 'open_doors' (villager-style), 'pick_up_items' (collect dropped items), 'sleep_in_bed' (villager sleep cycle). \" +\r\n      \"Environment: 'hide_from_sun' (burns in daylight \u2014 undead), 'go_home_at_night' (return to bed at dusk), 'seek_water' (fish out of water), 'seek_land' (drowning prevention for non-aquatic).\"\r\n  );\r\n\r\n/**\r\n * Drop definition.\r\n */\r\nexport const DropSchema = z\r\n  .object({\r\n    item: z.string().describe(\"Item ID (vanilla like 'iron_sword' or namespaced like 'namespace:custom')\"),\r\n    chance: z.number().min(0).max(1).optional().describe(\"Drop chance (0-1). Default: 1.0\"),\r\n    count: z\r\n      .union([z.number().int(), z.object({ min: z.number().int(), max: z.number().int() })])\r\n      .optional()\r\n      .describe(\"Stack size - number or {min, max} range\"),\r\n    killedByPlayer: z.boolean().optional().describe(\"Only drop if killed by player\"),\r\n    lootingBonus: z.number().optional().describe(\"Bonus items per looting level\"),\r\n  })\r\n  .describe(\"What drops when entity is killed or block is mined\");\r\n\r\n/**\r\n * Entity appearance.\r\n */\r\nexport const EntityAppearanceSchema = z\r\n  .object({\r\n    bodyType: GeometryTemplateSchema.optional().describe(\"Base body template for geometry\"),\r\n    primaryColor: z.string().optional().describe(\"Primary color (hex) for texture generation\"),\r\n    secondaryColor: z.string().optional().describe(\"Secondary/accent color (hex)\"),\r\n    textureStyle: z\r\n      .enum([\"solid\", \"spotted\", \"striped\", \"gradient\", \"organic\", \"armored\"])\r\n      .optional()\r\n      .describe(\r\n        \"Procedural pattern used when the auto-generated texture is produced from primary/secondaryColor. \" +\r\n          \"'solid' = flat color, 'spotted' = stipple (organic materials), 'striped' = dithered bands, \" +\r\n          \"'gradient' = smooth transition, 'organic' = perlin noise (fur/stone), 'armored' = stippled with highlight effect. \" +\r\n          \"Ignored when 'texture' is explicitly provided.\"\r\n      ),\r\n    scale: z\r\n      .number()\r\n      .optional()\r\n      .describe(\"Scale multiplier. Equivalent to the top-level entity.scale; if both are set, appearance.scale wins.\"),\r\n    eyes: z\r\n      .enum([\"normal\", \"glowing\", \"red\", \"none\"])\r\n      .optional()\r\n      .describe(\r\n        \"Eye treatment. 'normal' (default) = no special treatment. 'glowing' = emissive material (glows in the dark). \" +\r\n          \"'red' = tinted emissive (spider/enderman style). 'none' = no eye treatment hint. \" +\r\n          \"Applied via the entity's material/render controller.\"\r\n      ),\r\n    particles: z\r\n      .array(z.enum([\"flames\", \"smoke\", \"drip\", \"sparkle\", \"hearts\"]))\r\n      .optional()\r\n      .describe(\r\n        \"Ambient particle effects emitted from the entity. Wired into the resource-pack client entity's particle_effects map. \" +\r\n          \"Useful for visual flair (flames on fire mobs, hearts when happy, etc.).\"\r\n      ),\r\n    texture: TextureSpecSchema.optional().describe(\r\n      \"Custom texture. When provided, it overrides auto-generation from primary/secondaryColor and textureStyle.\"\r\n    ),\r\n    geometry: GeometrySpecSchema.optional().describe(\r\n      \"Custom geometry. When provided, it overrides the geometry inferred from bodyType.\"\r\n    ),\r\n  })\r\n  .describe(\r\n    \"Simplified appearance specification. Fields are mixed into the resource-pack client entity and the generated texture/geometry.\"\r\n  );\r\n\r\n/**\r\n * Tameable configuration.\r\n */\r\nexport const TameableConfigSchema = z.object({\r\n  tameItems: z.array(z.string()).describe(\"Items that can be used to tame\"),\r\n  chance: z.number().min(0).max(1).optional().describe(\"Chance per attempt (0-1)\"),\r\n});\r\n\r\n/**\r\n * Rideable configuration.\r\n */\r\nexport const RideableConfigSchema = z.object({\r\n  seatCount: z.number().int().optional().describe(\"Number of seats\"),\r\n  controllable: z.boolean().optional().describe(\"Can be controlled by player\"),\r\n  controlItems: z.array(z.string()).optional().describe(\"Items required to control\"),\r\n});\r\n\r\n/**\r\n * Breedable configuration.\r\n */\r\nexport const BreedableConfigSchema = z.object({\r\n  breedItems: z.array(z.string()).describe(\"Items that trigger breeding\"),\r\n  breedCooldown: z.number().optional().describe(\"Seconds between breeding\"),\r\n});\r\n\r\n/**\r\n * Spawn configuration.\r\n *\r\n * There are two spawn-rule shapes: inline on an entity (this one, `entity.spawning`) and a\r\n * separate top-level `spawnRules[]` entry (SpawnRuleSchema). Use the inline form for a rule\r\n * bound to a single entity. Use the top-level form when the rule references an entity defined\r\n * elsewhere (e.g. a vanilla entity) or when you want the rule file separate from the entity.\r\n */\r\nexport const SpawnConfigSchema = z\r\n  .object({\r\n    biomes: z.array(z.string()).optional().describe(\"Biomes where entity spawns\"),\r\n    weight: z.number().int().optional().describe(\"Spawn weight (higher = more common)\"),\r\n    groupSize: z.object({ min: z.number().int(), max: z.number().int() }).optional().describe(\"Group size range\"),\r\n    lightLevel: z\r\n      .object({\r\n        min: z.number().int().min(0).max(15).optional(),\r\n        max: z.number().int().min(0).max(15).optional(),\r\n      })\r\n      .optional()\r\n      .describe(\"Light level range (0-15)\"),\r\n    heightRange: z.object({ min: z.number(), max: z.number() }).optional().describe(\"Y level range\"),\r\n    timeOfDay: z.enum([\"day\", \"night\", \"any\"]).optional().describe(\"When to spawn\"),\r\n    surface: z.boolean().optional().describe(\"Surface or underground\"),\r\n    spawnOn: z.array(z.string()).optional().describe(\"Block types to spawn on\"),\r\n    populationCap: z.number().int().optional().describe(\"Max population in area\"),\r\n    rarity: z.number().optional().describe(\"1 in N chance per spawn cycle\"),\r\n  })\r\n  .describe(\r\n    \"Inline spawn configuration for an entity. Use this as `entity.spawning` when the spawn rule belongs \" +\r\n      \"to a single custom entity. For spawn rules that reference external entities or that you want as \" +\r\n      \"separate files, use the top-level `spawnRules[]` (SpawnRuleSchema) instead.\"\r\n  );\r\n\r\n/**\r\n * Entity sounds.\r\n */\r\nexport const EntitySoundsSchema = z.object({\r\n  ambient: z.string().optional(),\r\n  hurt: z.string().optional(),\r\n  death: z.string().optional(),\r\n  step: z.string().optional(),\r\n  attack: z.string().optional(),\r\n});\r\n\r\n/**\r\n * Entity type definition.\r\n */\r\nexport const EntityTypeSchema = z\r\n  .object({\r\n    id: z.string().describe(\"Unique identifier (full ID becomes 'namespace:id')\"),\r\n    displayName: z.string().describe(\"Display name shown in-game\"),\r\n\r\n    // Trait-based\r\n    traits: z.array(EntityTraitSchema).optional().describe(\"Pre-built trait bundles to apply\"),\r\n\r\n    // Simplified properties\r\n    health: z.number().optional().describe(\"Health points\"),\r\n    attackDamage: z.number().optional().describe(\"Attack damage\"),\r\n    movementSpeed: z.number().optional().describe(\"Movement speed (blocks/sec)\"),\r\n    followRange: z.number().optional().describe(\"Follow/detection range\"),\r\n    knockbackResistance: z.number().min(0).max(1).optional().describe(\"Knockback resistance (0-1)\"),\r\n    scale: z.number().optional().describe(\"Scale multiplier\"),\r\n    collisionWidth: z.number().optional().describe(\"Collision box width\"),\r\n    collisionHeight: z.number().optional().describe(\"Collision box height\"),\r\n\r\n    behaviors: z.array(EntityBehaviorPresetSchema).optional().describe(\"AI behavior presets\"),\r\n    drops: z.array(DropSchema).optional().describe(\"What drops when killed\"),\r\n    appearance: EntityAppearanceSchema.optional().describe(\"Appearance specification\"),\r\n    families: z.array(z.string()).optional().describe(\"Entity type families\"),\r\n\r\n    hostile: z.boolean().optional().describe(\"Is hostile to players?\"),\r\n    tameable: z.union([z.boolean(), TameableConfigSchema]).optional().describe(\"Can be tamed\"),\r\n    rideable: z.union([z.boolean(), RideableConfigSchema]).optional().describe(\"Can be ridden\"),\r\n    breedable: z.union([z.boolean(), BreedableConfigSchema]).optional().describe(\"Can be bred\"),\r\n\r\n    // Native components (full control)\r\n    components: z.record(z.any()).optional().describe(\"Native Minecraft components (override traits)\"),\r\n    componentGroups: z.record(z.record(z.any())).optional().describe(\"Component groups for conditions\"),\r\n    events: z.record(z.any()).optional().describe(\"Events for component group changes\"),\r\n\r\n    // Resources\r\n    geometry: GeometrySpecSchema.optional().describe(\"Custom geometry\"),\r\n    texture: TextureSpecSchema.optional().describe(\"Custom texture\"),\r\n    sounds: EntitySoundsSchema.optional().describe(\"Sound definitions\"),\r\n\r\n    // Spawning\r\n    spawning: SpawnConfigSchema.optional().describe(\"Inline spawn rule\"),\r\n  })\r\n  .describe(\"Entity type definition with traits, simplified props, or native components\");\r\n\r\n// ============================================================================\r\n// BLOCK TYPE SCHEMAS\r\n// ============================================================================\r\n\r\n/**\r\n * Block traits.\r\n */\r\nexport const BlockTraitSchema = z\r\n  .enum([\r\n    \"solid\",\r\n    \"transparent\",\r\n    \"leaves\",\r\n    \"log\",\r\n    \"slab\",\r\n    \"stairs\",\r\n    \"fence\",\r\n    \"wall\",\r\n    \"door\",\r\n    \"trapdoor\",\r\n    \"container\",\r\n    \"workstation\",\r\n    \"light_source\",\r\n    \"gravity\",\r\n    \"liquid\",\r\n    \"redstone_signal\",\r\n    \"redstone_receiver\",\r\n    \"button\",\r\n    \"lever\",\r\n    \"pressure_plate\",\r\n  ])\r\n  .describe(\"Pre-packaged block behavior bundle\");\r\n\r\n/**\r\n * Block shape.\r\n */\r\nexport const BlockShapeSchema = z\r\n  .enum([\"cube\", \"slab\", \"stairs\", \"fence\", \"wall\", \"cross\", \"custom\"])\r\n  .describe(\"Block shape type\");\r\n\r\n/**\r\n * Block sound type.\r\n */\r\nexport const BlockSoundSchema = z\r\n  .enum([\"stone\", \"wood\", \"gravel\", \"grass\", \"sand\", \"glass\", \"metal\", \"cloth\", \"snow\", \"coral\"])\r\n  .describe(\"Sound set for block\");\r\n\r\n/**\r\n * Block texture.\r\n */\r\nexport const BlockTextureSchema = z\r\n  .object({\r\n    all: z.union([z.string(), TextureSpecSchema]).optional().describe(\"All six faces use this texture.\"),\r\n    up: z.union([z.string(), TextureSpecSchema]).optional().describe(\"Top face (overrides 'all').\"),\r\n    down: z.union([z.string(), TextureSpecSchema]).optional().describe(\"Bottom face (overrides 'all').\"),\r\n    north: z.union([z.string(), TextureSpecSchema]).optional().describe(\"North face (overrides 'all' and 'side').\"),\r\n    south: z.union([z.string(), TextureSpecSchema]).optional().describe(\"South face (overrides 'all' and 'side').\"),\r\n    east: z.union([z.string(), TextureSpecSchema]).optional().describe(\"East face (overrides 'all' and 'side').\"),\r\n    west: z.union([z.string(), TextureSpecSchema]).optional().describe(\"West face (overrides 'all' and 'side').\"),\r\n    side: z\r\n      .union([z.string(), TextureSpecSchema])\r\n      .optional()\r\n      .describe(\"Shorthand for the four side faces (north/south/east/west). Overrides 'all' for side faces.\"),\r\n  })\r\n  .describe(\r\n    \"Block texture specification. Precedence per face: individual face (up/down/north/south/east/west) > 'side' (for side faces) > 'all'. \" +\r\n      \"Note: the current placeholder PNG generator picks a single representative face in this order: all > side > up > north > south > east > west > down.\"\r\n  );\r\n\r\n/**\r\n * Flammable config.\r\n */\r\nexport const FlammableConfigSchema = z.object({\r\n  catchChance: z.number().min(0).max(1).describe(\"Chance to catch fire\"),\r\n  destroyChance: z.number().min(0).max(1).describe(\"Chance to be destroyed\"),\r\n});\r\n\r\n/**\r\n * Block type definition.\r\n */\r\nexport const BlockTypeSchema = z\r\n  .object({\r\n    id: z.string().describe(\"Unique identifier\"),\r\n    displayName: z.string().describe(\"Display name\"),\r\n\r\n    traits: z.array(BlockTraitSchema).optional().describe(\"Pre-built trait bundles\"),\r\n\r\n    destroyTime: z.number().optional().describe(\"Seconds to mine (0=instant, -1=unbreakable)\"),\r\n    explosionResistance: z.number().optional().describe(\"Explosion resistance\"),\r\n    friction: z.number().min(0).max(1).optional().describe(\"Friction (0-1). Default: 0.6\"),\r\n    lightEmission: z.number().int().min(0).max(15).optional().describe(\"Light emission (0-15)\"),\r\n    lightDampening: z.number().int().min(0).max(15).optional().describe(\"Light dampening (0-15)\"),\r\n    flammable: z.union([z.boolean(), FlammableConfigSchema]).optional().describe(\"Flammability\"),\r\n    mapColor: z\r\n      .string()\r\n      .optional()\r\n      .describe(\r\n        \"Map color (hex). Also used as the fallback color for the auto-generated placeholder texture when 'texture' is not provided.\"\r\n      ),\r\n    shape: BlockShapeSchema.optional().describe(\"Block shape\"),\r\n    drops: z.array(DropSchema).optional().describe(\"What drops when mined\"),\r\n\r\n    texture: BlockTextureSchema.optional().describe(\r\n      \"Texture specification. If omitted, a placeholder is generated from mapColor.\"\r\n    ),\r\n    geometry: GeometrySpecSchema.optional().describe(\"Custom geometry\"),\r\n    sounds: BlockSoundSchema.optional().describe(\"Sound set\"),\r\n\r\n    components: z.record(z.unknown()).optional().describe(\"Native Minecraft components\"),\r\n    permutations: z.array(z.record(z.unknown())).optional().describe(\"Block state permutations\"),\r\n    states: z.record(z.union([z.array(z.boolean()), z.array(z.number()), z.array(z.string())])).optional(),\r\n    events: z.record(z.unknown()).optional(),\r\n  })\r\n  .describe(\"Block type definition\");\r\n\r\n// ============================================================================\r\n// ITEM TYPE SCHEMAS\r\n// ============================================================================\r\n\r\n/**\r\n * Item traits.\r\n */\r\nexport const ItemTraitSchema = z.enum([\r\n  \"sword\",\r\n  \"pickaxe\",\r\n  \"axe\",\r\n  \"shovel\",\r\n  \"hoe\",\r\n  \"bow\",\r\n  \"crossbow\",\r\n  \"food\",\r\n  \"armor_helmet\",\r\n  \"armor_chestplate\",\r\n  \"armor_leggings\",\r\n  \"armor_boots\",\r\n  \"throwable\",\r\n  \"placeable\",\r\n]);\r\n\r\n/**\r\n * Item category.\r\n */\r\nexport const ItemCategorySchema = z.enum([\"construction\", \"nature\", \"equipment\", \"items\", \"none\"]);\r\n\r\n/**\r\n * Food effect.\r\n */\r\nexport const FoodEffectSchema = z.object({\r\n  name: z.string().describe(\"Effect name (e.g., 'speed', 'regeneration')\"),\r\n  duration: z.number().describe(\"Duration in seconds\"),\r\n  amplifier: z.number().int().optional().describe(\"Amplifier (0 = level 1)\"),\r\n  chance: z.number().min(0).max(1).optional().describe(\"Chance to apply\"),\r\n});\r\n\r\n/**\r\n * Food properties.\r\n */\r\nexport const FoodPropertiesSchema = z.object({\r\n  nutrition: z.number().int().describe(\"Hunger points restored\"),\r\n  saturation: z.number().optional().describe(\"Saturation modifier\"),\r\n  canAlwaysEat: z.boolean().optional().describe(\"Can eat when full\"),\r\n  effects: z.array(FoodEffectSchema).optional().describe(\"Status effects when eaten\"),\r\n});\r\n\r\n/**\r\n * Tool properties.\r\n */\r\nexport const ToolPropertiesSchema = z.object({\r\n  miningSpeed: z.number().optional().describe(\"Mining speed multiplier\"),\r\n  miningLevel: z.enum([\"wood\", \"stone\", \"iron\", \"diamond\", \"netherite\"]).optional(),\r\n  durability: z.number().int().describe(\"Tool durability\"),\r\n});\r\n\r\n/**\r\n * Weapon properties.\r\n */\r\nexport const WeaponPropertiesSchema = z.object({\r\n  damage: z.number().describe(\"Attack damage\"),\r\n  attackSpeed: z.number().optional().describe(\"Attacks per second\"),\r\n  durability: z.number().int().optional().describe(\"Weapon durability\"),\r\n  knockback: z.number().optional().describe(\"Knockback amount\"),\r\n});\r\n\r\n/**\r\n * Armor properties.\r\n */\r\nexport const ArmorPropertiesSchema = z.object({\r\n  defense: z.number().int().describe(\"Defense points\"),\r\n  slot: z.enum([\"helmet\", \"chestplate\", \"leggings\", \"boots\"]).describe(\"Armor slot\"),\r\n  durability: z.number().int().describe(\"Armor durability\"),\r\n  toughness: z.number().optional().describe(\"Armor toughness\"),\r\n});\r\n\r\n/**\r\n * Projectile properties (bow/crossbow/throwable items).\r\n */\r\nexport const ProjectilePropertiesSchema = z\r\n  .object({\r\n    projectile: z\r\n      .string()\r\n      .describe(\r\n        \"Entity ID to shoot/throw (e.g., 'minecraft:arrow', 'minecraft:snowball', or a custom 'namespace:arrow_of_doom').\"\r\n      ),\r\n    launchPower: z.number().optional().describe(\"Launch power multiplier. Default: 1.0.\"),\r\n    chargeable: z\r\n      .boolean()\r\n      .optional()\r\n      .describe(\r\n        \"True for bow/crossbow-style items that charge while held (emits minecraft:shooter + minecraft:chargeable). \" +\r\n          \"False/omitted for snowball-style throwables (emits minecraft:throwable).\"\r\n      ),\r\n  })\r\n  .describe(\"Projectile behavior for items that shoot or throw an entity.\");\r\n\r\n/**\r\n * Item type definition.\r\n */\r\nexport const ItemTypeSchema = z\r\n  .object({\r\n    id: z.string().describe(\"Unique identifier\"),\r\n    displayName: z.string().describe(\"Display name\"),\r\n\r\n    traits: z.array(ItemTraitSchema).optional().describe(\"Pre-built trait bundles\"),\r\n\r\n    maxStackSize: z.number().int().min(1).max(64).optional().describe(\"Max stack size. Default: 64\"),\r\n    category: ItemCategorySchema.optional().describe(\"Creative menu category\"),\r\n    durability: z.number().int().optional().describe(\"Durability\"),\r\n    food: FoodPropertiesSchema.optional().describe(\"Food properties\"),\r\n    tool: ToolPropertiesSchema.optional().describe(\"Tool properties\"),\r\n    weapon: WeaponPropertiesSchema.optional().describe(\"Weapon properties\"),\r\n    armor: ArmorPropertiesSchema.optional().describe(\"Armor properties\"),\r\n    projectile: ProjectilePropertiesSchema.optional().describe(\r\n      \"Projectile behavior \u2014 emits minecraft:shooter (+minecraft:chargeable when chargeable=true) or minecraft:throwable.\"\r\n    ),\r\n    glint: z.boolean().optional().describe(\"Enchanted glint effect\"),\r\n    fuel: z.number().int().optional().describe(\"Burn duration in ticks\"),\r\n\r\n    color: z\r\n      .string()\r\n      .optional()\r\n      .describe(\r\n        \"Primary color (hex, e.g., '#4A7BA5') for recoloring the auto-generated trait-based icon. \" +\r\n          \"Ignored when 'icon' is provided (icon takes precedence).\"\r\n      ),\r\n    icon: z\r\n      .union([z.string(), TextureSpecSchema])\r\n      .optional()\r\n      .describe(\r\n        \"Inventory icon. Three modes: (1) string = use an existing texture file path (no placeholder PNG is emitted); \" +\r\n          \"(2) ITextureSpec with 'file' = same as (1); (3) ITextureSpec with 'generate' and/or 'pixelArt' = procedurally generated placeholder. \" +\r\n          \"If this field is omitted entirely, a placeholder is auto-generated from 'traits' + 'color'.\"\r\n      ),\r\n    geometry: GeometrySpecSchema.optional().describe(\"3D model when held\"),\r\n\r\n    components: z.record(z.any()).optional().describe(\"Native Minecraft components\"),\r\n    events: z.record(z.any()).optional(),\r\n  })\r\n  .describe(\"Item type definition\");\r\n\r\n// ============================================================================\r\n// STRUCTURE SCHEMAS\r\n// ============================================================================\r\n\r\n/**\r\n * Block volume for inline structure definition.\r\n * Uses same format as MCP structure design tools.\r\n */\r\nexport const BlockVolumeSchema = z\r\n  .object({\r\n    southWestBottom: z\r\n      .object({\r\n        x: z.number(),\r\n        y: z.number(),\r\n        z: z.number(),\r\n      })\r\n      .describe(\"World position of south-west-bottom corner\"),\r\n    size: z\r\n      .object({\r\n        x: z.number().int(),\r\n        y: z.number().int(),\r\n        z: z.number().int(),\r\n      })\r\n      .optional()\r\n      .describe(\"Optional dimensions - inferred from data if not provided\"),\r\n    blockLayersBottomToTop: z\r\n      .array(z.array(z.string()))\r\n      .describe(\"Y layers from bottom to top. Each layer: rows from north to south. Each char: X from west to east\"),\r\n    key: z\r\n      .record(\r\n        z.object({\r\n          typeId: z.string().describe(\"Block type ID\"),\r\n          properties: z.record(z.union([z.string(), z.number(), z.boolean()])).optional(),\r\n        })\r\n      )\r\n      .describe(\"Map single characters to block types. Space = air\"),\r\n  })\r\n  .describe(\"Block volume using layer-by-layer character grid\");\r\n\r\n/**\r\n * Jigsaw connection.\r\n */\r\nexport const JigsawConnectionSchema = z.object({\r\n  name: z.string().describe(\"Connection name for matching\"),\r\n  position: z.object({ x: z.number(), y: z.number(), z: z.number() }).describe(\"Position in structure\"),\r\n  direction: z.enum([\"up\", \"down\", \"north\", \"south\", \"east\", \"west\"]).describe(\"Direction connection faces\"),\r\n  canConnectTo: z.array(z.string()).describe(\"Names of connections this can connect to\"),\r\n  required: z.boolean().optional().describe(\"Is this connection required?\"),\r\n});\r\n\r\n/**\r\n * Structure spawn.\r\n */\r\nexport const StructureSpawnSchema = z.object({\r\n  entity: z.string().describe(\"Entity ID to spawn\"),\r\n  count: z\r\n    .union([z.number().int(), z.object({ min: z.number().int(), max: z.number().int() })])\r\n    .describe(\"Spawn count\"),\r\n  position: z.object({ x: z.number(), y: z.number(), z: z.number() }).optional(),\r\n  spread: z.number().optional().describe(\"Spread radius\"),\r\n});\r\n\r\n/**\r\n * Structure loot.\r\n */\r\nexport const StructureLootSchema = z.object({\r\n  lootTable: z.string().describe(\"Loot table ID\"),\r\n  position: z.object({ x: z.number(), y: z.number(), z: z.number() }).describe(\"Container position\"),\r\n  containerType: z.enum([\"chest\", \"barrel\", \"spawner\"]).optional(),\r\n});\r\n\r\n/**\r\n * Jigsaw piece.\r\n */\r\nexport const JigsawPieceSchema = z\r\n  .object({\r\n    id: z.string().describe(\"Piece identifier\"),\r\n    structureFile: z.string().optional().describe(\"Path to .mcstructure file\"),\r\n    blocks: BlockVolumeSchema.optional().describe(\"Inline block volume definition\"),\r\n    connections: z.array(JigsawConnectionSchema).describe(\"Connection points\"),\r\n    weight: z.number().optional().describe(\"Weight for random selection. Default: 1\"),\r\n    maxCount: z.number().int().optional().describe(\"Max times this piece can appear\"),\r\n    spawns: z.array(StructureSpawnSchema).optional().describe(\"Entities to spawn\"),\r\n    loot: z.array(StructureLootSchema).optional().describe(\"Loot containers\"),\r\n  })\r\n  .describe(\"Jigsaw structure piece\");\r\n\r\n/**\r\n * Jigsaw definition.\r\n */\r\nexport const JigsawDefinitionSchema = z\r\n  .object({\r\n    pieces: z.array(JigsawPieceSchema).describe(\"All pieces in the structure\"),\r\n    startPiece: z.string().describe(\"ID of starting piece\"),\r\n    maxDepth: z.number().int().optional().describe(\"Maximum generation depth. Default: 7\"),\r\n    maxSize: z.object({ x: z.number(), y: z.number(), z: z.number() }).optional(),\r\n  })\r\n  .describe(\"Jigsaw structure definition - auto-creates template pools and connections\");\r\n\r\n/**\r\n * Structure generation.\r\n */\r\nexport const StructureGenerationSchema = z.object({\r\n  biomes: z.array(z.string()).optional().describe(\"Biomes where structure generates\"),\r\n  heightRange: z.object({ min: z.number(), max: z.number() }).optional(),\r\n  rarity: z.number().optional().describe(\"1 in N chunks. Default: 100\"),\r\n  terrainAdaptation: z.enum([\"none\", \"bury\", \"beard_thin\", \"beard_box\"]).optional(),\r\n  underground: z.boolean().optional(),\r\n});\r\n\r\n/**\r\n * Structure definition.\r\n */\r\nexport const StructureSchema = z\r\n  .object({\r\n    id: z.string().describe(\"Unique identifier\"),\r\n    displayName: z.string().optional(),\r\n    type: z.enum([\"simple\", \"jigsaw\"]).describe(\"Structure type\"),\r\n    structureFile: z.string().optional().describe(\"Path to .mcstructure (for simple)\"),\r\n    blocks: BlockVolumeSchema.optional().describe(\"Inline blocks (for simple)\"),\r\n    jigsaw: JigsawDefinitionSchema.optional().describe(\"Jigsaw definition\"),\r\n    generation: StructureGenerationSchema.optional().describe(\"World generation settings\"),\r\n  })\r\n  .describe(\"Structure definition - simple or jigsaw\");\r\n\r\n// ============================================================================\r\n// FEATURE SCHEMAS\r\n// ============================================================================\r\n\r\n/**\r\n * Feature placement.\r\n */\r\nexport const FeaturePlacementSchema = z.object({\r\n  type: z.enum([\"block\", \"structure\", \"tree\", \"ore\", \"vegetation\"]).describe(\"What to place\"),\r\n  id: z.string().describe(\"Block/structure ID\"),\r\n  count: z.union([z.number().int(), z.object({ min: z.number().int(), max: z.number().int() })]).optional(),\r\n  replacesBlocks: z.array(z.string()).optional().describe(\"Blocks that can be replaced (for ore)\"),\r\n});\r\n\r\n/**\r\n * Height placement.\r\n */\r\nexport const HeightPlacementSchema = z.object({\r\n  type: z.enum([\"surface\", \"underground\", \"fixed\", \"range\"]),\r\n  y: z.number().optional().describe(\"Y level for fixed\"),\r\n  min: z.number().optional(),\r\n  max: z.number().optional(),\r\n});\r\n\r\n/**\r\n * Scatter pattern.\r\n */\r\nexport const ScatterPatternSchema = z.object({\r\n  type: z.enum([\"uniform\", \"cluster\", \"line\"]),\r\n  radius: z.number().optional(),\r\n});\r\n\r\n/**\r\n * Feature spread - simplified feature hierarchy.\r\n */\r\nexport const FeatureSpreadSchema = z\r\n  .object({\r\n    places: z\r\n      .array(FeaturePlacementSchema)\r\n      .describe(\r\n        \"What to place. Use 'block' for single blocks, 'ore' for vein generation (pair with replacesBlocks), 'tree'/'vegetation' for botanical features, 'structure' for pre-built .mcstructure placements.\"\r\n      ),\r\n    count: z\r\n      .union([z.number().int(), z.object({ min: z.number().int(), max: z.number().int() })])\r\n      .optional()\r\n      .describe(\"Placements per generation attempt (fixed count or {min,max}).\"),\r\n    heightPlacement: HeightPlacementSchema.optional().describe(\r\n      \"Where vertically to place. 'surface' = top of world, 'underground' = below surface, 'fixed' = at Y=y, 'range' = within [min, max].\"\r\n    ),\r\n    scatter: ScatterPatternSchema.optional().describe(\r\n      \"Distribution around the base point. 'uniform' spreads across a radius, 'cluster' groups tightly, 'line' places in a line.\"\r\n    ),\r\n    biomes: z.array(z.string()).optional().describe(\"Biome IDs in which this feature generates.\"),\r\n    rarity: z.number().optional().describe(\"1 in N chunks - lower N = more frequent\"),\r\n  })\r\n  .describe(\r\n    \"Simplified feature spread. Best for common patterns: ore veins, surface vegetation, tree clusters. \" +\r\n      \"Generates the native feature + feature_rule JSONs and places them in the correct folders. \" +\r\n      \"Use 'nativeFeature' + 'nativeFeatureRule' on FeatureSchema only when you need raw JSON control (e.g., weighted_random, conditional features).\"\r\n  );\r\n\r\n/**\r\n * Feature definition.\r\n */\r\nexport const FeatureSchema = z\r\n  .object({\r\n    id: z.string().describe(\"Unique identifier\"),\r\n    displayName: z.string().optional(),\r\n    spread: FeatureSpreadSchema.optional().describe(\r\n      \"Simplified feature spread (recommended). Covers 80% of use cases with less boilerplate.\"\r\n    ),\r\n    nativeFeature: z\r\n      .record(z.any())\r\n      .optional()\r\n      .describe(\r\n        \"Escape hatch: raw Minecraft feature JSON (minecraft:scatter_feature, minecraft:ore_feature, etc.). Use only if 'spread' doesn't cover your case.\"\r\n      ),\r\n    nativeFeatureRule: z\r\n      .record(z.any())\r\n      .optional()\r\n      .describe(\r\n        \"Escape hatch: raw Minecraft feature_rule JSON (minecraft:feature_rule). Pair with nativeFeature when you need full control over conditions/distribution.\"\r\n      ),\r\n  })\r\n  .describe(\r\n    \"Feature definition for world generation. Prefer 'spread' over 'nativeFeature'/'nativeFeatureRule' when possible.\"\r\n  );\r\n\r\n// ============================================================================\r\n// LOOT TABLE SCHEMAS\r\n// ============================================================================\r\n\r\n/**\r\n * Loot entry.\r\n */\r\nexport const LootEntrySchema = z.object({\r\n  item: z.string().describe(\"Item ID\"),\r\n  weight: z.number().optional().describe(\"Weight for random selection\"),\r\n  count: z.union([z.number().int(), z.object({ min: z.number().int(), max: z.number().int() })]).optional(),\r\n  chance: z.number().min(0).max(1).optional(),\r\n  killedByPlayer: z.boolean().optional(),\r\n  lootingBonus: z.number().optional(),\r\n});\r\n\r\n/**\r\n * Loot condition.\r\n *\r\n * Conditions gate when a loot pool is rolled; all conditions in a pool's `conditions`\r\n * array must be true (logical AND). Use multiple pools if you need OR semantics.\r\n */\r\nexport const LootConditionSchema = z.union([\r\n  z\r\n    .object({ type: z.literal(\"killed_by_player\") })\r\n    .describe(\"Only roll this pool if the entity was killed directly by a player.\"),\r\n  z\r\n    .object({ type: z.literal(\"random_chance\"), chance: z.number() })\r\n    .describe(\"Roll this pool with the given probability (0-1).\"),\r\n  z\r\n    .object({ type: z.literal(\"looting_enchant\"), multiplier: z.number() })\r\n    .describe(\"Multiply rolls by the Looting enchantment level times the given multiplier.\"),\r\n]);\r\n\r\n/**\r\n * Loot pool.\r\n */\r\nexport const LootPoolSchema = z\r\n  .object({\r\n    rolls: z\r\n      .union([z.number().int(), z.object({ min: z.number().int(), max: z.number().int() })])\r\n      .describe(\"How many entries to pick from this pool (fixed count or {min,max} range).\"),\r\n    entries: z.array(LootEntrySchema).describe(\"Candidate items; `weight` controls relative pick probability.\"),\r\n    conditions: z\r\n      .array(LootConditionSchema)\r\n      .optional()\r\n      .describe(\r\n        \"Gate conditions for this pool. ALL listed conditions must be true (logical AND). \" +\r\n          \"Use separate pools if you need OR semantics.\"\r\n      ),\r\n  })\r\n  .describe(\"A single loot pool: rolls `rolls` times from `entries` if all `conditions` pass.\");\r\n\r\n/**\r\n * Loot table definition.\r\n */\r\nexport const LootTableSchema = z\r\n  .object({\r\n    id: z.string().describe(\"Unique identifier\"),\r\n    pools: z.array(LootPoolSchema).describe(\"Loot pools\"),\r\n  })\r\n  .describe(\"Loot table definition\");\r\n\r\n// ============================================================================\r\n// RECIPE SCHEMAS\r\n// ============================================================================\r\n\r\n/**\r\n * Recipe definition.\r\n *\r\n * The optional fields below are consumed differently per `type`:\r\n *   - type='shaped'    \u2192 uses `pattern` + `key`; ignores `ingredients`/`input`/`experience`/`cookTime`.\r\n *   - type='shapeless' \u2192 uses `ingredients`;     ignores `pattern`/`key`/`input`/`experience`/`cookTime`.\r\n *   - type='furnace'   \u2192 uses `input` (+ optional `experience`, `cookTime`); ignores `pattern`/`key`/`ingredients`.\r\n *   - type='brewing'   \u2192 uses `input` + `ingredients[0]` (reagent); other shape fields ignored.\r\n *   - type='smithing'  \u2192 uses `input` + `ingredients[0]` (addition); other shape fields ignored.\r\n */\r\nexport const RecipeSchema = z\r\n  .object({\r\n    id: z.string().describe(\"Unique identifier\"),\r\n    type: z\r\n      .enum([\"shaped\", \"shapeless\", \"furnace\", \"brewing\", \"smithing\"])\r\n      .describe(\r\n        \"Recipe category. Determines which of the remaining fields are used (see RecipeSchema comment). \" +\r\n          \"Providing fields that don't apply to the chosen type is ignored (not an error).\"\r\n      ),\r\n    result: z\r\n      .union([z.string(), z.object({ item: z.string(), count: z.number().int() })])\r\n      .describe(\"Output item. String = single item ID; object = item + count.\"),\r\n    pattern: z\r\n      .array(z.string())\r\n      .optional()\r\n      .describe(\"Pattern for type='shaped' (e.g., ['###', ' | ', ' | ']). Ignored for other types.\"),\r\n    key: z\r\n      .record(z.string())\r\n      .optional()\r\n      .describe(\"Key \u2192 item-id map for type='shaped' pattern characters. Ignored for other types.\"),\r\n    ingredients: z\r\n      .array(z.string())\r\n      .optional()\r\n      .describe(\r\n        \"Ingredients for type='shapeless'. For 'brewing' and 'smithing', ingredients[0] is the reagent/addition.\"\r\n      ),\r\n    input: z\r\n      .string()\r\n      .optional()\r\n      .describe(\"Input item for type='furnace' / 'brewing' / 'smithing'. Ignored for shaped/shapeless.\"),\r\n    experience: z.number().optional().describe(\"XP reward for type='furnace'. Ignored for other types.\"),\r\n    cookTime: z.number().int().optional().describe(\"Cook time (ticks) for type='furnace'. Ignored for other types.\"),\r\n    unlocksWith: z.array(z.string()).optional().describe(\"Items that unlock recipe in the recipe book.\"),\r\n  })\r\n  .describe(\"Recipe definition. See the RecipeSchema comment for which fields apply to each `type`.\");\r\n\r\n// ============================================================================\r\n// SPAWN RULE SCHEMAS\r\n// ============================================================================\r\n\r\n/**\r\n * Spawn rule definition.\r\n *\r\n * Top-level spawn rule that can reference any entity ID (custom or vanilla).\r\n * Use this form when the rule should live in a separate file or reference an entity\r\n * defined outside this pack. For rules tightly bound to a single custom entity,\r\n * prefer the inline `entity.spawning` (SpawnConfigSchema) form.\r\n */\r\nexport const SpawnRuleSchema = z\r\n  .object({\r\n    entity: z.string().describe(\"Entity ID this rule applies to (can be vanilla or custom, namespaced).\"),\r\n    biomes: z.array(z.string()).optional(),\r\n    weight: z.number().optional(),\r\n    groupSize: z.object({ min: z.number().int(), max: z.number().int() }).optional(),\r\n    lightLevel: z.object({ min: z.number().int().optional(), max: z.number().int().optional() }).optional(),\r\n    heightRange: z.object({ min: z.number().optional(), max: z.number().optional() }).optional(),\r\n    timeOfDay: z.enum([\"day\", \"night\", \"any\"]).optional(),\r\n    surface: z.boolean().optional(),\r\n    spawnOn: z.array(z.string()).optional(),\r\n    populationCap: z.number().int().optional(),\r\n  })\r\n  .describe(\r\n    \"Top-level spawn rule (emitted as a separate spawn_rules/*.json file). Prefer inline `entity.spawning` \" +\r\n      \"for rules bound to a single custom entity; use this form when the rule references a non-local entity \" +\r\n      \"or when you want the rule file decoupled from the entity definition.\"\r\n  );\r\n\r\n// ============================================================================\r\n// SHARED RESOURCES\r\n// ============================================================================\r\n\r\n/**\r\n * Sound definition.\r\n */\r\nexport const SoundDefinitionSchema = z.object({\r\n  file: z.string().optional(),\r\n  volume: z.number().min(0).max(1).optional(),\r\n  pitch: z.number().optional(),\r\n  category: z.enum([\"master\", \"music\", \"ambient\", \"hostile\", \"neutral\", \"player\"]).optional(),\r\n});\r\n\r\n/**\r\n * Shared resources.\r\n */\r\nexport const SharedResourcesSchema = z.object({\r\n  textures: z.record(TextureSpecSchema).optional(),\r\n  geometries: z.record(GeometrySpecSchema).optional(),\r\n  sounds: z.record(SoundDefinitionSchema).optional(),\r\n});\r\n\r\n// ============================================================================\r\n// GENERATION OPTIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Generation options.\r\n */\r\nexport const GenerationOptionsSchema = z.object({\r\n  generatePlaceholderTextures: z.boolean().optional().describe(\"Auto-generate placeholder textures. Default: true\"),\r\n  generateDefaultGeometry: z.boolean().optional().describe(\"Auto-generate default geometry. Default: true\"),\r\n  createDefaultSpawnRules: z.boolean().optional().describe(\"Auto-create spawn rules. Default: false\"),\r\n  createLootTablesFromDrops: z.boolean().optional().describe(\"Create loot tables from drops. Default: true\"),\r\n  textureResolution: z\r\n    .union([z.literal(1), z.literal(2), z.literal(4)])\r\n    .optional()\r\n    .describe(\"Pixels per unit. Default: 2\"),\r\n});\r\n\r\n// ============================================================================\r\n// ROOT SCHEMA\r\n// ============================================================================\r\n\r\n/**\r\n * Complete Minecraft content definition schema.\r\n */\r\nexport const MinecraftContentSchema = z\r\n  .object({\r\n    schemaVersion: z.literal(\"1.0.0\").describe(\"Schema version\"),\r\n    namespace: z\r\n      .string()\r\n      .optional()\r\n      .describe(\"Namespace for all content (e.g., 'orc_dungeon'). Optional if adding to existing project\"),\r\n    displayName: z.string().optional().describe(\"Human-readable pack name\"),\r\n    description: z.string().optional().describe(\"Pack description\"),\r\n\r\n    entityTypes: z.array(EntityTypeSchema).optional().describe(\"Entity type definitions\"),\r\n    blockTypes: z.array(BlockTypeSchema).optional().describe(\"Block type definitions\"),\r\n    itemTypes: z.array(ItemTypeSchema).optional().describe(\"Item type definitions\"),\r\n    structures: z.array(StructureSchema).optional().describe(\"Structure definitions\"),\r\n    features: z.array(FeatureSchema).optional().describe(\"Feature definitions for world generation\"),\r\n    lootTables: z.array(LootTableSchema).optional().describe(\"Loot table definitions\"),\r\n    recipes: z.array(RecipeSchema).optional().describe(\"Recipe definitions\"),\r\n    spawnRules: z.array(SpawnRuleSchema).optional().describe(\"Spawn rule definitions\"),\r\n\r\n    sharedResources: SharedResourcesSchema.optional().describe(\"Resources shared by multiple content items\"),\r\n    options: GenerationOptionsSchema.optional().describe(\"Generation options\"),\r\n  })\r\n  .describe(\r\n    \"Minecraft content meta-schema - a simplified format for AI-friendly content creation. \" +\r\n      \"Supports traits (pre-packaged bundles), simplified properties, and native Minecraft components.\"\r\n  );\r\n\r\n/**\r\n * Type inference from schema.\r\n */\r\nexport type MinecraftContent = z.infer<typeof MinecraftContentSchema>;\r\nexport type EntityType = z.infer<typeof EntityTypeSchema>;\r\nexport type BlockType = z.infer<typeof BlockTypeSchema>;\r\nexport type ItemType = z.infer<typeof ItemTypeSchema>;\r\nexport type Structure = z.infer<typeof StructureSchema>;\r\nexport type Feature = z.infer<typeof FeatureSchema>;\r\nexport type LootTable = z.infer<typeof LootTableSchema>;\r\nexport type Recipe = z.infer<typeof RecipeSchema>;\r\nexport type SpawnRule = z.infer<typeof SpawnRuleSchema>;\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ContentSchemaInferrer - Analyzes Minecraft content and infers meta-schema representation.\r\n *\r\n * This module is the inverse of ContentGenerator: instead of generating native Minecraft\r\n * content from a meta-schema, it analyzes existing native content and produces an\r\n * equivalent IMinecraftContentDefinition.\r\n *\r\n * Use cases:\r\n * 1. Import existing projects into simplified format\r\n * 2. Generate documentation for addons\r\n * 3. Enable AI-assisted editing of existing content\r\n * 4. Modernize legacy content with trait-based improvements\r\n *\r\n * @see ContentGenerator.ts for the forward transformation\r\n * @see TraitDetector.ts for trait detection logic\r\n * @see IContentMetaSchema.ts for schema type definitions\r\n */\r\n\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport EntityTypeDefinition from \"./EntityTypeDefinition\";\r\nimport BlockTypeDefinition from \"./BlockTypeDefinition\";\r\nimport ItemTypeDefinition from \"./ItemTypeDefinition\";\r\nimport TraitDetector, { ITraitDetectionResult } from \"./TraitDetector\";\r\nimport {\r\n  IMinecraftContentDefinition,\r\n  IEntityTypeDefinition,\r\n  IBlockTypeDefinition,\r\n  IItemTypeDefinition,\r\n  IRecipeDefinition,\r\n  ILootTableDefinition,\r\n  ISpawnRuleDefinition,\r\n  IFeatureDefinition,\r\n  ILootEntry,\r\n  EntityTraitId,\r\n  EntityBehaviorPreset,\r\n} from \"./IContentMetaSchema\";\r\n\r\n// ============================================================================\r\n// INFERRER OPTIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Options for controlling schema inference behavior.\r\n */\r\nexport interface IInferrerOptions {\r\n  /** Minimum confidence threshold for trait detection (0-1). Default: 0.6 */\r\n  minTraitConfidence?: number;\r\n\r\n  /** Include raw components not explained by traits. Default: true */\r\n  includeRawComponents?: boolean;\r\n\r\n  /** Try to detect namespace from identifiers. Default: true */\r\n  inferNamespace?: boolean;\r\n\r\n  /** Include behavior presets in addition to traits. Default: true */\r\n  includeBehaviorPresets?: boolean;\r\n\r\n  /** Include component groups as raw data. Default: false */\r\n  includeComponentGroups?: boolean;\r\n\r\n  /** Include events as raw data. Default: false */\r\n  includeEvents?: boolean;\r\n}\r\n\r\n/**\r\n * Default inferrer options.\r\n */\r\nexport const DEFAULT_INFERRER_OPTIONS: Required<IInferrerOptions> = {\r\n  minTraitConfidence: 0.6,\r\n  includeRawComponents: true,\r\n  inferNamespace: true,\r\n  includeBehaviorPresets: true,\r\n  includeComponentGroups: false,\r\n  includeEvents: false,\r\n};\r\n\r\n// ============================================================================\r\n// INFERENCE RESULT\r\n// ============================================================================\r\n\r\n/**\r\n * Extended result with inference metadata.\r\n */\r\nexport interface IInferenceResult {\r\n  /** The inferred content definition */\r\n  definition: IMinecraftContentDefinition;\r\n\r\n  /** Metadata about the inference process */\r\n  metadata: IInferenceMetadata;\r\n}\r\n\r\n/**\r\n * Metadata about how the schema was inferred.\r\n */\r\nexport interface IInferenceMetadata {\r\n  /** Number of entities analyzed */\r\n  entitiesAnalyzed: number;\r\n\r\n  /** Number of blocks analyzed */\r\n  blocksAnalyzed: number;\r\n\r\n  /** Number of items analyzed */\r\n  itemsAnalyzed: number;\r\n\r\n  /** Number of spawn rules analyzed */\r\n  spawnRulesAnalyzed?: number;\r\n\r\n  /** Number of loot tables analyzed */\r\n  lootTablesAnalyzed?: number;\r\n\r\n  /** Number of recipes analyzed */\r\n  recipesAnalyzed?: number;\r\n\r\n  /** Number of features analyzed */\r\n  featuresAnalyzed?: number;\r\n\r\n  /** Warnings encountered during inference */\r\n  warnings: string[];\r\n\r\n  /** Traits detected across all content */\r\n  allDetectedTraits: {\r\n    entity: Record<string, number>; // trait -> count\r\n    block: Record<string, number>;\r\n    item: Record<string, number>;\r\n  };\r\n\r\n  /** Time taken for inference in milliseconds */\r\n  inferenceTimeMs: number;\r\n}\r\n\r\n// ============================================================================\r\n// CONTENT SCHEMA INFERRER\r\n// ============================================================================\r\n\r\n/**\r\n * ContentSchemaInferrer - Main class for analyzing content and inferring schema.\r\n */\r\nexport default class ContentSchemaInferrer {\r\n  private _options: Required<IInferrerOptions>;\r\n\r\n  constructor(options?: IInferrerOptions) {\r\n    this._options = { ...DEFAULT_INFERRER_OPTIONS, ...options };\r\n  }\r\n\r\n  /**\r\n   * Infer a content schema from a project.\r\n   */\r\n  async inferFromProject(project: Project): Promise<IInferenceResult> {\r\n    const startTime = Date.now();\r\n    const warnings: string[] = [];\r\n    const traitCounts = {\r\n      entity: {} as Record<string, number>,\r\n      block: {} as Record<string, number>,\r\n      item: {} as Record<string, number>,\r\n    };\r\n\r\n    // Ensure project items are loaded\r\n    await project.inferProjectItemsFromFilesRootFolder();\r\n\r\n    // Analyze entities\r\n    const entityItems = project.items.filter((item) => item.itemType === ProjectItemType.entityTypeBehavior);\r\n    const entityTypes: IEntityTypeDefinition[] = [];\r\n\r\n    for (const item of entityItems) {\r\n      try {\r\n        const entityDef = await this.inferEntityFromItem(item);\r\n        if (entityDef) {\r\n          entityTypes.push(entityDef.definition);\r\n\r\n          // Count traits\r\n          if (entityDef.definition.traits) {\r\n            for (const trait of entityDef.definition.traits) {\r\n              traitCounts.entity[trait] = (traitCounts.entity[trait] || 0) + 1;\r\n            }\r\n          }\r\n        }\r\n      } catch (e) {\r\n        warnings.push(`Failed to analyze entity ${item.name}: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Analyze blocks\r\n    const blockItems = project.items.filter((item) => item.itemType === ProjectItemType.blockTypeBehavior);\r\n    const blockTypes: IBlockTypeDefinition[] = [];\r\n\r\n    for (const item of blockItems) {\r\n      try {\r\n        const blockDef = await this.inferBlockFromItem(item);\r\n        if (blockDef) {\r\n          blockTypes.push(blockDef.definition);\r\n\r\n          if (blockDef.definition.traits) {\r\n            for (const trait of blockDef.definition.traits) {\r\n              traitCounts.block[trait] = (traitCounts.block[trait] || 0) + 1;\r\n            }\r\n          }\r\n        }\r\n      } catch (e) {\r\n        warnings.push(`Failed to analyze block ${item.name}: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Analyze items\r\n    const itemItems = project.items.filter((item) => item.itemType === ProjectItemType.itemTypeBehavior);\r\n    const itemTypes: IItemTypeDefinition[] = [];\r\n\r\n    for (const item of itemItems) {\r\n      try {\r\n        const itemDef = await this.inferItemFromItem(item);\r\n        if (itemDef) {\r\n          itemTypes.push(itemDef.definition);\r\n\r\n          if (itemDef.definition.traits) {\r\n            for (const trait of itemDef.definition.traits) {\r\n              traitCounts.item[trait] = (traitCounts.item[trait] || 0) + 1;\r\n            }\r\n          }\r\n        }\r\n      } catch (e) {\r\n        warnings.push(`Failed to analyze item ${item.name}: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Analyze spawn rules\r\n    const spawnRuleItems = project.items.filter((item) => item.itemType === ProjectItemType.spawnRuleBehavior);\r\n    const spawnRules: ISpawnRuleDefinition[] = [];\r\n\r\n    for (const item of spawnRuleItems) {\r\n      try {\r\n        const spawnRule = await this.inferSpawnRuleFromItem(item);\r\n        if (spawnRule) {\r\n          spawnRules.push(spawnRule);\r\n        }\r\n      } catch (e) {\r\n        warnings.push(`Failed to analyze spawn rule ${item.name}: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Analyze loot tables\r\n    const lootTableItems = project.items.filter((item) => item.itemType === ProjectItemType.lootTableBehavior);\r\n    const lootTables: ILootTableDefinition[] = [];\r\n\r\n    for (const item of lootTableItems) {\r\n      try {\r\n        const lootTable = await this.inferLootTableFromItem(item);\r\n        if (lootTable) {\r\n          lootTables.push(lootTable);\r\n        }\r\n      } catch (e) {\r\n        warnings.push(`Failed to analyze loot table ${item.name}: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Analyze recipes\r\n    const recipeItems = project.items.filter((item) => item.itemType === ProjectItemType.recipeBehavior);\r\n    const recipes: IRecipeDefinition[] = [];\r\n\r\n    for (const item of recipeItems) {\r\n      try {\r\n        const recipe = await this.inferRecipeFromItem(item);\r\n        if (recipe) {\r\n          recipes.push(recipe);\r\n        }\r\n      } catch (e) {\r\n        warnings.push(`Failed to analyze recipe ${item.name}: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Analyze features\r\n    const featureItems = project.items.filter((item) => item.itemType === ProjectItemType.featureBehavior);\r\n    const features: IFeatureDefinition[] = [];\r\n\r\n    for (const item of featureItems) {\r\n      try {\r\n        const feature = await this.inferFeatureFromItem(item);\r\n        if (feature) {\r\n          features.push(feature);\r\n        }\r\n      } catch (e) {\r\n        warnings.push(`Failed to analyze feature ${item.name}: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Infer namespace\r\n    let namespace: string | undefined;\r\n    if (this._options.inferNamespace) {\r\n      namespace = this.inferNamespace(entityTypes, blockTypes, itemTypes);\r\n    }\r\n\r\n    // Build the content definition\r\n    const definition: IMinecraftContentDefinition = {\r\n      schemaVersion: \"1.0.0\",\r\n      namespace,\r\n      entityTypes: entityTypes.length > 0 ? entityTypes : undefined,\r\n      blockTypes: blockTypes.length > 0 ? blockTypes : undefined,\r\n      itemTypes: itemTypes.length > 0 ? itemTypes : undefined,\r\n      spawnRules: spawnRules.length > 0 ? spawnRules : undefined,\r\n      lootTables: lootTables.length > 0 ? lootTables : undefined,\r\n      recipes: recipes.length > 0 ? recipes : undefined,\r\n      features: features.length > 0 ? features : undefined,\r\n    };\r\n\r\n    const endTime = Date.now();\r\n\r\n    return {\r\n      definition,\r\n      metadata: {\r\n        entitiesAnalyzed: entityItems.length,\r\n        blocksAnalyzed: blockItems.length,\r\n        itemsAnalyzed: itemItems.length,\r\n        spawnRulesAnalyzed: spawnRuleItems.length,\r\n        lootTablesAnalyzed: lootTableItems.length,\r\n        recipesAnalyzed: recipeItems.length,\r\n        featuresAnalyzed: featureItems.length,\r\n        warnings,\r\n        allDetectedTraits: traitCounts,\r\n        inferenceTimeMs: endTime - startTime,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Infer entity type definition from a project item.\r\n   */\r\n  async inferEntityFromItem(\r\n    item: ProjectItem\r\n  ): Promise<{ definition: IEntityTypeDefinition; detectionDetails: ITraitDetectionResult<EntityTraitId>[] } | null> {\r\n    if (!item.primaryFile) return null;\r\n\r\n    await item.loadContent();\r\n    if (!item.primaryFile.isContentLoaded) {\r\n      await item.primaryFile.loadContent();\r\n    }\r\n\r\n    const entityDef = await EntityTypeDefinition.ensureOnFile(item.primaryFile);\r\n    if (!entityDef || !entityDef.data) return null;\r\n\r\n    return this.inferEntityFromDefinition(entityDef);\r\n  }\r\n\r\n  /**\r\n   * Infer entity type from an EntityTypeDefinition.\r\n   */\r\n  inferEntityFromDefinition(\r\n    entityDef: EntityTypeDefinition\r\n  ): { definition: IEntityTypeDefinition; detectionDetails: ITraitDetectionResult<EntityTraitId>[] } | null {\r\n    const data = entityDef.data;\r\n    if (!data) return null;\r\n\r\n    const wrapper = (entityDef as any)._wrapper;\r\n    const entityData = wrapper?.[\"minecraft:entity\"];\r\n    if (!entityData) return null;\r\n\r\n    // Get identifier\r\n    const fullId = entityData.description?.identifier || \"\";\r\n    const [namespace, shortId] = fullId.includes(\":\") ? fullId.split(\":\") : [\"custom\", fullId];\r\n\r\n    // Get components\r\n    const components = entityData.components || {};\r\n    const componentGroups = entityData.component_groups || {};\r\n\r\n    // Detect traits\r\n    const traitResults = TraitDetector.detectEntityTraits(\r\n      components,\r\n      componentGroups,\r\n      this._options.minTraitConfidence\r\n    );\r\n    const traits = traitResults.map((r) => r.traitId);\r\n\r\n    // Detect behavior presets\r\n    let behaviors: EntityBehaviorPreset[] | undefined;\r\n    if (this._options.includeBehaviorPresets) {\r\n      const behaviorResults = TraitDetector.detectBehaviorPresets(components, this._options.minTraitConfidence);\r\n      behaviors = behaviorResults.length > 0 ? behaviorResults.map((r) => r.traitId) : undefined;\r\n    }\r\n\r\n    // Extract simplified properties\r\n    const props = TraitDetector.extractEntityProperties(components);\r\n\r\n    // Get unexplained components\r\n    let rawComponents: Record<string, any> | undefined;\r\n    if (this._options.includeRawComponents) {\r\n      const allDetections = [...traitResults];\r\n      const unexplained = TraitDetector.getUnexplainedComponents(components, allDetections);\r\n\r\n      if (unexplained.length > 0) {\r\n        rawComponents = {};\r\n        for (const compName of unexplained) {\r\n          // Filter out very common components that are implicit\r\n          if (!this.isImplicitComponent(compName)) {\r\n            rawComponents[compName] = components[compName];\r\n          }\r\n        }\r\n        if (Object.keys(rawComponents).length === 0) {\r\n          rawComponents = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Build the inferred definition\r\n    const definition: IEntityTypeDefinition = {\r\n      id: shortId,\r\n      displayName: this.formatDisplayName(shortId),\r\n    };\r\n\r\n    // Add detected traits\r\n    if (traits.length > 0) {\r\n      definition.traits = traits;\r\n    }\r\n\r\n    // Add behaviors\r\n    if (behaviors && behaviors.length > 0) {\r\n      definition.behaviors = behaviors;\r\n    }\r\n\r\n    // Add simplified properties (only if different from defaults)\r\n    if (props.health !== undefined && props.health !== 20) {\r\n      definition.health = props.health;\r\n    }\r\n    if (props.attackDamage !== undefined && props.attackDamage !== 3) {\r\n      definition.attackDamage = props.attackDamage;\r\n    }\r\n    if (props.movementSpeed !== undefined && props.movementSpeed !== 0.25) {\r\n      definition.movementSpeed = props.movementSpeed;\r\n    }\r\n    if (props.scale !== undefined) {\r\n      definition.scale = props.scale;\r\n    }\r\n    if (props.followRange !== undefined) {\r\n      definition.followRange = props.followRange;\r\n    }\r\n    if (props.knockbackResistance !== undefined) {\r\n      definition.knockbackResistance = props.knockbackResistance;\r\n    }\r\n    if (props.collisionWidth !== undefined || props.collisionHeight !== undefined) {\r\n      definition.collisionWidth = props.collisionWidth;\r\n      definition.collisionHeight = props.collisionHeight;\r\n    }\r\n    if (props.families && props.families.length > 0) {\r\n      definition.families = props.families;\r\n    }\r\n\r\n    // Add raw components if any\r\n    if (rawComponents) {\r\n      definition.components = rawComponents;\r\n    }\r\n\r\n    // Add component groups if requested\r\n    if (this._options.includeComponentGroups && Object.keys(componentGroups).length > 0) {\r\n      definition.componentGroups = componentGroups;\r\n    }\r\n\r\n    // Add events if requested\r\n    if (this._options.includeEvents) {\r\n      const events = entityData.events;\r\n      if (events && Object.keys(events).length > 0) {\r\n        definition.events = events;\r\n      }\r\n    }\r\n\r\n    return {\r\n      definition,\r\n      detectionDetails: traitResults,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Infer block type definition from a project item.\r\n   */\r\n  async inferBlockFromItem(item: ProjectItem): Promise<{ definition: IBlockTypeDefinition } | null> {\r\n    if (!item.primaryFile) return null;\r\n\r\n    await item.loadContent();\r\n    if (!item.primaryFile.isContentLoaded) {\r\n      await item.primaryFile.loadContent();\r\n    }\r\n\r\n    const blockDef = await BlockTypeDefinition.ensureOnFile(item.primaryFile);\r\n    if (!blockDef || !blockDef.data) return null;\r\n\r\n    return this.inferBlockFromDefinition(blockDef);\r\n  }\r\n\r\n  /**\r\n   * Infer block type from a BlockTypeDefinition.\r\n   */\r\n  inferBlockFromDefinition(blockDef: BlockTypeDefinition): { definition: IBlockTypeDefinition } | null {\r\n    const wrapper = (blockDef as any)._wrapper;\r\n    const blockData = wrapper?.[\"minecraft:block\"];\r\n    if (!blockData) return null;\r\n\r\n    // Get identifier\r\n    const fullId = blockData.description?.identifier || \"\";\r\n    const [namespace, shortId] = fullId.includes(\":\") ? fullId.split(\":\") : [\"custom\", fullId];\r\n\r\n    // Get components\r\n    const components = blockData.components || {};\r\n\r\n    // Detect block traits\r\n    const detectedTraits = TraitDetector.detectBlockTraits(components, this._options.minTraitConfidence);\r\n    const traitIds = detectedTraits.map((t) => t.traitId);\r\n\r\n    // Extract simplified properties\r\n    const props = TraitDetector.extractBlockProperties(components);\r\n\r\n    // Build the inferred definition\r\n    const definition: IBlockTypeDefinition = {\r\n      id: shortId,\r\n      displayName: this.formatDisplayName(shortId),\r\n    };\r\n\r\n    // Add detected traits\r\n    if (traitIds.length > 0) {\r\n      definition.traits = traitIds;\r\n    }\r\n\r\n    // Add properties\r\n    if (props.destroyTime !== undefined) {\r\n      definition.destroyTime = props.destroyTime;\r\n    }\r\n    if (props.explosionResistance !== undefined) {\r\n      definition.explosionResistance = props.explosionResistance;\r\n    }\r\n    if (props.lightEmission !== undefined && props.lightEmission > 0) {\r\n      definition.lightEmission = props.lightEmission;\r\n    }\r\n    if (props.lightDampening !== undefined) {\r\n      definition.lightDampening = props.lightDampening;\r\n    }\r\n    if (props.friction !== undefined && props.friction !== 0.6) {\r\n      definition.friction = props.friction;\r\n    }\r\n    if (props.mapColor !== undefined) {\r\n      definition.mapColor = props.mapColor;\r\n    }\r\n\r\n    // Add components if requested\r\n    if (this._options.includeRawComponents) {\r\n      // Filter to non-default components\r\n      const significantComponents: Record<string, any> = {};\r\n      for (const [key, value] of Object.entries(components)) {\r\n        if (!this.isImplicitBlockComponent(key)) {\r\n          significantComponents[key] = value;\r\n        }\r\n      }\r\n      if (Object.keys(significantComponents).length > 0) {\r\n        definition.components = significantComponents;\r\n      }\r\n    }\r\n\r\n    return { definition };\r\n  }\r\n\r\n  /**\r\n   * Infer item type definition from a project item.\r\n   */\r\n  async inferItemFromItem(item: ProjectItem): Promise<{ definition: IItemTypeDefinition } | null> {\r\n    if (!item.primaryFile) return null;\r\n\r\n    await item.loadContent();\r\n    if (!item.primaryFile.isContentLoaded) {\r\n      await item.primaryFile.loadContent();\r\n    }\r\n\r\n    const itemDef = await ItemTypeDefinition.ensureOnFile(item.primaryFile);\r\n    if (!itemDef || !itemDef.data) return null;\r\n\r\n    return this.inferItemFromDefinition(itemDef);\r\n  }\r\n\r\n  /**\r\n   * Infer item type from an ItemTypeDefinition.\r\n   */\r\n  inferItemFromDefinition(itemDef: ItemTypeDefinition): { definition: IItemTypeDefinition } | null {\r\n    const wrapper = (itemDef as any)._wrapper;\r\n    const itemData = wrapper?.[\"minecraft:item\"];\r\n    if (!itemData) return null;\r\n\r\n    // Get identifier\r\n    const fullId = itemData.description?.identifier || \"\";\r\n    const [namespace, shortId] = fullId.includes(\":\") ? fullId.split(\":\") : [\"custom\", fullId];\r\n\r\n    // Get components\r\n    const components = itemData.components || {};\r\n\r\n    // Detect item traits\r\n    const detectedTraits = TraitDetector.detectItemTraits(components, this._options.minTraitConfidence);\r\n    const traitIds = detectedTraits.map((t) => t.traitId);\r\n\r\n    // Extract simplified properties\r\n    const props = TraitDetector.extractItemProperties(components);\r\n\r\n    // Build the inferred definition\r\n    const definition: IItemTypeDefinition = {\r\n      id: shortId,\r\n      displayName: this.formatDisplayName(shortId),\r\n    };\r\n\r\n    // Add detected traits\r\n    if (traitIds.length > 0) {\r\n      definition.traits = traitIds;\r\n    }\r\n\r\n    // Add properties\r\n    if (props.maxStackSize !== undefined && props.maxStackSize !== 64) {\r\n      definition.maxStackSize = props.maxStackSize;\r\n    }\r\n    if (props.durability !== undefined) {\r\n      definition.durability = props.durability;\r\n    }\r\n\r\n    // Food properties\r\n    if (props.nutrition !== undefined) {\r\n      definition.food = {\r\n        nutrition: props.nutrition,\r\n        saturation: props.saturation,\r\n      };\r\n    }\r\n\r\n    // Weapon properties\r\n    if (props.damage !== undefined) {\r\n      definition.weapon = {\r\n        damage: props.damage,\r\n      };\r\n    }\r\n\r\n    // Add components if requested\r\n    if (this._options.includeRawComponents) {\r\n      const significantComponents: Record<string, any> = {};\r\n      for (const [key, value] of Object.entries(components)) {\r\n        if (!this.isImplicitItemComponent(key)) {\r\n          significantComponents[key] = value;\r\n        }\r\n      }\r\n      if (Object.keys(significantComponents).length > 0) {\r\n        definition.components = significantComponents;\r\n      }\r\n    }\r\n\r\n    return { definition };\r\n  }\r\n\r\n  // ============================================================================\r\n  // WORLD GEN CONTENT INFERENCE\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Infer spawn rule definition from a project item.\r\n   */\r\n  async inferSpawnRuleFromItem(item: ProjectItem): Promise<ISpawnRuleDefinition | null> {\r\n    if (!item.primaryFile) return null;\r\n\r\n    await item.loadContent();\r\n    if (!item.primaryFile.isContentLoaded) {\r\n      await item.primaryFile.loadContent();\r\n    }\r\n\r\n    const content = item.primaryFile.content;\r\n    if (typeof content !== \"string\") return null;\r\n\r\n    try {\r\n      const data = JSON.parse(content);\r\n      const spawnRule = data[\"minecraft:spawn_rules\"];\r\n      if (!spawnRule) return null;\r\n\r\n      const description = spawnRule.description || {};\r\n      const conditions = spawnRule.conditions || [];\r\n\r\n      const definition: ISpawnRuleDefinition = {\r\n        entity: description.identifier?.replace(/^[^:]+:/, \"\") || item.name.replace(\".json\", \"\"),\r\n      };\r\n\r\n      // Extract spawn conditions from the first condition group\r\n      if (conditions.length > 0) {\r\n        const condition = conditions[0];\r\n\r\n        // Biome filter\r\n        if (condition[\"minecraft:biome_filter\"]) {\r\n          const biomeFilter = condition[\"minecraft:biome_filter\"];\r\n          const biomes = this.extractBiomesFromFilter(biomeFilter);\r\n          if (biomes.length > 0) {\r\n            definition.biomes = biomes;\r\n          }\r\n        }\r\n\r\n        // Brightness filter (light level)\r\n        if (condition[\"minecraft:brightness_filter\"]) {\r\n          const brightness = condition[\"minecraft:brightness_filter\"];\r\n          definition.lightLevel = {\r\n            min: brightness.min ?? 0,\r\n            max: brightness.max ?? 15,\r\n          };\r\n        }\r\n\r\n        // Height filter\r\n        if (condition[\"minecraft:height_filter\"]) {\r\n          const height = condition[\"minecraft:height_filter\"];\r\n          definition.heightRange = {\r\n            min: height.min ?? -64,\r\n            max: height.max ?? 320,\r\n          };\r\n        }\r\n\r\n        // Weight\r\n        if (condition[\"minecraft:weight\"]) {\r\n          definition.weight = condition[\"minecraft:weight\"].default;\r\n        }\r\n\r\n        // Herd/group size\r\n        if (condition[\"minecraft:herd\"]) {\r\n          const herd = condition[\"minecraft:herd\"];\r\n          definition.groupSize = {\r\n            min: herd.min_size ?? 1,\r\n            max: herd.max_size ?? 1,\r\n          };\r\n        }\r\n\r\n        // Spawn on block\r\n        if (condition[\"minecraft:spawns_on_block_filter\"]) {\r\n          const blocks = condition[\"minecraft:spawns_on_block_filter\"];\r\n          if (Array.isArray(blocks)) {\r\n            definition.spawnOn = blocks.map((b: string) => b.replace(\"minecraft:\", \"\"));\r\n          } else if (typeof blocks === \"string\") {\r\n            definition.spawnOn = [blocks.replace(\"minecraft:\", \"\")];\r\n          }\r\n        }\r\n\r\n        // Surface/underground\r\n        if (condition[\"minecraft:spawns_on_surface\"]) {\r\n          definition.surface = true;\r\n        }\r\n        if (condition[\"minecraft:spawns_underground\"]) {\r\n          definition.surface = false;\r\n        }\r\n\r\n        // Time of day\r\n        if (condition[\"minecraft:difficulty_filter\"]) {\r\n          // Use difficulty as a proxy for time preferences sometimes\r\n        }\r\n      }\r\n\r\n      return definition;\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Extract biome names from a biome filter.\r\n   */\r\n  private extractBiomesFromFilter(filter: any): string[] {\r\n    const biomes: string[] = [];\r\n\r\n    if (!filter) return biomes;\r\n\r\n    if (filter.test === \"has_biome_tag\" && filter.value) {\r\n      biomes.push(filter.value);\r\n    }\r\n\r\n    if (filter.any_of) {\r\n      for (const subFilter of filter.any_of) {\r\n        biomes.push(...this.extractBiomesFromFilter(subFilter));\r\n      }\r\n    }\r\n\r\n    if (filter.all_of) {\r\n      for (const subFilter of filter.all_of) {\r\n        biomes.push(...this.extractBiomesFromFilter(subFilter));\r\n      }\r\n    }\r\n\r\n    return biomes;\r\n  }\r\n\r\n  /**\r\n   * Infer loot table definition from a project item.\r\n   */\r\n  async inferLootTableFromItem(item: ProjectItem): Promise<ILootTableDefinition | null> {\r\n    if (!item.primaryFile) return null;\r\n\r\n    await item.loadContent();\r\n    if (!item.primaryFile.isContentLoaded) {\r\n      await item.primaryFile.loadContent();\r\n    }\r\n\r\n    const content = item.primaryFile.content;\r\n    if (typeof content !== \"string\") return null;\r\n\r\n    try {\r\n      const data = JSON.parse(content);\r\n      const pools = data.pools || [];\r\n\r\n      // Derive ID from file path\r\n      const id = item.name.replace(\".json\", \"\").replace(/^loot_tables\\//, \"\");\r\n\r\n      const definition: ILootTableDefinition = {\r\n        id,\r\n        pools: [],\r\n      };\r\n\r\n      for (const pool of pools) {\r\n        const rollsValue = pool.rolls;\r\n        let rolls: number | { min: number; max: number } = 1;\r\n\r\n        if (typeof rollsValue === \"number\") {\r\n          rolls = rollsValue;\r\n        } else if (typeof rollsValue === \"object\" && rollsValue !== null) {\r\n          rolls = {\r\n            min: rollsValue.min ?? 1,\r\n            max: rollsValue.max ?? 1,\r\n          };\r\n        }\r\n\r\n        const entries: ILootEntry[] = [];\r\n        for (const entry of pool.entries || []) {\r\n          if (entry.type === \"item\" && entry.name) {\r\n            const lootEntry: ILootEntry = {\r\n              item: entry.name.replace(\"minecraft:\", \"\"),\r\n            };\r\n\r\n            if (entry.weight !== undefined) {\r\n              lootEntry.weight = entry.weight;\r\n            }\r\n\r\n            // Extract count from functions\r\n            if (entry.functions) {\r\n              for (const fn of entry.functions) {\r\n                if (fn.function === \"set_count\") {\r\n                  if (typeof fn.count === \"number\") {\r\n                    lootEntry.count = fn.count;\r\n                  } else if (typeof fn.count === \"object\") {\r\n                    lootEntry.count = {\r\n                      min: fn.count.min ?? 1,\r\n                      max: fn.count.max ?? 1,\r\n                    };\r\n                  }\r\n                }\r\n                if (fn.function === \"looting_enchant\") {\r\n                  lootEntry.lootingBonus = fn.count?.max ?? 1;\r\n                }\r\n              }\r\n            }\r\n\r\n            entries.push(lootEntry);\r\n          }\r\n        }\r\n\r\n        if (entries.length > 0) {\r\n          definition.pools.push({ rolls, entries });\r\n        }\r\n      }\r\n\r\n      return definition.pools.length > 0 ? definition : null;\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Infer recipe definition from a project item.\r\n   */\r\n  async inferRecipeFromItem(item: ProjectItem): Promise<IRecipeDefinition | null> {\r\n    if (!item.primaryFile) return null;\r\n\r\n    await item.loadContent();\r\n    if (!item.primaryFile.isContentLoaded) {\r\n      await item.primaryFile.loadContent();\r\n    }\r\n\r\n    const content = item.primaryFile.content;\r\n    if (typeof content !== \"string\") return null;\r\n\r\n    try {\r\n      const data = JSON.parse(content);\r\n\r\n      // Determine recipe type\r\n      if (data[\"minecraft:recipe_shaped\"]) {\r\n        return this.inferShapedRecipe(data[\"minecraft:recipe_shaped\"], item.name);\r\n      } else if (data[\"minecraft:recipe_shapeless\"]) {\r\n        return this.inferShapelessRecipe(data[\"minecraft:recipe_shapeless\"], item.name);\r\n      } else if (data[\"minecraft:recipe_furnace\"]) {\r\n        return this.inferFurnaceRecipe(data[\"minecraft:recipe_furnace\"], item.name);\r\n      } else if (data[\"minecraft:recipe_brewing_mix\"] || data[\"minecraft:recipe_brewing_container\"]) {\r\n        const brewingData = data[\"minecraft:recipe_brewing_mix\"] || data[\"minecraft:recipe_brewing_container\"];\r\n        return this.inferBrewingRecipe(brewingData, item.name);\r\n      } else if (data[\"minecraft:recipe_smithing_transform\"]) {\r\n        return this.inferSmithingRecipe(data[\"minecraft:recipe_smithing_transform\"], item.name);\r\n      }\r\n\r\n      return null;\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Infer a shaped recipe.\r\n   */\r\n  private inferShapedRecipe(recipe: any, fileName: string): IRecipeDefinition {\r\n    const description = recipe.description || {};\r\n    const id = description.identifier?.replace(/^[^:]+:/, \"\") || fileName.replace(\".json\", \"\");\r\n\r\n    const result = recipe.result || recipe.output;\r\n    let resultItem: string | { item: string; count: number };\r\n\r\n    if (typeof result === \"string\") {\r\n      resultItem = result.replace(\"minecraft:\", \"\");\r\n    } else if (result.item) {\r\n      if (result.count && result.count > 1) {\r\n        resultItem = { item: result.item.replace(\"minecraft:\", \"\"), count: result.count };\r\n      } else {\r\n        resultItem = result.item.replace(\"minecraft:\", \"\");\r\n      }\r\n    } else {\r\n      resultItem = \"unknown\";\r\n    }\r\n\r\n    const definition: IRecipeDefinition = {\r\n      id,\r\n      type: \"shaped\",\r\n      result: resultItem,\r\n      pattern: recipe.pattern || [],\r\n      key: {},\r\n    };\r\n\r\n    // Convert key\r\n    if (recipe.key) {\r\n      for (const [symbol, value] of Object.entries(recipe.key)) {\r\n        if (typeof value === \"string\") {\r\n          definition.key![symbol] = value.replace(\"minecraft:\", \"\");\r\n        } else if ((value as any).item) {\r\n          definition.key![symbol] = (value as any).item.replace(\"minecraft:\", \"\");\r\n        }\r\n      }\r\n    }\r\n\r\n    return definition;\r\n  }\r\n\r\n  /**\r\n   * Infer a shapeless recipe.\r\n   */\r\n  private inferShapelessRecipe(recipe: any, fileName: string): IRecipeDefinition {\r\n    const description = recipe.description || {};\r\n    const id = description.identifier?.replace(/^[^:]+:/, \"\") || fileName.replace(\".json\", \"\");\r\n\r\n    const result = recipe.result || recipe.output;\r\n    let resultItem: string | { item: string; count: number };\r\n\r\n    if (typeof result === \"string\") {\r\n      resultItem = result.replace(\"minecraft:\", \"\");\r\n    } else if (result.item) {\r\n      if (result.count && result.count > 1) {\r\n        resultItem = { item: result.item.replace(\"minecraft:\", \"\"), count: result.count };\r\n      } else {\r\n        resultItem = result.item.replace(\"minecraft:\", \"\");\r\n      }\r\n    } else {\r\n      resultItem = \"unknown\";\r\n    }\r\n\r\n    const ingredients: string[] = [];\r\n    for (const ing of recipe.ingredients || []) {\r\n      if (typeof ing === \"string\") {\r\n        ingredients.push(ing.replace(\"minecraft:\", \"\"));\r\n      } else if (ing.item) {\r\n        ingredients.push(ing.item.replace(\"minecraft:\", \"\"));\r\n      }\r\n    }\r\n\r\n    return {\r\n      id,\r\n      type: \"shapeless\",\r\n      result: resultItem,\r\n      ingredients,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Infer a furnace recipe.\r\n   */\r\n  private inferFurnaceRecipe(recipe: any, fileName: string): IRecipeDefinition {\r\n    const description = recipe.description || {};\r\n    const id = description.identifier?.replace(/^[^:]+:/, \"\") || fileName.replace(\".json\", \"\");\r\n\r\n    const input =\r\n      typeof recipe.input === \"string\"\r\n        ? recipe.input.replace(\"minecraft:\", \"\")\r\n        : recipe.input?.item?.replace(\"minecraft:\", \"\") || \"unknown\";\r\n\r\n    const output =\r\n      typeof recipe.output === \"string\"\r\n        ? recipe.output.replace(\"minecraft:\", \"\")\r\n        : recipe.output?.item?.replace(\"minecraft:\", \"\") || \"unknown\";\r\n\r\n    return {\r\n      id,\r\n      type: \"furnace\",\r\n      result: output,\r\n      input,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Infer a brewing recipe.\r\n   */\r\n  private inferBrewingRecipe(recipe: any, fileName: string): IRecipeDefinition {\r\n    const description = recipe.description || {};\r\n    const id = description.identifier?.replace(/^[^:]+:/, \"\") || fileName.replace(\".json\", \"\");\r\n\r\n    return {\r\n      id,\r\n      type: \"brewing\",\r\n      result: recipe.output?.replace(\"minecraft:\", \"\") || \"unknown\",\r\n      input: recipe.input?.replace(\"minecraft:\", \"\"),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Infer a smithing recipe.\r\n   */\r\n  private inferSmithingRecipe(recipe: any, fileName: string): IRecipeDefinition {\r\n    const description = recipe.description || {};\r\n    const id = description.identifier?.replace(/^[^:]+:/, \"\") || fileName.replace(\".json\", \"\");\r\n\r\n    return {\r\n      id,\r\n      type: \"smithing\",\r\n      result:\r\n        typeof recipe.result === \"string\"\r\n          ? recipe.result.replace(\"minecraft:\", \"\")\r\n          : recipe.result?.item?.replace(\"minecraft:\", \"\") || \"unknown\",\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Infer feature definition from a project item.\r\n   */\r\n  async inferFeatureFromItem(item: ProjectItem): Promise<IFeatureDefinition | null> {\r\n    if (!item.primaryFile) return null;\r\n\r\n    await item.loadContent();\r\n    if (!item.primaryFile.isContentLoaded) {\r\n      await item.primaryFile.loadContent();\r\n    }\r\n\r\n    const content = item.primaryFile.content;\r\n    if (typeof content !== \"string\") return null;\r\n\r\n    try {\r\n      const data = JSON.parse(content);\r\n\r\n      // Check for various feature types\r\n      const featureTypes = [\r\n        \"minecraft:ore_feature\",\r\n        \"minecraft:scatter_feature\",\r\n        \"minecraft:single_block_feature\",\r\n        \"minecraft:aggregate_feature\",\r\n        \"minecraft:tree_feature\",\r\n        \"minecraft:vegetation_patch_feature\",\r\n        \"minecraft:geode_feature\",\r\n      ];\r\n\r\n      for (const featureType of featureTypes) {\r\n        if (data[featureType]) {\r\n          return this.inferFeatureFromData(data[featureType], featureType, item.name);\r\n        }\r\n      }\r\n\r\n      return null;\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Infer feature definition from raw data.\r\n   */\r\n  private inferFeatureFromData(featureData: any, featureType: string, fileName: string): IFeatureDefinition {\r\n    const description = featureData.description || {};\r\n    const id = description.identifier?.replace(/^[^:]+:/, \"\") || fileName.replace(\".json\", \"\");\r\n\r\n    const definition: IFeatureDefinition = {\r\n      id,\r\n    };\r\n\r\n    // Extract spread/placement info\r\n    if (featureData.places_block) {\r\n      const block = featureData.places_block;\r\n      definition.spread = {\r\n        places: [\r\n          {\r\n            type: \"block\",\r\n            id: typeof block === \"string\" ? block.replace(\"minecraft:\", \"\") : block.name?.replace(\"minecraft:\", \"\"),\r\n          },\r\n        ],\r\n      };\r\n    }\r\n\r\n    // For ore features\r\n    if (featureType === \"minecraft:ore_feature\") {\r\n      const replaces = featureData.replace_rules?.[0];\r\n      if (replaces) {\r\n        const places = featureData.replace_rules.map((rule: any) => ({\r\n          type: \"ore\" as const,\r\n          id:\r\n            typeof rule.places_block === \"string\"\r\n              ? rule.places_block.replace(\"minecraft:\", \"\")\r\n              : rule.places_block?.name?.replace(\"minecraft:\", \"\"),\r\n          replacesBlocks: Array.isArray(rule.may_replace)\r\n            ? rule.may_replace.map((b: string) => b.replace(\"minecraft:\", \"\"))\r\n            : undefined,\r\n        }));\r\n\r\n        definition.spread = { places };\r\n\r\n        if (featureData.count) {\r\n          definition.spread.count =\r\n            typeof featureData.count === \"number\"\r\n              ? featureData.count\r\n              : { min: featureData.count.min ?? 1, max: featureData.count.max ?? 1 };\r\n        }\r\n      }\r\n    }\r\n\r\n    // For scatter features\r\n    if (featureType === \"minecraft:scatter_feature\") {\r\n      if (featureData.scatter_chance) {\r\n        if (!definition.spread) {\r\n          definition.spread = { places: [] };\r\n        }\r\n        definition.spread.rarity = 1 / (featureData.scatter_chance.numerator / featureData.scatter_chance.denominator);\r\n      }\r\n    }\r\n\r\n    // Store native feature data if we have complex configurations\r\n    if (this._options.includeRawComponents) {\r\n      definition.nativeFeature = { [featureType.replace(\"minecraft:\", \"\")]: featureData };\r\n    }\r\n\r\n    return definition;\r\n  }\r\n\r\n  /**\r\n   * Infer namespace from identifiers.\r\n   */\r\n  private inferNamespace(\r\n    entities: IEntityTypeDefinition[],\r\n    blocks: IBlockTypeDefinition[],\r\n    items: IItemTypeDefinition[]\r\n  ): string | undefined {\r\n    const namespaceCounts: Record<string, number> = {};\r\n\r\n    // This would need access to original identifiers which we stripped\r\n    // For now, return undefined - could be improved later\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Format an ID into a display name.\r\n   */\r\n  private formatDisplayName(id: string): string {\r\n    return id.replace(/_/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\r\n  }\r\n\r\n  /**\r\n   * Check if a component is implicit and doesn't need to be included.\r\n   */\r\n  private isImplicitComponent(componentName: string): boolean {\r\n    // Components that are usually added by default or are very common\r\n    const implicitComponents = [\r\n      \"minecraft:physics\",\r\n      \"minecraft:pushable\",\r\n      \"minecraft:collision_box\",\r\n      \"minecraft:conditional_bandwidth_optimization\",\r\n      \"minecraft:experience_reward\",\r\n    ];\r\n    return implicitComponents.includes(componentName);\r\n  }\r\n\r\n  /**\r\n   * Check if a block component is implicit.\r\n   */\r\n  private isImplicitBlockComponent(componentName: string): boolean {\r\n    const implicitComponents = [\r\n      \"minecraft:unit_cube\",\r\n      \"minecraft:destructible_by_mining\",\r\n      \"minecraft:destructible_by_explosion\",\r\n    ];\r\n    return implicitComponents.includes(componentName);\r\n  }\r\n\r\n  /**\r\n   * Check if an item component is implicit.\r\n   */\r\n  private isImplicitItemComponent(componentName: string): boolean {\r\n    const implicitComponents = [\"minecraft:max_stack_size\", \"minecraft:icon\", \"minecraft:display_name\"];\r\n    return implicitComponents.includes(componentName);\r\n  }\r\n\r\n  // ============================================================================\r\n  // STATIC CONVENIENCE METHODS\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Infer schema from a project (static convenience method).\r\n   */\r\n  static async inferFromProject(project: Project, options?: IInferrerOptions): Promise<IInferenceResult> {\r\n    const inferrer = new ContentSchemaInferrer(options);\r\n    return inferrer.inferFromProject(project);\r\n  }\r\n\r\n  /**\r\n   * Infer schema from an entity definition (static convenience method).\r\n   */\r\n  static inferEntityFromDefinition(\r\n    entityDef: EntityTypeDefinition,\r\n    options?: IInferrerOptions\r\n  ): { definition: IEntityTypeDefinition; detectionDetails: ITraitDetectionResult<EntityTraitId>[] } | null {\r\n    const inferrer = new ContentSchemaInferrer(options);\r\n    return inferrer.inferEntityFromDefinition(entityDef);\r\n  }\r\n\r\n  /**\r\n   * Generate a lightweight summary of a project's content for AI context injection.\r\n   * This produces an IProjectSchemaSummary that can be sent with chat messages\r\n   * without bloating the context window.\r\n   *\r\n   * @param project The project to summarize\r\n   * @returns A summary object suitable for AI context\r\n   */\r\n  static async inferSummary(project: Project): Promise<{\r\n    isSummarized: true;\r\n    projectPath?: string;\r\n    namespace?: string;\r\n    entityCount: number;\r\n    blockCount: number;\r\n    itemCount: number;\r\n    recipeCount: number;\r\n    lootTableCount: number;\r\n    spawnRuleCount: number;\r\n    entityIds?: string[];\r\n    blockIds?: string[];\r\n    itemIds?: string[];\r\n    detectedEntityTraits?: string[];\r\n    detectedBlockTraits?: string[];\r\n    detectedItemTraits?: string[];\r\n    recentValidationIssues?: string[];\r\n    fullSchemaAvailableViaTool: \"getEffectiveContentSchema\";\r\n  }> {\r\n    await project.inferProjectItemsFromFiles();\r\n\r\n    const entityItems = project.getItemsByType(ProjectItemType.entityTypeBehavior);\r\n    const blockItems = project.getItemsByType(ProjectItemType.blockTypeBehavior);\r\n    const itemItems = project.getItemsByType(ProjectItemType.itemTypeBehavior);\r\n    const recipeItems = project.getItemsByType(ProjectItemType.recipeBehavior);\r\n    const lootItems = project.getItemsByType(ProjectItemType.lootTableBehavior);\r\n    const spawnItems = project.getItemsByType(ProjectItemType.spawnRuleBehavior);\r\n\r\n    // Extract IDs from items\r\n    const entityIds: string[] = [];\r\n    const blockIds: string[] = [];\r\n    const itemIds: string[] = [];\r\n\r\n    // Collect unique traits\r\n    const entityTraits = new Set<string>();\r\n    const blockTraits = new Set<string>();\r\n    const itemTraits = new Set<string>();\r\n\r\n    // Process entities to get IDs and traits\r\n    for (const item of entityItems) {\r\n      if (!item.primaryFile) continue;\r\n      await item.loadContent();\r\n\r\n      const entityDef = await EntityTypeDefinition.ensureOnFile(item.primaryFile);\r\n      if (entityDef) {\r\n        const id = entityDef.id;\r\n        if (id) {\r\n          // Strip namespace for concise IDs\r\n          const shortId = id.includes(\":\") ? id.split(\":\")[1] : id;\r\n          entityIds.push(shortId);\r\n        }\r\n\r\n        // Detect traits from the wrapper's components\r\n        const wrapper = (entityDef as any)._wrapper;\r\n        const entityData = wrapper?.[\"minecraft:entity\"];\r\n        const components = entityData?.components;\r\n        if (components) {\r\n          const componentGroups = entityData?.component_groups || {};\r\n          const detected = TraitDetector.detectEntityTraits(components, componentGroups, 0.6);\r\n          for (const trait of detected) {\r\n            entityTraits.add(trait.traitId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Process blocks\r\n    for (const item of blockItems) {\r\n      if (!item.primaryFile) continue;\r\n      await item.loadContent();\r\n\r\n      const blockDef = await BlockTypeDefinition.ensureOnFile(item.primaryFile);\r\n      if (blockDef) {\r\n        const id = blockDef.id;\r\n        if (id) {\r\n          const shortId = id.includes(\":\") ? id.split(\":\")[1] : id;\r\n          blockIds.push(shortId);\r\n        }\r\n\r\n        // Detect traits\r\n        const components = blockDef.getComponents();\r\n        if (components && Object.keys(components).length > 0) {\r\n          const detected = TraitDetector.detectBlockTraits(components, 0.6);\r\n          for (const trait of detected) {\r\n            blockTraits.add(trait.traitId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Process items\r\n    for (const item of itemItems) {\r\n      if (!item.primaryFile) continue;\r\n      await item.loadContent();\r\n\r\n      const itemDef = await ItemTypeDefinition.ensureOnFile(item.primaryFile);\r\n      if (itemDef) {\r\n        const id = itemDef.id;\r\n        if (id) {\r\n          const shortId = id.includes(\":\") ? id.split(\":\")[1] : id;\r\n          itemIds.push(shortId);\r\n        }\r\n\r\n        // Detect traits\r\n        const components = itemDef.getComponents();\r\n        if (components && Object.keys(components).length > 0) {\r\n          const detected = TraitDetector.detectItemTraits(components, 0.6);\r\n          for (const trait of detected) {\r\n            itemTraits.add(trait.traitId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Infer namespace from first entity/block/item ID\r\n    let namespace: string | undefined;\r\n    const allItems = [...entityItems, ...blockItems, ...itemItems];\r\n    for (const item of allItems) {\r\n      if (!item.primaryFile) continue;\r\n      await item.loadContent();\r\n\r\n      // Try entity\r\n      const entityDef = item.primaryFile.manager as EntityTypeDefinition | undefined;\r\n      if (entityDef?.id?.includes(\":\")) {\r\n        namespace = entityDef.id.split(\":\")[0];\r\n        break;\r\n      }\r\n\r\n      // Try block\r\n      const blockDef = item.primaryFile.manager as BlockTypeDefinition | undefined;\r\n      if (blockDef?.id?.includes(\":\")) {\r\n        namespace = blockDef.id.split(\":\")[0];\r\n        break;\r\n      }\r\n\r\n      // Try item\r\n      const itemDefCheck = item.primaryFile.manager as ItemTypeDefinition | undefined;\r\n      if (itemDefCheck?.id?.includes(\":\")) {\r\n        namespace = itemDefCheck.id.split(\":\")[0];\r\n        break;\r\n      }\r\n    }\r\n\r\n    // Prefer localFolderPath (the user's actual folder) over projectFolder (which may be a workspace path)\r\n    const projectPath = project.localFolderPath || project.projectFolder?.fullPath;\r\n\r\n    return {\r\n      isSummarized: true,\r\n      projectPath: projectPath,\r\n      namespace,\r\n      entityCount: entityItems.length,\r\n      blockCount: blockItems.length,\r\n      itemCount: itemItems.length,\r\n      recipeCount: recipeItems.length,\r\n      lootTableCount: lootItems.length,\r\n      spawnRuleCount: spawnItems.length,\r\n      entityIds: entityIds.length > 0 ? entityIds.slice(0, 50) : undefined, // Limit for context\r\n      blockIds: blockIds.length > 0 ? blockIds.slice(0, 50) : undefined,\r\n      itemIds: itemIds.length > 0 ? itemIds.slice(0, 50) : undefined,\r\n      detectedEntityTraits: entityTraits.size > 0 ? Array.from(entityTraits) : undefined,\r\n      detectedBlockTraits: blockTraits.size > 0 ? Array.from(blockTraits) : undefined,\r\n      detectedItemTraits: itemTraits.size > 0 ? Array.from(itemTraits) : undefined,\r\n      fullSchemaAvailableViaTool: \"getEffectiveContentSchema\",\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * TraitDetector - Maps native Minecraft components to trait identifiers.\r\n *\r\n * This module analyzes Minecraft Bedrock content (entity/block/item definitions)\r\n * and detects which traits from the Content Meta-Schema would produce similar\r\n * component configurations. This enables reverse-engineering of existing content\r\n * into the simplified meta-schema format.\r\n *\r\n * @see ContentSchemaInferrer.ts for the main orchestrator\r\n * @see IContentMetaSchema.ts for trait type definitions\r\n */\r\n\r\nimport { EntityTraitId, BlockTraitId, ItemTraitId, EntityBehaviorPreset } from \"./IContentMetaSchema\";\r\n\r\n// ============================================================================\r\n// TRAIT DETECTION RESULT\r\n// ============================================================================\r\n\r\n/**\r\n * Result of trait detection with confidence scoring.\r\n */\r\nexport interface ITraitDetectionResult<T extends string> {\r\n  /** The detected trait ID */\r\n  traitId: T;\r\n\r\n  /** Confidence score 0-1 (1 = perfect match, 0.6 = likely match) */\r\n  confidence: number;\r\n\r\n  /** Components that matched this trait */\r\n  matchedComponents: string[];\r\n\r\n  /** Optional notes about the detection */\r\n  notes?: string;\r\n}\r\n\r\n/**\r\n * Result of simplified property extraction.\r\n */\r\nexport interface IExtractedProperties {\r\n  // Entity properties\r\n  health?: number;\r\n  attackDamage?: number;\r\n  movementSpeed?: number;\r\n  scale?: number;\r\n  followRange?: number;\r\n  knockbackResistance?: number;\r\n  collisionWidth?: number;\r\n  collisionHeight?: number;\r\n  families?: string[];\r\n\r\n  // Block properties\r\n  destroyTime?: number;\r\n  explosionResistance?: number;\r\n  lightEmission?: number;\r\n  lightDampening?: number;\r\n  friction?: number;\r\n  mapColor?: string;\r\n\r\n  // Item properties\r\n  maxStackSize?: number;\r\n  durability?: number;\r\n  damage?: number;\r\n  nutrition?: number;\r\n  saturation?: number;\r\n}\r\n\r\n// ============================================================================\r\n// ENTITY TRAIT SIGNATURES\r\n// ============================================================================\r\n\r\n/**\r\n * Signature definition for detecting a trait.\r\n * Components can be required (must be present) or optional (increase confidence).\r\n */\r\ninterface ITraitSignature {\r\n  /** Components that MUST be present (or in component_groups) */\r\n  requiredComponents?: string[];\r\n\r\n  /** Components that increase confidence if present */\r\n  optionalComponents?: string[];\r\n\r\n  /** Custom validation function for complex matching */\r\n  validator?: (components: Record<string, any>, componentGroups?: Record<string, any>) => number;\r\n\r\n  /** Traits that conflict with this one (mutually exclusive) */\r\n  conflictsWith?: string[];\r\n}\r\n\r\n/**\r\n * Entity trait signature definitions.\r\n */\r\nconst ENTITY_TRAIT_SIGNATURES: Record<EntityTraitId, ITraitSignature> = {\r\n  // Body types \u2014 these are primarily about the visual model and animation rig,\r\n  // not easily detectable from behavior components alone. We check type_family\r\n  // for clues but these are intentionally conservative.\r\n  humanoid: {\r\n    optionalComponents: [\"minecraft:can_climb\", \"minecraft:type_family\"],\r\n    validator: (components) => {\r\n      // Humanoid detection requires strong signals from type_family\r\n      const typeFamily = components[\"minecraft:type_family\"];\r\n      if (typeFamily) {\r\n        const families: string[] = typeFamily.family || [];\r\n        const humanoidFamilies = [\"zombie\", \"skeleton\", \"humanoid\", \"piglin\", \"villager\", \"illager\", \"witch\", \"player\"];\r\n        if (families.some((f) => humanoidFamilies.includes(f.toLowerCase()))) return 0.9;\r\n      }\r\n      // Without type_family signals, no confident detection\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  quadruped: {\r\n    optionalComponents: [\"minecraft:behavior.follow_parent\", \"minecraft:type_family\"],\r\n    validator: (components) => {\r\n      // Quadruped detection uses type_family animal clues + follow_parent pattern\r\n      const typeFamily = components[\"minecraft:type_family\"];\r\n      const hasFollowParent = \"minecraft:behavior.follow_parent\" in components;\r\n      if (typeFamily) {\r\n        const families: string[] = typeFamily.family || [];\r\n        const quadrupedFamilies = [\r\n          \"cow\",\r\n          \"pig\",\r\n          \"sheep\",\r\n          \"horse\",\r\n          \"donkey\",\r\n          \"mule\",\r\n          \"llama\",\r\n          \"goat\",\r\n          \"wolf\",\r\n          \"fox\",\r\n          \"cat\",\r\n          \"ocelot\",\r\n          \"animal\",\r\n        ];\r\n        if (families.some((f) => quadrupedFamilies.includes(f.toLowerCase()))) return 0.9;\r\n      }\r\n      // follow_parent + breedable suggests a land animal but not enough for body type\r\n      const hasBreedable = \"minecraft:breedable\" in components;\r\n      if (hasFollowParent && hasBreedable) return 0.5;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  quadruped_small: {\r\n    optionalComponents: [\"minecraft:scale\"],\r\n    validator: (components) => {\r\n      const scale = components[\"minecraft:scale\"]?.value;\r\n      if (scale && scale < 0.7) return 0.7;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  flying: {\r\n    requiredComponents: [\"minecraft:navigation.fly\"],\r\n    optionalComponents: [\"minecraft:can_fly\", \"minecraft:behavior.float\"],\r\n    validator: (components) => {\r\n      const hasFlyNav = \"minecraft:navigation.fly\" in components;\r\n      const hasCanFly = \"minecraft:can_fly\" in components;\r\n      if (hasFlyNav && hasCanFly) return 1.0;\r\n      if (hasFlyNav) return 0.8;\r\n      if (hasCanFly) return 0.6;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  aquatic: {\r\n    requiredComponents: [\"minecraft:navigation.swim\"],\r\n    optionalComponents: [\"minecraft:underwater_movement\", \"minecraft:breathable\"],\r\n    validator: (components) => {\r\n      const hasSwimNav = \"minecraft:navigation.swim\" in components;\r\n      const hasUnderwaterMovement = \"minecraft:underwater_movement\" in components;\r\n      const breathable = components[\"minecraft:breathable\"];\r\n      const breathesWater = breathable?.breathes_water === true;\r\n\r\n      if (hasSwimNav && breathesWater) return 1.0;\r\n      if (hasSwimNav && hasUnderwaterMovement) return 0.9;\r\n      if (hasSwimNav) return 0.7;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  arthropod: {\r\n    optionalComponents: [\"minecraft:can_climb\", \"minecraft:mark_variant\"],\r\n    validator: (components) => {\r\n      // Arthropods typically have climbing ability and multiple variants\r\n      const hasClimb = \"minecraft:can_climb\" in components;\r\n      const hasVariant = \"minecraft:mark_variant\" in components;\r\n      return hasClimb && hasVariant ? 0.6 : 0;\r\n    },\r\n  },\r\n\r\n  slime: {\r\n    optionalComponents: [\"minecraft:movement.sway\"],\r\n    validator: (components) => {\r\n      return \"minecraft:movement.sway\" in components ? 0.8 : 0;\r\n    },\r\n  },\r\n\r\n  // Behavior archetypes\r\n  hostile: {\r\n    optionalComponents: [\"minecraft:behavior.nearest_attackable_target\", \"minecraft:behavior.hurt_by_target\"],\r\n    conflictsWith: [\"passive\"],\r\n    validator: (components) => {\r\n      const hasTargeting = \"minecraft:behavior.nearest_attackable_target\" in components;\r\n      const hasHurtBy = \"minecraft:behavior.hurt_by_target\" in components;\r\n      const hasAttack = \"minecraft:attack\" in components || \"minecraft:behavior.melee_attack\" in components;\r\n\r\n      // Check if targeting players\r\n      const targeting = components[\"minecraft:behavior.nearest_attackable_target\"];\r\n      const targetsPlayers = targeting ? JSON.stringify(targeting).includes(\"player\") : false;\r\n\r\n      if (hasTargeting && targetsPlayers && hasAttack) return 1.0;\r\n      if (hasTargeting && hasAttack) return 0.8;\r\n      if (hasHurtBy && hasAttack) return 0.7;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  passive: {\r\n    requiredComponents: [\"minecraft:behavior.panic\"],\r\n    conflictsWith: [\"hostile\"],\r\n    validator: (components) => {\r\n      const hasPanic = \"minecraft:behavior.panic\" in components;\r\n      const hasNoAttack = !(\"minecraft:attack\" in components) && !(\"minecraft:behavior.melee_attack\" in components);\r\n\r\n      if (hasPanic && hasNoAttack) return 1.0;\r\n      if (hasPanic) return 0.7;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  neutral: {\r\n    optionalComponents: [\"minecraft:behavior.hurt_by_target\"],\r\n    conflictsWith: [\"hostile\", \"passive\"],\r\n    validator: (components) => {\r\n      const hurtBy = components[\"minecraft:behavior.hurt_by_target\"];\r\n      const alertsSameType = hurtBy?.alert_same_type === true;\r\n      const hasPanic = \"minecraft:behavior.panic\" in components;\r\n      const hasAttack = \"minecraft:attack\" in components;\r\n\r\n      // Neutral mobs retaliate but don't seek targets\r\n      if (alertsSameType && !(\"minecraft:behavior.nearest_attackable_target\" in components)) return 0.9;\r\n      if (hurtBy && hasAttack && hasPanic) return 0.7;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  boss: {\r\n    requiredComponents: [\"minecraft:boss\"],\r\n    validator: (components) => {\r\n      return \"minecraft:boss\" in components ? 1.0 : 0;\r\n    },\r\n  },\r\n\r\n  // Combat styles\r\n  melee_attacker: {\r\n    requiredComponents: [\"minecraft:behavior.melee_attack\"],\r\n    optionalComponents: [\"minecraft:attack\"],\r\n    validator: (components) => {\r\n      const hasMelee = \"minecraft:behavior.melee_attack\" in components;\r\n      const hasAttack = \"minecraft:attack\" in components;\r\n\r\n      if (hasMelee && hasAttack) return 1.0;\r\n      if (hasMelee) return 0.8;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  ranged_attacker: {\r\n    requiredComponents: [\"minecraft:behavior.ranged_attack\"],\r\n    optionalComponents: [\"minecraft:shooter\"],\r\n    validator: (components) => {\r\n      const hasRanged = \"minecraft:behavior.ranged_attack\" in components;\r\n      const hasShooter = \"minecraft:shooter\" in components;\r\n\r\n      if (hasRanged && hasShooter) return 1.0;\r\n      if (hasRanged) return 0.8;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  exploder: {\r\n    requiredComponents: [\"minecraft:explode\"],\r\n    validator: (components) => {\r\n      return \"minecraft:explode\" in components ? 1.0 : 0;\r\n    },\r\n  },\r\n\r\n  // Interaction patterns\r\n  trader: {\r\n    requiredComponents: [\"minecraft:trade_table\"],\r\n    optionalComponents: [\"minecraft:behavior.trade_with_player\"],\r\n    validator: (components) => {\r\n      const hasTradeTable = \"minecraft:trade_table\" in components;\r\n      const hasTradeBehavior = \"minecraft:behavior.trade_with_player\" in components;\r\n\r\n      if (hasTradeTable && hasTradeBehavior) return 1.0;\r\n      if (hasTradeTable) return 0.9;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  tameable: {\r\n    requiredComponents: [\"minecraft:tameable\"],\r\n    optionalComponents: [\"minecraft:is_tamed\"],\r\n    validator: (components, componentGroups) => {\r\n      // Check both direct components and component groups\r\n      const hasTameable =\r\n        \"minecraft:tameable\" in components ||\r\n        (componentGroups && Object.values(componentGroups).some((g: any) => \"minecraft:tameable\" in g));\r\n      const hasIsTamed =\r\n        \"minecraft:is_tamed\" in components ||\r\n        (componentGroups && Object.values(componentGroups).some((g: any) => \"minecraft:is_tamed\" in g));\r\n\r\n      if (hasTameable) return 1.0;\r\n      if (hasIsTamed) return 0.7;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  rideable: {\r\n    requiredComponents: [\"minecraft:rideable\"],\r\n    optionalComponents: [\"minecraft:input_ground_controlled\"],\r\n    validator: (components, componentGroups) => {\r\n      // Check both direct components and component groups\r\n      const hasRideable =\r\n        \"minecraft:rideable\" in components ||\r\n        (componentGroups && Object.values(componentGroups).some((g: any) => \"minecraft:rideable\" in g));\r\n      const hasInput =\r\n        \"minecraft:input_ground_controlled\" in components ||\r\n        (componentGroups && Object.values(componentGroups).some((g: any) => \"minecraft:input_ground_controlled\" in g));\r\n\r\n      if (hasRideable && hasInput) return 1.0;\r\n      if (hasRideable) return 0.9;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  breedable: {\r\n    requiredComponents: [\"minecraft:breedable\"],\r\n    optionalComponents: [\"minecraft:behavior.breed\"],\r\n    validator: (components, componentGroups) => {\r\n      const hasBreedable =\r\n        \"minecraft:breedable\" in components ||\r\n        (componentGroups && Object.values(componentGroups).some((g: any) => \"minecraft:breedable\" in g));\r\n      const hasBreedBehavior = \"minecraft:behavior.breed\" in components;\r\n\r\n      if (hasBreedable && hasBreedBehavior) return 1.0;\r\n      if (hasBreedable) return 0.9;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  leasable: {\r\n    requiredComponents: [\"minecraft:leashable\"],\r\n    validator: (components) => {\r\n      return \"minecraft:leashable\" in components ? 1.0 : 0;\r\n    },\r\n  },\r\n\r\n  // Special behaviors\r\n  undead: {\r\n    optionalComponents: [\"minecraft:burns_in_daylight\", \"minecraft:type_family\"],\r\n    validator: (components) => {\r\n      const burnsDaylight = \"minecraft:burns_in_daylight\" in components;\r\n      const typeFamily = components[\"minecraft:type_family\"];\r\n      const isUndeadFamily =\r\n        typeFamily?.family?.includes(\"undead\") || (typeFamily ? JSON.stringify(typeFamily).includes(\"undead\") : false);\r\n\r\n      if (burnsDaylight && isUndeadFamily) return 1.0;\r\n      if (burnsDaylight) return 0.9;\r\n      if (isUndeadFamily) return 0.7;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  illager: {\r\n    optionalComponents: [\"minecraft:behavior.raid_garden\", \"minecraft:type_family\"],\r\n    validator: (components) => {\r\n      const hasRaidGarden = \"minecraft:behavior.raid_garden\" in components;\r\n      const typeFamily = components[\"minecraft:type_family\"];\r\n      const isIllagerFamily = typeFamily ? JSON.stringify(typeFamily).includes(\"illager\") : false;\r\n\r\n      if (hasRaidGarden && isIllagerFamily) return 1.0;\r\n      if (isIllagerFamily) return 0.8;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  aquatic_only: {\r\n    optionalComponents: [\"minecraft:breathable\"],\r\n    validator: (components) => {\r\n      const breathable = components[\"minecraft:breathable\"];\r\n      const breathesWater = breathable?.breathes_water === true;\r\n      const breathesAir = breathable?.breathes_air !== false;\r\n\r\n      if (breathesWater && !breathesAir) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  baby_variant: {\r\n    optionalComponents: [\"minecraft:is_baby\", \"minecraft:ageable\"],\r\n    validator: (components, componentGroups) => {\r\n      // Check component groups for baby state\r\n      const hasIsBaby =\r\n        \"minecraft:is_baby\" in components ||\r\n        (componentGroups && Object.values(componentGroups).some((g: any) => \"minecraft:is_baby\" in g));\r\n      const hasAgeable = \"minecraft:ageable\" in components;\r\n\r\n      if (hasIsBaby && hasAgeable) return 1.0;\r\n      if (hasAgeable) return 0.8;\r\n      if (hasIsBaby) return 0.7;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  wanders: {\r\n    requiredComponents: [\"minecraft:behavior.random_stroll\"],\r\n    optionalComponents: [\"minecraft:behavior.random_look_around\"],\r\n    validator: (components) => {\r\n      const hasStroll = \"minecraft:behavior.random_stroll\" in components;\r\n      const hasLookAround = \"minecraft:behavior.random_look_around\" in components;\r\n\r\n      if (hasStroll && hasLookAround) return 1.0;\r\n      if (hasStroll) return 0.9;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  patrols: {\r\n    requiredComponents: [\"minecraft:behavior.move_to_poi\"],\r\n    validator: (components) => {\r\n      return \"minecraft:behavior.move_to_poi\" in components ? 0.9 : 0;\r\n    },\r\n  },\r\n\r\n  guards: {\r\n    requiredComponents: [\"minecraft:behavior.defend_village_target\"],\r\n    validator: (components) => {\r\n      return \"minecraft:behavior.defend_village_target\" in components ? 1.0 : 0;\r\n    },\r\n  },\r\n\r\n  flees_daylight: {\r\n    requiredComponents: [\"minecraft:behavior.flee_sun\"],\r\n    validator: (components) => {\r\n      return \"minecraft:behavior.flee_sun\" in components ? 1.0 : 0;\r\n    },\r\n  },\r\n\r\n  teleporter: {\r\n    optionalComponents: [\"minecraft:teleport\"],\r\n    validator: (components) => {\r\n      return \"minecraft:teleport\" in components ? 1.0 : 0;\r\n    },\r\n  },\r\n};\r\n\r\n// ============================================================================\r\n// BEHAVIOR PRESET SIGNATURES\r\n// ============================================================================\r\n\r\nconst BEHAVIOR_PRESET_SIGNATURES: Record<EntityBehaviorPreset, ITraitSignature> = {\r\n  // Movement\r\n  wander: {\r\n    requiredComponents: [\"minecraft:behavior.random_stroll\"],\r\n    validator: (c) => (\"minecraft:behavior.random_stroll\" in c ? 1.0 : 0),\r\n  },\r\n  swim: {\r\n    requiredComponents: [\"minecraft:behavior.swim_idle\"],\r\n    validator: (c) => (\"minecraft:behavior.swim_idle\" in c || \"minecraft:navigation.swim\" in c ? 0.8 : 0),\r\n  },\r\n  fly_around: {\r\n    requiredComponents: [\"minecraft:behavior.fly_idle\"],\r\n    validator: (c) => (\"minecraft:behavior.fly_idle\" in c ? 1.0 : 0),\r\n  },\r\n  float: {\r\n    requiredComponents: [\"minecraft:behavior.float\"],\r\n    validator: (c) => (\"minecraft:behavior.float\" in c ? 1.0 : 0),\r\n  },\r\n  climb: {\r\n    requiredComponents: [\"minecraft:can_climb\"],\r\n    validator: (c) => (\"minecraft:can_climb\" in c ? 1.0 : 0),\r\n  },\r\n\r\n  // Combat\r\n  melee_attack: {\r\n    requiredComponents: [\"minecraft:behavior.melee_attack\"],\r\n    validator: (c) => (\"minecraft:behavior.melee_attack\" in c ? 1.0 : 0),\r\n  },\r\n  ranged_attack: {\r\n    requiredComponents: [\"minecraft:behavior.ranged_attack\"],\r\n    validator: (c) => (\"minecraft:behavior.ranged_attack\" in c ? 1.0 : 0),\r\n  },\r\n  target_players: {\r\n    requiredComponents: [\"minecraft:behavior.nearest_attackable_target\"],\r\n    validator: (c) => {\r\n      const targeting = c[\"minecraft:behavior.nearest_attackable_target\"];\r\n      return targeting && JSON.stringify(targeting).includes(\"player\") ? 1.0 : 0;\r\n    },\r\n  },\r\n  target_monsters: {\r\n    requiredComponents: [\"minecraft:behavior.nearest_attackable_target\"],\r\n    validator: (c) => {\r\n      const targeting = c[\"minecraft:behavior.nearest_attackable_target\"];\r\n      return targeting && JSON.stringify(targeting).includes(\"monster\") ? 1.0 : 0;\r\n    },\r\n  },\r\n  flee_when_hurt: {\r\n    requiredComponents: [\"minecraft:behavior.panic\"],\r\n    validator: (c) => (\"minecraft:behavior.panic\" in c ? 1.0 : 0),\r\n  },\r\n  retaliate: {\r\n    requiredComponents: [\"minecraft:behavior.hurt_by_target\"],\r\n    validator: (c) => (\"minecraft:behavior.hurt_by_target\" in c ? 1.0 : 0),\r\n  },\r\n\r\n  // Social\r\n  follow_owner: {\r\n    requiredComponents: [\"minecraft:behavior.follow_owner\"],\r\n    validator: (c) => (\"minecraft:behavior.follow_owner\" in c ? 1.0 : 0),\r\n  },\r\n  follow_parent: {\r\n    requiredComponents: [\"minecraft:behavior.follow_parent\"],\r\n    validator: (c) => (\"minecraft:behavior.follow_parent\" in c ? 1.0 : 0),\r\n  },\r\n  herd: {\r\n    requiredComponents: [\"minecraft:behavior.move_towards_dwelling_restriction\"],\r\n    validator: (c) => (\"minecraft:behavior.move_towards_dwelling_restriction\" in c ? 0.7 : 0),\r\n  },\r\n  avoid_players: {\r\n    requiredComponents: [\"minecraft:behavior.avoid_mob_type\"],\r\n    validator: (c) => {\r\n      const avoid = c[\"minecraft:behavior.avoid_mob_type\"];\r\n      return avoid && JSON.stringify(avoid).includes(\"player\") ? 1.0 : 0;\r\n    },\r\n  },\r\n\r\n  // Interaction\r\n  look_at_player: {\r\n    requiredComponents: [\"minecraft:behavior.look_at_player\"],\r\n    validator: (c) => (\"minecraft:behavior.look_at_player\" in c ? 1.0 : 0),\r\n  },\r\n  beg: {\r\n    requiredComponents: [\"minecraft:behavior.beg\"],\r\n    validator: (c) => (\"minecraft:behavior.beg\" in c ? 1.0 : 0),\r\n  },\r\n  tempt: {\r\n    requiredComponents: [\"minecraft:behavior.tempt\"],\r\n    validator: (c) => (\"minecraft:behavior.tempt\" in c ? 1.0 : 0),\r\n  },\r\n  sit_command: {\r\n    requiredComponents: [\"minecraft:behavior.sit\"],\r\n    validator: (c) => (\"minecraft:behavior.sit\" in c ? 1.0 : 0),\r\n  },\r\n\r\n  // Actions\r\n  eat_grass: {\r\n    requiredComponents: [\"minecraft:behavior.eat_block\"],\r\n    validator: (c) => (\"minecraft:behavior.eat_block\" in c ? 1.0 : 0),\r\n  },\r\n  break_doors: {\r\n    requiredComponents: [\"minecraft:behavior.break_door\"],\r\n    validator: (c) => (\"minecraft:behavior.break_door\" in c ? 1.0 : 0),\r\n  },\r\n  open_doors: {\r\n    requiredComponents: [\"minecraft:behavior.open_door\"],\r\n    validator: (c) => (\"minecraft:behavior.open_door\" in c ? 1.0 : 0),\r\n  },\r\n  pick_up_items: {\r\n    requiredComponents: [\"minecraft:behavior.pickup_items\"],\r\n    validator: (c) => (\"minecraft:behavior.pickup_items\" in c ? 1.0 : 0),\r\n  },\r\n  sleep_in_bed: {\r\n    requiredComponents: [\"minecraft:behavior.sleep\"],\r\n    validator: (c) => (\"minecraft:behavior.sleep\" in c ? 1.0 : 0),\r\n  },\r\n\r\n  // Environment\r\n  hide_from_sun: {\r\n    requiredComponents: [\"minecraft:behavior.flee_sun\"],\r\n    validator: (c) => (\"minecraft:behavior.flee_sun\" in c ? 1.0 : 0),\r\n  },\r\n  go_home_at_night: {\r\n    requiredComponents: [\"minecraft:behavior.go_home\"],\r\n    validator: (c) => (\"minecraft:behavior.go_home\" in c ? 1.0 : 0),\r\n  },\r\n  seek_water: {\r\n    requiredComponents: [\"minecraft:behavior.find_water\"],\r\n    validator: (c) => (\"minecraft:behavior.find_water\" in c ? 1.0 : 0),\r\n  },\r\n  seek_land: {\r\n    requiredComponents: [\"minecraft:behavior.stroll_towards_village\"],\r\n    validator: (c) => (\"minecraft:behavior.stroll_towards_village\" in c ? 0.6 : 0),\r\n  },\r\n};\r\n\r\n// ============================================================================\r\n// BLOCK TRAIT SIGNATURES\r\n// ============================================================================\r\n\r\n/**\r\n * Block trait signature definitions.\r\n */\r\nconst BLOCK_TRAIT_SIGNATURES: Record<BlockTraitId, ITraitSignature> = {\r\n  // Basic types\r\n  solid: {\r\n    validator: (components) => {\r\n      // Solid blocks have standard collision and no transparency\r\n      const hasCollision =\r\n        !(\"minecraft:collision_box\" in components) || components[\"minecraft:collision_box\"] !== false;\r\n      const isDestructible = \"minecraft:destructible_by_mining\" in components;\r\n      if (hasCollision && isDestructible) return 0.7;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  transparent: {\r\n    optionalComponents: [\"minecraft:light_dampening\"],\r\n    validator: (components) => {\r\n      const lightDamp = components[\"minecraft:light_dampening\"];\r\n      if (lightDamp !== undefined && lightDamp < 15) return 0.8;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  leaves: {\r\n    optionalComponents: [\"minecraft:destructible_by_mining\"],\r\n    validator: (components) => {\r\n      // Leaves have fast destroy time and specific properties\r\n      const destructible = components[\"minecraft:destructible_by_mining\"];\r\n      if (destructible?.seconds_to_destroy !== undefined && destructible.seconds_to_destroy < 0.5) {\r\n        // Check for transparency\r\n        const lightDamp = components[\"minecraft:light_dampening\"];\r\n        if (lightDamp !== undefined && lightDamp < 5) return 0.9;\r\n        return 0.5;\r\n      }\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  log: {\r\n    optionalComponents: [\"minecraft:transformation\"],\r\n    validator: (components) => {\r\n      // Logs often have pillar rotation and medium hardness\r\n      const hasTransformation = \"minecraft:transformation\" in components;\r\n      const destructible = components[\"minecraft:destructible_by_mining\"];\r\n      const hasWoodHardness = destructible?.seconds_to_destroy >= 2 && destructible?.seconds_to_destroy <= 3;\r\n      if (hasTransformation || hasWoodHardness) return 0.7;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  slab: {\r\n    optionalComponents: [\"minecraft:geometry\"],\r\n    validator: (components) => {\r\n      // Slabs have half-height geometry or specific states\r\n      const geometry = components[\"minecraft:geometry\"];\r\n      if (geometry && JSON.stringify(geometry).includes(\"slab\")) return 1.0;\r\n      // Check for vertical_half state handling\r\n      const collision = components[\"minecraft:collision_box\"];\r\n      if (collision?.size && collision.size[1] === 8) return 0.8;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  stairs: {\r\n    optionalComponents: [\"minecraft:geometry\"],\r\n    validator: (components) => {\r\n      const geometry = components[\"minecraft:geometry\"];\r\n      if (geometry && JSON.stringify(geometry).includes(\"stairs\")) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  fence: {\r\n    optionalComponents: [\"minecraft:support\", \"minecraft:connection_rule\", \"minecraft:geometry\"],\r\n    validator: (components) => {\r\n      const support = components[\"minecraft:support\"];\r\n      if (support?.shape === \"fence\") return 1.0;\r\n      if (\"minecraft:connection_rule\" in components) return 0.7;\r\n      const geometry = components[\"minecraft:geometry\"];\r\n      if (geometry && JSON.stringify(geometry).includes(\"fence\")) return 0.8;\r\n      const collision = components[\"minecraft:collision_box\"];\r\n      if (collision?.size && collision.size[0] < 16) return 0.6;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  wall: {\r\n    optionalComponents: [\"minecraft:geometry\"],\r\n    validator: (components) => {\r\n      const geometry = components[\"minecraft:geometry\"];\r\n      if (geometry && JSON.stringify(geometry).includes(\"wall\")) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  door: {\r\n    optionalComponents: [\"minecraft:on_interact\"],\r\n    validator: (components) => {\r\n      const hasInteract = \"minecraft:on_interact\" in components;\r\n      const geometry = components[\"minecraft:geometry\"];\r\n      if (geometry && JSON.stringify(geometry).includes(\"door\")) return 1.0;\r\n      if (hasInteract) return 0.6;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  trapdoor: {\r\n    optionalComponents: [\"minecraft:on_interact\"],\r\n    validator: (components) => {\r\n      const geometry = components[\"minecraft:geometry\"];\r\n      if (geometry && JSON.stringify(geometry).includes(\"trapdoor\")) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  // Functional\r\n  workstation: {\r\n    optionalComponents: [\"minecraft:crafting_table\"],\r\n    validator: (components) => {\r\n      const hasCrafting = \"minecraft:crafting_table\" in components;\r\n      const hasInteract = \"minecraft:on_interact\" in components;\r\n      if (hasCrafting) return 1.0;\r\n      if (hasInteract) return 0.5;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  light_source: {\r\n    requiredComponents: [\"minecraft:light_emission\"],\r\n    validator: (components) => {\r\n      const light = components[\"minecraft:light_emission\"];\r\n      if (light !== undefined && light > 0) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  gravity: {\r\n    optionalComponents: [\"minecraft:gravity\"],\r\n    validator: (components) => {\r\n      // Blocks affected by gravity (sand, gravel, etc.)\r\n      return \"minecraft:gravity\" in components ? 1.0 : 0;\r\n    },\r\n  },\r\n\r\n  liquid: {\r\n    optionalComponents: [\"minecraft:liquid\"],\r\n    validator: (components) => {\r\n      return \"minecraft:liquid\" in components ? 1.0 : 0;\r\n    },\r\n  },\r\n\r\n  // Redstone\r\n  redstone_signal: {\r\n    optionalComponents: [\"minecraft:redstone_conductivity\", \"minecraft:redstone_producer\"],\r\n    validator: (components) => {\r\n      if (\"minecraft:redstone_producer\" in components) return 1.0;\r\n      const redstone = components[\"minecraft:redstone_conductivity\"];\r\n      if (redstone?.emits_redstone) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  redstone_receiver: {\r\n    optionalComponents: [\"minecraft:redstone_conductivity\"],\r\n    validator: (components) => {\r\n      const redstone = components[\"minecraft:redstone_conductivity\"];\r\n      if (redstone && !redstone.emits_redstone) return 0.8;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  button: {\r\n    optionalComponents: [\"minecraft:on_interact\"],\r\n    validator: (components) => {\r\n      const geometry = components[\"minecraft:geometry\"];\r\n      if (geometry && JSON.stringify(geometry).includes(\"button\")) return 1.0;\r\n      // Buttons are small interactable blocks\r\n      const collision = components[\"minecraft:collision_box\"];\r\n      const hasInteract = \"minecraft:on_interact\" in components;\r\n      if (hasInteract && collision?.size && collision.size[1] < 4) return 0.8;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  lever: {\r\n    optionalComponents: [\"minecraft:on_interact\"],\r\n    validator: (components) => {\r\n      const geometry = components[\"minecraft:geometry\"];\r\n      if (geometry && JSON.stringify(geometry).includes(\"lever\")) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  pressure_plate: {\r\n    optionalComponents: [\"minecraft:on_step_on\", \"minecraft:on_step_off\"],\r\n    validator: (components) => {\r\n      const hasStepOn = \"minecraft:on_step_on\" in components;\r\n      const hasStepOff = \"minecraft:on_step_off\" in components;\r\n      if (hasStepOn || hasStepOff) return 1.0;\r\n      // Pressure plates are flat\r\n      const collision = components[\"minecraft:collision_box\"];\r\n      if (collision?.size && collision.size[1] <= 1) return 0.6;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  // Properties\r\n  flammable: {\r\n    optionalComponents: [\"minecraft:flammable\"],\r\n    validator: (components) => {\r\n      return \"minecraft:flammable\" in components ? 1.0 : 0;\r\n    },\r\n  },\r\n\r\n  explosion_resistant: {\r\n    optionalComponents: [\"minecraft:destructible_by_explosion\"],\r\n    validator: (components) => {\r\n      const explosionData = components[\"minecraft:destructible_by_explosion\"];\r\n      if (explosionData === false) return 1.0;\r\n      if (explosionData?.explosion_resistance !== undefined && explosionData.explosion_resistance >= 1000) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  slippery: {\r\n    optionalComponents: [\"minecraft:friction\"],\r\n    validator: (components) => {\r\n      const friction = components[\"minecraft:friction\"];\r\n      if (typeof friction === \"number\" && friction < 0.3) return 1.0;\r\n      if (typeof friction === \"number\" && friction < 0.4) return 0.6;\r\n      return 0;\r\n    },\r\n  },\r\n};\r\n\r\n// ============================================================================\r\n// ITEM TRAIT SIGNATURES\r\n// ============================================================================\r\n\r\n/**\r\n * Item trait signature definitions.\r\n */\r\nconst ITEM_TRAIT_SIGNATURES: Record<ItemTraitId, ITraitSignature> = {\r\n  // Tools\r\n  sword: {\r\n    optionalComponents: [\"minecraft:damage\", \"minecraft:weapon\"],\r\n    validator: (components) => {\r\n      const hasDamage = \"minecraft:damage\" in components;\r\n      const hasWeapon = \"minecraft:weapon\" in components;\r\n      const hasDigger = \"minecraft:digger\" in components;\r\n      // Swords have damage but aren't mining tools\r\n      if (hasDamage && !hasDigger) return 0.9;\r\n      if (hasWeapon && !hasDigger) return 0.8;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  pickaxe: {\r\n    requiredComponents: [\"minecraft:digger\"],\r\n    validator: (components) => {\r\n      const digger = components[\"minecraft:digger\"];\r\n      if (!digger) return 0;\r\n      const rules = JSON.stringify(digger);\r\n      if (rules.includes(\"stone\") || rules.includes(\"ore\") || rules.includes(\"pickaxe\")) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  axe: {\r\n    requiredComponents: [\"minecraft:digger\"],\r\n    validator: (components) => {\r\n      const digger = components[\"minecraft:digger\"];\r\n      if (!digger) return 0;\r\n      const rules = JSON.stringify(digger);\r\n      if (rules.includes(\"wood\") || rules.includes(\"log\") || rules.includes(\"axe\")) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  shovel: {\r\n    requiredComponents: [\"minecraft:digger\"],\r\n    validator: (components) => {\r\n      const digger = components[\"minecraft:digger\"];\r\n      if (!digger) return 0;\r\n      const rules = JSON.stringify(digger);\r\n      if (rules.includes(\"dirt\") || rules.includes(\"sand\") || rules.includes(\"shovel\")) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  hoe: {\r\n    requiredComponents: [\"minecraft:digger\"],\r\n    validator: (components) => {\r\n      const digger = components[\"minecraft:digger\"];\r\n      if (!digger) return 0;\r\n      const rules = JSON.stringify(digger);\r\n      if (rules.includes(\"hoe\") || rules.includes(\"leaves\") || rules.includes(\"hay\")) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  bow: {\r\n    optionalComponents: [\"minecraft:shooter\", \"minecraft:use_modifiers\"],\r\n    validator: (components) => {\r\n      const hasShooter = \"minecraft:shooter\" in components;\r\n      const useModifiers = components[\"minecraft:use_modifiers\"];\r\n      const hasChargeTime = useModifiers?.use_duration !== undefined;\r\n      if (hasShooter && hasChargeTime) return 1.0;\r\n      if (hasShooter) return 0.8;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  crossbow: {\r\n    optionalComponents: [\"minecraft:shooter\"],\r\n    validator: (components) => {\r\n      const shooter = components[\"minecraft:shooter\"];\r\n      if (shooter && JSON.stringify(shooter).includes(\"crossbow\")) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  food: {\r\n    requiredComponents: [\"minecraft:food\"],\r\n    validator: (components) => {\r\n      return \"minecraft:food\" in components ? 1.0 : 0;\r\n    },\r\n  },\r\n\r\n  // Armor\r\n  armor_helmet: {\r\n    requiredComponents: [\"minecraft:wearable\"],\r\n    validator: (components) => {\r\n      const wearable = components[\"minecraft:wearable\"];\r\n      if (wearable?.slot === \"slot.armor.head\") return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  armor_chestplate: {\r\n    requiredComponents: [\"minecraft:wearable\"],\r\n    validator: (components) => {\r\n      const wearable = components[\"minecraft:wearable\"];\r\n      if (wearable?.slot === \"slot.armor.chest\") return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  armor_leggings: {\r\n    requiredComponents: [\"minecraft:wearable\"],\r\n    validator: (components) => {\r\n      const wearable = components[\"minecraft:wearable\"];\r\n      if (wearable?.slot === \"slot.armor.legs\") return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  armor_boots: {\r\n    requiredComponents: [\"minecraft:wearable\"],\r\n    validator: (components) => {\r\n      const wearable = components[\"minecraft:wearable\"];\r\n      if (wearable?.slot === \"slot.armor.feet\") return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  throwable: {\r\n    optionalComponents: [\"minecraft:throwable\", \"minecraft:projectile\"],\r\n    validator: (components) => {\r\n      const hasThrowable = \"minecraft:throwable\" in components;\r\n      const hasProjectile = \"minecraft:projectile\" in components;\r\n      if (hasThrowable || hasProjectile) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n\r\n  placeable: {\r\n    optionalComponents: [\"minecraft:block_placer\", \"minecraft:entity_placer\"],\r\n    validator: (components) => {\r\n      const hasBlockPlacer = \"minecraft:block_placer\" in components;\r\n      const hasEntityPlacer = \"minecraft:entity_placer\" in components;\r\n      if (hasBlockPlacer || hasEntityPlacer) return 1.0;\r\n      return 0;\r\n    },\r\n  },\r\n};\r\n\r\n// ============================================================================\r\n// TRAIT DETECTOR CLASS\r\n// ============================================================================\r\n\r\n/**\r\n * TraitDetector - Detects traits from native Minecraft components.\r\n */\r\nexport default class TraitDetector {\r\n  /** Minimum confidence threshold for including a trait */\r\n  static readonly DEFAULT_MIN_CONFIDENCE = 0.6;\r\n\r\n  /**\r\n   * Detect entity traits from components.\r\n   */\r\n  static detectEntityTraits(\r\n    components: Record<string, any>,\r\n    componentGroups?: Record<string, Record<string, any>>,\r\n    minConfidence: number = TraitDetector.DEFAULT_MIN_CONFIDENCE\r\n  ): ITraitDetectionResult<EntityTraitId>[] {\r\n    const results: ITraitDetectionResult<EntityTraitId>[] = [];\r\n\r\n    // Merge component group components for detection\r\n    const allComponents = { ...components };\r\n    if (componentGroups) {\r\n      for (const group of Object.values(componentGroups)) {\r\n        Object.assign(allComponents, group);\r\n      }\r\n    }\r\n\r\n    for (const [traitId, signature] of Object.entries(ENTITY_TRAIT_SIGNATURES)) {\r\n      let confidence = 0;\r\n      const matchedComponents: string[] = [];\r\n\r\n      // Check required components\r\n      if (signature.requiredComponents) {\r\n        const hasAllRequired = signature.requiredComponents.every((comp) => {\r\n          if (comp in allComponents) {\r\n            matchedComponents.push(comp);\r\n            return true;\r\n          }\r\n          return false;\r\n        });\r\n        if (!hasAllRequired) continue; // Skip if missing required\r\n        confidence = 0.5;\r\n      }\r\n\r\n      // Check optional components\r\n      if (signature.optionalComponents) {\r\n        for (const comp of signature.optionalComponents) {\r\n          if (comp in allComponents) {\r\n            matchedComponents.push(comp);\r\n            confidence += 0.1;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Run custom validator\r\n      if (signature.validator) {\r\n        const validatorScore = signature.validator(allComponents, componentGroups);\r\n        confidence = Math.max(confidence, validatorScore);\r\n      }\r\n\r\n      if (confidence >= minConfidence) {\r\n        results.push({\r\n          traitId: traitId as EntityTraitId,\r\n          confidence,\r\n          matchedComponents,\r\n        });\r\n      }\r\n    }\r\n\r\n    // Handle conflicts\r\n    return TraitDetector.resolveConflicts(results, ENTITY_TRAIT_SIGNATURES);\r\n  }\r\n\r\n  /**\r\n   * Detect behavior presets from components.\r\n   */\r\n  static detectBehaviorPresets(\r\n    components: Record<string, any>,\r\n    minConfidence: number = TraitDetector.DEFAULT_MIN_CONFIDENCE\r\n  ): ITraitDetectionResult<EntityBehaviorPreset>[] {\r\n    const results: ITraitDetectionResult<EntityBehaviorPreset>[] = [];\r\n\r\n    for (const [presetId, signature] of Object.entries(BEHAVIOR_PRESET_SIGNATURES)) {\r\n      let confidence = 0;\r\n      const matchedComponents: string[] = [];\r\n\r\n      if (signature.requiredComponents) {\r\n        const hasAllRequired = signature.requiredComponents.every((comp) => {\r\n          if (comp in components) {\r\n            matchedComponents.push(comp);\r\n            return true;\r\n          }\r\n          return false;\r\n        });\r\n        if (!hasAllRequired) continue;\r\n        confidence = 0.7;\r\n      }\r\n\r\n      if (signature.validator) {\r\n        const validatorScore = signature.validator(components);\r\n        confidence = Math.max(confidence, validatorScore);\r\n      }\r\n\r\n      if (confidence >= minConfidence) {\r\n        results.push({\r\n          traitId: presetId as EntityBehaviorPreset,\r\n          confidence,\r\n          matchedComponents,\r\n        });\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  /**\r\n   * Detect block traits from components.\r\n   */\r\n  static detectBlockTraits(\r\n    components: Record<string, any>,\r\n    minConfidence: number = TraitDetector.DEFAULT_MIN_CONFIDENCE\r\n  ): ITraitDetectionResult<BlockTraitId>[] {\r\n    const results: ITraitDetectionResult<BlockTraitId>[] = [];\r\n\r\n    for (const [traitId, signature] of Object.entries(BLOCK_TRAIT_SIGNATURES)) {\r\n      let confidence = 0;\r\n      const matchedComponents: string[] = [];\r\n\r\n      // Check required components\r\n      if (signature.requiredComponents) {\r\n        const hasAllRequired = signature.requiredComponents.every((comp) => {\r\n          if (comp in components) {\r\n            matchedComponents.push(comp);\r\n            return true;\r\n          }\r\n          return false;\r\n        });\r\n        if (!hasAllRequired) continue;\r\n        confidence = 0.5;\r\n      }\r\n\r\n      // Check optional components\r\n      if (signature.optionalComponents) {\r\n        for (const comp of signature.optionalComponents) {\r\n          if (comp in components) {\r\n            matchedComponents.push(comp);\r\n            confidence += 0.1;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Run custom validator\r\n      if (signature.validator) {\r\n        const validatorScore = signature.validator(components);\r\n        confidence = Math.max(confidence, validatorScore);\r\n      }\r\n\r\n      if (confidence >= minConfidence) {\r\n        results.push({\r\n          traitId: traitId as BlockTraitId,\r\n          confidence,\r\n          matchedComponents,\r\n        });\r\n      }\r\n    }\r\n\r\n    // Resolve conflicts (some block traits are mutually exclusive)\r\n    return TraitDetector.resolveConflicts(results, BLOCK_TRAIT_SIGNATURES);\r\n  }\r\n\r\n  /**\r\n   * Detect item traits from components.\r\n   */\r\n  static detectItemTraits(\r\n    components: Record<string, any>,\r\n    minConfidence: number = TraitDetector.DEFAULT_MIN_CONFIDENCE\r\n  ): ITraitDetectionResult<ItemTraitId>[] {\r\n    const results: ITraitDetectionResult<ItemTraitId>[] = [];\r\n\r\n    for (const [traitId, signature] of Object.entries(ITEM_TRAIT_SIGNATURES)) {\r\n      let confidence = 0;\r\n      const matchedComponents: string[] = [];\r\n\r\n      // Check required components\r\n      if (signature.requiredComponents) {\r\n        const hasAllRequired = signature.requiredComponents.every((comp) => {\r\n          if (comp in components) {\r\n            matchedComponents.push(comp);\r\n            return true;\r\n          }\r\n          return false;\r\n        });\r\n        if (!hasAllRequired) continue;\r\n        confidence = 0.5;\r\n      }\r\n\r\n      // Check optional components\r\n      if (signature.optionalComponents) {\r\n        for (const comp of signature.optionalComponents) {\r\n          if (comp in components) {\r\n            matchedComponents.push(comp);\r\n            confidence += 0.1;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Run custom validator\r\n      if (signature.validator) {\r\n        const validatorScore = signature.validator(components);\r\n        confidence = Math.max(confidence, validatorScore);\r\n      }\r\n\r\n      if (confidence >= minConfidence) {\r\n        results.push({\r\n          traitId: traitId as ItemTraitId,\r\n          confidence,\r\n          matchedComponents,\r\n        });\r\n      }\r\n    }\r\n\r\n    // Resolve conflicts (e.g., can't be both sword and pickaxe)\r\n    return TraitDetector.resolveConflicts(results, ITEM_TRAIT_SIGNATURES);\r\n  }\r\n\r\n  /**\r\n   * Extract simplified properties from entity components.\r\n   */\r\n  static extractEntityProperties(components: Record<string, any>): IExtractedProperties {\r\n    const props: IExtractedProperties = {};\r\n\r\n    // Health\r\n    const health = components[\"minecraft:health\"];\r\n    if (health) {\r\n      props.health = health.max ?? health.value;\r\n    }\r\n\r\n    // Attack damage\r\n    const attack = components[\"minecraft:attack\"];\r\n    if (attack?.damage !== undefined) {\r\n      props.attackDamage = attack.damage;\r\n    }\r\n\r\n    // Movement speed\r\n    const movement = components[\"minecraft:movement\"];\r\n    if (movement?.value !== undefined) {\r\n      props.movementSpeed = movement.value;\r\n    }\r\n\r\n    // Scale\r\n    const scale = components[\"minecraft:scale\"];\r\n    if (scale?.value !== undefined && scale.value !== 1.0) {\r\n      props.scale = scale.value;\r\n    }\r\n\r\n    // Follow range (from targeting behaviors)\r\n    const targeting = components[\"minecraft:behavior.nearest_attackable_target\"];\r\n    if (targeting?.entity_types?.[0]?.max_dist) {\r\n      props.followRange = targeting.entity_types[0].max_dist;\r\n    }\r\n\r\n    // Knockback resistance\r\n    const knockback = components[\"minecraft:knockback_resistance\"];\r\n    if (knockback?.value !== undefined) {\r\n      props.knockbackResistance = knockback.value;\r\n    }\r\n\r\n    // Collision box\r\n    const collision = components[\"minecraft:collision_box\"];\r\n    if (collision) {\r\n      props.collisionWidth = collision.width;\r\n      props.collisionHeight = collision.height;\r\n    }\r\n\r\n    // Type family\r\n    const family = components[\"minecraft:type_family\"];\r\n    if (family?.family) {\r\n      props.families = Array.isArray(family.family) ? family.family : [family.family];\r\n    }\r\n\r\n    return props;\r\n  }\r\n\r\n  /**\r\n   * Extract simplified properties from block components.\r\n   */\r\n  static extractBlockProperties(components: Record<string, any>): IExtractedProperties {\r\n    const props: IExtractedProperties = {};\r\n\r\n    // Destroy time\r\n    const destructible = components[\"minecraft:destructible_by_mining\"];\r\n    if (destructible?.seconds_to_destroy !== undefined) {\r\n      props.destroyTime = destructible.seconds_to_destroy;\r\n    }\r\n\r\n    // Explosion resistance\r\n    const explosion = components[\"minecraft:destructible_by_explosion\"];\r\n    if (explosion?.explosion_resistance !== undefined) {\r\n      props.explosionResistance = explosion.explosion_resistance;\r\n    }\r\n\r\n    // Light emission\r\n    const light = components[\"minecraft:light_emission\"];\r\n    if (light !== undefined) {\r\n      props.lightEmission = typeof light === \"number\" ? light : light.emission;\r\n    }\r\n\r\n    // Light dampening\r\n    const dampen = components[\"minecraft:light_dampening\"];\r\n    if (dampen !== undefined) {\r\n      props.lightDampening = typeof dampen === \"number\" ? dampen : dampen.light_dampening;\r\n    }\r\n\r\n    // Friction\r\n    const friction = components[\"minecraft:friction\"];\r\n    if (friction !== undefined) {\r\n      props.friction = typeof friction === \"number\" ? friction : friction.value;\r\n    }\r\n\r\n    // Map color\r\n    const mapColor = components[\"minecraft:map_color\"];\r\n    if (mapColor) {\r\n      props.mapColor = typeof mapColor === \"string\" ? mapColor : mapColor.color;\r\n    }\r\n\r\n    return props;\r\n  }\r\n\r\n  /**\r\n   * Extract simplified properties from item components.\r\n   */\r\n  static extractItemProperties(components: Record<string, any>): IExtractedProperties {\r\n    const props: IExtractedProperties = {};\r\n\r\n    // Max stack size\r\n    const stack = components[\"minecraft:max_stack_size\"];\r\n    if (stack !== undefined) {\r\n      props.maxStackSize = typeof stack === \"number\" ? stack : stack.max_stack_size;\r\n    }\r\n\r\n    // Durability\r\n    const durability = components[\"minecraft:durability\"];\r\n    if (durability?.max_durability !== undefined) {\r\n      props.durability = durability.max_durability;\r\n    }\r\n\r\n    // Damage (for weapons)\r\n    const damage = components[\"minecraft:damage\"];\r\n    if (damage?.value !== undefined) {\r\n      props.damage = damage.value;\r\n    }\r\n\r\n    // Food properties\r\n    const food = components[\"minecraft:food\"];\r\n    if (food) {\r\n      props.nutrition = food.nutrition;\r\n      props.saturation = food.saturation_modifier;\r\n    }\r\n\r\n    return props;\r\n  }\r\n\r\n  /**\r\n   * Resolve conflicting traits by keeping higher confidence ones.\r\n   */\r\n  private static resolveConflicts<T extends string>(\r\n    results: ITraitDetectionResult<T>[],\r\n    signatures: Record<string, ITraitSignature>\r\n  ): ITraitDetectionResult<T>[] {\r\n    const resolved: ITraitDetectionResult<T>[] = [];\r\n    const excluded = new Set<string>();\r\n\r\n    // Sort by confidence descending\r\n    const sorted = [...results].sort((a, b) => b.confidence - a.confidence);\r\n\r\n    for (const result of sorted) {\r\n      if (excluded.has(result.traitId)) continue;\r\n\r\n      resolved.push(result);\r\n\r\n      // Mark conflicts as excluded\r\n      const sig = signatures[result.traitId];\r\n      if (sig?.conflictsWith) {\r\n        for (const conflict of sig.conflictsWith) {\r\n          excluded.add(conflict);\r\n        }\r\n      }\r\n    }\r\n\r\n    return resolved;\r\n  }\r\n\r\n  /**\r\n   * Get components that are NOT explained by any detected trait.\r\n   * These should be included as explicit components in the schema.\r\n   */\r\n  static getUnexplainedComponents(\r\n    allComponents: Record<string, any>,\r\n    detectedTraits: ITraitDetectionResult<string>[]\r\n  ): string[] {\r\n    const explainedComponents = new Set<string>();\r\n\r\n    for (const trait of detectedTraits) {\r\n      for (const comp of trait.matchedComponents) {\r\n        explainedComponents.add(comp);\r\n      }\r\n    }\r\n\r\n    return Object.keys(allComponents).filter((comp) => !explainedComponents.has(comp));\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * PlaywrightPageRenderer - Utility for rendering 3D content to PNG using Playwright.\r\n *\r\n * Browser resolution strategy (in order):\r\n * 1. Use system Chrome (channel: \"chrome\") - works on dev machines with Chrome installed\r\n * 2. Use system Edge (channel: \"msedge\") - works on Windows machines with Edge\r\n * 3. Use Playwright's bundled Chromium - requires `npx playwright install chromium`\r\n * 4. Use executable at CHROMIUM_PATH environment variable - for container scenarios\r\n *\r\n * See app/docs/PlaywrightBrowserManagement.md for a discussion of Playwright session\r\n * management techniques.\r\n */\r\n\r\nimport Log from \"../core/Log\";\r\n\r\nexport interface RenderOptions {\r\n  /** Width of the rendered image in pixels */\r\n  width?: number;\r\n  /** Height of the rendered image in pixels */\r\n  height?: number;\r\n  /** Time to wait for scene to render (ms) */\r\n  renderWaitTime?: number;\r\n  /** Time to wait for canvas element to appear and stabilize (ms). Default: 30000 for CI reliability with SwiftShader */\r\n  canvasTimeout?: number;\r\n  /** Use fast mode - reduces wait times and reuses page (default: false) */\r\n  fastMode?: boolean;\r\n  /** Camera distance from subject */\r\n  cameraDistance?: number;\r\n  /** Camera angle (radians) */\r\n  cameraAlpha?: number;\r\n  cameraBeta?: number;\r\n  /** Clip region for screenshot - crops out borders from the page */\r\n  clip?: {\r\n    x: number;\r\n    y: number;\r\n    width: number;\r\n    height: number;\r\n  };\r\n  /** Image format: 'png' or 'jpeg' (default: 'png') */\r\n  imageFormat?: \"png\" | \"jpeg\";\r\n  /** JPEG quality 0-100 (default: 80). Only applies when imageFormat is 'jpeg' */\r\n  jpegQuality?: number;\r\n  /** Force a fresh context even if viewport hasn't changed. Use when content at the same URL has changed. */\r\n  forceNewContext?: boolean;\r\n  /** Force a page reload even when reusing context. Use for multi-angle renders where only URL params change. */\r\n  forceReload?: boolean;\r\n  /**\r\n   * When rendering blocks, skip the gradient skybox and paint a uniform light\r\n   * sky-blue clearColor instead. Used by the block sprite atlas pipeline so\r\n   * composited thumbnails don't carry a gradient background.\r\n   */\r\n  flatBackground?: boolean;\r\n}\r\n\r\nexport interface RenderResult {\r\n  /** Image data as Uint8Array (PNG or JPEG depending on options) */\r\n  imageData: Uint8Array | undefined;\r\n  /** Error message if rendering failed */\r\n  error?: string;\r\n  /** Browser used for rendering */\r\n  browserUsed?: string;\r\n  /** Image format of the returned data */\r\n  imageFormat?: \"png\" | \"jpeg\";\r\n}\r\n\r\ninterface BrowserLaunchConfig {\r\n  name: string;\r\n  launchOptions: {\r\n    channel?: string;\r\n    executablePath?: string;\r\n    headless?: boolean;\r\n    args?: string[];\r\n  };\r\n}\r\n\r\nexport default class PlaywrightPageRenderer {\r\n  private _baseUrl: string;\r\n  private _browser: any = null;\r\n  private _browserName: string = \"\";\r\n  private _playwright: any = null;\r\n\r\n  // Persistent context/page for fast batch rendering\r\n  private _persistentContext: any = null;\r\n  private _persistentPage: any = null;\r\n  private _persistentViewport: { width: number; height: number } | null = null;\r\n  private _lastModelPath: string | null = null; // Track last model key (without camera params) to detect changes\r\n  private _lastFullUrl: string | null = null; // Track full URL to detect camera param changes\r\n\r\n  constructor(baseUrl: string = \"http://localhost:6126\") {\r\n    this._baseUrl = baseUrl;\r\n  }\r\n\r\n  /**\r\n   * Reset the persistent page/context. Call this when switching between\r\n   * different model types to ensure clean state.\r\n   */\r\n  async resetPersistentPage(): Promise<void> {\r\n    if (this._persistentContext) {\r\n      try {\r\n        await this._persistentContext.close();\r\n      } catch {\r\n        // Ignore close errors\r\n      }\r\n    }\r\n    this._persistentContext = null;\r\n    this._persistentPage = null;\r\n    this._persistentViewport = null;\r\n    this._lastModelPath = null;\r\n    this._lastFullUrl = null;\r\n  }\r\n\r\n  /**\r\n   * Get the list of browser configurations to try, in order of preference.\r\n   */\r\n  private _getBrowserConfigs(): BrowserLaunchConfig[] {\r\n    const configs: BrowserLaunchConfig[] = [];\r\n\r\n    // Common args for all browsers - includes flags for:\r\n    // - Security sandbox (needed for CI runners)\r\n    // - Cross-origin resource loading (needed for mctools.dev textures)\r\n    // - WebGL in headless mode (critical for 3D rendering on CI)\r\n    const commonArgs = [\r\n      \"--no-sandbox\",\r\n      \"--disable-setuid-sandbox\",\r\n      \"--disable-web-security\", // Allow cross-origin requests (needed for mctools.dev textures)\r\n      \"--allow-running-insecure-content\",\r\n      // WebGL flags for headless rendering - without these, canvas may render black\r\n      \"--enable-webgl\",\r\n      \"--use-gl=angle\", // Use ANGLE for WebGL (works on most systems)\r\n      \"--use-angle=swiftshader\", // Use SwiftShader software renderer as fallback\r\n      \"--enable-unsafe-swiftshader\", // Enable SwiftShader for software WebGL on CI\r\n      \"--enable-gpu\",\r\n      \"--ignore-gpu-blocklist\", // Allow WebGL even on blocklisted GPUs\r\n      \"--disable-gpu-sandbox\", // Needed for some CI environments\r\n    ];\r\n\r\n    // 1. System Chrome (most common on dev machines)\r\n    configs.push({\r\n      name: \"System Chrome\",\r\n      launchOptions: {\r\n        channel: \"chrome\",\r\n        headless: true,\r\n        args: commonArgs,\r\n      },\r\n    });\r\n\r\n    // 2. System Edge (common on Windows)\r\n    configs.push({\r\n      name: \"System Edge\",\r\n      launchOptions: {\r\n        channel: \"msedge\",\r\n        headless: true,\r\n        args: commonArgs,\r\n      },\r\n    });\r\n\r\n    // 3. Environment-specified Chromium path (for containers)\r\n    const chromiumPath = process.env.CHROMIUM_PATH;\r\n    if (chromiumPath) {\r\n      configs.push({\r\n        name: \"Custom Chromium (CHROMIUM_PATH)\",\r\n        launchOptions: {\r\n          executablePath: chromiumPath,\r\n          headless: true,\r\n          args: commonArgs,\r\n        },\r\n      });\r\n    }\r\n\r\n    // 4. Common Linux container paths\r\n    const linuxPaths = [\"/usr/bin/chromium\", \"/usr/bin/chromium-browser\", \"/usr/bin/google-chrome\"];\r\n\r\n    for (const linuxPath of linuxPaths) {\r\n      configs.push({\r\n        name: `Linux Chromium (${linuxPath})`,\r\n        launchOptions: {\r\n          executablePath: linuxPath,\r\n          headless: true,\r\n          args: commonArgs,\r\n        },\r\n      });\r\n    }\r\n\r\n    // 5. Playwright's bundled Chromium (requires npx playwright install)\r\n    configs.push({\r\n      name: \"Playwright Bundled Chromium\",\r\n      launchOptions: {\r\n        headless: true,\r\n        args: commonArgs,\r\n      },\r\n    });\r\n\r\n    return configs;\r\n  }\r\n\r\n  /**\r\n   * Initialize the browser with fallback strategy.\r\n   * Tries multiple browser configurations until one works.\r\n   */\r\n  async initialize(): Promise<boolean> {\r\n    if (this._browser) {\r\n      return true;\r\n    }\r\n\r\n    try {\r\n      // Dynamic import of playwright\r\n      this._playwright = await import(\"playwright\");\r\n    } catch (e) {\r\n      Log.fail(\"Playwright not installed. Run: npm install playwright\");\r\n      return false;\r\n    }\r\n\r\n    const configs = this._getBrowserConfigs();\r\n\r\n    for (const config of configs) {\r\n      try {\r\n        Log.verbose(`Trying browser: ${config.name}...`);\r\n        this._browser = await this._playwright.chromium.launch(config.launchOptions);\r\n        this._browserName = config.name;\r\n        Log.verbose(`HeadlessRenderer: Using ${config.name}`);\r\n        return true;\r\n      } catch (e: any) {\r\n        Log.verbose(`${config.name} not available: ${e.message}`);\r\n        continue;\r\n      }\r\n    }\r\n\r\n    Log.fail(\r\n      \"HeadlessRenderer: No browser available. Options:\\n\" +\r\n        \"  1. Install Chrome or Edge on your system\\n\" +\r\n        \"  2. Run: npx playwright install chromium\\n\" +\r\n        \"  3. In containers, install chromium and set CHROMIUM_PATH=/usr/bin/chromium\"\r\n    );\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Warm up the browser by creating and destroying a test context.\r\n   * This ensures the browser is fully ready before the first real render.\r\n   * Call this after initialize() to improve first-render reliability.\r\n   */\r\n  async warmUp(): Promise<boolean> {\r\n    if (!this._browser) {\r\n      return false;\r\n    }\r\n\r\n    try {\r\n      Log.verbose(\"PlaywrightPageRenderer: Warming up browser...\");\r\n      const testContext = await this._browser.newContext({\r\n        viewport: { width: 100, height: 100 },\r\n      });\r\n      const testPage = await testContext.newPage();\r\n      // Navigate to a simple about:blank to exercise the browser\r\n      await testPage.goto(\"about:blank\", { waitUntil: \"load\", timeout: 5000 });\r\n      await testContext.close();\r\n      Log.verbose(\"PlaywrightPageRenderer: Browser warm-up complete\");\r\n      return true;\r\n    } catch (e: any) {\r\n      Log.debugAlert(`PlaywrightPageRenderer: Warm-up failed: ${e.message}`);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if the browser is connected and responsive.\r\n   */\r\n  isBrowserReady(): boolean {\r\n    return this._browser !== null && this._browser.isConnected();\r\n  }\r\n\r\n  /**\r\n   * Render a model to PNG.\r\n   *\r\n   * @param modelPath - URL path to the model viewer page\r\n   * @param options - Rendering options\r\n   */\r\n  async renderModel(modelPath: string, options: RenderOptions = {}): Promise<RenderResult> {\r\n    const width = options.width ?? 512;\r\n    const height = options.height ?? 512;\r\n    const renderWaitTime = options.renderWaitTime ?? 3000;\r\n\r\n    if (!this._browser) {\r\n      const initialized = await this.initialize();\r\n      if (!initialized) {\r\n        return {\r\n          imageData: undefined,\r\n          error: \"Failed to initialize browser\",\r\n        };\r\n      }\r\n    }\r\n\r\n    try {\r\n      const context = await this._browser.newContext({\r\n        viewport: { width, height },\r\n      });\r\n\r\n      const page = await context.newPage();\r\n\r\n      // Capture console messages for debugging\r\n      page.on(\"console\", (msg: any) => {\r\n        const type = msg.type();\r\n        const text = msg.text();\r\n        if (type === \"error\" || type === \"warning\") {\r\n          Log.debugAlert(`Browser console ${type}: ${text}`);\r\n        } else {\r\n          Log.verbose(`Browser console ${type}: ${text}`);\r\n        }\r\n      });\r\n\r\n      // Capture page errors\r\n      page.on(\"pageerror\", (error: Error) => {\r\n        Log.debugAlert(`Browser page error: ${error.message}`);\r\n      });\r\n\r\n      // Navigate to the model viewer page\r\n      const fullUrl = `${this._baseUrl}${modelPath}`;\r\n      Log.verbose(`Navigating to: ${fullUrl}`);\r\n\r\n      // Use domcontentloaded instead of networkidle to prevent hangs when fetching textures\r\n      await page.goto(fullUrl, { waitUntil: \"domcontentloaded\" });\r\n\r\n      // Wait for the scene to render\r\n      await page.waitForTimeout(renderWaitTime);\r\n\r\n      // Debug: Log the page content if verbose (use short timeout to avoid blocking on CI)\r\n      const bodyText = await page\r\n        .locator(\"body\")\r\n        .textContent({ timeout: 5000 })\r\n        .catch((): null => null);\r\n      if (bodyText) {\r\n        Log.verbose(`Page body text: ${bodyText.substring(0, 500)}`);\r\n      }\r\n\r\n      // Debug: Check what elements exist\r\n      const rootElement = await page.locator(\"#root\").count();\r\n      Log.verbose(`#root element count: ${rootElement}`);\r\n\r\n      // Ensure canvas exists\r\n      const canvasCount = await page.locator(\"canvas\").count();\r\n      Log.verbose(`Canvas element count: ${canvasCount}`);\r\n\r\n      if (canvasCount === 0) {\r\n        // Check for error messages in the page (use short timeout to avoid blocking)\r\n        const errorText = await page\r\n          .locator(\".error, .Error, [class*='error']\")\r\n          .textContent({ timeout: 5000 })\r\n          .catch((): null => null);\r\n        if (errorText) {\r\n          Log.debugAlert(`Page error text: ${errorText}`);\r\n        }\r\n\r\n        await context.close();\r\n        return {\r\n          imageData: undefined,\r\n          error: \"No canvas element found - scene may not have rendered.\" + (errorText ? \" \" + errorText : \"\"),\r\n        };\r\n      }\r\n\r\n      // Use page-level screenshot instead of canvas element screenshot.\r\n      // locator.screenshot() waits for element \"stability\" (no bounding box changes between\r\n      // animation frames), which can fail unpredictably with WebGL/Babylon.js canvases that\r\n      // resize during initialization. page.screenshot() captures the viewport directly.\r\n      const format = options.imageFormat || \"png\";\r\n      const canvasTimeout = options.canvasTimeout ?? 30000;\r\n\r\n      // Wait for canvas to be visible before capturing\r\n      try {\r\n        await page.locator(\"canvas\").first().waitFor({ state: \"visible\", timeout: canvasTimeout });\r\n      } catch {\r\n        Log.debugAlert(\"Canvas element not visible within timeout, attempting screenshot anyway.\");\r\n      }\r\n\r\n      const screenshotBuffer = await page.screenshot({\r\n        type: format,\r\n        quality: format === \"jpeg\" ? options.jpegQuality || 80 : undefined,\r\n        omitBackground: false,\r\n        fullPage: false,\r\n        timeout: canvasTimeout,\r\n      });\r\n\r\n      await context.close();\r\n\r\n      return {\r\n        imageData: new Uint8Array(screenshotBuffer),\r\n        browserUsed: this._browserName,\r\n        imageFormat: format,\r\n      };\r\n    } catch (e: any) {\r\n      Log.debugAlert(`renderModel error: ${e.message}`);\r\n      // Ensure context is closed even on error to prevent resource leaks\r\n      try {\r\n        const contexts = this._browser?.contexts?.() ?? [];\r\n        for (const ctx of contexts) {\r\n          await ctx.close().catch(() => {});\r\n        }\r\n      } catch {\r\n        // Ignore cleanup errors\r\n      }\r\n      return {\r\n        imageData: undefined,\r\n        error: `Rendering failed: ${e.message}`,\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Fast render method that reuses page for batch operations.\r\n   * Much faster than renderModel() because it skips context creation overhead.\r\n   *\r\n   * @param modelPath - URL path to navigate to\r\n   * @param options - Rendering options\r\n   */\r\n  async renderModelFast(modelPath: string, options: RenderOptions = {}): Promise<RenderResult> {\r\n    const width = options.width ?? 512;\r\n    const height = options.height ?? 512;\r\n    const renderWaitTime = options.renderWaitTime ?? 1500; // Shorter default for fast mode\r\n\r\n    if (!this._browser) {\r\n      const initialized = await this.initialize();\r\n      if (!initialized) {\r\n        return { imageData: undefined, error: \"Failed to initialize browser\" };\r\n      }\r\n    }\r\n\r\n    // Check if browser is still connected\r\n    if (!this.isBrowserReady()) {\r\n      return {\r\n        imageData: undefined,\r\n        error: \"Browser is disconnected. Please retry - the browser will be reinitialized.\",\r\n      };\r\n    }\r\n\r\n    try {\r\n      // Extract a model identifier from the path (geometry file path is the key)\r\n      // For MCP previews, this is /temp/preview-geometry.json which is the same across calls,\r\n      // so we need to detect when the actual content changes by checking if the URL changed\r\n      // For block viewer, path changes with each block\r\n      const modelKey = modelPath.split(\"&cameraX=\")[0]; // Strip camera params to get model key\r\n\r\n      // Check if we need to recreate the context due to viewport size change, model change, or force flag\r\n      const needsNewContext =\r\n        options.forceNewContext ||\r\n        !this._persistentContext ||\r\n        !this._persistentViewport ||\r\n        this._persistentViewport.width !== width ||\r\n        this._persistentViewport.height !== height ||\r\n        this._lastModelPath !== modelKey; // Also reset when model changes\r\n\r\n      // Track full URL to detect when only camera params change\r\n      // Also force reload when explicitly requested (for multi-angle renders)\r\n      const needsReload =\r\n        options.forceReload ||\r\n        (!needsNewContext && this._persistentPage && this._lastFullUrl && this._lastFullUrl !== modelPath);\r\n\r\n      if (needsNewContext) {\r\n        // Close existing context if any\r\n        if (this._persistentContext) {\r\n          try {\r\n            await this._persistentContext.close();\r\n          } catch (e) {\r\n            // Ignore close errors\r\n          }\r\n          this._persistentContext = null;\r\n          this._persistentPage = null;\r\n          // Brief delay to allow browser to fully clean up previous context\r\n          await new Promise((resolve) => setTimeout(resolve, 50));\r\n        }\r\n\r\n        try {\r\n          this._persistentContext = await this._browser.newContext({\r\n            viewport: { width, height },\r\n          });\r\n          this._persistentPage = await this._persistentContext.newPage();\r\n        } catch (e: any) {\r\n          return { imageData: undefined, error: `Failed to create browser context: ${e.message}` };\r\n        }\r\n\r\n        this._persistentViewport = { width, height };\r\n        this._lastModelPath = modelKey;\r\n      }\r\n\r\n      const page = this._persistentPage;\r\n\r\n      // Defensive check - page should never be null at this point\r\n      if (!page) {\r\n        return { imageData: undefined, error: \"Browser page is null - context creation may have failed silently\" };\r\n      }\r\n\r\n      const fullUrl = `${this._baseUrl}${modelPath}`;\r\n\r\n      // DEBUG: Capture console logs from the browser\r\n      page.on(\"console\", (msg: any) => {\r\n        const text = msg.text();\r\n        if (text.includes(\"[STRUCTURE DEBUG]\") || text.includes(\"[TEXTURE DEBUG]\")) {\r\n          console.log(`[BROWSER] ${text}`);\r\n        }\r\n      });\r\n\r\n      // If only camera params changed (same modelKey, different full URL), reload the page\r\n      // to force React to reinitialize with new props\r\n      if (needsReload && !needsNewContext) {\r\n        // BUG FIX: When reloading, the old canvas is still visible during navigation.\r\n        // This causes waitFor({ state: \"visible\" }) to return immediately with stale content.\r\n        // Solution: Navigate and wait for a fresh render cycle.\r\n\r\n        try {\r\n          await page.goto(fullUrl, { waitUntil: \"load\", timeout: 30000 });\r\n        } catch (e: any) {\r\n          return { imageData: undefined, error: `Page navigation failed (reload): ${e.message}` };\r\n        }\r\n\r\n        // After navigation, wait for the canvas to appear\r\n        // The canvas waitFor below will handle this, but we add a small delay\r\n        // to ensure React has time to process the new URL params and re-render\r\n        await page.waitForTimeout(200);\r\n      } else if (!needsNewContext) {\r\n        // Reusing context without reload - URL hasn't changed\r\n        // This shouldn't happen in multi-angle mode, but handle it anyway\r\n      } else {\r\n        // New context - navigate for the first time\r\n        try {\r\n          await page.goto(fullUrl, { waitUntil: \"load\", timeout: 30000 });\r\n        } catch (e: any) {\r\n          return { imageData: undefined, error: `Page navigation failed: ${e.message}` };\r\n        }\r\n      }\r\n      this._lastFullUrl = modelPath;\r\n\r\n      // Wait for canvas to appear - use configurable timeout for large structures\r\n      // Default increased to 10s for slower CI environments\r\n      const canvasTimeout = options.canvasTimeout ?? 10000;\r\n      try {\r\n        await page.locator(\"canvas\").first().waitFor({ state: \"visible\", timeout: canvasTimeout });\r\n      } catch (e) {\r\n        // Canvas not found, provide helpful error\r\n        return {\r\n          imageData: undefined,\r\n          error: `Canvas not found within ${canvasTimeout}ms timeout. Structure may be too large or page failed to load.`,\r\n        };\r\n      }\r\n\r\n      // Brief wait for rendering to complete\r\n      await page.waitForTimeout(renderWaitTime);\r\n\r\n      // Capture screenshot of just the canvas element\r\n      const canvas = page.locator(\"canvas\").first();\r\n      const format = options.imageFormat || \"png\";\r\n\r\n      let screenshotBuffer: Buffer;\r\n      try {\r\n        screenshotBuffer = await canvas.screenshot({\r\n          type: format,\r\n          quality: format === \"jpeg\" ? options.jpegQuality || 80 : undefined,\r\n          omitBackground: false,\r\n          timeout: canvasTimeout, // Use same timeout for screenshot\r\n        });\r\n      } catch (screenshotError: any) {\r\n        return {\r\n          imageData: undefined,\r\n          error: `Screenshot capture failed: ${screenshotError.message}. Canvas may have disappeared or browser context was closed.`,\r\n        };\r\n      }\r\n\r\n      return {\r\n        imageData: new Uint8Array(screenshotBuffer),\r\n        browserUsed: this._browserName,\r\n        imageFormat: format,\r\n      };\r\n    } catch (e: any) {\r\n      // Provide more context about the error\r\n      const errorStack = e.stack ? e.stack.split(\"\\n\").slice(0, 3).join(\" | \") : \"\";\r\n      return {\r\n        imageData: undefined,\r\n        error: `Fast render failed: ${e.message}${errorStack ? ` [${errorStack}]` : \"\"}`,\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Render a block to PNG using the BlockViewer.\r\n   * Uses headless mode to hide UI chrome and get full-viewport canvas.\r\n   */\r\n  async renderBlock(blockName: string, options: RenderOptions = {}): Promise<RenderResult> {\r\n    const flat = options.flatBackground ? \"&flatbg=true\" : \"\";\r\n    return this.renderModel(`/?mode=blockviewer&block=${encodeURIComponent(blockName)}&headless=true${flat}`, options);\r\n  }\r\n\r\n  /**\r\n   * Render multiple blocks efficiently, reusing the browser instance and page.\r\n   * Uses fast mode by default for significantly better performance.\r\n   * @param blocks - Array of { name, outputPath } objects\r\n   * @param options - Rendering options (fastMode defaults to true for batch)\r\n   * @param onProgress - Optional callback for progress reporting\r\n   * @returns Array of results with block names\r\n   */\r\n  async renderBlocks(\r\n    blocks: Array<{ name: string; outputPath: string }>,\r\n    options: RenderOptions = {},\r\n    onProgress?: (blockName: string, index: number, total: number) => void\r\n  ): Promise<Array<{ name: string; success: boolean; error?: string }>> {\r\n    const results: Array<{ name: string; success: boolean; error?: string }> = [];\r\n    const fs = await import(\"fs\");\r\n    const useFastMode = options.fastMode !== false; // Default to true for batch\r\n\r\n    // Initialize browser once\r\n    if (!this._browser) {\r\n      const initialized = await this.initialize();\r\n      if (!initialized) {\r\n        return blocks.map((b) => ({ name: b.name, success: false, error: \"Failed to initialize browser\" }));\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < blocks.length; i++) {\r\n      const block = blocks[i];\r\n      if (onProgress) {\r\n        onProgress(block.name, i, blocks.length);\r\n      }\r\n\r\n      // Use headless=true to hide UI chrome and get full-viewport canvas\r\n      const flat = options.flatBackground ? \"&flatbg=true\" : \"\";\r\n      const modelPath = `/?mode=blockviewer&block=${encodeURIComponent(block.name)}&headless=true${flat}`;\r\n      const result = useFastMode\r\n        ? await this.renderModelFast(modelPath, options)\r\n        : await this.renderModel(modelPath, options);\r\n\r\n      if (result.imageData) {\r\n        try {\r\n          fs.writeFileSync(block.outputPath, Buffer.from(result.imageData));\r\n          results.push({ name: block.name, success: true });\r\n        } catch (e: any) {\r\n          results.push({ name: block.name, success: false, error: `Failed to write file: ${e.message}` });\r\n        }\r\n      } else {\r\n        results.push({ name: block.name, success: false, error: result.error });\r\n      }\r\n    }\r\n\r\n    // Clean up persistent context after batch\r\n    if (this._persistentContext) {\r\n      await this._persistentContext.close();\r\n      this._persistentContext = null;\r\n      this._persistentPage = null;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  /**\r\n   * Render a mob/entity to PNG using the MobViewer.\r\n   * Uses headless mode to hide UI chrome and get full-viewport canvas.\r\n   */\r\n  async renderMob(mobId: string, options: RenderOptions = {}): Promise<RenderResult> {\r\n    return this.renderModel(`/?mode=mobviewer&mob=${encodeURIComponent(mobId)}&headless=true`, options);\r\n  }\r\n\r\n  /**\r\n   * Render an item/attachable to PNG using the ItemViewer.\r\n   * Uses headless mode to hide UI chrome and get full-viewport canvas.\r\n   */\r\n  async renderItem(itemId: string, options: RenderOptions = {}): Promise<RenderResult> {\r\n    return this.renderModel(`/?mode=itemviewer&item=${encodeURIComponent(itemId)}&headless=true`, options);\r\n  }\r\n\r\n  /**\r\n   * Render multiple mobs efficiently, reusing the browser instance and page.\r\n   * Uses fast mode by default for significantly better performance.\r\n   * @param mobs - Array of { name, outputPath } objects\r\n   * @param options - Rendering options (fastMode defaults to true for batch)\r\n   * @param onProgress - Optional callback for progress reporting\r\n   * @returns Array of results with mob names\r\n   */\r\n  async renderMobs(\r\n    mobs: Array<{ name: string; outputPath: string }>,\r\n    options: RenderOptions = {},\r\n    onProgress?: (mobName: string, index: number, total: number) => void\r\n  ): Promise<Array<{ name: string; success: boolean; error?: string }>> {\r\n    return this._renderBatch(\r\n      mobs,\r\n      (name) => `/?mode=mobviewer&mob=${encodeURIComponent(name)}&headless=true`,\r\n      options,\r\n      onProgress\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Render multiple items/attachables efficiently, reusing the browser instance and page.\r\n   * Uses fast mode by default for significantly better performance.\r\n   * @param items - Array of { name, outputPath } objects\r\n   * @param options - Rendering options (fastMode defaults to true for batch)\r\n   * @param onProgress - Optional callback for progress reporting\r\n   * @returns Array of results with item names\r\n   */\r\n  async renderItems(\r\n    items: Array<{ name: string; outputPath: string }>,\r\n    options: RenderOptions = {},\r\n    onProgress?: (itemName: string, index: number, total: number) => void\r\n  ): Promise<Array<{ name: string; success: boolean; error?: string }>> {\r\n    return this._renderBatch(\r\n      items,\r\n      (name) => `/?mode=itemviewer&item=${encodeURIComponent(name)}&headless=true`,\r\n      options,\r\n      onProgress\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Shared batch rendering logic for mobs, items, or any entity type.\r\n   * Reuses the browser instance and page for efficiency.\r\n   */\r\n  private async _renderBatch(\r\n    entries: Array<{ name: string; outputPath: string }>,\r\n    buildPath: (name: string) => string,\r\n    options: RenderOptions = {},\r\n    onProgress?: (name: string, index: number, total: number) => void\r\n  ): Promise<Array<{ name: string; success: boolean; error?: string }>> {\r\n    const results: Array<{ name: string; success: boolean; error?: string }> = [];\r\n    const fs = await import(\"fs\");\r\n    const useFastMode = options.fastMode !== false; // Default to true for batch\r\n\r\n    // Initialize browser once\r\n    if (!this._browser) {\r\n      const initialized = await this.initialize();\r\n      if (!initialized) {\r\n        return entries.map((e) => ({ name: e.name, success: false, error: \"Failed to initialize browser\" }));\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < entries.length; i++) {\r\n      const entry = entries[i];\r\n      if (onProgress) {\r\n        onProgress(entry.name, i, entries.length);\r\n      }\r\n\r\n      const modelPath = buildPath(entry.name);\r\n      const result = useFastMode\r\n        ? await this.renderModelFast(modelPath, options)\r\n        : await this.renderModel(modelPath, options);\r\n\r\n      if (result.imageData) {\r\n        try {\r\n          fs.writeFileSync(entry.outputPath, Buffer.from(result.imageData));\r\n          results.push({ name: entry.name, success: true });\r\n        } catch (e: unknown) {\r\n          const msg = e instanceof Error ? e.message : String(e);\r\n          results.push({ name: entry.name, success: false, error: `Failed to write file: ${msg}` });\r\n        }\r\n      } else {\r\n        results.push({ name: entry.name, success: false, error: result.error });\r\n      }\r\n    }\r\n\r\n    // Clean up persistent context after batch\r\n    if (this._persistentContext) {\r\n      await this._persistentContext.close();\r\n      this._persistentContext = null;\r\n      this._persistentPage = null;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  /**\r\n   * Render a custom model geometry with texture to PNG.\r\n   * Uses a custom route that accepts geometry and texture data.\r\n   *\r\n   * @param geometryId - Identifier for the geometry (used in URL)\r\n   * @param options - Rendering options\r\n   */\r\n  async renderCustomModel(geometryId: string, options: RenderOptions = {}): Promise<RenderResult> {\r\n    return this.renderModel(`/?mode=modelviewer&geometry=${encodeURIComponent(geometryId)}`, options);\r\n  }\r\n\r\n  /**\r\n   * Close the browser and clean up resources.\r\n   */\r\n  async close(): Promise<void> {\r\n    if (this._browser) {\r\n      try {\r\n        // Use a timeout to prevent hanging if the browser process is unresponsive\r\n        await Promise.race([\r\n          this._browser.close(),\r\n          new Promise<void>((_, reject) => setTimeout(() => reject(new Error(\"Browser close timeout\")), 15000)),\r\n        ]);\r\n      } catch (e: any) {\r\n        Log.debugAlert(`Browser close issue: ${e.message}`);\r\n      }\r\n      this._browser = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get information about the current browser being used.\r\n   */\r\n  getBrowserInfo(): string {\r\n    return this._browserName || \"Not initialized\";\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport ImageCodec from \"../core/ImageCodec\";\r\nimport ModelDesignUtilities, { IAtlasRegion } from \"../minecraft/ModelDesignUtilities\";\r\nimport TexturedRectangleGenerator from \"../minecraft/TexturedRectangleGenerator\";\r\nimport { IMcpModelDesign } from \"../minecraft/IMcpModelDesign\";\r\nimport { applyTextureEffects } from \"../minecraft/TextureEffects\";\r\n\r\n/**\r\n * Texture swatch information for rendering.\r\n */\r\nexport interface ITextureSwatch {\r\n  /** Label/name to display with the swatch */\r\n  label: string;\r\n  /** Color value (hex string) */\r\n  color?: string;\r\n  /** SVG content */\r\n  svg?: string;\r\n}\r\n\r\n/**\r\n * Static utility class for PNG generation and image manipulation.\r\n * Provides methods for encoding RGBA pixel data to PNG, rendering SVG to PNG,\r\n * generating textures from atlas regions, and stitching images together.\r\n */\r\nexport default class ImageGenerationUtilities {\r\n  private static _crc32Table: Uint32Array | undefined;\r\n\r\n  // Cached browser instance for rendering - avoids launching a new browser each time\r\n  // Note: Only the browser is cached, contexts are created fresh for each operation\r\n  private static _cachedBrowser: any = null;\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format.\r\n   * Delegates to ImageCodec for cross-platform encoding.\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width in pixels\r\n   * @param height Image height in pixels\r\n   * @returns PNG data as Uint8Array, or undefined on error\r\n   */\r\n  static encodeRgbaToPng(pixels: Uint8Array, width: number, height: number): Uint8Array | undefined {\r\n    return ImageCodec.encodeToPngSync(pixels, width, height);\r\n  }\r\n\r\n  /**\r\n   * Create a PNG chunk with type, data, and CRC.\r\n   *\r\n   * @param type 4-character chunk type (e.g., \"IHDR\", \"IDAT\", \"IEND\")\r\n   * @param data Chunk data\r\n   * @returns Complete chunk including length, type, data, and CRC\r\n   */\r\n  static createPngChunk(type: string, data: Uint8Array): Uint8Array {\r\n    const length = data.length;\r\n    const chunk = new Uint8Array(4 + 4 + length + 4);\r\n    const view = new DataView(chunk.buffer);\r\n\r\n    // Length\r\n    view.setUint32(0, length, false);\r\n\r\n    // Type\r\n    for (let i = 0; i < 4; i++) {\r\n      chunk[4 + i] = type.charCodeAt(i);\r\n    }\r\n\r\n    // Data\r\n    chunk.set(data, 8);\r\n\r\n    // CRC32 of type + data\r\n    const crc = ImageGenerationUtilities.crc32(chunk.subarray(4, 8 + length));\r\n    view.setUint32(8 + length, crc, false);\r\n\r\n    return chunk;\r\n  }\r\n\r\n  /**\r\n   * Calculate CRC32 checksum for PNG chunk validation.\r\n   *\r\n   * @param data Data to calculate CRC32 for\r\n   * @returns CRC32 checksum as unsigned 32-bit integer\r\n   */\r\n  static crc32(data: Uint8Array): number {\r\n    let crc = 0xffffffff;\r\n    const table = ImageGenerationUtilities.getCrc32Table();\r\n\r\n    for (let i = 0; i < data.length; i++) {\r\n      crc = table[(crc ^ data[i]) & 0xff] ^ (crc >>> 8);\r\n    }\r\n\r\n    return (crc ^ 0xffffffff) >>> 0;\r\n  }\r\n\r\n  /**\r\n   * Get the CRC32 lookup table, generating it on first call.\r\n   *\r\n   * @returns CRC32 lookup table\r\n   */\r\n  static getCrc32Table(): Uint32Array {\r\n    if (ImageGenerationUtilities._crc32Table) {\r\n      return ImageGenerationUtilities._crc32Table;\r\n    }\r\n\r\n    const table = new Uint32Array(256);\r\n    for (let i = 0; i < 256; i++) {\r\n      let c = i;\r\n      for (let j = 0; j < 8; j++) {\r\n        c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\r\n      }\r\n      table[i] = c;\r\n    }\r\n\r\n    ImageGenerationUtilities._crc32Table = table;\r\n    return table;\r\n  }\r\n\r\n  /**\r\n   * Render an SVG string to a PNG data URL using resvg-js.\r\n   * This enables SVG support including gradients, shapes, and complex graphics.\r\n   *\r\n   * @param svgContent SVG content as a string\r\n   * @param width Output image width in pixels\r\n   * @param height Output image height in pixels\r\n   * @returns PNG as data URL, or undefined if rendering fails\r\n   */\r\n  static async renderSvgToDataUrl(svgContent: string, width: number, height: number): Promise<string | undefined> {\r\n    try {\r\n      // Use resvg for fast, reliable SVG to PNG conversion without browser dependency\r\n      const { Resvg } = await import(\"@resvg/resvg-js\");\r\n\r\n      // Ensure SVG has proper dimensions set\r\n      // If the SVG doesn't have width/height attributes, we need to add them\r\n      let processedSvg = svgContent;\r\n      if (!svgContent.includes('width=\"') && !svgContent.includes(\"width='\")) {\r\n        // Add width and height to the SVG element\r\n        processedSvg = svgContent.replace(\"<svg\", `<svg width=\"${width}\" height=\"${height}\"`);\r\n      }\r\n\r\n      const resvg = new Resvg(processedSvg, {\r\n        fitTo: {\r\n          mode: \"width\",\r\n          value: width,\r\n        },\r\n        background: \"transparent\",\r\n      });\r\n\r\n      const pngData = resvg.render();\r\n      const pngBuffer = pngData.asPng();\r\n\r\n      // Convert buffer to data URL\r\n      const base64 = pngBuffer.toString(\"base64\");\r\n\r\n      return `data:image/png;base64,${base64}`;\r\n    } catch (e) {\r\n      Log.debugAlert(`renderSvgToDataUrl failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Close the cached browser instance.\r\n   * Call this when done with rendering to clean up resources.\r\n   */\r\n  static async closeCachedBrowser(): Promise<void> {\r\n    if (ImageGenerationUtilities._cachedBrowser) {\r\n      try {\r\n        await ImageGenerationUtilities._cachedBrowser.close();\r\n      } catch {\r\n        // Ignore close errors\r\n      }\r\n      ImageGenerationUtilities._cachedBrowser = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Ensure the cached browser is available.\r\n   * Initializes the browser if not already running.\r\n   * If the browser has disconnected, creates a new one.\r\n   */\r\n  static async ensureCachedBrowser(): Promise<void> {\r\n    // Check if the cached browser is still connected\r\n    if (ImageGenerationUtilities._cachedBrowser) {\r\n      try {\r\n        // Check if browser is still connected by checking isConnected()\r\n        if (!ImageGenerationUtilities._cachedBrowser.isConnected()) {\r\n          Log.debug(\"Cached browser disconnected, will create new one\");\r\n          ImageGenerationUtilities._cachedBrowser = null;\r\n        }\r\n      } catch {\r\n        // If we can't check connection status, assume it's invalid\r\n        Log.debug(\"Cached browser in invalid state, will create new one\");\r\n        ImageGenerationUtilities._cachedBrowser = null;\r\n      }\r\n    }\r\n\r\n    if (!ImageGenerationUtilities._cachedBrowser) {\r\n      // Set environment variable to skip font loading wait during screenshots\r\n      // This prevents timeout issues when fonts fail to load\r\n      process.env[\"PW_TEST_SCREENSHOT_NO_FONTS_READY\"] = \"1\";\r\n\r\n      const playwright = await import(\"playwright\");\r\n\r\n      // Try to find a working browser\r\n      const browserConfigs = [\r\n        { name: \"System Chrome\", options: { channel: \"chrome\" as const, headless: true } },\r\n        { name: \"System Edge\", options: { channel: \"msedge\" as const, headless: true } },\r\n        { name: \"Playwright Chromium\", options: { headless: true } },\r\n      ];\r\n\r\n      for (const config of browserConfigs) {\r\n        try {\r\n          ImageGenerationUtilities._cachedBrowser = await playwright.chromium.launch(config.options);\r\n          Log.debug(`ImageGenerationUtilities: Launched browser using ${config.name}`);\r\n          break;\r\n        } catch {\r\n          continue;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate a PNG texture from atlas regions.\r\n   * Uses Playwright to render SVG content, falls back to simple color fill for color-only regions.\r\n   *\r\n   * @param atlasRegions Array of atlas regions with position, size, and content\r\n   * @param textureSize Texture dimensions as [width, height]\r\n   * @param pixelsPerUnit Pixels per Minecraft unit for pixel art scaling. Default: 2\r\n   * @returns PNG as data URL, or undefined if generation fails\r\n   */\r\n  static async generateTextureFromAtlas(\r\n    atlasRegions: IAtlasRegion[],\r\n    textureSize: [number, number],\r\n    pixelsPerUnit: number = 2\r\n  ): Promise<string | undefined> {\r\n    const [width, height] = textureSize;\r\n\r\n    // Check if any region has SVG content (not noise) - if so, use Playwright rendering\r\n    // Noise textures are now rendered directly with pixel data for better performance\r\n    const hasSvgContent = atlasRegions.some((region) => region.content.svg);\r\n\r\n    if (hasSvgContent) {\r\n      // Generate the full SVG atlas and render it with Playwright\r\n      const atlasSvg = ModelDesignUtilities.generateAtlasSvg(atlasRegions, textureSize);\r\n      const rendered = await ImageGenerationUtilities.renderSvgToDataUrl(atlasSvg, width, height);\r\n      if (rendered) {\r\n        return rendered;\r\n      }\r\n      // Fall back to simple rendering if Playwright fails\r\n      Log.debug(\"SVG rendering failed, falling back to simple color rendering\");\r\n    }\r\n\r\n    // Pixel-based rendering - handles colors and noise directly without Playwright\r\n    const pixels = new Uint8Array(width * height * 4);\r\n\r\n    // Initialize with transparent black\r\n    for (let i = 0; i < pixels.length; i += 4) {\r\n      pixels[i] = 0; // R\r\n      pixels[i + 1] = 0; // G\r\n      pixels[i + 2] = 0; // B\r\n      pixels[i + 3] = 0; // A (transparent)\r\n    }\r\n\r\n    // Fill in each atlas region\r\n    for (const region of atlasRegions) {\r\n      // Prefer background (new unified format), then fall back to noise/color (legacy)\r\n      if (region.content.background) {\r\n        // Generate textured rectangle directly as pixels\r\n        const bgPixels = TexturedRectangleGenerator.generatePixels(\r\n          region.content.background,\r\n          region.width,\r\n          region.height,\r\n          `region-${region.x}-${region.y}`\r\n        );\r\n\r\n        // Copy pixels to atlas at the correct position\r\n        for (let dy = 0; dy < region.height && region.y + dy < height; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < width; dx++) {\r\n            const srcIdx = (dy * region.width + dx) * 4;\r\n            const dstIdx = ((region.y + dy) * width + (region.x + dx)) * 4;\r\n            pixels[dstIdx] = bgPixels[srcIdx];\r\n            pixels[dstIdx + 1] = bgPixels[srcIdx + 1];\r\n            pixels[dstIdx + 2] = bgPixels[srcIdx + 2];\r\n            pixels[dstIdx + 3] = bgPixels[srcIdx + 3];\r\n          }\r\n        }\r\n      } else if (region.content.noise) {\r\n        // Legacy: Generate noise texture directly as pixels - no SVG/Playwright needed\r\n        const noisePixels = TexturedRectangleGenerator.generateNoisePixels(\r\n          region.content.noise,\r\n          region.width,\r\n          region.height,\r\n          `region-${region.x}-${region.y}`\r\n        );\r\n\r\n        // Copy noise pixels to atlas at the correct position\r\n        for (let dy = 0; dy < region.height && region.y + dy < height; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < width; dx++) {\r\n            const srcIdx = (dy * region.width + dx) * 4;\r\n            const dstIdx = ((region.y + dy) * width + (region.x + dx)) * 4;\r\n            pixels[dstIdx] = noisePixels[srcIdx];\r\n            pixels[dstIdx + 1] = noisePixels[srcIdx + 1];\r\n            pixels[dstIdx + 2] = noisePixels[srcIdx + 2];\r\n            pixels[dstIdx + 3] = noisePixels[srcIdx + 3];\r\n          }\r\n        }\r\n      } else if (region.content.color) {\r\n        // Fill with solid color\r\n        const parsed = ModelDesignUtilities.parseColor(region.content.color);\r\n        const color = { r: parsed.r, g: parsed.g, b: parsed.b, a: parsed.a ?? 255 };\r\n\r\n        for (let y = region.y; y < region.y + region.height && y < height; y++) {\r\n          for (let x = region.x; x < region.x + region.width && x < width; x++) {\r\n            const idx = (y * width + x) * 4;\r\n            pixels[idx] = color.r;\r\n            pixels[idx + 1] = color.g;\r\n            pixels[idx + 2] = color.b;\r\n            pixels[idx + 3] = color.a;\r\n          }\r\n        }\r\n      } else if (region.content.svg) {\r\n        // If we reach here with SVG content, Playwright rendering failed\r\n        // Use a placeholder magenta color to make it obvious\r\n        for (let y = region.y; y < region.y + region.height && y < height; y++) {\r\n          for (let x = region.x; x < region.x + region.width && x < width; x++) {\r\n            const idx = (y * width + x) * 4;\r\n            pixels[idx] = 255; // R (magenta)\r\n            pixels[idx + 1] = 0; // G\r\n            pixels[idx + 2] = 255; // B\r\n            pixels[idx + 3] = 255; // A\r\n          }\r\n        }\r\n      }\r\n\r\n      // Apply pixel art on top of background (if present)\r\n      // This is done separately so pixel art can overlay any background type\r\n      if (region.content.pixelArt && region.content.pixelArt.length > 0) {\r\n        // Create a temporary buffer for this region\r\n        const regionPixels = new Uint8Array(region.width * region.height * 4);\r\n\r\n        // Copy current region content to temp buffer\r\n        for (let dy = 0; dy < region.height && region.y + dy < height; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < width; dx++) {\r\n            const srcIdx = ((region.y + dy) * width + (region.x + dx)) * 4;\r\n            const dstIdx = (dy * region.width + dx) * 4;\r\n            regionPixels[dstIdx] = pixels[srcIdx];\r\n            regionPixels[dstIdx + 1] = pixels[srcIdx + 1];\r\n            regionPixels[dstIdx + 2] = pixels[srcIdx + 2];\r\n            regionPixels[dstIdx + 3] = pixels[srcIdx + 3];\r\n          }\r\n        }\r\n\r\n        // Apply pixel art layers\r\n        TexturedRectangleGenerator.applyPixelArtLayers(\r\n          regionPixels,\r\n          region.width,\r\n          region.height,\r\n          region.content.pixelArt,\r\n          pixelsPerUnit\r\n        );\r\n\r\n        // Copy back to atlas\r\n        for (let dy = 0; dy < region.height && region.y + dy < height; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < width; dx++) {\r\n            const srcIdx = (dy * region.width + dx) * 4;\r\n            const dstIdx = ((region.y + dy) * width + (region.x + dx)) * 4;\r\n            pixels[dstIdx] = regionPixels[srcIdx];\r\n            pixels[dstIdx + 1] = regionPixels[srcIdx + 1];\r\n            pixels[dstIdx + 2] = regionPixels[srcIdx + 2];\r\n            pixels[dstIdx + 3] = regionPixels[srcIdx + 3];\r\n          }\r\n        }\r\n      }\r\n\r\n      // Apply post-processing effects (lighting, borders, overlays, etc.)\r\n      // This is done after pixel art so effects can modify the complete texture\r\n      if (region.content.effects) {\r\n        // Create a temporary buffer for this region\r\n        const regionPixels = new Uint8Array(region.width * region.height * 4);\r\n\r\n        // Copy current region content to temp buffer\r\n        for (let dy = 0; dy < region.height && region.y + dy < height; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < width; dx++) {\r\n            const srcIdx = ((region.y + dy) * width + (region.x + dx)) * 4;\r\n            const dstIdx = (dy * region.width + dx) * 4;\r\n            regionPixels[dstIdx] = pixels[srcIdx];\r\n            regionPixels[dstIdx + 1] = pixels[srcIdx + 1];\r\n            regionPixels[dstIdx + 2] = pixels[srcIdx + 2];\r\n            regionPixels[dstIdx + 3] = pixels[srcIdx + 3];\r\n          }\r\n        }\r\n\r\n        // Apply effects to region\r\n        applyTextureEffects(regionPixels, region.width, region.height, region.content.effects);\r\n\r\n        // Copy back to atlas\r\n        for (let dy = 0; dy < region.height && region.y + dy < height; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < width; dx++) {\r\n            const srcIdx = (dy * region.width + dx) * 4;\r\n            const dstIdx = ((region.y + dy) * width + (region.x + dx)) * 4;\r\n            pixels[dstIdx] = regionPixels[srcIdx];\r\n            pixels[dstIdx + 1] = regionPixels[srcIdx + 1];\r\n            pixels[dstIdx + 2] = regionPixels[srcIdx + 2];\r\n            pixels[dstIdx + 3] = regionPixels[srcIdx + 3];\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Encode as PNG using a minimal PNG encoder\r\n    const pngData = ImageGenerationUtilities.encodeRgbaToPng(pixels, width, height);\r\n    if (pngData) {\r\n      return `data:image/png;base64,${Buffer.from(pngData).toString(\"base64\")}`;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Stitch multiple images together with labels in a grid layout.\r\n   * Uses Playwright to compose images and add text labels.\r\n   *\r\n   * @param images Array of images with labels and PNG data (may include isWide property for pyramid layout)\r\n   * @param singleWidth Width of each individual image (half-width for pyramid layout)\r\n   * @param singleHeight Height of each individual image\r\n   * @param cols Number of columns in grid (default: images.length for horizontal row)\r\n   * @param rows Number of rows in grid (default: 1 for horizontal row)\r\n   * @param layout Optional layout mode: \"pyramid\" for 2-on-top, 1-spanning-bottom layout\r\n   * @returns Stitched image as PNG data, or first image on failure\r\n   */\r\n  static async stitchImagesWithLabels(\r\n    images: { label: string; imageData: Uint8Array; isWide?: boolean }[],\r\n    singleWidth: number,\r\n    singleHeight: number,\r\n    cols?: number,\r\n    rows?: number,\r\n    layout?: \"pyramid\" | undefined\r\n  ): Promise<Uint8Array | undefined> {\r\n    try {\r\n      // Use cached browser for performance\r\n      await ImageGenerationUtilities.ensureCachedBrowser();\r\n\r\n      if (!ImageGenerationUtilities._cachedBrowser) {\r\n        Log.debug(\"No browser available for image stitching\");\r\n        return images[0]?.imageData; // Fall back to first image\r\n      }\r\n\r\n      // Use provided grid dimensions or default to horizontal row\r\n      const gridCols = cols ?? images.length;\r\n      const gridRows = rows ?? 1;\r\n      const isPyramidLayout = layout === \"pyramid\" && images.length === 3;\r\n\r\n      const labelHeight = 30;\r\n      const totalWidth = singleWidth * gridCols;\r\n      const totalHeight = (singleHeight + labelHeight) * gridRows;\r\n\r\n      // Create fresh context for reliability (browser is cached, contexts are cheap)\r\n      let context;\r\n      try {\r\n        context = await ImageGenerationUtilities._cachedBrowser.newContext({\r\n          viewport: { width: totalWidth, height: totalHeight },\r\n        });\r\n        const page = await context.newPage();\r\n\r\n        // Create HTML with canvas for stitching\r\n        const imageDataUrls = images.map((img) => {\r\n          const base64 = Buffer.from(img.imageData).toString(\"base64\");\r\n          return `data:image/png;base64,${base64}`;\r\n        });\r\n\r\n        // Track which images are wide (for pyramid layout)\r\n        const isWideFlags = images.map((img) => img.isWide === true);\r\n\r\n        const html = `\r\n          <!DOCTYPE html>\r\n          <html>\r\n          <head>\r\n            <style>\r\n              body { margin: 0; padding: 0; background: transparent; }\r\n              canvas { display: block; }\r\n            </style>\r\n          </head>\r\n          <body>\r\n            <canvas id=\"canvas\" width=\"${totalWidth}\" height=\"${totalHeight}\"></canvas>\r\n            <script>\r\n              async function stitch() {\r\n                const canvas = document.getElementById('canvas');\r\n                const ctx = canvas.getContext('2d');\r\n                \r\n                // Fill background\r\n                ctx.fillStyle = '#1a1a2e';\r\n                ctx.fillRect(0, 0, ${totalWidth}, ${totalHeight});\r\n                \r\n                const imageUrls = ${JSON.stringify(imageDataUrls)};\r\n                const labels = ${JSON.stringify(images.map((i) => i.label))};\r\n                const isWideFlags = ${JSON.stringify(isWideFlags)};\r\n                const isPyramidLayout = ${isPyramidLayout};\r\n                const singleWidth = ${singleWidth};\r\n                const singleHeight = ${singleHeight};\r\n                const labelHeight = ${labelHeight};\r\n                const gridCols = ${gridCols};\r\n                const cellHeight = singleHeight + labelHeight;\r\n                const totalWidth = ${totalWidth};\r\n                \r\n                // Load and draw each image\r\n                for (let i = 0; i < imageUrls.length; i++) {\r\n                  const isWide = isWideFlags[i];\r\n                  const imgWidth = isWide ? totalWidth : singleWidth;\r\n                  \r\n                  // Calculate position based on layout\r\n                  let xOffset, yOffset;\r\n                  if (isPyramidLayout) {\r\n                    if (i < 2) {\r\n                      // First two images: top row, side by side\r\n                      xOffset = i * singleWidth;\r\n                      yOffset = 0;\r\n                    } else {\r\n                      // Third image: bottom row, spanning full width\r\n                      xOffset = 0;\r\n                      yOffset = cellHeight;\r\n                    }\r\n                  } else {\r\n                    // Standard grid layout\r\n                    const col = i % gridCols;\r\n                    const row = Math.floor(i / gridCols);\r\n                    xOffset = col * singleWidth;\r\n                    yOffset = row * cellHeight;\r\n                  }\r\n\r\n                  const img = new Image();\r\n                  await new Promise((resolve, reject) => {\r\n                    img.onload = resolve;\r\n                    img.onerror = reject;\r\n                    img.src = imageUrls[i];\r\n                  });\r\n                  \r\n                  // Draw label background at top of cell\r\n                  ctx.fillStyle = 'rgba(0, 0, 0, 0.7)';\r\n                  ctx.fillRect(xOffset, yOffset, imgWidth, labelHeight);\r\n                  \r\n                  // Draw label text\r\n                  ctx.fillStyle = '#ffffff';\r\n                  ctx.font = 'bold 16px Arial, sans-serif';\r\n                  ctx.textAlign = 'center';\r\n                  ctx.textBaseline = 'middle';\r\n                  ctx.fillText(labels[i], xOffset + imgWidth / 2, yOffset + labelHeight / 2);\r\n                  \r\n                  // Draw image (below label)\r\n                  ctx.drawImage(img, xOffset, yOffset + labelHeight, imgWidth, singleHeight);\r\n                  \r\n                  // Draw vertical separator line between columns (not for wide images)\r\n                  if (!isWide && xOffset > 0) {\r\n                    ctx.strokeStyle = '#444';\r\n                    ctx.lineWidth = 2;\r\n                    ctx.beginPath();\r\n                    ctx.moveTo(xOffset, yOffset);\r\n                    ctx.lineTo(xOffset, yOffset + cellHeight);\r\n                    ctx.stroke();\r\n                  }\r\n                  \r\n                  // Draw horizontal separator line between rows\r\n                  if (yOffset > 0 && xOffset === 0) {\r\n                    ctx.strokeStyle = '#444';\r\n                    ctx.lineWidth = 2;\r\n                    ctx.beginPath();\r\n                    ctx.moveTo(0, yOffset);\r\n                    ctx.lineTo(${totalWidth}, yOffset);\r\n                    ctx.stroke();\r\n                  }\r\n                }\r\n                \r\n                window.stitchComplete = true;\r\n              }\r\n              stitch().catch(e => { window.stitchError = e.message; });\r\n            </script>\r\n          </body>\r\n          </html>\r\n        `;\r\n\r\n        await page.setContent(html, { waitUntil: \"domcontentloaded\" });\r\n\r\n        // Wait for stitching to complete\r\n        // @ts-ignore\r\n        await page.waitForFunction(() => (window as any).stitchComplete || (window as any).stitchError, {\r\n          timeout: 5000,\r\n        });\r\n\r\n        // @ts-ignore\r\n        const error = await page.evaluate(() => (window as any).stitchError);\r\n        if (error) {\r\n          Log.debug(`Image stitch error: ${error}`);\r\n          return images[0]?.imageData;\r\n        }\r\n\r\n        // Get the canvas as PNG - use page.screenshot with clip\r\n        // (locator.screenshot has stability issues)\r\n        const canvasBuffer = await page.screenshot({\r\n          type: \"png\",\r\n          clip: { x: 0, y: 0, width: totalWidth, height: totalHeight },\r\n          timeout: 5000,\r\n        });\r\n\r\n        return canvasBuffer;\r\n      } finally {\r\n        // Always clean up the context\r\n        if (context) {\r\n          try {\r\n            await context.close();\r\n          } catch {\r\n            // Ignore close errors\r\n          }\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.debug(`Image stitching failed: ${e}`);\r\n      return images[0]?.imageData; // Fall back to first image\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Convert PNG image data to JPEG format with optional quality setting.\r\n   * Uses browser canvas for encoding.\r\n   *\r\n   * @param pngData PNG image data as Uint8Array\r\n   * @param quality JPEG quality 1-100 (default: 80)\r\n   * @returns JPEG image data as Uint8Array, or original PNG on failure\r\n   */\r\n  static async convertPngToJpeg(pngData: Uint8Array, quality: number = 80): Promise<Uint8Array> {\r\n    try {\r\n      // Use cached browser for performance\r\n      await ImageGenerationUtilities.ensureCachedBrowser();\r\n\r\n      if (!ImageGenerationUtilities._cachedBrowser) {\r\n        Log.debug(\"No browser available for JPEG conversion\");\r\n        return pngData; // Return original PNG\r\n      }\r\n\r\n      // Create a temporary page/context for conversion (small viewport is fine)\r\n      const tempContext = await ImageGenerationUtilities._cachedBrowser.newContext();\r\n      const page = await tempContext.newPage();\r\n\r\n      const base64Png = Buffer.from(pngData).toString(\"base64\");\r\n      const dataUrl = `data:image/png;base64,${base64Png}`;\r\n\r\n      // Use browser canvas to convert PNG to JPEG\r\n      const html = `\r\n        <!DOCTYPE html>\r\n        <html>\r\n        <head><style>body { margin: 0; }</style></head>\r\n        <body>\r\n          <canvas id=\"canvas\"></canvas>\r\n          <script>\r\n            async function convert() {\r\n              const img = new Image();\r\n              await new Promise((resolve, reject) => {\r\n                img.onload = resolve;\r\n                img.onerror = reject;\r\n                img.src = \"${dataUrl}\";\r\n              });\r\n              \r\n              const canvas = document.getElementById('canvas');\r\n              canvas.width = img.width;\r\n              canvas.height = img.height;\r\n              const ctx = canvas.getContext('2d');\r\n              ctx.drawImage(img, 0, 0);\r\n              \r\n              // Convert to JPEG\r\n              const jpegDataUrl = canvas.toDataURL('image/jpeg', ${quality / 100});\r\n              window.jpegData = jpegDataUrl;\r\n              window.convertComplete = true;\r\n            }\r\n            convert().catch(e => { window.convertError = e.message; });\r\n          </script>\r\n        </body>\r\n        </html>\r\n      `;\r\n\r\n      await page.setContent(html);\r\n\r\n      // Wait for conversion\r\n      // @ts-ignore\r\n      await page.waitForFunction(() => (window as any).convertComplete || (window as any).convertError, {\r\n        timeout: 5000,\r\n      });\r\n\r\n      // @ts-ignore\r\n      const error = await page.evaluate(() => (window as any).convertError);\r\n      if (error) {\r\n        Log.debug(`JPEG conversion error: ${error}`);\r\n        await tempContext.close();\r\n        return pngData;\r\n      }\r\n\r\n      // @ts-ignore\r\n      const jpegDataUrl = await page.evaluate(() => (window as any).jpegData);\r\n      await tempContext.close();\r\n\r\n      // Extract base64 data from data URL\r\n      const base64Match = jpegDataUrl.match(/^data:image\\/jpeg;base64,(.*)$/);\r\n      if (base64Match) {\r\n        return new Uint8Array(Buffer.from(base64Match[1], \"base64\"));\r\n      }\r\n\r\n      return pngData; // Return original on failure\r\n    } catch (e) {\r\n      Log.debug(`JPEG conversion failed: ${e}`);\r\n      return pngData; // Return original PNG on failure\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Recompress a PNG image with maximum compression level (9).\r\n   * Decodes the PNG, then re-encodes with higher compression.\r\n   * This can significantly reduce file size for screenshots.\r\n   *\r\n   * @param pngData PNG image data as Uint8Array\r\n   * @returns Recompressed PNG data, or original on failure\r\n   */\r\n  static recompressPng(pngData: Uint8Array): Uint8Array {\r\n    try {\r\n      const zlib = require(\"zlib\");\r\n\r\n      // Parse the PNG to extract IHDR and pixel data\r\n      const parsed = ImageGenerationUtilities.parsePng(pngData);\r\n      if (!parsed) {\r\n        return pngData; // Return original if parsing fails\r\n      }\r\n\r\n      const { width, height, pixels } = parsed;\r\n\r\n      // PNG signature\r\n      const signature = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\r\n\r\n      // IHDR chunk\r\n      const ihdr = new Uint8Array(13);\r\n      const ihdrView = new DataView(ihdr.buffer);\r\n      ihdrView.setUint32(0, width, false);\r\n      ihdrView.setUint32(4, height, false);\r\n      ihdr[8] = 8; // bit depth\r\n      ihdr[9] = 6; // color type (RGBA)\r\n      ihdr[10] = 0; // compression\r\n      ihdr[11] = 0; // filter\r\n      ihdr[12] = 0; // interlace\r\n\r\n      const ihdrChunk = ImageGenerationUtilities.createPngChunk(\"IHDR\", ihdr);\r\n\r\n      // Prepare raw data with filter bytes (use sub filter for potentially better compression)\r\n      const rawData = new Uint8Array(height * (1 + width * 4));\r\n      for (let y = 0; y < height; y++) {\r\n        rawData[y * (1 + width * 4)] = 0; // filter byte (none - simplest)\r\n        for (let x = 0; x < width; x++) {\r\n          const srcIdx = (y * width + x) * 4;\r\n          const dstIdx = y * (1 + width * 4) + 1 + x * 4;\r\n          rawData[dstIdx] = pixels[srcIdx]; // R\r\n          rawData[dstIdx + 1] = pixels[srcIdx + 1]; // G\r\n          rawData[dstIdx + 2] = pixels[srcIdx + 2]; // B\r\n          rawData[dstIdx + 3] = pixels[srcIdx + 3]; // A\r\n        }\r\n      }\r\n\r\n      // Compress with maximum level (9)\r\n      const compressed = zlib.deflateSync(rawData, { level: 9 });\r\n      const idatChunk = ImageGenerationUtilities.createPngChunk(\"IDAT\", new Uint8Array(compressed));\r\n\r\n      // IEND chunk\r\n      const iendChunk = ImageGenerationUtilities.createPngChunk(\"IEND\", new Uint8Array(0));\r\n\r\n      // Combine all chunks\r\n      const totalLength = signature.length + ihdrChunk.length + idatChunk.length + iendChunk.length;\r\n      const png = new Uint8Array(totalLength);\r\n      let offset = 0;\r\n      png.set(signature, offset);\r\n      offset += signature.length;\r\n      png.set(ihdrChunk, offset);\r\n      offset += ihdrChunk.length;\r\n      png.set(idatChunk, offset);\r\n      offset += idatChunk.length;\r\n      png.set(iendChunk, offset);\r\n\r\n      // Only return if smaller\r\n      if (png.length < pngData.length) {\r\n        return png;\r\n      }\r\n      return pngData;\r\n    } catch (e) {\r\n      Log.debug(`PNG recompression failed: ${e}`);\r\n      return pngData; // Return original on failure\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Parse a PNG file to extract width, height, and pixel data.\r\n   * Supports only 8-bit RGBA (color type 6) non-interlaced PNGs.\r\n   *\r\n   * @param pngData PNG file data\r\n   * @returns Parsed data or undefined on failure\r\n   */\r\n  static parsePng(pngData: Uint8Array): { width: number; height: number; pixels: Uint8Array } | undefined {\r\n    try {\r\n      const zlib = require(\"zlib\");\r\n\r\n      // Check PNG signature\r\n      const signature = [137, 80, 78, 71, 13, 10, 26, 10];\r\n      for (let i = 0; i < 8; i++) {\r\n        if (pngData[i] !== signature[i]) {\r\n          return undefined; // Not a valid PNG\r\n        }\r\n      }\r\n\r\n      let offset = 8;\r\n      let width = 0;\r\n      let height = 0;\r\n      let bitDepth = 0;\r\n      let colorType = 0;\r\n      const idatChunks: Uint8Array[] = [];\r\n\r\n      // Parse chunks\r\n      while (offset < pngData.length) {\r\n        const length = new DataView(pngData.buffer, pngData.byteOffset + offset, 4).getUint32(0, false);\r\n        const type = String.fromCharCode(\r\n          pngData[offset + 4],\r\n          pngData[offset + 5],\r\n          pngData[offset + 6],\r\n          pngData[offset + 7]\r\n        );\r\n\r\n        if (type === \"IHDR\") {\r\n          const ihdrData = pngData.slice(offset + 8, offset + 8 + length);\r\n          const view = new DataView(ihdrData.buffer, ihdrData.byteOffset, ihdrData.length);\r\n          width = view.getUint32(0, false);\r\n          height = view.getUint32(4, false);\r\n          bitDepth = ihdrData[8];\r\n          colorType = ihdrData[9];\r\n\r\n          // Only support 8-bit RGBA for now\r\n          if (bitDepth !== 8 || colorType !== 6) {\r\n            return undefined;\r\n          }\r\n        } else if (type === \"IDAT\") {\r\n          idatChunks.push(pngData.slice(offset + 8, offset + 8 + length));\r\n        } else if (type === \"IEND\") {\r\n          break;\r\n        }\r\n\r\n        offset += 12 + length; // 4 (length) + 4 (type) + length + 4 (CRC)\r\n      }\r\n\r\n      if (width === 0 || height === 0 || idatChunks.length === 0) {\r\n        return undefined;\r\n      }\r\n\r\n      // Concatenate IDAT chunks and decompress\r\n      const totalIdatLength = idatChunks.reduce((sum, chunk) => sum + chunk.length, 0);\r\n      const combinedIdat = new Uint8Array(totalIdatLength);\r\n      let idatOffset = 0;\r\n      for (const chunk of idatChunks) {\r\n        combinedIdat.set(chunk, idatOffset);\r\n        idatOffset += chunk.length;\r\n      }\r\n\r\n      const decompressed = zlib.inflateSync(combinedIdat);\r\n\r\n      // Remove filter bytes and extract raw RGBA pixels\r\n      const pixels = new Uint8Array(width * height * 4);\r\n      const bytesPerRow = 1 + width * 4; // 1 filter byte + RGBA data\r\n\r\n      for (let y = 0; y < height; y++) {\r\n        const filterByte = decompressed[y * bytesPerRow];\r\n        const rowStart = y * bytesPerRow + 1;\r\n        const pixelRowStart = y * width * 4;\r\n\r\n        // Apply reverse filter\r\n        for (let x = 0; x < width * 4; x++) {\r\n          let value = decompressed[rowStart + x];\r\n\r\n          if (filterByte === 1) {\r\n            // Sub filter\r\n            const a = x >= 4 ? pixels[pixelRowStart + x - 4] : 0;\r\n            value = (value + a) & 0xff;\r\n          } else if (filterByte === 2) {\r\n            // Up filter\r\n            const b = y > 0 ? pixels[pixelRowStart - width * 4 + x] : 0;\r\n            value = (value + b) & 0xff;\r\n          } else if (filterByte === 3) {\r\n            // Average filter\r\n            const a = x >= 4 ? pixels[pixelRowStart + x - 4] : 0;\r\n            const b = y > 0 ? pixels[pixelRowStart - width * 4 + x] : 0;\r\n            value = (value + Math.floor((a + b) / 2)) & 0xff;\r\n          } else if (filterByte === 4) {\r\n            // Paeth filter\r\n            const a = x >= 4 ? pixels[pixelRowStart + x - 4] : 0;\r\n            const b = y > 0 ? pixels[pixelRowStart - width * 4 + x] : 0;\r\n            const c = x >= 4 && y > 0 ? pixels[pixelRowStart - width * 4 + x - 4] : 0;\r\n            value = (value + ImageGenerationUtilities.paethPredictor(a, b, c)) & 0xff;\r\n          }\r\n          // filterByte === 0 means no filter, value stays as-is\r\n\r\n          pixels[pixelRowStart + x] = value;\r\n        }\r\n      }\r\n\r\n      return { width, height, pixels };\r\n    } catch (e) {\r\n      Log.debug(`PNG parsing failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Paeth predictor function for PNG decompression.\r\n   */\r\n  private static paethPredictor(a: number, b: number, c: number): number {\r\n    const p = a + b - c;\r\n    const pa = Math.abs(p - a);\r\n    const pb = Math.abs(p - b);\r\n    const pc = Math.abs(p - c);\r\n    if (pa <= pb && pa <= pc) return a;\r\n    if (pb <= pc) return b;\r\n    return c;\r\n  }\r\n\r\n  /**\r\n   * Extract texture swatches from a model design.\r\n   * Collects all named textures from the textures dictionary,\r\n   * plus unique solid colors used on faces.\r\n   *\r\n   * @param design The model design to extract swatches from\r\n   * @returns Array of texture swatches with labels and content\r\n   */\r\n  static extractTextureSwatches(design: IMcpModelDesign): ITextureSwatch[] {\r\n    const swatches: ITextureSwatch[] = [];\r\n    const seenColors = new Set<string>();\r\n\r\n    // Extract from textures dictionary\r\n    if (design.textures) {\r\n      for (const [name, textureDef] of Object.entries(design.textures)) {\r\n        const swatch: ITextureSwatch = { label: name };\r\n\r\n        if (textureDef.svg) {\r\n          swatch.svg = textureDef.svg;\r\n        } else if (textureDef.background) {\r\n          // Generate SVG from textured rectangle configuration (new format)\r\n          const bgSvg = TexturedRectangleGenerator.generateTexturedRectangleSvg(\r\n            textureDef.background,\r\n            48,\r\n            48,\r\n            `swatch-${name}`\r\n          );\r\n          swatch.svg = bgSvg;\r\n        } else if (textureDef.noise) {\r\n          // Legacy: Generate SVG from noise configuration\r\n          const noiseSvg = TexturedRectangleGenerator.generateNoiseSvg(textureDef.noise, 48, 48, `swatch-${name}`);\r\n          swatch.svg = noiseSvg;\r\n        } else if (textureDef.color) {\r\n          swatch.color = typeof textureDef.color === \"string\" ? textureDef.color : undefined;\r\n          if (typeof textureDef.color === \"object\") {\r\n            const c = textureDef.color;\r\n            swatch.color = `rgb(${c.r}, ${c.g}, ${c.b})`;\r\n          }\r\n        }\r\n\r\n        if (swatch.color || swatch.svg) {\r\n          swatches.push(swatch);\r\n          if (swatch.color) {\r\n            seenColors.add(swatch.color.toLowerCase());\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Extract unique solid colors from face definitions\r\n    if (design.bones) {\r\n      for (const bone of design.bones) {\r\n        if (bone.cubes) {\r\n          for (const cube of bone.cubes) {\r\n            if (cube.faces) {\r\n              const faceNames = [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const;\r\n              for (const faceName of faceNames) {\r\n                const face = cube.faces[faceName];\r\n                if (face && face.color && !face.textureId && !face.svg) {\r\n                  let colorStr: string;\r\n                  if (typeof face.color === \"string\") {\r\n                    colorStr = face.color;\r\n                  } else if (typeof face.color === \"object\") {\r\n                    const c = face.color;\r\n                    colorStr = `rgb(${c.r}, ${c.g}, ${c.b})`;\r\n                  } else {\r\n                    continue;\r\n                  }\r\n\r\n                  const colorKey = colorStr.toLowerCase();\r\n                  if (!seenColors.has(colorKey)) {\r\n                    seenColors.add(colorKey);\r\n                    swatches.push({ label: colorStr, color: colorStr });\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return swatches;\r\n  }\r\n\r\n  /**\r\n   * Generate a swatch strip and append it to the main image in a single browser session.\r\n   * This is more efficient than calling generateSwatchStrip and appendSwatchStrip separately.\r\n   *\r\n   * @param mainImage The main image PNG data\r\n   * @param swatches Array of texture swatches to render\r\n   * @param mainWidth Width of the main image\r\n   * @param mainHeight Height of the main image\r\n   * @param swatchesPerRow Number of swatches per row (default: 6)\r\n   * @returns Combined image with swatches below, or original image on failure\r\n   */\r\n  static async generateAndAppendSwatchStrip(\r\n    mainImage: Uint8Array,\r\n    swatches: ITextureSwatch[],\r\n    mainWidth: number,\r\n    mainHeight: number,\r\n    swatchesPerRow: number = 6\r\n  ): Promise<Uint8Array> {\r\n    if (swatches.length === 0) {\r\n      return mainImage;\r\n    }\r\n\r\n    let freshBrowser: any = null;\r\n    try {\r\n      // Calculate swatch strip dimensions\r\n      const padding = 4;\r\n      const swatchSize = Math.min(48, Math.floor((mainWidth - padding * 2) / swatchesPerRow) - padding * 2);\r\n      const labelHeight = 16;\r\n      const cellWidth = Math.floor(mainWidth / swatchesPerRow);\r\n      const cellHeight = swatchSize + labelHeight + padding * 2;\r\n      const numRows = Math.ceil(swatches.length / swatchesPerRow);\r\n      const titleHeight = 18;\r\n      const stripHeight = titleHeight + numRows * cellHeight + padding;\r\n      const totalHeight = mainHeight + stripHeight;\r\n\r\n      // Launch a single fresh browser for all operations\r\n      const playwright = await import(\"playwright\");\r\n      freshBrowser = await playwright.chromium.launch({ channel: \"chrome\", headless: true });\r\n\r\n      const context = await freshBrowser.newContext({\r\n        viewport: { width: mainWidth, height: totalHeight },\r\n      });\r\n\r\n      try {\r\n        const page = await context.newPage();\r\n\r\n        const mainBase64 = Buffer.from(mainImage).toString(\"base64\");\r\n\r\n        // Build the swatch elements HTML\r\n        // Note: y positions are relative to swatchArea div, not the page\r\n        const swatchElements = swatches\r\n          .map((swatch, i) => {\r\n            const col = i % swatchesPerRow;\r\n            const row = Math.floor(i / swatchesPerRow);\r\n            const x = col * cellWidth + padding;\r\n            const y = titleHeight + row * cellHeight;\r\n\r\n            let fillContent = \"\";\r\n            if (swatch.svg) {\r\n              const svgMatch = swatch.svg.match(/<svg[^>]*>([\\s\\S]*?)<\\/svg>/i);\r\n              const innerSvg = svgMatch ? svgMatch[1] : \"\";\r\n              const viewBoxMatch = swatch.svg.match(/viewBox=[\"']([^\"']+)[\"']/i);\r\n              const viewBox = viewBoxMatch ? viewBoxMatch[1] : \"0 0 16 16\";\r\n              fillContent = `<svg viewBox=\"${viewBox}\" width=\"${swatchSize}\" height=\"${swatchSize}\">${innerSvg}</svg>`;\r\n            } else if (swatch.color) {\r\n              fillContent = `<div style=\"width: ${swatchSize}px; height: ${swatchSize}px; background-color: ${swatch.color}; border-radius: 2px;\"></div>`;\r\n            }\r\n\r\n            return `\r\n              <div style=\"position: absolute; left: ${x}px; top: ${y}px; width: ${\r\n              cellWidth - padding * 2\r\n            }px; text-align: center;\">\r\n                <div style=\"display: flex; justify-content: center; align-items: center; border: 1px solid #555; border-radius: 3px; overflow: hidden; width: ${swatchSize}px; height: ${swatchSize}px; margin: 0 auto;\">\r\n                  ${fillContent}\r\n                </div>\r\n                <div style=\"color: #ccc; font-size: 10px; font-family: Arial, sans-serif; margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\">\r\n                  ${swatch.label}\r\n                </div>\r\n              </div>\r\n            `;\r\n          })\r\n          .join(\"\");\r\n\r\n        const windowRef = \"window\";\r\n        const html = `\r\n          <!DOCTYPE html>\r\n          <html>\r\n          <head>\r\n            <style>\r\n              body { margin: 0; padding: 0; background: transparent; }\r\n              canvas { display: block; }\r\n            </style>\r\n          </head>\r\n          <body>\r\n            <div id=\"container\" style=\"position: relative; width: ${mainWidth}px; height: ${totalHeight}px;\">\r\n              <canvas id=\"canvas\" width=\"${mainWidth}\" height=\"${mainHeight}\"></canvas>\r\n              <div id=\"swatchArea\" style=\"position: absolute; left: 0; top: ${mainHeight}px; width: 100%; height: ${stripHeight}px; background: #1a1a2e;\">\r\n                <div style=\"position: absolute; left: 0; top: 0; width: 100%; height: ${titleHeight}px; display: flex; align-items: center; justify-content: center; background: rgba(0,0,0,0.4);\">\r\n                  <span style=\"color: #888; font-size: 11px; font-family: Arial, sans-serif;\">Textures</span>\r\n                </div>\r\n                ${swatchElements}\r\n              </div>\r\n            </div>\r\n            <script>\r\n              async function render() {\r\n                const canvas = document.getElementById('canvas');\r\n                const ctx = canvas.getContext('2d');\r\n                \r\n                const mainImg = new Image();\r\n                await new Promise((resolve, reject) => {\r\n                  mainImg.onload = resolve;\r\n                  mainImg.onerror = reject;\r\n                  mainImg.src = 'data:image/png;base64,${mainBase64}';\r\n                });\r\n                \r\n                ctx.drawImage(mainImg, 0, 0, ${mainWidth}, ${mainHeight});\r\n                ${windowRef}.renderComplete = true;\r\n              }\r\n              render().catch(e => { ${windowRef}.renderError = e.message; });\r\n            </script>\r\n          </body>\r\n          </html>\r\n        `;\r\n\r\n        await page.setContent(html, { waitUntil: \"domcontentloaded\", timeout: 10000 });\r\n\r\n        // Wait for rendering\r\n        // @ts-ignore - accessing window properties set by browser script\r\n        await page.waitForFunction(() => (window as any).renderComplete || (window as any).renderError, {\r\n          timeout: 10000,\r\n        });\r\n\r\n        // @ts-ignore - accessing window properties set by browser script\r\n        const error = await page.evaluate(() => (window as any).renderError);\r\n        if (error) {\r\n          Log.debug(`Swatch strip render error: ${error}`);\r\n          return mainImage;\r\n        }\r\n\r\n        // Brief wait for any final rendering\r\n        await page.waitForTimeout(50);\r\n\r\n        // Capture the combined image\r\n        const combinedBuffer = await page.screenshot({\r\n          type: \"png\",\r\n          clip: { x: 0, y: 0, width: mainWidth, height: totalHeight },\r\n          timeout: 5000,\r\n        });\r\n\r\n        return combinedBuffer;\r\n      } finally {\r\n        try {\r\n          await context.close();\r\n        } catch {\r\n          // Ignore\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.debug(`Combined swatch generation failed: ${e}`);\r\n      return mainImage;\r\n    } finally {\r\n      if (freshBrowser) {\r\n        try {\r\n          await freshBrowser.close();\r\n        } catch {\r\n          // Ignore\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate a swatch strip image showing labeled texture samples.\r\n   * Renders swatches in rows of up to \\`swatchesPerRow\\`.\r\n   *\r\n   * @param swatches Array of texture swatches to render\r\n   * @param stripWidth Total width of the swatch strip\r\n   * @param swatchesPerRow Number of swatches per row (default: 4)\r\n   * @returns PNG data as Uint8Array, or undefined on failure\r\n   */\r\n  static async generateSwatchStrip(\r\n    swatches: ITextureSwatch[],\r\n    stripWidth: number,\r\n    swatchesPerRow: number = 4\r\n  ): Promise<Uint8Array | undefined> {\r\n    if (swatches.length === 0) {\r\n      return undefined;\r\n    }\r\n\r\n    let freshBrowser: any = null;\r\n    try {\r\n      // Calculate dimensions - compact layout with NO extra top padding\r\n      const padding = 4;\r\n      const swatchSize = Math.min(48, Math.floor((stripWidth - padding * 2) / swatchesPerRow) - padding * 2);\r\n      const labelHeight = 16;\r\n      const cellWidth = Math.floor(stripWidth / swatchesPerRow);\r\n      const cellHeight = swatchSize + labelHeight + padding * 2;\r\n      const numRows = Math.ceil(swatches.length / swatchesPerRow);\r\n      const titleHeight = 18;\r\n      // Strip height: just title + rows + bottom padding - NO extra top padding\r\n      const stripHeight = titleHeight + numRows * cellHeight + padding;\r\n\r\n      // Launch a fresh browser for swatch generation to avoid contention with main renderer\r\n      const playwright = await import(\"playwright\");\r\n      freshBrowser = await playwright.chromium.launch({ channel: \"chrome\", headless: true });\r\n\r\n      // Create fresh context for reliability\r\n      let context;\r\n      let page;\r\n      try {\r\n        context = await freshBrowser.newContext({\r\n          viewport: { width: stripWidth, height: stripHeight },\r\n        });\r\n        page = await context.newPage();\r\n\r\n        // Build the swatch elements HTML\r\n        const swatchElements = swatches\r\n          .map((swatch, i) => {\r\n            const col = i % swatchesPerRow;\r\n            const row = Math.floor(i / swatchesPerRow);\r\n            const x = col * cellWidth + padding;\r\n            // Place swatches directly after title - no extra top padding between title and first row\r\n            const y = titleHeight + row * cellHeight;\r\n\r\n            let fillContent = \"\";\r\n            if (swatch.svg) {\r\n              // Embed SVG content\r\n              const svgMatch = swatch.svg.match(/<svg[^>]*>([\\s\\S]*?)<\\/svg>/i);\r\n              const innerSvg = svgMatch ? svgMatch[1] : \"\";\r\n              const viewBoxMatch = swatch.svg.match(/viewBox=[\"']([^\"']+)[\"']/i);\r\n              const viewBox = viewBoxMatch ? viewBoxMatch[1] : \"0 0 16 16\";\r\n              fillContent = `<svg viewBox=\"${viewBox}\" width=\"${swatchSize}\" height=\"${swatchSize}\">${innerSvg}</svg>`;\r\n            } else if (swatch.color) {\r\n              fillContent = `<div style=\"width: ${swatchSize}px; height: ${swatchSize}px; background-color: ${swatch.color}; border-radius: 2px;\"></div>`;\r\n            }\r\n\r\n            return `\r\n              <div style=\"position: absolute; left: ${x}px; top: ${y}px; width: ${\r\n              cellWidth - padding * 2\r\n            }px; text-align: center;\">\r\n                <div style=\"display: flex; justify-content: center; align-items: center; border: 1px solid #555; border-radius: 3px; overflow: hidden; width: ${swatchSize}px; height: ${swatchSize}px; margin: 0 auto;\">\r\n                  ${fillContent}\r\n                </div>\r\n                <div style=\"color: #ccc; font-size: 10px; font-family: Arial, sans-serif; margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\">\r\n                  ${swatch.label}\r\n                </div>\r\n              </div>\r\n            `;\r\n          })\r\n          .join(\"\");\r\n\r\n        const html = `\r\n          <!DOCTYPE html>\r\n          <html>\r\n          <head>\r\n            <style>\r\n              body { margin: 0; padding: 0; background: #1a1a2e; }\r\n            </style>\r\n          </head>\r\n          <body>\r\n            <div id=\"container\" style=\"width: ${stripWidth}px; height: ${stripHeight}px; position: relative;\">\r\n              <div style=\"position: absolute; left: 0; top: 0; width: 100%; height: ${titleHeight}px; display: flex; align-items: center; justify-content: center; background: rgba(0,0,0,0.4);\">\r\n                <span style=\"color: #888; font-size: 11px; font-family: Arial, sans-serif;\">Textures</span>\r\n              </div>\r\n              ${swatchElements}\r\n            </div>\r\n          </body>\r\n          </html>\r\n        `;\r\n\r\n        await page.setContent(html, { waitUntil: \"domcontentloaded\", timeout: 5000 });\r\n\r\n        // Brief wait for rendering\r\n        await page.waitForTimeout(100);\r\n\r\n        // Capture the swatch strip - use fullPage instead of clip for reliability\r\n        const swatchBuffer = await page.screenshot({\r\n          type: \"png\",\r\n          fullPage: true,\r\n          timeout: 15000,\r\n        });\r\n\r\n        return swatchBuffer;\r\n      } finally {\r\n        // Always clean up the context\r\n        if (context) {\r\n          try {\r\n            await context.close();\r\n          } catch {\r\n            // Ignore close errors\r\n          }\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.debug(`Swatch strip generation failed: ${e}`);\r\n      return undefined;\r\n    } finally {\r\n      // Close the fresh browser\r\n      if (freshBrowser) {\r\n        try {\r\n          await freshBrowser.close();\r\n        } catch {\r\n          // Ignore close errors\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Append a swatch strip below an existing image.\r\n   *\r\n   * @param mainImage The main image PNG data\r\n   * @param swatchStrip The swatch strip PNG data\r\n   * @param mainWidth Width of the main image\r\n   * @param mainHeight Height of the main image\r\n   * @returns Combined image with swatches below, or original image on failure\r\n   */\r\n  static async appendSwatchStrip(\r\n    mainImage: Uint8Array,\r\n    swatchStrip: Uint8Array,\r\n    mainWidth: number,\r\n    mainHeight: number\r\n  ): Promise<Uint8Array> {\r\n    let freshBrowser: any = null;\r\n    try {\r\n      // Launch fresh browser to avoid contention with main renderer\r\n      const playwright = await import(\"playwright\");\r\n      freshBrowser = await playwright.chromium.launch({ channel: \"chrome\", headless: true });\r\n\r\n      const mainBase64 = Buffer.from(mainImage).toString(\"base64\");\r\n      const swatchBase64 = Buffer.from(swatchStrip).toString(\"base64\");\r\n\r\n      // Create context and page\r\n      let context;\r\n      try {\r\n        // First, get the swatch strip dimensions using a quick page load\r\n        context = await freshBrowser.newContext();\r\n        const tempPage = await context.newPage();\r\n\r\n        const windowRef = \"window\";\r\n        const sizeHtml = `\r\n          <!DOCTYPE html>\r\n          <html><body>\r\n            <img id=\"swatch\" src=\"data:image/png;base64,${swatchBase64}\">\r\n            <script>\r\n              ${windowRef}.swatchLoaded = false;\r\n              document.getElementById('swatch').onload = () => {\r\n                ${windowRef}.swatchWidth = document.getElementById('swatch').naturalWidth;\r\n                ${windowRef}.swatchHeight = document.getElementById('swatch').naturalHeight;\r\n                ${windowRef}.swatchLoaded = true;\r\n              };\r\n            </script>\r\n          </body></html>\r\n        `;\r\n\r\n        await tempPage.setContent(sizeHtml, { waitUntil: \"domcontentloaded\" });\r\n        // @ts-ignore - accessing window properties set by browser script\r\n        await tempPage.waitForFunction(() => (window as any).swatchLoaded, { timeout: 5000 });\r\n        // @ts-ignore - accessing window properties set by browser script\r\n        const swatchHeight = await tempPage.evaluate(() => (window as any).swatchHeight);\r\n\r\n        const totalHeight = mainHeight + swatchHeight;\r\n\r\n        // Update viewport for combining\r\n        await tempPage.setViewportSize({ width: mainWidth, height: totalHeight });\r\n\r\n        const html = `\r\n          <!DOCTYPE html>\r\n          <html>\r\n          <head>\r\n            <style>\r\n              body { margin: 0; padding: 0; background: transparent; }\r\n              canvas { display: block; }\r\n            </style>\r\n          </head>\r\n          <body>\r\n            <canvas id=\"canvas\" width=\"${mainWidth}\" height=\"${totalHeight}\"></canvas>\r\n            <script>\r\n              async function combine() {\r\n                const canvas = document.getElementById('canvas');\r\n                const ctx = canvas.getContext('2d');\r\n                \r\n                // Load main image\r\n                const mainImg = new Image();\r\n                await new Promise((resolve, reject) => {\r\n                  mainImg.onload = resolve;\r\n                  mainImg.onerror = reject;\r\n                  mainImg.src = 'data:image/png;base64,${mainBase64}';\r\n                });\r\n                \r\n                // Load swatch strip\r\n                const swatchImg = new Image();\r\n                await new Promise((resolve, reject) => {\r\n                  swatchImg.onload = resolve;\r\n                  swatchImg.onerror = reject;\r\n                  swatchImg.src = 'data:image/png;base64,${swatchBase64}';\r\n                });\r\n                \r\n                // Draw main image at top\r\n                ctx.drawImage(mainImg, 0, 0, ${mainWidth}, ${mainHeight});\r\n                \r\n                // Draw swatch strip below, scaled to fit width\r\n                ctx.drawImage(swatchImg, 0, ${mainHeight}, ${mainWidth}, swatchImg.naturalHeight);\r\n                \r\n                ${windowRef}.combineComplete = true;\r\n              }\r\n              combine().catch(e => { ${windowRef}.combineError = e.message; });\r\n            </script>\r\n          </body>\r\n          </html>\r\n        `;\r\n\r\n        await tempPage.setContent(html, { waitUntil: \"domcontentloaded\" });\r\n\r\n        // Wait for combining to complete\r\n        // @ts-ignore - accessing window properties set by browser script\r\n        await tempPage.waitForFunction(() => (window as any).combineComplete || (window as any).combineError, {\r\n          timeout: 5000,\r\n        });\r\n\r\n        // @ts-ignore - accessing window properties set by browser script\r\n        const error = await tempPage.evaluate(() => (window as any).combineError);\r\n        if (error) {\r\n          Log.debug(`Image combine error: ${error}`);\r\n          return mainImage;\r\n        }\r\n\r\n        // Capture the combined image using page.screenshot with clip\r\n        // (locator.screenshot has stability issues)\r\n        const combinedBuffer = await tempPage.screenshot({\r\n          type: \"png\",\r\n          clip: { x: 0, y: 0, width: mainWidth, height: totalHeight },\r\n          timeout: 5000,\r\n        });\r\n\r\n        return combinedBuffer;\r\n      } finally {\r\n        // Always clean up the context\r\n        if (context) {\r\n          try {\r\n            await context.close();\r\n          } catch {\r\n            // Ignore close errors\r\n          }\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.debug(`Image appending failed: ${e}`);\r\n      return mainImage;\r\n    } finally {\r\n      // Always close the fresh browser\r\n      if (freshBrowser) {\r\n        try {\r\n          await freshBrowser.close();\r\n        } catch {\r\n          // Ignore close errors\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE DOCUMENTATION: ModelDesignDefinition\r\n * ==================================================\r\n *\r\n * This class persists model design data as an accessory file alongside the\r\n * generated geometry file. It enables:\r\n * 1. Design iteration - update existing models without creating duplicates\r\n * 2. Context restoration - AI can reload the design spec to understand/modify it\r\n * 3. Preview regeneration - re-render from saved design on demand\r\n *\r\n * ## Accessory Folder Pattern\r\n *\r\n * For a geometry file at:\r\n *   resource_packs/my_pack/models/entity/disco_pig.geo.json\r\n *\r\n * The accessory folder is at:\r\n *   design_pack/project_item_data/resource_packs/my_pack/models/entity/disco_pig_geo_json/\r\n *\r\n * And contains:\r\n *   - model_design.json: The IMcpModelDesign specification\r\n *   - preview.png: Last rendered preview image\r\n *   - generation_meta.json: Timestamp, model used, etc.\r\n *\r\n * ## Related Files\r\n * - src/design/ImageEditsDefinition.ts - Similar pattern for image edits\r\n * - src/app/ProjectItem.ts - ensureAccessoryFolder() implementation\r\n * - src/local/MinecraftMcpServer.ts - createModel tool that uses this\r\n */\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Log from \"../core/Log\";\r\nimport { IMcpModelDesign } from \"../minecraft/IMcpModelDesign\";\r\n\r\n/**\r\n * Metadata about when/how the model was generated.\r\n */\r\nexport interface IModelGenerationMeta {\r\n  /** When the model was last generated */\r\n  generatedAt: string;\r\n  /** The AI model/tool that generated it (if known) */\r\n  generatorModel?: string;\r\n  /** The prompt or request that led to generation (if known) */\r\n  prompt?: string;\r\n  /** Version of the design schema */\r\n  schemaVersion: \"1.0.0\";\r\n}\r\n\r\n/**\r\n * The complete persisted model design data.\r\n */\r\nexport interface IModelDesignData {\r\n  /** The model design specification */\r\n  design: IMcpModelDesign;\r\n  /** Generation metadata */\r\n  meta: IModelGenerationMeta;\r\n  /** The usage context (entity, block, item) */\r\n  usage?: \"entity\" | \"block\" | \"item\";\r\n  /** What this model was wired to (if any) */\r\n  wiredTo?: string;\r\n}\r\n\r\n/**\r\n * Manages persistence of model design data in accessory folders.\r\n * Follows the same pattern as ImageEditsDefinition.\r\n */\r\nexport default class ModelDesignDefinition {\r\n  private _file?: IFile;\r\n  private _previewFile?: IFile;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public data?: IModelDesignData;\r\n  public project?: Project;\r\n\r\n  private _onLoaded = new EventDispatcher<ModelDesignDefinition, ModelDesignDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get design(): IMcpModelDesign | undefined {\r\n    return this.data?.design;\r\n  }\r\n\r\n  public get usage(): \"entity\" | \"block\" | \"item\" | undefined {\r\n    return this.data?.usage;\r\n  }\r\n\r\n  public get wiredTo(): string | undefined {\r\n    return this.data?.wiredTo;\r\n  }\r\n\r\n  /**\r\n   * Updates the design data and persists it.\r\n   */\r\n  async updateDesign(\r\n    design: IMcpModelDesign,\r\n    options?: {\r\n      usage?: \"entity\" | \"block\" | \"item\";\r\n      wiredTo?: string;\r\n      generatorModel?: string;\r\n      prompt?: string;\r\n    }\r\n  ): Promise<void> {\r\n    this.data = {\r\n      design,\r\n      meta: {\r\n        generatedAt: new Date().toISOString(),\r\n        generatorModel: options?.generatorModel,\r\n        prompt: options?.prompt,\r\n        schemaVersion: \"1.0.0\",\r\n      },\r\n      usage: options?.usage,\r\n      wiredTo: options?.wiredTo,\r\n    };\r\n\r\n    await this.save();\r\n  }\r\n\r\n  /**\r\n   * Saves a preview image to the accessory folder.\r\n   */\r\n  async savePreview(imageData: Uint8Array): Promise<void> {\r\n    if (!this._file || !this._file.parentFolder) {\r\n      Log.debug(\"ModelDesignDefinition: Cannot save preview - no file set\");\r\n      return;\r\n    }\r\n\r\n    this._previewFile = this._file.parentFolder.ensureFile(\"preview.png\");\r\n    this._previewFile.setContent(imageData);\r\n    await this._previewFile.saveContent(false);\r\n\r\n    Log.debug(`ModelDesignDefinition: Saved preview to ${this._previewFile.storageRelativePath}`);\r\n  }\r\n\r\n  /**\r\n   * Gets the preview image data if it exists.\r\n   */\r\n  async getPreview(): Promise<Uint8Array | undefined> {\r\n    if (!this._file || !this._file.parentFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const previewFile = this._file.parentFolder.ensureFile(\"preview.png\");\r\n\r\n    if (!(await previewFile.exists())) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!previewFile.isContentLoaded) {\r\n      await previewFile.loadContent();\r\n    }\r\n\r\n    if (previewFile.content instanceof Uint8Array) {\r\n      return previewFile.content;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Creates or gets a ModelDesignDefinition for a ProjectItem's accessory folder.\r\n   * Use this when you have the ProjectItem for the geometry file.\r\n   */\r\n  static async ensureAsAccessoryOnProjectItem(projectItem: ProjectItem): Promise<ModelDesignDefinition | undefined> {\r\n    const accessoryFolder = await projectItem.ensureAccessoryFolder();\r\n    const designFile = accessoryFolder.ensureFile(\"model_design.json\");\r\n\r\n    return await ModelDesignDefinition.ensureOnFile(designFile, projectItem.project);\r\n  }\r\n\r\n  /**\r\n   * Creates or gets a ModelDesignDefinition attached to a file.\r\n   */\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    project: Project,\r\n    loadHandler?: IEventHandler<ModelDesignDefinition, ModelDesignDefinition>\r\n  ): Promise<ModelDesignDefinition | undefined> {\r\n    let modelDesign: ModelDesignDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      modelDesign = new ModelDesignDefinition();\r\n      modelDesign.project = project;\r\n      modelDesign.file = file;\r\n      file.manager = modelDesign;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ModelDesignDefinition) {\r\n      modelDesign = file.manager as ModelDesignDefinition;\r\n\r\n      if (!modelDesign.isLoaded && loadHandler) {\r\n        modelDesign.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await modelDesign.load();\r\n\r\n      return modelDesign;\r\n    }\r\n\r\n    return modelDesign;\r\n  }\r\n\r\n  /**\r\n   * Persists the design data to file (only if semantically different).\r\n   */\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  /**\r\n   * Saves the design data to file.\r\n   */\r\n  async save(): Promise<void> {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.persist();\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  /**\r\n   * Loads the design data from file.\r\n   */\r\n  async load(): Promise<void> {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.data = StorageUtilities.getJsonObject(this._file);\r\n    this._isLoaded = true;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE DOCUMENTATION: StructureDesignDefinition\r\n * ======================================================\r\n *\r\n * This class persists structure design data as an accessory file alongside the\r\n * generated .mcstructure file. It enables:\r\n * 1. Design iteration - update existing structures without creating duplicates\r\n * 2. Context restoration - AI can reload the design spec to understand/modify it\r\n * 3. Preview regeneration - re-render from saved design on demand\r\n *\r\n * ## Accessory Folder Pattern\r\n *\r\n * For a structure file at:\r\n *   behavior_packs/my_pack/structures/wizard_tower.mcstructure\r\n *\r\n * The accessory folder is at:\r\n *   design_pack/project_item_data/behavior_packs/my_pack/structures/wizard_tower_mcstructure/\r\n *\r\n * And contains:\r\n *   - structure_design.json: The IBlockVolume specification\r\n *   - preview.png: Last rendered preview image\r\n *   - generation_meta.json: Timestamp, model used, etc.\r\n *\r\n * ## Related Files\r\n * - src/design/ModelDesignDefinition.ts - Similar pattern for model designs\r\n * - src/design/ImageEditsDefinition.ts - Original accessory pattern implementation\r\n * - src/app/ProjectItem.ts - ensureAccessoryFolder() implementation\r\n * - src/local/MinecraftMcpServer.ts - buildStructure tool that uses this\r\n */\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Log from \"../core/Log\";\r\n\r\n/**\r\n * Block volume design - the structure specification.\r\n * Matches the format used by previewStructureDesign/exportStructureDesign.\r\n */\r\nexport interface IBlockVolumeDesign {\r\n  /** The world position of the south-west-bottom corner of the structure */\r\n  southWestBottom: { x: number; y: number; z: number };\r\n  /** Optional dimensions - inferred from data if not provided */\r\n  size?: { x: number; y: number; z: number };\r\n  /** Y layers from bottom to top */\r\n  blockLayersBottomToTop: string[][];\r\n  /** Map single characters to block types */\r\n  key: Record<string, { typeId: string; properties?: Record<string, string | number | boolean> }>;\r\n  /** Entities within the structure */\r\n  entities?: Array<{\r\n    typeId: string;\r\n    locationWithinVolume: { x: number; y: number; z: number };\r\n  }>;\r\n}\r\n\r\n/**\r\n * Metadata about when/how the structure was generated.\r\n */\r\nexport interface IStructureGenerationMeta {\r\n  /** When the structure was last generated */\r\n  generatedAt: string;\r\n  /** The AI model/tool that generated it (if known) */\r\n  generatorModel?: string;\r\n  /** The prompt or request that led to generation (if known) */\r\n  prompt?: string;\r\n  /** Version of the design schema */\r\n  schemaVersion: \"1.0.0\";\r\n}\r\n\r\n/**\r\n * The complete persisted structure design data.\r\n */\r\nexport interface IStructureDesignData {\r\n  /** The structure design specification */\r\n  design: IBlockVolumeDesign;\r\n  /** Generation metadata */\r\n  meta: IStructureGenerationMeta;\r\n  /** What feature rule this structure was wired to (if any) */\r\n  wiredTo?: string;\r\n}\r\n\r\n/**\r\n * Manages persistence of structure design data in accessory folders.\r\n * Follows the same pattern as ModelDesignDefinition and ImageEditsDefinition.\r\n */\r\nexport default class StructureDesignDefinition {\r\n  private _file?: IFile;\r\n  private _previewFile?: IFile;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public data?: IStructureDesignData;\r\n  public project?: Project;\r\n\r\n  private _onLoaded = new EventDispatcher<StructureDesignDefinition, StructureDesignDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get design(): IBlockVolumeDesign | undefined {\r\n    return this.data?.design;\r\n  }\r\n\r\n  public get wiredTo(): string | undefined {\r\n    return this.data?.wiredTo;\r\n  }\r\n\r\n  /**\r\n   * Updates the design data and persists it.\r\n   */\r\n  async updateDesign(\r\n    design: IBlockVolumeDesign,\r\n    options?: {\r\n      wiredTo?: string;\r\n      generatorModel?: string;\r\n      prompt?: string;\r\n    }\r\n  ): Promise<void> {\r\n    this.data = {\r\n      design,\r\n      meta: {\r\n        generatedAt: new Date().toISOString(),\r\n        generatorModel: options?.generatorModel,\r\n        prompt: options?.prompt,\r\n        schemaVersion: \"1.0.0\",\r\n      },\r\n      wiredTo: options?.wiredTo,\r\n    };\r\n\r\n    await this.save();\r\n  }\r\n\r\n  /**\r\n   * Saves a preview image to the accessory folder.\r\n   */\r\n  async savePreview(imageData: Uint8Array): Promise<void> {\r\n    if (!this._file || !this._file.parentFolder) {\r\n      Log.debug(\"StructureDesignDefinition: Cannot save preview - no file set\");\r\n      return;\r\n    }\r\n\r\n    this._previewFile = this._file.parentFolder.ensureFile(\"preview.png\");\r\n    this._previewFile.setContent(imageData);\r\n    await this._previewFile.saveContent(false);\r\n\r\n    Log.debug(`StructureDesignDefinition: Saved preview to ${this._previewFile.storageRelativePath}`);\r\n  }\r\n\r\n  /**\r\n   * Gets the preview image data if it exists.\r\n   */\r\n  async getPreview(): Promise<Uint8Array | undefined> {\r\n    if (!this._file || !this._file.parentFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const previewFile = this._file.parentFolder.ensureFile(\"preview.png\");\r\n\r\n    if (!(await previewFile.exists())) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!previewFile.isContentLoaded) {\r\n      await previewFile.loadContent();\r\n    }\r\n\r\n    if (previewFile.content instanceof Uint8Array) {\r\n      return previewFile.content;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Creates or gets a StructureDesignDefinition for a ProjectItem's accessory folder.\r\n   * Use this when you have the ProjectItem for the .mcstructure file.\r\n   */\r\n  static async ensureAsAccessoryOnProjectItem(\r\n    projectItem: ProjectItem\r\n  ): Promise<StructureDesignDefinition | undefined> {\r\n    const accessoryFolder = await projectItem.ensureAccessoryFolder();\r\n    const designFile = accessoryFolder.ensureFile(\"structure_design.json\");\r\n\r\n    return await StructureDesignDefinition.ensureOnFile(designFile, projectItem.project);\r\n  }\r\n\r\n  /**\r\n   * Creates or gets a StructureDesignDefinition attached to a file.\r\n   */\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    project: Project,\r\n    loadHandler?: IEventHandler<StructureDesignDefinition, StructureDesignDefinition>\r\n  ): Promise<StructureDesignDefinition | undefined> {\r\n    let structureDesign: StructureDesignDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      structureDesign = new StructureDesignDefinition();\r\n      structureDesign.project = project;\r\n      structureDesign.file = file;\r\n      file.manager = structureDesign;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof StructureDesignDefinition) {\r\n      structureDesign = file.manager as StructureDesignDefinition;\r\n\r\n      if (!structureDesign.isLoaded && loadHandler) {\r\n        structureDesign.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await structureDesign.load();\r\n\r\n      return structureDesign;\r\n    }\r\n\r\n    return structureDesign;\r\n  }\r\n\r\n  /**\r\n   * Persists the design data to file (only if semantically different).\r\n   */\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  /**\r\n   * Saves the design data to file.\r\n   */\r\n  async save(): Promise<void> {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.persist();\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  /**\r\n   * Loads the design data from file.\r\n   */\r\n  async load(): Promise<void> {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.data = StorageUtilities.getJsonObject(this._file);\r\n    this._isLoaded = true;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * registerNodeCommands.ts\r\n *\r\n * Registers ToolCommands that depend on Node.js-only modules (net, child_process, etc.).\r\n * This file is intentionally NOT exported from the toolcommands barrel (index.ts)\r\n * to prevent webpack from pulling Node.js dependencies into the web bundle.\r\n *\r\n * Usage (in Node.js entry points only):\r\n *   import { registerNodeOnlyCommands } from \"../app/toolcommands/registerNodeCommands\";\r\n *   await registerNodeOnlyCommands();\r\n */\r\n\r\nimport { ToolCommandRegistry } from \"./ToolCommandRegistry\";\r\n\r\nlet _registered = false;\r\n\r\n/**\r\n * Dynamically import and register commands that require Node.js runtime\r\n * (e.g., ServerCommand which uses child_process, net, os via DedicatedServer).\r\n * Safe to call multiple times. Must NOT be called from web bundles.\r\n */\r\nexport async function registerNodeOnlyCommands(): Promise<void> {\r\n  if (_registered) return;\r\n  _registered = true;\r\n\r\n  const { serverCommand } = await import(\"./commands/ServerCommand\");\r\n  ToolCommandRegistry.instance.register(serverCommand);\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE DOCUMENTATION: WorldBackupManager - Central Backup Service\r\n * ========================================================================\r\n *\r\n * WorldBackupManager is the central service for managing world backups.\r\n * It coordinates between ManagedWorld instances, handles file deduplication,\r\n * and maintains the global manifest.\r\n *\r\n * ## Responsibilities\r\n *\r\n * 1. **World Management**: Create, list, update, delete ManagedWorlds\r\n * 2. **Backup Operations**: Create, restore, export, delete backups\r\n * 3. **File Deduplication**: Track file hashes across all backups\r\n * 4. **Manifest Management**: Maintain the global worlds manifest\r\n *\r\n * ## Storage Structure\r\n *\r\n * ```\r\n * Documents/mctools/worlds/\r\n *   \u251C\u2500 manifest.json           (global index of all worlds)\r\n *   \u251C\u2500 a3k9m2p1/               (world folder)\r\n *   \u2502   \u251C\u2500 world.json          (world metadata)\r\n *   \u2502   \u2514\u2500 world20260101.../   (backup folders)\r\n *   \u2514\u2500 b7n4x8q2/               (another world)\r\n * ```\r\n *\r\n * ## File Deduplication Strategy\r\n *\r\n * The manager maintains a global `FileListings` map:\r\n * - Key: `{filename}|{size}|{md5hash}`\r\n * - Value: Path to the first occurrence of this file\r\n *\r\n * When backing up:\r\n * 1. Compute MD5 hash of each file\r\n * 2. Check if it exists in FileListings\r\n * 3. If yes: Store reference in backup.json, skip copying\r\n * 4. If no: Copy file and add to FileListings\r\n *\r\n * This is especially effective for LevelDB's immutable .ldb files.\r\n *\r\n * ## Usage\r\n *\r\n * ```typescript\r\n * const manager = new WorldBackupManager(worldContainerStorage);\r\n * await manager.load();\r\n *\r\n * // Create a world\r\n * const world = await manager.createWorld(\"My World\");\r\n *\r\n * // Create a backup\r\n * const backup = await manager.createBackup(world.id, sourceWorldPath);\r\n *\r\n * // Restore a backup\r\n * await manager.restoreBackup(world.id, backup.id, targetPath);\r\n *\r\n * // Export as .mcworld\r\n * await manager.exportMcWorld(world.id, backup.id, outputPath);\r\n * ```\r\n *\r\n * ## Related Files\r\n *\r\n * - IWorldBackupData.ts: Data interfaces\r\n * - ManagedWorld.ts: World entity class\r\n * - WorldBackup.ts: Backup entity class\r\n * - NodeFolder.ts: File operations with deduplication\r\n */\r\n\r\nimport IFolder from \"../storage/IFolder\";\r\nimport Log from \"../core/Log\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport NodeFolder, { FileListings, IFilePathAndSize } from \"./NodeFolder\";\r\nimport ManagedWorld from \"./ManagedWorld\";\r\nimport WorldBackup from \"./WorldBackup\";\r\nimport {\r\n  IWorldBackupManifest,\r\n  IWorldBackupMetadata,\r\n  IBackupOptions,\r\n  IBackupResult,\r\n  IRestoreResult,\r\n  IExportResult,\r\n  WorldBackupType,\r\n  MANIFEST_VERSION,\r\n} from \"./IWorldBackupData\";\r\nimport * as fs from \"fs\";\r\n\r\nexport default class WorldBackupManager {\r\n  private _containerStorage: NodeStorage;\r\n  private _containerFolder: IFolder;\r\n  private _manifest: IWorldBackupManifest;\r\n  private _worlds: Map<string, ManagedWorld> = new Map();\r\n  private _fileListings: FileListings = {};\r\n  private _isLoaded: boolean = false;\r\n\r\n  /**\r\n   * Get the container folder for all worlds.\r\n   */\r\n  get containerFolder(): IFolder {\r\n    return this._containerFolder;\r\n  }\r\n\r\n  /**\r\n   * Get the global file listings for deduplication.\r\n   */\r\n  get fileListings(): FileListings {\r\n    return this._fileListings;\r\n  }\r\n\r\n  /**\r\n   * Check if the manager has been loaded.\r\n   */\r\n  get isLoaded(): boolean {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  /**\r\n   * Get all loaded worlds.\r\n   */\r\n  get worlds(): ManagedWorld[] {\r\n    return Array.from(this._worlds.values());\r\n  }\r\n\r\n  /**\r\n   * Alias for worlds (for consistency with ServerManager API).\r\n   */\r\n  get managedWorlds(): ManagedWorld[] {\r\n    return this.worlds;\r\n  }\r\n\r\n  /**\r\n   * Get the total number of backups across all worlds.\r\n   */\r\n  get totalBackupCount(): number {\r\n    let count = 0;\r\n    for (const world of this._worlds.values()) {\r\n      count += world.backups.length;\r\n    }\r\n    return count;\r\n  }\r\n\r\n  /**\r\n   * Create a new WorldBackupManager.\r\n   *\r\n   * @param containerStorage NodeStorage pointing to the worlds container folder\r\n   * @param initialFileListings Optional initial file listings for deduplication\r\n   */\r\n  constructor(containerStorage: NodeStorage, initialFileListings?: FileListings) {\r\n    this._containerStorage = containerStorage;\r\n    this._containerFolder = containerStorage.rootFolder;\r\n    this._manifest = this.createEmptyManifest();\r\n    if (initialFileListings) {\r\n      this._fileListings = initialFileListings;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Create an empty manifest.\r\n   */\r\n  private createEmptyManifest(): IWorldBackupManifest {\r\n    return {\r\n      version: MANIFEST_VERSION,\r\n      lastModified: new Date().toISOString(),\r\n      worlds: {},\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Load the manager: read manifest and discover worlds.\r\n   */\r\n  async load(): Promise<void> {\r\n    if (this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._containerFolder.ensureExists();\r\n    await this._containerFolder.load(true);\r\n\r\n    // Load manifest\r\n    await this.loadManifest();\r\n\r\n    // Discover worlds\r\n    await this.discoverWorlds();\r\n\r\n    // Build file listings for deduplication\r\n    await this.buildFileListings();\r\n\r\n    this._isLoaded = true;\r\n\r\n    if (this._worlds.size > 0) {\r\n      Log.verbose(`WorldBackupManager loaded: ${this._worlds.size} worlds, ${this.totalBackupCount} backups`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Load the global manifest.\r\n   */\r\n  private async loadManifest(): Promise<void> {\r\n    const manifestFile = this._containerFolder.files[\"manifest.json\"];\r\n    if (!manifestFile) {\r\n      this._manifest = this.createEmptyManifest();\r\n      return;\r\n    }\r\n\r\n    await manifestFile.loadContent(false);\r\n    const data = StorageUtilities.getJsonObject(manifestFile) as IWorldBackupManifest | undefined;\r\n\r\n    if (data && data.version) {\r\n      this._manifest = data;\r\n    } else {\r\n      this._manifest = this.createEmptyManifest();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Save the global manifest.\r\n   */\r\n  async saveManifest(): Promise<void> {\r\n    // Update world summaries\r\n    this._manifest.worlds = {};\r\n    for (const [id, world] of this._worlds) {\r\n      this._manifest.worlds[id] = world.getSummary();\r\n    }\r\n    this._manifest.lastModified = new Date().toISOString();\r\n\r\n    const manifestFile = this._containerFolder.ensureFile(\"manifest.json\");\r\n    manifestFile.setContent(JSON.stringify(this._manifest, null, 2));\r\n    await manifestFile.saveContent();\r\n  }\r\n\r\n  /**\r\n   * Discover all worlds in the container folder.\r\n   * Worlds are identified by their 8-character ID folder names.\r\n   */\r\n  private async discoverWorlds(): Promise<void> {\r\n    for (const folderName in this._containerFolder.folders) {\r\n      // World folders are 8-character IDs\r\n      if (ManagedWorld.isValidId(folderName)) {\r\n        const folder = this._containerFolder.folders[folderName];\r\n        if (folder) {\r\n          const world = await ManagedWorld.load(folder);\r\n          if (world) {\r\n            this._worlds.set(world.id, world);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Build file listings from all existing backups for deduplication.\r\n   */\r\n  private async buildFileListings(): Promise<void> {\r\n    this._fileListings = {};\r\n\r\n    for (const world of this._worlds.values()) {\r\n      const worldFolder = world.folder;\r\n      if (worldFolder instanceof NodeFolder) {\r\n        const listings = await worldFolder.generateFileListings(this._fileListings);\r\n        Object.assign(this._fileListings, listings);\r\n      }\r\n    }\r\n\r\n    Log.verbose(`Built file listings: ${Object.keys(this._fileListings).length} unique files`);\r\n  }\r\n\r\n  /**\r\n   * Create a new managed world.\r\n   *\r\n   * @param friendlyName User-visible name\r\n   * @param configurationHash Optional initial configuration hash\r\n   * @returns The newly created ManagedWorld\r\n   */\r\n  async createWorld(friendlyName: string, configurationHash?: string): Promise<ManagedWorld> {\r\n    await this.ensureLoaded();\r\n\r\n    const world = await ManagedWorld.create(friendlyName, this._containerFolder, configurationHash);\r\n    this._worlds.set(world.id, world);\r\n\r\n    await this.saveManifest();\r\n\r\n    return world;\r\n  }\r\n\r\n  /**\r\n   * Get a world by ID (synchronous lookup).\r\n   */\r\n  getWorld(worldId: string): ManagedWorld | undefined {\r\n    return this._worlds.get(worldId);\r\n  }\r\n\r\n  /**\r\n   * Get a world by ID (async version, ensures loaded).\r\n   */\r\n  async getWorldAsync(worldId: string): Promise<ManagedWorld | undefined> {\r\n    await this.ensureLoaded();\r\n    return this._worlds.get(worldId);\r\n  }\r\n\r\n  /**\r\n   * Get a world by friendly name (first match).\r\n   */\r\n  async getWorldByName(friendlyName: string): Promise<ManagedWorld | undefined> {\r\n    await this.ensureLoaded();\r\n    for (const world of this._worlds.values()) {\r\n      if (world.friendlyName === friendlyName) {\r\n        return world;\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get or create a world for a server slot.\r\n   * This provides a consistent way to manage backups for server slots.\r\n   *\r\n   * @param slotNumber The slot number (0, 1, 2, etc.)\r\n   * @returns The ManagedWorld for this slot\r\n   */\r\n  async getOrCreateWorldForSlot(slotNumber: number): Promise<ManagedWorld> {\r\n    await this.ensureLoaded();\r\n\r\n    const slotName = `Slot ${slotNumber} World`;\r\n\r\n    // Look for existing world for this slot\r\n    let world = await this.getWorldByName(slotName);\r\n\r\n    if (!world) {\r\n      // Create a new world for this slot\r\n      world = await this.createWorld(slotName);\r\n      Log.verbose(`Created managed world for slot ${slotNumber}: ${world.id}`);\r\n    }\r\n\r\n    return world;\r\n  }\r\n\r\n  /**\r\n   * List all worlds.\r\n   */\r\n  async listWorlds(): Promise<ManagedWorld[]> {\r\n    await this.ensureLoaded();\r\n    return this.worlds;\r\n  }\r\n\r\n  /**\r\n   * Update a world's metadata.\r\n   */\r\n  async updateWorld(\r\n    worldId: string,\r\n    updates: { friendlyName?: string; notes?: string; tags?: string[] }\r\n  ): Promise<boolean> {\r\n    await this.ensureLoaded();\r\n\r\n    const world = this._worlds.get(worldId);\r\n    if (!world) {\r\n      return false;\r\n    }\r\n\r\n    if (updates.friendlyName !== undefined) {\r\n      world.friendlyName = updates.friendlyName;\r\n    }\r\n    if (updates.notes !== undefined) {\r\n      world.notes = updates.notes;\r\n    }\r\n    if (updates.tags !== undefined) {\r\n      world.tags = updates.tags;\r\n    }\r\n\r\n    await world.save();\r\n    await this.saveManifest();\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Delete a world and all its backups.\r\n   */\r\n  async deleteWorld(worldId: string): Promise<boolean> {\r\n    await this.ensureLoaded();\r\n\r\n    const world = this._worlds.get(worldId);\r\n    if (!world) {\r\n      return false;\r\n    }\r\n\r\n    const success = await world.delete();\r\n    if (success) {\r\n      this._worlds.delete(worldId);\r\n      await this.saveManifest();\r\n    }\r\n\r\n    return success;\r\n  }\r\n\r\n  /**\r\n   * Create a backup of a world from a source path.\r\n   *\r\n   * @param worldId The world ID to backup to\r\n   * @param sourceWorldPath Path to the world folder to backup (e.g., slot0/worlds/defaultWorld/)\r\n   * @param options Backup options\r\n   * @returns Backup result\r\n   */\r\n  async createBackup(worldId: string, sourceWorldPath: string, options?: IBackupOptions): Promise<IBackupResult> {\r\n    await this.ensureLoaded();\r\n\r\n    const world = this._worlds.get(worldId);\r\n    if (!world) {\r\n      return { success: false, error: `World ${worldId} not found` };\r\n    }\r\n\r\n    // Check if source path exists\r\n    if (!fs.existsSync(sourceWorldPath)) {\r\n      return { success: false, error: `Source world path does not exist: ${sourceWorldPath}` };\r\n    }\r\n\r\n    try {\r\n      const backupId = WorldBackup.generateId();\r\n      const backupFolder = world.folder.ensureFolder(backupId);\r\n      await backupFolder.ensureExists();\r\n\r\n      const backupType = options?.backupType || options?.type || WorldBackupType.full;\r\n      const inclusionList: IFilePathAndSize[] = options?.incrementalFileList || options?.inclusionList || [];\r\n      const addFilesToInclusionList = !options?.incrementalFileList && !options?.inclusionList;\r\n\r\n      // Get source storage\r\n      const sourceStorage = new NodeStorage(sourceWorldPath, \"\");\r\n      await sourceStorage.rootFolder.load(true);\r\n\r\n      // Read world name if available\r\n      let worldName: string | undefined;\r\n      const levelNameFile = sourceStorage.rootFolder.files[\"levelname.txt\"];\r\n      if (levelNameFile) {\r\n        await levelNameFile.loadContent(false);\r\n        if (typeof levelNameFile.content === \"string\") {\r\n          worldName = levelNameFile.content.trim();\r\n        }\r\n      }\r\n\r\n      // Copy files with deduplication\r\n      const destStorageRelativePath = StorageUtilities.ensureStartsWithDelimiter(\r\n        StorageUtilities.ensureEndsWithDelimiter(`${worldId}/${backupId}`)\r\n      );\r\n\r\n      await (sourceStorage.rootFolder as NodeFolder).copyContentsTo(\r\n        backupFolder.fullPath,\r\n        inclusionList,\r\n        addFilesToInclusionList,\r\n        this._fileListings,\r\n        destStorageRelativePath\r\n      );\r\n\r\n      // Optionally copy behavior_packs\r\n      if (options?.includeBehaviorPacks) {\r\n        const bpPath = NodeStorage.ensureEndsWithDelimiter(sourceWorldPath) + \"behavior_packs\";\r\n        if (fs.existsSync(bpPath)) {\r\n          const bpStorage = new NodeStorage(bpPath, \"\");\r\n          await bpStorage.rootFolder.load(true);\r\n          const bpFolder = backupFolder.ensureFolder(\"behavior_packs\");\r\n          await bpFolder.ensureExists();\r\n          await (bpStorage.rootFolder as NodeFolder).copyContentsTo(\r\n            bpFolder.fullPath,\r\n            inclusionList,\r\n            addFilesToInclusionList,\r\n            this._fileListings,\r\n            destStorageRelativePath + \"behavior_packs/\"\r\n          );\r\n        }\r\n      }\r\n\r\n      // Optionally copy resource_packs\r\n      if (options?.includeResourcePacks) {\r\n        const rpPath = NodeStorage.ensureEndsWithDelimiter(sourceWorldPath) + \"resource_packs\";\r\n        if (fs.existsSync(rpPath)) {\r\n          const rpStorage = new NodeStorage(rpPath, \"\");\r\n          await rpStorage.rootFolder.load(true);\r\n          const rpFolder = backupFolder.ensureFolder(\"resource_packs\");\r\n          await rpFolder.ensureExists();\r\n          await (rpStorage.rootFolder as NodeFolder).copyContentsTo(\r\n            rpFolder.fullPath,\r\n            inclusionList,\r\n            addFilesToInclusionList,\r\n            this._fileListings,\r\n            destStorageRelativePath + \"resource_packs/\"\r\n          );\r\n        }\r\n      }\r\n\r\n      // Calculate stats\r\n      let totalBytes = 0;\r\n      let newFiles = 0;\r\n      let deduplicatedFiles = 0;\r\n\r\n      for (const file of inclusionList) {\r\n        if (file.sourcePath) {\r\n          deduplicatedFiles++;\r\n        } else {\r\n          newFiles++;\r\n          if (file.size) {\r\n            totalBytes += file.size;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Create metadata\r\n      const metadata: IWorldBackupMetadata = {\r\n        id: backupId,\r\n        worldId: worldId,\r\n        createdAt: new Date().toISOString(),\r\n        backupType: backupType,\r\n        configurationHash: options?.configurationHash,\r\n        serverVersion: options?.serverVersion,\r\n        sizeBytes: totalBytes,\r\n        fileCount: inclusionList.length,\r\n        deduplicatedFileCount: deduplicatedFiles,\r\n        worldName: worldName,\r\n        notes: options?.notes,\r\n        files: inclusionList,\r\n      };\r\n\r\n      // Create and save backup\r\n      const backup = await WorldBackup.create(metadata, world.folder);\r\n      world.registerBackup(backup);\r\n\r\n      await world.save();\r\n      await this.saveManifest();\r\n\r\n      Log.message(\r\n        `Created backup ${backupId} for world ${worldId}: ${inclusionList.length} files, ${newFiles} new, ${deduplicatedFiles} deduplicated`\r\n      );\r\n\r\n      return {\r\n        success: true,\r\n        backupId: backupId,\r\n        backupPath: backupFolder.fullPath,\r\n        stats: {\r\n          totalFiles: inclusionList.length,\r\n          newFiles: newFiles,\r\n          deduplicatedFiles: deduplicatedFiles,\r\n          totalBytes: totalBytes,\r\n          savedBytes: 0, // TODO: Calculate actual savings\r\n        },\r\n      };\r\n    } catch (e: any) {\r\n      Log.error(`Failed to create backup for world ${worldId}: ${e.message}`);\r\n      return { success: false, error: e.message };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * List backups for a world.\r\n   */\r\n  async listBackups(worldId: string): Promise<WorldBackup[]> {\r\n    await this.ensureLoaded();\r\n\r\n    const world = this._worlds.get(worldId);\r\n    if (!world) {\r\n      return [];\r\n    }\r\n\r\n    return await world.loadBackups();\r\n  }\r\n\r\n  /**\r\n   * Get a specific backup.\r\n   */\r\n  async getBackup(worldId: string, backupId: string): Promise<WorldBackup | undefined> {\r\n    await this.ensureLoaded();\r\n\r\n    const world = this._worlds.get(worldId);\r\n    if (!world) {\r\n      return undefined;\r\n    }\r\n\r\n    return await world.getBackup(backupId);\r\n  }\r\n\r\n  /**\r\n   * Restore a backup to a target path.\r\n   */\r\n  async restoreBackup(\r\n    worldId: string,\r\n    backupId: string,\r\n    targetPath: string,\r\n    clearTarget?: boolean\r\n  ): Promise<IRestoreResult> {\r\n    await this.ensureLoaded();\r\n\r\n    const backup = await this.getBackup(worldId, backupId);\r\n    if (!backup) {\r\n      return { success: false, error: `Backup ${backupId} not found in world ${worldId}` };\r\n    }\r\n\r\n    return await backup.restore({ targetPath, clearTarget }, this._containerFolder);\r\n  }\r\n\r\n  /**\r\n   * Delete a backup.\r\n   */\r\n  async deleteBackup(worldId: string, backupId: string): Promise<boolean> {\r\n    await this.ensureLoaded();\r\n\r\n    const world = this._worlds.get(worldId);\r\n    if (!world) {\r\n      return false;\r\n    }\r\n\r\n    const success = await world.deleteBackup(backupId);\r\n    if (success) {\r\n      await this.saveManifest();\r\n    }\r\n\r\n    return success;\r\n  }\r\n\r\n  /**\r\n   * Export a backup as .mcworld file.\r\n   */\r\n  async exportMcWorld(\r\n    worldId: string,\r\n    backupId: string,\r\n    outputPath: string,\r\n    worldName?: string\r\n  ): Promise<IExportResult> {\r\n    await this.ensureLoaded();\r\n\r\n    const backup = await this.getBackup(worldId, backupId);\r\n    if (!backup) {\r\n      return { success: false, error: `Backup ${backupId} not found in world ${worldId}` };\r\n    }\r\n\r\n    return await backup.exportMcWorld({ outputPath, worldName }, this._containerFolder);\r\n  }\r\n\r\n  /**\r\n   * Prune old backups for a world.\r\n   */\r\n  async pruneBackups(worldId: string, keepCount: number): Promise<number> {\r\n    await this.ensureLoaded();\r\n\r\n    const world = this._worlds.get(worldId);\r\n    if (!world) {\r\n      return 0;\r\n    }\r\n\r\n    const deleted = await world.pruneBackups(keepCount);\r\n    if (deleted > 0) {\r\n      await this.saveManifest();\r\n    }\r\n\r\n    return deleted;\r\n  }\r\n\r\n  /**\r\n   * Get or create a world for a given friendly name.\r\n   * If a world with this name exists, returns it. Otherwise creates a new one.\r\n   */\r\n  async getOrCreateWorld(friendlyName: string, configurationHash?: string): Promise<ManagedWorld> {\r\n    await this.ensureLoaded();\r\n\r\n    const existing = await this.getWorldByName(friendlyName);\r\n    if (existing) {\r\n      return existing;\r\n    }\r\n\r\n    return await this.createWorld(friendlyName, configurationHash);\r\n  }\r\n\r\n  /**\r\n   * Get the latest backup for a world.\r\n   */\r\n  async getLatestBackup(worldId: string): Promise<WorldBackup | undefined> {\r\n    await this.ensureLoaded();\r\n\r\n    const world = this._worlds.get(worldId);\r\n    if (!world) {\r\n      return undefined;\r\n    }\r\n\r\n    return await world.getLatestBackup();\r\n  }\r\n\r\n  /**\r\n   * Ensure the manager is loaded.\r\n   */\r\n  private async ensureLoaded(): Promise<void> {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Reload the manager (refresh from disk).\r\n   */\r\n  async reload(): Promise<void> {\r\n    this._isLoaded = false;\r\n    this._worlds.clear();\r\n    this._fileListings = {};\r\n    await this.load();\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE DOCUMENTATION: ManagedWorld - World Entity\r\n * ========================================================\r\n *\r\n * ManagedWorld represents a Minecraft world that is tracked by the backup system.\r\n * Each world has a unique 8-character ID and can have multiple backups.\r\n *\r\n * ## Lifecycle\r\n *\r\n * 1. Create: `ManagedWorld.create(friendlyName)` generates a new ID\r\n * 2. Load: `ManagedWorld.load(folder)` loads from existing world.json\r\n * 3. Backup: `world.createBackup(sourcePath, options)` creates a new backup\r\n * 4. Restore: `world.restoreBackup(backupId, targetPath)` restores a backup\r\n * 5. Export: `world.exportMcWorld(backupId, outputPath)` creates .mcworld file\r\n *\r\n * ## Storage\r\n *\r\n * Each ManagedWorld has a folder at: worlds/{worldId}/\r\n * - world.json: World metadata (IManagedWorldData)\r\n * - world{timestamp}/: Backup folders\r\n *\r\n * ## Related Files\r\n *\r\n * - IWorldBackupData.ts: Data interfaces\r\n * - WorldBackup.ts: Individual backup class\r\n * - WorldBackupManager.ts: Central management service\r\n */\r\n\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\nimport { IManagedWorldData, IWorldSummary, WORLD_ID_CHARS, WORLD_ID_LENGTH } from \"./IWorldBackupData\";\r\nimport WorldBackup from \"./WorldBackup\";\r\nimport NodeFolder from \"./NodeFolder\";\r\n\r\nexport default class ManagedWorld {\r\n  private _data: IManagedWorldData;\r\n  private _folder: IFolder;\r\n  private _backups: WorldBackup[] = [];\r\n  private _backupsLoaded: boolean = false;\r\n\r\n  /**\r\n   * Get the unique world ID.\r\n   */\r\n  get id(): string {\r\n    return this._data.id;\r\n  }\r\n\r\n  /**\r\n   * Alias for id (for consistency with some API usage).\r\n   */\r\n  get worldId(): string {\r\n    return this._data.id;\r\n  }\r\n\r\n  /**\r\n   * Get the user-visible friendly name.\r\n   */\r\n  get friendlyName(): string {\r\n    return this._data.friendlyName;\r\n  }\r\n\r\n  /**\r\n   * Set the user-visible friendly name.\r\n   */\r\n  set friendlyName(value: string) {\r\n    this._data.friendlyName = value;\r\n    this._data.lastModified = new Date().toISOString();\r\n  }\r\n\r\n  /**\r\n   * Get the description.\r\n   */\r\n  get description(): string | undefined {\r\n    return this._data.description;\r\n  }\r\n\r\n  /**\r\n   * Set the description.\r\n   */\r\n  set description(value: string | undefined) {\r\n    this._data.description = value;\r\n    this._data.lastModified = new Date().toISOString();\r\n  }\r\n\r\n  /**\r\n   * Get the creation timestamp.\r\n   */\r\n  get createdAt(): Date {\r\n    return new Date(this._data.createdAt);\r\n  }\r\n\r\n  /**\r\n   * Get the last modified timestamp.\r\n   */\r\n  get lastModified(): Date {\r\n    return new Date(this._data.lastModified);\r\n  }\r\n\r\n  /**\r\n   * Get the initial configuration hash.\r\n   */\r\n  get initialConfigurationHash(): string | undefined {\r\n    return this._data.initialConfigurationHash;\r\n  }\r\n\r\n  /**\r\n   * Set the initial configuration hash.\r\n   */\r\n  set initialConfigurationHash(value: string | undefined) {\r\n    this._data.initialConfigurationHash = value;\r\n    this._data.lastModified = new Date().toISOString();\r\n  }\r\n\r\n  /**\r\n   * Get optional notes.\r\n   */\r\n  get notes(): string | undefined {\r\n    return this._data.notes;\r\n  }\r\n\r\n  /**\r\n   * Set optional notes.\r\n   */\r\n  set notes(value: string | undefined) {\r\n    this._data.notes = value;\r\n    this._data.lastModified = new Date().toISOString();\r\n  }\r\n\r\n  /**\r\n   * Get tags for organization.\r\n   */\r\n  get tags(): string[] {\r\n    return this._data.tags || [];\r\n  }\r\n\r\n  /**\r\n   * Set tags for organization.\r\n   */\r\n  set tags(value: string[]) {\r\n    this._data.tags = value;\r\n    this._data.lastModified = new Date().toISOString();\r\n  }\r\n\r\n  /**\r\n   * Get the folder containing this world's data.\r\n   */\r\n  get folder(): IFolder {\r\n    return this._folder;\r\n  }\r\n\r\n  /**\r\n   * Get the raw data object.\r\n   */\r\n  get data(): IManagedWorldData {\r\n    return this._data;\r\n  }\r\n\r\n  /**\r\n   * Get the list of backups (must call loadBackups first).\r\n   */\r\n  get backups(): WorldBackup[] {\r\n    return this._backups;\r\n  }\r\n\r\n  /**\r\n   * Private constructor - use static factory methods.\r\n   */\r\n  private constructor(data: IManagedWorldData, folder: IFolder) {\r\n    this._data = data;\r\n    this._folder = folder;\r\n  }\r\n\r\n  /**\r\n   * Generate a random 8-character world ID.\r\n   */\r\n  static generateId(): string {\r\n    let id = \"\";\r\n    for (let i = 0; i < WORLD_ID_LENGTH; i++) {\r\n      id += WORLD_ID_CHARS.charAt(Math.floor(Math.random() * WORLD_ID_CHARS.length));\r\n    }\r\n    return id;\r\n  }\r\n\r\n  /**\r\n   * Validate a world ID format.\r\n   */\r\n  static isValidId(id: string): boolean {\r\n    if (id.length !== WORLD_ID_LENGTH) {\r\n      return false;\r\n    }\r\n    for (const char of id) {\r\n      if (!WORLD_ID_CHARS.includes(char)) {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Create a new managed world.\r\n   *\r\n   * @param friendlyName User-visible name for the world\r\n   * @param parentFolder The worlds container folder\r\n   * @param configurationHash Optional initial configuration hash\r\n   * @returns The newly created ManagedWorld\r\n   */\r\n  static async create(friendlyName: string, parentFolder: IFolder, configurationHash?: string): Promise<ManagedWorld> {\r\n    const id = ManagedWorld.generateId();\r\n    const now = new Date().toISOString();\r\n\r\n    const data: IManagedWorldData = {\r\n      id,\r\n      friendlyName,\r\n      initialConfigurationHash: configurationHash,\r\n      createdAt: now,\r\n      lastModified: now,\r\n    };\r\n\r\n    const worldFolder = parentFolder.ensureFolder(id);\r\n    await worldFolder.ensureExists();\r\n\r\n    const world = new ManagedWorld(data, worldFolder);\r\n    await world.save();\r\n\r\n    Log.message(`Created new managed world: ${friendlyName} (${id})`);\r\n\r\n    return world;\r\n  }\r\n\r\n  /**\r\n   * Load an existing managed world from a folder.\r\n   *\r\n   * @param folder The world folder (e.g., worlds/a3k9m2p1/)\r\n   * @returns The loaded ManagedWorld, or undefined if invalid\r\n   */\r\n  static async load(folder: IFolder): Promise<ManagedWorld | undefined> {\r\n    await folder.load(false);\r\n\r\n    const worldFile = folder.files[\"world.json\"];\r\n    if (!worldFile) {\r\n      Log.debug(`No world.json found in ${folder.fullPath}`);\r\n      return undefined;\r\n    }\r\n\r\n    await worldFile.loadContent(false);\r\n    const data = StorageUtilities.getJsonObject(worldFile) as IManagedWorldData | undefined;\r\n\r\n    if (!data || !data.id) {\r\n      Log.debug(`Invalid world.json in ${folder.fullPath}`);\r\n      return undefined;\r\n    }\r\n\r\n    return new ManagedWorld(data, folder);\r\n  }\r\n\r\n  /**\r\n   * Save the world metadata to world.json.\r\n   */\r\n  async save(): Promise<void> {\r\n    const worldFile = this._folder.ensureFile(\"world.json\");\r\n    worldFile.setContent(JSON.stringify(this._data, null, 2));\r\n    await worldFile.saveContent();\r\n  }\r\n\r\n  /**\r\n   * Load all backups for this world.\r\n   */\r\n  async loadBackups(): Promise<WorldBackup[]> {\r\n    if (this._backupsLoaded) {\r\n      return this._backups;\r\n    }\r\n\r\n    // Clear existing folder references to ensure fresh objects when loading\r\n    // This prevents stale in-memory folder objects from being reused\r\n    for (const folderName in this._folder.folders) {\r\n      delete this._folder.folders[folderName];\r\n    }\r\n\r\n    await this._folder.load(true);\r\n\r\n    this._backups = [];\r\n\r\n    for (const folderName in this._folder.folders) {\r\n      if (folderName.startsWith(\"world\") && folderName.length === 19) {\r\n        const dateStr = folderName.substring(5);\r\n        if (Utilities.isNumeric(dateStr)) {\r\n          const backupFolder = this._folder.folders[folderName];\r\n          if (backupFolder) {\r\n            const backup = await WorldBackup.load(backupFolder, this._data.id);\r\n            if (backup) {\r\n              this._backups.push(backup);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Sort by creation date, newest first\r\n    this._backups.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\r\n\r\n    this._backupsLoaded = true;\r\n    return this._backups;\r\n  }\r\n\r\n  /**\r\n   * Get the latest backup for this world.\r\n   */\r\n  async getLatestBackup(): Promise<WorldBackup | undefined> {\r\n    await this.loadBackups();\r\n    return this._backups.length > 0 ? this._backups[0] : undefined;\r\n  }\r\n\r\n  /**\r\n   * Get a specific backup by ID.\r\n   */\r\n  async getBackup(backupId: string): Promise<WorldBackup | undefined> {\r\n    await this.loadBackups();\r\n    return this._backups.find((b) => b.id === backupId);\r\n  }\r\n\r\n  /**\r\n   * Get summary info for the manifest.\r\n   */\r\n  getSummary(): IWorldSummary {\r\n    return {\r\n      id: this._data.id,\r\n      friendlyName: this._data.friendlyName,\r\n      createdAt: this._data.createdAt,\r\n      lastBackupAt: this._backups.length > 0 ? this._backups[0].createdAt.toISOString() : undefined,\r\n      backupCount: this._backups.length,\r\n      worldId: this._data.id,\r\n      lastModified: this._backups.length > 0\r\n        ? this._backups[0].createdAt.toISOString()\r\n        : this._data.lastModified || this._data.createdAt,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Delete a backup.\r\n   *\r\n   * @param backupId The backup ID to delete\r\n   * @returns True if deleted, false if not found\r\n   */\r\n  async deleteBackup(backupId: string): Promise<boolean> {\r\n    await this.loadBackups();\r\n\r\n    const backupIndex = this._backups.findIndex((b) => b.id === backupId);\r\n    if (backupIndex < 0) {\r\n      return false;\r\n    }\r\n\r\n    const backup = this._backups[backupIndex];\r\n    await backup.delete();\r\n\r\n    this._backups.splice(backupIndex, 1);\r\n\r\n    Log.message(`Deleted backup ${backupId} from world ${this._data.id}`);\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Prune old backups, keeping only the specified count.\r\n   * Before deleting, consolidates any remaining backups that depend on files\r\n   * in the backups being deleted.\r\n   *\r\n   * @param keepCount Number of backups to keep\r\n   * @returns Number of backups deleted\r\n   */\r\n  async pruneBackups(keepCount: number): Promise<number> {\r\n    await this.loadBackups();\r\n\r\n    if (this._backups.length <= keepCount) {\r\n      return 0;\r\n    }\r\n\r\n    const toKeep = this._backups.slice(0, keepCount);\r\n    const toDelete = this._backups.slice(keepCount);\r\n\r\n    // Build a set of backup paths that will be deleted\r\n    const deletingPaths = new Set<string>();\r\n    for (const backup of toDelete) {\r\n      // Format: /worldId/backupId/\r\n      deletingPaths.add(`/${this._data.id}/${backup.id}/`);\r\n    }\r\n\r\n    // Consolidate any backups being kept that depend on backups being deleted\r\n    for (const backup of toKeep) {\r\n      const dependencies = backup.getDependencies();\r\n      for (const dep of dependencies) {\r\n        if (deletingPaths.has(dep)) {\r\n          // This backup depends on a backup being deleted - consolidate it\r\n          await backup.consolidate(this._folder.parentFolder!);\r\n          break; // Only need to consolidate once per backup\r\n        }\r\n      }\r\n    }\r\n\r\n    let deleted = 0;\r\n    for (const backup of toDelete) {\r\n      try {\r\n        await backup.delete();\r\n        deleted++;\r\n      } catch (e) {\r\n        Log.error(`Failed to delete backup ${backup.id}: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Invalidate cache to ensure next access reloads from disk with fresh folder objects\r\n    this.invalidateBackupCache();\r\n\r\n    Log.message(`Pruned ${deleted} old backups from world ${this._data.id}`);\r\n\r\n    return deleted;\r\n  }\r\n\r\n  /**\r\n   * Delete this world and all its backups.\r\n   */\r\n  async delete(): Promise<boolean> {\r\n    try {\r\n      if (this._folder instanceof NodeFolder) {\r\n        await this._folder.deleteThisFolder();\r\n      }\r\n      Log.message(`Deleted managed world ${this._data.id}`);\r\n      return true;\r\n    } catch (e) {\r\n      Log.error(`Failed to delete world ${this._data.id}: ${e}`);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Register a new backup folder (called by WorldBackupManager).\r\n   * Note: This invalidates the backup cache so the next loadBackups() reloads from disk\r\n   * to ensure the in-memory folder structure is synchronized.\r\n   */\r\n  registerBackup(backup: WorldBackup): void {\r\n    // Invalidate cache to ensure next load reads from disk with proper file structure\r\n    this.invalidateBackupCache();\r\n    this._data.lastModified = new Date().toISOString();\r\n  }\r\n\r\n  /**\r\n   * Invalidate the backup cache to force reload.\r\n   */\r\n  invalidateBackupCache(): void {\r\n    this._backupsLoaded = false;\r\n    this._backups = [];\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE DOCUMENTATION: WorldBackup - Backup Entity\r\n * ========================================================\r\n *\r\n * WorldBackup represents a single point-in-time snapshot of a Minecraft world.\r\n * Each backup is stored in a timestamped folder with its metadata and files.\r\n *\r\n * ## Storage Structure\r\n *\r\n * ```\r\n * worlds/{worldId}/world20260101120000/\r\n *   \u251C\u2500 backup.json                 (IWorldBackupMetadata)\r\n *   \u251C\u2500 level.dat\r\n *   \u251C\u2500 levelname.txt\r\n *   \u251C\u2500 world_behavior_packs.json\r\n *   \u251C\u2500 world_resource_packs.json\r\n *   \u251C\u2500 db/\r\n *   \u2502   \u251C\u2500 CURRENT\r\n *   \u2502   \u251C\u2500 MANIFEST-*\r\n *   \u2502   \u2514\u2500 *.ldb (only modified files, others are deduplicated)\r\n *   \u251C\u2500 behavior_packs/             (optional)\r\n *   \u2514\u2500 resource_packs/             (optional)\r\n * ```\r\n *\r\n * ## File Deduplication\r\n *\r\n * Files are deduplicated using MD5 hashes:\r\n * - Each file's hash is computed during backup\r\n * - If an identical file exists in a previous backup, we store a reference\r\n * - The `sourcePath` in the file listing points to the existing copy\r\n * - This dramatically reduces storage for LevelDB's immutable .ldb files\r\n *\r\n * ## Operations\r\n *\r\n * - **Restore**: Copy files back to a target folder, following source paths\r\n * - **Export**: Create a .mcworld zip file from the backup\r\n * - **Delete**: Remove the backup folder and its contents\r\n *\r\n * ## Related Files\r\n *\r\n * - IWorldBackupData.ts: Data interfaces\r\n * - ManagedWorld.ts: Parent world class\r\n * - WorldBackupManager.ts: Central management service\r\n * - NodeFolder.ts: File operations\r\n */\r\n\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IFile from \"../storage/IFile\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport {\r\n  IWorldBackupMetadata,\r\n  WorldBackupType,\r\n  IRestoreOptions,\r\n  IRestoreResult,\r\n  IExportMcWorldOptions,\r\n  IExportResult,\r\n} from \"./IWorldBackupData\";\r\nimport { IFilePathAndSize } from \"./NodeFolder\";\r\nimport NodeFolder from \"./NodeFolder\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport * as fs from \"fs\";\r\n\r\nexport default class WorldBackup {\r\n  private _metadata: IWorldBackupMetadata;\r\n  private _folder: IFolder;\r\n\r\n  /**\r\n   * Get the backup ID (folder name, e.g., \"world20260101120000\").\r\n   */\r\n  get id(): string {\r\n    return this._metadata.id;\r\n  }\r\n\r\n  /**\r\n   * Get the parent world ID.\r\n   */\r\n  get worldId(): string {\r\n    return this._metadata.worldId;\r\n  }\r\n\r\n  /**\r\n   * Get the creation timestamp.\r\n   */\r\n  get createdAt(): Date {\r\n    return new Date(this._metadata.createdAt);\r\n  }\r\n\r\n  /**\r\n   * Get the creation timestamp as a number (milliseconds since epoch).\r\n   */\r\n  get timestamp(): number {\r\n    return new Date(this._metadata.createdAt).getTime();\r\n  }\r\n\r\n  /**\r\n   * Get the backup type.\r\n   */\r\n  get backupType(): WorldBackupType {\r\n    return this._metadata.backupType;\r\n  }\r\n\r\n  /**\r\n   * Alias for backupType.\r\n   */\r\n  get type(): WorldBackupType {\r\n    return this._metadata.backupType;\r\n  }\r\n\r\n  /**\r\n   * Get description (alias for notes).\r\n   */\r\n  get description(): string | undefined {\r\n    return this._metadata.notes;\r\n  }\r\n\r\n  /**\r\n   * Get total bytes (alias for sizeBytes).\r\n   */\r\n  get totalBytes(): number {\r\n    return this._metadata.sizeBytes;\r\n  }\r\n\r\n  /**\r\n   * Get the configuration hash at backup time.\r\n   */\r\n  get configurationHash(): string | undefined {\r\n    return this._metadata.configurationHash;\r\n  }\r\n\r\n  /**\r\n   * Get the server version at backup time.\r\n   */\r\n  get serverVersion(): string | undefined {\r\n    return this._metadata.serverVersion;\r\n  }\r\n\r\n  /**\r\n   * Get the total size in bytes.\r\n   */\r\n  get sizeBytes(): number {\r\n    return this._metadata.sizeBytes;\r\n  }\r\n\r\n  /**\r\n   * Get the file count.\r\n   */\r\n  get fileCount(): number {\r\n    return this._metadata.fileCount;\r\n  }\r\n\r\n  /**\r\n   * Get the deduplicated file count.\r\n   */\r\n  get deduplicatedFileCount(): number {\r\n    return this._metadata.deduplicatedFileCount;\r\n  }\r\n\r\n  /**\r\n   * Get the world name at backup time.\r\n   */\r\n  get worldName(): string | undefined {\r\n    return this._metadata.worldName;\r\n  }\r\n\r\n  /**\r\n   * Get optional notes.\r\n   */\r\n  get notes(): string | undefined {\r\n    return this._metadata.notes;\r\n  }\r\n\r\n  /**\r\n   * Set optional notes.\r\n   */\r\n  set notes(value: string | undefined) {\r\n    this._metadata.notes = value;\r\n  }\r\n\r\n  /**\r\n   * Get the file listing.\r\n   */\r\n  get files(): IFilePathAndSize[] {\r\n    return this._metadata.files;\r\n  }\r\n\r\n  /**\r\n   * Get the folder containing this backup.\r\n   */\r\n  get folder(): IFolder {\r\n    return this._folder;\r\n  }\r\n\r\n  /**\r\n   * Get the raw metadata object.\r\n   */\r\n  get metadata(): IWorldBackupMetadata {\r\n    return this._metadata;\r\n  }\r\n\r\n  /**\r\n   * Private constructor - use static factory methods.\r\n   */\r\n  private constructor(metadata: IWorldBackupMetadata, folder: IFolder) {\r\n    this._metadata = metadata;\r\n    this._folder = folder;\r\n  }\r\n\r\n  /**\r\n   * Generate a backup ID from a timestamp.\r\n   */\r\n  static generateId(date?: Date): string {\r\n    return \"world\" + Utilities.getDateStr(date || new Date());\r\n  }\r\n\r\n  /**\r\n   * Create a new backup with the given metadata.\r\n   *\r\n   * @param metadata The backup metadata\r\n   * @param parentFolder The world folder containing backups\r\n   * @returns The newly created WorldBackup\r\n   */\r\n  static async create(metadata: IWorldBackupMetadata, parentFolder: IFolder): Promise<WorldBackup> {\r\n    const backupFolder = parentFolder.ensureFolder(metadata.id);\r\n    await backupFolder.ensureExists();\r\n\r\n    const backup = new WorldBackup(metadata, backupFolder);\r\n    await backup.save();\r\n\r\n    return backup;\r\n  }\r\n\r\n  /**\r\n   * Load an existing backup from a folder.\r\n   *\r\n   * @param folder The backup folder (e.g., worlds/a3k9m2p1/world20260101120000/)\r\n   * @param worldId The parent world ID\r\n   * @returns The loaded WorldBackup, or undefined if invalid\r\n   */\r\n  static async load(folder: IFolder, worldId: string): Promise<WorldBackup | undefined> {\r\n    // Force reload from disk to ensure we have the actual files\r\n    await folder.load(true);\r\n\r\n    const backupFile = folder.files[\"backup.json\"];\r\n    if (!backupFile) {\r\n      // Try legacy files.json format\r\n      const filesFile = folder.files[\"files.json\"];\r\n      if (filesFile) {\r\n        return WorldBackup.loadFromLegacyFormat(folder, worldId, filesFile);\r\n      }\r\n      Log.debug(`No backup.json found in ${folder.fullPath}`);\r\n      return undefined;\r\n    }\r\n\r\n    await backupFile.loadContent(false);\r\n    const metadata = StorageUtilities.getJsonObject(backupFile) as IWorldBackupMetadata | undefined;\r\n\r\n    if (!metadata || !metadata.id) {\r\n      Log.debug(`Invalid backup.json in ${folder.fullPath}`);\r\n      return undefined;\r\n    }\r\n\r\n    return new WorldBackup(metadata, folder);\r\n  }\r\n\r\n  /**\r\n   * Load from legacy files.json format (backwards compatibility).\r\n   */\r\n  private static async loadFromLegacyFormat(\r\n    folder: IFolder,\r\n    worldId: string,\r\n    filesFile: IFile\r\n  ): Promise<WorldBackup | undefined> {\r\n    await filesFile.loadContent(false);\r\n    const legacy = StorageUtilities.getJsonObject(filesFile) as { path: string; files: IFilePathAndSize[] } | undefined;\r\n\r\n    if (!legacy || !legacy.files) {\r\n      return undefined;\r\n    }\r\n\r\n    // Extract date from folder name\r\n    const folderName = folder.name;\r\n    let createdAt = new Date().toISOString();\r\n    if (folderName.startsWith(\"world\") && folderName.length === 19) {\r\n      const dateStr = folderName.substring(5);\r\n      if (Utilities.isNumeric(dateStr)) {\r\n        createdAt = Utilities.getDateFromStr(dateStr).toISOString();\r\n      }\r\n    }\r\n\r\n    // Calculate stats\r\n    let sizeBytes = 0;\r\n    let deduplicatedCount = 0;\r\n    for (const file of legacy.files) {\r\n      if (file.sourcePath) {\r\n        deduplicatedCount++;\r\n      } else if (file.size) {\r\n        sizeBytes += file.size;\r\n      }\r\n    }\r\n\r\n    const metadata: IWorldBackupMetadata = {\r\n      id: folderName,\r\n      worldId: worldId,\r\n      createdAt: createdAt,\r\n      backupType: WorldBackupType.full,\r\n      sizeBytes: sizeBytes,\r\n      fileCount: legacy.files.length,\r\n      deduplicatedFileCount: deduplicatedCount,\r\n      files: legacy.files,\r\n    };\r\n\r\n    return new WorldBackup(metadata, folder);\r\n  }\r\n\r\n  /**\r\n   * Save the backup metadata to backup.json.\r\n   */\r\n  async save(): Promise<void> {\r\n    const backupFile = this._folder.ensureFile(\"backup.json\");\r\n    backupFile.setContent(JSON.stringify(this._metadata, null, 2));\r\n    await backupFile.saveContent();\r\n  }\r\n\r\n  /**\r\n   * Recursively force load a folder and all its subfolders.\r\n   * This ensures in-memory folder structure matches disk after backup creation.\r\n   */\r\n  private static async recursiveForceLoad(folder: IFolder): Promise<void> {\r\n    await folder.load(true);\r\n\r\n    for (const folderName in folder.folders) {\r\n      const subFolder = folder.folders[folderName];\r\n      if (subFolder) {\r\n        await WorldBackup.recursiveForceLoad(subFolder);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Restore this backup to a target folder.\r\n   *\r\n   * @param options Restore options\r\n   * @param worldContainerFolder The root worlds folder for resolving source paths\r\n   * @returns Restore result\r\n   */\r\n  async restore(options: IRestoreOptions, worldContainerFolder: IFolder): Promise<IRestoreResult> {\r\n    try {\r\n      const targetPath = options.targetPath;\r\n\r\n      // Optionally clear the target folder\r\n      if (options.clearTarget && fs.existsSync(targetPath)) {\r\n        const targetStorage = new NodeStorage(targetPath, \"\");\r\n        await targetStorage.rootFolder.deleteAllFolderContents();\r\n      }\r\n\r\n      // Ensure target exists\r\n      if (!fs.existsSync(targetPath)) {\r\n        fs.mkdirSync(targetPath, { recursive: true });\r\n      }\r\n\r\n      // Recursively load backup folder contents to ensure all subfolders are loaded from disk\r\n      await WorldBackup.recursiveForceLoad(this._folder);\r\n\r\n      const targetStorage = new NodeStorage(targetPath, \"\");\r\n\r\n      // Copy files based on metadata\r\n      let totalBytes = 0;\r\n      let restoredFiles = 0;\r\n\r\n      for (const fileInfo of this._metadata.files) {\r\n        if (fileInfo.path) {\r\n          let sourceFile: IFile | undefined;\r\n\r\n          if (fileInfo.sourcePath) {\r\n            // File is deduplicated - get it from the source path (relative to worldContainerFolder)\r\n            sourceFile = await worldContainerFolder.getFileFromRelativePath(\r\n              StorageUtilities.ensureStartsWithDelimiter(fileInfo.sourcePath)\r\n            );\r\n          } else {\r\n            // File is stored in this backup folder\r\n            sourceFile = await this._folder.getFileFromRelativePath(\r\n              StorageUtilities.ensureStartsWithDelimiter(fileInfo.path)\r\n            );\r\n          }\r\n\r\n          if (sourceFile) {\r\n            if (!sourceFile.isContentLoaded) {\r\n              await sourceFile.loadContent();\r\n            }\r\n\r\n            if (sourceFile.content !== null) {\r\n              const targetFile = await targetStorage.rootFolder.ensureFileFromRelativePath(\r\n                StorageUtilities.ensureStartsWithDelimiter(fileInfo.path)\r\n              );\r\n\r\n              if (targetFile) {\r\n                targetFile.setContent(sourceFile.content);\r\n                restoredFiles++;\r\n                if (fileInfo.size) {\r\n                  totalBytes += fileInfo.size;\r\n                }\r\n              }\r\n            }\r\n          } else {\r\n            Log.debug(`Could not find backup file '${fileInfo.path}' for restore`);\r\n          }\r\n        }\r\n      }\r\n\r\n      await targetStorage.rootFolder.saveAll();\r\n\r\n      Log.message(`Restored backup ${this._metadata.id} to ${targetPath}: ${restoredFiles} files`);\r\n\r\n      return {\r\n        success: true,\r\n        restoredPath: targetPath,\r\n        stats: {\r\n          totalFiles: restoredFiles,\r\n          restoredBytes: totalBytes,\r\n        },\r\n      };\r\n    } catch (e: any) {\r\n      Log.error(`Failed to restore backup ${this._metadata.id}: ${e.message}`);\r\n      return {\r\n        success: false,\r\n        error: e.message,\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Export this backup as a .mcworld file.\r\n   *\r\n   * @param options Export options\r\n   * @param worldContainerFolder The root worlds folder for resolving source paths\r\n   * @returns Export result\r\n   */\r\n  async exportMcWorld(options: IExportMcWorldOptions, worldContainerFolder: IFolder): Promise<IExportResult> {\r\n    try {\r\n      // First restore to a temp folder\r\n      const tempPath =\r\n        NodeStorage.ensureEndsWithDelimiter(StorageUtilities.getFolderPath(options.outputPath)) +\r\n        \"mcworld_temp_\" +\r\n        Date.now();\r\n\r\n      const restoreResult = await this.restore({ targetPath: tempPath }, worldContainerFolder);\r\n      if (!restoreResult.success) {\r\n        return {\r\n          success: false,\r\n          error: restoreResult.error,\r\n        };\r\n      }\r\n\r\n      // Optionally update the world name\r\n      if (options.worldName) {\r\n        const levelNamePath = NodeStorage.ensureEndsWithDelimiter(tempPath) + \"levelname.txt\";\r\n        fs.writeFileSync(levelNamePath, options.worldName, { encoding: \"utf8\" });\r\n      }\r\n\r\n      // Create the zip file\r\n      const tempStorage = new NodeStorage(tempPath, \"\");\r\n      await tempStorage.rootFolder.load(true);\r\n\r\n      const zipStorage = new ZipStorage();\r\n      await StorageUtilities.syncFolderTo(tempStorage.rootFolder, zipStorage.rootFolder, false, false, false);\r\n\r\n      const zipBytes = await zipStorage.generateUint8ArrayAsync();\r\n\r\n      // Write the .mcworld file\r\n      fs.writeFileSync(options.outputPath, Buffer.from(zipBytes));\r\n\r\n      // Clean up temp folder\r\n      await tempStorage.rootFolder.deleteThisFolder();\r\n\r\n      const sizeBytes = zipBytes.byteLength;\r\n\r\n      Log.message(`Exported backup ${this._metadata.id} to ${options.outputPath} (${sizeBytes} bytes)`);\r\n\r\n      return {\r\n        success: true,\r\n        outputPath: options.outputPath,\r\n        sizeBytes: sizeBytes,\r\n      };\r\n    } catch (e: any) {\r\n      Log.error(`Failed to export backup ${this._metadata.id}: ${e.message}`);\r\n      return {\r\n        success: false,\r\n        error: e.message,\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if this backup has files that are deduplicated (reference another backup).\r\n   */\r\n  hasDeduplicatedFiles(): boolean {\r\n    return this._metadata.files.some((f) => f.sourcePath !== undefined);\r\n  }\r\n\r\n  /**\r\n   * Get all sourcePath values that this backup depends on.\r\n   * Returns backup folder paths (e.g., \"/worldId/backupId/\") that contain files this backup references.\r\n   */\r\n  getDependencies(): Set<string> {\r\n    const deps = new Set<string>();\r\n    for (const file of this._metadata.files) {\r\n      if (file.sourcePath) {\r\n        // Extract the backup folder path from the sourcePath\r\n        // sourcePath format: /worldId/backupId/path/to/file.ext\r\n        const parts = file.sourcePath.split(\"/\").filter((p) => p.length > 0);\r\n        if (parts.length >= 2) {\r\n          deps.add(`/${parts[0]}/${parts[1]}/`);\r\n        }\r\n      }\r\n    }\r\n    return deps;\r\n  }\r\n\r\n  /**\r\n   * Consolidate this backup by copying deduplicated files locally.\r\n   * This is needed before deleting a backup that other backups depend on.\r\n   *\r\n   * @param worldContainerFolder The root worlds folder for resolving source paths\r\n   * @returns true if consolidation was successful\r\n   */\r\n  async consolidate(worldContainerFolder: IFolder): Promise<boolean> {\r\n    if (!this.hasDeduplicatedFiles()) {\r\n      return true; // Nothing to consolidate\r\n    }\r\n\r\n    try {\r\n      await WorldBackup.recursiveForceLoad(this._folder);\r\n\r\n      let consolidated = 0;\r\n      for (const fileInfo of this._metadata.files) {\r\n        if (fileInfo.sourcePath && fileInfo.path) {\r\n          // Get the source file from the referenced backup\r\n          const sourceFile = await worldContainerFolder.getFileFromRelativePath(\r\n            StorageUtilities.ensureStartsWithDelimiter(fileInfo.sourcePath)\r\n          );\r\n\r\n          if (sourceFile) {\r\n            if (!sourceFile.isContentLoaded) {\r\n              await sourceFile.loadContent();\r\n            }\r\n\r\n            if (sourceFile.content !== null) {\r\n              // Create local copy\r\n              const targetFile = await this._folder.ensureFileFromRelativePath(\r\n                StorageUtilities.ensureStartsWithDelimiter(fileInfo.path)\r\n              );\r\n\r\n              if (targetFile) {\r\n                targetFile.setContent(sourceFile.content);\r\n                await targetFile.saveContent();\r\n\r\n                // Remove the sourcePath reference\r\n                delete fileInfo.sourcePath;\r\n                consolidated++;\r\n              }\r\n            }\r\n          } else {\r\n            Log.debug(`Could not find source file '${fileInfo.sourcePath}' for consolidation`);\r\n          }\r\n        }\r\n      }\r\n\r\n      // Update metadata counts\r\n      this._metadata.deduplicatedFileCount = 0;\r\n\r\n      // Save updated metadata\r\n      await this.save();\r\n\r\n      Log.message(`Consolidated ${consolidated} deduplicated files in backup ${this._metadata.id}`);\r\n      return true;\r\n    } catch (e: any) {\r\n      Log.error(`Failed to consolidate backup ${this._metadata.id}: ${e.message}`);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Delete this backup.\r\n   */\r\n  async delete(): Promise<boolean> {\r\n    try {\r\n      if (this._folder instanceof NodeFolder) {\r\n        await this._folder.deleteThisFolder();\r\n      }\r\n      Log.message(`Deleted backup ${this._metadata.id}`);\r\n      return true;\r\n    } catch (e) {\r\n      Log.error(`Failed to delete backup ${this._metadata.id}: ${e}`);\r\n      return false;\r\n    }\r\n  }\r\n}\r\n", "import WebSocket, { WebSocketServer } from \"ws\";\r\nimport { v4 as uuid } from \"uuid\";\r\nimport * as http from \"http\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Log from \"../core/Log\";\r\nimport { MinecraftGameConnectionMode } from \"../app/ICreatorToolsData\";\r\nimport LocalEnvironment from \"./LocalEnvironment\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport * as fs from \"fs\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport SecurityUtilities from \"../core/SecurityUtilities\";\r\n\r\nexport default class MinecraftWebSocketServer {\r\n  private _port = 19136;\r\n  server: http.Server | undefined;\r\n  private _wss: WebSocketServer | undefined;\r\n  private _ws: WebSocket | undefined;\r\n  private _env: LocalEnvironment;\r\n\r\n  private _pendingCommands: string[] = [];\r\n  private _pendingCommandIds: string[] = [];\r\n  private _pendingRequestIds: string[] = [];\r\n  private _pendingData: any[] = [];\r\n\r\n  private _curEventIndex = 0;\r\n  private _eventSeed: string;\r\n  private _onClientConnected = new EventDispatcher<MinecraftWebSocketServer, string>();\r\n  private _onClientDisconnected = new EventDispatcher<MinecraftWebSocketServer, string>();\r\n\r\n  private _onCommandCompleted = new EventDispatcher<\r\n    MinecraftWebSocketServer,\r\n    { requestId: string; result: object; data: any }\r\n  >();\r\n  private _onEventReceived = new EventDispatcher<MinecraftWebSocketServer, object>();\r\n\r\n  private _currentCommandId = 0;\r\n\r\n  constructor(env: LocalEnvironment) {\r\n    this._env = env;\r\n    this._eventSeed = Utilities.createRandomId(4);\r\n\r\n    this._handleMessage = this._handleMessage.bind(this);\r\n    this._handleConnection = this._handleConnection.bind(this);\r\n    this.openServer = this.openServer.bind(this);\r\n    this.executeNextCommand = this.executeNextCommand.bind(this);\r\n  }\r\n\r\n  public get onCommandCompleted() {\r\n    return this._onCommandCompleted.asEvent();\r\n  }\r\n\r\n  public get onEventReceived() {\r\n    return this._onEventReceived.asEvent();\r\n  }\r\n\r\n  public get onClientConnected() {\r\n    return this._onClientConnected.asEvent();\r\n  }\r\n\r\n  public get onClientDisconnected() {\r\n    return this._onClientDisconnected.asEvent();\r\n  }\r\n\r\n  runCommand(command: string, requestId: string, data: any) {\r\n    // Security: Sanitize command\r\n    const sanitizedCommand = SecurityUtilities.sanitizeCommand(command);\r\n    if (!SecurityUtilities.isCommandSafe(sanitizedCommand)) {\r\n      Log.message(\"WebSocket command rejected as unsafe: \" + command);\r\n      return;\r\n    }\r\n\r\n    const newCommand = this._pendingCommands.length;\r\n\r\n    this._pendingCommands[newCommand] = sanitizedCommand;\r\n    this._pendingCommandIds[newCommand] = uuid();\r\n    this._pendingRequestIds[newCommand] = requestId;\r\n    this._pendingData[newCommand] = data;\r\n\r\n    if (newCommand === this._currentCommandId) {\r\n      this.executeNextCommand();\r\n    }\r\n  }\r\n\r\n  executeNextCommand() {\r\n    if (this._currentCommandId < this._pendingCommands.length) {\r\n      this._currentCommandId++;\r\n\r\n      const nextCommand = this._currentCommandId - 1;\r\n\r\n      const commandLine = this._pendingCommands[nextCommand];\r\n      const commandId = this._pendingCommandIds[nextCommand];\r\n\r\n      const nextCommandStr = JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: commandId,\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"commandRequest\",\r\n        },\r\n        body: {\r\n          //          version: 22,  NOTE: if version is not included in request msg,\r\n          //                        MC *should* use latest command version\r\n          commandLine: commandLine,\r\n          origin: {\r\n            type: \"server\",\r\n          },\r\n        },\r\n      });\r\n\r\n      Log.message(\"Command \" + this._currentCommandId + \" sent:\" + nextCommandStr);\r\n\r\n      if (this._ws) {\r\n        this._ws.send(nextCommandStr);\r\n      }\r\n    }\r\n  }\r\n\r\n  public getWebSocketWorldPath(state: MinecraftGameConnectionMode) {\r\n    if (state === MinecraftGameConnectionMode.remoteMinecraft) {\r\n      return \"\";\r\n    }\r\n\r\n    let sourcePath = \"\";\r\n\r\n    if (state === MinecraftGameConnectionMode.localMinecraftPreview) {\r\n      sourcePath = this._env.utilities.minecraftPreviewUwpPath;\r\n    } else {\r\n      sourcePath = this._env.utilities.minecraftUwpPath;\r\n    }\r\n\r\n    const worldPath =\r\n      NodeStorage.ensureEndsWithDelimiter(sourcePath) + \"minecraftWorlds\" + NodeStorage.platformFolderDelimiter;\r\n\r\n    const subfolders = fs.readdirSync(worldPath);\r\n\r\n    let maxTime = 0;\r\n    let maxPath = \"\";\r\n\r\n    if (subfolders) {\r\n      for (let i = 0; i < subfolders.length; i++) {\r\n        const subfolder = subfolders[i];\r\n\r\n        const stat = fs.statSync(worldPath + subfolder);\r\n\r\n        if (stat.isDirectory()) {\r\n          if (stat.mtimeMs > maxTime) {\r\n            maxTime = stat.mtimeMs;\r\n            maxPath = worldPath + subfolder + NodeStorage.platformFolderDelimiter;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    console.log(\"Reading path \" + worldPath + \"|\" + maxPath);\r\n\r\n    return maxPath;\r\n  }\r\n\r\n  public closeServer() {\r\n    if (!this.server) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  public openServer() {\r\n    if (this.server) {\r\n      return;\r\n    }\r\n\r\n    const listenHost = \"127.0.0.1\";\r\n\r\n    console.log(\"Starting Minecraft websocket server on \" + listenHost + \":\" + this._port);\r\n\r\n    this.server = http.createServer();\r\n    this._wss = new WebSocketServer({\r\n      server: this.server,\r\n      verifyClient: (info: { origin: string; req: http.IncomingMessage }) => {\r\n        const remoteAddress = info.req.socket.remoteAddress;\r\n\r\n        return remoteAddress === \"127.0.0.1\" || remoteAddress === \"::1\" || remoteAddress === \"::ffff:127.0.0.1\";\r\n      },\r\n    });\r\n\r\n    this.server.on(\"error\", (e) => {\r\n      Log.message(\"Error on server.\" + e);\r\n    });\r\n\r\n    this._wss.on(\"connection\", this._handleConnection);\r\n    this._wss.on(\"close\", this._handleDisconnection);\r\n    this._wss.on(\"error\", (e) => {\r\n      Log.message(\"Error on web socket server.\" + e);\r\n    });\r\n\r\n    try {\r\n      this.server.listen(this._port, listenHost, () => {\r\n        Log.message(\"Minecraft websocket server started on \" + listenHost + \":\" + this._port + \".\");\r\n      });\r\n    } catch (e) {\r\n      Log.message(\"Error opening port \" + this._port + \".\");\r\n    }\r\n  }\r\n\r\n  _handleMessage(message: string) {\r\n    if (!message) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      if (message.indexOf(\"{\") >= 0) {\r\n        const struct = JSON.parse(message);\r\n\r\n        if (struct.body !== undefined && struct.header !== undefined && struct.header.messagePurpose !== undefined) {\r\n          const purpose = struct.header.messagePurpose;\r\n\r\n          if (purpose === \"commandResponse\") {\r\n            Log.message(\"Received command response: \" + struct.header.requestId + \"(\" + message + \")\");\r\n\r\n            const commandId = struct.header.requestId.toLowerCase();\r\n\r\n            let found = false;\r\n\r\n            for (let i = this._pendingCommandIds.length - 1; i >= 0; i--) {\r\n              const _reqId = this._pendingCommandIds[i];\r\n\r\n              if (_reqId.toLowerCase() === commandId) {\r\n                console.log(\"Found request id \" + _reqId);\r\n\r\n                this._onCommandCompleted.dispatch(this, {\r\n                  requestId: this._pendingRequestIds[i],\r\n                  result: struct.body,\r\n                  data: this._pendingData[i],\r\n                });\r\n\r\n                found = true;\r\n                break;\r\n              }\r\n            }\r\n\r\n            if (!found) {\r\n              Log.debug(\"Could not find a matching request for id \" + commandId);\r\n            }\r\n\r\n            this.executeNextCommand();\r\n          } else if (purpose === \"event\") {\r\n            Log.message(\"Received event: \" + struct.header.eventName + \"(\" + message + \")\");\r\n\r\n            struct.eventId = this._eventSeed + ++this._curEventIndex;\r\n\r\n            this._onEventReceived.dispatch(this, struct);\r\n          }\r\n        }\r\n      }\r\n    } catch (e) {\r\n      console.log(\"Error processing command: \" + e);\r\n    }\r\n  }\r\n\r\n  _handleConnection(ws: WebSocket) {\r\n    // Close existing connection if present\r\n    if (this._ws && this._ws.readyState === WebSocket.OPEN) {\r\n      Log.message(\"Closing existing WebSocket connection to accept new client\");\r\n      this._ws.close(1000, \"New client connected\");\r\n    }\r\n\r\n    this._ws = ws;\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"PlayerMessage\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"PlayerTravelled\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"PlayerTeleported\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"WorldGenerated\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"WorldLoaded\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"PlayerJoin\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"PlayerLeave\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"SlashCommandExecuted\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"ItemAcquired\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"ItemCrafted\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"ItemEquipped\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"PlayerTransform\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"ItemUsed\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"ItemInteracted\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"BlockPlaced\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.send(\r\n      JSON.stringify({\r\n        header: {\r\n          version: 1,\r\n          requestId: uuid(),\r\n          messageType: \"commandRequest\",\r\n          messagePurpose: \"subscribe\",\r\n        },\r\n        body: {\r\n          eventName: \"BlockBroken\",\r\n        },\r\n      })\r\n    );\r\n\r\n    ws.on(\"message\", this._handleMessage);\r\n\r\n    console.log(\"Inbound web socket connection.\");\r\n\r\n    this._onClientConnected.dispatch(this, ws.url);\r\n  }\r\n\r\n  _handleDisconnection(ws: WebSocket) {\r\n    this._ws = undefined;\r\n\r\n    this._onClientDisconnected.dispatch(this, ws.url);\r\n  }\r\n}\r\n", "/**\r\n * Handles WebSocket server commands for connecting to Minecraft game instances.\r\n *\r\n * This module manages the MinecraftWebSocketServer that allows the Electron app\r\n * to communicate with running Minecraft instances via WebSocket protocol.\r\n */\r\n\r\nimport { BrowserWindow, IpcMain } from \"electron\";\r\nimport MinecraftWebSocketServer from \"../local/MinecraftWebSocketServer\";\r\nimport LocalEnvironment from \"../local/LocalEnvironment\";\r\n\r\nexport class WebSocketCommandHandler {\r\n  private _window: BrowserWindow;\r\n  private _ipcMain: IpcMain;\r\n  private _wss: MinecraftWebSocketServer;\r\n  private _localUtilities: any;\r\n  private _env: LocalEnvironment;\r\n\r\n  constructor(browserWindow: BrowserWindow, incomingIpcMain: IpcMain, env: LocalEnvironment) {\r\n    this._window = browserWindow;\r\n    this._ipcMain = incomingIpcMain;\r\n\r\n    this.startServer = this.startServer.bind(this);\r\n    this.stopServer = this.stopServer.bind(this);\r\n    this.webSocketCommand = this.webSocketCommand.bind(this);\r\n    this.handleCommandCompleted = this.handleCommandCompleted.bind(this);\r\n    this.handleEventReceived = this.handleEventReceived.bind(this);\r\n    this.handleClientConnected = this.handleClientConnected.bind(this);\r\n    this.handleClientDisconnected = this.handleClientDisconnected.bind(this);\r\n    this.getMinecraftGameProjectPath = this.getMinecraftGameProjectPath.bind(this);\r\n    this.getMinecraftGameWorldPath = this.getMinecraftGameWorldPath.bind(this);\r\n\r\n    this._env = env;\r\n    this._wss = new MinecraftWebSocketServer(env);\r\n    this._localUtilities = this._env.utilities;\r\n\r\n    this._wss.onClientConnected.subscribe(this.handleClientConnected);\r\n    this._wss.onClientDisconnected.subscribe(this.handleClientDisconnected);\r\n    this._wss.onCommandCompleted.subscribe(this.handleCommandCompleted);\r\n    this._wss.onEventReceived.subscribe(this.handleEventReceived);\r\n\r\n    this._ipcMain.handle(\"asyncstartWebSocketServer\", this.startServer);\r\n    this._ipcMain.handle(\"asyncstopWebSocketServer\", this.stopServer);\r\n    this._ipcMain.handle(\"asyncwebSocketCommand\", this.webSocketCommand);\r\n    this._ipcMain.handle(\"asyncgetMinecraftGameProjectDeployDir\", this.getMinecraftGameProjectPath);\r\n    this._ipcMain.handle(\"asyncgetMinecraftGameWorldDeployDir\", this.getMinecraftGameWorldPath);\r\n  }\r\n\r\n  webSocketCommand(_event: Electron.IpcMainInvokeEvent, data: string): void {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const command = slargs[1];\r\n    const requestId = slargs[0];\r\n\r\n    this._wss.runCommand(command, requestId, \"\");\r\n  }\r\n\r\n  async startServer(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n    const result = this._wss.openServer();\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncstartWebSocketServerComplete|\" + slargs[0] + \"|\" + result);\r\n  }\r\n\r\n  async stopServer(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n    const result = this._wss.closeServer();\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncstopWebSocketServerComplete|\" + slargs[0] + \"|\" + result);\r\n  }\r\n\r\n  async getMinecraftGameProjectPath(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n\r\n    if (slargs[1].length > 0) {\r\n      let val = -1;\r\n\r\n      try {\r\n        val = parseInt(slargs[1]);\r\n\r\n        if (val === 1 /* minecraftPreview */) {\r\n          this._window.webContents.send(\r\n            \"appsvc\",\r\n            \"asyncgetMinecraftGameProjectDeployDir|\" + slargs[0] + \"|\" + this._localUtilities.minecraftPreviewPath\r\n          );\r\n\r\n          return;\r\n        } else if (val === 2 /* remote web sockets */) {\r\n          this._window.webContents.send(\"appsvc\", \"asyncgetMinecraftGameProjectDirComplete|\" + slargs[0] + \"|\");\r\n\r\n          return;\r\n        }\r\n      } catch (e) {\r\n        // Ignore parse errors\r\n      }\r\n    }\r\n\r\n    this._window.webContents.send(\r\n      \"appsvc\",\r\n      \"asyncgetMinecraftGameProjectDeployDirComplete|\" + slargs[0] + \"|\" + this._localUtilities.minecraftPath\r\n    );\r\n  }\r\n\r\n  async getMinecraftGameWorldPath(_event: Electron.IpcMainInvokeEvent, data: string): Promise<void> {\r\n    const slargs = data.split(\"|\");\r\n    let worldPath = \"\";\r\n\r\n    if (slargs[1].length > 0) {\r\n      let val = -1;\r\n\r\n      try {\r\n        val = parseInt(slargs[1]);\r\n\r\n        worldPath = this._wss.getWebSocketWorldPath(val);\r\n      } catch (e) {\r\n        console.log(\"Error retrieving socket path: \" + e);\r\n      }\r\n    }\r\n\r\n    this._window.webContents.send(\r\n      \"appsvc\",\r\n      \"asyncgetMinecraftGameWorldDeployDirComplete|\" + slargs[0] + \"|\" + worldPath\r\n    );\r\n  }\r\n\r\n  handleEventReceived(_server: MinecraftWebSocketServer, req: any): void {\r\n    this._window.webContents.send(\"appsvc\", \"wsevent|\" + JSON.stringify(req));\r\n  }\r\n\r\n  handleCommandCompleted(_server: MinecraftWebSocketServer, req: any): void {\r\n    this._window.webContents.send(\r\n      \"appsvc\",\r\n      \"asyncwebSocketCommandComplete|\" + req.requestId + \"|\" + JSON.stringify(req.result)\r\n    );\r\n  }\r\n\r\n  handleClientConnected(_server: MinecraftWebSocketServer, _message: any): void {\r\n    this._window.webContents.send(\"appsvc\", \"webSocketConnected|\");\r\n  }\r\n\r\n  handleClientDisconnected(_server: MinecraftWebSocketServer, _message: any): void {\r\n    this._window.webContents.send(\"appsvc\", \"webSocketDisconnected|\");\r\n  }\r\n}\r\n\r\nexport default WebSocketCommandHandler;\r\n", "import { BrowserWindow, IpcMain, IpcMainInvokeEvent } from \"electron\";\r\nimport * as fs from \"fs\";\r\nimport CreatorTools from \"../app/CreatorTools\";\r\nimport LocalEnvironment from \"../local/LocalEnvironment\";\r\nimport ElectronUtils from \"./ElectronUtils\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\n\r\n/** Debounce time in ms for batching file change notifications */\r\nconst FILE_CHANGE_DEBOUNCE_MS = 300;\r\n\r\nexport default class FileSystemCommandHandler {\r\n  _window: BrowserWindow;\r\n  _ipcMain: IpcMain;\r\n  _env: LocalEnvironment;\r\n  _utils: ElectronUtils;\r\n  _watchingPaths: { [name: string]: fs.FSWatcher } = {};\r\n\r\n  /** Pending file changes for debouncing, keyed by storage path */\r\n  _pendingFileChanges: {\r\n    [storagePath: string]: {\r\n      added: Set<string>;\r\n      removed: Set<string>;\r\n      updated: Set<string>;\r\n      timer: NodeJS.Timeout | null;\r\n    };\r\n  } = {};\r\n\r\n  constructor(\r\n    browserWindow: BrowserWindow,\r\n    incomingIpcMain: IpcMain,\r\n    creatorTools: CreatorTools,\r\n    env: LocalEnvironment,\r\n    utils: ElectronUtils\r\n  ) {\r\n    this._window = browserWindow;\r\n    this._ipcMain = incomingIpcMain;\r\n    this._env = env;\r\n    this._utils = utils;\r\n\r\n    this.exists = this.exists.bind(this);\r\n    this.folderExists = this.folderExists.bind(this);\r\n    this.mkdir = this.mkdir.bind(this);\r\n    this.readDir = this.readDir.bind(this);\r\n    this.renameFolder = this.renameFolder.bind(this);\r\n    this.deleteFolder = this.deleteFolder.bind(this);\r\n    this.readFile = this.readFile.bind(this);\r\n    this.writeFile = this.writeFile.bind(this);\r\n    this.writeUtf8File = this.writeUtf8File.bind(this);\r\n    this.readUtf8File = this.readUtf8File.bind(this);\r\n    this.stat = this.stat.bind(this);\r\n    this.getDirname = this.getDirname.bind(this);\r\n    this.rootStorageExists = this.rootStorageExists.bind(this);\r\n\r\n    this._ipcMain.handle(\"asyncgetDirname\", this.getDirname);\r\n    this._ipcMain.handle(\"asyncfsExists\", this.exists);\r\n    this._ipcMain.handle(\"asyncfsFolderExists\", this.folderExists);\r\n\r\n    this._ipcMain.handle(\"asyncfsRenameFolder\", this.renameFolder);\r\n    this._ipcMain.handle(\"asyncfsDeleteFolder\", this.deleteFolder);\r\n    this._ipcMain.handle(\"asyncfsRootStorageExists\", this.rootStorageExists);\r\n    this._ipcMain.handle(\"asyncfsMkdir\", this.mkdir);\r\n    this._ipcMain.handle(\"asyncfsReaddir\", this.readDir);\r\n    this._ipcMain.handle(\"asyncfsWriteFile\", this.writeFile);\r\n    this._ipcMain.handle(\"asyncfsWriteUtf8File\", this.writeUtf8File);\r\n    this._ipcMain.handle(\"bsyncfsReadFile\", this.readFile);\r\n    this._ipcMain.handle(\"asyncfsReadUtf8File\", this.readUtf8File);\r\n    this._ipcMain.handle(\"asyncfsStat\", this.stat);\r\n  }\r\n\r\n  exists(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const path = this._utils.deTokenizePath(slargs[1]);\r\n\r\n    if (path === undefined) {\r\n      throw new Error(\"EXT: Could not process path: \" + slargs[1]);\r\n    }\r\n\r\n    this._utils.validateFilePath(path);\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncfsExists|\" + slargs[0] + \"|\" + fs.existsSync(path));\r\n  }\r\n\r\n  rootStorageExists(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    let storagePath: string | undefined = slargs[1];\r\n\r\n    if (!storagePath) {\r\n      this._window.webContents.send(\"appsvc\", \"asyncfsRootStorageExists|\" + slargs[0] + \"|false\");\r\n      return;\r\n    }\r\n\r\n    let result = false;\r\n\r\n    if (storagePath.startsWith(\"<BDRK>\")) {\r\n      storagePath = this._utils.getMinecraftReleasePath();\r\n\r\n      if (storagePath) {\r\n        result = true;\r\n      }\r\n    } else if (storagePath.startsWith(\"<BDPV>\")) {\r\n      storagePath = this._utils.getMinecraftPreviewPath();\r\n\r\n      if (storagePath) {\r\n        result = true;\r\n      }\r\n    } else if (storagePath.startsWith(\"<pt_\") || storagePath.startsWith(\"<DOCP>\")) {\r\n      storagePath = this._utils.deTokenizePath(storagePath);\r\n\r\n      if (storagePath) {\r\n        result = true;\r\n      }\r\n    }\r\n\r\n    if (!storagePath) {\r\n      this._window.webContents.send(\"appsvc\", \"asyncfsRootStorageExists|\" + slargs[0] + \"|false\");\r\n      return;\r\n    }\r\n\r\n    if (result === true) {\r\n      if (fs.existsSync(storagePath) === false) {\r\n        result = false;\r\n      } else {\r\n        if (!this._watchingPaths[storagePath]) {\r\n          // Capture storagePath in a const for use in callbacks (TypeScript flow analysis)\r\n          const watchedPath = storagePath;\r\n\r\n          // Initialize pending changes structure for this storage path\r\n          this._pendingFileChanges[watchedPath] = {\r\n            added: new Set<string>(),\r\n            removed: new Set<string>(),\r\n            updated: new Set<string>(),\r\n            timer: null,\r\n          };\r\n\r\n          let listener = fs.watch(watchedPath, { recursive: true }, (eventType, fileName) => {\r\n            if (!fileName) {\r\n              return;\r\n            }\r\n\r\n            const mappedPath = this._utils.ensureMappingForPath(watchedPath);\r\n            const updatePath =\r\n              StorageUtilities.ensureEndsWithDelimiter(\"<pt_\" + mappedPath + \">\") + fileName.toString();\r\n            const fullFilePath = watchedPath + \"/\" + fileName.toString();\r\n\r\n            // Get the pending changes for this storage\r\n            const pending = this._pendingFileChanges[watchedPath];\r\n            if (!pending) {\r\n              return;\r\n            }\r\n\r\n            if (eventType === \"change\") {\r\n              // File contents changed - only if it wasn't just added\r\n              if (!pending.added.has(updatePath)) {\r\n                pending.updated.add(updatePath);\r\n              }\r\n            } else if (eventType === \"rename\") {\r\n              // On Windows, \"rename\" is fired for both adds and deletes\r\n              // Check if file exists to disambiguate\r\n              try {\r\n                if (fs.existsSync(fullFilePath)) {\r\n                  // File exists - it was added or renamed to this name\r\n                  // If it was in removed, move it to updated (quick delete+recreate)\r\n                  if (pending.removed.has(updatePath)) {\r\n                    pending.removed.delete(updatePath);\r\n                    pending.updated.add(updatePath);\r\n                  } else {\r\n                    pending.added.add(updatePath);\r\n                  }\r\n                } else {\r\n                  // File doesn't exist - it was removed or renamed away\r\n                  // If it was in added, just remove from added (never notify)\r\n                  if (pending.added.has(updatePath)) {\r\n                    pending.added.delete(updatePath);\r\n                  } else {\r\n                    // Mark for removal\r\n                    pending.updated.delete(updatePath);\r\n                    pending.removed.add(updatePath);\r\n                  }\r\n                }\r\n              } catch (e) {\r\n                // If we can't check existence, assume it was removed\r\n                pending.removed.add(updatePath);\r\n              }\r\n            }\r\n\r\n            // Reset the debounce timer\r\n            if (pending.timer) {\r\n              clearTimeout(pending.timer);\r\n            }\r\n\r\n            pending.timer = setTimeout(() => {\r\n              this._flushPendingChanges(watchedPath);\r\n            }, FILE_CHANGE_DEBOUNCE_MS);\r\n          });\r\n\r\n          this._watchingPaths[watchedPath] = listener;\r\n        }\r\n      }\r\n    }\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncfsRootStorageExists|\" + slargs[0] + \"|\" + result.toString());\r\n  }\r\n\r\n  /**\r\n   * Flushes pending file changes for a storage path, sending batched IPC messages.\r\n   * This is called after the debounce timer expires.\r\n   */\r\n  _flushPendingChanges(storagePath: string) {\r\n    const pending = this._pendingFileChanges[storagePath];\r\n    if (!pending) {\r\n      return;\r\n    }\r\n\r\n    // Clear the timer reference\r\n    pending.timer = null;\r\n\r\n    try {\r\n      // Send removed files first\r\n      for (const path of pending.removed) {\r\n        this._window.webContents.send(\"appsvc\", \"localFileRemoved|\" + path);\r\n      }\r\n\r\n      // Send added files\r\n      for (const path of pending.added) {\r\n        this._window.webContents.send(\"appsvc\", \"localFileAdded|\" + path);\r\n      }\r\n\r\n      // Send updated files\r\n      for (const path of pending.updated) {\r\n        this._window.webContents.send(\"appsvc\", \"localFileUpdate|\" + path);\r\n      }\r\n    } catch (e) {\r\n      // Window may have been closed\r\n    }\r\n\r\n    // Clear the sets\r\n    pending.added.clear();\r\n    pending.removed.clear();\r\n    pending.updated.clear();\r\n  }\r\n\r\n  folderExists(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    if (slargs[1].startsWith(\"<BDRK>\")) {\r\n      let mcpath = this._utils.getMinecraftReleasePath();\r\n\r\n      if (!mcpath) {\r\n        this._window.webContents.send(\"appsvc\", \"asyncfsFolderExists|\" + slargs[0] + \"|false\");\r\n      }\r\n    }\r\n\r\n    if (slargs[1].startsWith(\"<BDPV>\")) {\r\n      let BDPVath = this._utils.getMinecraftPreviewPath();\r\n\r\n      if (!BDPVath) {\r\n        this._window.webContents.send(\"appsvc\", \"asyncfsFolderExists|\" + slargs[0] + \"|false\");\r\n      }\r\n    }\r\n\r\n    const path = this._utils.deTokenizePath(slargs[1]);\r\n\r\n    if (path === undefined) {\r\n      throw new Error(\"FEX: Could not process path: \" + slargs[1]);\r\n    }\r\n\r\n    const folderExistsResult = fs.existsSync(path);\r\n    let result = false;\r\n\r\n    if (folderExistsResult) {\r\n      const statResult = fs.statSync(path);\r\n\r\n      if (statResult.isDirectory()) {\r\n        result = true;\r\n      }\r\n    }\r\n\r\n    try {\r\n      this._window.webContents.send(\"appsvc\", \"asyncfsFolderExists|\" + slargs[0] + \"|\" + result.toString());\r\n    } catch (e) {}\r\n  }\r\n\r\n  getDirname(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n    this._window.webContents.send(\"appsvc\", \"asyncgetDirname|\" + slargs[0] + \"|\" + __dirname);\r\n  }\r\n\r\n  renameFolder(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const fromPath = this._utils.deTokenizePath(slargs[1]);\r\n\r\n    if (fromPath === undefined) {\r\n      throw new Error(\"RNDA: Could not process path: \" + slargs[1]);\r\n    }\r\n\r\n    const toPath = this._utils.deTokenizePath(slargs[2]);\r\n\r\n    if (toPath === undefined) {\r\n      throw new Error(\"RNDB: Could not process path: \" + slargs[2]);\r\n    }\r\n\r\n    this._utils.validateFolderPath(fromPath);\r\n    this._utils.validateFolderPath(toPath);\r\n\r\n    let result = true;\r\n\r\n    try {\r\n      fs.renameSync(fromPath, toPath);\r\n    } catch (e) {\r\n      result = false;\r\n    }\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncfsRenameFolder|\" + slargs[0] + \"|\" + result.toString());\r\n  }\r\n\r\n  deleteFolder(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const path = this._utils.deTokenizePath(slargs[1]);\r\n\r\n    if (path === undefined) {\r\n      throw new Error(\"DLF: Could not process path: \" + slargs[1]);\r\n    }\r\n\r\n    this._utils.validateFolderPath(path);\r\n\r\n    let result = true;\r\n\r\n    try {\r\n      fs.rmSync(path, { recursive: true, force: true });\r\n    } catch (e) {\r\n      result = false;\r\n    }\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncfsDeleteFolder|\" + slargs[0] + \"|\" + result.toString());\r\n  }\r\n\r\n  mkdir(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const path = this._utils.deTokenizePath(slargs[1]);\r\n\r\n    if (path === undefined) {\r\n      throw new Error(\"MKD: Could not process path: \" + slargs[1]);\r\n    }\r\n\r\n    this._utils.validateFolderPath(path);\r\n\r\n    // Use recursive: true to create parent directories and avoid EEXIST errors\r\n    try {\r\n      fs.mkdirSync(path, { recursive: true });\r\n    } catch (e: any) {\r\n      // Only throw if it's not an EEXIST error (directory already exists is OK)\r\n      if (e.code !== \"EEXIST\") {\r\n        throw e;\r\n      }\r\n    }\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncfsMkdir|\" + slargs[0] + \"|true\");\r\n  }\r\n\r\n  readDir(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n    const path = this._utils.deTokenizePath(slargs[1]);\r\n\r\n    if (path === undefined) {\r\n      throw new Error(\"RDD: Could not process path: \" + slargs[1]);\r\n    }\r\n\r\n    this._utils.validateFolderPath(path);\r\n\r\n    let fsReadDirResult = undefined;\r\n\r\n    try {\r\n      fsReadDirResult = fs.readdirSync(path);\r\n    } catch (e) {}\r\n\r\n    const res = fsReadDirResult ? JSON.stringify(fsReadDirResult) : \"<undefined>\";\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncfsReadDir|\" + slargs[0] + \"|\" + res);\r\n  }\r\n\r\n  writeFile(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const writeFilePath = this._utils.deTokenizePath(slargs[1]);\r\n\r\n    if (writeFilePath === undefined) {\r\n      throw new Error(\"WFI: Could not process path: \" + slargs[1]);\r\n    }\r\n\r\n    let writeFileContent = slargs[2];\r\n\r\n    this._utils.validateFilePath(writeFilePath);\r\n\r\n    // Ensure parent directory exists before writing\r\n    const dirPath = StorageUtilities.getFolderPath(writeFilePath);\r\n    if (!fs.existsSync(dirPath)) {\r\n      fs.mkdirSync(dirPath, { recursive: true });\r\n    }\r\n\r\n    const dvWriteFileContent = new DataView(this._utils.base64ToArrayBuffer(writeFileContent));\r\n\r\n    fs.writeFileSync(writeFilePath, dvWriteFileContent);\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncfsWriteFile|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  readFile(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const path = this._utils.deTokenizePath(slargs[1]);\r\n\r\n    if (path === undefined) {\r\n      throw new Error(\"RFI: Could not process path: \" + slargs[1]);\r\n    }\r\n\r\n    this._utils.validateFilePath(path);\r\n\r\n    if (!fs.existsSync(path)) {\r\n      this._window.webContents.send(\"appsvc\", \"bsyncfsReadFile|\" + slargs[0] + \"|<undefined>\");\r\n      return;\r\n    }\r\n\r\n    const readFileResult = fs.readFileSync(path);\r\n\r\n    this._window.webContents.send(\r\n      \"appsvc\",\r\n      \"bsyncfsReadFile|\" + slargs[0] + \"|\" + this._utils.arrayBufferToBase64(readFileResult)\r\n    );\r\n  }\r\n\r\n  readUtf8File(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const path = this._utils.deTokenizePath(slargs[1]);\r\n\r\n    if (path === undefined) {\r\n      throw new Error(\"RUF: Could not process path: \" + slargs[1]);\r\n    }\r\n\r\n    this._utils.validateFilePath(path);\r\n\r\n    if (!fs.existsSync(path)) {\r\n      this._window.webContents.send(\"appsvc\", \"asyncfsReadUtf8File|\" + slargs[0] + \"|<undefined>\");\r\n      return;\r\n    }\r\n\r\n    const fileContents = fs.readFileSync(path, { encoding: \"utf8\" });\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncfsReadUtf8File|\" + slargs[0] + \"|\" + fileContents);\r\n  }\r\n\r\n  stat(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const path = this._utils.deTokenizePath(slargs[1]);\r\n\r\n    if (path === undefined) {\r\n      throw new Error(\"STT: Could not process path: \" + slargs[1]);\r\n    }\r\n\r\n    this._utils.validateFolderPath(path);\r\n\r\n    const statResult = fs.statSync(path);\r\n    const statResultData = {\r\n      isDirectory: statResult.isDirectory(),\r\n      isFile: statResult.isFile(),\r\n      mtime: statResult.mtime,\r\n      ctime: statResult.ctime,\r\n      size: statResult.size,\r\n    };\r\n\r\n    try {\r\n      this._window.webContents.send(\"appsvc\", \"asyncfsStat|\" + slargs[0] + \"|\" + JSON.stringify(statResultData));\r\n    } catch (e) {}\r\n  }\r\n\r\n  writeUtf8File(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const path = this._utils.deTokenizePath(slargs[1]);\r\n\r\n    if (path === undefined) {\r\n      throw new Error(\"WUF: Could not process path: \" + slargs[1]);\r\n    }\r\n\r\n    const content = slargs[2];\r\n\r\n    this._utils.validateFilePath(path);\r\n\r\n    const dirPath = StorageUtilities.getFolderPath(path);\r\n\r\n    if (!fs.existsSync(dirPath)) {\r\n      fs.mkdirSync(dirPath, { recursive: true });\r\n    }\r\n\r\n    fs.writeFileSync(path, content, { encoding: \"utf8\" });\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncfsWriteUtf8File|\" + slargs[0] + \"|\");\r\n  }\r\n}\r\n", "import { BrowserWindow, IpcMain, IpcMainInvokeEvent } from \"electron\";\r\nimport LocalEnvironment from \"../local/LocalEnvironment\";\r\nimport ElectronUtils from \"./ElectronUtils\";\r\nimport IContentSource from \"../app/IContentSource\";\r\n\r\nexport default class ContentSourceManager {\r\n  _window: BrowserWindow;\r\n  _ipcMain: IpcMain;\r\n  _env: LocalEnvironment;\r\n  _utils: ElectronUtils;\r\n  _initialized: boolean = false;\r\n  _contentSources: IContentSource[] = [];\r\n\r\n  constructor(browserWindow: BrowserWindow, incomingIpcMain: IpcMain, env: LocalEnvironment, utils: ElectronUtils) {\r\n    this._window = browserWindow;\r\n    this._ipcMain = incomingIpcMain;\r\n    this._env = env;\r\n    this._utils = utils;\r\n    this.getContentSources = this.getContentSources.bind(this);\r\n    this._ipcMain.handle(\"asyncgetContentSources\", this.getContentSources);\r\n  }\r\n\r\n  _init() {\r\n    if (this._initialized) {\r\n      return;\r\n    }\r\n\r\n    this._contentSources = [\r\n      {\r\n        id: \"minecraftPEComMojang\",\r\n        localFolderPath: \"<MCPE>\",\r\n      },\r\n    ];\r\n\r\n    this._initialized = true;\r\n  }\r\n\r\n  getContentSources(evt: IpcMainInvokeEvent, data: string) {\r\n    if (!this._initialized) {\r\n      this._init();\r\n    }\r\n\r\n    const slargs = data.split(\"|\");\r\n\r\n    let result = JSON.stringify(this._contentSources);\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncgetContentSources|\" + slargs[0] + \"|\" + result.toString());\r\n  }\r\n}\r\n", "import { BrowserWindow, IpcMain, IpcMainInvokeEvent } from \"electron\";\r\nimport LocalEnvironment from \"../local/LocalEnvironment\";\r\nimport ElectronUtils from \"./ElectronUtils\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IConversionSettings from \"../core/IConversionSettings\";\r\n\r\nexport default class LocalCommandHandler {\r\n  _window;\r\n  _ipcMain;\r\n  _env;\r\n\r\n  constructor(browserWindow: BrowserWindow, incomingIpcMain: IpcMain, env: LocalEnvironment, utils: ElectronUtils) {\r\n    this._window = browserWindow;\r\n    this._ipcMain = incomingIpcMain;\r\n    this._env = env;\r\n\r\n    this.convertFile = this.convertFile.bind(this);\r\n\r\n    this._ipcMain.handle(\"asyncconvertFile\", this.convertFile);\r\n  }\r\n\r\n  async convertFile(evt: IpcMainInvokeEvent, data: string) {\r\n    const slargs = data.split(\"|\");\r\n\r\n    const serverState = slargs[1];\r\n\r\n    console.log(\"Converting: \" + data);\r\n    const req = this.convertStringToConversionSettings(serverState);\r\n\r\n    let commandResult = false;\r\n\r\n    if (req === undefined) {\r\n      console.log(\"No conversion data was specified.\");\r\n    } else {\r\n      const result = await this._env.utilities.processConversion(req);\r\n\r\n      if (!result) {\r\n        this._window.webContents.send(\"appsvc\", \"convertFileError|Could not process a conversion request.\");\r\n      } else {\r\n        commandResult = true;\r\n      }\r\n    }\r\n\r\n    this._window.webContents.send(\"appsvc\", \"asyncconvertFileComplete|\" + slargs[0] + \"|\");\r\n  }\r\n\r\n  convertStringToConversionSettings(serverState: string) {\r\n    let req: IConversionSettings | undefined = undefined;\r\n\r\n    if (serverState !== \"\") {\r\n      req = Utilities.parseJson(serverState) as IConversionSettings;\r\n    }\r\n\r\n    return req;\r\n  }\r\n}\r\n", "import * as fs from \"fs\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport * as path from \"path\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { app } from \"electron\";\r\nimport LocalEnvironment from \"../local/LocalEnvironment\";\r\nimport Log from \"../core/Log\";\r\n\r\nconst allowedExtensions = [\r\n  \"js\",\r\n  \"ts\",\r\n  \"mjs\",\r\n  \"json\",\r\n  \"md\",\r\n  \"png\",\r\n  \"jpg\",\r\n  \"jpeg\",\r\n  \"lang\",\r\n  \"fsb\",\r\n  \"map\",\r\n  \"ogg\",\r\n  \"flac\",\r\n  \"hdr\",\r\n  \"psd\",\r\n  \"env\",\r\n  \"gif\",\r\n  \"wav\",\r\n  \"tga\",\r\n  \"env\",\r\n  \"properties\",\r\n  \"cartobackup\",\r\n  \"mctbackup\",\r\n  \"wlist\",\r\n  \"brarchive\",\r\n  \"nbt\",\r\n  \"webm\",\r\n  \"svg\",\r\n  \"otf\",\r\n  \"ttf\",\r\n  \"bin\",\r\n  \"obj\",\r\n  \"pdn\",\r\n  \"zip\",\r\n  \"h\",\r\n  \"py\",\r\n  \"fontdata\",\r\n  \"\",\r\n  \"mcstructure\",\r\n  \"mcworld\",\r\n  \"mcproject\",\r\n  \"map\",\r\n  \"js.map\",\r\n  \"mctemplate\",\r\n  \"material\",\r\n  \"vertex\",\r\n  \"md\",\r\n  \"geometry\",\r\n  \"fragment\",\r\n  \"mcfunction\",\r\n  \"mcaddon\",\r\n  \"mcpack\",\r\n  \"html\",\r\n  \"dat\",\r\n  \"dat_old\",\r\n  \"txt\",\r\n  \"ldb\",\r\n  \"log\",\r\n  \"in\",\r\n  \"cmake\",\r\n];\r\n\r\nconst allowedExecutableExtensions = [\"mcstructure\", \"mcworld\", \"mctemplate\", \"mcaddon\"];\r\n\r\nexport default class ElectronUtils {\r\n  // Static set to track tokens we've already warned about across all instances\r\n  private static _warnedMissingTokens: Set<string> = new Set();\r\n\r\n  _minecraftPreviewPath: string | undefined;\r\n  _minecraftReleasePath: string | undefined;\r\n  _minecraftEducationPreviewPath: string | undefined;\r\n  _minecraftEducationReleasePath: string | undefined;\r\n  _minecraftPEPath: string | undefined;\r\n  _uniqueIdToPathMappings: { [key: string]: string };\r\n  _pathToUniqueIdMappings: { [key: string]: string };\r\n  _env;\r\n  _docFolderEnsured: boolean = false;\r\n\r\n  constructor(env: LocalEnvironment) {\r\n    this._env = env;\r\n\r\n    this._minecraftPreviewPath = undefined;\r\n    this._minecraftReleasePath = undefined;\r\n    this._uniqueIdToPathMappings = {};\r\n\r\n    if (this._env.pathMappings) {\r\n      this._pathToUniqueIdMappings = this._env.pathMappings;\r\n\r\n      for (const path in this._pathToUniqueIdMappings) {\r\n        const uniqueId = this._pathToUniqueIdMappings[path];\r\n\r\n        this._uniqueIdToPathMappings[uniqueId] = path;\r\n      }\r\n    } else {\r\n      this._pathToUniqueIdMappings = {};\r\n    }\r\n  }\r\n\r\n  ensureMappingForPath(path: string) {\r\n    path = path.replace(/\\\\/g, \"/\");\r\n\r\n    let pathCanon = StorageUtilities.canonicalizePath(path);\r\n\r\n    if (pathCanon.indexOf(\"/\") >= 0 && !pathCanon.endsWith(\"/\")) {\r\n      pathCanon += \"/\";\r\n    }\r\n\r\n    if (this._pathToUniqueIdMappings[pathCanon]) {\r\n      return this._pathToUniqueIdMappings[pathCanon];\r\n    } else {\r\n      const uniqueId = StorageUtilities.getLeafName(path) + \"-\" + Utilities.createRandomLowerId(6);\r\n\r\n      this._pathToUniqueIdMappings[pathCanon] = uniqueId;\r\n      this._uniqueIdToPathMappings[uniqueId] = pathCanon;\r\n\r\n      this._env.pathMappings = this._pathToUniqueIdMappings;\r\n      this._env.save();\r\n\r\n      return uniqueId;\r\n    }\r\n  }\r\n\r\n  hasMappingForPath(path: string) {\r\n    const pathCanon = StorageUtilities.canonicalizePath(path);\r\n\r\n    if (this._pathToUniqueIdMappings[pathCanon]) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  getMinecraftReleasePath() {\r\n    if (this._minecraftReleasePath) {\r\n      return this._minecraftReleasePath;\r\n    }\r\n\r\n    this._minecraftReleasePath =\r\n      this.getRoamingPath() +\r\n      \"Microsoft Bedrock\" +\r\n      path.sep +\r\n      \"Users\" +\r\n      path.sep +\r\n      \"Shared\" +\r\n      path.sep +\r\n      \"games\" +\r\n      path.sep +\r\n      \"com.mojang\" +\r\n      path.sep;\r\n\r\n    // fall back to older UWP path\r\n    if (!fs.existsSync(this._minecraftReleasePath)) {\r\n      this._minecraftReleasePath =\r\n        this.getUserLocalPath() +\r\n        \"Packages\" +\r\n        path.sep +\r\n        \"Microsoft.MinecraftUWP_8wekyb3d8bbwe\" +\r\n        path.sep +\r\n        \"LocalState\" +\r\n        path.sep +\r\n        \"games\" +\r\n        path.sep +\r\n        \"com.mojang\" +\r\n        path.sep;\r\n\r\n      if (!fs.existsSync(this._minecraftReleasePath)) {\r\n        this._minecraftReleasePath = undefined;\r\n      }\r\n    }\r\n\r\n    return this._minecraftReleasePath;\r\n  }\r\n\r\n  getMinecraftPreviewPath() {\r\n    if (this._minecraftPreviewPath) {\r\n      return this._minecraftPreviewPath;\r\n    }\r\n\r\n    this._minecraftPreviewPath =\r\n      this.getRoamingPath() +\r\n      \"Microsoft Bedrock Preview\" +\r\n      path.sep +\r\n      \"Users\" +\r\n      path.sep +\r\n      \"Shared\" +\r\n      path.sep +\r\n      \"games\" +\r\n      path.sep +\r\n      \"com.mojang\" +\r\n      path.sep;\r\n\r\n    // fall back to older UWP path\r\n    if (!fs.existsSync(this._minecraftPreviewPath)) {\r\n      this._minecraftPreviewPath =\r\n        this.getUserLocalPath() +\r\n        \"Packages\" +\r\n        path.sep +\r\n        \"Microsoft.MinecraftWindowsBeta_8wekyb3d8bbwe\" +\r\n        path.sep +\r\n        \"LocalState\" +\r\n        path.sep +\r\n        \"games\" +\r\n        path.sep +\r\n        \"com.mojang\" +\r\n        path.sep;\r\n\r\n      if (!fs.existsSync(this._minecraftPreviewPath)) {\r\n        this._minecraftPreviewPath = undefined;\r\n      }\r\n    }\r\n\r\n    return this._minecraftPreviewPath;\r\n  }\r\n\r\n  getMinecraftEducationReleasePath() {\r\n    if (this._minecraftEducationReleasePath) {\r\n      return this._minecraftEducationReleasePath;\r\n    }\r\n\r\n    this._minecraftEducationReleasePath =\r\n      this.getUserLocalPath() +\r\n      \"Packages\" +\r\n      path.sep +\r\n      \"Microsoft.MinecraftEducationEdition_8wekyb3d8bbwe\" +\r\n      path.sep +\r\n      \"LocalState\" +\r\n      path.sep +\r\n      \"games\" +\r\n      path.sep +\r\n      \"com.mojang\" +\r\n      path.sep;\r\n\r\n    return this._minecraftEducationReleasePath;\r\n  }\r\n\r\n  getMinecraftEducationPreviewPath() {\r\n    if (this._minecraftEducationPreviewPath) {\r\n      return this._minecraftEducationPreviewPath;\r\n    }\r\n\r\n    this._minecraftEducationPreviewPath =\r\n      this.getUserLocalPath() +\r\n      \"Packages\" +\r\n      path.sep +\r\n      \"Microsoft.MinecraftEducationPreview_8wekyb3d8bbwe\" +\r\n      path.sep +\r\n      \"LocalState\" +\r\n      path.sep +\r\n      \"games\" +\r\n      path.sep +\r\n      \"com.mojang\" +\r\n      path.sep;\r\n\r\n    return this._minecraftEducationPreviewPath;\r\n  }\r\n\r\n  getMinecraftPEPath() {\r\n    if (this._minecraftPEPath) {\r\n      return this._minecraftPEPath;\r\n    }\r\n\r\n    this._minecraftPEPath =\r\n      this.getRoamingPath() + \"MicrosoftPE\" + path.sep + \"games\" + path.sep + \"com.mojang\" + path.sep;\r\n\r\n    return this._minecraftPEPath;\r\n  }\r\n\r\n  deTokenizePath(untrustedPath: string) {\r\n    let resultPath = undefined;\r\n\r\n    if (untrustedPath.startsWith(\"<BDPV>\")) {\r\n      let udPath = this.getMinecraftPreviewPath();\r\n\r\n      if (!udPath) {\r\n        return undefined;\r\n      }\r\n\r\n      let segment = untrustedPath.substring(6);\r\n\r\n      if (segment.startsWith(path.sep)) {\r\n        segment = segment.substring(1);\r\n      }\r\n\r\n      resultPath = udPath + segment;\r\n    } else if (untrustedPath.startsWith(\"<BDRK>\")) {\r\n      let udPath = this.getMinecraftReleasePath();\r\n\r\n      if (!udPath) {\r\n        return undefined;\r\n      }\r\n\r\n      let segment = untrustedPath.substring(6);\r\n\r\n      if (segment.startsWith(path.sep)) {\r\n        segment = segment.substring(1);\r\n      }\r\n\r\n      resultPath = udPath + segment;\r\n    } else if (untrustedPath.startsWith(\"<EDUR>\")) {\r\n      let udPath = this.getMinecraftEducationReleasePath();\r\n\r\n      if (!udPath) {\r\n        return undefined;\r\n      }\r\n\r\n      let segment = untrustedPath.substring(6);\r\n\r\n      if (segment.startsWith(path.sep)) {\r\n        segment = segment.substring(1);\r\n      }\r\n\r\n      resultPath = udPath + segment;\r\n    } else if (untrustedPath.startsWith(\"<EDUP>\")) {\r\n      let udPath = this.getMinecraftEducationPreviewPath();\r\n\r\n      if (!udPath) {\r\n        return undefined;\r\n      }\r\n\r\n      let segment = untrustedPath.substring(6);\r\n\r\n      if (segment.startsWith(path.sep)) {\r\n        segment = segment.substring(1);\r\n      }\r\n\r\n      resultPath = udPath + segment;\r\n    } else if (untrustedPath.startsWith(\"<MCPE>\")) {\r\n      let udPath = this.getMinecraftPEPath();\r\n\r\n      if (!udPath) {\r\n        return undefined;\r\n      }\r\n\r\n      let segment = untrustedPath.substring(6);\r\n\r\n      if (segment.startsWith(path.sep)) {\r\n        segment = segment.substring(1);\r\n      }\r\n\r\n      resultPath = udPath + segment;\r\n    } else if (untrustedPath.startsWith(\"<DOCP>\")) {\r\n      // Check if test storage override is set (for automated tests)\r\n      const testStorageRoot = process.env.MCT_TEST_STORAGE_ROOT;\r\n      let docPBasePath: string;\r\n\r\n      if (testStorageRoot) {\r\n        // Use test storage root instead of user's Documents folder\r\n        docPBasePath = testStorageRoot.endsWith(path.sep) ? testStorageRoot : testStorageRoot + path.sep;\r\n      } else {\r\n        // Default: use Documents folder\r\n        docPBasePath = app.getPath(\"documents\") + path.sep + \"Minecraft Creator Tools\" + path.sep;\r\n      }\r\n\r\n      let segment = untrustedPath.substring(6);\r\n\r\n      if (segment.startsWith(path.sep)) {\r\n        segment = segment.substring(1);\r\n      }\r\n\r\n      if (!this._docFolderEnsured) {\r\n        this._docFolderEnsured = true;\r\n\r\n        if (!fs.existsSync(docPBasePath)) {\r\n          fs.mkdirSync(docPBasePath, { recursive: true });\r\n        }\r\n      }\r\n\r\n      resultPath = docPBasePath + segment;\r\n    } else if (untrustedPath.startsWith(\"<pt_\")) {\r\n      resultPath = this.fixupTokenPath(untrustedPath);\r\n    }\r\n\r\n    if (resultPath) {\r\n      return resultPath.replace(/\\//g, path.sep);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  fixupTokenPath(path: string) {\r\n    path = path.replace(/\\\\/g, \"/\");\r\n\r\n    if (path.startsWith(\"<pt_\")) {\r\n      let nextGreater = path.indexOf(\">\");\r\n\r\n      if (nextGreater >= 0) {\r\n        const tok = path.substring(4, nextGreater);\r\n\r\n        let tokenPath = this.getTokenPath(tok);\r\n\r\n        if (tokenPath) {\r\n          let nextSeg = path.substring(nextGreater + 1);\r\n\r\n          if (tokenPath.indexOf(\"/\") >= 0 && !tokenPath.endsWith(\"/\")) {\r\n            tokenPath += \"/\";\r\n          }\r\n\r\n          if (tokenPath.endsWith(\"/\") && nextSeg.startsWith(\"/\")) {\r\n            nextSeg = nextSeg.substring(1);\r\n          }\r\n\r\n          return tokenPath + nextSeg;\r\n        } else {\r\n          // Only warn once per missing token to reduce log noise (use static to dedupe across instances)\r\n          if (!ElectronUtils._warnedMissingTokens.has(tok)) {\r\n            ElectronUtils._warnedMissingTokens.add(tok);\r\n            Log.debugAlert(\r\n              \"Could not find path mapping for token '\" +\r\n                tok +\r\n                \"'. Project may reference a folder from a previous session.\"\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getTokenPath(token: string) {\r\n    return this._uniqueIdToPathMappings[token];\r\n  }\r\n\r\n  validateFolderPath(path: string) {\r\n    // banned character combos\r\n    if (path.indexOf(\"..\") >= 0 || path.indexOf(\"\\\\\\\\\") >= 0 || path.indexOf(\"//\") >= 0) {\r\n      throw new Error(\"Unsupported path combinations: \" + path);\r\n    }\r\n\r\n    if (path.lastIndexOf(\":\") >= 2) {\r\n      throw new Error(\"Unsupported drive location: \" + path);\r\n    }\r\n\r\n    let count = this.countChar(path, \"\\\\\") + this.countChar(path, \"/\");\r\n\r\n    if (!path.endsWith(\"\\\\\") && !path.endsWith(\"/\")) {\r\n      count++;\r\n    }\r\n\r\n    if (count < 2) {\r\n      throw new Error(\"Unsupported base path: \" + path);\r\n    }\r\n  }\r\n\r\n  validateFilePath(path: string) {\r\n    this.validateFolderPath(path);\r\n\r\n    const extension = this.getTypeFromName(path);\r\n\r\n    if (!allowedExtensions.includes(extension)) {\r\n      throw new Error(\"Unsupported file type: \" + path);\r\n    }\r\n  }\r\n\r\n  validateExecutableFilePath(path: string) {\r\n    this.validateFolderPath(path);\r\n\r\n    const extension = this.getTypeFromName(path);\r\n\r\n    if (!allowedExecutableExtensions.includes(extension)) {\r\n      throw new Error(\"Unsupported executable file type: \" + path);\r\n    }\r\n  }\r\n\r\n  getTypeFromName(name: string) {\r\n    const nameW = name.trim().toLowerCase();\r\n\r\n    const lastBackslash = nameW.lastIndexOf(\"\\\\\");\r\n    const lastSlash = nameW.lastIndexOf(\"/\");\r\n\r\n    const lastPeriod = nameW.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod < 0 || lastPeriod < lastSlash || lastPeriod < lastBackslash) {\r\n      return \"\";\r\n    }\r\n\r\n    return nameW.substring(lastPeriod + 1, nameW.length);\r\n  }\r\n\r\n  arrayBufferToBase64(buffer: NonSharedBuffer) {\r\n    var binary = \"\";\r\n    const bytes = new Uint8Array(buffer);\r\n\r\n    const len = bytes.byteLength;\r\n\r\n    for (var i = 0; i < len; i++) {\r\n      binary += String.fromCharCode(bytes[i]);\r\n    }\r\n\r\n    return btoa(binary);\r\n  }\r\n\r\n  base64ToArrayBuffer(base64buffer: string) {\r\n    const binary = atob(base64buffer);\r\n\r\n    const arrayBuffer = new ArrayBuffer(binary.length);\r\n    const bytes = new Uint8Array(arrayBuffer);\r\n\r\n    const len = binary.length;\r\n\r\n    for (let i = 0; i < len; i++) {\r\n      bytes[i] = binary.charCodeAt(i);\r\n    }\r\n\r\n    return arrayBuffer;\r\n  }\r\n\r\n  countChar(source: string, find: string) {\r\n    let count = 0;\r\n\r\n    let index = source.indexOf(find);\r\n\r\n    while (index >= 0) {\r\n      count++;\r\n\r\n      index = source.indexOf(find, index + find.length);\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  getRoamingPath() {\r\n    let udPath = app.getPath(\"userData\");\r\n\r\n    const lastSlash = udPath.lastIndexOf(path.sep);\r\n    if (lastSlash >= 0) {\r\n      udPath = udPath.substring(0, lastSlash + 1);\r\n    }\r\n\r\n    return udPath;\r\n  }\r\n\r\n  getUserLocalPath() {\r\n    let udPath = this.getRoamingPath();\r\n\r\n    udPath = udPath.replace(\"\\\\Roaming\\\\\", \"\\\\Local\\\\\");\r\n\r\n    return udPath;\r\n  }\r\n}\r\n"],
  "mappings": "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KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,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AAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;A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O,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UA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B,CAAC;AACtD,gBAAc,kBAAkB,IAAI,aAAa,CAAC;AAClD,gBAAc,kBAAkB,IAAI,gBAAgB,CAAC;AACrD,gBAAc,kBAAkB,IAAI,aAAa,CAAC;AAGlD,gBAAc,kBAAkB,IAAI,gBAAgB,CAAC;AACrD,gBAAc,kBAAkB,IAAI,oBAAoB,CAAC;AACzD,gBAAc,kBAAkB,IAAI,kBAAkB,CAAC;AACvD,gBAAc,kBAAkB,IAAI,eAAe,CAAC;AAGpD,gBAAc,kBAAkB,IAAI,cAAc,CAAC;AACnD,gBAAc,kBAAkB,IAAI,eAAe,CAAC;AAGpD,gBAAc,kBAAkB,IAAI,mBAAmB,CAAC;AACxD,gBAAc,kBAAkB,IAAI,mBAAmB,CAAC;AACxD,gBAAc,kBAAkB,IAAI,sBAAsB,CAAC;AAC3D,gBAAc,kBAAkB,IAAI,cAAc,CAAC;AACnD,gBAAc,kBAAkB,IAAI,kBAAkB,CAAC;AACvD,gBAAc,kBAAkB,IAAI,oBAAoB,CAAC;AACzD,gBAAc,kBAAkB,IAAI,kBAAkB,CAAC;AACvD,gBAAc,kBAAkB,IAAI,mBAAmB,CAAC;AAC1D;AAxTA;AAAA;AAAA;AAoBA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAOA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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A;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAC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;AAAA,UAElC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AACE,mBAAO,CAAC,kBAAkB;AAAA,UAE5B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AACE,mBAAO,CAAC,iBAAiB;AAAA,UAE3B;AACE,mBAAO,CAAC,0BAA0B;AAAA,UAEpC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AACE,mBAAO,CAAC,YAAY;AAAA,UAEtB;AACE,mBAAO,CAAC,aAAa,aAAa,WAAW;AAAA,UAE/C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AACE,mBAAO,CAAC,aAAa,YAAY;AAAA,UAEnC;AACE,mBAAO,CAAC,0BAA0B;AAAA,QACtC;AAAA,MACF;AAAA,MAEA,OAAO,sBAAsB,MAAuB;AAClD,gBAAQ,MAAM;AAAA,UACZ;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,U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AC,+CAA+C;QACzE,0BAA0B;UACxB;QACF;QACA,mBAAmB,CAAC,oCAAoC;QACxD,+BAA+B;UAC7B;QACF;QACA,gCAAgC;UAC9B;QACF;QACA,yBAAyB,CAAC,+CAA+C;QACzE,0BAA0B;UACxB;QACF;QACA,oBAAoB,CAAC,8CAA8C;QACnE,wBAAwB;UACtB;QACF;QACA,wBAAwB;UACtB;QACF;QACA,yBAAyB;UACvB;QACF;QACA,gBAAgB;UACd;QACF;QACA,0BAA0B;UACxB;QACF;QACA,iCAAiC;UAC/B;QACF;QACA,yBAAyB;UACvB;QACF;QACA,2BAA2B;UACzB;QACF;QACA,0BAA0B;UACxB;QACF;QACA,iBAAiB,CAAC,kDAAkD;QACpE,mBAAmB,CAAC,6CAA6C;QACjE,kBAAkB;UAChB;QACF;QACA,oBAAoB;UAClB;QACF;QACA,+BAA+B;UAC7B;QACF;QACA,gCAAgC;UAC9B;QACF;QACA,mBAAmB,CAAC,oDAAoD;QACxE,uBAAuB;UACrB;QACF;QACA,oDAAoD;UAClD;QACF;QACA,iBAAiB;UACf;QACF;QACA,kBAAkB;UAChB;QACF;QACA,+BAA+B;UAC7B;QACF;QACA,gCAAgC;UAC9B;QACF;QACA,yBAAyB;UACvB;QACF;QACA,mDAAmD;UACjD;QACF;QACA,gBAAgB;UACd;QACF;QACA,wBAAwB;UACtB;QACF;QACA,+BAA+B;UAC7B;QACF;QACA,gCAAgC;UAC9B;QACF;QACA,qBAAqB,CAAC,0CAA0C;QAChE,sBAAsB,CAAC,+CAA+C;QACtE,kCAAkC;UAChC;QACF;QACA,4BAA4B,CAAC,qCAAqC;QAClE,+BAA+B;UAC7B;QACF;QACA,6BAA6B;UAC3B;QACF;QACA,aAAa,CAAC,2DAA2D;QACzE,sBAAsB;UACpB;QACF;QACA,6BAA6B;UAC3B;QACF;QACA,8BAA8B;UAC5B;QACF;QACA,yBAAyB;UACvB;QACF;QACA,sBAAsB;UACpB;QACF;QACA,wBAAwB;UACtB;QACF;QACA,wDAAwD;UACtD;QACF;QACA,sDAAsD;UACpD;QACF;QACA,yCAAyC;UACvC;QACF;Q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UAC1B;QACF;QACA,oBAAoB;UAClB;QACF;QACA,kBAAkB,CAAC,sCAAsC;QACzD,mBAAmB,CAAC,gDAAgD;QACpE,qBAAqB;UACnB;UACA,CAAC;UACD,EAAE,SAAS,CAAC,gBAAgB,oBAAoB,EAAE;QACpD;QACA,qBAAqB;UACnB;QACF;QACA,oBAAoB,CAAC,kDAAkD;QACvE,aAAa;UACX;QACF;QACA,oBAAoB;UAClB;QACF;QACA,aAAa,CAAC,iDAAiD;MACjE;MACA,cAAc;QACZ,qBAAqB;UACnB;QACF;QACA,+BAA+B;UAC7B;QACF;QACA,qBAAqB,CAAC,+CAA+C;QACrE,kCAAkC;UAChC;QACF;QACA,qBAAqB;UACnB;QACF;QACA,kCAAkC;UAChC;QACF;QACA,qBAAqB;UACnB;QACF;QACA,kBAAkB;UAChB;QACF;QACA,+BAA+B;UAC7B;QACF;QACA,gCAAgC;UAC9B;QACF;QACA,yBAAyB,CAAC,8CAA8C;QACxE,0BAA0B;UACxB;QACF;QACA,uCAAuC;UACrC;QACF;QACA,iCAAiC;UAC/B;QACF;QACA,2CAA2C;UACzC;QACF;QACA,qCAAqC;UACnC;QACF;QACA,2BAA2B;UACzB;QACF;QACA,wCAAwC;UACtC;QACF;QACA,qBAAqB;UACnB;QACF;QACA,+BAA+B;UAC7B;QACF;MACF;MACA,gBAAgB;QACd,sBAAsB,CAAC,uBAAuB;QAC9C,gBAAgB,CAAC,6BAA6B;MAChD;MACA,YAAY;QACV,4CAA4C;UAC1C;QACF;QACA,4BAA4B;UAC1B;QACF;QACA,iCAAiC;UAC/B;QACF;QACA,uCAAuC;UACrC;QACF;QACA,4BAA4B,CAAC,uBAAuB;QACpD,yBAAyB;UACvB;QACF;QACA,0BAA0B;UACxB;QACF;QACA,0CAA0C;UACxC;QACF;QACA,kCAAkC;UAChC;QACF;QACA,oCAAoC;UAClC;QACF;QACA,4BAA4B,CAAC,0CAA0C;QACvE,wBAAwB;UACtB;QACF;QACA,iBAAiB,CAAC,qDAAqD;QACvE,kBAAkB;UAChB;QACF;QACA,kCAAkC;UAChC;QACF;QACA,4BAA4B;UAC1B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CF;QACA,cAAc,CAAC,uCAAuC;QACtD,yBAAyB,CAAC,2CAA2C;QACrE,2BAA2B;UACzB;QACF;QACA,4CAA4C;UAC1C;QACF;QACA,2BAA2B;UACzB;UACA,CAAC;UACD;YACE,YACE;UACJ;QACF;QACA,uBAAuB;UACrB;QACF;QACA,8BAA8B;UAC5B;QACF;QACA,uBAAuB;UACrB;QACF;QACA,uBAAuB;UACrB;QACF;QACA,mBAAmB;UACjB;QACF;QACA,mBAAmB;UACjB;QACF;QACA,8BAA8B;UAC5B;QACF;QACA,0CAA0C;UACxC;QACF;QACA,sBAAsB,CAAC,wCAAwC;QAC/D,yCAAyC;UACvC;QACF;QACA,aAAa,CAAC,sCAAsC;QACpD,QAAQ,CAAC,mBAAmB;QAC5B,iBAAiB,CAAC,6CAA6C;QAC/D,sCAAsC;UACpC;QACF;QACA,iBAAiB,CAAC,kDAAkD;QACpE,mBAAmB,CAAC,yCAAyC;QAC7D,eAAe,CAAC,mCAAmC;QACnD,2BAA2B,CAAC,0CAA0C;MACxE;MACA,UAAU;QACR,mCAAmC;UACjC;QACF;QACA,qBAAqB;UACnB;QACF;QACA,sBAAsB;UACpB;QACF;QACA,0CAA0C;UACxC;QACF;QACA,4BAA4B;UAC1B;QACF;QACA,6BAA6B;UAC3B;QACF;QACA,8CAA8C;UAC5C;UACA,CAAC;UACD,EAAE,SAAS,CAAC,YAAY,2CAA2C,EAAE;QACvE;QACA,6DAA6D;UAC3D;UACA,CAAC;UACD;YACE,SAAS;cACP;cACA;YACF;UACF;QACF;QACA,yDAAyD;UACvD;QACF;QACA,2CAA2C;UACzC;QACF;QACA,4CAA4C;UAC1C;QACF;QACA,gCAAgC;UAC9B;QACF;QACA,2BAA2B;UACzB;QACF;QACA,mBAAmB;UACjB;QACF;QACA,uCAAuC;UACrC;QACF;QACA,kCAAkC;UAChC;QACF;QACA,0BAA0B;UACxB;QACF;QACA,4DAA4D;UAC1D;QACF;QACA,uDAAuD;UACrD;QACF;QACA,+CAA+C;UAC7C;QACF;QACA,kCAAkC,CAAC,oBAAoB;QACvD,6BAA6B,CAAC,0BAA0B;QACxD,qBAAqB,CAAC,gCAAgC;QACtD,oCAAoC;UAClC;QACF;QACA,sBAAsB;UACpB;QACF;QACA,uBAAuB;UACrB;QACF;QACA,2CAA2C;UACzC;QACF;QACA,6BAA6B;UAC3B;QACF;QACA,8BAA8B;UAC5B;QACF;MACF;MACA,mBAAmB;QACjB,0BAA0B,CAAC,qCAAqC;QAChE,0BAA0B;UACxB;QACF;QACA,uBAAuB,CAAC,kDAAkD;QAC1E,iBAAiB,CAAC,+CAA+C;QACjE,0BAA0B,CAAC,oCAAoC;QAC/D,0BAA0B;UACxB;QACF;MACF;MACA,UAAU;QACR,eAAe,CAAC,oDAAoD;QACpE,gBAAgB;UACd;QACF;QACA,kBAAkB;UAChB;QACF;QACA,mBAAmB;UACjB;QACF;QACA,gBAAgB;UACd;QACF;QACA,iBAAiB;UACf;QACF;QACA,WAAW,CAAC,6CAA6C;QACzD,YAAY,CAAC,mDAAmD;QAChE,YAAY,CAAC,6DAA6D;QAC1E,aAAa;UACX;QACF;QACA,kBAAkB,CAAC,oDAAoD;QACvE,mBAAmB;UACjB;QACF;QACA,YAAY,CAAC,4BAA4B;QACzC,aAAa,CAAC,kCAAkC;QAChD,iBAAiB,CAAC,mDAAmD;QACrE,kBAAkB;UAChB;QACF;QACA,kBAAkB;UAChB;QACF;QACA,mBAAmB;UACjB;QACF;MACF;MACA,OAAO;QACL,eAAe,CAAC,qDAAqD;QACrE,QAAQ,CAAC,kCAAkC;QAC3C,6BAA6B;UAC3B;QACF;QACA,cAAc,CAAC,wDAAwD;QACvE,qBAAqB;UACnB;QACF;QACA,qBAAqB;UACnB;QACF;QACA,qBAAqB;UACnB;QACF;QACA,eAAe;UACb;QACF;QACA,KAAK,CAAC,+CAA+C;QACrD,WAAW;UACT;QACF;QACA,kBAAkB,CAAC,uDAAuD;QAC1E,MAAM,CAAC,iCAAiC;QACxC,uBAAuB;UACrB;QACF;QACA,aAAa,CAAC,uDAAuD;QACrE,WAAW,CAAC,qDAAqD;QACjE,wBAAwB;UACtB;QACF;QACA,oBAAoB;UAClB;QACF;QACA,2BAA2B,CAAC,0CAA0C;QACtE,aAAa,CAAC,uDAAuD;QACrE,OAAO,CAAC,qDAAqD;QAC7D,0BAA0B;UACxB;QACF;QACA,kBAAkB;UAChB;QACF;QACA,cAAc;UACZ;QACF;QACA,QAAQ,CAAC,iDAAiD;QAC1D,cAAc;UACZ;QACF;QACA,cAAc;UACZ;QACF;QACA,qBAAqB;UACnB;QACF;MACF;MACA,WAAW,EAAE,KAAK,CAAC,iBAAiB,EAAE;MACtC,WAAW;QACT,wBAAwB;UACtB;QACF;QACA,gBAAgB;UACd;QACF;QACA,uBAAuB;UACrB;QACF;QACA,mCAAmC;UACjC;QACF;QACA,kBAAkB;UAChB;QACF;QACA,qCAAqC;UACnC;QACF;QACA,8BAA8B;UAC5B;QACF;QACA,wBAAwB;UACtB;QACF;QACA,gBAAgB;UACd;QACF;QACA,uBAAuB;UACrB;QACF;QACA,6BAA6B;UAC3B;QACF;QACA,kBAAkB;UAChB;QACF;QACA,yBAAyB;UACvB;QACF;QACA,gCAAgC;UAC9B;QACF;QACA,sBAAsB;UACpB;QACF;QACA,cAAc,CAAC,2DAA2D;QAC1E,qBAAqB;UACnB;QACF;QACA,iCAAiC;UAC/B;QACF;QACA,gBAAgB;UACd;QACF;QACA,mCAAmC;UACjC;QACF;QACA,4BAA4B;UAC1B;QACF;MACF;MACA,OAAO;QACL,kBAAkB;UAChB;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,sCAAsC,EAAE;QAC/D;QACA,sCAAsC;UACpC;QACF;QACA,0BAA0B;UACxB;UACA,CAAC;UACD,EAAE,WAAW,OAAO;QACtB;QACA,iBAAiB,CAAC,oDAAoD;QACtE,wBAAwB;UACtB;UACA,CAAC;UACD,EAAE,WAAW,WAAW;QAC1B;QACA,2BAA2B;UACzB;UACA,CAAC;UACD,EAAE,WAAW,QAAQ;QACvB;QACA,2BAA2B;UACzB;UACA,CAAC;UACD,EAAE,WAAW,QAAQ;QACvB;QACA,uBAAuB;UACrB;QACF;QACA,6BAA6B;UAC3B;QACF;QACA,mBAAmB,CAAC,oDAAoD;QACxE,wBAAwB,CAAC,8CAA8C;QACvE,oCAAoC;UAClC;QACF;QACA,0BAA0B;UACxB;QACF;QACA,kBAAkB,CAAC,6CAA6C;QAChE,gBAAgB,CAAC,mDAAmD;QACpE,4BAA4B;UAC1B;QACF;QACA,mBAAmB,CAAC,yCAAyC;QAC7D,gBAAgB,CAAC,sCAAsC;QACvD,qBAAqB;UACnB;QACF;QACA,iCAAiC;UAC/B;QACF;QACA,oBAAoB,CAAC,2CAA2C;QAChE,iBAAiB,CAAC,iCAAiC;QACnD,kBAAkB,CAAC,wCAAwC;QAC3D,8BAA8B;UAC5B;QACF;QACA,gCAAgC;UAC9B;QACF;QACA,wBAAwB;UACtB;QACF;QACA,qBAAqB,CAAC,uCAAuC;QAC7D,4BAA4B,CAAC,kBAAkB;QAC/C,YAAY,CAAC,kCAAkC;QAC/C,aAAa,CAAC,wBAAwB;QACtC,2BAA2B;UACzB;QACF;QACA,4BAA4B,CAAC,2CAA2C;QACxE,kBAAkB,CAAC,2BAA2B;QAC9C,uBAAuB,CAAC,8CAA8C;QACtE,iBAAiB,CAAC,kCAAkC;QACpD,eAAe,CAAC,qCAAqC;QACrD,mBAAmB,CAAC,qCAAqC;QACzD,qBAAqB;UACnB;QACF;QACA,eAAe,CAAC,kCAAkC;QAClD,wDAAwD;UACtD;QACF;QACA,6CAA6C;UAC3C;QACF;QACA,mBAAmB;UACjB;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,uCAAuC,EAAE;QAChE;QACA,uCAAuC;UACrC;QACF;QACA,QAAQ,CAAC,8BAA8B;QACvC,0BAA0B;UACxB;QACF;QACA,6BAA6B;UAC3B;QACF;QACA,qBAAqB;UACnB;QACF;QACA,gBAAgB,CAAC,sDAAsD;QACvE,wBAAwB;UACtB;QACF;QACA,qBAAqB,CAAC,oDAAoD;QAC1E,iCAAiC;UAC/B;QACF;QACA,iBAAiB,CAAC,4CAA4C;QAC9D,kBAAkB;UAChB;QACF;QACA,8BAA8B;UAC5B;QACF;QACA,YAAY,CAAC,8CAA8C;QAC3D,kBAAkB;UAChB;QACF;QACA,kBAAkB,CAAC,0CAA0C;QAC7D,iBAAiB,CAAC,oCAAoC;QACtD,mCAAmC;UACjC;QACF;QACA,eAAe,CAAC,oDAAoD;QACpE,oBAAoB;UAClB;QACF;QACA,mBAAmB,CAAC,oDAAoD;QACxE,eAAe,CAAC,8CAA8C;QAC9D,+BAA+B;UAC7B;QACF;QACA,iCAAiC;UAC/B;QACF;QACA,0BAA0B;UACxB;QACF;QACA,sCAAsC;UACpC;QACF;QACA,4BAA4B;UAC1B;QACF;QACA,iBAAiB;UACf;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,wBAAwB,EAAE;QACjD;QACA,wBAAwB,CAAC,yCAAyC;QAClE,wBAAwB,CAAC,yCAAyC;QAClE,8BAA8B;UAC5B;QACF;QACA,yBAAyB,CAAC,8CAA8C;QACxE,qCAAqC;UACnC;QACF;QACA,2BAA2B;UACzB;QACF;QACA,sBAAsB;UACpB;QACF;QACA,KAAK,CAAC,2BAA2B;QACjC,uBAAuB;UACrB;QACF;QACA,0BAA0B;UACxB;QACF;QACA,iCAAiC;UAC/B;QACF;QACA,oBAAoB,CAAC,wCAAwC;QAC7D,2BAA2B;UACzB;QACF;QACA,cAAc,CAAC,kCAAkC;QACjD,oCAAoC;UAClC;QACF;QACA,aAAa,CAAC,mDAAmD;QACjE,WAAW,CAAC,6CAA6C;QACzD,qBAAqB;UACnB;QACF;QACA,gBAAgB,CAAC,mDAAmD;QACpE,WAAW,CAAC,0CAA0C;QACtD,uBAAuB,CAAC,gDAAgD;QACxE,gCAAgC;UAC9B;QACF;QACA,yBAAyB,CAAC,gDAAgD;QAC1E,WAAW,CAAC,yCAAyC;QACrD,wBAAwB,CAAC,iDAAiD;QAC1E,kBAAkB,CAAC,iDAAiD;QACpE,8BAA8B;UAC5B;QACF;QACA,4BAA4B,CAAC,6CAA6C;QAC1E,YAAY,CAAC,2CAA2C;QACxD,sBAAsB,CAAC,8CAA8C;QACrE,mCAAmC;UACjC;QACF;QACA,cAAc,CAAC,yCAAyC;QACxD,eAAe,CAAC,uDAAuD;QACvE,2BAA2B;UACzB;QACF;QACA,qBAAqB;UACnB;QACF;QACA,gBAAgB;UACd;QACF;QACA,qBAAqB,CAAC,+CAA+C;QACrE,kBAAkB,CAAC,2CAA2C;QAC9D,iBAAiB,CAAC,sDAAsD;QACxE,kBAAkB,CAAC,sCAAsC;QACzD,eAAe,CAAC,uCAAuC;QACvD,gBAAgB,CAAC,0BAA0B;QAC3C,UAAU,CAAC,iCAAiC;QAC5C,eAAe,CAAC,mDAAmD;QACnE,oBAAoB;UAClB;QACF;QACA,qBAAqB,CAAC,wCAAwC;QAC9D,uBAAuB,CAAC,+CAA+C;QACvE,gCAAgC;UAC9B;QACF;QACA,mBAAmB,CAAC,4CAA4C;QAChE,WAAW,CAAC,kCAAkC;QAC9C,sBAAsB,CAAC,wCAAwC;QAC/D,YAAY,CAAC,iDAAiD;QAC9D,iBAAiB,CAAC,sDAAsD;QACxE,iBAAiB,CAAC,+CAA+C;QACjE,kBAAkB;UAChB;QACF;QACA,mBAAmB,CAAC,gDAAgD;QACpE,gBAAgB,CAAC,iDAAiD;QAClE,uBAAuB;UACrB;QACF;QACA,uBAAuB;UACrB;QACF;QACA,iBAAiB,CAAC,oCAAoC;QACtD,2BAA2B;UACzB;QACF;QACA,qCAAqC;UACnC;QACF;QACA,aAAa,CAAC,iDAAiD;QAC/D,iBAAiB,CAAC,qDAAqD;QACvE,qCAAqC;UACnC;QACF;QACA,UAAU,CAAC,yCAAyC;QACpD,YAAY,CAAC,2CAA2C;QACxD,yBAAyB;UACvB;QACF;QACA,oBAAoB;UAClB;QACF;QACA,gBAAgB,CAAC,oCAAoC;QACrD,kBAAkB;UAChB;QACF;QACA,eAAe,CAAC,qCAAqC;QACrD,cAAc,CAAC,oCAAoC;QACnD,2BAA2B;UACzB;QACF;QACA,mBAAmB,CAAC,yCAAyC;QAC7D,uBAAuB;UACrB;QACF;QACA,2BAA2B,CAAC,oCAAoC;QAChE,0BAA0B;UACxB;QACF;QACA,aAAa,CAAC,mCAAmC;QACjD,kBAAkB,CAAC,wCAAwC;QAC3D,sCAAsC;UACpC;QACF;QACA,gBAAgB,CAAC,gCAAgC;QACjD,8BAA8B;UAC5B;QACF;QACA,wBAAwB;UACtB;QACF;QACA,iBAAiB,CAAC,uCAAuC;QACzD,0BAA0B,CAAC,iBAAiB;QAC5C,YAAY,CAAC,uBAAuB;QACpC,aAAa,CAAC,6BAA6B;QAC3C,WAAW,CAAC,iCAAiC;QAC7C,iBAAiB,CAAC,uCAAuC;QACzD,qCAAqC,CAAC,kCAAkC;QACxE,eAAe,CAAC,qCAAqC;QACrD,iBAAiB,CAAC,wCAAwC;QAC1D,YAAY,CAAC,mBAAmB;QAChC,sCAAsC;UACpC;QACF;QACA,mBAAmB;UACjB;QACF;QACA,cAAc,CAAC,oCAAoC;QACnD,UAAU,CAAC,gCAAgC;QAC3C,WAAW,CAAC,iCAAiC;QAC7C,uBAAuB;UACrB;QACF;QACA,cAAc,CAAC,iCAAiC;QAChD,OAAO,CAAC,mCAAmC;QAC3C,eAAe,CAAC,2CAA2C;QAC3D,aAAa,CAAC,kDAAkD;QAChE,0BAA0B;UACxB;QACF;QACA,6BAA6B;UAC3B;UACA,CAAC;UACD,EAAE,WAAW,OAAO;QACtB;QACA,oBAAoB;UAClB;QACF;QACA,2BAA2B;UACzB;UACA,CAAC;UACD,EAAE,WAAW,WAAW;QAC1B;QACA,6BAA6B;UAC3B;QACF;QACA,8BAA8B;UAC5B;UACA,CAAC;UACD,EAAE,WAAW,QAAQ;QACvB;QACA,8BAA8B;UAC5B;UACA,CAAC;UACD,EAAE,WAAW,QAAQ;QACvB;QACA,cAAc,CAAC,qDAAqD;QACpE,kBAAkB,CAAC,kCAAkC;QACrD,mBAAmB,CAAC,yCAAyC;QAC7D,0BAA0B;UACxB;QACF;QACA,0BAA0B;UACxB;UACA,CAAC;UACD,EAAE,WAAW,OAAO;QACtB;QACA,wBAAwB;UACtB;UACA,CAAC;UACD,EAAE,WAAW,WAAW;QAC1B;QACA,2BAA2B;UACzB;UACA,CAAC;UACD,EAAE,WAAW,QAAQ;QACvB;QACA,2BAA2B;UACzB;UACA,CAAC;UACD,EAAE,WAAW,QAAQ;QACvB;QACA,iBAAiB,CAAC,kDAAkD;QACpE,UAAU,CAAC,qCAAqC;QAChD,QAAQ,CAAC,6BAA6B;QACtC,wBAAwB;UACtB;QACF;QACA,qBAAqB,CAAC,mDAAmD;QACzE,8BAA8B;UAC5B;QACF;QACA,iCAAiC,CAAC,iCAAiC;QACnE,kBAAkB;UAChB;QACF;QACA,kBAAkB,CAAC,uCAAuC;QAC1D,mCAAmC;UACjC;QACF;QACA,eAAe,CAAC,mDAAmD;QACnE,oBAAoB;UAClB;QACF;QACA,mBAAmB,CAAC,iDAAiD;QACrE,4BAA4B;UAC1B;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,6BAA6B,EAAE;QACtD;QACA,6BAA6B;UAC3B;QACF;QACA,eAAe,CAAC,6CAA6C;QAC7D,4BAA4B;UAC1B;QACF;QACA,oBAAoB;UAClB;UACA,EAAE,SAAS,6BAA6B;QAC1C;MACF;MACA,QAAQ;QACN,MAAM,CAAC,kBAAkB;QACzB,SAAS,CAAC,qBAAqB;QAC/B,uBAAuB,CAAC,oBAAoB;QAC5C,QAAQ,CAAC,oBAAoB;QAC7B,OAAO,CAAC,0BAA0B;QAClC,QAAQ,CAAC,oBAAoB;QAC7B,OAAO,CAAC,mBAAmB;MAC7B;MACA,gBAAgB;QACd,4BAA4B;UAC1B;QACF;QACA,UAAU;UACR;QACF;QACA,gBAAgB,CAAC,wDAAwD;QACzE,kBAAkB,CAAC,wCAAwC;QAC3D,mBAAmB,CAAC,kDAAkD;QACtE,uBAAuB;UACrB;QACF;QACA,uBAAuB;UACrB;QACF;QACA,aAAa;UACX;QACF;QACA,yBAAyB;UACvB;QACF;MACF;MACA,oBAAoB;QAClB,YAAY;UACV;QACF;QACA,kCAAkC;UAChC;QACF;QACA,0BAA0B;UACxB;QACF;QACA,oCAAoC;UAClC;QACF;QACA,mBAAmB,CAAC,2BAA2B;QAC/C,uBAAuB;UACrB;QACF;QACA,sBAAsB,CAAC,iBAAiB;QACxC,6BAA6B,CAAC,qCAAqC;QACnE,0BAA0B,CAAC,+CAA+C;QAC1E,0BAA0B;UACxB;QACF;MACF;MACA,OAAO;QACL,mCAAmC;UACjC;QACF;QACA,iCAAiC;UAC/B;QACF;QACA,8BAA8B;UAC5B;QACF;QACA,QAAQ,CAAC,wBAAwB;QACjC,8BAA8B;UAC5B;QACF;QACA,uBAAuB,CAAC,gDAAgD;QACxE,8BAA8B;UAC5B;QACF;QACA,uBAAuB;UACrB;QACF;QACA,aAAa,CAAC,sCAAsC;QACpD,WAAW,CAAC,mCAAmC;QAC/C,2BAA2B;UACzB;QACF;QACA,oBAAoB;UAClB;QACF;QACA,2BAA2B;UACzB;QACF;QACA,MAAM,CAAC,uBAAuB;QAC9B,gBAAgB,CAAC,yCAAyC;QAC1D,6BAA6B;UAC3B;QACF;QACA,sBAAsB,CAAC,+CAA+C;QACtE,0BAA0B,CAAC,iBAAiB;QAC5C,kBAAkB,CAAC,2CAA2C;QAC9D,6BAA6B;UAC3B;QACF;QACA,gBAAgB,CAAC,yCAAyC;QAC1D,8BAA8B;UAC5B;QACF;QACA,iBAAiB;UACf;QACF;QACA,8BAA8B;UAC5B;QACF;QACA,uBAAuB;UACrB;QACF;QACA,aAAa,CAAC,qCAAqC;MACrD;MACA,OAAO;QACL,0BAA0B;UACxB;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,8BAA8B,EAAE;QACvD;QACA,8BAA8B,CAAC,mBAAmB;QAClD,sCAAsC,CAAC,4BAA4B;QACnE,OAAO,CAAC,6BAA6B;QACrC,cAAc,CAAC,6BAA6B;QAC5C,uBAAuB,CAAC,+CAA+C;QACvE,sCAAsC,CAAC,gCAAgC;QACvE,8BAA8B;UAC5B;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,kCAAkC,EAAE;QAC3D;QACA,kCAAkC,CAAC,qBAAqB;QACxD,oCAAoC;UAClC;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,wCAAwC,EAAE;QACjE;QACA,wCAAwC,CAAC,iBAAiB;QAC1D,yCAAyC,CAAC,6BAA6B;QACvE,wBAAwB;UACtB;QACF;QACA,wBAAwB;UACtB;QACF;QACA,mCAAmC;UACjC;QACF;QACA,6BAA6B;UAC3B;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,iCAAiC,EAAE;QAC1D;QACA,iCAAiC,CAAC,qBAAqB;QACvD,8BAA8B;UAC5B;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,kCAAkC,EAAE;QAC3D;QACA,kCAAkC,CAAC,oCAAoC;QACvE,oCAAoC;UAClC;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,wCAAwC,EAAE;QACjE;QACA,wCAAwC,CAAC,4BAA4B;QACrE,yCAAyC,CAAC,8BAA8B;QACxE,yCAAyC;UACvC;QACF;QACA,QAAQ,CAAC,gCAAgC;QACzC,kBAAkB,CAAC,WAAW;QAC9B,SAAS,CAAC,wBAAwB;QAClC,eAAe,CAAC,uBAAuB;QACvC,mBAAmB,CAAC,iCAAiC;QACrD,2BAA2B;UACzB;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,+BAA+B,EAAE;QACxD;QACA,+BAA+B,CAAC,iCAAiC;QACjE,iCAAiC;UAC/B;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,qCAAqC,EAAE;QAC9D;QACA,qCAAqC,CAAC,yBAAyB;QAC/D,sCAAsC;UACpC;QACF;QACA,MAAM,CAAC,YAAY;QACnB,kBAAkB,CAAC,qDAAqD;QACxE,sBAAsB;UACpB;QACF;QACA,4BAA4B;UAC1B;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,gCAAgC,EAAE;QACzD;QACA,gCAAgC,CAAC,kBAAkB;QACnD,4BAA4B;UAC1B;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,gCAAgC,EAAE;QACzD;QACA,gCAAgC,CAAC,kBAAkB;QACnD,6BAA6B;UAC3B;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,iCAAiC,EAAE;QAC1D;QACA,iCAAiC,CAAC,qBAAqB;QACvD,mCAAmC,CAAC,qBAAqB;QACzD,sBAAsB,CAAC,iCAAiC;QACxD,sBAAsB,CAAC,iCAAiC;QACxD,6BAA6B;UAC3B;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,iCAAiC,EAAE;QAC1D;QACA,iCAAiC,CAAC,oBAAoB;QACtD,oBAAoB,CAAC,gCAAgC;QACrD,kCAAkC;UAChC;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,sCAAsC,EAAE;QAC/D;QACA,sCAAsC,CAAC,yBAAyB;QAChE,uBAAuB,CAAC,4BAA4B;QACpD,mCAAmC;UACjC;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,uCAAuC,EAAE;QAChE;QACA,uCAAuC,CAAC,gBAAgB;QACxD,wCAAwC,CAAC,2BAA2B;QACpE,2BAA2B,CAAC,uCAAuC;QACnE,wCAAwC,CAAC,4BAA4B;QACrE,2BAA2B,CAAC,wCAAwC;QACpE,2CAA2C;UACzC;UACA,CAAC;UACD,EAAE,SAAS,CAAC,SAAS,+CAA+C,EAAE;QACxE;QACA,+CAA+C;UAC7C;QACF;QACA,SAAS,CAAC,gCAAgC;QAC1C,UAAU,CAAC,mCAAmC;QAC9C,qBAAqB,CAAC,aAAa;MACrC;IACF;AAEA,IAAO,oBAAQ;;;;;AC3oER,SAAS,mBAAmB,SAAuC;AACxE,QAAM,aAAa,CAAC;AAEpB,aAAW,SAAS,mBAAmB,KAAK,GAAG;AAC7C,eAAW,KAAK,IAAI,IAAI,MAAM,EAAE,SAAS,OAAO,OAAO,CAAC,EAAE,GAAG,OAAO;EACtE;AAEA,SAAO;AACT;AAEA,SAAS,SACP,SACA,OACA,YACAE,WACA,aACA;AACA,QAAM,sBAAsB,QAAQ,QAAQ,SAASA,SAAQ;AAG7D,WAAS,mBACJ,MACH;AAEA,QAAI,UAAU,oBAAoB,SAAS,MAAM,GAAG,IAAI;AAGxD,QAAI,YAAY,WAAW;AACzB,gBAAU,OAAO,OAAO,CAAC,GAAG,SAAS;QACnC,MAAM,QAAQ,YAAY,SAAS;QACnC,CAAC,YAAY,SAAS,GAAG;MAC3B,CAAC;AACD,aAAO,oBAAoB,OAAO;IACpC;AAEA,QAAI,YAAY,SAAS;AACvB,YAAM,CAAC,UAAU,aAAa,IAAI,YAAY;AAC9C,cAAQ,IAAI;QACV,WAAW,KAAK,IAAI,UAAU,kCAAkC,QAAQ,IAAI,aAAa;MAC3F;IACF;AACA,QAAI,YAAY,YAAY;AAC1B,cAAQ,IAAI,KAAK,YAAY,UAAU;IACzC;AAEA,QAAI,YAAY,mBAAmB;AAEjC,YAAMC,WAAU,oBAAoB,SAAS,MAAM,GAAG,IAAI;AAE1D,iBAAW,CAAC,MAAM,KAAK,KAAK,OAAO;QACjC,YAAY;MACd,GAAG;AACD,YAAI,QAAQA,UAAS;AACnB,kBAAQ,IAAI;YACV,IAAI,IAAI,0CAA0C,KAAK,IAAI,UAAU,aAAa,KAAK;UACzF;AACA,cAAI,EAAE,SAASA,WAAU;AACvBA,qBAAQ,KAAK,IAAIA,SAAQ,IAAI;UAC/B;AACA,iBAAOA,SAAQ,IAAI;QACrB;MACF;AACA,aAAO,oBAAoBA,QAAO;IACpC;AAGA,WAAO,oBAAoB,GAAG,IAAI;EACpC;AACA,SAAO,OAAO,OAAO,iBAAiB,mBAAmB;AAC3D;AA9KA,IAeM,oBAgCA;AA/CN;;;AAeA,IAAM,qBAAqB,oBAAI,IAAI;AACnC,eAAW,CAAC,OAAO,SAAS,KAAK,OAAO,QAAQ,iBAAS,GAAG;AAC1D,iBAAW,CAAC,YAAYC,SAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC9D,cAAM,CAAC,OAAOF,WAAU,WAAW,IAAIE;AACvC,cAAM,CAAC,QAAQC,IAAG,IAAI,MAAM,MAAM,GAAG;AACrC,cAAM,mBAAmB,OAAO;UAC9B;YACE;YACA,KAAAA;UACF;UACAH;QACF;AAEA,YAAI,CAAC,mBAAmB,IAAI,KAAK,GAAG;AAClC,6BAAmB,IAAI,OAAO,oBAAI,IAAI,CAAC;QACzC;AAEA,2BAAmB,IAAI,KAAK,EAAE,IAAI,YAAY;UAC5C;UACA;UACA;UACA;QACF,CAAC;MACH;IACF;AAQA,IAAM,UAAU;MACd,IAAI,EAAE,MAAM,GAAgB,YAAoB;AAC9C,eAAO,mBAAmB,IAAI,KAAK,EAAE,IAAI,UAAU;MACrD;MACA,yBAAyB,QAAqB,YAAoB;AAChE,eAAO;UACL,OAAO,KAAK,IAAI,QAAQ,UAAU;;UAClC,cAAc;UACd,UAAU;UACV,YAAY;QACd;MACF;MACA,eACE,QACA,YACA,YACA;AACA,eAAO,eAAe,OAAO,OAAO,YAAY,UAAU;AAC1D,eAAO;MACT;MACA,eAAe,QAAqB,YAAoB;AACtD,eAAO,OAAO,MAAM,UAAU;AAC9B,eAAO;MACT;MACA,QAAQ,EAAE,MAAM,GAAgB;AAC9B,eAAO,CAAC,GAAG,mBAAmB,IAAI,KAAK,EAAE,KAAK,CAAC;MACjD;MACA,IAAI,QAAqB,YAAoB,OAAY;AACvD,eAAQ,OAAO,MAAM,UAAU,IAAI;MACrC;MACA,IAAI,EAAE,SAAS,OAAO,MAAM,GAAgB,YAAoB;AAC9D,YAAI,MAAM,UAAU,GAAG;AACrB,iBAAO,MAAM,UAAU;QACzB;AAEA,cAAM,SAAS,mBAAmB,IAAI,KAAK,EAAE,IAAI,UAAU;AAC3D,YAAI,CAAC,QAAQ;AACX,iBAAO;QACT;AAEA,cAAM,EAAE,kBAAkB,YAAY,IAAI;AAE1C,YAAI,aAAa;AACf,gBAAM,UAAU,IAAI;YAClB;YACA;YACA;YACA;YACA;UACF;QACF,OAAO;AACL,gBAAM,UAAU,IAAI,QAAQ,QAAQ,SAAS,gBAAgB;QAC/D;AAEA,eAAO,MAAM,UAAU;MACzB;IACF;;;;;AC9FO,SAAS,oBAAoB,SAAuB;AACzD,QAAM,MAAM,mBAAmB,OAAO;AACtC,SAAO;IACL,MAAM;EACR;AACF;AAGO,SAAS,0BAA0B,SAAqC;AAC7E,QAAM,MAAM,mBAAmB,OAAO;AACtC,SAAO;IACL,GAAG;IACH,MAAM;EACR;AACF;AAtBA,IAAAI,iBAAA;;IAAAC;AAEA;AAYA,wBAAoB,UAAUC;AAS9B,8BAA0B,UAAUA;;;;;AC1BpC,IAAMC;AAAN,IAAAC,gBAAA;AAAA;AAAA,IAAMD,YAAU;AAAA;AAAA;;;ACAhB,IAOME;AAPN,IAAAC,iBAAA;AAAA;AAAA,IAAAA;AACA,IAAAA;AACA,IAAAC;AAGA,IAAAD;AACA,IAAAE;AACA,IAAMH,WAAU,QAAK,OAAO,YAAY,2BAA2B,YAAY,EAAE;AAAA,MAC/E;AAAA,QACE,WAAW,mBAAmBI,SAAO;AAAA,MACvC;AAAA,IACF;AAAA;AAAA;;;ACXA,IAiBqB;AAjBrB;AAAA;AAAA;AAKA,IAAAC;AAKA;AACA;AACA;AAKA,IAAqB,gBAArB,MAAmC;AAAA,MACzB;AAAA,MACA,qBAA8B;AAAA,MAE9B;AAAA,MACA;AAAA,MAER,IAAW,QAAQ;AACjB,YAAI,KAAK,mBAAmB,QAAW;AACrC,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,eAAe;AAAA,MAC7B;AAAA,MAEA,IAAW,oBAAoB;AAC7B,YAAI,KAAK,kBAAkB,QAAW;AACpC,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,cAAc;AAAA,MAC5B;AAAA,MAEA,IAAW,UAAU;AACnB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,cAAc;AACZ,aAAK,WAAW,IAAIC,SAAQ;AAAA,UAC1B,WAAW,UAAU,OAAO,MAAM,UAAU;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,wBAAwB;AAC5B,YAAI,KAAK,oBAAoB;AAC3B;AAAA,QACF;AAEA,cAAM,eAAe,MAAM,KAAK,SAAS,KAAK,MAAM,iBAAiB;AACrE,aAAK,gBAAgB;AAErB,cAAM,WAAW,MAAM,KAAK,SAAS,KAAK,MAAM,yBAAyB;AACzE,aAAK,iBAAiB;AAEtB,aAAK,qBAAqB;AAAA,MAC5B;AAAA,MAEA,MAAM,WAAW,MAAc,aAAqB;AAClD,cAAM,SAAS,MAAM,KAAK,SAAS,MAAM,2BAA2B;AAAA,UAClE;AAAA,UACA;AAAA,UACA,WAAW;AAAA,QACb,CAAC;AAED,eAAO,OAAO;AAAA,MAChB;AAAA,MAEA,MAAM,aACJ,OACA,MACA,SAAiB,QACjB,aAAqB,IACrB,eACA,aACA;AAEA,cAAM,gBAAgB,MAAM,KAAK,iBAAiB,OAAO,MAAM,MAAM;AAErE,cAAM,aAAsC,CAAC;AAC7C,cAAM,gBAA0B,CAAC;AAEjC,iBAAS,IAAI,GAAG,IAAI,YAAY,gBAAgB,QAAQ,KAAK;AAC3D,gBAAM,OAAO,YAAY,gBAAgB,CAAC;AAE1C,eACG,KAAK,sCAAiD,KAAK,+BAC5D,KAAK,YAAY,QACjB;AACA,kBAAM,cAAc,KAAK;AAEzB,gBAAI,CAAC,YAAY,iBAAiB;AAChC,oBAAM,YAAY,YAAY;AAAA,YAChC;AAEA,gBAAI,YAAY,YAAY,MAAM;AAChC,kBAAI,aAAa,KAAK;AAEtB,2BAAa,aAAa;AAE1B,kBAAI,WAAW,WAAW,GAAG,GAAG;AAC9B,6BAAa,WAAW,UAAU,GAAG,WAAW,MAAM;AAAA,cACxD;AAEA,oBAAM,OAAO,MAAM,KAAK,kBAAkB,OAAO,MAAM,YAAY,OAAO;AAE1E,yBAAW,KAAK,IAAI;AACpB,4BAAc,KAAK,UAAU;AAAA,YAC/B;AAAA,UACF;AAAA,QACF;AAEA,cAAM,UAAU,MAAM,KAAK,cAAc,OAAO,MAAM,YAAY,eAAe,cAAc,OAAO;AAEtG,cAAM,YAAY,MAAM,KAAK,gBAAgB,OAAO,MAAM,eAAe,QAAQ,KAAK,cAAc,SAAS;AAE7G,aAAK,kBAAkB,OAAO,MAAM,QAAQ,UAAU,GAAG;AAAA,MAC3D;AAAA,MAEA,MAAM,kBAAkB,OAAe,MAAc,SAA8B;AACjF,YAAI,WAAW;AAEf,YAAI,mBAAmB,YAAY;AACjC,oBAAU,UAAU,mBAAmB,OAAO;AAC9C,qBAAW;AAAA,QACb;AAEA,cAAM,WAAW,MAAM,KAAK,SAAS,IAAI,WAAW;AAAA,UAClD;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAED,eAAO,SAAS;AAAA,MAClB;AAAA,MAEA,MAAM,iBAAiB,OAAe,MAAc,SAAiB,QAAQ;AAC3E,cAAM,EAAE,MAAM,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO;AAAA,UACvD;AAAA,UACA;AAAA,UACA,KAAK,WAAW;AAAA,QAClB,CAAC;AAED,cAAM,YAAY,QAAQ,OAAO;AAEjC,cAAM,EAAE,MAAM,WAAW,IAAI,MAAM,KAAK,SAAS,IAAI,UAAU;AAAA,UAC7D;AAAA,UACA;AAAA,UACA,YAAY;AAAA,QACd,CAAC;AAED,eAAO;AAAA,UACL;AAAA,UACA,SAAS,WAAW,KAAK;AAAA,QAC3B;AAAA,MACF;AAAA,MAEA,MAAM,cACJ,OACA,MACA,OACA,OACA,eACA;AAEA,cAAM,OAAO,MAAM,IAAI,CAAC,EAAE,IAAI,GAAG,WAAW;AAAA,UAC1C,MAAM,MAAM,KAAK;AAAA,UACjB,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,QACF,EAAE;AAEF,cAAM,EAAE,KAAK,IAAI,MAAM,KAAK,SAAS,IAAI,WAAW;AAAA,UAClD;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,QACb,CAAC;AAED,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,gBACJ,OACA,MACA,SACA,gBACA,kBACA;AACA,cAAM,SAAS,MAAM,KAAK,SAAS,IAAI,aAAa;AAAA,UAClD;AAAA,UACA;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN,SAAS,CAAC,gBAAgB;AAAA,QAC5B,CAAC;AAED,eAAO,OAAO;AAAA,MAChB;AAAA,MAEA,kBAAkB,OAAe,MAAc,SAAiB,QAAQ,WAAmB;AACzF,aAAK,SAAS,IAAI,UAAU;AAAA,UAC1B;AAAA,UACA;AAAA,UACA,KAAK,SAAS,MAAM;AAAA,UACpB,KAAK;AAAA,QACP,CAAC;AAAA,MACH;AAAA,IACF;AAAA;AAAA;;;ACvNA,IAsBqB;AAtBrB;AAAA;AAAA;AAGA;AAmBA,IAAqB,kBAArB,MAAqC;AAAA,MACnC;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA,IAAW,QAAQ;AACjB,YAAI,KAAK,UAAU,sBAAkC,KAAK,SAAS,QAAW;AAC5E,cAAI,SAAS,KAAK,KAAK,SAAS;AAEhC,cAAI,KAAK,oBAAoB,oBAA2B;AACtD,qBAAS,MAAM;AAAA,UACjB,WAAW,KAAK,oBAAoB,uBAA8B;AAChE,qBAAS,MAAM;AAAA,UACjB;AAEA,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,WAAW;AACpB,YAAI,KAAK,SAAS,QAAW;AAC3B,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,SAAS,OAAe;AACjC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,IAAW,iBAAiB;AAC1B,YAAI,KAAK,oBAAoB,QAAW;AACtC,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,eAAe,MAAsB;AAC9C,aAAK,kBAAkB;AAAA,MACzB;AAAA,MAEA,IAAW,OAAO;AAChB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,WAAW;AACpB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,SAAS,aAA6C;AAC/D,aAAK,YAAY;AAAA,MACnB;AAAA,MAEO,YAAY,SAAiB;AAClC,aAAK,WAAW;AAChB,aAAK,QAAQ;AAEb,aAAK,SAAS,OAAO;AAAA,MACvB;AAAA,MAEQ,SAAS,SAAiB;AAChC,aAAK,WAAW;AAEhB,cAAM,kBAAkB,KAAK,SAAS,WAAW,GAAG;AACpD,cAAM,kBAAkB,KAAK,SAAS,WAAW,GAAG;AAEpD,YAAI,mBAAmB,iBAAiB;AACtC,gBAAM,SAAS,KAAK,SAAS,UAAU,GAAG,KAAK,SAAS,MAAM;AAE9D,cAAI,UAAU,UAAU,MAAM,GAAG;AAC/B,iBAAK,QAAQ;AAEb,gBAAI,iBAAiB;AACnB,mBAAK,kBAAkB;AAAA,YACzB,WAAW,iBAAiB;AAC1B,mBAAK,kBAAkB;AAAA,YACzB;AAEA,iBAAK,OAAO,SAAS,MAAM;AAAA,UAC7B,OAAO;AACL,iBAAK,QAAQ;AAAA,UACf;AAAA,QACF,WAAW,UAAU,UAAU,KAAK,QAAQ,GAAG;AAC7C,eAAK,QAAQ;AACb,eAAK,kBAAkB;AACvB,eAAK,OAAO,SAAS,OAAO;AAAA,QAC9B,OAAO;AACL,eAAK,QAAQ;AAAA,QACf;AAAA,MACF;AAAA,MAEO,WAAW;AAChB,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA;AAAA;;;AC3HA,IAKqB;AALrB;AAAA;AAAA;AAGA;AAEA,IAAqB,UAArB,MAA6B;AAAA,MAC3B;AAAA,MACA;AAAA,MAEA,YAAY,aAAqB;AAC/B,cAAM,aAAa,YAAY,QAAQ,GAAG;AAE1C,aAAK,aAAa,CAAC;AAEnB,YAAI,iBAAiB;AAErB,YAAI,aAAa,GAAG;AAClB,eAAK,eAAe;AAAA,QACtB,OAAO;AACL,eAAK,eAAe,YAAY,UAAU,GAAG,UAAU;AAEvD,gBAAM,OAAO,YAAY,UAAU,aAAa,GAAG,YAAY,MAAM,EAAE,MAAM,GAAG;AAEhF,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,kBAAM,SAAS,IAAI,gBAAgB,KAAK,CAAC,CAAC;AAE1C,gBAAI,OAAO,6BAAyC;AAClD;AAEA,kBAAI,kBAAkB,GAAG;AACvB,iCAAiB;AAAA,cACnB;AAEA,kBAAI,mBAAmB,GAAG;AACxB,uBAAO;AAAA,cACT,WAAW,mBAAmB,GAAG;AAC/B,uBAAO;AAAA,cACT,WAAW,mBAAmB,GAAG;AAC/B,uBAAO;AAAA,cACT;AAAA,YACF,OAAO;AACL,+BAAiB;AAAA,YACnB;AAEA,iBAAK,WAAW,KAAK,MAAM;AAAA,UAC7B;AAAA,QACF;AAEA,YAAI,KAAK,aAAa,WAAW,GAAG,GAAG;AACrC,eAAK,eAAe,KAAK,aAAa,UAAU,GAAG,KAAK,aAAa,MAAM;AAAA,QAC7E;AAAA,MACF;AAAA,MAEA,sBAAsB,WAAmB,WAAmB,WAAmB;AAC7E,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;AAC/C,gBAAM,MAAM,KAAK,WAAW,CAAC;AAE7B,cAAI,IAAI,6BAAyC;AAC/C,gBAAI,IAAI,0CAAiD;AACvD,kBAAI,IAAI,wBAAmC;AACzC,oBAAI;AACJ,oBAAI,WAAW,YAAY,IAAI;AAAA,cACjC,WAAW,IAAI,wBAAmC;AAChD,oBAAI;AACJ,oBAAI,WAAW,YAAY,IAAI;AAAA,cACjC,WAAW,IAAI,wBAAmC;AAChD,oBAAI;AACJ,oBAAI,WAAW,YAAY,IAAI;AAAA,cACjC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAI,gCAAgC;AAClC,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;AAC/C,gBAAM,MAAM,KAAK,WAAW,CAAC;AAE7B,cAAI,IAAI,+BAA2C,IAAI,qCAA4C;AACjG,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,IAAI,SAAS;AACX,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;AAC/C,gBAAM,MAAM,KAAK,WAAW,CAAC;AAE7B,cAAI,IAAI,+BAA2C,IAAI,wBAAmC;AACxF,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,IAAI,SAAS;AACX,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;AAC/C,gBAAM,MAAM,KAAK,WAAW,CAAC;AAE7B,cAAI,IAAI,+BAA2C,IAAI,wBAAmC;AACxF,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,IAAI,SAAS;AACX,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;AAC/C,gBAAM,MAAM,KAAK,WAAW,CAAC;AAE7B,cAAI,IAAI,+BAA2C,IAAI,wBAAmC;AACxF,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,WAAW;AACT,YAAI,gBAAgB,KAAK;AAEzB,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;AAC/C,2BAAiB;AAEjB,2BAAiB,KAAK,WAAW,CAAC,EAAE,SAAS;AAAA,QAC/C;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACrIA,IAUqB;AAVrB;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAGA,IAAqB,gBAArB,MAAqB,eAAc;AAAA,MACjC,aAAa,cAAc,cAA4B,eAAuB;AAC5E,YAAI,aAAa,0CAA6D;AAC5E,cAAI,MAAM,wBAAwB,gBAAgB,+BAA+B;AACjF;AAAA,QACF;AAEA,cAAM,eAAe,aAAa,cAAc,gBAAgB,CAAC;AACjE,YAAI,cAAc,gBAAgB;AAElC,YAAI,aAAa,SAAS,UAAa,aAAa,KAAK,SAAS,GAAG;AACnE,wBAAc,aAAa;AAAA,QAC7B;AAEA,cAAM,SAAS,MAAM,aAAa,uBAAuB,qBAAqB,WAAW;AAEzF,YAAI,aAAa,SAAS,QAAW;AACnC,gBAAM,eAAc,eAAe,cAAc,aAAa,IAAI;AAAA,QACpE,OAAO;AAAA,QAEP;AAEA,cAAM,aAAa,qBAAqB,QAAQ,aAAa,cAAc,YAAY;AAAA,MACzF;AAAA,MAEA,aAAa,eAAe,cAA4B,aAAqB;AAC3E,cAAM,eAAe,YAAY,MAAM,IAAI;AAE3C,cAAM,KAAK,eAAe,cAAc,YAAY;AAAA,MACtD;AAAA,MAEA,aAAa,eAAe,cAA4B,cAAwB;AAC9E,cAAM,cAAc,CAAC;AAErB,YAAI,mBAAmB;AACvB,YAAI,mBAAmB;AACvB,YAAI,mBAAmB;AAEvB,YAAI;AACJ,YAAI;AACJ,YAAI;AAEJ,YAAI,mBAAmB;AAEvB,iBAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,cAAI,cAAc,aAAa,CAAC,EAAE,KAAK;AAEvC,cAAI,YAAY,SAAS,KAAK,CAAC,YAAY,WAAW,GAAG,GAAG;AAC1D,gBAAI,CAAC,YAAY,WAAW,GAAG,GAAG;AAChC,4BAAc,MAAM;AAAA,YACtB;AAEA,kBAAM,eAAe,oBAAI,KAAK;AAE9B,kBAAM,UAAU,IAAI,QAAQ,WAAW;AAGvC,gBACE,QAAQ,iCACR,oBACA,mBAAmB,UACnB,mBAAmB,UACnB,mBAAmB,QACnB;AACA,sBAAQ;AAAA,gBACN,mBAAmB;AAAA,gBACnB,mBAAmB;AAAA,gBACnB,mBAAmB;AAAA,cACrB;AAAA,YACF;AAEA,0BAAc,QAAQ,SAAS;AAE/B,kBAAM,aAAa,mBAAmB,sBAAsB,cAAc,GAAG;AAE7E,kBAAM,gBAAgB,MAAM,aAAa,WAAW,WAAW;AAC/D,kBAAM,SAAS,eAAe;AAE9B,gBAAI;AAEJ,gBAAI,WAAW,UAAa,WAAW,QAAQ,OAAO,QAAQ,GAAG,KAAK,GAAG;AACvE,kBAAI;AACF,6BAAa,UAAU,UAAU,MAAM;AAAA,cACzC,SAAS,GAAG;AACV,oBAAI,MAAM,qCAAqC,CAAC;AAAA,cAClD;AAEA,kBAAI,eAAe,QAAW;AAE5B,oBAAI,WAAW,aAAa,UAAa,CAAC,kBAAkB;AAC1D,qCAAmB,WAAW,SAAS;AACvC,qCAAmB,WAAW,SAAS;AACvC,qCAAmB,WAAW,SAAS;AAEvC,wBAAM,OAAO,QAAQ;AACrB,sBAAI,SAAS,QAAW;AACtB,qCAAiB,KAAK;AAAA,kBACxB;AAEA,wBAAM,OAAO,QAAQ;AACrB,sBAAI,SAAS,QAAW;AACtB,qCAAiB,KAAK;AAAA,kBACxB;AAEA,wBAAM,OAAO,QAAQ;AACrB,sBAAI,SAAS,QAAW;AACtB,qCAAiB,KAAK;AAAA,kBACxB;AAEA,qCAAmB;AAAA,gBACrB;AAAA,cACF;AAAA,YACF;AAEA,kBAAM,aAAoC;AAAA,cACxC,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,UAAU;AAAA,YACZ;AAEA,wBAAY,KAAK,UAAU;AAAA,UAC7B;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACxIA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAMAC,qBAKqB;AAXrB;AAAA;AAAA;AAKA;AACA,IAAAA,sBAAgC;AAGhC;AAEA,IAAqB,mBAArB,MAAsC;AAAA,MACpC;AAAA,MACA,yBAAqC,CAAC;AAAA,MACtC,8BAAsC,CAAC;AAAA,MAEvC,iCAA6C,CAAC;AAAA,MAC9C,sCAA8C,CAAC;AAAA,MAE/C,8BAA0C,CAAC;AAAA,MAC3C,mCAA2C,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,+BAA+B;AAAA,MAC/B;AAAA,MAEA,cAA2C,CAAC;AAAA,MAEpC,qBAAqB,IAAI,oCAAyD;AAAA,MAClF,oBAAoB,IAAI,oCAAwD;AAAA,MAChF,iBAAiB,IAAI,oCAAqD;AAAA,MAC1E,0BAA0B,IAAI,oCAAyD;AAAA,MAE/F,IAAW,6BAA6B;AACtC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,wBAAwB;AACjC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,wBAAwB;AACjC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,iBAAiB;AAC1B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,oBAAoB;AAC7B,eAAO,KAAK,mBAAmB,QAAQ;AAAA,MACzC;AAAA,MAEA,IAAW,yBAAyB;AAClC,eAAO,KAAK,wBAAwB,QAAQ;AAAA,MAC9C;AAAA,MAEA,IAAW,mBAAmB;AAC5B,eAAO,KAAK,kBAAkB,QAAQ;AAAA,MACxC;AAAA,MAEA,IAAW,gBAAgB;AACzB,eAAO,KAAK,eAAe,QAAQ;AAAA,MACrC;AAAA,MAEA,YAAY,cAA4B;AACtC,aAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AAGjC,YAAI,OAAO,WAAW,aAAa;AAEjC,iBAAO,YAAY,KAAK,OAAO,EAAE;AAAA,QACnC;AAAA,MACF;AAAA,MAEA,QAAQ;AACN,cAAM,WAAW,KAAK;AAGtB,YAAI,KAAK,iCAAiC,YAAY,KAAK,6BAA6B;AACtF,eAAK,+BAA+B;AAEpC,gBAAM,WAAW,KAAK,uBAAuB,KAAK,uBAAuB,SAAS,CAAC;AACnF,gBAAMC,QAAO,KAAK,iCAAiC,KAAK,iCAAiC,SAAS,CAAC;AAEnG,eAAK,4BAA4B,KAAK,QAAQ;AAC9C,eAAK,iCAAiC,KAAKA,KAAI;AAE/C,eAAK,wBAAwB,SAAS,MAAM,KAAK,2BAA2B;AAAA,QAC9E;AAAA,MACF;AAAA,MAEA,YAAY,SAAc;AACxB,YAAI,CAAC,QAAQ,QAAQ;AACnB;AAAA,QACF;AAEA,cAAM,UAAU,QAAQ;AAExB,YAAI,SAAS;AACX,cAAI,KAAK,YAAY,OAAO,MAAM,MAAM;AACtC;AAAA,UACF;AAEA,eAAK,YAAY,OAAO,IAAI;AAAA,QAC9B;AAEA,cAAM,YAAY,QAAQ,OAAO;AAEjC,YAAI,CAAC,WAAW;AACd;AAAA,QACF;AAEA,gBAAQ,WAAW;AAAA,UACjB,KAAK;AACH,kBAAM,qBAAqB;AAE3B,iBAAK,eAAe,SAAS,MAAM,kBAAkB;AACrD;AAAA,UACF,KAAK;AACH,kBAAM,wBAAwB;AAE9B,kBAAM,sBAAsB,oBAAI,KAAK;AACrC,gBAAI,yBAAyB,IAAI,SAAS,GAAG,GAAG,CAAC;AAEjD,gBAAI,KAAK,6BAA6B;AACpC,uCAAyB,IAAI;AAAA,gBAC3B,KAAK,4BAA4B,KAAK,OAAO,SAAS;AAAA,gBACtD,KAAK,4BAA4B,KAAK,OAAO,SAAS;AAAA,gBACtD,KAAK,4BAA4B,KAAK,OAAO,SAAS;AAAA,cACxD;AAAA,YACF;AAEA,iBAAK,+BAA+B,KAAK,sBAAsB;AAC/D,iBAAK,oCAAoC,KAAK,mBAAmB;AAEjE,iBAAK,kBAAkB,SAAS,MAAM,qBAAqB;AAC3D,gBAAI,QAAQ,qBAAqB;AAEjC;AAAA,UACF,KAAK;AACH,kBAAM,gBAAgB;AAEtB,kBAAM,WAAW,IAAI;AAAA,cACnB,cAAc,KAAK,OAAO,SAAS;AAAA,cACnC,cAAc,KAAK,OAAO,SAAS;AAAA,cACnC,cAAc,KAAK,OAAO,SAAS;AAAA,YACrC;AAEA,kBAAM,YAAY,oBAAI,KAAK;AAC3B,iBAAK,8BAA8B;AAEnC,iBAAK,uBAAuB,KAAK,QAAQ;AACzC,iBAAK,4BAA4B,KAAK,SAAS;AAE/C,iBAAK,kBAAkB;AAEvB,iBAAK,mBAAmB,SAAS,MAAM,aAAa;AAEpD,gBAAI,0BAA0B;AAE9B,gBAAI,KAAK,4BAA4B,WAAW,GAAG;AACjD,wCAA0B;AAAA,YAC5B,OAAO;AACL,oBAAM,oBAAoB,KAAK,4BAA4B,KAAK,4BAA4B,SAAS,CAAC;AAEtG,kBAAI,SAAS,WAAW,iBAAiB,IAAI,GAAG;AAC9C,0CAA0B;AAAA,cAC5B;AAAA,YACF;AAEA,gBAAI,yBAAyB;AAC3B,mBAAK,4BAA4B,KAAK,QAAQ;AAC9C,mBAAK,iCAAiC,KAAK,SAAS;AAEpD,mBAAK,wBAAwB,SAAS,MAAM,aAAa;AAAA,YAC3D,OAAO;AAEL,mBAAK,+BAA+B,KAAK,UAAU;AAAA,YACrD;AAEA;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACvLA,IAYAC,qBAuCqB;AAnDrB;AAAA;AAAA;AAGA;AACA;AAMA;AACA,IAAAC;AACA,IAAAD,sBAAgC;AAChC;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AA0BA,IAAqB,kBAArB,MAA2D;AAAA,MACjD;AAAA,MACD;AAAA,MACC;AAAA,MACA;AAAA,MACA,kBAAkB,IAAI,oCAAwD;AAAA,MAC9E;AAAA,MAEA,oBAAoB;AAAA,MACpB,qBAAqB;AAAA;AAAA,MAGrB,aAA+B;AAAA,MAC/B,gBAAgB;AAAA;AAAA,MAChB;AAAA,MAER;AAAA,MACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMQ,oBAGJ,oBAAI,IAAI;AAAA,MAEJ,oBAAoB,IAAI,oCAAsC;AAAA,MAE9D,mBAA8D,CAAC;AAAA,MAE/D,uBAAuB,IAAI,oCAAqC;AAAA,MAChE,yBAAyB,IAAI,oCAAqC;AAAA,MAClE,aAAa,IAAI,oCAA+C;AAAA,MAChE,yBAAyB,IAAI,oCAGnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOM,oBAAoB,IAAI,oCAAmE;AAAA,MAEnG,IAAW,qBAAqB;AAC9B,eAAO,KAAK,qBAAqB,QAAQ;AAAA,MAC3C;AAAA,MAEA,IAAW,uBAAuB;AAChC,eAAO,KAAK,uBAAuB,QAAQ;AAAA,MAC7C;AAAA,MAEA,IAAW,YAAY;AACrB,eAAO,KAAK,WAAW,QAAQ;AAAA,MACjC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAW,wBAAwB;AACjC,eAAO,KAAK,uBAAuB,QAAQ;AAAA,MAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAW,mBAAmB;AAC5B,eAAO,KAAK,kBAAkB,QAAQ;AAAA,MACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,IAAW,mBAAmB;AAC5B,eAAO,KAAK,kBAAkB,QAAQ;AAAA,MACxC;AAAA;AAAA;AAAA;AAAA,MAKA,IAAW,uBAAiC;AAC1C,eAAO,MAAM,KAAK,KAAK,kBAAkB,KAAK,CAAC;AAAA,MACjD;AAAA;AAAA;AAAA;AAAA,MAKA,IAAW,mBAKR;AACD,eAAO,MAAM,KAAK,KAAK,kBAAkB,OAAO,CAAC;AAAA,MACnD;AAAA,MAEA,IAAI,iBAAiB;AACnB,eAAO;AAAA,MACT;AAAA,MAEA,IAAI,gBAAgB;AAClB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,cAAc,YAAiC;AACjD,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,IAAW,mBAAmB;AAC5B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,iBAAiB;AAC1B,eAAO,KAAK,gBAAgB,QAAQ;AAAA,MACtC;AAAA,MAEA,IAAW,cAAc;AACvB,eAAO,KAAK,gBAAgB,QAAQ;AAAA,MACtC;AAAA,MAEA,aAAa;AACX,eAAO;AAAA,MACT;AAAA,MAEA,YAAY,cAA4B;AACtC,aAAK,gBAAgB;AACrB,aAAK;AACL,aAAK,oBAAoB,IAAI,iBAAiB,KAAK,aAAa;AAEhE,aAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,aAAK,0BAA0B,KAAK,wBAAwB,KAAK,IAAI;AAAA,MACvE;AAAA,MAEA,MAAM,eAAe;AACnB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,SAAS,UAAsC;AAC7C,YAAI,KAAK,UAAU,UAAU;AAC3B;AAAA,QACF;AAEA,aAAK,QAAQ;AACb,aAAK,gBAAgB,SAAS,MAAM,KAAK,KAAK;AAAA,MAChD;AAAA,MAEA,uBAAuB,SAAiB,MAAoB;AAC1D,gBAAQ,QAAQ,YAAY,GAAG;AAAA,UAC7B,KAAK;AACH,gBAAI;AACF,oBAAM,WAAW,KAAK,MAAM,IAAI;AAChC,mBAAK,kBAAkB,YAAY,QAAQ;AAAA,YAC7C,SAAS,GAAG;AACV,kBAAI,QAAQ,8BAA8B,CAAC;AAAA,YAC7C;AACA;AAAA,QACJ;AAAA,MACF;AAAA,MAEA,MAAM,QAAQ,OAAiB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAShC,MAAc,0BAA0B;AACtC,cAAM,UAAU,KAAK,cAAc;AACnC,cAAM,OAAO,KAAK,cAAc,oBAAoB;AAEpD,YAAI,CAAC,SAAS;AACZ,cAAI,MAAM,6DAA6D;AACvE;AAAA,QACF;AAIA,cAAM,kBAAkB,GAAG,OAAO,oBAAoB,IAAI;AAC1D,cAAM,UAAU,IAAI,YAAY,eAAe;AAG/C,gBAAQ,OAAO;AAGf,YAAI,KAAK,cAAc,uBAAuB;AAC5C,kBAAQ,YAAY,KAAK,cAAc;AAAA,QACzC;AAEA,aAAK,sBAAsB;AAI3B,YAAI;AAEF,gBAAM,YAAY,QAAQ,QAAQ,SAAS,IAAI;AAC/C,gBAAM,QAAQ,GAAG,SAAS;AAE1B,cAAI,QAAQ,yDAAyD,KAAK,EAAE;AAC5E,gBAAM,QAAQ,QAAQ,OAAO,KAAK,cAAc,qBAAqB;AAGrE,gBAAM,QAAQ,UAAU,CAAC,aAAa,eAAe,eAAe,eAAe,GAAG,IAAI;AAE1F,cAAI,QAAQ,6EAA6E,IAAI,EAAE;AAAA,QACjG,SAAS,GAAG;AACV,cAAI,MAAM,wEAAwE,CAAC;AAAA,QAErF;AAGA,cAAM,KAAK,gBAAgB;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAc,kBAAkB;AAC9B,YAAI,CAAC,KAAK,qBAAqB;AAC7B;AAAA,QACF;AAEA,YAAI;AAGF,eAAK,cAAc,KAAK,oBAAoB,WAAW,aAAa,OAAO;AAC3E,gBAAM,KAAK,YAAY,KAAK;AAG5B,eAAK,qBAAqB,SAAS,MAAM,KAAK,WAAW;AAAA,QAC3D,SAAS,GAAG;AACV,cAAI,MAAM,qCAAqC,CAAC;AAAA,QAClD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAc,mBAAqC;AACjD,cAAM,UAAU,KAAK,cAAc;AACnC,cAAM,QAAQ,KAAK,cAAc;AAEjC,YAAI,CAAC,WAAW,CAAC,OAAO;AACtB,cAAI,MAAM,gDAAgD;AAC1D,iBAAO;AAAA,QACT;AAEA,YAAI;AAEF,gBAAM,SAAS,IAAI,IAAI,OAAO;AAC9B,gBAAM,aAAa,OAAO,aAAa,WAAW,SAAS;AAC3D,gBAAM,QAAQ,GAAG,UAAU,KAAK,OAAO,IAAI,2BAA2B,mBAAmB,KAAK,CAAC;AAE/F,eAAK,aAAa,IAAI,UAAU,KAAK;AAErC,iBAAO,IAAI,QAAiB,CAACE,aAAY;AACvC,gBAAI,CAAC,KAAK,YAAY;AACpB,cAAAA,SAAQ,KAAK;AACb;AAAA,YACF;AAEA,iBAAK,WAAW,SAAS,MAAM;AAC7B,kBAAI,QAAQ,wCAAwC;AAGpD,oBAAM,OAAO,KAAK,cAAc,oBAAoB;AACpD,oBAAM,mBAAmB;AAAA,gBACvB,QAAQ;AAAA,kBACN,SAAS;AAAA,kBACT,WAAW,KAAK,IAAI,EAAE,SAAS;AAAA,kBAC/B,aAAa;AAAA,kBACb,gBAAgB;AAAA,gBAClB;AAAA,gBACA,MAAM;AAAA,kBACJ,YAAY;AAAA,oBACV;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AACA,mBAAK,YAAY,KAAK,KAAK,UAAU,gBAAgB,CAAC;AAEtD,cAAAA,SAAQ,IAAI;AAAA,YACd;AAEA,iBAAK,WAAW,UAAU,MAAM;AAC9B,kBAAI,QAAQ,iDAAiD;AAC7D,mBAAK,aAAa;AAGlB,kBAAI,KAAK,iBAAiB,CAAC,KAAK,mBAAmB;AACjD,qBAAK,oBAAoB,WAAW,MAAM;AACxC,uBAAK,oBAAoB;AACzB,sBAAI,KAAK,iBAAiB,KAAK,iCAAmD;AAChF,yBAAK,iBAAiB,EAAE,MAAM,MAAM;AAElC,2BAAK,aAAa;AAAA,oBACpB,CAAC;AAAA,kBACH;AAAA,gBACF,GAAG,GAAI;AAAA,cACT,OAAO;AAEL,qBAAK,aAAa;AAAA,cACpB;AAAA,YACF;AAEA,iBAAK,WAAW,UAAU,MAAM;AAC9B,kBAAI,MAAM,4CAA4C;AACtD,cAAAA,SAAQ,KAAK;AAAA,YACf;AAEA,iBAAK,WAAW,YAAY,CAAC,UAAU;AACrC,mBAAK,wBAAwB,MAAM,IAAI;AAAA,YACzC;AAGA,uBAAW,MAAM;AACf,kBAAI,KAAK,YAAY,eAAe,UAAU,MAAM;AAClD,gBAAAA,SAAQ,KAAK;AAAA,cACf;AAAA,YACF,GAAG,GAAI;AAAA,UACT,CAAC;AAAA,QACH,SAAS,GAAG;AACV,cAAI,MAAM,kCAAkC,CAAC;AAC7C,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKQ,wBAAwB,MAAc;AAC5C,YAAI;AACF,gBAAM,eAAe,KAAK,MAAM,IAAI;AAEpC,cAAI,aAAa,MAAM,cAAc,gBAAgB;AAEnD,kBAAM,OAAO,aAAa,KAAK,QAAQ;AACvC,kBAAM,SAAmC;AAAA,cACvC,IAAI;AAAA,cACJ,MAAM,aAAa,KAAK;AAAA,cACxB,QAAQ,aAAa,KAAK;AAAA,cAC1B,gBAAgB,aAAa,KAAK,gBAAgB,IAAI,CAAC,SAAS;AAAA,gBAC9D,SAAS,IAAI;AAAA,gBACb,UAAU,IAAI;AAAA,cAChB,EAAE;AAAA,YACJ;AACA,iBAAK,oBAAoB,MAAM;AAAA,UACjC,WAAW,aAAa,MAAM,cAAc,gBAAgB;AAE1D,kBAAM,WAAW,aAAa;AAC9B,gBAAI,SAAS,YAAY;AACvB,mBAAK,kBAAkB,IAAI,SAAS,YAAY;AAAA,gBAC9C,MAAM,SAAS;AAAA,gBACf,MAAM,SAAS;AAAA,cACjB,CAAC;AACD,kBAAI,QAAQ,kBAAkB,SAAS,UAAU,EAAE;AACnD,mBAAK,kBAAkB,SAAS,MAAM,KAAK,oBAAoB;AAAA,YACjE;AAAA,UACF,WAAW,aAAa,MAAM,cAAc,cAAc;AAExD,kBAAM,YAAY,aAAa;AAC/B,gBAAI,UAAU,YAAY;AACxB,mBAAK,kBAAkB,OAAO,UAAU,UAAU;AAClD,kBAAI,QAAQ,gBAAgB,UAAU,UAAU,EAAE;AAClD,mBAAK,kBAAkB,SAAS,MAAM,KAAK,oBAAoB;AAAA,YACjE;AAAA,UACF,WAAW,aAAa,MAAM,cAAc,eAAe;AAEzD,kBAAM,WAAW,aAAa;AAK9B,gBAAI,SAAS,cAAc,SAAS,UAAU;AAE5C,oBAAM,WAAW,KAAK,kBAAkB,IAAI,SAAS,UAAU;AAC/D,mBAAK,kBAAkB,IAAI,SAAS,YAAY;AAAA,gBAC9C,MAAM,SAAS;AAAA,gBACf,MAAM,UAAU;AAAA,gBAChB,UAAU,SAAS;AAAA,gBACnB,WAAW,SAAS;AAAA,cACtB,CAAC;AAAA,YACH;AACA,gBAAI,SAAS,UAAU;AAErB,oBAAM,uBAAuB;AAAA,gBAC3B,SAAS,QAAQ,KAAK,IAAI,CAAC;AAAA,gBAC3B,QAAQ;AAAA,kBACN,WAAW;AAAA,kBACX,SAAS;AAAA,kBACT,SAAS;AAAA,gBACX;AAAA,gBACA,MAAM;AAAA,kBACJ,cAAc;AAAA,kBACd,iBAAiB;AAAA,kBACjB,UAAU;AAAA,kBACV,QAAQ;AAAA,oBACN,OAAO;AAAA,oBACP,WAAW;AAAA,oBACX,IAAI;AAAA,oBACJ,MAAM,SAAS,cAAc;AAAA,oBAC7B,UAAU,SAAS;AAAA,oBACnB,MAAM;AAAA,oBACN,SAAS;AAAA,oBACT,MAAM;AAAA,kBACR;AAAA,kBACA,cAAc;AAAA,gBAChB;AAAA,cACF;AACA,mBAAK,kBAAkB,YAAY,oBAAoB;AAAA,YACzD;AAAA,UACF,WAAW,aAAa,MAAM,cAAc,aAAa;AAEvD,kBAAM,gBAAgB,aAAa;AACnC,gBAAI,cAAc,MAAM;AACtB,mBAAK,kBAAkB,YAAY,cAAc,IAAI;AAAA,YACvD;AAAA,UACF,WACE,aAAa,MAAM,cAAc,eACjC,aAAa,MAAM,cAAc,iBACjC,aAAa,MAAM,cAAc,iBACjC,aAAa,MAAM,cAAc,iBACjC;AAEA,kBAAM,aAAa,aAAa;AAMhC,gBAAI;AAAA,cACF,kDAAkD,WAAW,SAAS,IAAI,WAAW,QAAQ,GAAG,WAAW,IAAI,UAAU,WAAW,IAAI;AAAA,YAC1I;AAGA,iBAAK,uBAAuB,SAAS,MAAM;AAAA,cACzC,WAAW,WAAW;AAAA,cACtB,UAAU,WAAW,YAAY;AAAA,cACjC,MAAM,WAAW,QAAQ;AAAA,cACzB,MAAM,WAAW,QAAQ;AAAA,YAC3B,CAAC;AAAA,UACH,WAAW,aAAa,MAAM,cAAc,kBAAkB;AAE5D,kBAAM,eAAe,aAAa;AAClC,kBAAM,SAAS,aAAa,UAAU;AACtC,kBAAM,WAAW,aAAa,aAAa;AAG3C,kBAAM,kBAAkB,oBAAoB,MAAM;AAClD,gBAAI,QAAQ,qBAAqB,eAAe,EAAE;AAClD,iBAAK,cAAc,mBAAmB,gCAAoC;AAG1E,iBAAK,gBAAgB;AAGrB,iBAAK,kBAAkB,SAAS,MAAM,EAAE,QAAQ,SAAS,CAAC;AAAA,UAC5D;AAAA,QACF,SAAS,GAAG;AACV,cAAI,MAAM,uCAAuC,CAAC;AAAA,QACpD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKQ,sBAAsB;AAC5B,YAAI,KAAK,mBAAmB;AAC1B,uBAAa,KAAK,iBAAiB;AACnC,eAAK,oBAAoB;AAAA,QAC3B;AAEA,YAAI,KAAK,YAAY;AACnB,eAAK,WAAW,MAAM;AACtB,eAAK,aAAa;AAAA,QACpB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKQ,eAAe;AACrB,YAAI,KAAK,oBAAoB,GAAG;AAC9B;AAAA,QACF;AAGA,eAAO,WAAW,KAAK,aAAa,KAAK,iBAAiB;AAAA,MAC5D;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,qBAAmD;AACvD,YAAI,KAAK,cAAc;AACrB,iBAAO,KAAK;AAAA,QACd;AAEA,YAAI,CAAC,KAAK,qBAAqB;AAC7B,gBAAM,KAAK,wBAAwB;AAAA,QACrC;AAEA,YAAI,CAAC,KAAK,qBAAqB;AAC7B,iBAAO;AAAA,QACT;AAGA,aAAK,eAAe,IAAIC,SAAQ,KAAK,eAAe,iBAAiB,IAAI;AACzE,aAAK,aAAa,iBAAiB,KAAK,oBAAoB,UAAU;AAEtE,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,gBAAgB,MAAsD;AAC1E,YAAI,CAAC,KAAK,cAAc,uBAAuB;AAC7C,cAAI;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,YACL;AAAA,YACA,cACE;AAAA,UACJ;AAAA,QACF;AAEA,aAAK,0BAA6C;AAElD,YAAI,CAAC,KAAK,SAAS;AACjB,iBAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAEA,cAAM,sBAAsB,4BAA4B,KAAK,SAAS,KAAK;AAE3E,cAAM,aAAa,IAAI,WAAW;AAIlC,cAAM,gBAAgB,cAAc,KAAK,eAAe,KAAK,SAAS,WAAW,UAAU;AAE3F,cAAM,WAAW,WAAW,QAAQ;AAGpC,YAAI,KAAK,eAAe;AACtB,gBAAM,gBAAgB,MAAM,iBAAiB;AAAA,YAC3C,KAAK,cAAc;AAAA,YACnB,WAAW;AAAA,YACX;AAAA,YACA;AAAA,UACF;AAEA,eAAK,gBAAgB;AAGrB,cAAI,cAAc,gBAAgB,WAAW,KAAK,cAAc,kBAAkB,WAAW,GAAG;AAC9F,gBAAI,QAAQ,4DAA4D;AACxE,mBAAO;AAAA,cACL;AAAA,YACF;AAAA,UACF;AAEA,cAAI,CAAC,cAAc,gBAAgB,GAAG;AACpC,kBAAM,aAAa,IAAI,WAAW;AAElC,kBAAM,cAAc,uBAAuB,UAAU;AACrD,kBAAM,WAAW,WAAW,QAAQ;AAEpC,kBAAM,aAAa,MAAM,WAAW,kBAAkB;AAEtD,iBAAK,cAAc,mBAAmB,gCAAgC,KAAK,cAAc,mBAAmB;AAE5G,kBAAM,eAAe,mBAAmB,yBAAyB,aAAa;AAE9E,gBAAI;AACF,oBAAM,cAAM;AAAA,gBACV,QAAQ;AAAA,gBACR,KAAK,KAAK,cAAc,IAAI;AAAA;AAAA,gBAC5B,SAAS;AAAA,kBACP,eAAe,oBAAoB,KAAK,cAAc;AAAA,kBACtD,gBAAgB;AAAA,kBAChB,uBAAuB;AAAA,gBACzB;AAAA,gBACA,MAAM;AAAA;AAAA,gBACN,kBAAkB;AAAA,gBAClB,eAAe;AAAA,cACjB,CAAC;AAAA,YACH,SAASC,QAAO;AACd,oBAAM,aAAa,KAAK,mBAAmBA,MAAK;AAChD,kBAAI,YAAY;AACd,uBAAO;AAAA,cACT;AACA,oBAAMA;AAAA,YACR;AAEA,iBAAK,cAAc,mBAAmB,iBAAiB;AACvD,mBAAO;AAAA,cACL;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,aAAK,cAAc,mBAAmB,iCAAiC;AAEvE,cAAM,YAAY,MAAM,WAAW,kBAAkB;AAErD,aAAK,gBAAgB;AAErB,aAAK,cAAc,mBAAmB,kBAAkB,KAAK,cAAc,mBAAmB;AAE9F,YAAI;AACF,gBAAM,cAAM;AAAA,YACV,QAAQ;AAAA,YACR,KAAK,KAAK,cAAc,IAAI;AAAA;AAAA,YAC5B,SAAS;AAAA,cACP,eAAe,oBAAoB,KAAK,cAAc;AAAA,cACtD,gBAAgB;AAAA,YAClB;AAAA,YACA,MAAM;AAAA;AAAA,YACN,kBAAkB;AAAA,YAClB,eAAe;AAAA,UACjB,CAAC;AAAA,QACH,SAASA,QAAO;AACd,gBAAM,aAAa,KAAK,mBAAmBA,MAAK;AAChD,cAAI,YAAY;AACd,mBAAO;AAAA,UACT;AACA,gBAAMA;AAAA,QACR;AAEA,aAAK,yBAA4C;AAEjD,aAAK,cAAc,mBAAmB,iBAAiB;AAEvD,eAAO;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOQ,mBAAmBA,QAAoD;AAC7E,cAAM,aAAaA;AACnB,YAAI,WAAW,UAAU,WAAW,KAAK;AAEvC,gBAAM,eAAe,WAAW,SAAS;AACzC,cAAI,cAAc,cAAc;AAE9B,iBAAK,cAAc,2BAA2B;AAC9C,iBAAK,cAAc;AAAA,cACjB;AAAA,YACF;AACA,iBAAK,4BAA+C;AACpD,mBAAO;AAAA,cACL;AAAA,cACA,cAAc,aAAa,WAAW;AAAA,YACxC;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,aAAa,WAAyC;AAC1D,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,WAAW,SAAiB;AAChC,YAAI,CAAC,KAAK,cAAc,uBAAuB;AAC7C,cAAI,yBAAyB,IAAI;AACjC;AAAA,QACF;AAEA,aAAK,cAAc;AAEnB,cAAM,SAAS,MAAM,cAAM;AAAA,UACzB,QAAQ;AAAA,UACR,KAAK,KAAK,cAAc,IAAI;AAAA;AAAA,UAC5B,SAAS;AAAA,YACP,eAAe,oBAAoB,KAAK,cAAc;AAAA,UACxD;AAAA,UACA,MAAM;AAAA,UACN,kBAAkB;AAAA,UAClB,eAAe;AAAA,QACjB,CAAC;AAED,eAAO,OAAO;AAAA,MAChB;AAAA,MAEA,gBAAwB;AACtB,YAAI,CAAC,KAAK,cAAc,qBAAqB;AAC3C,cAAI,yBAAyB,MAAM;AACnC,iBAAO;AAAA,QACT;AAEA,YAAI,OAAO,KAAK,cAAc;AAE9B,YAAI,CAAC,MAAM;AACT,iBAAO;AAAA,QACT;AAGA,eAAO,KAAK,cAAc,sBAAsB,SAAS,OAAO;AAAA,MAClE;AAAA,MAEA,MAAM,YAAY,MAAc;AAAA,MAAC;AAAA,MAEjC,MAAM,qBAAqB;AAAA,MAAC;AAAA,MAE5B,MAAM,OAAO;AACX,cAAM,UAAU,KAAK,cAAc;AACnC,cAAM,QAAQ,KAAK,cAAc;AACjC,cAAM,OAAO,KAAK,cAAc,oBAAoB;AAEpD,YAAI,CAAC,WAAW,CAAC,OAAO;AACtB,cAAI,MAAM,6CAA6C;AACvD;AAAA,QACF;AAEA,YAAI;AACF,cAAI,QAAQ,2BAA2B;AACvC,eAAK,yBAA4C;AAEjD,gBAAM,cAAM;AAAA,YACV,QAAQ;AAAA,YACR,KAAK,GAAG,OAAO,OAAO,IAAI;AAAA,YAC1B,SAAS;AAAA,cACP,eAAe,YAAY;AAAA,YAC7B;AAAA,UACF,CAAC;AAED,eAAK,wBAA2C;AAChD,cAAI,QAAQ,uBAAuB;AAAA,QACrC,SAAS,GAAQ;AACf,cAAI,MAAM,oCAAoC,EAAE,WAAW,EAAE;AAC7D,eAAK,eAAe,6BAA6B,EAAE,WAAW;AAI9D,eAAK,wBAA2C;AAAA,QAClD;AAAA,MACF;AAAA,MAEA,MAAM,UAAU;AACd,cAAM,UAAU,KAAK,cAAc;AACnC,cAAM,QAAQ,KAAK,cAAc;AACjC,cAAM,OAAO,KAAK,cAAc,oBAAoB;AAEpD,YAAI,CAAC,WAAW,CAAC,OAAO;AACtB,cAAI,MAAM,gDAAgD;AAC1D;AAAA,QACF;AAEA,YAAI;AACF,cAAI,QAAQ,6BAA6B;AACzC,eAAK,yBAA4C;AAEjD,gBAAM,cAAM;AAAA,YACV,QAAQ;AAAA,YACR,KAAK,GAAG,OAAO,OAAO,IAAI;AAAA,YAC1B,SAAS;AAAA,cACP,eAAe,YAAY;AAAA,YAC7B;AAAA,UACF,CAAC;AAGD,cAAI,QAAQ,iCAAiC;AAAA,QAC/C,SAAS,GAAQ;AACf,cAAI,MAAM,uCAAuC,EAAE,WAAW,EAAE;AAChE,eAAK,eAAe;AAAA,QACtB;AAAA,MACF;AAAA,MAEA,MAAM,oBAAoB,WAAqC;AAC7D,YAAI,YAAY;AAGhB,YAAI,UAAU,cAAc,CAAC,KAAK,YAAY;AAC5C,eAAK,aAAa,UAAU;AAC5B,cAAI;AAAA,YACF,yCAAyC,UAAU,WAAW,eAAe,8BAA8B,UAAU,WAAW,wBAAwB;AAAA,UAC1J;AAAA,QACF;AAEA,YAAI,UAAU,QAAQ;AACpB,kBAAQ,UAAU,QAAQ;AAAA,YACxB;AACE,kBAAI,KAAK,6BAAgD;AACvD,qBAAK,0BAA6C;AAClD,4BAAY;AAAA,cACd;AACA;AAAA,YACF;AACE,kBAAI,KAAK,4BAA+C;AACtD,qBAAK,yBAA4C;AACjD,4BAAY;AAAA,cACd;AACA;AAAA,YACF;AACE,kBAAI,KAAK,4BAA+C;AACtD,qBAAK,yBAA4C;AACjD,4BAAY;AAAA,cACd;AACA;AAAA,YACF;AACE,kBAAI,KAAK,2BAA8C;AACrD,qBAAK,wBAA2C;AAEhD,oBAAI,CAAC,KAAK,cAAc,wCAAwC;AAC9D,uBAAK,cAAc,yCAAyC;AAC5D,uBAAK,cAAc,KAAK;AAAA,gBAC1B;AAGA,oBAAI,CAAC,KAAK,aAAa;AACrB,wBAAM,KAAK,wBAAwB;AAAA,gBACrC;AAEA,4BAAY;AAAA,cACd;AACA;AAAA,YACF;AACE,kBAAI,KAAK,2BAA8C;AACrD,qBAAK,wBAA2C;AAChD,4BAAY;AAAA,cACd;AACA;AAAA,UACJ;AAAA,QACF;AAEA,YAAI,UAAU,gBAAgB;AAC5B,qBAAW,iBAAiB,UAAU,gBAAgB;AACpD,gBAAI,CAAC,KAAK,iBAAiB,cAAc,QAAQ,GAAG;AAClD,mBAAK,iBAAiB,cAAc,QAAQ,IAAI;AAEhD,mBAAK,cAAc,mBAAmB,cAAc,0BAA8B;AAElF,mBAAK,WAAW,SAAS,MAAM,aAAa;AAAA,YAC9C;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,gBAAgB;AACd,aAAK,oBAAoB;AACzB,aAAK,qBAAqB;AAAA,MAC5B;AAAA,MAEA,MAAM,cAAc;AAClB,YAAI,YAAY;AAEhB,YAAI;AACF,gBAAM,SAAS,MAAM,cAAM;AAAA,YACzB,QAAQ;AAAA,YACR,KAAK,KAAK,cAAc,IAAI;AAAA;AAAA,YAC5B,SAAS;AAAA,cACP,eAAe,oBAAoB,KAAK,cAAc;AAAA,YACxD;AAAA,UACF,CAAC;AAED,gBAAM,MAAM,OAAO;AAEnB,cAAI,KAAK;AACP,wBAAY,MAAM,KAAK,oBAAoB,GAAG;AAAA,UAChD;AAAA,QACF,SAAS,GAAQ;AACf,cAAI,KAAK,EAAE,YAAa,EAAiB,UAAU,WAAW,KAAK;AACjE,iBAAK,eAAe,sCAAsC,KAAK,cAAc;AAC7E,iBAAK,8BAAgD;AACrD;AAAA,UACF;AAEA,eAAK,eAAe;AACpB,eAAK,8BAAgD;AACrD;AAAA,QACF;AAEA,YAAI,KAAK,qBAAqB,GAAG;AAC/B,cAAI,WAAW;AACb,iBAAK,oBAAoB;AACzB,iBAAK,qBAAqB;AAAA,UAC5B,OAAO;AACL,iBAAK;AAGL,gBAAI,KAAK,uBAAuB,MAAM,KAAK,oBAAoB,KAAK;AAClE,mBAAK,oBAAoB;AACzB,mBAAK,qBAAqB;AAAA,YAC5B,WAAW,KAAK,uBAAuB,MAAM,KAAK,sBAAsB,KAAK;AAC3E,mBAAK,oBAAoB;AACzB,mBAAK,qBAAqB;AAAA,YAC5B;AAAA,UACF;AAGA,iBAAO,WAAW,KAAK,aAAa,KAAK,iBAAiB;AAAA,QAC5D;AAAA,MACF;AAAA,MAEA,MAAM,aAAa;AACjB,cAAMC,OAAM,KAAK,cAAc;AAC/B,aAAK,oBAAoB;AAEzB,YACE,KAAK,iCACL,KAAK,+BACL,KAAK,8BACL,KAAK,8BACL,KAAK,2BACL;AACA;AAAA,QACF;AAEA,aAAK,4BAA+C;AAEpD,YAAI,CAAC,KAAK,iBAAiB,CAACA,QAAO,CAAC,KAAK,cAAc,sBAAsB;AAC3E,eAAK,eAAe;AACpB,eAAK;AACL;AAAA,QACF;AAEA,YAAI;AAEJ,YAAI;AACF,oBAAU,MAAM,cAAM,KAAKA,OAAM,aAAa,cAAc,KAAK,cAAc,oBAAoB;AAEnG,cAAI,YAAY,QAAW;AACzB,iBAAK,eAAe;AACpB,iBAAK;AACL,iBAAK,sBAAyC;AAC9C;AAAA,UACF;AAEA,cAAI,QAAQ,WAAW,KAAK;AAC1B,iBAAK,eAAe;AACpB,iBAAK;AACL,iBAAK,sBAAyC;AAC9C;AAAA,UACF;AAEA,cAAI;AAEJ,cAAI,OAAO,QAAQ,SAAS,UAAU;AACpC,qBAAS,KAAK,MAAM,QAAQ,IAAI;AAAA,UAClC,WAAW,OAAO,QAAQ,SAAS,UAAU;AAC3C,qBAAS,QAAQ;AAAA,UACnB;AAEA,cAAI,WAAW,QAAW;AACxB,iBAAK,eAAe;AACpB,iBAAK;AACL,iBAAK,sBAAyC;AAE9C;AAAA,UACF;AAEA,eAAK,4BAA+C;AAGpD,eAAK,cAAc,wBACjB,OAAO,QAAQ,MAAM,OAAO,MAAM,OAAO,UAAU,MAAM,OAAO,UAAU;AAC5E,eAAK,cAAc,0BAA0B,OAAO;AACpD,eAAK,cAAc,2BAA2B,OAAO;AAIrD,cAAI,cAAc,KAAK,cAAc;AACrC,cAAI,kBAAkB;AAGtB,cAAI,gBAAgB,UAAa,OAAO,aAAa,WAAW,GAAG,MAAM,GAAG;AAC1E,8BAAkB;AAAA,UACpB;AAGA,cAAI,CAAC,iBAAiB;AACpB,uBAAW,WAAW,OAAO,cAAc;AACzC,oBAAM,OAAO,SAAS,SAAS,EAAE;AACjC,oBAAM,SAAS,OAAO,aAAa,IAAI;AACvC,kBAAI,UAAU,OAAO,MAAM,GAAG;AAC5B,oBAAI,QAAQ,gCAAgC,OAAO,WAAW,cAAc,GAAG;AAC/E,8BAAc;AACd,qBAAK,cAAc,mBAAmB;AACtC,kCAAkB;AAClB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAGA,gBAAM,KAAK,wBAAwB;AAEnC,cAAI,mBAAmB,gBAAgB,UAAa,OAAO,aAAa,WAAW,GAAG;AACpF,kBAAM,SAAS,OAAO,aAAa,WAAW;AAC9C,kBAAM,KAAK,oBAAoB,MAAM;AAAA,UACvC;AAEA,gBAAM,KAAK,cAAc,KAAK;AAI9B,gBAAM,cAAc,MAAM,KAAK,iBAAiB;AAEhD,cAAI,aAAa;AACf,gBAAI,QAAQ,oCAAoC;AAChD,iBAAK,gBAAgB;AACrB,iBAAK,oBAAoB;AAAA,UAC3B,OAAO;AACL,gBAAI,QAAQ,2DAA2D;AACvE,iBAAK,gBAAgB;AACrB,iBAAK,oBAAoB;AACzB,iBAAK,aAAa;AAAA,UACpB;AAAA,QACF,SAAS,GAAQ;AACf,eAAK,eAAe,EAAE,SAAS;AAE/B,cAAI,KAAK,gBAAgB,KAAK,aAAa,QAAQ,KAAK,KAAK,GAAG;AAC9D,iBAAK;AACL,iBAAK,sBAAyC;AAAA,UAChD,OAAO;AACL,iBAAK;AACL,iBAAK,sBAAyC;AAAA,UAChD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACrlCA,IAGAC,qBAwBqB;AA3BrB;AAAA;AAAA;AAAA;AACA;AACA;AACA,IAAAA,sBAAgC;AAGhC;AACA;AAEA;AAEA;AACA;AAIA;AAWA,IAAqB,yBAArB,MAAkE;AAAA,MACxD;AAAA,MAEA;AAAA,MACA;AAAA,MACR;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACQ;AAAA,MAER;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEQ,uBAAuB,IAAI,oCAAqC;AAAA,MAChE,yBAAyB,IAAI,oCAAqC;AAAA,MAClE,aAAa,IAAI,oCAA+C;AAAA,MAChE,kBAAkB,IAAI,oCAAwD;AAAA,MAC9E,eAAe,IAAI,oCAAwD;AAAA;AAAA,MAG3E,oBAAoB,IAAI,oCAA6D;AAAA,MACrF,uBAAuB,IAAI,oCAAgE;AAAA,MAC3F,gBAAgB,IAAI,oCAAyD;AAAA,MAC7E,iBAAiB,IAAI,oCAA0D;AAAA,MAC/E,kBAAkB,IAAI,oCAA2D;AAAA,MACjF,wBAAwB,IAAI,oCAAiE;AAAA,MAC7F,qBAAqB,IAAI,oCAA8D;AAAA,MAE/F,IAAW,qBAAqB;AAC9B,eAAO,KAAK,qBAAqB,QAAQ;AAAA,MAC3C;AAAA,MAEA,IAAW,uBAAuB;AAChC,eAAO,KAAK,uBAAuB,QAAQ;AAAA,MAC7C;AAAA,MAEA,IAAW,mBAAmB;AAC5B,eAAO,KAAK,kBAAkB,QAAQ;AAAA,MACxC;AAAA,MAEA,IAAW,sBAAsB;AAC/B,eAAO,KAAK,qBAAqB,QAAQ;AAAA,MAC3C;AAAA,MAEA,IAAW,eAAe;AACxB,eAAO,KAAK,cAAc,QAAQ;AAAA,MACpC;AAAA,MAEA,IAAW,gBAAgB;AACzB,eAAO,KAAK,eAAe,QAAQ;AAAA,MACrC;AAAA,MAEA,IAAW,iBAAiB;AAC1B,eAAO,KAAK,gBAAgB,QAAQ;AAAA,MACtC;AAAA,MAEA,IAAW,uBAAuB;AAChC,eAAO,KAAK,sBAAsB,QAAQ;AAAA,MAC5C;AAAA,MAEA,IAAW,oBAAoB;AAC7B,eAAO,KAAK,mBAAmB,QAAQ;AAAA,MACzC;AAAA,MAEA,IAAW,YAAY;AACrB,eAAO,KAAK,WAAW,QAAQ;AAAA,MACjC;AAAA,MAEA,IAAW,mBAAmB;AAC5B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,cAAc;AACvB,eAAO,KAAK,aAAa,QAAQ;AAAA,MACnC;AAAA,MAEA,IAAW,iBAAiB;AAC1B,eAAO,KAAK,gBAAgB,QAAQ;AAAA,MACtC;AAAA,MAEA,IAAI,gBAAgB;AAClB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,cAAc,YAAiC;AACjD,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,IAAI,iBAAiB;AACnB,eAAO;AAAA,MACT;AAAA,MAEA,YAAY,cAA4B;AACtC,aAAK,gBAAgB;AACrB,aAAK,oBAAoB,IAAI,iBAAiB,KAAK,aAAa;AAEhE,aAAK,yBAAyB;AAC9B,aAAK;AAEL,aAAK,+BAA+B;AAEpC,aAAK,aAAa;AAAA,MACpB;AAAA,MAEA,MAAM,eAAe;AACnB,cAAM,SAAS,MAAM,gBAAgB,qEAA4D,EAAE;AAEnG,YAAI,QAAQ;AACV,cAAI,YAAY;AAChB,cAAI;AACF,wBAAY,SAAS,MAAM;AAAA,UAC7B,SAAS,GAAG;AAAA,UAAC;AAEb,cAAI,aAAa,GAAG;AAClB,gBAAI,cAAc,GAAG;AACnB,mBAAK,kCAAqD;AAAA,YAC5D,WAAW,cAAc,GAAG;AAC1B,mBAAK,uCAA0D;AAAA,YACjE,WAAW,cAAc,GAAG;AAC1B,mBAAK,oCAAuD;AAAA,YAC9D,WAAW,cAAc,GAAG;AAC1B,mBAAK,mCAAsD;AAAA,YAC7D,WAAW,cAAc,GAAG;AAC1B,mBAAK,kCAAqD;AAAA,YAC5D;AAAA,UACF;AAAA,QACF;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,QAAQ,OAAiB;AAAA,MAAC;AAAA,MAEhC,uBAAuB,SAAiB,MAAc;AACpD,gBAAQ,SAAS;AAAA,UACf,KAAK;AACH,iBAAK,kCAAqD;AAE1D,gBAAI,CAAC,KAAK,cAAc,oCAAoC;AAC1D,mBAAK,cAAc,qCAAqC;AACxD,mBAAK,cAAc,KAAK;AAAA,YAC1B;AAEA,iBAAK,wBAAwB;AAE7B;AAAA,UAEF,KAAK;AACH,iBAAK,gBAAgB;AACrB;AAAA,UAEF,KAAK;AACH,iBAAK,kCAAqD;AAC1D;AAAA,UAEF,KAAK;AACH,iBAAK,iBAAiB,IAAI;AAC1B;AAAA,UAEF,KAAK;AACH,iBAAK,cAAc,mBAAmB,aAAa,uBAA2B;AAC9E;AAAA,UAEF,KAAK;AACH,iBAAK,cAAc,mBAAmB,mBAAmB,uBAA2B;AACpF;AAAA,UAEF,KAAK;AACH,gBAAI;AACF,oBAAM,WAAW,KAAK,MAAM,IAAI;AAChC,mBAAK,kBAAkB,SAAS,MAAM,QAAQ;AAAA,YAChD,SAAS,GAAG;AACV,kBAAI,MAAM,yCAAyC,CAAC;AAAA,YACtD;AACA;AAAA,UAEF,KAAK;AACH,gBAAI;AACF,oBAAM,WAAW,KAAK,MAAM,IAAI;AAChC,mBAAK,qBAAqB,SAAS,MAAM,QAAQ;AAAA,YACnD,SAAS,GAAG;AACV,kBAAI,MAAM,4CAA4C,CAAC;AAAA,YACzD;AACA;AAAA,UAEF,KAAK;AACH,gBAAI;AACF,oBAAM,YAAY,KAAK,MAAM,IAAI;AACjC,mBAAK,cAAc,SAAS,MAAM,SAAS;AAAA,YAC7C,SAAS,GAAG;AACV,kBAAI,MAAM,qCAAqC,CAAC;AAAA,YAClD;AACA;AAAA,UAEF,KAAK;AACH,gBAAI;AACF,oBAAM,YAAY,KAAK,MAAM,IAAI;AACjC,mBAAK,eAAe,SAAS,MAAM,SAAS;AAAA,YAC9C,SAAS,GAAG;AACV,kBAAI,MAAM,sCAAsC,CAAC;AAAA,YACnD;AACA;AAAA,UAEF,KAAK;AACH,gBAAI;AACF,oBAAM,aAAa,KAAK,MAAM,IAAI;AAClC,mBAAK,gBAAgB,SAAS,MAAM,UAAU;AAAA,YAChD,SAAS,GAAG;AACV,kBAAI,MAAM,uCAAuC,CAAC;AAAA,YACpD;AACA;AAAA,UAEF,KAAK;AACH,gBAAI;AACF,oBAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,mBAAK,sBAAsB,SAAS,MAAM,aAAa;AAAA,YACzD,SAAS,GAAG;AACV,kBAAI,MAAM,6CAA6C,CAAC;AAAA,YAC1D;AACA;AAAA,UAEF,KAAK;AACH,gBAAI;AACF,oBAAM,WAAW,KAAK,MAAM,IAAI;AAChC,mBAAK,mBAAmB,SAAS,MAAM,QAAQ;AAAA,YACjD,SAAS,GAAG;AACV,kBAAI,MAAM,0CAA0C,CAAC;AAAA,YACvD;AACA;AAAA,QACJ;AAAA,MACF;AAAA,MAEA,MAAM,aAAa;AACjB,cAAM,KAAK,MAAM;AAAA,MACnB;AAAA,MAEA,IAAI,qCAAqD;AACvD,eAAO,KAAK;AAAA,MACd;AAAA,MAEQ,iBAAiB,MAAc;AACrC,YAAI,MAAM;AAEV,YAAI;AACF,gBAAM,KAAK,MAAM,IAAI;AAAA,QACvB,SAAS,GAAG;AAAA,QAAC;AAEb,YAAI,CAAC,OAAO,CAAC,IAAI,QAAQ;AACvB;AAAA,QACF;AAEA,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,gBAAM,QAAQ,IAAI,CAAC;AAEnB,eAAK,mBAAmB,YAAY,KAAK;AAAA,QAC3C;AAAA,MACF;AAAA,MAEQ,gCAAgC;AACtC,YACE,KAAK,cAAc,sBAAsB,UACzC,CAAC,gBAAgB,iBACjB,KAAK,cAAc,wBAAwB,QAC3C;AACA;AAAA,QACF;AAEA,cAAM,SAAS,KAAK,cAAc,kBAAkB,KAAK,cAAc,mBAAmB;AAE1F,aAAK,yBAAyB,OAAO;AAErC,YAAI,KAAK,0BAA0B,MAAM;AACvC,eAAK,+BACH,KAAK,uBAAuB,WAAW,aAAa,4BAA4B;AAAA,QACpF,OAAO;AACL,eAAK,+BAA+B;AAAA,QACtC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,aAA4B;AAChC,cAAM,gBAAgB,yCAA8C,EAAE;AAAA,MACxE;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,cAA6B;AACjC,cAAM,gBAAgB,2CAA+C,EAAE;AAAA,MACzE;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,qBAAoC;AACxC,cAAM,gBAAgB,yDAAsD,EAAE;AAAA,MAChF;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,oBAAmC;AACvC,cAAM,gBAAgB,uDAAqD,EAAE;AAAA,MAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAc,0BAA0B;AACtC,YAAI,KAAK,aAAa;AACpB;AAAA,QACF;AAIA,cAAM,YAAY,MAAM,gBAAgB,+EAAoE,EAAE;AAE9G,YAAI,aAAa,UAAU,SAAS,KAAK,KAAK,cAAc,mBAAmB;AAC7E,gBAAM,cAAc,KAAK,cAAc,kBAAkB,SAAS;AAElE,eAAK,cAAc;AACnB,eAAK,qBAAqB,SAAS,MAAM,WAAW;AAAA,QACtD;AAAA,MACF;AAAA,MAEO,mBAAmB,QAAoC;AAC5D,aAAK,QAAQ;AAEb,aAAK,gBAAgB,SAAS,MAAM,MAAM;AAAA,MAC5C;AAAA,MAEO,gBAAgB,QAAqC;AAC1D,YAAI,QAAQ;AACV,eAAK,QAAQ;AAAA,QACf;AAEA,aAAK,aAAa,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7C;AAAA,MAEA,MAAM,QAAQ;AACZ,cAAMC,SAAO,KAAK,yBAAyB;AAE3C,aAAK,mCAAsD;AAE3D,cAAM,gBAAgB,6DAAwDA,MAAI;AAAA,MACpF;AAAA,MAEA,MAAM,uBAAuB,SAAkB;AAC7C,cAAM,KAAK,mBAAmB;AAC9B,eAAO,MAAM,KAAK,2BAA2B,OAAO;AAAA,MACtD;AAAA,MAEA,MAAM,uBAAuB,SAAkB;AAC7C,cAAM,KAAK,KAAK;AAEhB,cAAM,KAAK,uBAAuB,OAAO;AAEzC,cAAM,KAAK,MAAM;AAAA,MACnB;AAAA,MAEA,aAAa;AACX,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,gBAAgB,MAAqB;AACzC,YAAI,YAAY;AAEhB,YAAI,KAAK,UAAU;AACjB,sBAAY,MAAM,KAAK,uBAAuB,KAAK,QAAQ;AAAA,QAC7D;AAEA,cAAM,KAAK,MAAM;AAEjB,eAAO;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,qBAAqB;AACzB,YAAI,KAAK,cAAc,qBAAqB,MAAM;AAChD,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AAEA,YAAI,CAAC,KAAK,UAAU;AAClB;AAAA,QACF;AAEA,cAAM,aAAa,MAAM,gBAAgB,mFAAsE,EAAE;AAEjH,YAAI,cAAc,WAAW,SAAS,GAAG;AACvC,gBAAM,eAAe,KAAK,cAAc,kBAAkB,UAAU;AAEpE,gBAAM,qBAAqB;AAE3B,cAAI,oBAAoB;AACtB,kBAAM,gBAAgB,cAAc,KAAK,eAAe,KAAK,UAAU,YAAY;AAAA,UACrF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,WAAW,SAAiB;AAChC,cAAM,SAAS,MAAM,gBAAgB,iEAA0D,OAAO;AAEtG,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,aAAa,WAAyC;AAC1D,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,2BAA2B,SAAkB;AACjD,YAAI,KAAK,2BAA2B,MAAM;AACxC;AAAA,QACF;AAEA,cAAM,kBAAkB,QAAQ;AAChC,cAAM,mBAAmB,QAAQ,OAAO;AACxC,cAAM,cAAc,KAAK,uBAAuB,WAAW,aAAa,QAAQ,EAAE,aAAa,eAAe;AAE9G,cAAM,YAAY,aAAa;AAE/B,cAAM,gBAAgB,uBAAuB,KAAK,eAAe,SAAS,aAAa,gBAAgB;AAEvG,cAAM,YAAY,QAAQ;AAE1B,cAAM,QAAQ,KAAK;AAEnB,aAAK,cAAc;AACnB,aAAK,qBAAqB,SAAS,MAAM,WAAW;AAEpD,eAAO;AAAA,MACT;AAAA,MAEA,2BAA2B;AACzB,YAAI,CAAC,KAAK,cAAc,eAAe;AACrC,cAAI,WAAW,iCAAiC;AAChD,gBAAM,IAAI,MAAM;AAAA,QAClB;AAEA,YACE,KAAK,cAAc,yCAClB,KAAK,cAAc,wBAAwB,QAAQ,KAAK,cAAc,wBAAwB,SAC/F;AACA,cAAI,WAAW,gEAAgE;AAC/E,gBAAM,IAAI,MAAM;AAAA,QAClB;AAEA,YAAIA,SAAO,KAAK,cAAc;AAE9B,YAAI,CAACA,QAAM;AACT,UAAAA,SAAO;AAAA,QACT;AAEA,YAAI,gBAAgC,KAAK,cAAc;AAEvD,YAAI,KAAK,YAAY,KAAK,SAAS,eAAe;AAChD,cAAI,KAAK,SAAS,cAAc,mBAAmB;AACjD,4BAAgB,KAAK,SAAS;AAAA,UAChC;AAAA,QACF;AAEA,YAAI,CAAC,cAAc,MAAM;AACvB,wBAAc,OAAO;AAAA,QACvB;AAEA,cAAM,OAA+B;AAAA,UACnC,MAAM,UAAU,wBAAwBA,MAAI;AAAA,UAC5C,QAAQ,KAAK,cACV,2FACC,OACA;AAAA,UACJ,MAAM,KAAK,cAAc;AAAA,UACzB,OAAO,KAAK,cAAc;AAAA,UAC1B;AAAA,QACF;AAEA,eAAO,KAAK,UAAU,IAAI;AAAA,MAC5B;AAAA,MAEA,MAAM,OAAO;AACX,cAAMA,SAAO,KAAK,yBAAyB;AAE3C,aAAK,mCAAsD;AAE3D,cAAM,gBAAgB,2DAAuDA,MAAI;AAAA,MACnF;AAAA,IACF;AAAA;AAAA;;;AC1gBA,IAGAC,qBAaqB;AAhBrB;AAAA;AAAA;AAAA;AACA;AACA;AACA,IAAAA,sBAAgC;AAChC;AAGA;AACA;AAGA;AACA;AAIA,IAAqB,8BAArB,MAAuE;AAAA,MAC7D;AAAA,MACR;AAAA,MACQ,kBAAkB,IAAI,oCAAwD;AAAA,MAC9E,eAAe,IAAI,oCAAwD;AAAA,MAC3E;AAAA,MACA;AAAA,MAER;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEQ,sBAAsB,IAAI,oCAAqC;AAAA,MAC/D,wBAAwB,IAAI,oCAAqC;AAAA,MACjE,aAAa,IAAI,oCAA+C;AAAA,MAExE,IAAW,qBAAqB;AAC9B,eAAO,KAAK,oBAAoB,QAAQ;AAAA,MAC1C;AAAA,MAEA,IAAW,uBAAuB;AAChC,eAAO,KAAK,sBAAsB,QAAQ;AAAA,MAC5C;AAAA,MAEA,IAAW,YAAY;AACrB,eAAO,KAAK,WAAW,QAAQ;AAAA,MACjC;AAAA,MAEA,IAAI,iBAAiB;AACnB,eAAO,KAAK,cAAc;AAAA,MAC5B;AAAA,MAEA,IAAW,cAAc;AACvB,eAAO,KAAK,aAAa,QAAQ;AAAA,MACnC;AAAA,MAEA,IAAW,iBAAiB;AAC1B,eAAO,KAAK,gBAAgB,QAAQ;AAAA,MACtC;AAAA,MAEA,YAAY,cAA4B;AACtC,aAAK,gBAAgB;AACrB,aAAK,oBAAoB,IAAI,iBAAiB,KAAK,aAAa;AAEhE,aAAK;AAAA,MACP;AAAA,MAEA,MAAM,eAAe;AACnB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,gBAAgB;AAClB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,cAAc,YAAiC;AACjD,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,IAAW,mBAAmB;AAC5B,eAAO,KAAK;AAAA,MACd;AAAA,MAEO,mBAAmB,QAAoC;AAC5D,aAAK,QAAQ;AAEb,aAAK,gBAAgB,SAAS,MAAM,MAAM;AAAA,MAC5C;AAAA,MAEA,MAAM,aAAa;AACjB,cAAM,KAAK,MAAM;AAAA,MACnB;AAAA,MAEA,MAAM,QAAQ,OAAiB;AAAA,MAAC;AAAA,MAEhC,MAAM,YAAY;AAChB,YAAI,CAAC,KAAK,iBAAiB,KAAK,cAAc,sBAAsB,QAAQ,CAAC,KAAK,UAAU;AAC1F;AAAA,QACF;AAEA,cAAM,kBAAkB,KAAK,SAAS;AACtC,cAAM,mBAAmB,KAAK,SAAS,OAAO;AAE9C,cAAM,eAAe,MAAM,gBAAgB,4BAA4B,KAAK,aAAa;AAEzF,YAAI,CAAC,cAAc;AACjB,cAAI,MAAM,mCAAmC;AAC7C;AAAA,QACF;AAEA,cAAM,cAAc,aAAa,aAAa,eAAe;AAE7D,cAAM,YAAY,aAAa;AAE/B,cAAM,gBAAgB,uBAAuB,KAAK,eAAe,KAAK,UAAU,aAAa,gBAAgB;AAE7G,cAAM,YAAY,QAAQ;AAE1B,cAAM,KAAK,SAAS,KAAK;AAEzB,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,qBAAqB;AACzB,cAAM,KAAK,KAAK,cAAc;AAE9B,YACE,MAAM,QACN,GAAG,6BAA6B,QAChC,KAAK,cAAc,+CACnB;AACA,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AAEA,YAAI,CAAC,KAAK,UAAU;AAClB;AAAA,QACF;AAEA,YAAI,cAAc,GAAG,QAAQ;AAE7B,YAAI,gBAAgB,QAAW;AAC7B,wBAAc,MAAM,GAAG,QAAQ,aAAa;AAAA,QAC9C;AAEA,YAAI,CAAC,aAAa;AAChB;AAAA,QACF;AAEA,cAAM,qBAAqB,MAAM,GAAG,0BAA0B,OAAO;AAErE,YAAI,oBAAoB;AACtB,gBAAM,gBAAgB,cAAc,KAAK,eAAe,KAAK,UAAU,GAAG,QAAQ,UAAU;AAAA,QAC9F;AAAA,MACF;AAAA,MAEA,uBAAuB,SAAiB,MAAc;AACpD,gBAAQ,SAAS;AAAA,UACf,KAAK;AACH,gBAAI,MAAM;AAEV,gBAAI;AACF,oBAAM,KAAK,MAAM,IAAI;AAAA,YACvB,SAAS,GAAG;AAAA,YAAC;AAEb,gBAAI,KAAK;AACP,mBAAK,kBAAkB,YAAY,GAAG;AAAA,YACxC;AAEA;AAAA,UAEF,KAAK;AACH,gBAAI,QAAQ,IAAI;AAChB;AAAA,UAEF,KAAK;AACH,iBAAK,kCAAqD;AAE1D,gBAAI,CAAC,KAAK,cAAc,2CAA2C;AACjE,mBAAK,cAAc,4CAA4C;AAC/D,mBAAK,cAAc,KAAK;AAAA,YAC1B;AACA;AAAA,UAEF,KAAK;AACH,iBAAK,wCAA0D;AAC/D;AAAA,QACJ;AAAA,MACF;AAAA,MAEA,MAAM,aAAa,WAAyC;AAC1D,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,WAAW,SAAiB;AAChC,YAAI,CAAC,gBAAgB,iBAAiB,UAAU,SAAS;AAEvD,cAAI,WAAW,yCAAyC,UAAU,MAAM;AAExE,cAAI,QAAQ,QAAQ,MAAM,KAAK,GAAG;AAChC,mBAAO,KAAK,UAAU;AAAA,cACpB,YAAY;AAAA,cACZ,eAAe,oBAAoB;AAAA,YACrC,CAAC;AAAA,UACH,OAAO;AACL,mBAAO,KAAK,UAAU;AAAA,cACpB,YAAY;AAAA,cACZ,eAAe,qBAAqB;AAAA,cACpC,UAAU;AAAA,gBACR,GAAG;AAAA,gBACH,GAAG;AAAA,gBACH,GAAG;AAAA,cACL;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,OAAO;AACL,cAAI,SAAS,MAAM,gBAAgB,qDAAoD,OAAO;AAE9F,cAAI,WAAW,QAAW;AACxB,iBAAK,iBAAiB,MAAM;AAAA,UAC9B;AAEA,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,iBAAiB,QAAgB;AAC/B,YAAI,QAAQ;AACV,cAAI,OAAO,QAAQ,GAAG,KAAK,GAAG;AAC5B,gBAAI;AACF,oBAAM,kBAAwC,KAAK,MAAM,MAAM;AAE/D,kBAAI,gBAAgB,eAAe;AACjC,qBAAK,cAAc,mBAAmB,qBAAqB,gBAAgB,aAAa;AACxF;AAAA,cACF;AAAA,YACF,SAAS,GAAQ;AACf,kBAAI,KAAK,CAAC;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AACA,aAAK,cAAc,mBAAmB,qBAAqB,MAAM;AAAA,MACnE;AAAA,MAEA,aAAa;AACX,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,gBAAgB,MAAqB;AACzC,YAAI,YAAY;AAEhB,YAAI,KAAK,SAAS;AAChB,eAAK,WAAW,KAAK;AAErB,gBAAM,KAAK,mBAAmB;AAAA,QAChC;AAEA,YAAI,KAAK,WAAW;AAClB,sBAAY,MAAM,KAAK,UAAU;AAAA,QACnC;AAEA,cAAM,KAAK,MAAM;AAEjB,eAAO;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,OAAO;AAAA,MAAC;AAAA,MAEd,MAAM,QAAQ;AACZ,YAAI,CAAC,gBAAgB,iBAAiB,UAAU,SAAS;AACvD,eAAK,kCAAqD;AAAA,QAC5D,WACE,KAAK,0BACL,KAAK,2BACL,KAAK,iCACL;AACA,eAAK,uCAA0D;AAE/D,0BAAgB,6DAAwD,EAAE,EAAE;AAAA,YAC1E,OAAO,WAA+B;AACpC,oBAAM,mCAAmC,MAAM,gBAAgB;AAAA;AAAA,gBAE7D,KAAK,cAAc;AAAA,cACrB;AAEA,oBAAM,iCAAiC,MAAM,gBAAgB;AAAA;AAAA,gBAE3D,KAAK,cAAc;AAAA,cACrB;AAEA,kBACE,kCACA,+BAA+B,SAAS,KACxC,KAAK,cAAc,mBACnB;AACA,qBAAK,cAAc,KAAK,cAAc,kBAAkB,8BAA8B;AAEtF,qBAAK,oBAAoB,SAAS,MAAM,KAAK,WAAW;AAAA,cAC1D;AAEA,kBACE,oCACA,iCAAiC,SAAS,KAC1C,KAAK,cAAc,mBACnB;AACA,qBAAK,gBAAgB,KAAK,cAAc,kBAAkB,gCAAgC;AAE1F,qBAAK,sBAAsB,SAAS,MAAM,KAAK,aAAa;AAAA,cAC9D;AAEA,mBAAK,sCAAyD;AAAA,YAChE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC7TA;AAAA;AAAA,qBAAAC;AAAA,EAAA;AAAA;AAAA,IAeYA,cAQS;AAvBrB;AAAA;AAAA;AAGA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AAEO,IAAKA,eAAL,kBAAKA,iBAAL;AACL,MAAAA,0BAAA,aAAU,KAAV;AACA,MAAAA,0BAAA,WAAQ,KAAR;AACA,MAAAA,0BAAA,mBAAgB,KAAhB;AACA,MAAAA,0BAAA,aAAU,KAAV;AACA,MAAAA,0BAAA,aAAU,KAAV;AALU,aAAAA;AAAA,uBAAA;AAQZ,IAAqB,UAArB,MAA6B;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA,IAAI,cAAc;AAChB,eAAO,KAAK,SAAS,iBAAqB,KAAK,SAAS;AAAA,MAC1D;AAAA,MAEA,YAAY,MAAcC,QAAc;AACtC,aAAK,OAAO;AACZ,aAAK,cAAcA;AACnB,aAAK,WAAW,iBAAiB,gBAAgB,IAAI;AACrD,aAAK,OAAO,KAAK,qBAAqBA,MAAI;AAAA,MAC5C;AAAA,MAEA,OAAO,4CAA4C,UAA+B;AAChF,mBAAW,WAAW,UAAU;AAC9B,cAAI,QAAQ,wBAAwB;AAClC,uBAAW,SAAS,QAAQ,wBAAwB;AAClD,kBAAI,MAAM,SAAS,SAAS,oCAAoC;AAC9D;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,wBAAwB;AAAA,YACtB,EAAE,MAAM,SAAS,oCAAoC,SAAS,SAAS,sCAAsC;AAAA,UAC/G;AAAA,UACA,wBAAwB;AAAA,YACtB,EAAE,MAAM,SAAS,oCAAoC,SAAS,SAAS,sCAAsC;AAAA,UAC/G;AAAA,QACF,CAAC;AAED,eAAO;AAAA,MACT;AAAA,MAEA,qBAAqBA,QAAc;AACjC,cAAM,OAAO,iBAAiB,gBAAgBA,MAAI;AAElD,gBAAQ,MAAM;AAAA,UACZ,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AACH,mBAAO;AAAA,UAET;AACE,mBAAO;AAAA,QACX;AAAA,MACF;AAAA,MAEA,MAAM,WAAW,cAA4B,MAAa;AACxD,aAAK,OAAO;AAEZ,cAAM,cAAc,KAAK,aAAa,WAAW,KAAK,OAAO,cAAc;AAE3E,cAAM,oBAAoB,MAAM,YAAY,OAAO;AAEnD,YAAI;AAEJ,YAAI,mBAAmB;AACrB,cAAI,CAAC,YAAY,iBAAiB;AAChC,kBAAM,YAAY,YAAY;AAAA,UAChC;AAEA,gBAAM,UAAU,YAAY;AAE5B,cAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,kBAAM,mBAAmB,QAAQ,QAAQ,0BAA0B;AACnE,gBAAI,gBAAgB,QAAQ,QAAQ,iBAAiB;AAErD,gBAAI,iBAAiB,GAAG;AACtB,kBAAI,qBAAqB,gBAAgB,GAAG;AAC1C,gCAAgB,QAAQ,QAAQ,mBAAmB,gBAAgB,EAAE;AAAA,cACvE;AAEA,kBAAI,iBAAiB,GAAG;AACtB,sBAAM,gBAAgB,QAAQ,QAAQ,aAAa,aAAa;AAEhE,oBAAI,gBAAgB,eAAe;AACjC,wBAAM,cAAc,QAAQ,YAAY,MAAM,aAAa;AAC3D,sBAAI,cAAc,iBAAiB,cAAc,eAAe;AAC9D,0BAAM,cAAc,QAAQ,UAAU,gBAAgB,IAAI,WAAW;AAErE,wBAAI;AACF,sCAAgB,KAAK,MAAM,WAAW;AAAA,oBACxC,SAAS,GAAG;AAAA,oBAAC;AAEb,wBAAI,eAAe;AACjB,2BAAK,aAAa;AAAA,oBACpB;AAGA,wBAAI,iBAAiB,cAAc,qBAAqB,UAAU,SAAS;AACzE,sCAAgB;AAAA,oBAClB;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,CAAC,eAAe;AAClB,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY;AAAA,UACzB;AAEA,cAAI,KAAK,WAAW,KAAK,mBAAmB,YAAY;AACtD,gBAAI,oBAAoB;AAExB,gBAAI,CAAC,KAAK,sBAAsB;AAC9B,oBAAM,aAAa,IAAI,WAAW;AAElC,yBAAW,cAAc,KAAK,sBAAsB;AAEpD,oBAAM,WAAW,mBAAmB,KAAK,SAAS,KAAK,IAAI;AAE3D,yBAAW,gBAAgB;AAC3B,mBAAK,uBAAuB;AAAA,YAC9B;AAEA,gCAAoB,KAAK,qBAAqB;AAE9C,kBAAM,cAAc,IAAIC,SAAQ,cAAc,KAAK,MAAM,IAAI;AAC7D,wBAAY,iBAAiB,iBAAiB;AAE9C,kBAAM,YAAY,2BAA2B;AAE7C,kBAAM,MAAM,YAAY;AAExB,kBAAM,IAAI,mBAAmB;AAE7B,kBAAM,OAAO,MAAM,KAAK,QAAQ;AAEhC,kBAAM,aAAa,IAAI,cAAc,KAAK,MAAM,KAAK,qBAAqB,IAAI;AAE9E,wBAAY,WAAW,mCAA0C;AAEjE,kBAAM,YAAY,YAAY;AAE9B,iBAAK,aAAa;AAElB,4BAAgB,IAAI,cAAc,KAAK,MAAM,KAAK,qBAAqB,IAAI;AAAA,UAC7E;AAAA,QACF;AAEA,YAAI,eAAe;AACjB,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MAEA,kBAAqC;AACnC,cAAM,SAAgD,CAAC;AACvD,cAAM,SAAgD,CAAC;AAEvD,YAAI,KAAK,QAAQ,KAAK,KAAK,OAAO;AAChC,mBAAS,IAAI,GAAG,IAAI,KAAK,KAAK,MAAM,QAAQ,KAAK;AAC/C,kBAAM,OAAO,KAAK,KAAK,MAAM,CAAC;AAE9B,gBAAI,KAAK,QAAQ,UAAU,KAAK,QAAQ,KAAK,KAAK,KAAK,OAAO,KAAK,MAAM,UAAU;AACjF,oBAAM,MAAM,KAAK,iBAAiB,KAAK,CAAC;AAExC,kBAAI,KAAK;AACP,uBAAO,KAAK,GAAG;AAAA,cACjB;AAAA,YACF,WAAW,KAAK,QAAQ,UAAU,KAAK,QAAQ,MAAM,KAAK,KAAK,OAAO,KAAK,MAAM,UAAU;AACzF,oBAAM,MAAM,KAAK,iBAAiB,KAAK,CAAC;AAExC,kBAAI,KAAK;AACP,uBAAO,KAAK,GAAG;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,cAAM,UAA6B;AAAA,UACjC,MAAM,KAAK;AAAA,UACX,MAAM,KAAK,MAAM;AAAA,UACjB,wBAAwB;AAAA,UACxB,wBAAwB;AAAA,QAC1B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,iBAAiB,iBAAyB;AACxC,cAAM,WAAW,UAAU,WAAW,iBAAiB,KAAK,CAAC;AAE7D,YAAI,SAAS,WAAW,GAAG;AACzB,iBAAO;AAAA,QACT;AAEA,cAAM,aAAa,SAAS,CAAC,EAAE,MAAM,GAAG;AAExC,YAAI,WAAW,WAAW,GAAG;AAC3B,iBAAO;AAAA,QACT;AAEA,cAAM,mBAAmB,CAAC;AAC1B,YAAI;AACF,2BAAiB,KAAK,SAAS,WAAW,CAAC,CAAC,CAAC;AAC7C,2BAAiB,KAAK,SAAS,WAAW,CAAC,CAAC,CAAC;AAC7C,2BAAiB,KAAK,SAAS,WAAW,CAAC,CAAC,CAAC;AAAA,QAC/C,SAAS,GAAG;AAAA,QAAC;AAEb,YAAI,iBAAiB,WAAW,GAAG;AACjC,iBAAO;AAAA,QACT;AAEA,eAAO,EAAE,MAAM,SAAS,CAAC,GAAG,SAAS,iBAAiB;AAAA,MACxD;AAAA,MAEA,QAAQ,UAAkB,gBAA0B;AAClD,cAAM,eAAe,KAAK,KAAK,YAAY;AAC3C,cAAM,eAAe,KAAK,SAAS,YAAY;AAE/C,mBAAW,SAAS,YAAY;AAEhC,YACG,aAAa,YAAY,MAAM,aAC7B,mBAAmB,UACjB,mBAAmB,SAAS,KAAK,SAAS,iBAAqB,KAAK,SAAS,0BAC7E,mBAAmB,SAAS,KAAK,SAAS,iBAAqB,KAAK,SAAS,0BAClF,iBAAiB,UACjB;AACA,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AC3QA,IAMAC,qBAYqB;AAlBrB;AAAA;AAAA;AAGA;AACA;AACA;AACA,IAAAA,sBAAgC;AAChC;AAGA;AACA;AAGA;AACA;AAGA,IAAqB,6BAArB,MAAsE;AAAA,MAC5D;AAAA,MACR;AAAA,MACQ,kBAAkB,IAAI,oCAAwD;AAAA,MAC9E,eAAe,IAAI,oCAAwD;AAAA,MAC3E;AAAA,MACA;AAAA,MAER;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEQ,sBAAsB,IAAI,oCAAqC;AAAA,MAC/D,wBAAwB,IAAI,oCAAqC;AAAA,MACjE,aAAa,IAAI,oCAA+C;AAAA,MAExE,IAAW,qBAAqB;AAC9B,eAAO,KAAK,oBAAoB,QAAQ;AAAA,MAC1C;AAAA,MAEA,IAAW,uBAAuB;AAChC,eAAO,KAAK,sBAAsB,QAAQ;AAAA,MAC5C;AAAA,MAEA,IAAW,YAAY;AACrB,eAAO,KAAK,WAAW,QAAQ;AAAA,MACjC;AAAA,MAEA,IAAI,iBAAiB;AACnB,eAAO;AAAA,MACT;AAAA,MAEA,IAAW,cAAc;AACvB,eAAO,KAAK,aAAa,QAAQ;AAAA,MACnC;AAAA,MAEA,IAAW,iBAAiB;AAC1B,eAAO,KAAK,gBAAgB,QAAQ;AAAA,MACtC;AAAA,MAEA,YAAY,cAA4B;AACtC,aAAK,gBAAgB;AACrB,aAAK,oBAAoB,IAAI,iBAAiB,KAAK,aAAa;AAEhE,aAAK;AAAA,MACP;AAAA,MAEA,MAAM,eAAe;AACnB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,gBAAgB;AAClB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,cAAc,YAAiC;AACjD,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,IAAW,mBAAmB;AAC5B,eAAO,KAAK;AAAA,MACd;AAAA,MAEO,mBAAmB,QAAoC;AAC5D,aAAK,QAAQ;AAEb,aAAK,gBAAgB,SAAS,MAAM,MAAM;AAAA,MAC5C;AAAA,MAEA,MAAM,aAAa;AACjB,cAAM,KAAK,MAAM;AAAA,MACnB;AAAA,MAEA,MAAM,QAAQ,OAAgC;AAC5C;AAAA,MACF;AAAA,MAEA,MAAM,WAAW,SAA8C;AAC7D,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,aAAa,WAAwD;AACzE,eAAO;AAAA,MACT;AAAA,MAEA,uBAAuB,SAAiB,MAAc;AAAA,MAAC;AAAA,MAEvD,MAAM,YAAY;AAChB,YAAI,CAAC,KAAK,iBAAiB,KAAK,cAAc,sBAAsB,QAAQ,CAAC,KAAK,UAAU;AAC1F;AAAA,QACF;AAEA,cAAM,kBAAkB,KAAK,SAAS;AACtC,cAAM,mBAAmB,KAAK,SAAS,OAAO;AAE9C,cAAM,eAAe,MAAM,gBAAgB,4BAA4B,KAAK,aAAa;AAEzF,YAAI,CAAC,cAAc;AACjB,cAAI,MAAM,mCAAmC;AAC7C;AAAA,QACF;AAEA,cAAM,cAAc,aAAa,aAAa,eAAe;AAE7D,cAAM,YAAY,aAAa;AAE/B,cAAM,gBAAgB,uBAAuB,KAAK,eAAe,KAAK,UAAU,aAAa,gBAAgB;AAE7G,cAAM,YAAY,QAAQ;AAE1B,cAAM,KAAK,SAAS,KAAK;AAEzB,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,qBAAqB;AACzB,cAAM,mBAAmB,KAAK,cAAc;AAE5C,YACE,qBAAqB,UACrB,iBAAiB,WAAW,QAC5B,iBAAiB,6BAA6B,QAC9C,KAAK,cAAc,+CACnB;AACA,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AAEA,YAAI,CAAC,KAAK,UAAU;AAClB;AAAA,QACF;AAEA,YAAI,cAAc,iBAAiB,QAAQ;AAE3C,YAAI,gBAAgB,QAAW;AAC7B,wBAAc,MAAM,iBAAiB,QAAQ,aAAa;AAAA,QAC5D;AAEA,YAAI,CAAC,aAAa;AAChB;AAAA,QACF;AAEA,cAAM,qBAAqB,MAAM,iBAAiB,0BAA0B,OAAO;AAEnF,YAAI,oBAAoB;AACtB,gBAAM,gBAAgB,cAAc,KAAK,eAAe,KAAK,UAAU,iBAAiB,QAAQ,UAAU;AAAA,QAC5G;AAAA,MACF;AAAA,MAEA,aAAa;AACX,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,gBAAgB,MAAqB;AACzC,YAAI,YAAY;AAEhB,YAAI,KAAK,SAAS;AAChB,eAAK,WAAW,KAAK;AAErB,gBAAM,KAAK,mBAAmB;AAAA,QAChC;AAEA,YAAI,KAAK,WAAW;AAClB,sBAAY,MAAM,KAAK,UAAU;AAAA,QACnC;AAEA,cAAM,KAAK,MAAM;AAEjB,eAAO;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,OAAO;AAAA,MAAC;AAAA,MAEd,MAAM,QAAQ;AACZ,YAAI,CAAC,gBAAgB,iBAAiB,UAAU,SAAS;AACvD,eAAK,kCAAqD;AAAA,QAC5D,WACE,KAAK,0BACL,KAAK,2BACL,KAAK,iCACL;AACA,eAAK,uCAA0D;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AChNA,IAgBqB;AAhBrB;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAUA,IAAqB,eAArB,cAA0C,SAA0B;AAAA,MAClE;AAAA,MACA;AAAA,MACA;AAAA,MAEA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAW;AACb,YAAIC,SAAO,KAAK,cAAc;AAE9B,YAAI,CAACA,OAAK,SAAS,gBAAgB,eAAe,KAAK,CAACA,OAAK,SAAS,GAAG,GAAG;AAC1E,UAAAA,UAAQ,gBAAgB;AAAA,QAC1B;AAEA,eAAOA,SAAO,KAAK;AAAA,MACrB;AAAA,MAEA,IAAI,eAA+B;AACjC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,kBAA2B;AAC7B,eAAO,KAAK,qBAAqB,QAAQ,KAAK,YAAY;AAAA,MAC5D;AAAA,MAEA,YAAY,cAA8B,YAAoB;AAC5D,cAAM;AAEN,aAAK,gBAAgB;AACrB,aAAK,QAAQ;AAAA,MACf;AAAA,MAEA,MAAM,iBAAgC;AACpC,YAAI,OAAO;AAEX,YAAI,gBAAoC;AAExC,YAAI,QAA4B;AAEhC,YAAI;AACF,0BAAgB,MAAM,gBAAgB,iCAA0C,KAAK,QAAQ;AAE7F,cAAI,eAAe;AACjB,mBAAO,KAAK,MAAM,aAAa;AAC/B,oBAAQ,KAAK,MAAM,KAAK,KAAK;AAAA,UAC/B;AAAA,QACF,SAAS,GAAG;AACV,cAAI,KAAK,oCAAoC,KAAK,WAAW,OAAO,aAAa;AAAA,QACnF;AAEA,YAAI,KAAK,wBAAwB,QAAQ,SAAS,QAAQ,KAAK,sBAAsB;AACnF,gBAAM,KAAK,0BAA0B;AAAA,QACvC;AAAA,MACF;AAAA,MAEA,MAAM,SAA2B;AAC/B,cAAM,SAAS,MAAM,gBAAgB,qCAA4C,KAAK,QAAQ;AAE9F,eAAO,WAAW;AAAA,MACpB;AAAA,MAEA,MAAM,YAAY,OAA+B;AAC/C,YAAI,SAAS,KAAK,qBAAqB,MAAM;AAC3C,gBAAM,WAAW,iBAAiB,sBAAsB,KAAK,KAAK;AAElE,cAAI,iCAAsC;AAExC,kBAAM,aAAa,MAAM,gBAAgB,+CAAoD,KAAK,QAAQ;AAE1G,gBAAI,sBAAsB,aAAa;AACrC,mBAAK,WAAW,IAAI,WAAW,UAAyB;AAAA,YAC1D,WAAW,eAAe,QAAW;AACnC,mBAAK,WAAW;AAAA,YAClB,OAAO;AACL,mBAAK,WAAW;AAAA,YAClB;AAAA,UACF,OAAO;AACL,kBAAM,SAAS,MAAM,gBAAgB,iDAAkD,KAAK,QAAQ;AAEpG,gBAAI,WAAW,QAAW;AACxB,mBAAK,WAAW;AAAA,YAClB,OAAO;AACL,mBAAK,WAAW;AAAA,YAClB;AAAA,UAGF;AAEA,eAAK,oBAAoB,oBAAI,KAAK;AAAA,QACpC;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,WAAW,YAAwC,YAA6B,UAAmB;AACjG,cAAM,WAAW,iBAAiB,iBAAiB,KAAK,UAAU,UAAU;AAC5E,YAAI,eAAe,MAAM;AACvB,cAAI,KAAK,8BAA8B,KAAK,mBAAmB;AAAA,QACjE;AAEA,YAAI,UAAU;AACZ,iBAAO;AAAA,QACT;AAEA,YAAI,CAAC,KAAK,mBAAmB;AAC3B,eAAK,oBAAoB,oBAAI,KAAK;AAClC,eAAK,oBAAoB,IAAI,KAAK,KAAK,kBAAkB,QAAQ,IAAI,CAAC;AAAA,QACxE;AAEA,YAAI,aAAa,KAAK;AAEtB,aAAK,WAAW;AAEhB,aAAK,mBAAmB,YAAY,YAAY,QAAQ;AAExD,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,cAA6B;AACjC,YAAI,KAAK,aAAa,QAAQ,UAAU;AACtC,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAC9C;AAEA,YAAI,KAAK,WAAW,MAAM;AACxB,eAAK,aAAa,aAAa;AAE/B,gBAAM,WAAW,iBAAiB,sBAAsB,KAAK,KAAK;AAElE,cAAI,iCAAsC;AAGxC,kBAAM,gBAAgB,iDAAqD;AAAA,cACzE,MAAM,KAAK;AAAA,cACX,SAAS,KAAK;AAAA,YAChB,CAAC;AAAA,UACH,OAAO;AAGL,kBAAM,gBAAgB,mDAAmD;AAAA,cACvE,MAAM,KAAK;AAAA,cACX,SAAS,KAAK;AAAA,YAChB,CAAC;AAAA,UACH;AAAA,QACF;AAEA,aAAK,oBAAoB,oBAAI,KAAK;AAElC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,eAAe,sBAAkD;AACrE,YAAI,KAAK,aAAa,QAAQ,UAAU;AACtC,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAC9C;AAEA,YAAI,yBAAyB,MAAM;AACjC,eAAK,cAAc,YAAY,IAAI;AAAA,QACrC;AAEA,aAAK,aAAa,KAAK,QAAQ;AAE/B,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,OAAO,wBAAkD;AAC7D,cAAM,gBAAgB,iBAAiB,cAAc,sBAAsB;AAC3E,cAAM,cAAc,iBAAiB,YAAY,sBAAsB;AAEvE,YAAI,YAAY,SAAS,GAAG;AAC1B,gBAAM,IAAI,MAAM,0BAA0B;AAAA,QAC5C;AAEA,cAAM,kBAAkB,MAAM,KAAK,cAAc,QAAQ,oCAAoC,aAAa;AAE1G,YAAI,gBAAgB,MAAM,WAAW,MAAM,QAAW;AACpD,gBAAM,IAAI,MAAM,gCAAgC;AAAA,QAClD;AAEA,cAAM,KAAK,YAAY,KAAK;AAE5B,cAAM,eAAe,KAAK;AAE1B,aAAK,QAAQ;AACb,aAAK,gBAAgB;AAErB,aAAK,WAAW,oBAAI,KAAK;AAEzB,QAAC,gBAAmC,iBAAiB,IAAI;AAEzD,aAAK,aAAa,YAAY;AAE9B,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,aAAaA,QAAc;AAC/B,wBAAgB,qDAAoDA,MAAI;AAAA,MAC1E;AAAA,IACF;AAAA;AAAA;;;ACvNA,IAUqB;AAVrB;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAqB,iBAArB,MAAqB,wBAAuB,WAA8B;AAAA,MAChE;AAAA,MACA;AAAA,MAER;AAAA,MACA;AAAA,MACQ;AAAA,MACA;AAAA,MAER,IAAI,UAA2B;AAC7B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,eAAsC;AACxC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAW;AACb,YAAIC,SAAO,KAAK;AAEhB,YAAI,CAACA,OAAK,SAAS,gBAAgB,eAAe,KAAK,CAACA,OAAK,SAAS,GAAG,GAAG;AAC1E,UAAAA,UAAQ,gBAAgB;AAAA,QAC1B;AAEA,eAAOA,SAAO,KAAK;AAAA,MACrB;AAAA,MAEA,YAAY,SAA0B,cAAqC,YAAoB,YAAoB;AACjH,cAAM;AAEN,aAAK,WAAW;AAChB,aAAK,gBAAgB;AAErB,aAAK,QAAQ;AACb,aAAK,QAAQ;AAEb,aAAK,UAAU,CAAC;AAChB,aAAK,QAAQ,CAAC;AAAA,MAChB;AAAA,MAEA,MAAM,iBAAgC;AAAA,MAEtC;AAAA,MAEA,WAAW,MAA4B;AACrC,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AAExD,YAAI,CAAC,UAAU,oBAAoB,SAAS,GAAG;AAC7C,cAAI,iBAAiB,SAAS;AAC9B,gBAAM,IAAI,MAAM;AAAA,QAClB;AAEA,YAAI,WAAW,KAAK,MAAM,SAAS;AAEnC,YAAI,YAAY,MAAM;AACpB,qBAAW,IAAI,aAAa,MAAM,IAAI;AAEtC,eAAK,MAAM,SAAS,IAAI;AAAA,QAC1B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,YAAY,MAAa;AACvB,cAAM,YAAY,iBAAiB,iBAAiB,KAAK,IAAI;AAE7D,YAAI,UAAU,oBAAoB,SAAS,GAAG;AAC5C,gBAAM,WAAW,KAAK,MAAM,SAAS;AAErC,cAAI,OAAO,aAAa,MAAM,oBAAoB;AAElD,eAAK,MAAM,SAAS,IAAI;AAExB,eAAK,QAAQ,kBAAkB,KAAK,sBAAsB,KAAK,IAAI;AAAA,QACrE;AAAA,MACF;AAAA,MAEA,iBAAiB,MAAoB;AACnC,cAAM,YAAY,iBAAiB,iBAAiB,KAAK,IAAI;AAC7D,YAAI,UAAU,oBAAoB,SAAS,GAAG;AAC5C,eAAK,MAAM,SAAS,IAAI;AAAA,QAC1B;AAAA,MACF;AAAA,MAEA,aAAa,MAA8B;AACzC,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AAExD,YAAI,CAAC,UAAU,oBAAoB,SAAS,GAAG;AAC7C,cAAI,iBAAiB,SAAS;AAC9B,gBAAM,IAAI,MAAM;AAAA,QAClB;AAEA,YAAI,aAAa,KAAK,QAAQ,SAAS;AAEvC,YAAI,CAAC,YAAY;AACf,uBAAa,IAAI,gBAAe,KAAK,UAAU,MAAM,KAAK,UAAU,IAAI;AAExE,eAAK,QAAQ,SAAS,IAAI;AAAA,QAC5B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,SAA2B;AAC/B,YAAI,KAAK,QAAQ,cAAc,MAAM;AACnC,gBAAM,MAAM,MAAM,KAAK,QAAQ,aAAa;AAE5C,cAAI,CAAC,KAAK;AACR,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,YAAI,KAAK,QAAQ,cAAc,OAAO;AACpC,iBAAO;AAAA,QACT;AAEA,cAAM,SAAS,MAAM,gBAAgB,iDAAkD,KAAK,QAAQ;AAEpG,eAAO,WAAW;AAAA,MACpB;AAAA,MAEA,MAAM,mBAAqC;AACzC,cAAM,SAAS,MAAM,gBAAgB,iDAAkD,KAAK,QAAQ;AAEpG,YAAI,WAAW,QAAQ;AACrB,eAAK,mBAAmB;AACxB,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,0BAA4C;AAChD,cAAM,IAAI,MAAM,wCAAwC,KAAK,WAAW,oBAAoB;AAAA,MAC9F;AAAA,MAEA,MAAM,eAAiC;AACrC,YAAI,OAAO,KAAK,SAAS,YAAY,GAAG,IAAI,GAAG,8BAA8B,KAAK,QAAQ;AAE1F,cAAM,SAAS,MAAM,gBAAgB,iDAAkD,KAAK,QAAQ;AAEpG,YAAI,WAAW,QAAQ;AACrB,cAAI;AACF,kBAAM,gBAAgB,mCAA2C,KAAK,QAAQ;AAAA,UAChF,SAAS,GAAG;AACV,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,2BAA2B,QAAwB;AACjD,cAAM,YAAY,iBAAiB,iBAAiB,OAAO,IAAI;AAE/D,YAAI,CAAC,UAAU,oBAAoB,SAAS,GAAG;AAC7C,cAAI,iBAAiB,SAAS;AAC9B,gBAAM,IAAI,MAAM;AAAA,QAClB;AAEA,aAAK,QAAQ,SAAS,IAAI;AAAA,MAC5B;AAAA,MAEA,MAAM,OAAO,wBAAkD;AAC7D,cAAM,cAAc,KAAK;AAEzB,cAAM,gBAAgB,iBAAiB,cAAc,sBAAsB;AAC3E,cAAM,gBAAgB,iBAAiB,YAAY,sBAAsB;AAEzE,YAAI,cAAc,SAAS,GAAG;AAC5B,gBAAM,IAAI,MAAM,0BAA0B;AAAA,QAC5C;AAEA,YAAI,KAAK,aAAa,sBAAsB,GAAG;AAC7C,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,kBAAkB,MAAM;AAC/B,gBAAM,kBAAkB,MAAM,KAAK,cAAc,QAAQ,oCAAoC,aAAa;AAE1G,cAAI,gBAAgB,QAAQ,aAAa,MAAM,QAAW;AACxD,kBAAM,IAAI,MAAM,kCAAkC;AAAA,UACpD;AAEA,gBAAMC,eACH,gBAAmC,WAAW,gBAAgB,kBAAkB;AAInF,gBAAMC,UAAS,MAAM,gBAAgB;AAAA;AAAA,YAEnC,cAAc,MAAMD;AAAA,UACtB;AAEA,cAAIC,YAAW,QAAQ;AACrB,mBAAO;AAAA,UACT;AAGA,gBAAM,sBAAsB,KAAK;AAEjC,eAAK,cAAc,gCAAgC,IAAI;AAEvD,eAAK,gBAAgB;AAErB,eAAK,QAAQ;AACb,UAAC,gBAAmC,2BAA2B,IAAI;AAGnE,eAAK,kBAAkB;AAAA,YACrB,QAAQ;AAAA,YACR;AAAA,YACA,gBAAgB,KAAK;AAAA,UACvB,CAAC;AAED,iBAAO;AAAA,QACT;AAEA,aAAK,QAAQ;AAEb,cAAM,cAAc,KAAK;AAEzB,cAAM,SAAS,MAAM,gBAAgB;AAAA;AAAA,UAEnC,cAAc,MAAM;AAAA,QACtB;AAEA,eAAO,WAAW;AAAA,MACpB;AAAA,MAEA,MAAM,WAAW,MAA8B;AAC7C,eAAO,KAAK,WAAW,IAAI;AAAA,MAC7B;AAAA,MAEA,MAAM,KAAK,OAAgC;AACzC,YAAI,KAAK,qBAAqB,QAAQ,CAAC,OAAO;AAC5C,iBAAO,KAAK;AAAA,QACd;AAGA,cAAM,YAAY,MAAM,gBAAgB,uCAA6C,KAAK,QAAQ;AAElG,YAAI,cAAc,QAAW;AAC3B,gBAAM,UAAU,KAAK,MAAM,SAAS;AAEpC,cAAI,SAAS;AACX,uBAAW,oBAAoB,SAAS;AACtC,kBAAI,WAAW,KAAK;AAEpB,kBAAI,CAAC,SAAS,SAAS,gBAAgB,eAAe,GAAG;AACvD,4BAAY,gBAAgB;AAAA,cAC9B;AAEA,0BAAY;AAEZ,kBAAI,OAAO;AAEX,kBAAI,gBAAoC;AACxC,kBAAI,QAA4B;AAChC,kBAAI;AACF,gCAAgB,MAAM,gBAAgB,iCAA0C,QAAQ;AAExF,oBAAI,eAAe;AACjB,yBAAO,KAAK,MAAM,aAAa;AAC/B,0BAAQ,KAAK,MAAM,KAAK,KAAK;AAAA,gBAC/B;AAAA,cACF,SAAS,GAAG;AACV,oBAAI,KAAK,oCAAoC,mBAAmB,OAAO,aAAa;AAAA,cACtF;AAEA,kBAAI,MAAM;AACR,oBAAI,KAAK,eAAe,CAAC,iBAAiB,kBAAkB,gBAAgB,GAAG;AAC7E,uBAAK,aAAa,gBAAgB;AAAA,gBACpC,WAAW,KAAK,UAAU,iBAAiB,aAAa,QAAQ,GAAG;AACjE,wBAAM,OAAO,KAAK,WAAW,gBAAgB;AAC7C,uBAAK,uBAAuB;AAE5B,sBAAI,KAAK,OAAO;AACd,yBAAK,iBAAiB,IAAI,KAAK,KAAK,KAAK;AAAA,kBAC3C;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,aAAK,wBAAwB;AAE7B,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA;AAAA;;;AChTA,IAOqB;AAPrB;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA,IAAqB,kBAArB,MAAqB,yBAAwB,YAAgC;AAAA,MAC3E;AAAA,MACA;AAAA,MAEA;AAAA,MAEA,OAAO,kBAAkB;AAAA,MAEzB,OAAO,mBAAwD,CAAC;AAAA,MAEhE,YAAYC,QAAc,MAAc;AACtC,cAAM;AAEN,aAAK,OAAOA;AAEZ,YAAI,OAAO,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,WAAW,GAAG,GAAG,0BAA0BA,MAAI;AAE5F,yBAAgB,iBAAiB,KAAK,IAAI,IAAI;AAC9C,aAAK,OAAO;AAEZ,aAAK,aAAa,IAAI,eAAe,MAAM,MAAMA,QAAM,IAAI;AAAA,MAC7D;AAAA,MAEA,aAAoB,uBAAuBA,QAAc;AACvD,mBAAW,UAAU,iBAAgB,kBAAkB;AACrD,cAAI,iBAAiB,iBAAiBA,MAAI,EAAE,WAAW,iBAAiB,iBAAiB,MAAM,CAAC,GAAG;AACjG,kBAAM,KAAK,iBAAgB,iBAAiB,MAAM;AAElD,gBAAI,IAAI;AACN,oBAAM,GAAG,6BAA6BA,MAAI;AAAA,YAC5C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,aAAoB,sBAAsBA,QAAc;AACtD,mBAAW,UAAU,iBAAgB,kBAAkB;AACrD,cAAI,iBAAiB,iBAAiBA,MAAI,EAAE,WAAW,iBAAiB,iBAAiB,MAAM,CAAC,GAAG;AACjG,kBAAM,KAAK,iBAAgB,iBAAiB,MAAM;AAElD,gBAAI,IAAI;AACN,oBAAM,GAAG,2BAA2BA,MAAI;AAAA,YAC1C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,aAAoB,wBAAwBA,QAAc;AACxD,mBAAW,UAAU,iBAAgB,kBAAkB;AACrD,cAAI,iBAAiB,iBAAiBA,MAAI,EAAE,WAAW,iBAAiB,iBAAiB,MAAM,CAAC,GAAG;AACjG,kBAAM,KAAK,iBAAgB,iBAAiB,MAAM;AAElD,gBAAI,IAAI;AACN,oBAAM,GAAG,6BAA6BA,MAAI;AAAA,YAC5C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,eAAiC;AACrC,YAAI,KAAK,cAAc,QAAW;AAChC,gBAAM,SAAS,MAAM,gBAAgB,2DAAuD,KAAK,IAAI;AACrG,eAAK,YAAY,WAAW;AAAA,QAC9B;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,SAAS,OAAe,OAAe;AACrC,YAAI,WAAW;AAEf,YAAI,CAAC,SAAS,SAAS,iBAAgB,eAAe,GAAG;AACvD,sBAAY,iBAAgB;AAAA,QAC9B;AAEA,oBAAY;AAEZ,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,oBAAoBA,QAAc;AACvC,cAAM,YAAYA,OAAK,YAAY,KAAK,eAAe;AAEvD,YAAI,YAAY,GAAG;AACjB,iBAAOA;AAAA,QACT;AAEA,eAAOA,OAAK,UAAU,GAAG,SAAS;AAAA,MACpC;AAAA,IACF;AAAA;AAAA;;;ACxGA,IAMa,sBAaQ;AAnBrB;AAAA;AAAA;AAMO,IAAM,uBAAuB;AAapC,IAAqB,mBAArB,MAAsC;AAAA,MACpC;AAAA,MACA;AAAA,MAEQ;AAAA,MACA;AAAA,MAER,IAAI,4BAA4C;AAC9C,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,4BAA4C;AAC9C,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,YAAY,SAAmB,YAAkC;AAC/D,aAAK,UAAU;AACf,aAAK,aAAa;AAElB,aAAK,6BAA6B,KAAK,QAAQ,WAAW,aAAa,4BAA4B;AACnG,aAAK,6BAA6B,KAAK,QAAQ,WAAW,aAAa,4BAA4B;AAAA,MACrG;AAAA,IACF;AAAA;AAAA;;;ACzCA,IAkBAC,qBAuEa,kBACA,kBAIQC;AA9FrB;AAAA;AAAA;AAMA;AAWA;AACA,IAAAD,sBAAgC;AAEhC;AACA;AACA;AACA;AAEA,IAAAE;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAwCO,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AAIhC,IAAqBD,gBAArB,MAAkC;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MAER,cAAc;AAAA,MAEd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA,oBAAwC,CAAC;AAAA,MAEzC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEQ,2BAAyD,CAAC;AAAA,MAC1D,mBAA4B;AAAA;AAAA;AAAA,MAI5B;AAAA;AAAA;AAAA;AAAA,MAKA;AAAA,MAER;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MAEA,SAAmD,CAAC;AAAA,MAEpD;AAAA,MACA,iBAA0B;AAAA,MAC1B,yBAAkC;AAAA,MAElC,6CAAsD;AAAA,MAE9C,8BAA8B,IAAI,oCAA+C;AAAA,MACjF,2BAA2B,IAAI,oCAAwD;AAAA,MACvF,wBAAwB,IAAI,oCAAwD;AAAA,MACpF,qBAAqB,IAAI,oCAAsC;AAAA,MAC/D,YAAY,IAAI,oCAA4C;AAAA,MAC5D,iBAAiB,IAAI,oCAAuC;AAAA,MAC5D,wBAAwB,IAAI,oCAAsC;AAAA,MAClE,sBAA0F,CAAC;AAAA,MAC3F,mBAAmB,IAAI,oCAAoD;AAAA,MAEnF,IAAW,8BAA8B;AACvC,YAAI,KAAK,MAAM,4BAA4B,QAAW;AACpD,iBAAO,KAAK,MAAM;AAAA,QACpB;AAEA,iBAAS,IAAI,GAAG,IAAI,sBAAsB,KAAK;AAC7C,cAAI,KAAK,kBAAkB,CAAC,GAAG;AAC7B,mBAAO;AAAA,UACT;AAAA,QACF;AAEA;AAAA,MACF;AAAA,MAEA,IAAW,4BAA4B,SAA+B;AACpE,aAAK,MAAM,0BAA0B;AAAA,MACvC;AAAA,MAEA,IAAW,WAAW;AACpB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,iBAAiB;AAC1B,YAAI,CAAC,KAAK,MAAM,gBAAgB;AAC9B,eAAK,MAAM,iBAAiB,CAAC;AAAA,QAC/B;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,OAAO;AAChB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,2BAA2B;AACpC,eAAO,KAAK,kBAAkB,KAAK,2BAA2B;AAAA,MAChE;AAAA,MAEA,IAAW,0BAA0B;AACnC,eAAO,KAAK,oBAAoB,KAAK,2BAA2B;AAAA,MAClE;AAAA,MAEA,IAAW,eAAe,mBAA6B;AACrD,aAAK,MAAM,iBAAiB;AAAA,MAC9B;AAAA,MAEA,IAAW,cAAuB;AAChC,YAAI,KAAK,MAAM,gBAAgB,QAAW;AACxC,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,YAAY,UAAmB;AACxC,aAAK,MAAM,cAAc;AAAA,MAC3B;AAAA,MAEA,IAAW,eAAyB;AAClC,YAAI,CAAC,KAAK,MAAM,cAAc;AAC5B,eAAK,MAAM,eAAe,CAAC;AAAA,QAC7B;AACA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,aAAa,UAAoB;AAC1C,aAAK,MAAM,eAAe;AAAA,MAC5B;AAAA,MAEA,IAAW,cAAuB;AAChC,YAAI,KAAK,MAAM,gBAAgB,QAAW;AACxC,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,YAAY,UAAmB;AACxC,aAAK,MAAM,cAAc;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,SAAS,aAA2B;AACzC,YAAI,CAAC,YAAa;AAElB,cAAM,QAAQ,KAAK;AAEnB,cAAM,gBAAgB,MAAM,QAAQ,WAAW;AAC/C,YAAI,kBAAkB,IAAI;AACxB,gBAAM,OAAO,eAAe,CAAC;AAAA,QAC/B;AAEA,cAAM,QAAQ,WAAW;AAEzB,YAAI,MAAM,SAAS,IAAI;AACrB,gBAAM,IAAI;AAAA,QACZ;AACA,aAAK,MAAM,eAAe;AAAA,MAC5B;AAAA;AAAA;AAAA;AAAA,MAKO,cAAc,aAA2B;AAC9C,YAAI,CAAC,YAAa;AAElB,cAAM,QAAQ,KAAK;AACnB,cAAM,QAAQ,MAAM,QAAQ,WAAW;AACvC,YAAI,UAAU,IAAI;AAChB,gBAAM,OAAO,OAAO,CAAC;AACrB,eAAK,MAAM,eAAe;AAAA,QAC5B;AAAA,MACF;AAAA,MAEA,IAAW,iBAAiB;AAC1B,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,eAAe,UAAkD;AAC1E,aAAK,MAAM,iBAAiB;AAAA,MAC9B;AAAA,MAEA,IAAW,kBAAkB;AAC3B,eAAO,KAAK,MAAM,oBAAoB;AAAA,MACxC;AAAA,MAEA,IAAW,gBAAgB,UAAmB;AAC5C,aAAK,MAAM,kBAAkB;AAAA,MAC/B;AAAA,MAEA,IAAW,kBAAkB;AAC3B,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,gBAAgB,UAAuC;AAChE,aAAK,MAAM,kBAAkB;AAAA,MAC/B;AAAA,MAEA,IAAW,gBAAgB;AACzB,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,sBAAsB;AAC/B,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,uBAAuB;AAChC,YAAI,KAAK,oBAAoB,QAAW;AACtC,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,gBAAgB;AAAA,MAC9B;AAAA,MAEA,IAAW,0BAA0B;AACnC,eAAO,KAAK,yBAAyB,QAAQ;AAAA,MAC/C;AAAA,MAEA,IAAW,6BAA6B;AACtC,eAAO,KAAK,4BAA4B,QAAQ;AAAA,MAClD;AAAA,MAEA,IAAW,mBAAmB;AAC5B,YAAI,KAAK,MAAM,qBAAqB,QAAW;AAK7C,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,iBAAiB,UAAmB;AAC7C,aAAK,MAAM,mBAAmB;AAAA,MAChC;AAAA,MAEA,IAAW,kBAAkB;AAC3B,YAAI,KAAK,MAAM,oBAAoB,QAAW;AAC5C,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,gBAAgB,UAAmB;AAC5C,aAAK,MAAM,kBAAkB;AAAA,MAC/B;AAAA,MAEA,IAAW,oBAAoB;AAC7B,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,kBAAkB,UAA8B;AACzD,aAAK,MAAM,oBAAoB;AAAA,MACjC;AAAA,MAEA,IAAW,oBAAoB;AAC7B,YAAI,KAAK,MAAM,sBAAsB,QAAW;AAC9C,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,kBAAkB,UAAkB;AAC7C,aAAK,MAAM,oBAAoB;AAAA,MACjC;AAAA,MAEA,IAAW,mBAAmB;AAE5B,YAAI,KAAK,MAAM,qBAAqB,QAAW;AAC7C,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,MAAM,mBAAmB,KAAK;AACrC,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,MAAM,mBAAmB,KAAK;AACrC,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,iBAAiB,UAAkB;AAE5C,YAAI,WAAW,KAAK;AAClB,qBAAW;AAAA,QACb;AACA,YAAI,WAAW,KAAK;AAClB,qBAAW;AAAA,QACb;AACA,aAAK,MAAM,mBAAmB;AAAA,MAChC;AAAA,MAEA,IAAW,oBAAoB;AAC7B,YAAI,KAAK,MAAM,sBAAsB,QAAW;AAC9C,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,MAAM,oBAAoB,kBAAkB;AACnD,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,MAAM,oBAAoB,kBAAkB;AACnD,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,kBAAkB,UAAkB;AAC7C,aAAK,MAAM,oBAAoB;AAAA,MACjC;AAAA,MAEA,IAAW,gBAAgB;AACzB,YAAI,KAAK,MAAM,kBAAkB,QAAW;AAC1C,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,MAAM,gBAAgB,kBAAkB;AAC/C,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,MAAM,gBAAgB,kBAAkB;AAC/C,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,cAAc,UAAkB;AACzC,aAAK,MAAM,gBAAgB;AAAA,MAC7B;AAAA,MAEA,IAAW,iBAAiB;AAC1B,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,eAAe,UAA8B;AACtD,aAAK,MAAM,iBAAiB;AAAA,MAC9B;AAAA,MAEA,IAAI,QAAoC;AACtC,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAI,MAAM,UAAsC;AAC9C,YAAI,aAAa,KAAK,MAAM,OAAO;AACjC,eAAK,MAAM,QAAQ;AACnB,eAAK,mBAAmB,SAAS,MAAM,OAAO;AAAA,QAChD;AAAA,MACF;AAAA,MAEA,IAAI,iBAAiC;AACnC,YAAI,KAAK,MAAM,UAAU,QAAW;AAClC,iBAAO,KAAK,MAAM;AAAA,QACpB;AAEA;AAAA,MACF;AAAA,MAEA,IAAW,YAAY;AACrB,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,UAAU,cAAmC;AACtD,YAAI,iBAAiB,KAAK,MAAM,WAAW;AACzC,eAAK,MAAM,YAAY;AAAA,QACzB;AAAA,MACF;AAAA,MAEA,IAAW,UAAU;AACnB,YAAI,KAAK,MAAM,YAAY,QAAW;AACpC,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,QAAQ,QAA4B;AAC7C,aAAK,MAAM,UAAU;AAAA,MACvB;AAAA,MAEA,IAAW,UAAU;AACnB,YAAI,KAAK,MAAM,YAAY,QAAW;AACpC,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,QAAQ,QAA4B;AAC7C,aAAK,MAAM,UAAU;AAAA,MACvB;AAAA,MAEA,IAAW,cAAc;AACvB,YAAI,KAAK,MAAM,gBAAgB,QAAW;AACxC,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,YAAY,QAA4B;AACjD,aAAK,MAAM,cAAc;AAAA,MAC3B;AAAA,MAEA,IAAW,eAAe;AACxB,YAAI,KAAK,MAAM,iBAAiB,QAAW;AACzC,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,aAAa,QAA4B;AAClD,aAAK,MAAM,eAAe;AAAA,MAC5B;AAAA,MAEA,IAAW,aAAa;AACtB,YAAI,KAAK,MAAM,eAAe,QAAW;AACvC,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,WAAW,QAA4B;AAChD,aAAK,MAAM,aAAa;AAAA,MAC1B;AAAA,MAEA,IAAI,UAA8B;AAChC,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAI,QAAQ,YAAgC;AAC1C,YAAI,KAAK,MAAM,YAAY,YAAY;AACrC,eAAK,MAAM,UAAU;AAErB,eAAK,mBAAmB,SAAS,MAAM,SAAS;AAAA,QAClD;AAAA,MACF;AAAA,MAEA,IAAW,cAAc;AACvB,YAAI,KAAK,MAAM,gBAAgB,QAAW;AACxC;AAAA,QACF;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,YAAY,QAA4B;AACjD,aAAK,MAAM,cAAc;AAAA,MAC3B;AAAA,MAEA,IAAW,4BAA4B;AACrC,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,0BAA0B,2BAAwD;AAC3F,YAAI,8BAA8B,KAAK,MAAM,2BAA2B;AACtE,eAAK,MAAM,4BAA4B;AAAA,QACzC;AAAA,MACF;AAAA,MAEA,IAAW,kBAAkB;AAC3B,YAAI,KAAK,MAAM,oBAAoB,UAAa,iBAAiB,SAAS;AACxE,iBAAO,UAAU,WAAW,iBAAiB,OAAO;AAAA,QACtD;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,sBAAsB;AAC/B,YAAI,CAAC,KAAK,iBAAiB;AACzB,iBAAO;AAAA,QACT;AAEA,YAAIE,OAAM,KAAK,gBAAgB,YAAY;AAE3C,YAAI,CAACA,KAAI,WAAW,MAAM,KAAKA,KAAI,QAAQ,IAAI,IAAI,GAAG;AACpD,cAAIA,KAAI,QAAQ,WAAW,KAAK,GAAG;AACjC,YAAAA,OAAM,YAAYA;AAAA,UACpB,OAAO;AACL,YAAAA,OAAM,aAAaA;AAAA,UACrB;AAAA,QACF;AAEA,QAAAA,OAAM,UAAU,oBAAoBA,IAAG;AAEvC,eAAOA;AAAA,MACT;AAAA,MAEA,IAAW,gBAAgB,SAA6B;AACtD,YAAI,YAAY,KAAK,MAAM,iBAAiB;AAC1C,eAAK,MAAM,kBAAkB;AAAA,QAC/B;AAAA,MACF;AAAA,MAEA,IAAW,2FAA2F;AACpG,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,yFACT,SACA;AACA,aAAK,MAAM,2FAA2F;AAAA,MACxG;AAAA,MAEA,IAAW,2BAA2B;AACpC,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,yBAAyB,SAA6B;AAC/D,aAAK,MAAM,2BAA2B;AAAA,MACxC;AAAA,MAEA,IAAW,sBAAsB;AAC/B,YAAI,KAAK,MAAM,wBAAwB,QAAW;AAChD;AAAA,QACF;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,oBAAoB,SAA0C;AACvE,aAAK,MAAM,sBAAsB;AAAA,MACnC;AAAA,MAEA,IAAW,sBAAsB;AAC/B,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,kBAAkB,SAAkD;AAC7E,aAAK,MAAM,gBAAgB;AAAA,MAC7B;AAAA,MAEA,IAAW,oBAAoB;AAC7B,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,oBAAoB,SAA6B;AAC1D,aAAK,MAAM,sBAAsB;AAAA,MACnC;AAAA,MAEA,IAAW,mBAAmB;AAC5B,YAAI,KAAK,MAAM,qBAAqB,QAAW;AAC7C,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,iBAAiB,SAA6B;AACvD,aAAK,MAAM,mBAAmB;AAAA,MAChC;AAAA,MAEA,IAAW,0BAA0B;AACnC,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,wBAAwB,gBAAqD;AACtF,aAAK,MAAM,0BAA0B;AAAA,MACvC;AAAA,MAEA,IAAW,uBAAuB;AAChC,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,qBAAqB,SAA6B;AAC3D,aAAK,MAAM,uBAAuB;AAAA,MACpC;AAAA,MAEA,IAAW,wBAAwB;AACjC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,sBAAsB,UAA8B;AAC7D,aAAK,yBAAyB;AAAA,MAChC;AAAA,MAEA,IAAW,2BAA2B;AACpC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,yBAAyB,UAA+B;AACjE,aAAK,4BAA4B;AAAA,MACnC;AAAA,MAEA,IAAW,iBAAiB;AAC1B,YAAI,KAAK,MAAM,mBAAmB,QAAW;AAC3C;AAAA,QACF;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,eAAe,aAAyC;AACjE,aAAK,MAAM,iBAAiB;AAAA,MAC9B;AAAA,MAEA,IAAW,UAAU;AACnB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,gBAAgB;AACzB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,aAA4B;AACrC,YAAI,KAAK,gBAAgB,QAAW;AAClC,eAAK,cAAc,IAAI,cAAc;AAAA,QACvC;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,aAA4B;AACrC,YAAI,KAAK,gBAAgB,QAAW;AAClC,eAAK,cAAc,IAAI,cAAc;AAAA,QACvC;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,WAAW;AACpB,eAAO,KAAK,UAAU,QAAQ;AAAA,MAChC;AAAA,MAEA,IAAW,kBAAkB;AAC3B,eAAO,KAAK,iBAAiB,QAAQ;AAAA,MACvC;AAAA,MAEA,IAAW,oBAAoB;AAC7B,eAAO,KAAK,mBAAmB,QAAQ;AAAA,MACzC;AAAA,MAEA,IAAW,gBAAgB;AACzB,eAAO,KAAK,eAAe,QAAQ;AAAA,MACrC;AAAA,MAEA,IAAW,uBAAuB;AAChC,eAAO,KAAK,sBAAsB,QAAQ;AAAA,MAC5C;AAAA,MAEA,IAAW,4CAA4C;AACrD,YAAI,KAAK,MAAM,8CAA8C,QAAW;AACtE,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,0CAA0C,UAAmB;AACtE,aAAK,MAAM,4CAA4C;AAAA,MACzD;AAAA,MAEA,IAAW,qCAAqC;AAC9C,YAAI,KAAK,MAAM,uCAAuC,QAAW;AAC/D,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,mCAAmC,UAAmB;AAC/D,aAAK,MAAM,qCAAqC;AAAA,MAClD;AAAA,MAEA,IAAW,yCAAyC;AAClD,YAAI,KAAK,MAAM,2CAA2C,QAAW;AACnE,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,uCAAuC,UAAmB;AACnE,aAAK,MAAM,yCAAyC;AAAA,MACtD;AAAA,MAEA,IAAW,yBAAyB;AAClC,YAAI,KAAK,MAAM,8BAA8B,QAAW;AACtD,cAAI,iBAAiB,iBAAiB;AACpC;AAAA,UACF,OAAO;AACL;AAAA,UACF;AAAA,QACF;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEO,0BAA0B,IAAoE;AACnG,aAAK,oBAAoB,KAAK,EAAE;AAAA,MAClC;AAAA,MAEO,4BAA4B,IAAoE;AACrG,YAAI,oBAAwF,CAAC;AAE7F,iBAAS,IAAI,GAAG,IAAI,KAAK,oBAAoB,QAAQ,KAAK;AACxD,cAAI,KAAK,oBAAoB,CAAC,MAAM,IAAI;AACtC,8BAAkB,KAAK,KAAK,oBAAoB,CAAC,CAAC;AAAA,UACpD;AAAA,QACF;AAEA,aAAK,sBAAsB;AAAA,MAC7B;AAAA,MAEO,mBAAmB,UAA2B;AACnD,aAAK,gBAAgB,QAAQ;AAAA,MAC/B;AAAA,MAEA,IAAW,qBAAqB;AAC9B,YAAI,KAAK,MAAM,uBAAuB,QAAW;AAC/C,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAW,mBAAmB,UAAmB;AAC/C,aAAK,MAAM,qBAAqB;AAAA,MAClC;AAAA,MAEA,IAAI,OAAc;AAChB,eAAO,KAAK,aAAa,WAAW,WAAW,cAAc;AAAA,MAC/D;AAAA,MAEA,IAAI,sBAA+B;AACjC,eAAO,KAAK,aAAa,WAAW,aAAa,UAAU;AAAA,MAC7D;AAAA,MAEA,YACE,iBACA,iBACA,oBACA,cACA,aACA,gBACA,aACA;AACA,aAAK,eAAe;AACpB,aAAK,kBAAkB;AACvB,aAAK,oBAAoB;AACzB,aAAK,cAAc;AACnB,aAAK,eAAe;AACpB,aAAK,iBAAiB;AAEtB,YAAI,aAAa;AACf,eAAK,cAAc;AAAA,QACrB;AAEA,aAAK,+BAA+B,KAAK,6BAA6B,KAAK,IAAI;AAC/E,aAAK,+BAA+B,KAAK,6BAA6B,KAAK,IAAI;AAC/E,aAAK,4BAA4B,KAAK,0BAA0B,KAAK,IAAI;AAEzE,wBAAgB,UAAU,UAAU,KAAK,4BAA4B;AAErE,aAAK,QAAQ;AAAA,UACX,2CAA2C;AAAA,UAC3C,oCAAoC;AAAA,UACpC,wCAAwC;AAAA,UACxC,oBAAoB;AAAA,UACpB,qBAAqB;AAAA,UACrB,aAAa,CAAC;AAAA,QAChB;AAIA,YAAI,iBAAiB,WAAW,CAAC,iBAAiB,iBAAiB;AACjE,eAAK,iCAAyC;AAC9C,eAAK,4CAA4C;AAAA,QACnD;AAEA,aAAK,YAAY;AACjB,aAAK,WAAW,CAAC;AACjB,aAAK,SAAS,CAAC;AACf,aAAK,mBAAmB,CAAC;AAAA,MAC3B;AAAA,MAEO,0BAA0B;AAC/B,YAAI,KAAK,MAAM,kBAAkB,QAAW;AAC1C,eAAK,MAAM,gBAAgB;AAAA,YACzB;AAAA,YACA;AAAA,YACA,YAAY;AAAA,YACZ;AAAA,YACA,mBAAmB;AAAA,YACnB,UAAU;AAAA,YACV,kCAAkC;AAAA,YAClC,gBAAgB;AAAA,YAChB,yBAAyB;AAAA,YACzB,mBAAmB,CAAC;AAAA,UACtB;AAEA,eAAK,uBAAuB;AAAA,QAC9B;AAAA,MACF;AAAA,MAEO,oBAAoB,QAA4D;AACrF,YAAI,KAAK,KAAK,kBAAkB,MAAM;AAEtC,YAAI,CAAC,MAAM,KAAK,kBAAkB,MAAM,GAAG;AACzC,eAAK,IAAI,iBAAiB,KAAK,kBAAkB,MAAM,GAAG,MAAM;AAEhE,eAAK,kBAAkB,MAAM,IAAI;AAAA,QACnC;AAEA,eAAO;AAAA,MACT;AAAA,MAEQ,yBAAyB;AAC/B,YAAI,KAAK,iBAAiB,KAAK,cAAc,SAAS,QAAW;AAC/D,eAAK,cAAc,OAAO,WAAW,UAAU,WAAW,oBAAI,KAAK,CAAC;AAAA,QACtE;AAAA,MACF;AAAA,MAEO,gCAAgC;AACrC,YAAI,KAAK,MAAM,wBAAwB,QAAW;AAChD,eAAK,MAAM,sBAAsB;AAAA,YAC/B;AAAA,YACA;AAAA,YACA;AAAA,YACA,mBAAmB;AAAA,YACnB,UAAU;AAAA,YACV,mBAAmB,CAAC;AAAA,UACtB;AAEA,eAAK,6BAA6B;AAAA,QACpC;AAAA,MACF;AAAA,MAEQ,+BAA+B;AACrC,YAAI,KAAK,uBAAuB,KAAK,oBAAoB,SAAS,QAAW;AAC3E,eAAK,oBAAoB,OAAO,oBAAoB,UAAU,WAAW,oBAAI,KAAK,CAAC;AAAA,QACrF;AAAA,MACF;AAAA,MAEA,cAAc,OAAe;AAC3B,YAAI,KAAK,MAAM,gBAAgB,QAAW;AACxC,eAAK,MAAM,cAAc,CAAC;AAAA,QAC5B;AAEA,eAAO,KAAK,MAAM,YAAY,UAAU,OAAO;AAC7C,eAAK,MAAM,YAAY,KAAK;AAAA,YAC1B,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,YACN,eAAe;AAAA,UACjB,CAAC;AAAA,QACH;AAEA,eAAO,KAAK,MAAM,YAAY,KAAK;AAAA,MACrC;AAAA,MAEA,IAAI,kBAAkB;AACpB,YAAI,KAAK,UAAU,UAAa,KAAK,MAAM,oBAAoB,QAAW;AACxE,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,IAAI,gBAAgB,aAAqB;AACvC,YAAI,KAAK,UAAU,QAAW;AAC5B;AAAA,QACF;AAEA,aAAK,MAAM,kBAAkB,UAAU,gBAAgB,WAAW;AAAA,MACpE;AAAA,MAEA,MAAM,WAAW,SAAiB,SAAmB;AACnD,eAAO,MAAM,gBAAgB,KAAK;AAAA,UAChC;AAAA,YACE,cAAc;AAAA,YACd;AAAA,YACA,WAAW,KAAK;AAAA,YAChB,MAAM,iBAAiB;AAAA,UACzB;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,oBAAoB,SAAiB;AACzC,YAAI,KAAK,oBAAoB,QAAW;AACtC,gBAAM,IAAI,MAAM,sBAAsB;AAAA,QACxC;AAEA,cAAM,SAAS,MAAM,KAAK,gBAAgB,WAAW,OAAO;AAE5D,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,YAAY;AAChB,YAAI,CAAC,KAAK,aAAa;AACrB,gBAAM,IAAI,MAAM,6BAA6B;AAAA,QAC/C;AAEA,YAAI,KAAK,kBAAkB;AACzB,gBAAM,cAAc,KAAK;AAEzB,gBAAM,OAAO,CAACC,UAAmC,WAAmC;AAClF,wBAAY,KAAKA,QAAO;AAAA,UAC1B;AAEA,gBAAM,IAAI,QAAQ,IAAI;AAAA,QACxB,OAAO;AACL,eAAK,mBAAmB;AAExB,eAAK,QAAQ,CAAC;AAEd,gBAAM,qBAAqB,MAAM,SAAS,6BAA6B;AAEvE,cAAI,oBAAoB;AACtB,kBAAM,KAAK,kBAAkB,kBAAkB;AAAA,UACjD;AAEA,cAAI,QAAQ,yBAAyB,KAAK,YAAY,WAAW,WAAW,GAAG;AAC/E,gBAAM,KAAK,oBAAoB,KAAK,YAAY,UAAU;AAE1D,eAAK,mBAAmB;AAExB,gBAAM,cAAc,KAAK;AACzB,eAAK,2BAA2B,CAAC;AAEjC,qBAAW,QAAQ,aAAa;AAC9B,iBAAK,MAAS;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,8BAA8B,UAA2B;AACvD,cAAM,oBAA8B,CAAC;AAErC,iBAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACrC,cAAI,MAAM,UAAU;AAClB,8BAAkB,KAAK,CAAC;AAAA,UAC1B;AAAA,QACF;AAEA,aAAK,iBAAiB;AAAA,MACxB;AAAA,MAEA,sBAAsB,UAA2B;AAC/C,mBAAW,qBAAqB,KAAK,gBAAgB;AACnD,cAAI,sBAAsB,UAAU;AAClC;AAAA,UACF;AAAA,QACF;AAEA,aAAK,eAAe,KAAK,QAAQ;AAAA,MACnC;AAAA,MAEA,yBAAyB,UAA2B;AAClD,cAAM,oBAA8B,CAAC;AAErC,mBAAW,qBAAqB,KAAK,gBAAgB;AACnD,cAAI,sBAAsB,UAAU;AAClC,8BAAkB,KAAK,iBAAiB;AAAA,UAC1C;AAAA,QACF;AAEA,aAAK,MAAM,iBAAiB;AAAA,MAC9B;AAAA,MAEA,MAAM,oBAAoB,QAAiB;AACzC,cAAM,OAAO,KAAK;AAElB,iBAAS,YAAY,OAAO,OAAO;AACjC,gBAAM,OAAO,OAAO,MAAM,QAAQ;AAElC,cAAI,QAAQ,iBAAiB,gBAAgB,KAAK,mBAAmB,GAAG;AACtE,kBAAM,KAAK,kBAAkB,IAAI;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAAA,MAEA,cAAc,UAAkB,gBAA0B;AACxD,YAAI,CAAC,KAAK,OAAO;AACf,cAAI,oBAAoB,KAAK;AAC7B;AAAA,QACF;AAEA,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC1C,cAAI,KAAK,MAAM,CAAC,EAAE,QAAQ,UAAU,cAAc,GAAG;AACnD,mBAAO,KAAK,MAAM,CAAC;AAAA,UACrB;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,wBAAwB,UAAkB,MAAe;AACvD,YAAI,CAAC,KAAK,OAAO;AACf,cAAI,oBAAoB,MAAM;AAC9B;AAAA,QACF;AAEA,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC1C,cAAI,KAAK,MAAM,CAAC,EAAE,QAAQ,UAAU,KAAK,MAAM,SAAS,UAAa,SAAS,KAAK,MAAM,CAAC,EAAE,MAAM,aAAa;AAC7G,mBAAO,KAAK,MAAM,CAAC;AAAA,UACrB;AAAA,QACF;AAEA,eAAO,KAAK,cAAc,QAAQ;AAAA,MACpC;AAAA,MAEA,MAAM,kBAAkB,MAAa;AACnC,cAAM,OAAO,KAAK,YAAY,KAAK,mBAAmB;AAEtD,cAAM,KAAK,WAAW,MAAM,IAAI;AAEhC,eAAO;AAAA,MACT;AAAA,MAEA,YAAY,aAAqB;AAC/B,YAAI,KAAK,UAAU,QAAW;AAC5B,eAAK,QAAQ,CAAC;AAAA,QAChB;AAEA,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC1C,cAAI,KAAK,MAAM,CAAC,EAAE,gBAAgB,aAAa;AAC7C,mBAAO,KAAK,MAAM,CAAC;AAAA,UACrB;AAAA,QACF;AAEA,cAAM,OAAO,IAAI,QAAQ,iBAAiB,YAAY,WAAW,GAAG,WAAW;AAE/E,aAAK,MAAM,KAAK,IAAI;AAEpB,eAAO;AAAA,MACT;AAAA,MAEA,6BAA6B,SAAiB,MAAc;AAC1D,gBAAQ,SAAS;AAAA,UACf,KAAK;AACH,gBAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,oBAAM,eAAe,SAAS,KAAK,UAAU,GAAG,KAAK,MAAM,CAAC;AAE5D,4BAAc,cAAc,MAAM,YAAY;AAAA,YAChD;AACA;AAAA,UAEF,KAAK;AACH,4BAAgB,uBAAuB,IAAI;AAC3C;AAAA,UAEF,KAAK;AACH,4BAAgB,sBAAsB,IAAI;AAC1C;AAAA,UAEF,KAAK;AACH,4BAAgB,wBAAwB,IAAI;AAC5C;AAAA,UAEF,KAAK;AACH,kBAAM,YAAY,KAAK,QAAQ,GAAG;AAClC,kBAAM,UAAU,KAAK,UAAU,YAAY,GAAG,KAAK,MAAM;AAEzD,gBAAI;AACF,oBAAM,WAAW,KAAK,MAAM,OAAO;AAEnC,mBAAK,qBAAqB,QAAQ;AAAA,YACpC,SAAS,GAAG;AAAA,YAAC;AAEb;AAAA,UAEF,KAAK;AACH,iBAAK,KAAK,IAAI;AACd;AAAA,UAEF,KAAK;AACH,gBAAI;AACF,kBAAI,MAAM;AACR,sBAAMC,aAAY,KAAK,QAAQ,GAAG;AAElC,oBAAIA,aAAY,GAAG;AACjB,wBAAM,WAAW,KAAK,UAAU,GAAGA,UAAS;AAC5C,wBAAMC,WAAU,KAAK,UAAUD,aAAY,GAAG,KAAK,MAAM;AAEzD,uBAAK,sBAAsB,UAAUC,QAAO;AAAA,gBAC9C;AAAA,cACF;AAAA,YACF,SAAS,GAAG;AACV,kBAAI,KAAK,gCAAgC,CAAC;AAAA,YAC5C;AACA;AAAA,UAEF;AACE,gBAAI,KAAK,4BAA4B;AACnC,mBAAK,2BAA2B,uBAAuB,SAAS,IAAI;AAAA,YACtE;AACA,gBAAI,KAAK,wBAAwB;AAC/B,mBAAK,uBAAuB,uBAAuB,SAAS,IAAI;AAAA,YAClE;AACA,gBAAI,KAAK,eAAe;AACtB,mBAAK,cAAc,uBAAuB,SAAS,IAAI;AAAA,YACzD;AACA,gBAAI,KAAK,iBAAiB;AACxB,mBAAK,gBAAgB,uBAAuB,SAAS,IAAI;AAAA,YAC3D;AAEA;AAAA,QACJ;AAAA,MACF;AAAA,MAEA,sBAAsB,UAAkB,UAAkB;AACxD,YAAI,aAAa,QAAQ,aAAa,UAAa,aAAa,QAAQ,aAAa,QAAW;AAC9F;AAAA,QACF;AAEA,YAAI,MAA4B,KAAK,OAAO,QAAQ;AAEpD,YAAI,QAAQ,QAAW;AACrB,gBAAM,CAAC;AAEP,cAAI,UAAU,oBAAoB,QAAQ,GAAG;AAC3C,iBAAK,OAAO,QAAQ,IAAI;AAAA,UAC1B;AAAA,QACF;AAEA,cAAM,WAAW,SAAS,MAAM,IAAI;AAEpC,iBAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,gBAAM,UAAU,SAAS,CAAC;AAE1B,cAAI,YAAY,UAAa,QAAQ,SAAS,GAAG;AAC/C,gBAAI,CAAC,IAAI,SAAS,OAAO,GAAG;AAC1B,kBAAI,KAAK,OAAO;AAChB,mBAAK,mBAAmB,OAAO;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,mBAAmB,SAAiB,OAAqB;AAC7D,cAAM,eAAe,QAAQ,KAAK,EAAE,YAAY;AAEhD,YAAI,aAAa,SAAS,GAAG;AAC3B,gBAAM,SAAS;AAAA,YACb,MAAM,oBAAI,KAAK;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAEA,eAAK,OAAO,KAAK,MAAM;AACvB,gBAAM,KAAK,yBAAyB,MAAM;AAE1C,eAAK,2BAA2B;AAAA,QAClC;AAAA,MACF;AAAA,MAEQ,6BAA6B;AACnC,YAAI,KAAK,OAAO,SAAS,KAAO;AAC9B,gBAAM,eAA0B,CAAC;AAEjC,mBAAS,IAAI,KAAK,OAAO,SAAS,KAAM,IAAI,KAAK,OAAO,QAAQ,KAAK;AACnE,yBAAa,KAAK,KAAK,OAAO,CAAC,CAAC;AAAA,UAClC;AAEA,eAAK,SAAS;AAAA,QAChB;AAAA,MACF;AAAA,MAEA,MAAM,yBAAyB,QAAiB;AAC9C,aAAK,eAAe,SAAS,MAAM,MAAM;AAEzC,YAAI,KAAK,oBAAoB,SAAS,GAAG;AACvC,cAAI,WAA4B,CAAC;AAEjC,mBAAS,IAAI,GAAG,IAAI,KAAK,oBAAoB,QAAQ,KAAK;AACxD,qBAAS,KAAK,KAAK,oBAAoB,CAAC,EAAE,MAAM,MAAM,CAAC;AAAA,UACzD;AAEA,gBAAM,QAAQ,IAAI,QAAQ;AAAA,QAC5B;AAAA,MACF;AAAA,MAEA,qBAAqB,QAAiB;AAGpC,YAAI,OAAO,QAAQ,EAAE,OAAO,gBAAgB,OAAO;AACjD,iBAAO,OAAO,IAAI,KAAK,OAAO,IAAyB;AAAA,QACzD;AAEA,aAAK,OAAO,KAAK,MAAM;AAEvB,YAAI,OAAO,mCAAsC;AAC/C,eAAK,iBAAiB,KAAK,MAAM;AAAA,QACnC,YACG,OAAO,2CAA8C,OAAO,0CAC7D,OAAO,gBAAgB,QACvB,OAAO,gBAAgB,QACvB;AACA,eAAK,gBAAgB,OAAO,WAAW;AAAA,QACzC;AAEA,aAAK,yBAAyB,MAAM;AAEpC,eAAO,OAAO;AAAA,MAChB;AAAA,MAEA,MAAM,sBAAsB,mBAA2B,SAAiB,OAAqB;AAC3F,aAAK,2BAA2B;AAEhC,aAAK,gBAAgB,mBAAmB,OAAO;AAE/C,cAAM,SAAS;AAAA,UACb;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA,MAAM,oBAAI,KAAK;AAAA,UACf;AAAA,QACF;AAEA,aAAK,OAAO,KAAK,MAAM;AAEvB,cAAM,KAAK,yBAAyB,MAAM;AAAA,MAC5C;AAAA,MAEA,MAAM,uBAAuB,SAAiB,OAAsC;AAClF,cAAM,SAAkB;AAAA,UACtB,MAAM,oBAAI,KAAK;AAAA,UACf;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,eAAO,cAAc,OAAO,KAAK,QAAQ;AAEzC,aAAK,OAAO,KAAK,MAAM;AACvB,aAAK,iBAAiB,KAAK,MAAM;AAEjC,aAAK,2BAA2B;AAEhC,cAAM,KAAK,yBAAyB,MAAM;AAE1C,eAAO,OAAO;AAAA,MAChB;AAAA,MAEA,MAAM,qBACJ,kBACA,SACA,OACA,iBACA;AACA,aAAK,2BAA2B;AAEhC,aAAK,gBAAgB,gBAAgB;AAErC,aAAK,sBAAsB,SAAS,MAAM,gBAAgB;AAE1D,YAAI,CAAC,SAAS;AACZ;AAAA,QACF;AAEA,cAAM,SAAS;AAAA,UACb;AAAA,UACA,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM,oBAAI,KAAK;AAAA,UACf;AAAA,QACF;AAEA,aAAK,OAAO,KAAK,MAAM;AAEvB,cAAM,KAAK,yBAAyB,MAAM;AAAA,MAC5C;AAAA,MAEA,gBAAgB,IAAY,YAAoB;AAC9C,iBAAS,IAAI,GAAG,IAAI,KAAK,iBAAiB,QAAQ,KAAK;AACrD,gBAAM,OAAO,KAAK,iBAAiB,CAAC;AAEpC,cAAI,KAAK,gBAAgB,IAAI;AAC3B,iBAAK,UAAU;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,gBAAgB,IAAY;AAE1B,cAAM,sBAAiC,CAAC;AAExC,iBAAS,IAAI,GAAG,IAAI,KAAK,iBAAiB,QAAQ,KAAK;AACrD,gBAAM,OAAO,KAAK,iBAAiB,CAAC;AAEpC,cAAI,KAAK,gBAAgB,IAAI;AAC3B,gCAAoB,KAAK,IAAI;AAAA,UAC/B;AAAA,QACF;AAEA,aAAK,mBAAmB;AAAA,MAC1B;AAAA,MAEA,MAAM,OAAO;AACX,cAAM,aAAa,KAAK;AAExB,mBAAW,wCAAwC,KAAK,KAAK;AAE7D,cAAM,WAAW,YAAY;AAE7B,YAAI,gBAAgB,eAAe;AACjC,0BAAgB,uCAA6C,EAAE;AAAA,QACjE;AAAA,MACF;AAAA,MAEA,MAAM,cAAc;AAClB,YAAI,SAAS;AAGb,YAAI,OAAO,WAAW,aAAa;AACjC,gBAAMH,OAAM,KAAK,cAAc;AAE/B,cAAI;AACF,qBAAS,MAAM,cAAM,IAAIA,IAAG;AAE5B,gBAAI,QAAQ;AACV,mBAAK,WAAW,OAAO;AAAA,YACzB;AAAA,UACF,SAAS,GAAG;AACV,gBAAI,KAAK,6BAA6B,IAAI,YAAYA,OAAM,GAAG;AAAA,UACjE;AAAA,QACF,WAAW,KAAK,OAAO;AACrB,cAAI;AACF,qBAAS,MAAM,KAAK,MAAM,aAAa,mBAAmB;AAAA,UAC5D,SAAS,GAAG;AACV,gBAAI,KAAK,gCAAgC,IAAI,2BAA2B;AAAA,UAC1E;AAEA,cAAI,WAAW,MAAM;AACnB,iBAAK,WAAW;AAAA,UAClB;AAAA,QACF;AAEA,YAAI,KAAK,UAAU;AACjB,qBAAW,QAAQ,KAAK,SAAS,OAAO;AACtC,gBAAI,KAAK,WAAW;AAClB,mBAAK,cAAc;AACnB,mBAAK,iBAAiB;AAEtB,kBAAI,KAAK,mCAA2C;AAClD,qBAAK,eAAe;AAEpB,oBAAI,CAAC,KAAK,MAAM;AACd,uBAAK,OAAO,CAAC,QAAQ;AAAA,gBACvB;AAAA,cACF,OAAO;AACL,qBAAK,eAAe;AAAA,cACtB;AAAA,YACF;AAEA,gBAAI,KAAK,UAAU;AACjB,oBAAM,cAAc,CAAC;AAErB,yBAAW,YAAY,KAAK,UAAU;AACpC,4BAAY,KAAK,mBAAmB,2BAA2B,QAAQ,CAAC;AAAA,cAC1E;AAEA,mBAAK,WAAW;AAAA,YAClB;AAAA,UACF;AAAA,QACF;AAEA,aAAK,iBAAiB;AAEtB,aAAK,iBAAiB,SAAS,MAAM,KAAK,QAAQ;AAElD,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,0BACJ,UACA,OACA,QACA,QACA,WACA;AACA,YAAI,CAAC,KAAK,gBAAgB;AACxB,gBAAM,KAAK,YAAY;AAAA,QACzB;AAEA,YAAI,KAAK,mBAAmB,SAAS,KAAK,aAAa,UAAa,KAAK,SAAS,UAAU,QAAW;AACrG,iBAAO;AAAA,QACT;AAEA,mBAAW,SAAS,YAAY;AAChC,gBAAQ,MAAM,YAAY;AAE1B,mBAAW,WAAW,KAAK,SAAS,OAAO;AACzC,cACE,QAAQ,kBACR,QAAQ,eACR,QAAQ,eAAe,YAAY,MAAM,YACzC,QAAQ,YAAY,YAAY,MAAM,SACtC,WAAW,QAAQ,gBACnB,WAAW,QAAQ,iBAClB,CAAC,aAAa,QAAQ,WACvB;AACA,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,sBAAsB,kBAA0B;AACpD,YAAI,CAAC,KAAK,gBAAgB;AACxB,gBAAM,KAAK,YAAY;AAAA,QACzB;AAEA,YAAI,KAAK,mBAAmB,SAAS,KAAK,aAAa,UAAa,KAAK,SAAS,UAAU,QAAW;AACrG,iBAAO;AAAA,QACT;AAEA,2BAAmB,iBAAiB,YAAY;AAChD,2BAAmB,iBAAiB,QAAQ,OAAO,EAAE;AAErD,mBAAW,WAAW,KAAK,SAAS,OAAO;AACzC,cAAI,QAAQ,GAAG,YAAY,MAAM,kBAAkB;AACjD,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,2BAA2B,qBAA6B;AAC5D,YAAI,KAAK,mBAAmB,SAAS,KAAK,aAAa,UAAa,KAAK,SAAS,UAAU,QAAW;AACrG,iBAAO;AAAA,QACT;AAEA,mBAAW,WAAW,KAAK,SAAS,OAAO;AACzC,cAAI,QAAQ,UAAU,qBAAqB;AACzC,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,wBAAwB,UAA2B;AACjD,YAAI,KAAK,mBAAmB,SAAS,KAAK,aAAa,UAAa,KAAK,SAAS,UAAU,QAAW;AACrG,iBAAO;AAAA,QACT;AAEA,cAAM,eAA+B,CAAC;AAEtC,mBAAW,WAAW,KAAK,SAAS,OAAO;AACzC,cAAI,QAAQ,SAAS,UAAU;AAC7B,yBAAa,KAAK,OAAO;AAAA,UAC3B;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,kBAAkB,UAAkB;AACxC,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,KAAK,KAAK;AAAA,QAClB;AAEA,YAAI,iBAAiB,iBAAiB,0BAA0B,QAAQ;AACxE,YAAI,UAAU;AAEd,eACE,KAAK,oBAAoB,WAAW,iBAAiB,OAAO,KAC5D,KAAK,gBAAgB,WAAW,aAAa,cAAc,GAC3D;AACA;AACA,2BAAiB,iBAAiB,0BAA0B,QAAQ,IAAI,MAAM;AAAA,QAChF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,iBACJ,gBACA,gBACA,kBACA,uBACA,OACA,qBACA,iBACA;AACA,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,KAAK,KAAK;AAAA,QAClB;AAEA,cAAM,oBAAoB,MAAM,KAAK,kBAAkB,cAAc;AAErE,YAAI;AAEJ,YAAI,kBAAkB;AACpB,yBAAe,MAAM,iBAAiB,2BAA2B,uBAAuB;AAAA,QAC1F,OAAO;AACL,yBAAe,MAAM,KAAK,oBAAoB,WAAW,oBAAoB,OAAO;AAAA,QACtF;AAEA,cAAM,aAAa,IAAII,SAAQ,MAAM,mBAAmB,YAAY;AAEpE,YAAI,kBAAkB,CAAC,kBAAkB;AACvC,qBAAW,kBAAkB;AAAA,QAC/B;AAEA,YAAI,iBAAiB;AACnB,qBAAW,0BAA0B;AAAA,QACvC;AAEA,YAAI,kBAAkB;AACpB,qBAAW,iBAAiB,gBAAgB;AAC5C,qBAAW,qBAAqB;AAAA,QAClC,OAAO;AACL,gBAAM,WAAW,oBAAoB;AAAA,QACvC;AAEA,mBAAW,QAAQ;AAEnB,YAAI,qBAAqB;AACvB,gBAAM,iBAAiB,mBAAmB,UAAU;AAAA,QACtD;AAMA,mBAAW,6BAA6B,CAAC;AAEzC,aAAK,SAAS,KAAK,UAAU;AAE7B,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,yBAAyB,8BAAsC;AACnE,YAAI,QAA4B;AAEhC,YAAI,mBAAmB,UAAU,eAAe,4BAA4B;AAE5E,YAAI;AACF,kBAAQ,KAAK,MAAM,gBAAgB;AAAA,QACrC,SAAS,GAAQ;AACf,kBAAQ;AAAA,QACV;AAEA,YAAI,OAAO;AACT,gBAAM,cAAc,IAAI,QAAQ;AAEhC,gBAAM,WAAW,YAAY,WAAW,WAAW,aAAa;AAEhE,mBAAS,WAAW,4BAA4B;AAEhD,iBAAO,MAAM,KAAK,wBAAwB,YAAY,UAAU;AAAA,QAClE;AAEA,YAAI,KAAK,IAAI,WAAW;AAExB,cAAM,GAAG,eAAe,4BAA4B;AAEpD,YAAI,GAAG,gBAAgB,QAAW;AAChC,iBAAO,GAAG;AAAA,QACZ;AAEA,YAAI,GAAG,YAAY;AACjB,iBAAO,MAAM,KAAK,wBAAwB,GAAG,UAAU;AAAA,QACzD;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,+BAA+BC,QAAgD;AACnF,cAAM,UAAU,MAAM,KAAK,+BAA+BA,MAAI;AAE9D,YAAI,CAAC,SAAS;AACZ,iBAAO,yCAAyCA;AAAA,QAClD;AAEA,YAAI,OAAO,YAAY,UAAU;AAC/B,iBAAO;AAAA,QACT;AAEA,aAAK,2BAA2B;AAAA,UAC9B;AAAA,QACF,CAAC;AAED,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,sBAAsBA,QAAc;AACxC,cAAM,gBAAgB,iBAAiB,iCAAiCA,MAAI;AAE5E,YAAI,CAAC,cAAc,YAAY,CAAC,iBAAiB,qBAAqB,CAAC,iBAAiB,mBAAmB;AACzG,iBAAO;AAAA,QACT;AAEA,cAAM,SAAS,MAAM,iBAAiB,kBAAkB,cAAc,QAAQ;AAE9E,YAAI,CAAC,QAAQ;AACX,iBAAO,gCAAgC,cAAc;AAAA,QACvD;AAEA,cAAM,SAAS,iBAAiB,kBAAkB,cAAc,QAAQ;AAExE,YAAI,CAAC,QAAQ;AACX,iBAAO,wCAAwC,cAAc;AAAA,QAC/D;AAEA,eAAO,KAAK,wBAAwB,MAAM;AAAA,MAC5C;AAAA,MAEA,MAAM,wBAAwB,QAAiB;AAC7C,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,KAAK,KAAK;AAAA,QAClB;AAEA,cAAM,aAAa,IAAID,SAAQ,MAAM,OAAO,MAAM,IAAI;AACtD,mBAAW,iBAAiB,MAAM;AAElC,cAAM,WAAW,oBAAoB;AACrC,cAAM,WAAW,eAAe;AAChC,cAAM,WAAW,2BAA2B;AAE5C,aAAK,SAAS,KAAK,UAAU;AAE7B,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,4BAA4BC,QAAc;AAC9C,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,KAAK,KAAK;AAAA,QAClB;AAEA,YAAI,iBAAiB,iBAAiB,0BAA0B,iBAAiB,YAAYA,MAAI,CAAC;AAElG,YAAI,UAAU;AAEd,eACE,KAAK,oBAAoB,WAAW,iBAAiB,OAAO,KAC5D,KAAK,gBAAgB,WAAW,aAAa,cAAc,GAC3D;AACA;AACA,2BAAiB,iBAAiB,0BAA0B,iBAAiB,YAAYA,MAAI,CAAC,IAAI,MAAM;AAAA,QAC1G;AAEA,cAAM,eAAe,MAAM,KAAK,oBAAoB,WAAW,iBAAiB,OAAO;AAEvF,cAAM,aAAa,IAAID,SAAQ,MAAM,gBAAgB,YAAY;AACjE,mBAAW,kBAAkBC;AAE7B,cAAM,WAAW,oBAAoB;AAErC,cAAM,WAAW,eAAe;AAChC,cAAM,WAAW,2BAA2B;AAE5C,aAAK,SAAS,KAAK,UAAU;AAE7B,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,oBAAoB,aAAqB;AAC7C,YAAI;AAEJ,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,gBAAM,OAAO,KAAK,SAAS,CAAC;AAE5B,cAAI,KAAK,SAAS,aAAa;AAC7B,gBAAI,oBAAoB,QAAW;AACjC,kBAAI,KAAK,mDAAmD;AAC5D;AAAA,YACF;AAEA,8BAAkB;AAAA,UACpB;AAAA,QACF;AAEA,YAAI,iBAAiB;AACnB,gBAAM,gBAAgB,kBAAkB;AAExC,eAAK,cAAc,eAAe;AAElC,0BAAgB,QAAQ;AAAA,QAC1B;AAAA,MACF;AAAA,MAEA,MAAM,oBAAoB,aAAqB;AAC7C,YAAI;AAEJ,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,gBAAM,OAAO,KAAK,SAAS,CAAC;AAE5B,cAAI,KAAK,SAAS,aAAa;AAC7B,gBAAI,oBAAoB,QAAW;AACjC,kBAAI,KAAK,mDAAmD;AAC5D;AAAA,YACF;AAEA,8BAAkB;AAAA,UACpB;AAAA,QACF;AAEA,YAAI,CAAC,iBAAiB;AACpB,cAAI,KAAK,uCAAuC,WAAW;AAC3D;AAAA,QACF;AAEA,cAAM,gBAAgB,sBAAsB;AAE5C,aAAK,cAAc,eAAe;AAElC,wBAAgB,QAAQ;AAAA,MAC1B;AAAA,MAEA,cAAc,SAAkB;AAC9B,cAAM,cAAyB,CAAC;AAEhC,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,gBAAM,OAAO,KAAK,SAAS,CAAC;AAE5B,cAAI,SAAS,SAAS;AACpB,wBAAY,KAAK,IAAI;AAAA,UACvB;AAAA,QACF;AACA,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,iBAAiB,aAAqB;AACpC,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,gBAAM,OAAO,KAAK,SAAS,CAAC;AAE5B,cAAI,KAAK,SAAS,aAAa;AAC7B,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,gCAAgC,WAAmB;AACjD,oBAAY,iBAAiB,iBAAiB,SAAS;AAEvD,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,gBAAM,OAAO,KAAK,SAAS,CAAC;AAE5B,cAAI,KAAK,mBAAmB,iBAAiB,iBAAiB,KAAK,eAAe,MAAM,WAAW;AACjG,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,kCAAkC,oBAA4B;AAClE,YAAI,CAAC,KAAK,OAAO;AACf,cAAI,KAAK,iCAAiC;AAC1C;AAAA,QACF;AAEA,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,KAAK,KAAK;AAAA,QAClB;AAEA,YAAI,qBAAqB,iBAAiB;AAAA,UACxC,iBAAiB,2BAA2B,kBAAkB;AAAA,QAChE;AAGA,cAAM,UAAU,KAAK,iBAAiB,kBAAkB;AACxD,cAAM,YAAY,iBAAiB,iBAAiB,kBAAkB;AAEtE,YAAI,YAAY,QAAW;AACzB,gBAAM,QAAQ,yBAAyB;AAEvC,cAAI,QAAQ,oBAAoB,QAAW;AACzC,gBAAI,cAAc,iBAAiB,iBAAiB,QAAQ,eAAe,GAAG;AAC5E,oBAAM,QAAQ,eAAe;AAC7B,oBAAM,QAAQ,2BAA2B;AAEzC,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAGA,YAAI,UAAU;AAEd,eACE,KAAK,oBAAoB,WAAW,qBAAqB,OAAO,KAChE,KAAK,gBAAgB,WAAW,aAAa,kBAAkB,GAC/D;AACA;AACA,+BACE,iBAAiB,0BAA0B,iBAAiB,2BAA2B,kBAAkB,CAAC,IAC1G,MACA;AAAA,QACJ;AAEA,cAAM,eAAe,MAAM,KAAK,oBAAoB,WAAW,qBAAqB,OAAO;AAE3F,cAAM,aAAa,IAAID,SAAQ,MAAM,oBAAoB,YAAY;AAErE,mBAAW,kBAAkB;AAC7B,mBAAW,mBAAmB;AAE9B,cAAME,gBAAe,KAAK,MAAM,cAAc,kBAAkB;AAEhE,YAAIA,kBAAiB,MAAM;AACzB,cAAI,KAAK,iCAAiC;AAC1C;AAAA,QACF;AAEA,mBAAW,iBAAiBA,cAAa,UAAU;AAEnD,cAAM,WAAW,oBAAoB;AAErC,cAAM,WAAW,2BAA2B;AAE5C,aAAK,SAAS,KAAK,UAAU;AAE7B,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,4BAA4B,YAAoB,gBAAyB,YAAsB;AACnG,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,KAAK,KAAK;AAAA,QAClB;AAEA,qBAAa,iBAAiB,iCAAiC,UAAU;AAEzE,YAAI,qBAAqB;AAEzB,YAAI,mBAAmB,QAAW;AAChC,+BAAqB;AAAA,QACvB,OAAO;AACL,+BAAqB,iBAAiB,YAAY,UAAU;AAAA,QAC9D;AAEA,6BAAqB,iBAAiB,0BAA0B,kBAAkB;AAElF,YAAI,YAAY,iBAAiB,iBAAiB,UAAU;AAE5D,YAAI,UAAU,KAAK,gCAAgC,UAAU;AAG7D,YAAI,CAAC,SAAS;AACZ,oBAAU,KAAK,iBAAiB,kBAAkB;AAAA,QACpD;AAEA,YAAI,YAAY,UAAa,CAAC,YAAY;AACxC,gBAAM,QAAQ,yBAAyB;AAEvC,cAAI,QAAQ,oBAAoB,QAAW;AACzC,gBAAI,cAAc,iBAAiB,iBAAiB,QAAQ,eAAe,GAAG;AAC5E,oBAAM,QAAQ,eAAe;AAC7B,oBAAM,QAAQ,2BAA2B;AAEzC,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF,WAAW,WAAW,YAAY;AAChC,mBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,iCACE,iBAAiB,0BAA0B,iBAAiB,YAAY,UAAU,CAAC,IAAI,MAAM;AAC/F,wBAAY,iBAAiB,iBAAiB,UAAU,IAAI,MAAM;AAElE,gBAAI,mBAAmB,QAAW;AAChC,mCAAqB;AAAA,YACvB;AAGA,gBAAIC,WAAU,KAAK,iBAAiB,kBAAkB;AAEtD,gBAAI,CAACA,UAAS;AACZ;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGA,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,oBAAU,KAAK,SAAS,CAAC;AAEzB,gBAAM,QAAQ,yBAAyB;AAEvC,cAAI,QAAQ,oBAAoB,QAAW;AACzC,gBAAI,cAAc,iBAAiB,iBAAiB,QAAQ,eAAe,GAAG;AAC5E,oBAAM,QAAQ,eAAe;AAC7B,oBAAM,QAAQ,2BAA2B;AAEzC,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAGA,YAAI,UAAU;AAEd,eACE,KAAK,oBAAoB,WAAW,qBAAqB,OAAO,KAChE,KAAK,gBAAgB,WAAW,aAAa,kBAAkB,GAC/D;AACA;AACA,+BACE,iBAAiB,0BAA0B,iBAAiB,YAAY,UAAU,CAAC,IAAI,MAAM;AAAA,QACjG;AAEA,cAAM,eAAe,MAAM,KAAK,oBAAoB,WAAW,qBAAqB,OAAO;AAE3F,cAAM,aAAa,IAAIH,SAAQ,MAAM,oBAAoB,cAAc,IAAI;AAE3E,mBAAW,kBAAkB;AAC7B,mBAAW,mBAAmB;AAE9B,cAAM,WAAW,oBAAoB;AACrC,cAAM,WAAW,2BAA2B;AAE5C,aAAK,SAAS,KAAK,UAAU;AAE7B,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,eAAe;AACnB,cAAM,KAAK,IAAI,WAAW;AAE1B,cAAM,UAAU,GAAG;AAEnB,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,KAAK,KAAK;AAAA,QAClB;AAEA,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,gBAAM,UAAU,KAAK,SAAS,CAAC;AAE/B,gBAAM,QAAQ,yBAAyB;AAEvC,gBAAM,QAAQ,oBAAoB;AAElC,cAAI,QAAQ,eAAe;AACzB,kBAAM,sBAAsB,QAAQ,aAAa,QAAQ,IAAI;AAE7D,kBAAM,iBAAiB,aAAa,QAAQ,eAAe,qBAAqB,MAAM,MAAM,KAAK;AAAA,UACnG;AAAA,QACF;AAEA,cAAM,QAAQ,QAAQ;AAEtB,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,KAAK,OAAiB;AAC1B,YAAI,KAAK,aAAa,CAAC,OAAO;AAC5B;AAAA,QACF;AAEA,cAAM,aAAa,KAAK;AAExB,YAAI,CAAC,WAAW,iBAAiB;AAC/B,gBAAM,WAAW,YAAY,KAAK;AAAA,QACpC;AAEA,YAAI,WAAW,YAAY,QAAQ,WAAW,YAAY,UAAa,OAAO,WAAW,YAAY,UAAU;AAC7G,eAAK,QAAQ,KAAK,MAAM,WAAW,OAAiB;AAAA,QACtD;AAKA,YACE,iBAAiB,mBACjB,KAAK,MAAM,gDACX,CAAC,KAAK,wBACN;AACA,eAAK,MAAM;AAAA,QACb;AAEA,cAAM,iBAAiB,KAAK;AAE5B,cAAM,eAAe,KAAK;AAE1B,cAAM,KAAK,gBAAgB,WAAW,KAAK;AAE3C,aAAK,WAAW,CAAC;AAEjB,mBAAW,YAAY,eAAe,OAAO;AAC3C,gBAAM,cAAc,iBAAiB,gBAAgB,QAAQ;AAE7D,gBAAM,cAAc,eAAe,MAAM,QAAQ;AAEjD,cAAI,gBAAgB,QAAW;AAC7B,kBAAM,UAAU,IAAIA,SAAQ,MAAM,aAAa,WAAW;AAE1D,iBAAK,SAAS,KAAK,OAAO;AAAA,UAC5B;AAAA,QACF;AAEA,aAAK,0BAA0B;AAE/B,aAAK,wBAAwB;AAE7B,aAAK,uBAAuB;AAE5B,aAAK,UAAU,SAAS,MAAM,IAAI;AAElC,aAAK,YAAY;AAAA,MACnB;AAAA,MAEA,MAAa,4BAA4B;AACvC,YAAI,iBAAiB,wCAAyC,iBAAiB,0BAA2B;AACxG,cACE,KAAK,8CACJ,KAAK,sBAAsB,KAAK,+CACjC;AACA,iBAAK,sBAAsB;AAE3B,kBAAM,KAAK,iBAAiB,gBAAgB;AAC5C,gBACE,KAAK,mBACL,iBAAiB,4BACjB,MACA,GAAG,mBACH,GAAG,gBAAgB,SAAS,GAC5B;AACA,mBAAK,gBAAgB,WAAW;AAEhC,kBAAI,CAAC,KAAK,mBAAmB,KAAK,8CAAsD;AACtF,qBAAK,kBAAkB,KAAK;AAE5B,qBAAK;AAAA,cACP;AAAA,YACF;AAEA,gBAAI,iBAAiB,iBAAiB;AACpC,mBAAK,oBAAoB;AAEzB,kBAAI,KAAK,eAAe;AACtB,qBAAK,cAAc,WAAW;AAAA,cAChC;AAEA,kBAAI,CAAC,KAAK,mBAAmB,KAAK,0DAAkE;AAClG,qBAAK,kBAAkB,KAAK;AAE5B,qBAAK;AAAA,cACP;AAAA,YACF;AAAA,UACF;AAEA,cACE,KAAK,sCACL,KAAK,4DACL,KAAK,oBACL;AACA,kBAAM,KAAK,mBAAmB;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAa,qBAAqB;AAChC,YAAI,CAAC,KAAK,2BAA2B;AACnC;AAAA,QACF;AAEA,aAAK,gBAAgB,KAAK,yBAAyB;AAEnD,YAAI,KAAK,iBAAiB;AACxB,gBAAM,SAAS,MAAM,KAAK,gBAAgB,aAAa;AAEvD,cACE,WAAW,yBACX,WAAW,iBACX,WAAW,gBACX,WAAW,mBACX,WAAW,oBACX,WAAW,uBACX;AACA,kBAAM,KAAK,gBAAgB,WAAW;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,MAEO,8BAA8B;AACnC,YAAI,CAAC,KAAK,iBAAiB;AACzB,iBAAO;AAAA,QACT;AAEA,YACE,KAAK,yBAAyB,uBAC9B,KAAK,yBAAyB,qBAC9B,KAAK,yBAAyB,oBAC9B,KAAK,yBAAyB,oBAC9B,KAAK,yBAAyB,iBAC9B;AACA,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAa,2BAA2B,MAAqB;AAC3D,YAAI,CAAC,KAAK,+BAA+B,CAAC,KAAK,iBAAiB;AAC9D;AAAA,QACF;AAEA,cAAM,KAAK,gBAAgB,gBAAgB,IAAI;AAAA,MACjD;AAAA,MACQ,0BAA0B,WAAuB,UAAsC;AAC7F,YAAI,cAAc,KAAK,iBAAiB;AACtC;AAAA,QACF;AAEA,aAAK,sBAAsB,SAAS,WAAW,QAAQ;AAAA,MACzD;AAAA,MAEQ,6BAA6B,WAAuB,UAAsC;AAChG,YAAI,cAAc,KAAK,iBAAiB;AACtC;AAAA,QACF;AAEA,YAAI,CAAC,KAAK,6CAA6C,aAAa,qBAAwC;AAC1G,eAAK,4CAA4C;AACjD,eAAK,KAAK;AAAA,QACZ;AAEA,YAAI,aAAa,kBAAqC;AACpD,cAAI,QAAQ,qBAAqB;AAAA,QACnC,WAAW,aAAa,iBAAoC;AAAA,QAE5D,WAAW,aAAa,kBAAqC;AAC3D,cAAI,QAAQ,+BAA+B;AAAA,QAC7C;AAEA,aAAK,yBAAyB,SAAS,WAAW,QAAQ;AAAA,MAC5D;AAAA,MAEO,wBAAwB;AAC7B,YAAI,KAAK,oBAAoB,QAAW;AACtC,eAAK,kBAAkB,IAAI,gBAAgB,IAAI;AAAA,QACjD;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEO,+BAA+B;AACpC,YAAI,KAAK,2BAA2B,QAAW;AAC7C,eAAK,yBAAyB,IAAI,uBAAuB,IAAI;AAAA,QAC/D;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEO,mCAAmC;AACxC,YAAI,KAAK,+BAA+B,QAAW;AACjD,eAAK,6BAA6B,IAAI,2BAA2B,IAAI;AAAA,QACvE;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEO,sBAAsB;AAC3B,YAAI,KAAK,kBAAkB,QAAW;AACpC,eAAK,gBAAgB,IAAI,4BAA4B,IAAI;AAAA,QAC3D;AAEA,YAAI,KAAK,sBAAsB,KAAK,2CAA2C;AAC7E,UAAC,KAAK,cAA8C,MAAM;AAAA,QAC5D;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEO,gBAAgB,QAAyB;AAC9C,YAAI,yBAAiC;AACnC,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,mBAAmB,KAAK,8BAA8B,QAAQ;AACrE,iBAAO,KAAK;AAAA,QACd;AAEA,aAAK,sBAAsB;AAE3B,YAAI,uCAA+C;AACjD,eAAK,6BAA6B;AAAA,QACpC,WAAW,sCAA8C;AACvD,eAAK,iCAAiC;AAAA,QACxC,WAAW,uCAA+C;AACxD,eAAK,oBAAoB;AAAA,QAC3B;AAEA,YAAI,KAAK,iBAAiB;AACxB,eAAK,gBAAgB,eAAe,YAAY,KAAK,4BAA4B;AACjF,eAAK,gBAAgB,YAAY,YAAY,KAAK,yBAAyB;AAAA,QAC7E;AAEA,YAAI,2BAAmC;AACrC,cAAI,CAAC,KAAK,iBAAiB;AACzB,gBAAI,yBAAyB,KAAK;AAClC;AAAA,UACF;AAEA,eAAK,kBAAkB,KAAK;AAC5B,cAAI,KAAK,8CAAsD;AAC7D,iBAAK;AACL,iBAAK,KAAK;AAAA,UACZ;AACA,eAAK,yBAAyB,SAAS,KAAK,iBAAiB,qBAAuC;AAEpG,cAAI,KAAK,oBAAoB,QAAW;AACtC,gBAAI,oBAAoB,KAAK;AAC7B,mBAAO;AAAA,UACT;AAEA,eAAK,gBAAgB,eAAe,UAAU,KAAK,4BAA4B;AAC/E,eAAK,gBAAgB,YAAY,UAAU,KAAK,yBAAyB;AAAA,QAC3E,WAAW,uCAA+C;AACxD,cAAI,CAAC,KAAK,eAAe;AACvB,gBAAI,yBAAyB,KAAK;AAClC,mBAAO;AAAA,UACT;AAEA,eAAK,kBAAkB,KAAK;AAE5B,cAAI,KAAK,0DAAkE;AACzE,iBAAK;AACL,iBAAK,KAAK;AAAA,UACZ;AAEA,eAAK,yBAAyB,SAAS,KAAK,iBAAiB,qBAAuC;AAEpG,cAAI,KAAK,oBAAoB,QAAW;AACtC,gBAAI,oBAAoB,KAAK;AAC7B,mBAAO;AAAA,UACT;AAEA,eAAK,gBAAgB,eAAe,UAAU,KAAK,4BAA4B;AAC/E,eAAK,gBAAgB,YAAY,UAAU,KAAK,yBAAyB;AAAA,QAC3E,WAAW,uCAA+C;AACxD,cAAI,CAAC,KAAK,wBAAwB;AAChC,gBAAI,yBAAyB,KAAK;AAClC,mBAAO;AAAA,UACT;AAEA,eAAK,kBAAkB,KAAK;AAE5B,cAAI,KAAK,0DAAkE;AACzE,iBAAK;AACL,iBAAK,KAAK;AAAA,UACZ;AAEA,eAAK,yBAAyB,SAAS,KAAK,iBAAiB,qBAAuC;AAEpG,cAAI,KAAK,oBAAoB,QAAW;AACtC,gBAAI,oBAAoB,KAAK;AAC7B,mBAAO;AAAA,UACT;AAEA,eAAK,gBAAgB,eAAe,UAAU,KAAK,4BAA4B;AAC/E,eAAK,gBAAgB,YAAY,UAAU,KAAK,yBAAyB;AAAA,QAC3E,WAAW,sCAA8C;AACvD,cAAI,CAAC,KAAK,4BAA4B;AACpC,gBAAI,yBAAyB,MAAM;AACnC,mBAAO;AAAA,UACT;AAEA,eAAK,kBAAkB,KAAK;AAE5B,cAAI,KAAK,yDAAiE;AACxE,iBAAK;AACL,iBAAK,KAAK;AAAA,UACZ;AAEA,eAAK,yBAAyB,SAAS,KAAK,iBAAiB,qBAAuC;AAEpG,cAAI,KAAK,oBAAoB,QAAW;AACtC,gBAAI,oBAAoB,MAAM;AAC9B,mBAAO;AAAA,UACT;AAEA,eAAK,gBAAgB,eAAe,UAAU,KAAK,4BAA4B;AAC/E,eAAK,gBAAgB,YAAY,UAAU,KAAK,yBAAyB;AAAA,QAC3E,WACE,KAAK,oBAAoB,UACzB,KAAK,uBAAuB,UAC5B,CAAC,KAAK,mBAAmB,MAAM,GAC/B;AACA,cAAI,WAAW,iDAAiD;AAChE;AAAA,QACF,OAAO;AACL,gBAAM,eAAe,KAAK,gBAAgB,QAAQ,IAAI;AAEtD,cAAI,CAAC,cAAc;AACjB,gBAAI,WAAW,yCAAyC;AACxD;AAAA,UACF,OAAO;AACL,iBAAK,kBAAkB;AACvB,iBAAK,4BAA4B;AAEjC,iBAAK,yBAAyB,SAAS,KAAK,iBAAiB,qBAAuC;AAEpG,iBAAK,gBAAgB,eAAe,UAAU,KAAK,4BAA4B;AAC/E,iBAAK,gBAAgB,YAAY,UAAU,KAAK,yBAAyB;AAAA,UAC3E;AAAA,QACF;AAEA,aAAK,4BAA4B;AAEjC,aAAK,KAAK;AACV,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA;AAAA;;;ACx2EA;AAAA;AAMA,KAAC,SAAS,GAAE;AAAC,UAAG,OAAO,YAAU,YAAU,OAAO,WAAS,aAAY;AAAC,eAAO,UAAQ,EAAE;AAAA,MAAC,WAAS,OAAO,WAAS,cAAY,OAAO,KAAI;AAAC,eAAO,CAAC,GAAE,CAAC;AAAA,MAAC,OAAK;AAAC,YAAI;AAAE,YAAG,OAAO,WAAS,aAAY;AAAC,cAAE;AAAA,QAAM,WAAS,OAAO,WAAS,aAAY;AAAC,cAAE;AAAA,QAAM,WAAS,OAAO,SAAO,aAAY;AAAC,cAAE;AAAA,QAAI,OAAK;AAAC,cAAE;AAAA,QAAI;AAAC,UAAE,cAAc,EAAE;AAAA,MAAC;AAAA,IAAC,GAAG,WAAU;AAAC,UAAII,SAAOC,SAAOC;AAAQ,cAAQ,SAAS,EAAE,GAAE,GAAE,GAAE;AAAC,iBAAS,EAAEC,IAAE,GAAE;AAAC,cAAG,CAAC,EAAEA,EAAC,GAAE;AAAC,gBAAG,CAAC,EAAEA,EAAC,GAAE;AAAC,kBAAI,IAAE,OAAO,aAAS,cAAY;AAAQ,kBAAG,CAAC,KAAG,EAAE,QAAO,EAAEA,IAAE,IAAE;AAAE,kBAAG,EAAE,QAAO,EAAEA,IAAE,IAAE;AAAE,kBAAI,IAAE,IAAI,MAAM,yBAAuBA,KAAE,GAAG;AAAE,oBAAO,EAAE,OAAK,oBAAoB;AAAA,YAAE;AAAC,gBAAI,IAAE,EAAEA,EAAC,IAAE,EAAC,SAAQ,CAAC,EAAC;AAAE,cAAEA,EAAC,EAAE,CAAC,EAAE,KAAK,EAAE,SAAQ,SAASC,IAAE;AAAC,kBAAIC,KAAE,EAAEF,EAAC,EAAE,CAAC,EAAEC,EAAC;AAAE,qBAAO,EAAEC,KAAEA,KAAED,EAAC;AAAA,YAAC,GAAE,GAAE,EAAE,SAAQ,GAAE,GAAE,GAAE,CAAC;AAAA,UAAC;AAAC,iBAAO,EAAED,EAAC,EAAE;AAAA,QAAO;AAAC,YAAI,IAAE,OAAO,aAAS,cAAY;AAAQ,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,EAAE,CAAC,CAAC;AAAE,eAAO;AAAA,MAAC,GAAG,EAAC,GAAE,CAAC,SAAS,SAAQF,SAAOC,UAAQ;AACr1B,SAAC,SAAUI,SAAO;AAClB;AACA,cAAI,WAAWA,QAAO,oBAAoBA,QAAO;AAEjD,cAAI;AAEJ;AACE,gBAAI,UAAU;AACZ,kBAAI,SAAS;AACb,kBAAI,WAAW,IAAI,SAAS,QAAQ;AACpC,kBAAI,UAAUA,QAAO,SAAS,eAAe,EAAE;AAC/C,uBAAS,QAAQ,SAAS;AAAA,gBACxB,eAAe;AAAA,cACjB,CAAC;AACD,8BAAgB,WAAY;AAC1B,wBAAQ,OAAQ,SAAS,EAAE,SAAS;AAAA,cACtC;AAAA,YACF,WAAW,CAACA,QAAO,gBAAgB,OAAOA,QAAO,mBAAmB,aAAa;AAC/E,kBAAI,UAAU,IAAIA,QAAO,eAAe;AACxC,sBAAQ,MAAM,YAAY;AAC1B,8BAAgB,WAAY;AAC1B,wBAAQ,MAAM,YAAY,CAAC;AAAA,cAC7B;AAAA,YACF,WAAW,cAAcA,WAAU,wBAAwBA,QAAO,SAAS,cAAc,QAAQ,GAAG;AAClG,8BAAgB,WAAY;AAI1B,oBAAI,WAAWA,QAAO,SAAS,cAAc,QAAQ;AACrD,yBAAS,qBAAqB,WAAY;AACxC,2BAAS;AAET,2BAAS,qBAAqB;AAC9B,2BAAS,WAAW,YAAY,QAAQ;AACxC,6BAAW;AAAA,gBACb;AACA,gBAAAA,QAAO,SAAS,gBAAgB,YAAY,QAAQ;AAAA,cACtD;AAAA,YACF,OAAO;AACL,8BAAgB,WAAY;AAC1B,2BAAW,UAAU,CAAC;AAAA,cACxB;AAAA,YACF;AAAA,UACF;AAEA,cAAI;AACJ,cAAI,QAAQ,CAAC;AAEb,mBAAS,WAAW;AAClB,uBAAW;AACX,gBAAI,GAAG;AACP,gBAAI,MAAM,MAAM;AAChB,mBAAO,KAAK;AACV,yBAAW;AACX,sBAAQ,CAAC;AACT,kBAAI;AACJ,qBAAO,EAAE,IAAI,KAAK;AAChB,yBAAS,CAAC,EAAE;AAAA,cACd;AACA,oBAAM,MAAM;AAAA,YACd;AACA,uBAAW;AAAA,UACb;AAEA,UAAAL,QAAO,UAAU;AACjB,mBAAS,UAAU,MAAM;AACvB,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,CAAC,UAAU;AACvC,4BAAc;AAAA,YAChB;AAAA,UACF;AAAA,QAEA,GAAG,KAAK,MAAK,OAAO,WAAW,cAAc,SAAS,OAAO,SAAS,cAAc,OAAO,OAAO,WAAW,cAAc,SAAS,CAAC,CAAC;AAAA,MACtI,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,SAAS,SAAQA,SAAOC,UAAQ;AACzC;AACA,YAAI,YAAY,QAAQ,CAAC;AAGzB,iBAAS,WAAW;AAAA,QAAC;AAErB,YAAI,WAAW,CAAC;AAEhB,YAAI,WAAW,CAAC,UAAU;AAC1B,YAAI,YAAY,CAAC,WAAW;AAC5B,YAAI,UAAU,CAAC,SAAS;AAExB,QAAAD,QAAO,UAAUM;AAEjB,iBAASA,SAAQ,UAAU;AACzB,cAAI,OAAO,aAAa,YAAY;AAClC,kBAAM,IAAI,UAAU,6BAA6B;AAAA,UACnD;AACA,eAAK,QAAQ;AACb,eAAK,QAAQ,CAAC;AACd,eAAK,UAAU;AACf,cAAI,aAAa,UAAU;AACzB,kCAAsB,MAAM,QAAQ;AAAA,UACtC;AAAA,QACF;AAEA,QAAAA,SAAQ,UAAU,OAAO,IAAI,SAAU,YAAY;AACjD,iBAAO,KAAK,KAAK,MAAM,UAAU;AAAA,QACnC;AACA,QAAAA,SAAQ,UAAU,OAAO,SAAU,aAAa,YAAY;AAC1D,cAAI,OAAO,gBAAgB,cAAc,KAAK,UAAU,aACtD,OAAO,eAAe,cAAc,KAAK,UAAU,UAAU;AAC7D,mBAAO;AAAA,UACT;AACA,cAAI,UAAU,IAAI,KAAK,YAAY,QAAQ;AAC3C,cAAI,KAAK,UAAU,SAAS;AAC1B,gBAAI,WAAW,KAAK,UAAU,YAAY,cAAc;AACxD,mBAAO,SAAS,UAAU,KAAK,OAAO;AAAA,UACxC,OAAO;AACL,iBAAK,MAAM,KAAK,IAAI,UAAU,SAAS,aAAa,UAAU,CAAC;AAAA,UACjE;AAEA,iBAAO;AAAA,QACT;AACA,iBAAS,UAAU,SAAS,aAAa,YAAY;AACnD,eAAK,UAAU;AACf,cAAI,OAAO,gBAAgB,YAAY;AACrC,iBAAK,cAAc;AACnB,iBAAK,gBAAgB,KAAK;AAAA,UAC5B;AACA,cAAI,OAAO,eAAe,YAAY;AACpC,iBAAK,aAAa;AAClB,iBAAK,eAAe,KAAK;AAAA,UAC3B;AAAA,QACF;AACA,kBAAU,UAAU,gBAAgB,SAAU,OAAO;AACnD,mBAAS,QAAQ,KAAK,SAAS,KAAK;AAAA,QACtC;AACA,kBAAU,UAAU,qBAAqB,SAAU,OAAO;AACxD,iBAAO,KAAK,SAAS,KAAK,aAAa,KAAK;AAAA,QAC9C;AACA,kBAAU,UAAU,eAAe,SAAU,OAAO;AAClD,mBAAS,OAAO,KAAK,SAAS,KAAK;AAAA,QACrC;AACA,kBAAU,UAAU,oBAAoB,SAAU,OAAO;AACvD,iBAAO,KAAK,SAAS,KAAK,YAAY,KAAK;AAAA,QAC7C;AAEA,iBAAS,OAAO,SAAS,MAAM,OAAO;AACpC,oBAAU,WAAY;AACpB,gBAAI;AACJ,gBAAI;AACF,4BAAc,KAAK,KAAK;AAAA,YAC1B,SAAS,GAAG;AACV,qBAAO,SAAS,OAAO,SAAS,CAAC;AAAA,YACnC;AACA,gBAAI,gBAAgB,SAAS;AAC3B,uBAAS,OAAO,SAAS,IAAI,UAAU,oCAAoC,CAAC;AAAA,YAC9E,OAAO;AACL,uBAAS,QAAQ,SAAS,WAAW;AAAA,YACvC;AAAA,UACF,CAAC;AAAA,QACH;AAEA,iBAAS,UAAU,SAAUC,OAAM,OAAO;AACxC,cAAI,SAAS,SAAS,SAAS,KAAK;AACpC,cAAI,OAAO,WAAW,SAAS;AAC7B,mBAAO,SAAS,OAAOA,OAAM,OAAO,KAAK;AAAA,UAC3C;AACA,cAAI,WAAW,OAAO;AAEtB,cAAI,UAAU;AACZ,kCAAsBA,OAAM,QAAQ;AAAA,UACtC,OAAO;AACL,YAAAA,MAAK,QAAQ;AACb,YAAAA,MAAK,UAAU;AACf,gBAAI,IAAI;AACR,gBAAI,MAAMA,MAAK,MAAM;AACrB,mBAAO,EAAE,IAAI,KAAK;AAChB,cAAAA,MAAK,MAAM,CAAC,EAAE,cAAc,KAAK;AAAA,YACnC;AAAA,UACF;AACA,iBAAOA;AAAA,QACT;AACA,iBAAS,SAAS,SAAUA,OAAMC,QAAO;AACvC,UAAAD,MAAK,QAAQ;AACb,UAAAA,MAAK,UAAUC;AACf,cAAI,IAAI;AACR,cAAI,MAAMD,MAAK,MAAM;AACrB,iBAAO,EAAE,IAAI,KAAK;AAChB,YAAAA,MAAK,MAAM,CAAC,EAAE,aAAaC,MAAK;AAAA,UAClC;AACA,iBAAOD;AAAA,QACT;AAEA,iBAAS,QAAQ,KAAK;AAEpB,cAAI,OAAO,OAAO,IAAI;AACtB,cAAI,QAAQ,OAAO,QAAQ,YAAY,OAAO,QAAQ,eAAe,OAAO,SAAS,YAAY;AAC/F,mBAAO,SAAS,WAAW;AACzB,mBAAK,MAAM,KAAK,SAAS;AAAA,YAC3B;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,sBAAsBA,OAAM,UAAU;AAE7C,cAAI,SAAS;AACb,mBAAS,QAAQ,OAAO;AACtB,gBAAI,QAAQ;AACV;AAAA,YACF;AACA,qBAAS;AACT,qBAAS,OAAOA,OAAM,KAAK;AAAA,UAC7B;AAEA,mBAAS,UAAU,OAAO;AACxB,gBAAI,QAAQ;AACV;AAAA,YACF;AACA,qBAAS;AACT,qBAAS,QAAQA,OAAM,KAAK;AAAA,UAC9B;AAEA,mBAAS,cAAc;AACrB,qBAAS,WAAW,OAAO;AAAA,UAC7B;AAEA,cAAI,SAAS,SAAS,WAAW;AACjC,cAAI,OAAO,WAAW,SAAS;AAC7B,oBAAQ,OAAO,KAAK;AAAA,UACtB;AAAA,QACF;AAEA,iBAAS,SAAS,MAAM,OAAO;AAC7B,cAAI,MAAM,CAAC;AACX,cAAI;AACF,gBAAI,QAAQ,KAAK,KAAK;AACtB,gBAAI,SAAS;AAAA,UACf,SAAS,GAAG;AACV,gBAAI,SAAS;AACb,gBAAI,QAAQ;AAAA,UACd;AACA,iBAAO;AAAA,QACT;AAEA,QAAAD,SAAQ,UAAUG;AAClB,iBAASA,SAAQ,OAAO;AACtB,cAAI,iBAAiB,MAAM;AACzB,mBAAO;AAAA,UACT;AACA,iBAAO,SAAS,QAAQ,IAAI,KAAK,QAAQ,GAAG,KAAK;AAAA,QACnD;AAEA,QAAAH,SAAQ,SAAS;AACjB,iBAAS,OAAO,QAAQ;AACtB,cAAI,UAAU,IAAI,KAAK,QAAQ;AAC/B,iBAAO,SAAS,OAAO,SAAS,MAAM;AAAA,QACxC;AAEA,QAAAA,SAAQ,MAAMI;AACd,iBAASA,KAAI,UAAU;AACrB,cAAIH,QAAO;AACX,cAAI,OAAO,UAAU,SAAS,KAAK,QAAQ,MAAM,kBAAkB;AACjE,mBAAO,KAAK,OAAO,IAAI,UAAU,kBAAkB,CAAC;AAAA,UACtD;AAEA,cAAI,MAAM,SAAS;AACnB,cAAI,SAAS;AACb,cAAI,CAAC,KAAK;AACR,mBAAO,KAAK,QAAQ,CAAC,CAAC;AAAA,UACxB;AAEA,cAAI,SAAS,IAAI,MAAM,GAAG;AAC1B,cAAI,WAAW;AACf,cAAI,IAAI;AACR,cAAI,UAAU,IAAI,KAAK,QAAQ;AAE/B,iBAAO,EAAE,IAAI,KAAK;AAChB,wBAAY,SAAS,CAAC,GAAG,CAAC;AAAA,UAC5B;AACA,iBAAO;AACP,mBAAS,YAAY,OAAOI,IAAG;AAC7B,YAAAJ,MAAK,QAAQ,KAAK,EAAE,KAAK,gBAAgB,SAAUC,QAAO;AACxD,kBAAI,CAAC,QAAQ;AACX,yBAAS;AACT,yBAAS,OAAO,SAASA,MAAK;AAAA,cAChC;AAAA,YACF,CAAC;AACD,qBAAS,eAAe,UAAU;AAChC,qBAAOG,EAAC,IAAI;AACZ,kBAAI,EAAE,aAAa,OAAO,CAAC,QAAQ;AACjC,yBAAS;AACT,yBAAS,QAAQ,SAAS,MAAM;AAAA,cAClC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,QAAAL,SAAQ,OAAO;AACf,iBAAS,KAAK,UAAU;AACtB,cAAIC,QAAO;AACX,cAAI,OAAO,UAAU,SAAS,KAAK,QAAQ,MAAM,kBAAkB;AACjE,mBAAO,KAAK,OAAO,IAAI,UAAU,kBAAkB,CAAC;AAAA,UACtD;AAEA,cAAI,MAAM,SAAS;AACnB,cAAI,SAAS;AACb,cAAI,CAAC,KAAK;AACR,mBAAO,KAAK,QAAQ,CAAC,CAAC;AAAA,UACxB;AAEA,cAAI,IAAI;AACR,cAAI,UAAU,IAAI,KAAK,QAAQ;AAE/B,iBAAO,EAAE,IAAI,KAAK;AAChB,qBAAS,SAAS,CAAC,CAAC;AAAA,UACtB;AACA,iBAAO;AACP,mBAAS,SAAS,OAAO;AACvB,YAAAA,MAAK,QAAQ,KAAK,EAAE,KAAK,SAAU,UAAU;AAC3C,kBAAI,CAAC,QAAQ;AACX,yBAAS;AACT,yBAAS,QAAQ,SAAS,QAAQ;AAAA,cACpC;AAAA,YACF,GAAG,SAAUC,QAAO;AAClB,kBAAI,CAAC,QAAQ;AACX,yBAAS;AACT,yBAAS,OAAO,SAASA,MAAK;AAAA,cAChC;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MAEA,GAAE,EAAC,KAAI,EAAC,CAAC,GAAE,GAAE,CAAC,SAAS,SAAQR,SAAOC,UAAQ;AAC9C,SAAC,SAAUI,SAAO;AAClB;AACA,cAAI,OAAOA,QAAO,YAAY,YAAY;AACxC,YAAAA,QAAO,UAAU,QAAQ,CAAC;AAAA,UAC5B;AAAA,QAEA,GAAG,KAAK,MAAK,OAAO,WAAW,cAAc,SAAS,OAAO,SAAS,cAAc,OAAO,OAAO,WAAW,cAAc,SAAS,CAAC,CAAC;AAAA,MACtI,GAAE,EAAC,KAAI,EAAC,CAAC,GAAE,GAAE,CAAC,SAAS,SAAQL,SAAOC,UAAQ;AAC9C;AAEA,YAAI,UAAU,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,WAAW,SAAU,KAAK;AAAE,iBAAO,OAAO;AAAA,QAAK,IAAI,SAAU,KAAK;AAAE,iBAAO,OAAO,OAAO,WAAW,cAAc,IAAI,gBAAgB,UAAU,QAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,QAAK;AAE3Q,iBAAS,gBAAgB,UAAU,aAAa;AAAE,cAAI,EAAE,oBAAoB,cAAc;AAAE,kBAAM,IAAI,UAAU,mCAAmC;AAAA,UAAG;AAAA,QAAE;AAExJ,iBAAS,SAAS;AAEd,cAAI;AACA,gBAAI,OAAO,cAAc,aAAa;AAClC,qBAAO;AAAA,YACX;AACA,gBAAI,OAAO,oBAAoB,aAAa;AACxC,qBAAO;AAAA,YACX;AACA,gBAAI,OAAO,iBAAiB,aAAa;AACrC,qBAAO;AAAA,YACX;AACA,gBAAI,OAAO,eAAe,aAAa;AACnC,qBAAO;AAAA,YACX;AACA,gBAAI,OAAO,gBAAgB,aAAa;AACpC,qBAAO;AAAA,YACX;AAAA,UACJ,SAAS,GAAG;AACR;AAAA,UACJ;AAAA,QACJ;AAEA,YAAI,MAAM,OAAO;AAEjB,iBAAS,mBAAmB;AACxB,cAAI;AAGA,gBAAI,CAAC,OAAO,CAAC,IAAI,MAAM;AACnB,qBAAO;AAAA,YACX;AAKA,gBAAI,WAAW,OAAO,iBAAiB,eAAe,4BAA4B,KAAK,UAAU,SAAS,KAAK,CAAC,SAAS,KAAK,UAAU,SAAS,KAAK,CAAC,aAAa,KAAK,UAAU,QAAQ;AAE3L,gBAAI,WAAW,OAAO,UAAU,cAAc,MAAM,SAAS,EAAE,QAAQ,cAAc,MAAM;AAQ3F,oBAAQ,CAAC,YAAY,aAAa,OAAO,cAAc;AAAA;AAAA;AAAA;AAAA,YAKvD,OAAO,gBAAgB;AAAA,UAC3B,SAAS,GAAG;AACR,mBAAO;AAAA,UACX;AAAA,QACJ;AAQA,iBAAS,WAAW,OAAO,YAAY;AAEnC,kBAAQ,SAAS,CAAC;AAClB,uBAAa,cAAc,CAAC;AAC5B,cAAI;AACA,mBAAO,IAAI,KAAK,OAAO,UAAU;AAAA,UACrC,SAAS,GAAG;AACR,gBAAI,EAAE,SAAS,aAAa;AACxB,oBAAM;AAAA,YACV;AACA,gBAAI,UAAU,OAAO,gBAAgB,cAAc,cAAc,OAAO,kBAAkB,cAAc,gBAAgB,OAAO,mBAAmB,cAAc,iBAAiB;AACjL,gBAAI,UAAU,IAAI,QAAQ;AAC1B,qBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACtC,sBAAQ,OAAO,MAAM,CAAC,CAAC;AAAA,YAC3B;AACA,mBAAO,QAAQ,QAAQ,WAAW,IAAI;AAAA,UAC1C;AAAA,QACJ;AAIA,YAAI,OAAO,YAAY,aAAa;AAGhC,kBAAQ,CAAC;AAAA,QACb;AACA,YAAI,YAAY;AAEhB,iBAAS,gBAAgB,SAAS,UAAU;AACxC,cAAI,UAAU;AACV,oBAAQ,KAAK,SAAU,QAAQ;AAC3B,uBAAS,MAAM,MAAM;AAAA,YACzB,GAAG,SAAUO,QAAO;AAChB,uBAASA,MAAK;AAAA,YAClB,CAAC;AAAA,UACL;AAAA,QACJ;AAEA,iBAAS,oBAAoB,SAAS,UAAU,eAAe;AAC3D,cAAI,OAAO,aAAa,YAAY;AAChC,oBAAQ,KAAK,QAAQ;AAAA,UACzB;AAEA,cAAI,OAAO,kBAAkB,YAAY;AACrC,oBAAQ,OAAO,EAAE,aAAa;AAAA,UAClC;AAAA,QACJ;AAEA,iBAAS,aAAaI,MAAK;AAEvB,cAAI,OAAOA,SAAQ,UAAU;AACzB,oBAAQ,KAAKA,OAAM,yCAAyC;AAC5D,YAAAA,OAAM,OAAOA,IAAG;AAAA,UACpB;AAEA,iBAAOA;AAAA,QACX;AAEA,iBAAS,cAAc;AACnB,cAAI,UAAU,UAAU,OAAO,UAAU,UAAU,SAAS,CAAC,MAAM,YAAY;AAC3E,mBAAO,UAAU,UAAU,SAAS,CAAC;AAAA,UACzC;AAAA,QACJ;AAKA,YAAI,4BAA4B;AAChC,YAAI,gBAAgB;AACpB,YAAI,aAAa,CAAC;AAClB,YAAIC,YAAW,OAAO,UAAU;AAGhC,YAAI,YAAY;AAChB,YAAI,aAAa;AAOjB,iBAAS,wBAAwB,KAAK;AAClC,cAAIC,UAAS,IAAI;AACjB,cAAI,MAAM,IAAI,YAAYA,OAAM;AAChC,cAAI,MAAM,IAAI,WAAW,GAAG;AAC5B,mBAAS,IAAI,GAAG,IAAIA,SAAQ,KAAK;AAC7B,gBAAI,CAAC,IAAI,IAAI,WAAW,CAAC;AAAA,UAC7B;AACA,iBAAO;AAAA,QACX;AAiBA,iBAAS,gCAAgCC,MAAK;AAC1C,iBAAO,IAAI,UAAU,SAAUN,UAAS;AACpC,gBAAI,MAAMM,KAAI,YAAY,2BAA2B,UAAU;AAC/D,gBAAI,OAAO,WAAW,CAAC,EAAE,CAAC;AAC1B,gBAAI,YAAY,yBAAyB,EAAE,IAAI,MAAM,KAAK;AAE1D,gBAAI,UAAU,SAAU,GAAG;AAGvB,gBAAE,eAAe;AACjB,gBAAE,gBAAgB;AAClB,cAAAN,SAAQ,KAAK;AAAA,YACjB;AAEA,gBAAI,aAAa,WAAY;AACzB,kBAAI,gBAAgB,UAAU,UAAU,MAAM,eAAe;AAC7D,kBAAI,cAAc,UAAU,UAAU,MAAM,QAAQ;AAGpD,cAAAA,SAAQ,eAAe,CAAC,iBAAiB,SAAS,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE;AAAA,YACjF;AAAA,UACJ,CAAC,EAAE,OAAO,EAAE,WAAY;AACpB,mBAAO;AAAA,UACX,CAAC;AAAA,QACL;AAEA,iBAAS,kBAAkBM,MAAK;AAC5B,cAAI,OAAO,kBAAkB,WAAW;AACpC,mBAAO,UAAU,QAAQ,aAAa;AAAA,UAC1C;AACA,iBAAO,gCAAgCA,IAAG,EAAE,KAAK,SAAU,OAAO;AAC9D,4BAAgB;AAChB,mBAAO;AAAA,UACX,CAAC;AAAA,QACL;AAEA,iBAAS,gBAAgB,QAAQ;AAC7B,cAAI,YAAY,WAAW,OAAO,IAAI;AAGtC,cAAI,oBAAoB,CAAC;AAEzB,4BAAkB,UAAU,IAAI,UAAU,SAAUN,UAAS,QAAQ;AACjE,8BAAkB,UAAUA;AAC5B,8BAAkB,SAAS;AAAA,UAC/B,CAAC;AAGD,oBAAU,mBAAmB,KAAK,iBAAiB;AAGnD,cAAI,CAAC,UAAU,SAAS;AACpB,sBAAU,UAAU,kBAAkB;AAAA,UAC1C,OAAO;AACH,sBAAU,UAAU,UAAU,QAAQ,KAAK,WAAY;AACnD,qBAAO,kBAAkB;AAAA,YAC7B,CAAC;AAAA,UACL;AAAA,QACJ;AAEA,iBAAS,kBAAkB,QAAQ;AAC/B,cAAI,YAAY,WAAW,OAAO,IAAI;AAGtC,cAAI,oBAAoB,UAAU,mBAAmB,IAAI;AAIzD,cAAI,mBAAmB;AACnB,8BAAkB,QAAQ;AAC1B,mBAAO,kBAAkB;AAAA,UAC7B;AAAA,QACJ;AAEA,iBAAS,iBAAiB,QAAQO,MAAK;AACnC,cAAI,YAAY,WAAW,OAAO,IAAI;AAGtC,cAAI,oBAAoB,UAAU,mBAAmB,IAAI;AAIzD,cAAI,mBAAmB;AACnB,8BAAkB,OAAOA,IAAG;AAC5B,mBAAO,kBAAkB;AAAA,UAC7B;AAAA,QACJ;AAEA,iBAAS,eAAe,QAAQ,eAAe;AAC3C,iBAAO,IAAI,UAAU,SAAUP,UAAS,QAAQ;AAC5C,uBAAW,OAAO,IAAI,IAAI,WAAW,OAAO,IAAI,KAAK,gBAAgB;AAErE,gBAAI,OAAO,IAAI;AACX,kBAAI,eAAe;AACf,gCAAgB,MAAM;AACtB,uBAAO,GAAG,MAAM;AAAA,cACpB,OAAO;AACH,uBAAOA,SAAQ,OAAO,EAAE;AAAA,cAC5B;AAAA,YACJ;AAEA,gBAAI,SAAS,CAAC,OAAO,IAAI;AAEzB,gBAAI,eAAe;AACf,qBAAO,KAAK,OAAO,OAAO;AAAA,YAC9B;AAEA,gBAAI,UAAU,IAAI,KAAK,MAAM,KAAK,MAAM;AAExC,gBAAI,eAAe;AACf,sBAAQ,kBAAkB,SAAU,GAAG;AACnC,oBAAI,KAAK,QAAQ;AACjB,oBAAI;AACA,qBAAG,kBAAkB,OAAO,SAAS;AACrC,sBAAI,EAAE,cAAc,GAAG;AAEnB,uBAAG,kBAAkB,yBAAyB;AAAA,kBAClD;AAAA,gBACJ,SAAS,IAAI;AACT,sBAAI,GAAG,SAAS,mBAAmB;AAC/B,4BAAQ,KAAK,mBAAmB,OAAO,OAAO,sCAA2C,EAAE,aAAa,iBAAiB,EAAE,aAAa,wBAAwB,OAAO,YAAY,mBAAmB;AAAA,kBAC1M,OAAO;AACH,0BAAM;AAAA,kBACV;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAEA,oBAAQ,UAAU,SAAU,GAAG;AAC3B,gBAAE,eAAe;AACjB,qBAAO,QAAQ,KAAK;AAAA,YACxB;AAEA,oBAAQ,YAAY,WAAY;AAC5B,cAAAA,SAAQ,QAAQ,MAAM;AACtB,gCAAkB,MAAM;AAAA,YAC5B;AAAA,UACJ,CAAC;AAAA,QACL;AAEA,iBAAS,uBAAuB,QAAQ;AACpC,iBAAO,eAAe,QAAQ,KAAK;AAAA,QACvC;AAEA,iBAAS,uBAAuB,QAAQ;AACpC,iBAAO,eAAe,QAAQ,IAAI;AAAA,QACtC;AAEA,iBAAS,iBAAiB,QAAQ,gBAAgB;AAC9C,cAAI,CAAC,OAAO,IAAI;AACZ,mBAAO;AAAA,UACX;AAEA,cAAI,aAAa,CAAC,OAAO,GAAG,iBAAiB,SAAS,OAAO,SAAS;AACtE,cAAI,cAAc,OAAO,UAAU,OAAO,GAAG;AAC7C,cAAI,YAAY,OAAO,UAAU,OAAO,GAAG;AAE3C,cAAI,aAAa;AAGb,gBAAI,OAAO,YAAY,gBAAgB;AACnC,sBAAQ,KAAK,mBAAmB,OAAO,OAAO,wCAA6C,OAAO,GAAG,UAAU,iBAAiB,OAAO,UAAU,GAAG;AAAA,YACxJ;AAEA,mBAAO,UAAU,OAAO,GAAG;AAAA,UAC/B;AAEA,cAAI,aAAa,YAAY;AAIzB,gBAAI,YAAY;AACZ,kBAAI,aAAa,OAAO,GAAG,UAAU;AACrC,kBAAI,aAAa,OAAO,SAAS;AAC7B,uBAAO,UAAU;AAAA,cACrB;AAAA,YACJ;AAEA,mBAAO;AAAA,UACX;AAEA,iBAAO;AAAA,QACX;AAGA,iBAAS,YAAY,MAAM;AACvB,iBAAO,IAAI,UAAU,SAAUA,UAAS,QAAQ;AAC5C,gBAAI,SAAS,IAAI,WAAW;AAC5B,mBAAO,UAAU;AACjB,mBAAO,YAAY,SAAU,GAAG;AAC5B,kBAAIQ,UAAS,KAAK,EAAE,OAAO,UAAU,EAAE;AACvC,cAAAR,SAAQ;AAAA,gBACJ,6BAA6B;AAAA,gBAC7B,MAAMQ;AAAA,gBACN,MAAM,KAAK;AAAA,cACf,CAAC;AAAA,YACL;AACA,mBAAO,mBAAmB,IAAI;AAAA,UAClC,CAAC;AAAA,QACL;AAGA,iBAAS,YAAY,aAAa;AAC9B,cAAI,YAAY,wBAAwB,KAAK,YAAY,IAAI,CAAC;AAC9D,iBAAO,WAAW,CAAC,SAAS,GAAG,EAAE,MAAM,YAAY,KAAK,CAAC;AAAA,QAC7D;AAGA,iBAAS,eAAe,OAAO;AAC3B,iBAAO,SAAS,MAAM;AAAA,QAC1B;AAMA,iBAAS,YAAY,UAAU;AAC3B,cAAIV,QAAO;AAEX,cAAI,UAAUA,MAAK,WAAW,EAAE,KAAK,WAAY;AAC7C,gBAAI,YAAY,WAAWA,MAAK,QAAQ,IAAI;AAE5C,gBAAI,aAAa,UAAU,SAAS;AAChC,qBAAO,UAAU;AAAA,YACrB;AAAA,UACJ,CAAC;AAED,8BAAoB,SAAS,UAAU,QAAQ;AAC/C,iBAAO;AAAA,QACX;AAKA,iBAAS,cAAc,QAAQ;AAC3B,0BAAgB,MAAM;AAEtB,cAAI,YAAY,WAAW,OAAO,IAAI;AACtC,cAAI,UAAU,UAAU;AAExB,mBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,gBAAI,SAAS,QAAQ,CAAC;AACtB,gBAAI,OAAO,QAAQ,IAAI;AACnB,qBAAO,QAAQ,GAAG,MAAM;AACxB,qBAAO,QAAQ,KAAK;AAAA,YACxB;AAAA,UACJ;AACA,iBAAO,KAAK;AAEZ,iBAAO,uBAAuB,MAAM,EAAE,KAAK,SAAU,IAAI;AACrD,mBAAO,KAAK;AACZ,gBAAI,iBAAiB,MAAM,GAAG;AAE1B,qBAAO,uBAAuB,MAAM;AAAA,YACxC;AACA,mBAAO;AAAA,UACX,CAAC,EAAE,KAAK,SAAU,IAAI;AAGlB,mBAAO,KAAK,UAAU,KAAK;AAC3B,qBAASI,KAAI,GAAGA,KAAI,QAAQ,QAAQA,MAAK;AACrC,sBAAQA,EAAC,EAAE,QAAQ,KAAK;AAAA,YAC5B;AAAA,UACJ,CAAC,EAAE,OAAO,EAAE,SAAUK,MAAK;AACvB,6BAAiB,QAAQA,IAAG;AAC5B,kBAAMA;AAAA,UACV,CAAC;AAAA,QACL;AAIA,iBAAS,kBAAkB,QAAQ,MAAM,UAAU,SAAS;AACxD,cAAI,YAAY,QAAW;AACvB,sBAAU;AAAA,UACd;AAEA,cAAI;AACA,gBAAI,KAAK,OAAO,GAAG,YAAY,OAAO,WAAW,IAAI;AACrD,qBAAS,MAAM,EAAE;AAAA,UACrB,SAASA,MAAK;AACV,gBAAI,UAAU,MAAM,CAAC,OAAO,MAAMA,KAAI,SAAS,uBAAuBA,KAAI,SAAS,kBAAkB;AACjG,qBAAO,UAAU,QAAQ,EAAE,KAAK,WAAY;AACxC,oBAAI,CAAC,OAAO,MAAMA,KAAI,SAAS,mBAAmB,CAAC,OAAO,GAAG,iBAAiB,SAAS,OAAO,SAAS,KAAK,OAAO,WAAW,OAAO,GAAG,SAAS;AAE7I,sBAAI,OAAO,IAAI;AACX,2BAAO,UAAU,OAAO,GAAG,UAAU;AAAA,kBACzC;AAEA,yBAAO,uBAAuB,MAAM;AAAA,gBACxC;AAAA,cACJ,CAAC,EAAE,KAAK,WAAY;AAChB,uBAAO,cAAc,MAAM,EAAE,KAAK,WAAY;AAC1C,oCAAkB,QAAQ,MAAM,UAAU,UAAU,CAAC;AAAA,gBACzD,CAAC;AAAA,cACL,CAAC,EAAE,OAAO,EAAE,QAAQ;AAAA,YACxB;AAEA,qBAASA,IAAG;AAAA,UAChB;AAAA,QACJ;AAEA,iBAAS,kBAAkB;AACvB,iBAAO;AAAA;AAAA,YAEH,SAAS,CAAC;AAAA;AAAA,YAEV,IAAI;AAAA;AAAA,YAEJ,SAAS;AAAA;AAAA,YAET,oBAAoB,CAAC;AAAA,UACzB;AAAA,QACJ;AAIA,iBAAS,aAAa,SAAS;AAC3B,cAAIT,QAAO;AACX,cAAI,SAAS;AAAA,YACT,IAAI;AAAA,UACR;AAEA,cAAI,SAAS;AACT,qBAAS,KAAK,SAAS;AACnB,qBAAO,CAAC,IAAI,QAAQ,CAAC;AAAA,YACzB;AAAA,UACJ;AAGA,cAAI,YAAY,WAAW,OAAO,IAAI;AAGtC,cAAI,CAAC,WAAW;AACZ,wBAAY,gBAAgB;AAE5B,uBAAW,OAAO,IAAI,IAAI;AAAA,UAC9B;AAGA,oBAAU,QAAQ,KAAKA,KAAI;AAG3B,cAAI,CAACA,MAAK,YAAY;AAClB,YAAAA,MAAK,aAAaA,MAAK;AACvB,YAAAA,MAAK,QAAQ;AAAA,UACjB;AAGA,cAAI,eAAe,CAAC;AAEpB,mBAAS,eAAe;AAGpB,mBAAO,UAAU,QAAQ;AAAA,UAC7B;AAEA,mBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,QAAQ,KAAK;AAC/C,gBAAI,SAAS,UAAU,QAAQ,CAAC;AAChC,gBAAI,WAAWA,OAAM;AAEjB,2BAAa,KAAK,OAAO,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC;AAAA,YAChE;AAAA,UACJ;AAGA,cAAI,UAAU,UAAU,QAAQ,MAAM,CAAC;AAIvC,iBAAO,UAAU,IAAI,YAAY,EAAE,KAAK,WAAY;AAChD,mBAAO,KAAK,UAAU;AAEtB,mBAAO,uBAAuB,MAAM;AAAA,UACxC,CAAC,EAAE,KAAK,SAAU,IAAI;AAClB,mBAAO,KAAK;AACZ,gBAAI,iBAAiB,QAAQA,MAAK,eAAe,OAAO,GAAG;AAEvD,qBAAO,uBAAuB,MAAM;AAAA,YACxC;AACA,mBAAO;AAAA,UACX,CAAC,EAAE,KAAK,SAAU,IAAI;AAClB,mBAAO,KAAK,UAAU,KAAK;AAC3B,YAAAA,MAAK,UAAU;AAEf,qBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,kBAAIW,UAAS,QAAQ,CAAC;AACtB,kBAAIA,YAAWX,OAAM;AAEjB,gBAAAW,QAAO,QAAQ,KAAK,OAAO;AAC3B,gBAAAA,QAAO,QAAQ,UAAU,OAAO;AAAA,cACpC;AAAA,YACJ;AAAA,UACJ,CAAC;AAAA,QACL;AAEA,iBAAS,QAAQN,MAAK,UAAU;AAC5B,cAAIL,QAAO;AAEX,UAAAK,OAAM,aAAaA,IAAG;AAEtB,cAAI,UAAU,IAAI,UAAU,SAAUH,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,gCAAkBA,MAAK,SAAS,WAAW,SAAUS,MAAK,aAAa;AACnE,oBAAIA,MAAK;AACL,yBAAO,OAAOA,IAAG;AAAA,gBACrB;AAEA,oBAAI;AACA,sBAAI,QAAQ,YAAY,YAAYT,MAAK,QAAQ,SAAS;AAC1D,sBAAI,MAAM,MAAM,IAAIK,IAAG;AAEvB,sBAAI,YAAY,WAAY;AACxB,wBAAI,QAAQ,IAAI;AAChB,wBAAI,UAAU,QAAW;AACrB,8BAAQ;AAAA,oBACZ;AACA,wBAAI,eAAe,KAAK,GAAG;AACvB,8BAAQ,YAAY,KAAK;AAAA,oBAC7B;AACA,oBAAAH,SAAQ,KAAK;AAAA,kBACjB;AAEA,sBAAI,UAAU,WAAY;AACtB,2BAAO,IAAI,KAAK;AAAA,kBACpB;AAAA,gBACJ,SAAS,GAAG;AACR,yBAAO,CAAC;AAAA,gBACZ;AAAA,cACJ,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAGA,iBAAS,QAAQU,WAAU,UAAU;AACjC,cAAIZ,QAAO;AAEX,cAAI,UAAU,IAAI,UAAU,SAAUE,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,gCAAkBA,MAAK,SAAS,WAAW,SAAUS,MAAK,aAAa;AACnE,oBAAIA,MAAK;AACL,yBAAO,OAAOA,IAAG;AAAA,gBACrB;AAEA,oBAAI;AACA,sBAAI,QAAQ,YAAY,YAAYT,MAAK,QAAQ,SAAS;AAC1D,sBAAI,MAAM,MAAM,WAAW;AAC3B,sBAAI,kBAAkB;AAEtB,sBAAI,YAAY,WAAY;AACxB,wBAAI,SAAS,IAAI;AAEjB,wBAAI,QAAQ;AACR,0BAAI,QAAQ,OAAO;AACnB,0BAAI,eAAe,KAAK,GAAG;AACvB,gCAAQ,YAAY,KAAK;AAAA,sBAC7B;AACA,0BAAI,SAASY,UAAS,OAAO,OAAO,KAAK,iBAAiB;AAK1D,0BAAI,WAAW,QAAQ;AACnB,wBAAAV,SAAQ,MAAM;AAAA,sBAClB,OAAO;AACH,+BAAO,UAAU,EAAE;AAAA,sBACvB;AAAA,oBACJ,OAAO;AACH,sBAAAA,SAAQ;AAAA,oBACZ;AAAA,kBACJ;AAEA,sBAAI,UAAU,WAAY;AACtB,2BAAO,IAAI,KAAK;AAAA,kBACpB;AAAA,gBACJ,SAAS,GAAG;AACR,yBAAO,CAAC;AAAA,gBACZ;AAAA,cACJ,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AAEjC,iBAAO;AAAA,QACX;AAEA,iBAAS,QAAQG,MAAK,OAAO,UAAU;AACnC,cAAIL,QAAO;AAEX,UAAAK,OAAM,aAAaA,IAAG;AAEtB,cAAI,UAAU,IAAI,UAAU,SAAUH,UAAS,QAAQ;AACnD,gBAAI;AACJ,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,uBAASA,MAAK;AACd,kBAAIM,UAAS,KAAK,KAAK,MAAM,iBAAiB;AAC1C,uBAAO,kBAAkB,OAAO,EAAE,EAAE,KAAK,SAAU,aAAa;AAC5D,sBAAI,aAAa;AACb,2BAAO;AAAA,kBACX;AACA,yBAAO,YAAY,KAAK;AAAA,gBAC5B,CAAC;AAAA,cACL;AACA,qBAAO;AAAA,YACX,CAAC,EAAE,KAAK,SAAUO,QAAO;AACrB,gCAAkBb,MAAK,SAAS,YAAY,SAAUS,MAAK,aAAa;AACpE,oBAAIA,MAAK;AACL,yBAAO,OAAOA,IAAG;AAAA,gBACrB;AAEA,oBAAI;AACA,sBAAI,QAAQ,YAAY,YAAYT,MAAK,QAAQ,SAAS;AAM1D,sBAAIa,WAAU,MAAM;AAChB,oBAAAA,SAAQ;AAAA,kBACZ;AAEA,sBAAI,MAAM,MAAM,IAAIA,QAAOR,IAAG;AAE9B,8BAAY,aAAa,WAAY;AAOjC,wBAAIQ,WAAU,QAAW;AACrB,sBAAAA,SAAQ;AAAA,oBACZ;AAEA,oBAAAX,SAAQW,MAAK;AAAA,kBACjB;AACA,8BAAY,UAAU,YAAY,UAAU,WAAY;AACpD,wBAAIJ,OAAM,IAAI,QAAQ,IAAI,QAAQ,IAAI,YAAY;AAClD,2BAAOA,IAAG;AAAA,kBACd;AAAA,gBACJ,SAAS,GAAG;AACR,yBAAO,CAAC;AAAA,gBACZ;AAAA,cACJ,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,WAAWJ,MAAK,UAAU;AAC/B,cAAIL,QAAO;AAEX,UAAAK,OAAM,aAAaA,IAAG;AAEtB,cAAI,UAAU,IAAI,UAAU,SAAUH,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,gCAAkBA,MAAK,SAAS,YAAY,SAAUS,MAAK,aAAa;AACpE,oBAAIA,MAAK;AACL,yBAAO,OAAOA,IAAG;AAAA,gBACrB;AAEA,oBAAI;AACA,sBAAI,QAAQ,YAAY,YAAYT,MAAK,QAAQ,SAAS;AAM1D,sBAAI,MAAM,MAAM,QAAQ,EAAEK,IAAG;AAC7B,8BAAY,aAAa,WAAY;AACjC,oBAAAH,SAAQ;AAAA,kBACZ;AAEA,8BAAY,UAAU,WAAY;AAC9B,2BAAO,IAAI,KAAK;AAAA,kBACpB;AAIA,8BAAY,UAAU,WAAY;AAC9B,wBAAIO,OAAM,IAAI,QAAQ,IAAI,QAAQ,IAAI,YAAY;AAClD,2BAAOA,IAAG;AAAA,kBACd;AAAA,gBACJ,SAAS,GAAG;AACR,yBAAO,CAAC;AAAA,gBACZ;AAAA,cACJ,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,MAAM,UAAU;AACrB,cAAIT,QAAO;AAEX,cAAI,UAAU,IAAI,UAAU,SAAUE,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,gCAAkBA,MAAK,SAAS,YAAY,SAAUS,MAAK,aAAa;AACpE,oBAAIA,MAAK;AACL,yBAAO,OAAOA,IAAG;AAAA,gBACrB;AAEA,oBAAI;AACA,sBAAI,QAAQ,YAAY,YAAYT,MAAK,QAAQ,SAAS;AAC1D,sBAAI,MAAM,MAAM,MAAM;AAEtB,8BAAY,aAAa,WAAY;AACjC,oBAAAE,SAAQ;AAAA,kBACZ;AAEA,8BAAY,UAAU,YAAY,UAAU,WAAY;AACpD,wBAAIO,OAAM,IAAI,QAAQ,IAAI,QAAQ,IAAI,YAAY;AAClD,2BAAOA,IAAG;AAAA,kBACd;AAAA,gBACJ,SAAS,GAAG;AACR,yBAAO,CAAC;AAAA,gBACZ;AAAA,cACJ,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,OAAO,UAAU;AACtB,cAAIT,QAAO;AAEX,cAAI,UAAU,IAAI,UAAU,SAAUE,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,gCAAkBA,MAAK,SAAS,WAAW,SAAUS,MAAK,aAAa;AACnE,oBAAIA,MAAK;AACL,yBAAO,OAAOA,IAAG;AAAA,gBACrB;AAEA,oBAAI;AACA,sBAAI,QAAQ,YAAY,YAAYT,MAAK,QAAQ,SAAS;AAC1D,sBAAI,MAAM,MAAM,MAAM;AAEtB,sBAAI,YAAY,WAAY;AACxB,oBAAAE,SAAQ,IAAI,MAAM;AAAA,kBACtB;AAEA,sBAAI,UAAU,WAAY;AACtB,2BAAO,IAAI,KAAK;AAAA,kBACpB;AAAA,gBACJ,SAAS,GAAG;AACR,yBAAO,CAAC;AAAA,gBACZ;AAAA,cACJ,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,IAAI,GAAG,UAAU;AACtB,cAAIF,QAAO;AAEX,cAAI,UAAU,IAAI,UAAU,SAAUE,UAAS,QAAQ;AACnD,gBAAI,IAAI,GAAG;AACP,cAAAA,SAAQ,IAAI;AAEZ;AAAA,YACJ;AAEA,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,gCAAkBA,MAAK,SAAS,WAAW,SAAUS,MAAK,aAAa;AACnE,oBAAIA,MAAK;AACL,yBAAO,OAAOA,IAAG;AAAA,gBACrB;AAEA,oBAAI;AACA,sBAAI,QAAQ,YAAY,YAAYT,MAAK,QAAQ,SAAS;AAC1D,sBAAI,WAAW;AACf,sBAAI,MAAM,MAAM,cAAc;AAE9B,sBAAI,YAAY,WAAY;AACxB,wBAAI,SAAS,IAAI;AACjB,wBAAI,CAAC,QAAQ;AAET,sBAAAE,SAAQ,IAAI;AAEZ;AAAA,oBACJ;AAEA,wBAAI,MAAM,GAAG;AAGT,sBAAAA,SAAQ,OAAO,GAAG;AAAA,oBACtB,OAAO;AACH,0BAAI,CAAC,UAAU;AAGX,mCAAW;AACX,+BAAO,QAAQ,CAAC;AAAA,sBACpB,OAAO;AAEH,wBAAAA,SAAQ,OAAO,GAAG;AAAA,sBACtB;AAAA,oBACJ;AAAA,kBACJ;AAEA,sBAAI,UAAU,WAAY;AACtB,2BAAO,IAAI,KAAK;AAAA,kBACpB;AAAA,gBACJ,SAAS,GAAG;AACR,yBAAO,CAAC;AAAA,gBACZ;AAAA,cACJ,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,KAAK,UAAU;AACpB,cAAIF,QAAO;AAEX,cAAI,UAAU,IAAI,UAAU,SAAUE,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,gCAAkBA,MAAK,SAAS,WAAW,SAAUS,MAAK,aAAa;AACnE,oBAAIA,MAAK;AACL,yBAAO,OAAOA,IAAG;AAAA,gBACrB;AAEA,oBAAI;AACA,sBAAI,QAAQ,YAAY,YAAYT,MAAK,QAAQ,SAAS;AAC1D,sBAAI,MAAM,MAAM,cAAc;AAC9B,sBAAIc,QAAO,CAAC;AAEZ,sBAAI,YAAY,WAAY;AACxB,wBAAI,SAAS,IAAI;AAEjB,wBAAI,CAAC,QAAQ;AACT,sBAAAZ,SAAQY,KAAI;AACZ;AAAA,oBACJ;AAEA,oBAAAA,MAAK,KAAK,OAAO,GAAG;AACpB,2BAAO,UAAU,EAAE;AAAA,kBACvB;AAEA,sBAAI,UAAU,WAAY;AACtB,2BAAO,IAAI,KAAK;AAAA,kBACpB;AAAA,gBACJ,SAAS,GAAG;AACR,yBAAO,CAAC;AAAA,gBACZ;AAAA,cACJ,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,aAAa,SAAS,UAAU;AACrC,qBAAW,YAAY,MAAM,MAAM,SAAS;AAE5C,cAAI,gBAAgB,KAAK,OAAO;AAChC,oBAAU,OAAO,YAAY,cAAc,WAAW,CAAC;AACvD,cAAI,CAAC,QAAQ,MAAM;AACf,oBAAQ,OAAO,QAAQ,QAAQ,cAAc;AAC7C,oBAAQ,YAAY,QAAQ,aAAa,cAAc;AAAA,UAC3D;AAEA,cAAId,QAAO;AACX,cAAI;AACJ,cAAI,CAAC,QAAQ,MAAM;AACf,sBAAU,UAAU,OAAO,mBAAmB;AAAA,UAClD,OAAO;AACH,gBAAI,cAAc,QAAQ,SAAS,cAAc,QAAQA,MAAK,QAAQ;AAEtE,gBAAI,YAAY,cAAc,UAAU,QAAQA,MAAK,QAAQ,EAAE,IAAI,uBAAuB,OAAO,EAAE,KAAK,SAAU,IAAI;AAClH,kBAAI,YAAY,WAAW,QAAQ,IAAI;AACvC,kBAAI,UAAU,UAAU;AACxB,wBAAU,KAAK;AACf,uBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,wBAAQ,CAAC,EAAE,QAAQ,KAAK;AAAA,cAC5B;AACA,qBAAO;AAAA,YACX,CAAC;AAED,gBAAI,CAAC,QAAQ,WAAW;AACpB,wBAAU,UAAU,KAAK,SAAU,IAAI;AACnC,gCAAgB,OAAO;AAEvB,oBAAI,YAAY,WAAW,QAAQ,IAAI;AACvC,oBAAI,UAAU,UAAU;AAExB,mBAAG,MAAM;AACT,yBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,sBAAI,SAAS,QAAQ,CAAC;AACtB,yBAAO,QAAQ,KAAK;AAAA,gBACxB;AAEA,oBAAI,gBAAgB,IAAI,UAAU,SAAUE,UAAS,QAAQ;AACzD,sBAAI,MAAM,IAAI,eAAe,QAAQ,IAAI;AAEzC,sBAAI,UAAU,IAAI,YAAY,SAAUO,MAAK;AACzC,wBAAIM,MAAK,IAAI;AACb,wBAAIA,KAAI;AACJ,sBAAAA,IAAG,MAAM;AAAA,oBACb;AACA,2BAAON,IAAG;AAAA,kBACd;AAEA,sBAAI,YAAY,WAAY;AACxB,wBAAIM,MAAK,IAAI;AACb,wBAAIA,KAAI;AACJ,sBAAAA,IAAG,MAAM;AAAA,oBACb;AACA,oBAAAb,SAAQa,GAAE;AAAA,kBACd;AAAA,gBACJ,CAAC;AAED,uBAAO,cAAc,KAAK,SAAUA,KAAI;AACpC,4BAAU,KAAKA;AACf,2BAASX,KAAI,GAAGA,KAAI,QAAQ,QAAQA,MAAK;AACrC,wBAAI,UAAU,QAAQA,EAAC;AACvB,sCAAkB,QAAQ,OAAO;AAAA,kBACrC;AAAA,gBACJ,CAAC,EAAE,OAAO,EAAE,SAAUK,MAAK;AACvB,mBAAC,iBAAiB,SAASA,IAAG,KAAK,UAAU,QAAQ,GAAG,OAAO,EAAE,WAAY;AAAA,kBAAC,CAAC;AAC/E,wBAAMA;AAAA,gBACV,CAAC;AAAA,cACL,CAAC;AAAA,YACL,OAAO;AACH,wBAAU,UAAU,KAAK,SAAU,IAAI;AACnC,oBAAI,CAAC,GAAG,iBAAiB,SAAS,QAAQ,SAAS,GAAG;AAClD;AAAA,gBACJ;AAEA,oBAAI,aAAa,GAAG,UAAU;AAE9B,gCAAgB,OAAO;AAEvB,oBAAI,YAAY,WAAW,QAAQ,IAAI;AACvC,oBAAI,UAAU,UAAU;AAExB,mBAAG,MAAM;AACT,yBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,sBAAI,SAAS,QAAQ,CAAC;AACtB,yBAAO,QAAQ,KAAK;AACpB,yBAAO,QAAQ,UAAU;AAAA,gBAC7B;AAEA,oBAAI,oBAAoB,IAAI,UAAU,SAAUP,UAAS,QAAQ;AAC7D,sBAAI,MAAM,IAAI,KAAK,QAAQ,MAAM,UAAU;AAE3C,sBAAI,UAAU,SAAUO,MAAK;AACzB,wBAAIM,MAAK,IAAI;AACb,oBAAAA,IAAG,MAAM;AACT,2BAAON,IAAG;AAAA,kBACd;AAEA,sBAAI,kBAAkB,WAAY;AAC9B,wBAAIM,MAAK,IAAI;AACb,oBAAAA,IAAG,kBAAkB,QAAQ,SAAS;AAAA,kBAC1C;AAEA,sBAAI,YAAY,WAAY;AACxB,wBAAIA,MAAK,IAAI;AACb,oBAAAA,IAAG,MAAM;AACT,oBAAAb,SAAQa,GAAE;AAAA,kBACd;AAAA,gBACJ,CAAC;AAED,uBAAO,kBAAkB,KAAK,SAAUA,KAAI;AACxC,4BAAU,KAAKA;AACf,2BAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,wBAAI,WAAW,QAAQ,CAAC;AACxB,6BAAS,QAAQ,KAAKA;AACtB,sCAAkB,SAAS,OAAO;AAAA,kBACtC;AAAA,gBACJ,CAAC,EAAE,OAAO,EAAE,SAAUN,MAAK;AACvB,mBAAC,iBAAiB,SAASA,IAAG,KAAK,UAAU,QAAQ,GAAG,OAAO,EAAE,WAAY;AAAA,kBAAC,CAAC;AAC/E,wBAAMA;AAAA,gBACV,CAAC;AAAA,cACL,CAAC;AAAA,YACL;AAAA,UACJ;AAEA,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,YAAI,eAAe;AAAA,UACf,SAAS;AAAA,UACT;AAAA,UACA,UAAU,iBAAiB;AAAA,UAC3B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAEA,iBAAS,gBAAgB;AACrB,iBAAO,OAAO,iBAAiB;AAAA,QACnC;AAKA,YAAI,aAAa;AAEjB,YAAI,mBAAmB;AACvB,YAAI,yBAAyB;AAE7B,YAAI,oBAAoB;AACxB,YAAI,2BAA2B,kBAAkB;AAGjD,YAAI,mBAAmB;AACvB,YAAI,YAAY;AAChB,YAAI,iBAAiB;AACrB,YAAI,kBAAkB;AACtB,YAAI,yBAAyB;AAC7B,YAAI,kBAAkB;AACtB,YAAI,kBAAkB;AACtB,YAAI,mBAAmB;AACvB,YAAI,mBAAmB;AACvB,YAAI,oBAAoB;AACxB,YAAI,oBAAoB;AACxB,YAAI,gCAAgC,2BAA2B,iBAAiB;AAEhF,YAAIO,cAAa,OAAO,UAAU;AAElC,iBAAS,eAAe,kBAAkB;AAEtC,cAAI,eAAe,iBAAiB,SAAS;AAC7C,cAAI,MAAM,iBAAiB;AAC3B,cAAI;AACJ,cAAI,IAAI;AACR,cAAI,UAAU,UAAU,UAAU;AAElC,cAAI,iBAAiB,iBAAiB,SAAS,CAAC,MAAM,KAAK;AACvD;AACA,gBAAI,iBAAiB,iBAAiB,SAAS,CAAC,MAAM,KAAK;AACvD;AAAA,YACJ;AAAA,UACJ;AAEA,cAAI,SAAS,IAAI,YAAY,YAAY;AACzC,cAAI,QAAQ,IAAI,WAAW,MAAM;AAEjC,eAAK,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AACzB,uBAAW,WAAW,QAAQ,iBAAiB,CAAC,CAAC;AACjD,uBAAW,WAAW,QAAQ,iBAAiB,IAAI,CAAC,CAAC;AACrD,uBAAW,WAAW,QAAQ,iBAAiB,IAAI,CAAC,CAAC;AACrD,uBAAW,WAAW,QAAQ,iBAAiB,IAAI,CAAC,CAAC;AAGrD,kBAAM,GAAG,IAAI,YAAY,IAAI,YAAY;AACzC,kBAAM,GAAG,KAAK,WAAW,OAAO,IAAI,YAAY;AAChD,kBAAM,GAAG,KAAK,WAAW,MAAM,IAAI,WAAW;AAAA,UAClD;AACA,iBAAO;AAAA,QACX;AAIA,iBAAS,eAAe,QAAQ;AAE5B,cAAI,QAAQ,IAAI,WAAW,MAAM;AACjC,cAAI,eAAe;AACnB,cAAI;AAEJ,eAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAElC,4BAAgB,WAAW,MAAM,CAAC,KAAK,CAAC;AACxC,4BAAgB,YAAY,MAAM,CAAC,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC;AAClE,4BAAgB,YAAY,MAAM,IAAI,CAAC,IAAI,OAAO,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC;AACvE,4BAAgB,WAAW,MAAM,IAAI,CAAC,IAAI,EAAE;AAAA,UAChD;AAEA,cAAI,MAAM,SAAS,MAAM,GAAG;AACxB,2BAAe,aAAa,UAAU,GAAG,aAAa,SAAS,CAAC,IAAI;AAAA,UACxE,WAAW,MAAM,SAAS,MAAM,GAAG;AAC/B,2BAAe,aAAa,UAAU,GAAG,aAAa,SAAS,CAAC,IAAI;AAAA,UACxE;AAEA,iBAAO;AAAA,QACX;AAKA,iBAAS,UAAU,OAAO,UAAU;AAChC,cAAI,YAAY;AAChB,cAAI,OAAO;AACP,wBAAYA,YAAW,KAAK,KAAK;AAAA,UACrC;AAMA,cAAI,UAAU,cAAc,0BAA0B,MAAM,UAAUA,YAAW,KAAK,MAAM,MAAM,MAAM,yBAAyB;AAG7H,gBAAI;AACJ,gBAAI,SAAS;AAEb,gBAAI,iBAAiB,aAAa;AAC9B,uBAAS;AACT,wBAAU;AAAA,YACd,OAAO;AACH,uBAAS,MAAM;AAEf,kBAAI,cAAc,sBAAsB;AACpC,0BAAU;AAAA,cACd,WAAW,cAAc,uBAAuB;AAC5C,0BAAU;AAAA,cACd,WAAW,cAAc,8BAA8B;AACnD,0BAAU;AAAA,cACd,WAAW,cAAc,uBAAuB;AAC5C,0BAAU;AAAA,cACd,WAAW,cAAc,wBAAwB;AAC7C,0BAAU;AAAA,cACd,WAAW,cAAc,uBAAuB;AAC5C,0BAAU;AAAA,cACd,WAAW,cAAc,wBAAwB;AAC7C,0BAAU;AAAA,cACd,WAAW,cAAc,yBAAyB;AAC9C,0BAAU;AAAA,cACd,WAAW,cAAc,yBAAyB;AAC9C,0BAAU;AAAA,cACd,OAAO;AACH,yBAAS,IAAI,MAAM,oCAAoC,CAAC;AAAA,cAC5D;AAAA,YACJ;AAEA,qBAAS,SAAS,eAAe,MAAM,CAAC;AAAA,UAC5C,WAAW,cAAc,iBAAiB;AAEtC,gBAAI,aAAa,IAAI,WAAW;AAEhC,uBAAW,SAAS,WAAY;AAE5B,kBAAI,MAAM,mBAAmB,MAAM,OAAO,MAAM,eAAe,KAAK,MAAM;AAE1E,uBAAS,oBAAoB,YAAY,GAAG;AAAA,YAChD;AAEA,uBAAW,kBAAkB,KAAK;AAAA,UACtC,OAAO;AACH,gBAAI;AACA,uBAAS,KAAK,UAAU,KAAK,CAAC;AAAA,YAClC,SAAS,GAAG;AACR,sBAAQ,MAAM,+CAA+C,KAAK;AAElE,uBAAS,MAAM,CAAC;AAAA,YACpB;AAAA,UACJ;AAAA,QACJ;AAUA,iBAAS,YAAY,OAAO;AAIxB,cAAI,MAAM,UAAU,GAAG,wBAAwB,MAAM,mBAAmB;AACpE,mBAAO,KAAK,MAAM,KAAK;AAAA,UAC3B;AAKA,cAAI,mBAAmB,MAAM,UAAU,6BAA6B;AACpE,cAAI,OAAO,MAAM,UAAU,0BAA0B,6BAA6B;AAElF,cAAI;AAGJ,cAAI,SAAS,aAAa,uBAAuB,KAAK,gBAAgB,GAAG;AACrE,gBAAI,UAAU,iBAAiB,MAAM,sBAAsB;AAC3D,uBAAW,QAAQ,CAAC;AACpB,+BAAmB,iBAAiB,UAAU,QAAQ,CAAC,EAAE,MAAM;AAAA,UACnE;AACA,cAAI,SAAS,eAAe,gBAAgB;AAI5C,kBAAQ,MAAM;AAAA,YACV,KAAK;AACD,qBAAO;AAAA,YACX,KAAK;AACD,qBAAO,WAAW,CAAC,MAAM,GAAG,EAAE,MAAM,SAAS,CAAC;AAAA,YAClD,KAAK;AACD,qBAAO,IAAI,UAAU,MAAM;AAAA,YAC/B,KAAK;AACD,qBAAO,IAAI,WAAW,MAAM;AAAA,YAChC,KAAK;AACD,qBAAO,IAAI,kBAAkB,MAAM;AAAA,YACvC,KAAK;AACD,qBAAO,IAAI,WAAW,MAAM;AAAA,YAChC,KAAK;AACD,qBAAO,IAAI,YAAY,MAAM;AAAA,YACjC,KAAK;AACD,qBAAO,IAAI,WAAW,MAAM;AAAA,YAChC,KAAK;AACD,qBAAO,IAAI,YAAY,MAAM;AAAA,YACjC,KAAK;AACD,qBAAO,IAAI,aAAa,MAAM;AAAA,YAClC,KAAK;AACD,qBAAO,IAAI,aAAa,MAAM;AAAA,YAClC;AACI,oBAAM,IAAI,MAAM,kBAAkB,IAAI;AAAA,UAC9C;AAAA,QACJ;AAEA,YAAI,wBAAwB;AAAA,UACxB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAYA,iBAAS,cAAc,GAAG,QAAQ,UAAU,eAAe;AACvD,YAAE,WAAW,gCAAgC,OAAO,YAAY,gDAAqD,CAAC,GAAG,UAAU,aAAa;AAAA,QACpJ;AAIA,iBAAS,eAAe,SAAS;AAC7B,cAAIhB,QAAO;AACX,cAAI,SAAS;AAAA,YACT,IAAI;AAAA,UACR;AAEA,cAAI,SAAS;AACT,qBAAS,KAAK,SAAS;AACnB,qBAAO,CAAC,IAAI,OAAO,QAAQ,CAAC,MAAM,WAAW,QAAQ,CAAC,EAAE,SAAS,IAAI,QAAQ,CAAC;AAAA,YAClF;AAAA,UACJ;AAEA,cAAI,gBAAgB,IAAI,UAAU,SAAUE,UAAS,QAAQ;AAGzD,gBAAI;AACA,qBAAO,KAAK,aAAa,OAAO,MAAM,OAAO,OAAO,OAAO,GAAG,OAAO,aAAa,OAAO,IAAI;AAAA,YACjG,SAAS,GAAG;AACR,qBAAO,OAAO,CAAC;AAAA,YACnB;AAGA,mBAAO,GAAG,YAAY,SAAU,GAAG;AAC/B,4BAAc,GAAG,QAAQ,WAAY;AACjC,gBAAAF,MAAK,UAAU;AACf,gBAAAE,SAAQ;AAAA,cACZ,GAAG,SAAUe,IAAGhB,QAAO;AACnB,uBAAOA,MAAK;AAAA,cAChB,CAAC;AAAA,YACL,GAAG,MAAM;AAAA,UACb,CAAC;AAED,iBAAO,aAAa;AACpB,iBAAO;AAAA,QACX;AAEA,iBAAS,cAAc,GAAG,QAAQ,cAAc,MAAM,UAAU,eAAe;AAC3E,YAAE,WAAW,cAAc,MAAM,UAAU,SAAUgB,IAAGhB,QAAO;AAC3D,gBAAIA,OAAM,SAASA,OAAM,YAAY;AACjC,cAAAgB,GAAE,WAAW,kEAAuE,CAAC,OAAO,SAAS,GAAG,SAAUA,IAAG,SAAS;AAC1H,oBAAI,CAAC,QAAQ,KAAK,QAAQ;AAGtB,gCAAcA,IAAG,QAAQ,WAAY;AACjC,oBAAAA,GAAE,WAAW,cAAc,MAAM,UAAU,aAAa;AAAA,kBAC5D,GAAG,aAAa;AAAA,gBACpB,OAAO;AACH,gCAAcA,IAAGhB,MAAK;AAAA,gBAC1B;AAAA,cACJ,GAAG,aAAa;AAAA,YACpB,OAAO;AACH,4BAAcgB,IAAGhB,MAAK;AAAA,YAC1B;AAAA,UACJ,GAAG,aAAa;AAAA,QACpB;AAEA,iBAAS,UAAUI,MAAK,UAAU;AAC9B,cAAIL,QAAO;AAEX,UAAAK,OAAM,aAAaA,IAAG;AAEtB,cAAI,UAAU,IAAI,UAAU,SAAUH,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,kBAAI,SAASA,MAAK;AAClB,qBAAO,GAAG,YAAY,SAAU,GAAG;AAC/B,8BAAc,GAAG,QAAQ,mBAAmB,OAAO,YAAY,0BAA0B,CAACK,IAAG,GAAG,SAAUY,IAAG,SAAS;AAClH,sBAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ,KAAK,KAAK,CAAC,EAAE,QAAQ;AAIhE,sBAAI,QAAQ;AACR,6BAAS,OAAO,WAAW,YAAY,MAAM;AAAA,kBACjD;AAEA,kBAAAf,SAAQ,MAAM;AAAA,gBAClB,GAAG,SAAUe,IAAGhB,QAAO;AACnB,yBAAOA,MAAK;AAAA,gBAChB,CAAC;AAAA,cACL,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,UAAUW,WAAU,UAAU;AACnC,cAAIZ,QAAO;AAEX,cAAI,UAAU,IAAI,UAAU,SAAUE,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,kBAAI,SAASA,MAAK;AAElB,qBAAO,GAAG,YAAY,SAAU,GAAG;AAC/B,8BAAc,GAAG,QAAQ,mBAAmB,OAAO,WAAW,CAAC,GAAG,SAAUiB,IAAG,SAAS;AACpF,sBAAI,OAAO,QAAQ;AACnB,sBAAIV,UAAS,KAAK;AAElB,2BAAS,IAAI,GAAG,IAAIA,SAAQ,KAAK;AAC7B,wBAAI,OAAO,KAAK,KAAK,CAAC;AACtB,wBAAI,SAAS,KAAK;AAIlB,wBAAI,QAAQ;AACR,+BAAS,OAAO,WAAW,YAAY,MAAM;AAAA,oBACjD;AAEA,6BAASK,UAAS,QAAQ,KAAK,KAAK,IAAI,CAAC;AAIzC,wBAAI,WAAW,QAAQ;AACnB,sBAAAV,SAAQ,MAAM;AACd;AAAA,oBACJ;AAAA,kBACJ;AAEA,kBAAAA,SAAQ;AAAA,gBACZ,GAAG,SAAUe,IAAGhB,QAAO;AACnB,yBAAOA,MAAK;AAAA,gBAChB,CAAC;AAAA,cACL,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,SAASI,MAAK,OAAO,UAAU,aAAa;AACjD,cAAIL,QAAO;AAEX,UAAAK,OAAM,aAAaA,IAAG;AAEtB,cAAI,UAAU,IAAI,UAAU,SAAUH,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAI1B,kBAAI,UAAU,QAAW;AACrB,wBAAQ;AAAA,cACZ;AAGA,kBAAI,gBAAgB;AAEpB,kBAAI,SAASA,MAAK;AAClB,qBAAO,WAAW,UAAU,OAAO,SAAUa,QAAOZ,QAAO;AACvD,oBAAIA,QAAO;AACP,yBAAOA,MAAK;AAAA,gBAChB,OAAO;AACH,yBAAO,GAAG,YAAY,SAAU,GAAG;AAC/B,kCAAc,GAAG,QAAQ,4BAA4B,OAAO,YAAY,+BAAoC,CAACI,MAAKQ,MAAK,GAAG,WAAY;AAClI,sBAAAX,SAAQ,aAAa;AAAA,oBACzB,GAAG,SAAUe,IAAGhB,QAAO;AACnB,6BAAOA,MAAK;AAAA,oBAChB,CAAC;AAAA,kBACL,GAAG,SAAU,UAAU;AAGnB,wBAAI,SAAS,SAAS,SAAS,WAAW;AAQtC,0BAAI,cAAc,GAAG;AACjB,wBAAAC,SAAQ,SAAS,MAAMF,OAAM,CAACK,MAAK,eAAe,UAAU,cAAc,CAAC,CAAC,CAAC;AAC7E;AAAA,sBACJ;AACA,6BAAO,QAAQ;AAAA,oBACnB;AAAA,kBACJ,CAAC;AAAA,gBACL;AAAA,cACJ,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,UAAUA,MAAK,OAAO,UAAU;AACrC,iBAAO,SAAS,MAAM,MAAM,CAACA,MAAK,OAAO,UAAU,CAAC,CAAC;AAAA,QACzD;AAEA,iBAAS,aAAaA,MAAK,UAAU;AACjC,cAAIL,QAAO;AAEX,UAAAK,OAAM,aAAaA,IAAG;AAEtB,cAAI,UAAU,IAAI,UAAU,SAAUH,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,kBAAI,SAASA,MAAK;AAClB,qBAAO,GAAG,YAAY,SAAU,GAAG;AAC/B,8BAAc,GAAG,QAAQ,iBAAiB,OAAO,YAAY,kBAAkB,CAACK,IAAG,GAAG,WAAY;AAC9F,kBAAAH,SAAQ;AAAA,gBACZ,GAAG,SAAUe,IAAGhB,QAAO;AACnB,yBAAOA,MAAK;AAAA,gBAChB,CAAC;AAAA,cACL,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAIA,iBAAS,QAAQ,UAAU;AACvB,cAAID,QAAO;AAEX,cAAI,UAAU,IAAI,UAAU,SAAUE,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,kBAAI,SAASA,MAAK;AAClB,qBAAO,GAAG,YAAY,SAAU,GAAG;AAC/B,8BAAc,GAAG,QAAQ,iBAAiB,OAAO,WAAW,CAAC,GAAG,WAAY;AACxE,kBAAAE,SAAQ;AAAA,gBACZ,GAAG,SAAUe,IAAGhB,QAAO;AACnB,yBAAOA,MAAK;AAAA,gBAChB,CAAC;AAAA,cACL,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAIA,iBAAS,SAAS,UAAU;AACxB,cAAID,QAAO;AAEX,cAAI,UAAU,IAAI,UAAU,SAAUE,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,kBAAI,SAASA,MAAK;AAClB,qBAAO,GAAG,YAAY,SAAU,GAAG;AAE/B,8BAAc,GAAG,QAAQ,iCAAiC,OAAO,WAAW,CAAC,GAAG,SAAUiB,IAAG,SAAS;AAClG,sBAAI,SAAS,QAAQ,KAAK,KAAK,CAAC,EAAE;AAClC,kBAAAf,SAAQ,MAAM;AAAA,gBAClB,GAAG,SAAUe,IAAGhB,QAAO;AACnB,yBAAOA,MAAK;AAAA,gBAChB,CAAC;AAAA,cACL,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AASA,iBAAS,MAAM,GAAG,UAAU;AACxB,cAAID,QAAO;AAEX,cAAI,UAAU,IAAI,UAAU,SAAUE,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,kBAAI,SAASA,MAAK;AAClB,qBAAO,GAAG,YAAY,SAAU,GAAG;AAC/B,8BAAc,GAAG,QAAQ,qBAAqB,OAAO,YAAY,yBAAyB,CAAC,IAAI,CAAC,GAAG,SAAUiB,IAAG,SAAS;AACrH,sBAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ,KAAK,KAAK,CAAC,EAAE,MAAM;AAC9D,kBAAAf,SAAQ,MAAM;AAAA,gBAClB,GAAG,SAAUe,IAAGhB,QAAO;AACnB,yBAAOA,MAAK;AAAA,gBAChB,CAAC;AAAA,cACL,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,OAAO,UAAU;AACtB,cAAID,QAAO;AAEX,cAAI,UAAU,IAAI,UAAU,SAAUE,UAAS,QAAQ;AACnD,YAAAF,MAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,kBAAI,SAASA,MAAK;AAClB,qBAAO,GAAG,YAAY,SAAU,GAAG;AAC/B,8BAAc,GAAG,QAAQ,qBAAqB,OAAO,WAAW,CAAC,GAAG,SAAUiB,IAAG,SAAS;AACtF,sBAAIH,QAAO,CAAC;AAEZ,2BAAS,IAAI,GAAG,IAAI,QAAQ,KAAK,QAAQ,KAAK;AAC1C,oBAAAA,MAAK,KAAK,QAAQ,KAAK,KAAK,CAAC,EAAE,GAAG;AAAA,kBACtC;AAEA,kBAAAZ,SAAQY,KAAI;AAAA,gBAChB,GAAG,SAAUG,IAAGhB,QAAO;AACnB,yBAAOA,MAAK;AAAA,gBAChB,CAAC;AAAA,cACL,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,UACtB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAIA,iBAAS,iBAAiB,IAAI;AAC1B,iBAAO,IAAI,UAAU,SAAUC,UAAS,QAAQ;AAC5C,eAAG,YAAY,SAAU,GAAG;AACxB,gBAAE,WAAW,+FAAoG,CAAC,GAAG,SAAUe,IAAG,SAAS;AACvI,oBAAI,aAAa,CAAC;AAElB,yBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK,QAAQ,KAAK;AAC1C,6BAAW,KAAK,QAAQ,KAAK,KAAK,CAAC,EAAE,IAAI;AAAA,gBAC7C;AAEA,gBAAAf,SAAQ;AAAA,kBACJ;AAAA,kBACA;AAAA,gBACJ,CAAC;AAAA,cACL,GAAG,SAAUe,IAAGhB,QAAO;AACnB,uBAAOA,MAAK;AAAA,cAChB,CAAC;AAAA,YACL,GAAG,SAAU,UAAU;AACnB,qBAAO,QAAQ;AAAA,YACnB,CAAC;AAAA,UACL,CAAC;AAAA,QACL;AAEA,iBAAS,eAAe,SAAS,UAAU;AACvC,qBAAW,YAAY,MAAM,MAAM,SAAS;AAE5C,cAAI,gBAAgB,KAAK,OAAO;AAChC,oBAAU,OAAO,YAAY,cAAc,WAAW,CAAC;AACvD,cAAI,CAAC,QAAQ,MAAM;AACf,oBAAQ,OAAO,QAAQ,QAAQ,cAAc;AAC7C,oBAAQ,YAAY,QAAQ,aAAa,cAAc;AAAA,UAC3D;AAEA,cAAID,QAAO;AACX,cAAI;AACJ,cAAI,CAAC,QAAQ,MAAM;AACf,sBAAU,UAAU,OAAO,mBAAmB;AAAA,UAClD,OAAO;AACH,sBAAU,IAAI,UAAU,SAAUE,UAAS;AACvC,kBAAI;AACJ,kBAAI,QAAQ,SAAS,cAAc,MAAM;AAErC,qBAAKF,MAAK,QAAQ;AAAA,cACtB,OAAO;AACH,qBAAK,aAAa,QAAQ,MAAM,IAAI,IAAI,CAAC;AAAA,cAC7C;AAEA,kBAAI,CAAC,QAAQ,WAAW;AAEpB,gBAAAE,SAAQ,iBAAiB,EAAE,CAAC;AAAA,cAChC,OAAO;AACH,gBAAAA,SAAQ;AAAA,kBACJ;AAAA,kBACA,YAAY,CAAC,QAAQ,SAAS;AAAA,gBAClC,CAAC;AAAA,cACL;AAAA,YACJ,CAAC,EAAE,KAAK,SAAU,eAAe;AAC7B,qBAAO,IAAI,UAAU,SAAUA,UAAS,QAAQ;AAC5C,8BAAc,GAAG,YAAY,SAAU,GAAG;AACtC,2BAAS,UAAU,WAAW;AAC1B,2BAAO,IAAI,UAAU,SAAUA,UAASgB,SAAQ;AAC5C,wBAAE,WAAW,0BAA0B,WAAW,CAAC,GAAG,WAAY;AAC9D,wBAAAhB,SAAQ;AAAA,sBACZ,GAAG,SAAUe,IAAGhB,QAAO;AACnB,wBAAAiB,QAAOjB,MAAK;AAAA,sBAChB,CAAC;AAAA,oBACL,CAAC;AAAA,kBACL;AAEA,sBAAI,aAAa,CAAC;AAClB,2BAAS,IAAI,GAAG,MAAM,cAAc,WAAW,QAAQ,IAAI,KAAK,KAAK;AACjE,+BAAW,KAAK,UAAU,cAAc,WAAW,CAAC,CAAC,CAAC;AAAA,kBAC1D;AAEA,4BAAU,IAAI,UAAU,EAAE,KAAK,WAAY;AACvC,oBAAAC,SAAQ;AAAA,kBACZ,CAAC,EAAE,OAAO,EAAE,SAAU,GAAG;AACrB,2BAAO,CAAC;AAAA,kBACZ,CAAC;AAAA,gBACL,GAAG,SAAU,UAAU;AACnB,yBAAO,QAAQ;AAAA,gBACnB,CAAC;AAAA,cACL,CAAC;AAAA,YACL,CAAC;AAAA,UACL;AAEA,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,YAAI,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,cAAc;AAAA,UACd,UAAU,cAAc;AAAA,UACxB,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,MAAM;AAAA,UACN,cAAc;AAAA,QAClB;AAEA,iBAAS,sBAAsB;AAC3B,cAAI;AACA,mBAAO,OAAO,iBAAiB,eAAe,aAAa;AAAA,YAE3D,CAAC,CAAC,aAAa;AAAA,UACnB,SAAS,GAAG;AACR,mBAAO;AAAA,UACX;AAAA,QACJ;AAEA,iBAAS,cAAc,SAAS,eAAe;AAC3C,cAAI,YAAY,QAAQ,OAAO;AAE/B,cAAI,QAAQ,cAAc,cAAc,WAAW;AAC/C,yBAAa,QAAQ,YAAY;AAAA,UACrC;AACA,iBAAO;AAAA,QACX;AAGA,iBAAS,4BAA4B;AACjC,cAAI,sBAAsB;AAE1B,cAAI;AACA,yBAAa,QAAQ,qBAAqB,IAAI;AAC9C,yBAAa,WAAW,mBAAmB;AAE3C,mBAAO;AAAA,UACX,SAAS,GAAG;AACR,mBAAO;AAAA,UACX;AAAA,QACJ;AAMA,iBAAS,wBAAwB;AAC7B,iBAAO,CAAC,0BAA0B,KAAK,aAAa,SAAS;AAAA,QACjE;AAGA,iBAAS,eAAe,SAAS;AAC7B,cAAIF,QAAO;AACX,cAAI,SAAS,CAAC;AACd,cAAI,SAAS;AACT,qBAAS,KAAK,SAAS;AACnB,qBAAO,CAAC,IAAI,QAAQ,CAAC;AAAA,YACzB;AAAA,UACJ;AAEA,iBAAO,YAAY,cAAc,SAASA,MAAK,cAAc;AAE7D,cAAI,CAAC,sBAAsB,GAAG;AAC1B,mBAAO,UAAU,OAAO;AAAA,UAC5B;AAEA,UAAAA,MAAK,UAAU;AACf,iBAAO,aAAa;AAEpB,iBAAO,UAAU,QAAQ;AAAA,QAC7B;AAIA,iBAAS,QAAQ,UAAU;AACvB,cAAIA,QAAO;AACX,cAAI,UAAUA,MAAK,MAAM,EAAE,KAAK,WAAY;AACxC,gBAAI,YAAYA,MAAK,QAAQ;AAE7B,qBAAS,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AAC/C,kBAAIK,OAAM,aAAa,IAAI,CAAC;AAE5B,kBAAIA,KAAI,QAAQ,SAAS,MAAM,GAAG;AAC9B,6BAAa,WAAWA,IAAG;AAAA,cAC/B;AAAA,YACJ;AAAA,UACJ,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAKA,iBAAS,UAAUA,MAAK,UAAU;AAC9B,cAAIL,QAAO;AAEX,UAAAK,OAAM,aAAaA,IAAG;AAEtB,cAAI,UAAUL,MAAK,MAAM,EAAE,KAAK,WAAY;AACxC,gBAAI,SAASA,MAAK;AAClB,gBAAI,SAAS,aAAa,QAAQ,OAAO,YAAYK,IAAG;AAMxD,gBAAI,QAAQ;AACR,uBAAS,OAAO,WAAW,YAAY,MAAM;AAAA,YACjD;AAEA,mBAAO;AAAA,UACX,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAGA,iBAAS,UAAUO,WAAU,UAAU;AACnC,cAAIZ,QAAO;AAEX,cAAI,UAAUA,MAAK,MAAM,EAAE,KAAK,WAAY;AACxC,gBAAI,SAASA,MAAK;AAClB,gBAAI,YAAY,OAAO;AACvB,gBAAI,kBAAkB,UAAU;AAChC,gBAAIO,UAAS,aAAa;AAQ1B,gBAAI,kBAAkB;AAEtB,qBAAS,IAAI,GAAG,IAAIA,SAAQ,KAAK;AAC7B,kBAAIF,OAAM,aAAa,IAAI,CAAC;AAC5B,kBAAIA,KAAI,QAAQ,SAAS,MAAM,GAAG;AAC9B;AAAA,cACJ;AACA,kBAAI,QAAQ,aAAa,QAAQA,IAAG;AAMpC,kBAAI,OAAO;AACP,wBAAQ,OAAO,WAAW,YAAY,KAAK;AAAA,cAC/C;AAEA,sBAAQO,UAAS,OAAOP,KAAI,UAAU,eAAe,GAAG,iBAAiB;AAEzE,kBAAI,UAAU,QAAQ;AAClB,uBAAO;AAAA,cACX;AAAA,YACJ;AAAA,UACJ,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAGA,iBAAS,MAAM,GAAG,UAAU;AACxB,cAAIL,QAAO;AACX,cAAI,UAAUA,MAAK,MAAM,EAAE,KAAK,WAAY;AACxC,gBAAI,SAASA,MAAK;AAClB,gBAAI;AACJ,gBAAI;AACA,uBAAS,aAAa,IAAI,CAAC;AAAA,YAC/B,SAASC,QAAO;AACZ,uBAAS;AAAA,YACb;AAGA,gBAAI,QAAQ;AACR,uBAAS,OAAO,UAAU,OAAO,UAAU,MAAM;AAAA,YACrD;AAEA,mBAAO;AAAA,UACX,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,OAAO,UAAU;AACtB,cAAID,QAAO;AACX,cAAI,UAAUA,MAAK,MAAM,EAAE,KAAK,WAAY;AACxC,gBAAI,SAASA,MAAK;AAClB,gBAAIO,UAAS,aAAa;AAC1B,gBAAIO,QAAO,CAAC;AAEZ,qBAAS,IAAI,GAAG,IAAIP,SAAQ,KAAK;AAC7B,kBAAI,UAAU,aAAa,IAAI,CAAC;AAChC,kBAAI,QAAQ,QAAQ,OAAO,SAAS,MAAM,GAAG;AACzC,gBAAAO,MAAK,KAAK,QAAQ,UAAU,OAAO,UAAU,MAAM,CAAC;AAAA,cACxD;AAAA,YACJ;AAEA,mBAAOA;AAAA,UACX,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAGA,iBAAS,SAAS,UAAU;AACxB,cAAId,QAAO;AACX,cAAI,UAAUA,MAAK,KAAK,EAAE,KAAK,SAAUc,OAAM;AAC3C,mBAAOA,MAAK;AAAA,UAChB,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAGA,iBAAS,aAAaT,MAAK,UAAU;AACjC,cAAIL,QAAO;AAEX,UAAAK,OAAM,aAAaA,IAAG;AAEtB,cAAI,UAAUL,MAAK,MAAM,EAAE,KAAK,WAAY;AACxC,gBAAI,SAASA,MAAK;AAClB,yBAAa,WAAW,OAAO,YAAYK,IAAG;AAAA,UAClD,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAMA,iBAAS,UAAUA,MAAK,OAAO,UAAU;AACrC,cAAIL,QAAO;AAEX,UAAAK,OAAM,aAAaA,IAAG;AAEtB,cAAI,UAAUL,MAAK,MAAM,EAAE,KAAK,WAAY;AAGxC,gBAAI,UAAU,QAAW;AACrB,sBAAQ;AAAA,YACZ;AAGA,gBAAI,gBAAgB;AAEpB,mBAAO,IAAI,UAAU,SAAUE,UAAS,QAAQ;AAC5C,kBAAI,SAASF,MAAK;AAClB,qBAAO,WAAW,UAAU,OAAO,SAAUa,QAAOZ,QAAO;AACvD,oBAAIA,QAAO;AACP,yBAAOA,MAAK;AAAA,gBAChB,OAAO;AACH,sBAAI;AACA,iCAAa,QAAQ,OAAO,YAAYI,MAAKQ,MAAK;AAClD,oBAAAX,SAAQ,aAAa;AAAA,kBACzB,SAAS,GAAG;AAGR,wBAAI,EAAE,SAAS,wBAAwB,EAAE,SAAS,8BAA8B;AAC5E,6BAAO,CAAC;AAAA,oBACZ;AACA,2BAAO,CAAC;AAAA,kBACZ;AAAA,gBACJ;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,CAAC;AAED,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,iBAAS,eAAe,SAAS,UAAU;AACvC,qBAAW,YAAY,MAAM,MAAM,SAAS;AAE5C,oBAAU,OAAO,YAAY,cAAc,WAAW,CAAC;AACvD,cAAI,CAAC,QAAQ,MAAM;AACf,gBAAI,gBAAgB,KAAK,OAAO;AAChC,oBAAQ,OAAO,QAAQ,QAAQ,cAAc;AAC7C,oBAAQ,YAAY,QAAQ,aAAa,cAAc;AAAA,UAC3D;AAEA,cAAIF,QAAO;AACX,cAAI;AACJ,cAAI,CAAC,QAAQ,MAAM;AACf,sBAAU,UAAU,OAAO,mBAAmB;AAAA,UAClD,OAAO;AACH,sBAAU,IAAI,UAAU,SAAUE,UAAS;AACvC,kBAAI,CAAC,QAAQ,WAAW;AACpB,gBAAAA,SAAQ,QAAQ,OAAO,GAAG;AAAA,cAC9B,OAAO;AACH,gBAAAA,SAAQ,cAAc,SAASF,MAAK,cAAc,CAAC;AAAA,cACvD;AAAA,YACJ,CAAC,EAAE,KAAK,SAAU,WAAW;AACzB,uBAAS,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AAC/C,oBAAIK,OAAM,aAAa,IAAI,CAAC;AAE5B,oBAAIA,KAAI,QAAQ,SAAS,MAAM,GAAG;AAC9B,+BAAa,WAAWA,IAAG;AAAA,gBAC/B;AAAA,cACJ;AAAA,YACJ,CAAC;AAAA,UACL;AAEA,0BAAgB,SAAS,QAAQ;AACjC,iBAAO;AAAA,QACX;AAEA,YAAI,sBAAsB;AAAA,UACtB,SAAS;AAAA,UACT,cAAc;AAAA,UACd,UAAU,oBAAoB;AAAA,UAC9B,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,MAAM;AAAA,UACN,cAAc;AAAA,QAClB;AAEA,YAAI,YAAY,SAASc,WAAU,GAAG,GAAG;AACrC,iBAAO,MAAM,KAAK,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,MAAM,CAAC,KAAK,MAAM,CAAC;AAAA,QAC3F;AAEA,YAAI,WAAW,SAASC,UAASC,QAAO,eAAe;AACnD,cAAI,MAAMA,OAAM;AAChB,cAAI,IAAI;AACR,iBAAO,IAAI,KAAK;AACZ,gBAAI,UAAUA,OAAM,CAAC,GAAG,aAAa,GAAG;AACpC,qBAAO;AAAA,YACX;AACA;AAAA,UACJ;AAEA,iBAAO;AAAA,QACX;AAEA,YAAIC,WAAU,MAAM,WAAW,SAAU,KAAK;AAC1C,iBAAO,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM;AAAA,QACnD;AAIA,YAAI,iBAAiB,CAAC;AAEtB,YAAI,gBAAgB,CAAC;AAErB,YAAI,iBAAiB;AAAA,UACjB,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,cAAc;AAAA,QAClB;AAEA,YAAI,qBAAqB,CAAC,eAAe,UAAU,SAAS,eAAe,OAAO,SAAS,eAAe,aAAa,OAAO;AAE9H,YAAI,wBAAwB,CAAC,cAAc;AAE3C,YAAI,iBAAiB,CAAC,SAAS,WAAW,WAAW,OAAO,QAAQ,UAAU,cAAc,SAAS,EAAE,OAAO,qBAAqB;AAEnI,YAAI,gBAAgB;AAAA,UAChB,aAAa;AAAA,UACb,QAAQ,mBAAmB,MAAM;AAAA,UACjC,MAAM;AAAA;AAAA;AAAA,UAGN,MAAM;AAAA,UACN,WAAW;AAAA,UACX,SAAS;AAAA,QACb;AAEA,iBAAS,cAAc,qBAAqB,eAAe;AACvD,8BAAoB,aAAa,IAAI,WAAY;AAC7C,gBAAI,QAAQ;AACZ,mBAAO,oBAAoB,MAAM,EAAE,KAAK,WAAY;AAChD,qBAAO,oBAAoB,aAAa,EAAE,MAAM,qBAAqB,KAAK;AAAA,YAC9E,CAAC;AAAA,UACL;AAAA,QACJ;AAEA,iBAASC,UAAS;AACd,mBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACvC,gBAAI,MAAM,UAAU,CAAC;AAErB,gBAAI,KAAK;AACL,uBAAS,QAAQ,KAAK;AAClB,oBAAI,IAAI,eAAe,IAAI,GAAG;AAC1B,sBAAID,SAAQ,IAAI,IAAI,CAAC,GAAG;AACpB,8BAAU,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,MAAM;AAAA,kBACzC,OAAO;AACH,8BAAU,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI;AAAA,kBACjC;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAEA,iBAAO,UAAU,CAAC;AAAA,QACtB;AAEA,YAAI,eAAc,WAAY;AAC1B,mBAASE,aAAY,SAAS;AAC1B,4BAAgB,MAAMA,YAAW;AAEjC,qBAAS,iBAAiB,gBAAgB;AACtC,kBAAI,eAAe,eAAe,aAAa,GAAG;AAC9C,oBAAI,SAAS,eAAe,aAAa;AACzC,oBAAI,aAAa,OAAO;AACxB,qBAAK,aAAa,IAAI;AAEtB,oBAAI,CAAC,eAAe,UAAU,GAAG;AAI7B,uBAAK,aAAa,MAAM;AAAA,gBAC5B;AAAA,cACJ;AAAA,YACJ;AAEA,iBAAK,iBAAiBD,QAAO,CAAC,GAAG,aAAa;AAC9C,iBAAK,UAAUA,QAAO,CAAC,GAAG,KAAK,gBAAgB,OAAO;AACtD,iBAAK,aAAa;AAClB,iBAAK,cAAc;AACnB,iBAAK,SAAS;AACd,iBAAK,UAAU;AAEf,iBAAK,6BAA6B;AAClC,iBAAK,UAAU,KAAK,QAAQ,MAAM,EAAE,OAAO,EAAE,WAAY;AAAA,YAAC,CAAC;AAAA,UAC/D;AAQA,UAAAC,aAAY,UAAU,SAAS,SAASC,QAAO,SAAS;AAIpD,iBAAK,OAAO,YAAY,cAAc,cAAc,QAAQ,OAAO,OAAO,UAAU;AAGhF,kBAAI,KAAK,QAAQ;AACb,uBAAO,IAAI,MAAM,sDAA2D;AAAA,cAChF;AAEA,uBAAS,KAAK,SAAS;AACnB,oBAAI,MAAM,aAAa;AACnB,0BAAQ,CAAC,IAAI,QAAQ,CAAC,EAAE,QAAQ,OAAO,GAAG;AAAA,gBAC9C;AAEA,oBAAI,MAAM,aAAa,OAAO,QAAQ,CAAC,MAAM,UAAU;AACnD,yBAAO,IAAI,MAAM,oCAAoC;AAAA,gBACzD;AAEA,qBAAK,QAAQ,CAAC,IAAI,QAAQ,CAAC;AAAA,cAC/B;AAIA,kBAAI,YAAY,WAAW,QAAQ,QAAQ;AACvC,uBAAO,KAAK,UAAU,KAAK,QAAQ,MAAM;AAAA,cAC7C;AAEA,qBAAO;AAAA,YACX,WAAW,OAAO,YAAY,UAAU;AACpC,qBAAO,KAAK,QAAQ,OAAO;AAAA,YAC/B,OAAO;AACH,qBAAO,KAAK;AAAA,YAChB;AAAA,UACJ;AAMA,UAAAD,aAAY,UAAU,eAAe,SAAS,aAAa,cAAc,UAAU,eAAe;AAC9F,gBAAI,UAAU,IAAI,UAAU,SAAUtB,UAAS,QAAQ;AACnD,kBAAI;AACA,oBAAI,aAAa,aAAa;AAC9B,oBAAI,kBAAkB,IAAI,MAAM,sFAA2F;AAI3H,oBAAI,CAAC,aAAa,SAAS;AACvB,yBAAO,eAAe;AACtB;AAAA,gBACJ;AAEA,oBAAI,gBAAgB,eAAe,OAAO,cAAc;AACxD,yBAAS,IAAI,GAAG,MAAM,cAAc,QAAQ,IAAI,KAAK,KAAK;AACtD,sBAAI,mBAAmB,cAAc,CAAC;AAItC,sBAAI,aAAa,CAAC,SAAS,uBAAuB,gBAAgB;AAClE,uBAAK,cAAc,aAAa,gBAAgB,MAAM,OAAO,aAAa,gBAAgB,MAAM,YAAY;AACxG,2BAAO,eAAe;AACtB;AAAA,kBACJ;AAAA,gBACJ;AAEA,oBAAI,0BAA0B,SAASwB,2BAA0B;AAC7D,sBAAI,8BAA8B,SAASC,6BAA4B,YAAY;AAC/E,2BAAO,WAAY;AACf,0BAAI1B,SAAQ,IAAI,MAAM,YAAY,aAAa,2CAA2C;AAC1F,0BAAI2B,WAAU,UAAU,OAAO3B,MAAK;AACpC,sCAAgB2B,UAAS,UAAU,UAAU,SAAS,CAAC,CAAC;AACxD,6BAAOA;AAAA,oBACX;AAAA,kBACJ;AAEA,2BAAS,KAAK,GAAG,OAAO,sBAAsB,QAAQ,KAAK,MAAM,MAAM;AACnE,wBAAI,uBAAuB,sBAAsB,EAAE;AACnD,wBAAI,CAAC,aAAa,oBAAoB,GAAG;AACrC,mCAAa,oBAAoB,IAAI,4BAA4B,oBAAoB;AAAA,oBACzF;AAAA,kBACJ;AAAA,gBACJ;AAEA,wCAAwB;AAExB,oBAAI,mBAAmB,SAASC,kBAAiB,SAAS;AACtD,sBAAI,eAAe,UAAU,GAAG;AAC5B,4BAAQ,KAAK,oCAAoC,UAAU;AAAA,kBAC/D;AACA,iCAAe,UAAU,IAAI;AAC7B,gCAAc,UAAU,IAAI;AAI5B,kBAAA3B,SAAQ;AAAA,gBACZ;AAEA,oBAAI,cAAc,cAAc;AAC5B,sBAAI,aAAa,YAAY,OAAO,aAAa,aAAa,YAAY;AACtE,iCAAa,SAAS,EAAE,KAAK,kBAAkB,MAAM;AAAA,kBACzD,OAAO;AACH,qCAAiB,CAAC,CAAC,aAAa,QAAQ;AAAA,kBAC5C;AAAA,gBACJ,OAAO;AACH,mCAAiB,IAAI;AAAA,gBACzB;AAAA,cACJ,SAAS,GAAG;AACR,uBAAO,CAAC;AAAA,cACZ;AAAA,YACJ,CAAC;AAED,gCAAoB,SAAS,UAAU,aAAa;AACpD,mBAAO;AAAA,UACX;AAEA,UAAAsB,aAAY,UAAU,SAAS,SAAS,SAAS;AAC7C,mBAAO,KAAK,WAAW;AAAA,UAC3B;AAEA,UAAAA,aAAY,UAAU,YAAY,SAAS,UAAU,YAAY,UAAU,eAAe;AACtF,gBAAI,mBAAmB,eAAe,UAAU,IAAI,UAAU,QAAQ,eAAe,UAAU,CAAC,IAAI,UAAU,OAAO,IAAI,MAAM,mBAAmB,CAAC;AAEnJ,gCAAoB,kBAAkB,UAAU,aAAa;AAC7D,mBAAO;AAAA,UACX;AAEA,UAAAA,aAAY,UAAU,gBAAgB,SAAS,cAAc,UAAU;AACnE,gBAAI,oBAAoB,UAAU,QAAQ,qBAAqB;AAC/D,gCAAoB,mBAAmB,QAAQ;AAC/C,mBAAO;AAAA,UACX;AAEA,UAAAA,aAAY,UAAU,QAAQ,SAAS,MAAM,UAAU;AACnD,gBAAIxB,QAAO;AAEX,gBAAI,UAAUA,MAAK,WAAW,KAAK,WAAY;AAC3C,kBAAIA,MAAK,WAAW,MAAM;AACtB,gBAAAA,MAAK,SAASA,MAAK,YAAY;AAAA,cACnC;AAEA,qBAAOA,MAAK;AAAA,YAChB,CAAC;AAED,gCAAoB,SAAS,UAAU,QAAQ;AAC/C,mBAAO;AAAA,UACX;AAEA,UAAAwB,aAAY,UAAU,YAAY,SAAS,UAAU,SAAS,UAAU,eAAe;AACnF,gBAAIxB,QAAO;AAEX,gBAAI,CAACsB,SAAQ,OAAO,GAAG;AACnB,wBAAU,CAAC,OAAO;AAAA,YACtB;AAEA,gBAAI,mBAAmB,KAAK,qBAAqB,OAAO;AAExD,qBAAS,oBAAoB;AACzB,cAAAtB,MAAK,QAAQ,SAASA,MAAK,OAAO;AAAA,YACtC;AAEA,qBAAS,qBAAqB,QAAQ;AAClC,cAAAA,MAAK,QAAQ,MAAM;AACnB,gCAAkB;AAElB,cAAAA,MAAK,SAASA,MAAK,aAAaA,MAAK,OAAO;AAC5C,qBAAOA,MAAK;AAAA,YAChB;AAEA,qBAAS,WAAW8B,mBAAkB;AAClC,qBAAO,WAAY;AACf,oBAAI,qBAAqB;AAEzB,yBAAS,oBAAoB;AACzB,yBAAO,qBAAqBA,kBAAiB,QAAQ;AACjD,wBAAI,aAAaA,kBAAiB,kBAAkB;AACpD;AAEA,oBAAA9B,MAAK,UAAU;AACf,oBAAAA,MAAK,SAAS;AAEd,2BAAOA,MAAK,UAAU,UAAU,EAAE,KAAK,oBAAoB,EAAE,OAAO,EAAE,iBAAiB;AAAA,kBAC3F;AAEA,oCAAkB;AAClB,sBAAIC,SAAQ,IAAI,MAAM,oCAAoC;AAC1D,kBAAAD,MAAK,aAAa,UAAU,OAAOC,MAAK;AACxC,yBAAOD,MAAK;AAAA,gBAChB;AAEA,uBAAO,kBAAkB;AAAA,cAC7B;AAAA,YACJ;AAKA,gBAAI,mBAAmB,KAAK,eAAe,OAAO,KAAK,WAAW,OAAO,EAAE,WAAY;AACnF,qBAAO,UAAU,QAAQ;AAAA,YAC7B,CAAC,IAAI,UAAU,QAAQ;AAEvB,iBAAK,aAAa,iBAAiB,KAAK,WAAY;AAChD,kBAAI,aAAa,iBAAiB,CAAC;AACnC,cAAAA,MAAK,UAAU;AACf,cAAAA,MAAK,SAAS;AAEd,qBAAOA,MAAK,UAAU,UAAU,EAAE,KAAK,SAAU,QAAQ;AACrD,gBAAAA,MAAK,UAAU,OAAO;AACtB,kCAAkB;AAClB,gBAAAA,MAAK,6BAA6B;AAClC,gBAAAA,MAAK,cAAc,WAAW,gBAAgB;AAAA,cAClD,CAAC;AAAA,YACL,CAAC,EAAE,OAAO,EAAE,WAAY;AACpB,gCAAkB;AAClB,kBAAIC,SAAQ,IAAI,MAAM,oCAAoC;AAC1D,cAAAD,MAAK,aAAa,UAAU,OAAOC,MAAK;AACxC,qBAAOD,MAAK;AAAA,YAChB,CAAC;AAED,gCAAoB,KAAK,YAAY,UAAU,aAAa;AAC5D,mBAAO,KAAK;AAAA,UAChB;AAEA,UAAAwB,aAAY,UAAU,WAAW,SAAS,SAAS,YAAY;AAC3D,mBAAO,CAAC,CAAC,cAAc,UAAU;AAAA,UACrC;AAEA,UAAAA,aAAY,UAAU,UAAU,SAAS,QAAQ,6BAA6B;AAC1E,YAAAD,QAAO,MAAM,2BAA2B;AAAA,UAC5C;AAEA,UAAAC,aAAY,UAAU,uBAAuB,SAAS,qBAAqB,SAAS;AAChF,gBAAI,mBAAmB,CAAC;AACxB,qBAAS,IAAI,GAAG,MAAM,QAAQ,QAAQ,IAAI,KAAK,KAAK;AAChD,kBAAI,aAAa,QAAQ,CAAC;AAC1B,kBAAI,KAAK,SAAS,UAAU,GAAG;AAC3B,iCAAiB,KAAK,UAAU;AAAA,cACpC;AAAA,YACJ;AACA,mBAAO;AAAA,UACX;AAEA,UAAAA,aAAY,UAAU,+BAA+B,SAAS,+BAA+B;AAKzF,qBAAS,IAAI,GAAG,MAAM,eAAe,QAAQ,IAAI,KAAK,KAAK;AACvD,4BAAc,MAAM,eAAe,CAAC,CAAC;AAAA,YACzC;AAAA,UACJ;AAEA,UAAAA,aAAY,UAAU,iBAAiB,SAASO,gBAAe,SAAS;AACpE,mBAAO,IAAIP,aAAY,OAAO;AAAA,UAClC;AAEA,iBAAOA;AAAA,QACX,GAAE;AAMF,YAAI,iBAAiB,IAAI,YAAY;AAErC,QAAA/B,QAAO,UAAU;AAAA,MAEjB,GAAE,EAAC,KAAI,EAAC,CAAC,EAAC,GAAE,CAAC,GAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAAA,IACrB,CAAC;AAAA;AAAA;;;AChvFD,IAQA,oBAGqB;AAXrB;AAAA;AAAA;AAGA;AAGA;AACA;AACA,yBAAwB;AACxB;AAEA,IAAqB,cAArB,cAAyC,SAA0B;AAAA,MACzD;AAAA,MACA;AAAA,MACA;AAAA,MACR;AAAA,MAEA,IAAI,OAAe;AACjB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,eAA8B;AAChC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAmB;AACrB,eAAO,KAAK,cAAc,WAAW,eAAe,uBAAuB,KAAK;AAAA,MAClF;AAAA,MAEA,IAAI,OAAe;AACjB,YAAI,KAAK,WAAW,MAAM;AACxB,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA,MAEA,YAAY,cAA6B,UAAkB;AACzD,cAAM;AAEN,aAAK,aAAa;AAElB,aAAK,gBAAgB;AACrB,aAAK,QAAQ;AAAA,MACf;AAAA,MAEA,IAAI,kBAA2B;AAC7B,eAAO,KAAK,qBAAqB,QAAQ,KAAK,YAAY;AAAA,MAC5D;AAAA,MAEA,MAAM,eAAe,sBAAkD;AACrE,YAAI,KAAK,aAAa,QAAQ,UAAU;AACtC,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAC9C;AAEA,YAAI,yBAAyB,MAAM;AACjC,eAAK,cAAc,YAAY,IAAI;AAEnC,gBAAM,KAAK,cAAc,KAAK,KAAK;AAAA,QACrC;AAEA,cAAM,mBAAAuC,QAAY,WAAW,KAAK,QAAQ;AAE1C,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,OAAO,wBAAkD;AAC7D,cAAM,gBAAgB,iBAAiB,cAAc,sBAAsB;AAC3E,cAAM,cAAc,iBAAiB,YAAY,sBAAsB;AAEvE,YAAI,YAAY,SAAS,GAAG;AAC1B,gBAAM,IAAI,MAAM,0BAA0B;AAAA,QAC5C;AAEA,cAAM,kBAAkB,MAAM,KAAK,cAAc,QAAQ,oCAAoC,aAAa;AAE1G,YAAI,gBAAgB,MAAM,WAAW,MAAM,QAAW;AACpD,gBAAM,IAAI,MAAM,gCAAgC;AAAA,QAClD;AAEA,cAAM,KAAK,YAAY;AAEvB,cAAM,eAAe,KAAK;AAC1B,cAAM,kBAAkB,KAAK;AAC7B,cAAM,UAAU,KAAK;AAErB,aAAK,QAAQ;AACb,aAAK,gBAAgB;AAErB,aAAK,WAAW,oBAAI,KAAK;AAGzB,cAAM,eAAe,iBAAiB,iBAAiB,OAAO;AAC9D,eAAO,gBAAgB,MAAM,YAAY;AAEzC,QAAC,gBAAkC,iBAAiB,IAAI;AAExD,cAAM,mBAAAA,QAAY,WAAW,YAAY;AAEzC,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,YAAY,OAAgC;AAChD,YAAI,SAAS,CAAC,KAAK,mBAAmB;AACpC,eAAK,kBAAkB,KAAK;AAC5B,cAAI,UAAU,MAAM,mBAAAA,QAAY,QAAQ,KAAK,QAAQ;AAIrD,cAAI,mBAAmB,aAAa;AAClC,sBAAU,IAAI,WAAW,OAAO;AAAA,UAClC,WAAW,YAAY,QAAQ,OAAO,YAAY,YAAY,EAAE,mBAAmB,aAAa;AAC9F,gBAAI,MAAM,8CAA8C,KAAK,QAAQ;AACrE,sBAAU;AAAA,UACZ;AAEA,eAAK,WAAW;AAEhB,eAAK,oBAAoB,oBAAI,KAAK;AAAA,QACpC;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,kBAAkB;AACtB,YAAI,KAAK,oBAAoB,QAAW;AACtC;AAAA,QACF;AAEA,YAAI,KAAK,oBAAoB,KAAK,UAAU;AAE1C,gBAAM,UAAU,KAAK;AAErB,gBAAM,KAAK,YAAY,MAAM,IAAI;AAEjC,gBAAM,mBAAAA,QAAY,WAAW,OAAO;AAAA,QACtC;AAAA,MACF;AAAA,MAEA,MAAM,iBAAgC;AAAA,MAEtC;AAAA,MAEA,WAAW,YAAwC,YAA6B,UAAmB;AACjG,cAAM,WAAW,iBAAiB,iBAAiB,KAAK,UAAU,UAAU;AAE5E,YAAI,UAAU;AACZ,iBAAO;AAAA,QACT;AAEA,YAAI,CAAC,KAAK,mBAAmB;AAC3B,eAAK,oBAAoB,oBAAI,KAAK;AAClC,eAAK,oBAAoB,IAAI,KAAK,KAAK,kBAAkB,QAAQ,IAAI,CAAC;AAAA,QAExE;AAEA,YAAI,aAAa,KAAK;AACtB,aAAK,WAAW;AAEhB,YACE,KAAK,kBACL,OAAO,eAAe,YACtB,iBAAiB,YAAY,IAAI,MAAM,oBACvC;AACA,2BAAiB,cAAc,IAAI;AAAA,QACrC;AAEA,aAAK,mBAAmB,YAAY,YAAY,QAAQ;AAExD,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,YAAY,OAAiB,sBAA+C;AAChF,YAAI,KAAK,aAAa,QAAQ,UAAU;AACtC,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAC9C;AAEA,YAAI,KAAK,aAAa,OAAO;AAS3B,cAAI,OAAO,KAAK,YAAY,MAAM,qBAAqB;AAIvD,eAAK,kBAAkB,KAAK;AAC5B,cAAI;AACF,kBAAM,mBAAAA,QAAY,QAAQ,KAAK,UAAU,KAAK,OAAO;AAAA,UACvD,SAASC,MAAK;AACZ,gBAAI,MAAM,iCAAiC,KAAK,WAAW,OAAOA,IAAG;AAAA,UACvE;AAEA,eAAK,oBAAoB,oBAAI,KAAK;AAElC,cAAI,yBAAyB,MAAM;AACjC,kBAAM,KAAK,cAAc,KAAK,KAAK;AAAA,UACrC;AAAA,QACF;AAEA,YAAI,KAAK,sBAAsB,MAAM;AACnC,eAAK,oBAAoB,oBAAI,KAAK;AAAA,QACpC;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA;AAAA;;;AClNA,IAWAC,qBAMqB;AAjBrB;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAEA,IAAAA,sBAAwB;AAIxB;AAEA,IAAqB,gBAArB,MAAqB,uBAAsB,WAA8B;AAAA,MAC/D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAER,IAAI,UAA0B;AAC5B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,eAAqC;AACvC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MAEA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAW;AACb,eAAO,KAAK,cAAc,eAAe,uBAAuB,iBAAiB,iBAAiB,KAAK,IAAI;AAAA,MAC7G;AAAA,MAEA,YAAY,SAAyB,cAAoC,YAAoB,YAAoB;AAC/G,cAAM;AAEN,aAAK,WAAW;AAChB,aAAK,gBAAgB;AAErB,aAAK,cAAc;AACnB,aAAK,QAAQ;AACb,aAAK,oBAAoB;AAEzB,aAAK,qBAAqB;AAE1B,aAAK,UAAU,CAAC;AAChB,aAAK,QAAQ,CAAC;AAAA,MAChB;AAAA,MAEA,WAAW,MAA2B;AACpC,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AAExD,YAAI,WAAW,KAAK,MAAM,SAAS;AAEnC,YAAI,YAAY,MAAM;AACpB,qBAAW,IAAI,YAAY,MAAM,IAAI;AAErC,eAAK,MAAM,SAAS,IAAI;AAExB,eAAK,QAAQ,gBAAgB,QAAQ;AAAA,QACvC;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,SAA2B;AAC/B,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,eAAiC;AACrC,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,mBAAqC;AACzC,YAAI,KAAK,QAAQ,UAAU;AACzB,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAC9C;AAEA,YAAI,SAAS,MAAM,KAAK,0BAA0B;AAElD,cAAM,oBAAAC,QAAY,WAAW,KAAK,WAAW,eAAe,oBAAoB;AAEhF,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,0BAA4C;AAChD,cAAM,IAAI,MAAM,wCAAwC,KAAK,WAAW,oBAAoB;AAAA,MAC9F;AAAA,MAEA,aAAa,MAA6B;AACxC,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AAExD,YAAI,aAAa,KAAK,QAAQ,SAAS;AAEvC,YAAI,CAAC,YAAY;AACf,uBAAa,IAAI,eAAc,KAAK,UAAU,MAAM,KAAK,UAAU,IAAI;AAEvE,eAAK,QAAQ,SAAS,IAAI;AAAA,QAC5B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,iBAAgC;AAAA,MAEtC;AAAA,MAEA,YAAY,MAAa;AACvB,cAAM,YAAY,iBAAiB,iBAAiB,KAAK,IAAI;AAE7D,cAAM,WAAW,KAAK,MAAM,SAAS;AAErC,YAAI,OAAO,aAAa,MAAM,oBAAoB;AAElD,aAAK,MAAM,SAAS,IAAI;AAExB,aAAK,QAAQ,kBAAkB,KAAK,sBAAsB,KAAK,IAAI;AAAA,MACrE;AAAA,MAEA,iBAAiB,MAAmB;AAClC,cAAM,YAAY,iBAAiB,iBAAiB,KAAK,IAAI;AAE7D,YAAI,UAAU,oBAAoB,SAAS,GAAG;AAC5C,eAAK,MAAM,SAAS,IAAI;AAAA,QAC1B;AAAA,MACF;AAAA,MAEA,MAAM,OAAO,wBAAgC,kBAA8C;AACzF,cAAM,gBAAgB,iBAAiB,cAAc,sBAAsB;AAC3E,cAAM,gBAAgB,iBAAiB,YAAY,sBAAsB;AAEzE,YAAI,cAAc,SAAS,GAAG;AAC5B,gBAAM,IAAI,MAAM,0BAA0B;AAAA,QAC5C;AAEA,YAAI,KAAK,aAAa,sBAAsB,GAAG;AAC7C,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,UAAU;AACjB,gBAAM,KAAK,KAAK;AAAA,QAClB;AAEA,cAAM,UAAU,KAAK;AAErB,YAAI,KAAK,kBAAkB,MAAM;AAC/B,gBAAM,kBAAkB,MAAM,KAAK,cAAc,QAAQ,oCAAoC,aAAa;AAE1G,cAAI,gBAAgB,QAAQ,aAAa,MAAM,QAAW;AACxD,kBAAM,IAAI,MAAM,kCAAkC;AAAA,UACpD;AAEA,eAAK,cAAc,gCAAgC,IAAI;AAEvD,eAAK,gBAAgB;AAErB,eAAK,QAAQ;AAEb,UAAC,gBAAkC,2BAA2B,IAAI;AAAA,QACpE;AAEA,aAAK,QAAQ;AAEb,mBAAW,YAAY,KAAK,OAAO;AACjC,gBAAM,OAAO,KAAK,MAAM,QAAQ;AAEhC,cAAI,MAAM;AACR,kBAAO,KAAqB,gBAAgB;AAAA,UAC9C;AAAA,QACF;AAEA,mBAAW,cAAc,KAAK,SAAS;AACrC,gBAAM,SAAS,KAAK,QAAQ,UAAU;AAEtC,cAAI,QAAQ;AACV,kBAAM,OAAO,gBAAgB,KAAK,QAAQ;AAAA,UAC5C;AAAA,QACF;AAEA,cAAM,KAAK,KAAK,IAAI;AAEpB,YAAI,SAAS;AACX,gBAAM,oBAAAA,QAAY,WAAW,OAAO;AAAA,QACtC;AAEA,YAAI,KAAK,kBAAkB,QAAQ,CAAC,kBAAkB;AACpD,gBAAM,KAAK,cAAc,KAAK,IAAI;AAAA,QACpC;AAEA,YAAI,CAAC,kBAAkB;AACrB,eAAK,kBAAkB,EAAE,qBAAqB,SAAS,gBAAgB,KAAK,UAAU,QAAQ,KAAK,CAAC;AAAA,QACtG;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,WAAW,MAA8B;AAC7C,cAAM,OAAO,KAAK,WAAW,IAAI;AAEjC,aAAK,QAAQ,gBAAgB,IAAI;AAEjC,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,KAAK,OAAgC;AACzC,YAAI,KAAK,qBAAqB,QAAQ,CAAC,OAAO;AAC5C,iBAAO,KAAK;AAAA,QACd;AAEA,aAAK,kBAAkB,KAAK,WAAW,eAAe;AACtD,cAAM,iBAAiB,MAAM,oBAAAA,QAAY,QAAgB,KAAK,WAAW,eAAe,oBAAoB;AAE5G,YAAI,kBAAkB,MAAM;AAC1B,eAAK,oBAAoB;AAEzB,cAAI;AAEJ,cAAI;AACF,0BAAc,KAAK,MAAM,cAAc;AAAA,UACzC,SAAS,GAAQ;AACf,gBAAI,WAAW,kDAAkD,EAAE,SAAS,CAAC;AAAA,UAC/E;AAEA,cAAI,aAAa;AACf,qBAAS,IAAI,GAAG,IAAI,YAAY,MAAM,QAAQ,KAAK;AACjD,oBAAM,WAAW,YAAY,MAAM,CAAC;AAGpC,kBAAI,SAAS,YAAY,QAAQ,EAAE,SAAS,oBAAoB,OAAO;AACrE,yBAAS,WAAW,IAAI,KAAK,SAAS,QAAQ;AAAA,cAChD;AAEA,oBAAM,UAAU,KAAK,WAAW,SAAS,IAAI;AAE7C,sBAAQ,iBAAiB,SAAS,YAAY,OAAO,OAAO,SAAS;AAErE,kBAAI,QAAQ,eAAe,QAAW;AACpC,wBAAQ,aAAa,SAAS;AAAA,cAChC;AAAA,YACF;AAEA,qBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,QAAQ,KAAK;AACnD,oBAAM,aAAa,YAAY,QAAQ,CAAC;AAGxC,kBAAI,WAAW,YAAY,QAAQ,EAAE,WAAW,oBAAoB,OAAO;AACzE,2BAAW,WAAW,IAAI,KAAK,WAAW,QAAQ;AAAA,cACpD;AAEA,oBAAM,YAAY,KAAK,aAAa,WAAW,IAAI;AAEnD,wBAAU,iBAAiB,WAAW;AACtC,wBAAU,qBAAqB,WAAW;AAAA,YAC5C;AAAA,UACF;AAAA,QACF;AAEA,aAAK,wBAAwB;AAE7B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,gBAAgB,eAAuB;AAC3C,aAAK,cAAc;AAEnB,mBAAW,YAAY,KAAK,OAAO;AACjC,gBAAM,OAAO,KAAK,MAAM,QAAQ;AAEhC,cAAI,MAAM;AACR,kBAAO,KAAqB,gBAAgB;AAAA,UAC9C;AAAA,QACF;AAEA,mBAAW,cAAc,KAAK,SAAS;AACrC,gBAAM,SAAS,KAAK,QAAQ,UAAU;AAEtC,cAAI,QAAQ;AACV,kBAAM,OAAO,gBAAgB,KAAK,QAAQ;AAAA,UAC5C;AAAA,QACF;AAEA,YAAI,KAAK,oBAAoB,QAAW;AACtC;AAAA,QACF;AAEA,YAAI,KAAK,oBAAoB,iBAAiB,wBAAwB,KAAK,QAAQ,GAAG;AACpF,gBAAM,UAAU,KAAK;AACrB,gBAAM,KAAK,KAAK,IAAI;AACpB,gBAAM,oBAAAA,QAAY,WAAW,OAAO;AAAA,QACtC;AAAA,MACF;AAAA,MAEA,MAAM,KAAK,OAAgC;AAGzC,YAAI,CAAC,KAAK,UAAU;AAClB,gBAAM,KAAK,KAAK,KAAK;AAAA,QACvB;AAEA,aAAK,wBAAwB;AAE7B,cAAM,cAA4B;AAAA,UAChC,SAAS,KAAK;AAAA,UACd,OAAO,CAAC;AAAA,UACR,SAAS,CAAC;AAAA,QACZ;AAEA,mBAAW,YAAY,KAAK,OAAO;AACjC,gBAAM,OAAO,KAAK,MAAM,QAAQ;AAEhC,cAAI,SAAS,QAAW;AACtB,kBAAM,YAAwB;AAAA,cAC5B,MAAM,KAAK;AAAA,cACX,MAAM,KAAK;AAAA,cACX,UAAU,KAAK,kBAAkB,OAAO,oBAAI,KAAK,IAAI,KAAK;AAAA,YAC5D;AAEA,wBAAY,MAAM,KAAK,SAAS;AAAA,UAClC;AAAA,QACF;AAEA,mBAAW,cAAc,KAAK,SAAS;AACrC,gBAAM,cAAc,KAAK,QAAQ,UAAU;AAE3C,cAAI,gBAAgB,UAAa,CAAC,YAAY,aAAa;AACzD,kBAAM,mBAAwC;AAAA,cAC5C,MAAM,YAAY;AAAA,cAClB,WAAW,UAAU,mBAAmB,YAAY,KAAK;AAAA,cACzD,UAAU,YAAY,kBAAkB,OAAO,oBAAI,KAAK,IAAI,YAAY;AAAA,YAC1E;AAEA,wBAAY,QAAQ,KAAK,gBAAgB;AAAA,UAC3C;AAAA,QACF;AAEA,cAAM,cAAc,KAAK,UAAU,WAAW;AAE9C,YAAI,KAAK,sBAAsB,eAAe,OAAO;AACnD,eAAK,oBAAoB;AACzB,eAAK,kBAAkB,KAAK,WAAW,eAAe;AACtD,gBAAM,oBAAAA,QAAY,QAAgB,KAAK,WAAW,eAAe,sBAAsB,WAAW;AAAA,QACpG;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAe,QAAQ,OAAmC;AAExD,YAAI,KAAK,YAAY;AACnB,cAAI,gBAAgB;AAAA,QACtB;AAEA,cAAM,mBAAkB,oBAAI,KAAK,GAAE,QAAQ;AAC3C,YAAI,mBAAmB;AAEvB,mBAAW,YAAY,KAAK,OAAO;AACjC,gBAAM,OAAO,KAAK,MAAM,QAAQ;AAEhC,cAAI,SAAS,WAAc,KAAK,aAAa,QAAQ;AACnD,gBAAI,qBAAqB,MAAM,KAAK,YAAY,OAAO,IAAI;AAE3D,gBAAI,mBAAmB,QAAQ,IAAI,iBAAiB;AAClD,iCAAmB;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AAEA,mBAAW,cAAc,KAAK,SAAS;AACrC,gBAAM,SAAS,KAAK,QAAQ,UAAU;AAEtC,cAAI,WAAW,UAAa,CAAC,OAAO,aAAa;AAC/C,+BAAmB;AACnB,kBAAM,OAAO,QAAQ,KAAK;AAAA,UAC5B;AAAA,QACF;AAEA,YAAI,oBAAoB,KAAK,sBAAsB,UAAa,UAAU,MAAM;AAC9E,gBAAM,KAAK,KAAK,KAAK;AAAA,QACvB;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AC5YA,IAMAC,qBAEqB;AARrB;AAAA;AAAA;AAGA;AACA;AAEA,IAAAA,sBAAwB;AAExB,IAAqB,iBAArB,MAAqB,wBAAuB,YAAgC;AAAA,MAC1E;AAAA,MACA,OAAO,eAAwB;AAAA;AAAA;AAAA;AAAA;AAAA,MAMtB;AAAA,MAET,OAAO,mBAAmB;AACxB,YAAI,CAAC,gBAAe,cAAc;AAChC,8BAAAC,QAAY,OAAO;AAAA,YACjB,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS;AAAA;AAAA;AAAA,YAGT,QAAQ,oBAAAA,QAAY;AAAA,UACtB,CAAC;AAED,0BAAe,eAAe;AAAA,QAChC;AAAA,MACF;AAAA,MAEA,YAAY,MAAqB;AAC/B,cAAM;AAGN,aAAK,cAAc;AAEnB,YAAI,QAAQ,MAAM;AAChB,iBAAO;AAAA,QACT,OAAO;AACL,iBAAO,MAAM;AAAA,QACf;AAEA,wBAAe,iBAAiB;AAEhC,aAAK,aAAa,IAAI,cAAc,MAAM,MAAM,OAAO,MAAM,MAAM;AAAA,MACrE;AAAA,MAEA,MAAM,eAAe;AACnB,aAAK,YAAY;AAEjB,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA;AAAA;;;ACvDA,IAQqB;AARrB;AAAA;AAAA;AAGA;AACA;AACA;AAGA,IAAqB,uBAArB,MAAqB,sBAAqB;AAAA,MACxC,aAAa,wBAAwB,SAAmB,MAAc,MAAgB;AACpF,YAAI,CAAC,QAAQ,SAAS;AACpB,iBAAO,EAAE,iCAAuC;AAAA,QAClD;AAEA,YAAI,UAAU,QAAQ,QAAQ,QAAQ;AAEtC,YAAI,QAAQ,QAAQ,eAAe;AACjC,qBAAW,UAAU,QAAQ,QAAQ,cAAc;AAAA,QACrD;AAEA,YAAI,QAAQ,OAAO;AAEnB,eAAO,EAAE,4BAAgC;AAAA,MAC3C;AAAA,MAEA,aAAa,eAAe,SAAmB,MAAc,MAAgB;AAC3E,YAAI,UAAU,UAAU,QAAQ,aAAa;AAE7C,YAAI,QAAQ,aAAa,iBAAiB;AACxC,qBAAW,aAAa,QAAQ,aAAa;AAAA,QAC/C;AAEA,YAAI,QAAQ,aAAa,kBAAkB;AACzC,qBAAW,WAAW,QAAQ,aAAa;AAAA,QAC7C;AAEA,YAAI,QAAQ,aAAa,qBAAqB;AAC5C,qBAAW,WAAW,QAAQ,aAAa;AAAA,QAC7C;AAEA,YAAI,QAAQ,aAAa,qBAAqB;AAC5C,qBAAW,WAAW,QAAQ,aAAa;AAAA,QAC7C;AAEA,YAAI,QAAQ,aAAa,0BAA0B;AACjD,qBAAW,WAAW,QAAQ,aAAa;AAAA,QAC7C;AAEA,YAAI,QAAQ,OAAO;AAEnB,eAAO,EAAE,4BAAgC;AAAA,MAC3C;AAAA,MAEA,aAAa,eAAe,SAAmB,MAAc,MAAgB;AAC3E,YAAI,CAAC,QAAQ,aAAa,CAAC,QAAQ,aAAa,2BAA2B;AACzE,iBAAO,EAAE,mCAAyC;AAAA,QACpD;AAEA,YAAI,KAAK,QAAQ;AAEjB,YAAI,CAAC,MAAM,QAAQ,aAAa,2BAA2B;AACzD,eAAK,QAAQ,aAAa,gBAAgB,QAAQ,aAAa,yBAAyB;AAAA,QAC1F;AAEA,YAAI,CAAC,IAAI;AACP,iBAAO,EAAE,mCAAyC;AAAA,QACpD;AAEA,YAAI,QAAQ,kBAAkB;AAC9B,cAAM,GAAG,gBAAgB;AAAA,UACvB,SAAS,QAAQ;AAAA,QACnB,CAAC;AAED,eAAO,EAAE,4BAAgC;AAAA,MAC3C;AAAA,MAEA,aAAa,cAAc,SAAmB,MAAc,MAAgB;AAC1E,YAAI,CAAC,QAAQ,WAAW;AACtB,iBAAO,EAAE,mCAAyC;AAAA,QACpD;AAEA,YAAI,QAAQ,kBAAkB;AAC9B,cAAM,QAAQ,UAAU,KAAK;AAE7B,eAAO,EAAE,4BAAgC;AAAA,MAC3C;AAAA,MAEA,aAAa,gBAAgB,SAAmB,MAAc,MAAgB;AAC5E,YAAI,QAAQ,WAAW;AACrB,kBAAQ,UAAU,QAAQ,IAAI;AAAA,QAChC;AAEA,eAAO,EAAE,4BAAgC;AAAA,MAC3C;AAAA,MAEA,OAAO,yBAAyB;AAC9B,wBAAgB,KAAK,gBAAgB,2BAA+B,sBAAqB,uBAAuB;AAChH,wBAAgB,KAAK,gBAAgB,yBAA6B,sBAAqB,cAAc;AACrG,wBAAgB,KAAK,gBAAgB,wBAA6B,sBAAqB,cAAc;AACrG,wBAAgB,KAAK,gBAAgB,6BAAkC,sBAAqB,aAAa;AACzG,wBAAgB,KAAK,gBAAgB,+BAAoC,sBAAqB,eAAe;AAAA,MAC/G;AAAA,IACF;AAAA;AAAA;;;ACtGA,IA2FAC,qBA6BqB;AAxHrB;AAAA;AAAA;AAqFA;AAEA;AACA;AAEA;AACA,IAAAA,sBAAgC;AAChC;AAEA;AAEA;AACA;AAuBA,IAAqB,mBAArB,MAAqB,kBAAiB;AAAA,MACpC,OAAe;AAAA,MACf,OAAe,iBAAiB,IAAI,oCAA4C;AAAA,MAChF,OAAe,kBAAkB,IAAI,oCAA0D;AAAA,MAC/F,OAAe,gBAAgB;AAAA,MAC/B,OAAe,eAAe;AAAA,MAC9B,OAAc,cAAc;AAAA,MAC5B,OAAc,mBAAmB;AAAA,MACjC,OAAc,WAAW;AAAA,MACzB,OAAc,cAAoB;AAAA,MAClC,OAAe,SAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhD,OAAc,iBAAiB;AAAA,MAC/B,OAAc,iCAAiC;AAAA,MAC/C,OAAc,iBAAiB;AAAA,MAC/B,OAAc,qBAAqB;AAAA;AAAA,MACnC,OAAc,cAAc;AAAA,MAC5B,OAAc,YAAgC;AAAA,MAC9C,OAAc,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAMxB,OAAc,wBAAgC;AAC5C,eAAO,KAAK,sBAAsB,KAAK,kBAAkB;AAAA,MAC3D;AAAA;AAAA;AAAA;AAAA,MAKA,WAAkB,QAAgC;AAChD,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAKA,WAAkB,MAAM,OAA+B;AACrD,YAAI,KAAK,WAAW,OAAO;AACzB,eAAK,SAAS;AACd,eAAK,gBAAgB,SAAS,mBAAkB,KAAK;AAAA,QACvD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,WAAkB,iBAAiB;AACjC,eAAO,KAAK,gBAAgB,QAAQ;AAAA,MACtC;AAAA,MAEA,OAAc,cAA6B;AAAA,MAC3C,OAAc,gBAA+B;AAAA,MAC7C,OAAc,aAA4B;AAAA,MAC1C,OAAc,WAAoB;AAAA,MAElC,OAAc;AAAA,MAEd,OAAc,eAAgC;AAAA,MAC9C,OAAc,kBAAmC;AAAA,MACjD,OAAc,oBAAgC,CAAC;AAAA,MAC/C,OAAc,eAAgC;AAAA,MAC9C,OAAc,cAA+B;AAAA,MAC7C,OAAc,iBAAkC;AAAA,MAEhD,OAAc;AAAA,MACd,OAAc;AAAA,MACd,OAAc;AAAA,MACd,OAAc;AAAA,MACd,OAAc;AAAA,MACd,OAAc;AAAA,MAGd,OAAc;AAAA;AAAA,MAGd,OAAc;AAAA,MAGd,OAAc;AAAA,MAId,OAAe,aAAa,IAAI,oCAA0B;AAAA,MAE1D,WAAkB,WAAW;AAC3B,eACE,KAAK,aAAa,0BAClB,KAAK,aAAa,uBAClB,KAAK,aAAa;AAAA,MAEtB;AAAA,MAEA,WAAkB,WAAW;AAC3B,eACE,KAAK,aAAa,4BAClB,KAAK,aAAa,4BAClB,KAAK,aAAa,yBAClB,KAAK,aAAa;AAAA,MAEtB;AAAA,MAEA,WAAkB,QAAQ;AACxB,eACE,KAAK,aAAa,2BAClB,KAAK,aAAa,eAClB,KAAK,aAAa,uBAClB,KAAK,aAAa,yBAClB,KAAK,aAAa;AAAA,MAEtB;AAAA,MAEA,WAAkB,kBAAkB;AAClC,eAAO,KAAK,aAAa,uBAAwB,KAAK,aAAa;AAAA,MACrE;AAAA,MAEA,WAAkB,YAAY;AAC5B,eAAO,kBAAiB,WAAW,QAAQ;AAAA,MAC7C;AAAA,MAEA,WAAkB,gBAAgB;AAChC,eAAO,kBAAiB,eAAe,QAAQ;AAAA,MACjD;AAAA,MAEA,OAAc,kBAA4C;AACxD,YAAI,CAAC,KAAK,cAAc;AACtB,eAAK,KAAK;AAAA,QACZ;AAEA,eAAO,kBAAiB;AAAA,MAC1B;AAAA,MAEA,OAAc,iBAAiB,QAAa,SAAc;AACxD,0BAAiB,WAAW,SAAS,QAAQ,OAAO;AAAA,MACtD;AAAA,MAEA,OAAc,YAAY,MAAgB;AACxC,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,OAAO,OAAO;AACZ,YAAI,kBAAiB,iBAAiB,kBAAiB,cAAc;AACnE;AAAA,QACF;AAEA,0BAAiB,gBAAgB;AAGjC,YAAI,OAAO,kBAAkB,aAAa;AAExC,4BAAiB,iBAAiB,iBAAiB,wBAAwB,aAAa;AAAA,QAC1F;AAGA,YAAI,OAAO,yBAAyB,aAAa;AAE/C,4BAAiB,qBAAqB,iBAAiB,wBAAwB,oBAAoB;AAAA,QACrG;AAGA,YAAI,OAAO,kBAAkB,aAAa;AAExC,4BAAiB,cAAc;AAAA,QACjC;AAGA,YAAI,OAAO,oBAAoB,aAAa;AAE1C,4BAAiB,gBAAgB;AAAA,QACnC;AAGA,YAAI,OAAO,mBAAmB,aAAa;AAEzC,cAAI,gBAAgB;AAClB,8BAAiB,WAAW;AAAA,UAC9B;AAAA,QACF;AAGA,YAAI,OAAO,kBAAkB,aAAa;AAExC,cAAI,eAAe;AACjB,8BAAiB,WAAW;AAAA,UAC9B;AAAA,QACF;AAGA,YAAI,OAAO,kBAAkB,aAAa;AAExC,4BAAiB,cAAc;AAAA,QACjC;AAGA,YAAI,OAAO,cAAc,aAAa;AAEpC,4BAAiB,UAAU;AAAA,QAC7B;AAGA,YAAI,OAAO,iBAAiB,aAAa;AAEvC,4BAAiB,aAAa;AAAA,QAChC;AAGA,YAAI,OAAO,eAAe,aAAa;AAErC,4BAAiB,WAAW,eAAe;AAAA,QAC7C;AAEA,wBAAgB,KAAK;AAErB,iBAAS,mBAAmB;AAE5B,6BAAqB,uBAAuB;AAE5C,0BAAiB,6BAA6B,CAAC,UAAU;AACvD,gBAAM,KAAK,kBAAiB,gBAAgB;AAE5C,cAAI,CAAC,MAAM,CAAC,GAAG,OAAO;AACpB,kBAAM,IAAI,MAAM,yBAAyB;AAAA,UAC3C;AAEA,iBAAO,GAAG,MAAM,2BAA2B,KAAK;AAAA,QAClD;AAEA,0BAAiB,eAAe,MAAM;AACpC,gBAAM,KAAK,kBAAiB,gBAAgB;AAE5C,cAAI,CAAC,MAAM,CAAC,GAAG,OAAO;AACpB,kBAAM,IAAI,MAAM,0BAA0B;AAAA,UAC5C;AAEA,iBAAO,GAAG,MAAM,aAAa;AAAA,QAC/B;AAGA,0BAAiB,YAAY,CAAC,SAAqB;AACjD,gBAAM,KAAK,kBAAiB,gBAAgB;AAC5C,cAAI,CAAC,MAAM,CAAC,GAAG,OAAO;AACpB,mBAAO;AAAA,UACT;AACA,iBAAO,GAAG,MAAM,UAAU,IAAI;AAAA,QAChC;AAEA,0BAAiB,cAAc,CAAC,QAAoB,OAAe,WAAmB;AACpF,gBAAM,KAAK,kBAAiB,gBAAgB;AAC5C,cAAI,CAAC,MAAM,CAAC,GAAG,OAAO;AACpB,mBAAO;AAAA,UACT;AACA,iBAAO,GAAG,MAAM,YAAY,QAAQ,OAAO,MAAM;AAAA,QACnD;AAGA,YAAI,OAAO,WAAW,eAAe,OAAO,QAAQ;AAClD,4BAAiB,6BAA6B,CAAC,UAAU;AAGvD,kBAAM,YAAY;AAClB,kBAAM,QAAQ,YAAa,YAAY;AACvC,gBAAI;AACJ,eAAG;AAED,4BAAc,OAAO,OAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC;AAAA,YACnE,SAAS,eAAe;AACxB,mBAAO,cAAc;AAAA,UACvB;AAGA,cAAI,OAAO,OAAO,YAAY;AAC5B,8BAAiB,eAAe,MAAM;AAEpC,qBAAO,OAAO,OAAO,WAAW;AAAA,YAClC;AAAA,UACF,OAAO;AAEL,8BAAiB,eAAe,MAAM;AAEpC,oBAAM,QAAQ,OAAO,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC;AAE9D,oBAAM,CAAC,IAAK,MAAM,CAAC,IAAI,KAAQ;AAC/B,oBAAM,CAAC,IAAK,MAAM,CAAC,IAAI,KAAQ;AAC/B,oBAAM,MAAM,MAAM,KAAK,OAAO,CAAC,MAAc,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AACrF,qBAAO,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC;AAAA,YAC9G;AAAA,UACF;AAAA,QACF;AAEA,YAAI,kBAAiB,oBAAoB,QAAQ,kBAAiB,iBAAiB,MAAM;AAAA,QACzF,WAAW,gBAAgB,eAAe;AACxC,cAAI,KAAK,IAAI,gBAAgB,UAAU,OAAO;AAC9C,aAAG,WAAW,aAAa;AAC3B,4BAAiB,eAAe;AAEhC,eAAK,IAAI,gBAAgB,UAAU,SAAS;AAC5C,aAAG,WAAW,aAAa;AAC3B,4BAAiB,iBAAiB;AAElC,eAAK,IAAI,gBAAgB,UAAU,UAAU;AAC7C,aAAG,WAAW,aAAa;AAC3B,4BAAiB,kBAAkB;AAEnC,eAAK,IAAI,gBAAgB,UAAU,QAAQ;AAC3C,aAAG,WAAW,aAAa;AAC3B,4BAAiB,eAAe;AAEhC,eAAK,IAAI,gBAAgB,UAAU,OAAO;AAC1C,aAAG,WAAW,aAAa;AAC3B,4BAAiB,cAAc;AAG/B,cAAI,OAAO,WAAW,aAAa;AAEjC,gBAAI,WAAW,OAAO,SAAS;AAC/B,kBAAM,YAAY,SAAS,YAAY,GAAG;AAE1C,gBAAI,aAAa,GAAG;AAClB,gCAAiB,iBAAiB,SAAS,UAAU,GAAG,YAAY,CAAC;AAAA,YACvE;AAAA,UACF;AAEA,cAAI,gBAAgB;AAEpB,eAAK,IAAI,gBAAgB,eAAe,EAAE;AAC1C,aAAG,aAAa;AAChB,4BAAiB,iCAA8C,IAAI;AAEnE,cAAI,uBAAuB;AAE3B,eAAK,IAAI,gBAAgB,sBAAsB,EAAE;AACjD,aAAG,aAAa;AAEhB,4BAAiB,wCAAqD,IAAI;AAAA,QAG5E,WAAW,OAAO,WAAW,aAAa;AAIxC,cAAI,OAAO,OAAO,QAAQ,aAAa;AACrC,kBAAM,IAAI;AAAA,cACR;AAAA,YAGF;AAAA,UACF;AAEA,4BAAiB,eAAe,IAAI,eAAe,UAAU;AAC7D,4BAAiB,kBAAkB,IAAI,eAAe,aAAa;AAEnE,4BAAiB,iCAA8C,IAAI,IAAI,eAAe,WAAW;AACjG,4BAAiB,iBAAiB,IAAI,eAAe,YAAY;AACjE,4BAAiB,eAAe,IAAI,eAAe,WAAW;AAC9D,4BAAiB,cAAc,IAAI,eAAe,UAAU;AAAA,QAC9D;AAEA,YAAI,kBAAiB,iBAAiB,QAAQ,kBAAiB,oBAAoB,MAAM;AACvF,gBAAM,IAAI,MAAM,mCAAmC;AAAA,QACrD;AAEA,0BAAiB,gBAAgB,IAAIC;AAAA,UACnC,kBAAiB;AAAA,UACjB,kBAAiB;AAAA,UACjB,kBAAiB;AAAA,UACjB,kBAAiB;AAAA,UACjB,kBAAiB;AAAA,UACjB,kBAAiB;AAAA,UACjB,kBAAiB;AAAA,QACnB;AAEA,YAAI,kBAAiB,mBAAmB;AACtC,4BAAiB,cAAc,oBAAoB,kBAAiB;AACpE,4BAAiB,cAAc,oBAAoB,kBAAiB;AACpE,4BAAiB,cAAc,kBAAkB,kBAAiB;AAAA,QACpE,WAAW,kBAAiB,aAAa,qBAAsB;AAC7D,4BAAiB,cAAc,oBAAoB,kBAAiB;AACpE,4BAAiB,cAAc,oBAAoB,kBAAiB;AACpE,4BAAiB,cAAc,kBAAkB,kBAAiB;AAAA,QACpE;AAEA,0BAAiB,cAAc,kBAAkB,kBAAiB;AAClE,0BAAiB,cAAc,qBAAqB,kBAAiB;AAErE,0BAAiB,eAAe;AAEhC,aAAK,eAAe,SAAS,kBAAiB,eAAe,kBAAiB,aAAa;AAAA,MAC7F;AAAA,MAEA,aAAa,mBAAmBC,QAAc;AAC5C,cAAM,KAAK,IAAI,gBAAgBA,QAAM,EAAE;AAEvC,YAAI,SAAS,GAAG;AAEhB,YAAI,CAAC,QAAQ;AACX,mBAAS,MAAM,GAAG,aAAa;AAE/B,cAAI,CAAC,QAAQ;AACX,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO,MAAM,GAAG,WAAW,OAAO;AAAA,MACpC;AAAA,MAEA,aAAa,iBAAiBA,QAAc;AAC1C,cAAM,aAAa,iBAAiB,cAAcA,MAAI;AACtD,cAAM,WAAW,iBAAiB,YAAYA,MAAI;AAElD,YAAI,CAAC,YAAY,SAAS,SAAS,KAAK,CAAC,cAAc,WAAW,SAAS,GAAG;AAC5E,gBAAM,IAAI,MAAM,wCAAwCA,SAAO,GAAG;AAAA,QACpE;AAEA,cAAM,KAAK,IAAI,gBAAgB,YAAY,EAAE;AAE7C,cAAM,OAAO,GAAG,WAAW,WAAW,QAAQ;AAE9C,eAAO,MAAM,KAAK,OAAO;AAAA,MAC3B;AAAA,MAEA,OAAO,2BAA2BA,QAAc;AAK9C,YAAI,KAAK,gBAAgB,iBAAiBA,MAAI;AAE9C,YAAI,CAAC,IAAI;AACP,eAAK,IAAI,gBAAgBA,QAAM,EAAE;AAIjC,aAAG,aAAa;AAAA,QAClB;AAEA,eAAO,GAAG;AAAA,MACZ;AAAA,IACF;AAAA;AAAA;;;ACnjBA;AAAA;AAAA;AAAA;AAAA;;;ACQA,YAAY,QAAQ;AARpB,IAUqB;AAVrB;AAAA;AAAA;AAIA;AAEA;AACA;AAGA,IAAqB,WAArB,cAAsC,SAA0B;AAAA,MAC9D;AAAA,MACA;AAAA,MAEA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAW;AACb,YAAIC,SAAO,KAAK,cAAc;AAE9B,YAAI,CAACA,OAAK,SAAS,YAAY,uBAAuB,GAAG;AACvD,UAAAA,UAAQ,YAAY;AAAA,QACtB;AAEA,eAAOA,SAAO,KAAK;AAAA,MACrB;AAAA,MAEA,IAAI,eAA2B;AAC7B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,kBAA2B;AAC7B,eAAO,KAAK,qBAAqB,QAAQ,KAAK,YAAY;AAAA,MAC5D;AAAA,MAEA,YAAY,cAA0B,YAAoB;AACxD,cAAM;AAEN,aAAK,gBAAgB;AACrB,aAAK,QAAQ;AAAA,MACf;AAAA,MAEA,MAAM,iBAAgC;AAAA,MAEtC;AAAA,MAEA,MAAM,SAA2B;AAC/B,eAAU,cAAW,KAAK,QAAQ;AAAA,MACpC;AAAA,MAEA,gBAAgB,OAAsB;AACpC,YAAI,SAAS,KAAK,qBAAqB,MAAM;AAC3C,gBAAM,WAAW,iBAAiB,sBAAsB,KAAK,KAAK;AAElE,cAAI,CAAI,cAAW,KAAK,QAAQ,GAAG;AACjC,iBAAK,WAAW;AAAA,UAClB,WAAW,iCAAsC;AAE/C,kBAAM,aAAgB,gBAAa,KAAK,QAAQ;AAEhD,gBAAI,sBAAsB,aAAa;AACrC,mBAAK,WAAW,IAAI,WAAW,UAAyB;AAAA,YAC1D,OAAO;AACL,mBAAK,WAAW;AAAA,YAClB;AAAA,UACF,OAAO;AAGL,iBAAK,WAAc,gBAAa,KAAK,UAAU,EAAE,UAAU,OAAO,CAAC;AAAA,UACrE;AAGA,eAAK,oBAAoB,oBAAI,KAAK;AAAA,QACpC;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,YAAY,OAA+B;AAC/C,eAAO,KAAK,gBAAgB,KAAK;AAAA,MACnC;AAAA,MAEA,WAAW,YAAwC,YAA6B;AAC9E,cAAM,WAAW,iBAAiB,iBAAiB,KAAK,UAAU,UAAU;AAE5E,YAAI,UAAU;AACZ,iBAAO;AAAA,QACT;AAEA,YAAI,CAAC,KAAK,mBAAmB;AAC3B,eAAK,oBAAoB,oBAAI,KAAK;AAClC,eAAK,oBAAoB,IAAI,KAAK,KAAK,kBAAkB,QAAQ,IAAI,CAAC;AAAA,QAGxE;AAEA,YAAI,aAAa,KAAK;AACtB,aAAK,WAAW;AAEhB,aAAK,mBAAmB,YAAY,UAAU;AAE9C,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBA,MAAM,cAA6B;AACjC,YAAI,KAAK,aAAa,QAAQ,UAAU;AACtC,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAC9C;AAEA,YAAI,KAAK,WAAW;AAClB,eAAK,oBAAoB,oBAAI,KAAK;AAElC,cAAI,KAAK,WAAW,MAAM;AACxB,iBAAK,aAAa,aAAa;AAE/B,kBAAM,WAAW,iBAAiB,sBAAsB,KAAK,KAAK;AAElE,gBAAI,iCAAsC;AAGxC,cAAG,iBAAc,KAAK,UAAU,KAAK,OAAO;AAAA,YAC9C,OAAO;AAGL,cAAG,iBAAc,KAAK,UAAU,KAAK,SAAS,EAAE,UAAU,OAAO,CAAC;AAAA,YACpE;AAAA,UACF;AAAA,QACF;AAEA,YAAI,KAAK,sBAAsB,MAAM;AACnC,eAAK,oBAAoB,oBAAI,KAAK;AAAA,QACpC;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,aAAa,SAAmB;AACpC,aAAK,oBAAoB,oBAAI,KAAK;AAElC,cAAM,KAAK,cAAc,aAAa;AAEtC,eAAO,IAAI,QAAc,CAACC,UAAS,WAAW;AAC5C,gBAAM,SAAY,qBAAkB,KAAK,QAAQ;AAEjD,iBAAO,GAAG,UAAUA,QAAO;AAC3B,iBAAO,GAAG,SAAS,MAAM;AAEzB,qBAAW,OAAO,SAAS;AACzB,mBAAO,MAAM,MAAM,IAAI;AAAA,UACzB;AAEA,iBAAO,IAAI;AAAA,QACb,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,eAAe,sBAAkD;AACrE,YAAI,KAAK,aAAa,QAAQ,UAAU;AACtC,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAC9C;AAEA,YAAI,yBAAyB,MAAM;AACjC,eAAK,cAAc,YAAY,IAAI;AAAA,QACrC;AAEA,eAAO,KAAK,YAAY,KAAK,QAAQ;AAAA,MACvC;AAAA,MAEA,MAAM,OAAO,wBAAkD;AAC7D,cAAM,gBAAgB,iBAAiB,cAAc,sBAAsB;AAC3E,cAAM,cAAc,iBAAiB,YAAY,sBAAsB;AAEvE,YAAI,YAAY,SAAS,GAAG;AAC1B,gBAAM,IAAI,MAAM,0BAA0B;AAAA,QAC5C;AAEA,cAAM,kBAAkB,MAAM,KAAK,cAAc,QAAQ,oCAAoC,aAAa;AAE1G,YAAI,gBAAgB,MAAM,WAAW,MAAM,QAAW;AACpD,gBAAM,IAAI,MAAM,gCAAgC;AAAA,QAClD;AAEA,cAAM,KAAK,YAAY,KAAK;AAE5B,cAAM,eAAe,KAAK;AAE1B,aAAK,QAAQ;AACb,aAAK,gBAAgB;AAErB,aAAK,WAAW,oBAAI,KAAK;AAEzB,QAAC,gBAA+B,iBAAiB,IAAI;AAErD,aAAK,YAAY,YAAY;AAE7B,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,YAAYD,QAAgC;AAChD,YAAI,YAAY;AAEhB,YAAI;AACF,UAAG,UAAOA,MAAI;AAAA,QAChB,SAAS,GAAG;AACV,sBAAY;AAAA,QACd;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACxNA,YAAYE,SAAQ;AACpB,YAAY,UAAU;AACtB,YAAYC,aAAY;AAZxB,IA8BqB;AA9BrB;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAqBA,IAAqB,aAArB,MAAqB,oBAAmB,WAA8B;AAAA,MAC5D;AAAA,MACA;AAAA,MAER;AAAA,MACA;AAAA,MACQ;AAAA,MACA;AAAA,MAER,IAAI,UAAuB;AACzB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,eAAkC;AACpC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAW;AACb,YAAIC,SAAO,KAAK;AAEhB,YAAI,CAACA,OAAK,SAAS,YAAY,uBAAuB,GAAG;AACvD,UAAAA,UAAQ,YAAY;AAAA,QACtB;AAEA,eAAOA,SAAO,KAAK;AAAA,MACrB;AAAA,MAEA,YAAY,SAAsB,cAAiC,YAAoB,YAAoB;AACzG,cAAM;AAEN,aAAK,WAAW;AAChB,aAAK,gBAAgB;AAErB,aAAK,QAAQ;AACb,aAAK,QAAQ;AAEb,aAAK,UAAU,CAAC;AAChB,aAAK,QAAQ,CAAC;AAAA,MAChB;AAAA,MAEA,MAAM,iBAAgC;AAAA,MAEtC;AAAA,MAEA,WAAW,MAAwB;AACjC,YAAI,OAAO,KAAK,QAAQ,GAAG,IAAI,GAAG,wCAAwC,IAAI;AAE9E,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AAExD,YAAI,WAAW,KAAK,MAAM,SAAS;AAEnC,YAAI,YAAY,MAAM;AACpB,qBAAW,IAAI,SAAS,MAAM,IAAI;AAElC,eAAK,MAAM,SAAS,IAAI;AAAA,QAC1B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,YAAY,MAAa;AACvB,cAAM,YAAY,iBAAiB,iBAAiB,KAAK,IAAI;AAE7D,cAAM,WAAW,KAAK,MAAM,SAAS;AAErC,YAAI,OAAO,aAAa,MAAM,oBAAoB;AAElD,aAAK,MAAM,SAAS,IAAI;AAExB,aAAK,QAAQ,kBAAkB,KAAK,sBAAsB,KAAK,IAAI;AAAA,MACrE;AAAA,MAEA,iBAAiB,MAAgB;AAC/B,cAAM,YAAY,iBAAiB,iBAAiB,KAAK,IAAI;AAE7D,aAAK,MAAM,SAAS,IAAI;AAAA,MAC1B;AAAA,MAEA,MAAM,mBAAqC;AACzC,YAAI,KAAK,QAAQ,UAAU;AACzB,gBAAM,IAAI,MAAM,6BAA6B,KAAK,WAAW,sCAAsC;AAAA,QACrG;AAEA,YAAI,UAAe,aAAQ,KAAK,QAAQ;AACxC,YAAI,iBAAiB,qBAAqB,OAAO,GAAG;AAClD,gBAAM,IAAI,MAAM,6BAA6B,UAAU,+CAA+C;AAAA,QACxG;AAEA,YAAI,YAAY;AAEhB,YAAO,eAAW,KAAK,QAAQ,GAAG;AAChC,cAAI;AACF,YAAG,cAAU,KAAK,UAAU;AAAA,cAC1B,WAAW;AAAA,YACb,CAAC;AAAA,UACH,SAAS,GAAG;AACV,wBAAY;AAAA,UACd;AAAA,QACF;AAEA,aAAK,mBAAmB;AAExB,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,0BAA4C;AAChD,YAAI,KAAK,QAAQ,UAAU;AACzB,gBAAM,IAAI,MAAM,oCAAoC,KAAK,WAAW,sCAAsC;AAAA,QAC5G;AAEA,eAAO,MAAM,KAAK,oCAAoC;AAAA,MACxD;AAAA,MAEA,aAAa,MAA0B;AACrC,YAAI,OAAO,KAAK,QAAQ,GAAG,IAAI,GAAG,0CAA0C,IAAI;AAEhF,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AAExD,YAAI,aAAa,KAAK,QAAQ,SAAS;AAEvC,YAAI,CAAC,YAAY;AACf,uBAAa,IAAI,YAAW,KAAK,UAAU,MAAM,KAAK,UAAU,IAAI;AAEpE,eAAK,QAAQ,SAAS,IAAI;AAAA,QAC5B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,2BAA2B,QAAoB;AAC7C,cAAM,YAAY,iBAAiB,iBAAiB,OAAO,IAAI;AAE/D,aAAK,QAAQ,SAAS,IAAI;AAAA,MAC5B;AAAA,MAEA,MAAM,OAAO,wBAAkD;AAC7D,cAAM,cAAc,KAAK;AAEzB,cAAM,gBAAgB,iBAAiB,cAAc,sBAAsB;AAC3E,cAAM,gBAAgB,iBAAiB,YAAY,sBAAsB;AAEzE,YAAI,cAAc,SAAS,GAAG;AAC5B,gBAAM,IAAI,MAAM,0BAA0B;AAAA,QAC5C;AAEA,YAAI,KAAK,aAAa,sBAAsB,GAAG;AAC7C,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,kBAAkB,MAAM;AAC/B,gBAAM,kBAAkB,MAAM,KAAK,cAAc,QAAQ,oCAAoC,aAAa;AAE1G,cAAI,gBAAgB,QAAQ,aAAa,MAAM,QAAW;AACxD,kBAAM,IAAI,MAAM,6DAA6D,sBAAsB;AAAA,UACrG;AAIA,cAAI,aAAa,KAAK;AACtB,cAAI,CAAC,WAAW,SAAS,YAAY,uBAAuB,GAAG;AAC7D,0BAAc,YAAY;AAAA,UAC5B;AACA,gBAAM,cAAc,aAAa;AAIjC,cAAI,QAAQ,2BAA2B,cAAc,SAAS,WAAW;AACzE,UAAG,eAAW,aAAa,WAAW;AAGtC,eAAK,cAAc,gCAAgC,IAAI;AAEvD,eAAK,gBAAgB;AAErB,eAAK,QAAQ;AACb,UAAC,gBAA+B,2BAA2B,IAAI;AAAA,QACjE;AAEA,aAAK,QAAQ;AAEb,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,SAA2B;AAC/B,eAAU,eAAW,KAAK,QAAQ;AAAA,MACpC;AAAA,MAEA,MAAM,eAAiC;AACrC,cAAM,SAAY,eAAW,KAAK,QAAQ;AAE1C,YAAI,CAAC,QAAQ;AAGX,UAAG,cAAU,KAAK,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,QACjD;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,qBAAqB,UAAyB;AAClD,cAAM,KAAK,KAAK,IAAI;AAEpB,YAAI,CAAC,UAAU;AACb,qBAAW,CAAC;AAAA,QACd;AAEA,YAAI,KAAK,MAAM,YAAY,MAAM,QAAW;AAC1C,gBAAM,OAAO,KAAK,MAAM,YAAY;AAEpC,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY,KAAK;AAAA,UAC9B;AAEA,gBAAM,MAAiC,iBAAiB,cAAc,IAAI;AAE1E,cAAI,OAAO,IAAI,OAAO;AACpB,uBAAW,YAAY,IAAI,OAAO;AAChC,kBAAI,SAAS,QAAQ,SAAS,QAAQ,SAAS,QAAQ,SAAS,eAAe,QAAW;AACxF,sBAAM,WAAW,KAAK,iBAAiB,QAAQ;AAE/C,oBAAI,CAAC,SAAS,QAAQ,GAAG;AACvB,wBAAM,eAAe,KAAK;AAE1B,sBAAI,cAAc;AAChB,6BAAS,QAAQ,IAAI;AAAA,sBACnB,MAAM,SAAS;AAAA,sBACf,MAAM,SAAS;AAAA,sBACf,MAAM,SAAS;AAAA,sBACf,YAAY,iBAAiB,iBAAiB,eAAe,SAAS,IAAI;AAAA,oBAC5E;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,OAAO;AACL,qBAAW,WAAW,KAAK,SAAS;AAClC,kBAAM,SAAS,KAAK,QAAQ,OAAO;AAEnC,gBAAI,UAAU,CAAC,OAAO,aAAa;AACjC,oBAAM,OAAO,qBAAqB,QAAQ;AAAA,YAC5C;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,iBAAiB,UAA4B;AAC3C,YAAI,WAAW,iBAAiB,gBAAgB,SAAS,IAAI,EAAE,YAAY;AAE3E,YAAI,SAAS,MAAM;AACjB,sBAAY,MAAM,SAAS;AAAA,QAC7B;AAEA,YAAI,SAAS,MAAM;AACjB,sBAAY,MAAM,SAAS;AAAA,QAC7B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,eACJ,cACA,mBACA,yBACA,UACA,yBACA,UACA;AACA,cAAM,KAAK,KAAK,IAAI;AAEpB,uBAAe,YAAY,wBAAwB,YAAY;AAC/D,YAAI,UAAU,YAAY,wBAAwB,YAAY;AAE9D,YAAI,UAAU;AACZ,qBAAW;AAAA,QACb;AAEA,cAAM,qBAAwB,eAAW,OAAO;AAEhD,YAAI,CAAC,oBAAoB;AACvB,UAAG,cAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA,QAC3C;AAEA,mBAAW,YAAY,KAAK,OAAO;AACjC,gBAAM,OAAO,KAAK,MAAM,QAAQ;AAEhC,cAAI,WAAW;AAEf,cAAI,UAAU;AACZ,uBAAW,WAAW;AAAA,UACxB;AAEA,qBAAW,iBAAiB,iBAAiB,QAAQ;AAErD,cAAI;AAEJ,cAAI,mBAAmB;AACrB,uBAAW,mBAAmB,mBAAmB;AAC/C,kBAAI,iBAAiB,iBAAiB,gBAAgB,IAAI,MAAM,UAAU;AACxE,iCAAiB;AAAA,cACnB;AAAA,YACF;AAAA,UACF;AAEA,cAAI,MAAM;AACR,kBAAM,KAAK,YAAY,IAAI;AAE3B,gBAAI,KAAK,SAAS;AAChB,oBAAM,WAAW,iBAAiB,sBAAsB,KAAK,IAAI;AAEjE,kBAAI,CAAC,gBAAgB;AACnB,iCAAiB;AAAA,kBACf,MAAM,KAAK,QAAQ;AAAA,kBACnB,MAAM;AAAA,gBACR;AAEA,oBAAI,4BAA4B,MAAM;AACpC,oCAAkB,KAAK,cAAc;AAAA,gBACvC;AAAA,cACF;AAEA,kBAAI,iCAAsC;AACxC,oBAAI,UAAe,KAAK;AAExB,oBACE,kBACA,mBAAmB,UACnB,eAAe,QACf,QAAQ,SAAS,eAAe,MAChC;AACA,sBAAI,QAAQ,qCAAqC,KAAK,WAAW,cAAc,eAAe,IAAI;AAClG,4BAAU,QAAQ,SAAS,GAAG,eAAe,IAAI;AAAA,gBACnD,WACE,kBACA,mBAAmB,cACnB,eAAe,QACf,QAAQ,SAAS,eAAe,MAChC;AACA,sBAAI,QAAQ,oCAAoC,KAAK,WAAW,cAAc,eAAe,IAAI;AACjG,4BAAU,QAAQ,SAAS,GAAG,eAAe,IAAI;AAAA,gBACnD;AAEA,sBAAM,OAAc,mBAAW,KAAK;AAEpC,qBAAK,OAAO,OAAO;AAEnB,+BAAe,OAAO,KAAK,OAAO,QAAQ;AAE1C,sBAAM,WAAW,KAAK,iBAAiB,cAAc;AACrD,oBAAI,kBAAkB;AAEtB,oBAAI,UAAU;AACZ,wBAAM,cAAc,SAAS,QAAQ;AAErC,sBAAI,eAAe,YAAY,YAAY;AACzC,mCAAe,aAAa,YAAY;AACxC,sCAAkB;AAAA,kBACpB;AAAA,gBACF;AAEA,oBAAI,CAAC,iBAAiB;AACpB,kBAAG,kBAAc,UAAU,KAAK,MAAM,OAAO;AAE7C,sBAAI,UAAU;AACZ,6BAAS,QAAQ,IAAI;AAAA,sBACnB,MAAM,eAAe;AAAA,sBACrB,MAAM,eAAe;AAAA,sBACrB,MAAM,eAAe;AAAA,sBACrB,YAAY,iBAAiB,iBAAiB,0BAA0B,eAAe,IAAI;AAAA,oBAC7F;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,OAAO;AACL,sBAAM,OAAc,mBAAW,KAAK;AAEpC,qBAAK,OAAO,KAAK,OAAO;AAExB,+BAAe,OAAO,KAAK,OAAO,QAAQ;AAE1C,sBAAM,WAAW,KAAK,iBAAiB,cAAc;AACrD,oBAAI,kBAAkB;AAEtB,oBAAI,UAAU;AACZ,wBAAM,cAAc,SAAS,QAAQ;AAErC,sBAAI,eAAe,YAAY,YAAY;AACzC,mCAAe,aAAa,YAAY;AACxC,sCAAkB;AAAA,kBACpB;AAAA,gBACF;AAEA,oBAAI,CAAC,iBAAiB;AACpB,kBAAG,kBAAc,UAAU,KAAK,MAAM,KAAK,SAAS,EAAE,UAAU,OAAO,CAAC;AAExE,sBAAI,UAAU;AACZ,6BAAS,QAAQ,IAAI;AAAA,sBACnB,MAAM,eAAe;AAAA,sBACrB,MAAM,eAAe;AAAA,sBACrB,MAAM,eAAe;AAAA,sBACrB,YAAY,iBAAiB,iBAAiB,0BAA0B,eAAe,IAAI;AAAA,oBAC7F;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,aAAa,QAAW;AAC1B,qBAAW;AAAA,QACb;AAEA,mBAAW,cAAc,KAAK,SAAS;AACrC,gBAAM,KAAK,KAAK,QAAQ,UAAU;AAElC,cAAI,MAAM,CAAC,GAAG,aAAa;AACzB,kBAAM,GAAG;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,WAAW,aAAa,YAAY;AAAA,YACtC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,cAAc,gBAAwB,eAAmC;AAC7E,cAAM,MAAqB,EAAE,MAAM,gBAAgB,OAAO,cAAc;AAExE,QAAG,kBAAc,YAAY,wBAAwB,KAAK,QAAQ,IAAI,cAAc,KAAK,UAAU,KAAK,MAAM,CAAC,GAAG;AAAA,UAChH,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,gBAAgB,YAAqB;AACzC,cAAM,KAAK,KAAK,IAAI;AAEpB,YAAI,KAAK,MAAM,YAAY,MAAM,QAAW;AAC1C,gBAAM,OAAO,KAAK,MAAM,YAAY;AAEpC,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY,KAAK;AAAA,UAC9B;AAEA,gBAAM,MAAiC,iBAAiB,cAAc,IAAI;AAE1E,cAAI,OAAO,IAAI,OAAO;AACpB,uBAAW,YAAY,IAAI,OAAO;AAChC,kBAAI,SAAS,QAAQ,SAAS,QAAQ,SAAS,MAAM;AACnD,oBAAIC;AAEJ,oBAAI,SAAS,YAAY;AACvB,kBAAAA,QAAO,MAAM,KAAK,QAAQ,WAAW;AAAA,oBACnC,iBAAiB,0BAA0B,SAAS,UAAU;AAAA,kBAChE;AAAA,gBACF,OAAO;AACL,kBAAAA,QAAO,MAAM,KAAK,wBAAwB,iBAAiB,0BAA0B,SAAS,IAAI,CAAC;AAAA,gBACrG;AAEA,oBAAIA,OAAM;AACR,sBAAI,CAACA,MAAK,iBAAiB;AACzB,0BAAMA,MAAK,YAAY;AAAA,kBACzB;AAEA,sBAAIA,MAAK,YAAY,MAAM;AACzB,0BAAM,aAAa,MAAM,WAAW;AAAA,sBAClC,iBAAiB,0BAA0B,SAAS,IAAI;AAAA,oBAC1D;AAEA,wBAAI,YAAY;AAEd,iCAAW,WAAWA,MAAK,OAAO;AAAA,oBACpC;AAAA,kBACF;AAAA,gBACF,OAAO;AACL,sBAAI,MAAM,0CAA0C,SAAS,OAAO,UAAU,KAAK,QAAQ;AAAA,gBAC7F;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,OAAO;AACL,cAAI,MAAM,kCAAkC,KAAK,QAAQ;AAAA,QAC3D;AAEA,cAAM,WAAW,QAAQ;AAAA,MAC3B;AAAA,MAEA,MAAM,WAAW,MAA8B;AAC7C,eAAO,KAAK,WAAW,IAAI;AAAA,MAC7B;AAAA,MAEA,SAAS,OAAuB;AAC9B,YAAI,KAAK,qBAAqB,QAAQ,CAAC,OAAO;AAC5C,iBAAO,KAAK;AAAA,QACd;AAIA,YAAO,eAAW,KAAK,QAAQ,GAAG;AAChC,gBAAM,UAAa,gBAAY,KAAK,QAAQ;AAE5C,kBAAQ,QAAQ,CAAC,qBAA6B;AAC5C,gBAAI,WAAW,KAAK;AAEpB,gBAAI,CAAC,SAAS,SAAS,YAAY,uBAAuB,GAAG;AAC3D,0BAAY,YAAY;AAAA,YAC1B;AAEA,wBAAY;AAEZ,gBAAI;AACF,oBAAM,OAAU,aAAS,QAAQ;AACjC,kBAAI,KAAK,YAAY,KAAK,CAAC,iBAAiB,kBAAkB,gBAAgB,GAAG;AAC/E,qBAAK,aAAa,gBAAgB;AAAA,cACpC,WAAW,KAAK,OAAO,KAAK,iBAAiB,aAAa,QAAQ,GAAG;AACnE,sBAAM,OAAO,KAAK,WAAW,gBAAgB;AAE7C,oBAAI,KAAK,OAAO;AACd,uBAAK,iBAAiB,IAAI,KAAK,KAAK,KAAK;AAAA,gBAC3C;AAAA,cACF;AAAA,YACF,SAAS,GAAQ;AACf,mBAAK;AACL,kBAAI,MAAM,2BAA2B,WAAW,QAAQ,EAAE,SAAS,CAAC;AAAA,YACtE;AAAA,UACF,CAAC;AAAA,QACH;AAEA,aAAK,wBAAwB;AAE7B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,KAAK,OAAgC;AACzC,YAAI,KAAK,qBAAqB,QAAQ,CAAC,OAAO;AAC5C,iBAAO,KAAK;AAAA,QACd;AAEA,eAAO,KAAK,SAAS,KAAK;AAAA,MAC5B;AAAA,IACF;AAAA;AAAA;;;ACrhBA,YAAYC,WAAU;AACtB,YAAYC,SAAQ;AA9CpB,IAoDAC,qBAGM,qBAEe;AAzDrB;AAAA;AAAA;AA0CA;AACA;AAIA;AACA;AAEA;AAEA,IAAAA,sBAAgC;AAGhC,IAAM,sBAAsB;AAE5B,IAAqB,cAArB,MAAqB,qBAAoB,YAAmD;AAAA,MAC1F;AAAA,MACA;AAAA,MAEA;AAAA,MAEA,OAAO,0BAA+B;AAAA;AAAA,MAG9B,YAAyC,oBAAI,IAAI;AAAA;AAAA,MAGjD,kBAA+C,oBAAI,IAAI;AAAA;AAAA,MAGvD,oBAAoB;AAAA;AAAA,MAG5B,mBAAmB,IAAI,oCAAkD;AAAA,MAEzE,IAAI,kBAAkB;AACpB,eAAY;AAAA,MACd;AAAA,MAEA,IAAI,aAAsB;AACxB,eAAO,KAAK,UAAU,OAAO;AAAA,MAC/B;AAAA,MAEA,IAAW,kBAAkB;AAC3B,eAAO,KAAK,iBAAiB,QAAQ;AAAA,MACvC;AAAA,MAEA,YAAY,cAAsB,MAAc;AAC9C,cAAM;AAEN,YAAI,aAAY,4BAA4B,MAAM;AAChD,yBAAe,aAAa,QAAQ,QAAQ,aAAY,uBAAuB;AAC/E,yBAAe,aAAa,QAAQ,UAAU,IAAI;AAAA,QACpD,WAAW,aAAY,4BAA4B,KAAK;AACtD,yBAAe,aAAa,QAAQ,QAAQ,aAAY,uBAAuB;AAC/E,yBAAe,aAAa,QAAQ,UAAU,aAAY,uBAAuB;AAAA,QACnF;AAEA,aAAK,WAAW;AAChB,aAAK,OAAO;AAEZ,aAAK,aAAa,IAAI,WAAW,MAAM,MAAM,cAAc,IAAI;AAAA,MACjE;AAAA,MAEA,SAAS,OAAe,OAAe;AACrC,YAAI,WAAW;AAEf,YAAI,CAAC,SAAS,SAAS,aAAY,uBAAuB,GAAG;AAC3D,sBAAY,aAAY;AAAA,QAC1B;AAEA,oBAAY;AAEZ,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,eAAeF,QAA8C;AACxE,cAAM,UAAUA,OAAK,YAAY,GAAG;AACpC,YAAI,YAAYA,OAAK,YAAY,GAAG;AACpC,YAAI,gBAAgBA,OAAK,YAAY,IAAI;AAEzC,YAAI,gBAAgB,WAAW;AAC7B,sBAAY;AAAA,QACd;AAEA,YAAI,UAAU,WAAW;AACvB,gBAAM,KAAK,IAAI,aAAYA,OAAK,UAAU,GAAG,SAAS,GAAG,EAAE;AAE3D,iBAAQ,MAAM,GAAG,WAAW,2BAA2BA,OAAK,UAAU,SAAS,CAAC;AAAA,QAClF,OAAO;AACL,gBAAM,KAAK,IAAI,aAAYA,QAAM,EAAE;AAEnC,iBAAO,GAAG;AAAA,QACZ;AAAA,MACF;AAAA,MAEA,aAAa,2BAA2BA,QAA4C;AAClF,cAAM,UAAU,MAAM,aAAY,eAAeA,MAAI;AAErD,YACE,mBAAmB,aAClBA,OAAK,SAAS,SAAS,KACtBA,OAAK,SAAS,UAAU,KACxBA,OAAK,SAAS,UAAU,KACxBA,OAAK,SAAS,MAAM,KACpBA,OAAK,SAAS,YAAY,IAC5B;AACA,gBAAM,KAAK,MAAM,WAAW,aAAa,OAAO;AAEhD,iBAAO,IAAI;AAAA,QACb;AAEA,YAAI,mBAAmB,YAAY;AACjC,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,oBAAoB,YAAoB;AAC7C,cAAM,YAAY,WAAW,YAAY,KAAK,uBAAuB;AAErE,YAAI,YAAY,GAAG;AACjB,iBAAO;AAAA,QACT;AAEA,eAAO,WAAW,UAAU,GAAG,SAAS;AAAA,MAC1C;AAAA,MAEA,OAAc,wBAAwB,KAAa;AACjD,YAAI,CAAC,IAAI,SAAS,aAAY,uBAAuB,GAAG;AACtD,gBAAM,MAAM,aAAY;AAAA,QAC1B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,OAAc,0BAA0B,KAAa;AACnD,YAAI,CAAC,IAAI,WAAW,aAAY,uBAAuB,GAAG;AACxD,gBAAM,aAAY,0BAA0B;AAAA,QAC9C;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,eAAe;AACnB,aAAK,YAAY;AAEjB,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,gBAAwB;AACtB,cAAM,YAAY,WAAW,EAAE,KAAK,iBAAiB;AACrD,cAAM,WAA2B,CAAC;AAElC,YAAI;AAEF,gBAAM,UAAa,UAAM,KAAK,UAAU,EAAE,WAAW,MAAM,YAAY,MAAM,GAAG,CAAC,WAAW,aAAa;AACvG,gBAAI,UAAU;AACZ,mBAAK,kBAAkB,WAAW,WAAW,QAAQ;AAAA,YACvD;AAAA,UACF,CAAC;AAED,kBAAQ,GAAG,SAAS,CAACG,SAAQ;AAC3B,gBAAI,MAAM,qBAAqB,KAAK,QAAQ,KAAKA,KAAI,OAAO,EAAE;AAAA,UAChE,CAAC;AAED,mBAAS,KAAK,OAAO;AACrB,eAAK,UAAU,IAAI,WAAW,QAAQ;AAEtC,cAAI,QAAQ,oBAAoB,KAAK,QAAQ,YAAY,SAAS,EAAE;AAAA,QACtE,SAASA,MAAU;AACjB,cAAI,MAAM,+BAA+B,KAAK,QAAQ,KAAKA,KAAI,OAAO,EAAE;AAAA,QAC1E;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAKA,aAAa,WAAyB;AACpC,cAAM,WAAW,KAAK,UAAU,IAAI,SAAS;AAC7C,YAAI,UAAU;AACZ,qBAAW,WAAW,UAAU;AAC9B,gBAAI;AACF,sBAAQ,MAAM;AAAA,YAChB,SAAS,GAAG;AAAA,YAEZ;AAAA,UACF;AACA,eAAK,UAAU,OAAO,SAAS;AAC/B,cAAI,QAAQ,mBAAmB,SAAS,QAAQ,KAAK,QAAQ,EAAE;AAAA,QACjE;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,kBAAwB;AACtB,mBAAW,YAAY,KAAK,UAAU,OAAO,GAAG;AAC9C,qBAAW,WAAW,UAAU;AAC9B,gBAAI;AACF,sBAAQ,MAAM;AAAA,YAChB,SAAS,GAAG;AAAA,YAEZ;AAAA,UACF;AAAA,QACF;AACA,aAAK,UAAU,MAAM;AAGrB,mBAAW,SAAS,KAAK,gBAAgB,OAAO,GAAG;AACjD,uBAAa,KAAK;AAAA,QACpB;AACA,aAAK,gBAAgB,MAAM;AAE3B,YAAI,QAAQ,4BAA4B,KAAK,QAAQ,EAAE;AAAA,MACzD;AAAA;AAAA;AAAA;AAAA,MAKQ,kBAAkB,WAAmB,WAAmB,UAAwB;AAEtF,cAAM,cAAc,GAAG,SAAS,IAAI,QAAQ;AAG5C,cAAM,gBAAgB,KAAK,gBAAgB,IAAI,WAAW;AAC1D,YAAI,eAAe;AACjB,uBAAa,aAAa;AAAA,QAC5B;AAGA,cAAM,QAAQ,WAAW,MAAM;AAC7B,eAAK,gBAAgB,OAAO,WAAW;AACvC,eAAK,mBAAmB,WAAW,QAAQ;AAAA,QAC7C,GAAG,mBAAmB;AAEtB,aAAK,gBAAgB,IAAI,aAAa,KAAK;AAAA,MAC7C;AAAA;AAAA;AAAA;AAAA,MAKA,MAAc,mBAAmB,WAAmB,UAAiC;AACnF,YAAI;AACF,gBAAM,WAAgB,WAAK,KAAK,UAAU,QAAQ;AAClD,gBAAM,eAAe,MAAM,SAAS,QAAQ,OAAO,GAAG;AAGtD,gBAAM,SAAY,eAAW,QAAQ;AAGrC,cAAIC,UAAS;AACb,cAAI,cAAc;AAElB,cAAI,QAAQ;AACV,gBAAI;AACF,oBAAM,OAAU,aAAS,QAAQ;AACjC,cAAAA,UAAS,KAAK,OAAO;AACrB,4BAAc,KAAK,YAAY;AAAA,YACjC,SAAS,GAAG;AAEV,cAAAA,UAAS;AAAA,YACX;AAAA,UACF;AAGA,cAAI;AACJ,cAAI,CAAC,QAAQ;AACX,yBAAa;AAAA,UACf,WAAW,cAAc,UAAU;AAEjC,yBAAa;AAAA,UACf,OAAO;AACL,yBAAa;AAAA,UACf;AAGA,gBAAM,cAAmC;AAAA,YACvC;AAAA,YACA,MAAM;AAAA,YACN,QAAAA;AAAA,YACA,WAAW,oBAAI,KAAK;AAAA,YACpB,QAAQ;AAAA,UACV;AAEA,eAAK,iBAAiB,SAAS,MAAM,WAAW;AAGhD,cAAIA,SAAQ;AACV,gBAAI,eAAe,WAAW;AAC5B,mBAAK,kBAAkB,YAAY;AAAA,YACrC,WAAW,eAAe,SAAS;AAEjC,oBAAM,OAAO,MAAM,KAAK,WAAW,wBAAwB,YAAY;AACvE,kBAAI,MAAM;AACR,qBAAK,gBAAgB,IAAI;AAAA,cAC3B;AAAA,YACF,OAAO;AAEL,oBAAM,OAAO,MAAM,KAAK,WAAW,wBAAwB,YAAY;AACvE,kBAAI,MAAM;AACR,sBAAM,KAAK,eAAe;AAAA,cAC5B;AAAA,YACF;AAAA,UACF,WAAW,aAAa;AACtB,gBAAI,eAAe,WAAW;AAE5B,mBAAK,oBAAoB,EAAE,qBAAqB,cAAc,MAAW,eAAS,QAAQ,EAAE,CAAQ;AAAA,YACtG,WAAW,eAAe,SAAS;AAEjC,oBAAM,SAAS,MAAM,KAAK,WAAW,0BAA0B,YAAY;AAC3E,kBAAI,QAAQ;AACV,qBAAK,kBAAkB,MAAM;AAAA,cAC/B;AAAA,YACF;AAAA,UACF;AAEA,cAAI,QAAQ,mBAAmB,UAAU,IAAIA,UAAS,SAAS,QAAQ,IAAI,YAAY,EAAE;AAAA,QAC3F,SAASD,MAAU;AACjB,cAAI,MAAM,oCAAoC,QAAQ,KAAKA,KAAI,OAAO,EAAE;AAAA,QAC1E;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrXA,QAAA,WAAA,UAAA,QAAA;AAOA,QAAA,eAAA,cAAkC,SAAA,SAAQ;MAGxC,YAAY,KAAW;AACrB,cAAK;AACL,aAAK,OAAO;AACZ,aAAK,QAAQ;MACf;MACA,QAAK;AACH,YAAI,CAAC,KAAK,OAAO;AACf,eAAK,QAAQ;AACb,eAAK,KAAK,KAAK,IAAI;AACnB,eAAK,KAAK,IAAI;;MAElB;;AAdF,YAAA,eAAA;AAmBA,aAAA,iBAAiC,UAAoB,WAAS,QAAM;AAClE,aAAO,IAAI,QAAQ,CAACE,UAAS,WAAU;AACrC,iBAAS,YAAY,QAAQ;AAC7B,YAAI,OAAO;AACX,iBAAS,GAAG,QAAQ,SAAU,OAAK;AACjC,kBAAQ;QACV,CAAC;AACD,iBAAS,GAAG,OAAO,WAAA;AACjB,UAAAA,SAAQ,IAAI;QACd,CAAC;AACD,iBAAS,GAAG,SAAS,SAAUC,MAAG;AAChC,iBAAOA,IAAG;QACZ,CAAC;MACH,CAAC;IACH;AAdA,YAAA,mBAAA;AAsBA,aAAAC,oBAA0C,QAA6B;;AACrE,YAAI,CAAE,OAAO,eAAe;AAC1B,gBAAM,IAAI,MAAM,mEAAmE;;AAErF,YAAI,EAAG,OAAO,iBAAiB,SAAS;AACtC,gBAAM,IAAI,MAAM,2CAA2C;;AAE7D,YAAI,WAAW;;AACf,mBAA0B,WAAA,cAAA,MAAM,GAAA,YAAA,aAAA,MAAA,QAAA,SAAA,KAAA,CAAA,GAAA,CAAA,WAAA,QAAA;AAArB,kBAAM,QAAK,MAAA,QAAA,WAAA,KAAA;AACpB,wBAAY;AACZ,gBAAI;AACJ,oBAAQ,WAAW,SAAS,QAAQ,IAAI,MAAM,GAAG;AAE/C,oBAAM,OAAO,SAAS,MAAM,GAAG,WAAS,CAAC;AACzC,oBAAM;AACN,yBAAW,SAAS,MAAM,WAAS,CAAC;;;;;;;;;;;;AAGxC,YAAI,SAAS,SAAS,GAAG;AACvB,gBAAM;;;MAEV,CAAC;;AArBD,YAAA,qBAAAA;AAuBO,mBAAK,qBAAkC,eAA+B;AAC3E,YAAM,SAAS,IAAI,MAAK;;AACxB,iBAAyB,kBAAA,cAAA,aAAa,GAAA,mBAAA,oBAAA,MAAA,gBAAA,KAAA,GAAA,CAAA,kBAAA,QAAA;AAA3B,gBAAM,OAAI,MAAA,kBAAA;AACnB,iBAAO,KAAK,IAAI;;;;;;;;;;;AAElB,aAAO;;IACT;AANA,YAAA,uBAAA;AAUA,QAAM,aAAa;AACnB,aAAA,MAAsB,MAAY;AAChC,YAAM,QAAQ,WAAW,KAAK,IAAI;AAClC,UAAI,CAAE;AAAO,eAAO;AACpB,aAAO,KAAK,MAAM,GAAG,MAAM,KAAK;IAClC;AAJA,YAAA,QAAA;AAkBA,aAAAC,aAA4BC,SAAkB,OAAiC,WAAW,QAAM;AAC9F,aAAO,oBAAoBA,SACzB,cAAYA,QAAO,MAAM,OAAO,UAAU,QAAQ,CAAC;IACvD;AAHA,YAAA,cAAAD;AAKA,aAAA,UAA0BC,SAAgB;AACxC,aAAO,oBAAoBA,SACzB,cAAYA,QAAO,IAAI,QAAQ,CAAC;IACpC;AAHA,YAAA,YAAA;AAKA,aAAA,oBAA6B,SAAuB,WAA2C;AAC7F,aAAO,IAAI,QAAQ,CAACJ,UAAS,WAAU;AACrC,cAAM,cAAc,CAACC,SAAc;AACjC,kBAAQ,eAAe,SAAS,WAAW;AAC3C,iBAAOA,IAAG;QACZ;AACA,gBAAQ,YAAY,SAAS,WAAW;AACxC,cAAM,WAAW,MAAK;AACpB,kBAAQ,eAAe,SAAS,WAAW;AAC3C,UAAAD,SAAQ,MAAS;QACnB;AACA,kBAAU,QAAQ;MACpB,CAAC;IACH;AAIA,aAAAK,QAAuB,cAA0B;AAC/C,aAAO,IAAI,QAAQ,CAACL,UAAS,WAAU;AACrC,qBAAa,KAAK,QAAQ,CAAC,MAAc,WAAkB;AACzD,cAAI,SAAS,GAAG;AACd,YAAAA,SAAQ,MAAS;iBACZ;AACL,mBAAO,IAAI,MAAM,2BAAyB,IAAI,CAAC;;QAEnD,CAAC;AACD,qBAAa,KAAK,SAAS,CAACC,SAAc;AACxC,iBAAOA,IAAG;QACZ,CAAC;MACH,CAAC;IACH;AAbA,YAAA,SAAAI;;;;;AC/HA,IAGqB;AAHrB;AAAA;AAAA;AAGA,IAAqB,SAArB,MAA4B;AAAA,MAC1B;AAAA,MACA;AAAA,MAEA,UAAmB;AACjB,YAAI,KAAK,OAAO,QAAW;AACzB,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACdA,IAGqB;AAHrB;AAAA;AAAA;AAGA,IAAqB,eAArB,MAAkC;AAAA,MAChC,4BAAsC,CAAC;AAAA,MACvC;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;ACPA,IAGa,gCAEQ;AALrB;AAAA;AAAA;AACA;AAEO,IAAM,iCAAiC;AAE9C,IAAqB,sBAArB,MAAyC;AAAA,MAC/B;AAAA,MAEA,mBAAqD,CAAC;AAAA,MAE9D,IAAW,qBAAqB;AAC9B,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAW,mBAAmB,iBAAsC;AAClE,aAAK,sBAAsB;AAAA,MAC7B;AAAA,MAEA,sBAAsB;AACpB,cAAM,KAAK,IAAI,aAAa;AAE5B,WAAG,4BAA4B,CAAC,8BAA8B,qBAAqB,sBAAsB;AAEzG,aAAK,iBAAiB,SAAS,IAAI;AAAA,MACrC;AAAA,MAEA,iBAAiB;AACf,cAAM,KAAK,IAAI,aAAa;AAE5B,WAAG,4BAA4B;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,aAAK,iBAAiB,8BAA8B,IAAI;AAAA,MAC1D;AAAA,MAEA,MAAa,aAAa;AACxB,YAAI,KAAK,wBAAwB,QAAW;AAC1C;AAAA,QACF;AAEA,mBAAW,cAAc,KAAK,kBAAkB;AAC9C,gBAAMC,UAAS,KAAK,iBAAiB,UAAU;AAE/C,gBAAM,eAAe,KAAK,oBAAoB,aAAa,WAAW,YAAY,CAAC;AAEnF,gBAAM,aAAa,aAAa;AAEhC,gBAAM,kBAAkB,aAAa,WAAW,kBAAkB;AAElE,gBAAM,kBAAkB;AAAA,YACtB,iBAAiBA,QAAO;AAAA,UAC1B;AAEA,gBAAM,wBAAwB,MAAM,gBAAgB,OAAO;AAE3D,cAAI;AACJ,cAAI,uBAAuB;AACzB,kBAAM,gBAAgB,YAAY,IAAI;AAEtC,mBAAO,gBAAgB;AAAA,UACzB;AAEA,cAAI,UAA8B,KAAK,UAAU,eAAe;AAGhE,cAAI,QAAQ,KAAK,SAAS,KAAK,SAAS,SAAS;AAC/C,kBAAM,MAAM,oBAAI,KAAK;AAErB,kBAAM,WAAW,aAAa;AAAA,cAC5B,sBACE,IAAI,YAAY,IAChB,OACC,IAAI,SAAS,IAAI,KAClB,MACA,IAAI,QAAQ,IACZ,MACA,IAAI,SAAS,IACb,MACA,IAAI,WAAW,IACf;AAAA,YACJ;AACA,qBAAS,WAAW,IAAI;AAExB,kBAAM,SAAS,YAAY;AAAA,UAC7B;AAEA,0BAAgB,WAAW,OAAO;AAElC,gBAAM,gBAAgB,YAAY;AAElC,gBAAM,UAAU,aAAa,WAAW,gBAAgB;AAExD,gBAAM,gBAAgB,MAAM,QAAQ,OAAO;AAE3C,cAAI,eAAe;AACjB,gBAAI,CAAC,QAAQ,iBAAiB;AAC5B,oBAAM,QAAQ,YAAY,IAAI;AAAA,YAChC;AAEA,mBAAO,QAAQ;AAAA,UACjB;AAEA,cAAIA,QAAO,WAAW;AACpB,sBAAU,KAAK,UAAUA,QAAO,SAAS;AAAA,UAC3C,OAAO;AACL,sBAAU;AAAA,UACZ;AAGA,cAAI,QAAQ,KAAK,SAAS,KAAK,SAAS,SAAS;AAC/C,kBAAM,MAAM,oBAAI,KAAK;AAErB,kBAAM,WAAW,aAAa;AAAA,cAC5B,oBACE,IAAI,YAAY,IAChB,OACC,IAAI,SAAS,IAAI,KAClB,MACA,IAAI,QAAQ,IACZ,MACA,IAAI,SAAS,IACb,MACA,IAAI,WAAW,IACf;AAAA,YACJ;AACA,qBAAS,WAAW,IAAI;AAExB,kBAAM,SAAS,YAAY;AAAA,UAC7B;AAEA,cAAI,CAAC,WAAW,eAAe;AAC7B,kBAAM,QAAQ,eAAe;AAAA,UAC/B,WAAW,SAAS;AAClB,oBAAQ,UAAU;AAClB,kBAAM,QAAQ,YAAY;AAAA,UAC5B;AAEA,gBAAM,cAAc,aAAa,WAAW,cAAc;AAE1D,gBAAM,oBAAoB,MAAM,YAAY,OAAO;AAEnD,cAAI,mBAAmB;AACrB,gBAAI,CAAC,YAAY,iBAAiB;AAChC,oBAAM,YAAY,YAAY,IAAI;AAAA,YACpC;AAEA,mBAAO,YAAY;AAAA,UACrB;AAEA,cAAIA,QAAO,SAAS;AAClB,sBAAU,KAAK,UAAUA,QAAO,OAAO;AAAA,UACzC,OAAO;AACL,sBAAU;AAAA,UACZ;AAGA,cAAI,QAAQ,KAAK,SAAS,KAAK,SAAS,SAAS;AAC/C,kBAAM,MAAM,oBAAI,KAAK;AAErB,kBAAM,WAAW,aAAa;AAAA,cAC5B,kBACE,IAAI,YAAY,IAChB,OACC,IAAI,SAAS,IAAI,KAClB,MACA,IAAI,QAAQ,IACZ,MACA,IAAI,SAAS,IACb,MACA,IAAI,WAAW,IACf;AAAA,YACJ;AACA,qBAAS,WAAW,IAAI;AAExB,kBAAM,SAAS,YAAY;AAAA,UAC7B;AAEA,cAAI,CAAC,WAAW,mBAAmB;AACjC,kBAAM,YAAY,eAAe;AAAA,UACnC,WAAW,SAAS;AAClB,wBAAY,UAAU;AACtB,kBAAM,YAAY,YAAY;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC7LA,IAoDqB;AApDrB;AAAA;AAAA;AAoDA,IAAqB,gBAArB,MAAmC;AAAA,MACjC;AAAA,MACA;AAAA,MACA,QAA2B;AAAA,MAC3B;AAAA,MACA,YAAmC;AAAA,MAEnC,IAAI,cAAc;AAChB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,UAAU;AACZ,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAW;AACb,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,YAAY,SAAiB;AAC3B,aAAK,eAAe;AACpB,aAAK,QAAQ,oBAAI,KAAK,CAAC;AAKvB,cAAM,gBAAgB;AACtB,YAAI,QAAQ,WAAW,aAAa,GAAG;AACrC,oBAAU,QAAQ,UAAU,cAAc,MAAM;AAAA,QAClD;AAEA,cAAM,eAAe,QAAQ,QAAQ,GAAG;AAExC,YAAI,iBAAiB,GAAG;AACtB,gBAAM,cAAc,QAAQ,QAAQ,MAAM,YAAY;AAEtD,cAAI,cAAc,gBAAgB,cAAc,IAAI;AAClD,iBAAK,WAAW,QAAQ,UAAU,cAAc,CAAC;AAEjD,gBAAI,QAAQ,UAAU,cAAc,GAAG,WAAW,MAAM,QAAQ;AAC9D,mBAAK,QAAQ;AAAA,YACf,WAAW,QAAQ,UAAU,cAAc,GAAG,WAAW,MAAM,SAAS;AACtE,mBAAK,QAAQ;AAAA,YACf,WAAW,QAAQ,UAAU,cAAc,GAAG,WAAW,MAAM,QAAQ;AACrE,mBAAK,QAAQ;AAAA,YACf;AAEA,kBAAM,YAAY,QAAQ,YAAY,KAAK,WAAW;AAEtD,gBAAI,YAAY,cAAc;AAC5B,oBAAM,WAAW,QAAQ,UAAU,eAAe,GAAG,SAAS;AAC9D,mBAAK,QAAQ,IAAI,KAAK,QAAQ;AAAA,YAChC;AAAA,UACF,OAAO;AACL,iBAAK,WAAW,KAAK;AAAA,UACvB;AAAA,QACF,OAAO;AACL,eAAK,WAAW,KAAK;AAAA,QACvB;AAEA,aAAK,WAAW,KAAK,SAAS,KAAK;AAEnC,YAAI,KAAK,aAAa,IAAI;AACxB,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,iBAAiB,GAAG;AACtD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,WAAW,GAAG;AAChD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,cAAc,GAAG;AACnD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,YAAY,GAAG;AACjD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,UAAU,GAAG;AAC/C,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,aAAa,GAAG;AAClD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,iBAAiB,GAAG;AACtD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,cAAc,GAAG;AACnD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,aAAa,GAAG;AAClD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,cAAc,GAAG;AACnD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,uCAAuC,GAAG;AAC5E,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,oCAAoC,GAAG;AACzE,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,uBAAuB,GAAG;AAC5D,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,eAAe,GAAG;AACpD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,gBAAgB,GAAG;AACrD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,gBAAgB,GAAG;AACrD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,iBAAiB,GAAG;AACtD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,qCAAqC,GAAG;AAC1E,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,4CAA4C,GAAG;AACjF,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,oDAAoD,GAAG;AACzF,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,wBAAwB,GAAG;AAC7D,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,0BAA0B,GAAG;AAC/D,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,wDAAwD,GAAG;AAC7F,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,oBAAoB,GAAG;AACzD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,6BAA6B,GAAG;AAClE,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,uBAAuB,GAAG;AAC5D,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,oBAAoB,GAAG;AACzD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,gBAAgB,GAAG;AACrD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,kBAAkB,GAAG;AACvD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,qBAAqB,GAAG;AAC1D,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,WAAW,GAAG;AAChD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,aAAa,GAAG;AAClD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,QAAQ,aAAa,KAAK,GAAG;AACpD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,mCAAmC,GAAG;AACxE,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,QAAQ,wBAAwB,KAAK,GAAG;AAC/D,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,QAAQ,eAAe,KAAK,GAAG;AACtD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,QAAQ,eAAe,KAAK,GAAG;AACtD,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,WAAW,0BAA0B,GAAG;AAC/D,eAAK,YAAY;AAAA,QACnB,WACE,KAAK,SAAS,WAAW,cAAc,KACvC,KAAK,SAAS,WAAW,6BAA6B,KACtD,KAAK,SAAS,WAAW,aAAa,KACtC,KAAK,SAAS,WAAW,MAAM,KAC/B,KAAK,SAAS,WAAW,YAAY,KACrC,KAAK,SAAS,WAAW,YAAY,KACrC,KAAK,SAAS,WAAW,QAAQ,KACjC,KAAK,SAAS,WAAW,KAAK,KAC9B,KAAK,SAAS,WAAW,KAAK,KAC9B,KAAK,SAAS,WAAW,KAAK,KAC9B,KAAK,aAAa,QAClB,KAAK,aAAa,OAClB,KAAK,aAAa,OAClB,KAAK,aAAa,OAClB,KAAK,aAAa,KAClB;AACA,eAAK,YAAY;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC5NA,IAuCqB;AAvCrB;AAAA;AAAA;AAKA;AAkCA,IAAqB,0BAArB,MAA6C;AAAA,MACnC;AAAA,MAER,OAAe;AAAA,MACf,WAA2B;AAAA,MAC3B,gBAAyB;AAAA,MACzB,aAA+B;AAAA,MAC/B,cAAuB;AAAA,MACvB,aAAqB;AAAA,MACrB,aAAsB;AAAA,MACtB,sBAA+B;AAAA,MAC/B,YAAqB;AAAA,MACrB,aAAqB;AAAA,MACrB,eAAuB;AAAA,MACvB,eAAuB;AAAA,MACvB,eAAuB;AAAA,MACvB,oBAA4B;AAAA,MAC5B,aAAqB;AAAA,MACrB,YAAoB;AAAA,MACpB,YAAoB;AAAA,MACpB,8BAA8B;AAAA,MAC9B,+BAA+B;AAAA,MAC/B,+BAAsD;AAAA,MACtD,kBAA6C;AAAA,MAC7C,iCAAiC;AAAA,MACjC,sBAA+B;AAAA,MAC/B,wBAAiC;AAAA,MACjC,uBAA+B;AAAA,MAC/B,8BAAuD;AAAA,MACvD,+BAAuC;AAAA,MACvC,kCAA0C;AAAA,MAC1C,sCAA8C;AAAA,MAC9C,wBAAiC;AAAA,MACjC,mCAA4C;AAAA,MAE5C,IAAW,eAAe;AACxB,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAW,aAAa,WAAgC;AACtD,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,uBAAuB,eAA+B;AAC3D,YAAI,cAAc,uBAAuB;AACvC,kBAAQ,cAAc,uBAAuB;AAAA,YAC3C;AACE,mBAAK,+BAA+B;AACpC;AAAA,YACF;AACE,mBAAK,+BAA+B;AACpC;AAAA,UACJ;AAAA,QACF;AACA,YAAI,cAAc,eAAe,QAAW;AAC1C,kBAAQ,cAAc,YAAY;AAAA,YAChC;AACE,mBAAK,aAAa;AAClB;AAAA,YACF;AACE,mBAAK,aAAa;AAClB;AAAA,YACF;AACE,mBAAK,aAAa;AAClB;AAAA,YACF;AACE,mBAAK,aAAa;AAClB;AAAA,UACJ;AAAA,QACF;AAEA,YAAI,cAAc,aAAa,QAAW;AACxC,kBAAQ,cAAc,UAAU;AAAA,YAC9B;AACE,mBAAK,WAAW;AAChB,mBAAK,gBAAgB;AACrB;AAAA,YACF;AACE,mBAAK,WAAW;AAChB,mBAAK,gBAAgB;AACrB;AAAA,YACF;AACE,mBAAK,WAAW;AAChB,mBAAK,gBAAgB;AACrB;AAAA,UACJ;AAAA,QACF;AAEA,YAAI,cAAc,eAAe,QAAW;AAC1C,eAAK,aAAa,cAAc;AAAA,QAClC;AAEA,YAAI,cAAc,wBAAwB,QAAW;AACnD,eAAK,sBAAsB,cAAc;AAAA,QAC3C;AAAA,MACF;AAAA,MAEA,MAAa,YAAY;AACvB,YAAI,KAAK,kBAAkB,QAAW;AACpC;AAAA,QACF;AAEA,cAAM,OAAO,KAAK,cAAc,WAAW,mBAAmB;AAE9D,cAAM,KAAK,YAAY,IAAI;AAE3B,cAAM,OAAO,KAAK;AAGlB,YAAI,QAAQ,KAAK,QAAQ,aAAa,IAAI,GAAG;AAC3C,gBAAM,MAAM,oBAAI,KAAK;AAErB,gBAAM,WAAW,KAAK,cAAc;AAAA,YAClC,uBACE,IAAI,YAAY,IAChB,OACC,IAAI,SAAS,IAAI,KAClB,MACA,IAAI,QAAQ,IACZ,MACA,IAAI,SAAS,IACb,MACA,IAAI,WAAW,IACf;AAAA,UACJ;AACA,mBAAS,WAAW,IAAI;AAExB,gBAAM,SAAS,YAAY;AAAA,QAC7B;AAEA,cAAM,UAAU,CAAC;AAEjB,gBAAQ,KAAK,wCAAwC;AACrD,gBAAQ,KAAK,iBAAiB,KAAK,IAAI;AACvC,gBAAQ,KAAK,cAAc,KAAK,QAAQ;AACxC,gBAAQ,KAAK,oBAAoB,KAAK,aAAa;AACnD,gBAAQ,KAAK,gBAAgB,KAAK,UAAU;AAC5C,gBAAQ,KAAK,kBAAkB,KAAK,WAAW;AAC/C,gBAAQ,KAAK,iBAAiB,KAAK,UAAU;AAC7C,gBAAQ,KAAK,iBAAiB,KAAK,UAAU;AAC7C,gBAAQ,KAAK,2BAA2B,KAAK,mBAAmB;AAChE,gBAAQ,KAAK,gBAAgB,KAAK,SAAS;AAC3C,gBAAQ,KAAK,iBAAiB,KAAK,UAAU;AAC7C,gBAAQ,KAAK,mBAAmB,KAAK,YAAY;AACjD,gBAAQ,KAAK,mBAAmB,KAAK,YAAY;AACjD,gBAAQ,KAAK,mBAAmB,KAAK,YAAY;AACjD,gBAAQ,KAAK,yBAAyB,KAAK,iBAAiB;AAC5D,gBAAQ,KAAK,iBAAiB,KAAK,UAAU;AAC7C,gBAAQ,KAAK,gBAAgB,KAAK,SAAS;AAC3C,gBAAQ,KAAK,gBAAgB,KAAK,SAAS;AAC3C,gBAAQ,KAAK,oCAAoC,KAAK,2BAA2B;AACjF,gBAAQ,KAAK,qCAAqC,KAAK,4BAA4B;AACnF,gBAAQ,KAAK,qCAAqC,KAAK,4BAA4B;AACnF,gBAAQ,KAAK,0BAA0B,KAAK,mBAAmB;AAC/D,gBAAQ,KAAK,8BAA8B,KAAK,qBAAqB;AACrE,gBAAQ,KAAK,gCAAgC,KAAK,8BAA8B;AAChF,gBAAQ,KAAK,uBAAuB,KAAK,eAAe;AACxD,gBAAQ,KAAK,2BAA2B,KAAK,oBAAoB;AACjE,gBAAQ,KAAK,mCAAmC,KAAK,2BAA2B;AAChF,gBAAQ,KAAK,qCAAqC,KAAK,4BAA4B;AACnF,gBAAQ,KAAK,wCAAwC,KAAK,+BAA+B;AACzF,gBAAQ,KAAK,8CAA8C,KAAK,mCAAmC;AACnG,gBAAQ,KAAK,6BAA6B,KAAK,qBAAqB;AACpE,gBAAQ,KAAK,yCAAyC,KAAK,gCAAgC;AAE3F,aAAK,WAAW,QAAQ,KAAK,IAAI,CAAC;AAElC,aAAK,YAAY;AAAA,MACnB;AAAA,IACF;AAAA;AAAA;;;AC/MA,OAAOC,aAAY;AAIJ,SAAR,MAAuB;AAC5B,MAAI,UAAU,UAAU,SAAS,IAAI;AACnC,IAAAA,QAAO,eAAe,SAAS;AAC/B,cAAU;AAAA,EACZ;AAEA,SAAO,UAAU,MAAM,SAAS,WAAW,EAAE;AAC/C;AAXA,IACM,WAEF;AAHJ;AAAA;AACA,IAAM,YAAY,IAAI,WAAW,GAAG;AAEpC,IAAI,UAAU,UAAU;AAAA;AAAA;;;ACSjB,SAAS,gBAAgB,KAAK,SAAS,GAAG;AAG/C,UAAQ,UAAU,IAAI,SAAS,CAAC,CAAC,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC,IAAI,MAAM,UAAU,IAAI,SAAS,CAAC,CAAC,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC,IAAI,MAAM,UAAU,IAAI,SAAS,CAAC,CAAC,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC,IAAI,MAAM,UAAU,IAAI,SAAS,CAAC,CAAC,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC,IAAI,MAAM,UAAU,IAAI,SAAS,EAAE,CAAC,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC,GAAG,YAAY;AACngB;AAhBA,IAMM;AANN;AAAA;AAMA,IAAM,YAAY,CAAC;AAEnB,aAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAC5B,gBAAU,MAAM,IAAI,KAAO,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA,IAClD;AAAA;AAAA;;;ACVA,OAAOC,aAAY;AAAnB,IACO;AADP;AAAA;AACA,IAAO,iBAAQ;AAAA,MACb,YAAYA,QAAO;AAAA,IACrB;AAAA;AAAA;;;ACCA,SAAS,GAAG,SAAS,KAAK,QAAQ;AAChC,MAAI,eAAO,cAAc,CAAC,OAAO,CAAC,SAAS;AACzC,WAAO,eAAO,WAAW;AAAA,EAC3B;AAEA,YAAU,WAAW,CAAC;AACtB,QAAM,OAAO,QAAQ,WAAW,QAAQ,OAAO,KAAK;AAEpD,OAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAO;AAC3B,OAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAO;AAE3B,MAAI,KAAK;AACP,aAAS,UAAU;AAEnB,aAAS,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AAC3B,UAAI,SAAS,CAAC,IAAI,KAAK,CAAC;AAAA,IAC1B;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,gBAAgB,IAAI;AAC7B;AA1BA,IA4BO;AA5BP;AAAA;AAAA;AACA;AACA;AA0BA,IAAO,aAAQ;AAAA;AAAA;;;AC5Bf;AAAA;AAEA;AAAA;AAAA;;;ACFA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAEA,QAAIC,QAAO,UAAQ,MAAM;AACzB,QAAI,SAAS,UAAQ,QAAQ;AAE7B,QAAI,cAAe,OAAO,UAAU,WAAY;AAC9C,aAAO,KAAK,IAAI;AAEhB,WAAK,WAAW,CAAC;AACjB,WAAK,YAAY;AAEjB,WAAK,SAAS,CAAC;AACf,WAAK,UAAU;AAEf,WAAK,YAAY;AACjB,WAAK,WAAW;AAAA,IAClB;AACA,IAAAA,MAAK,SAAS,aAAa,MAAM;AAEjC,gBAAY,UAAU,OAAO,SAAU,QAAQ,UAAU;AACvD,WAAK,OAAO,KAAK;AAAA,QACf,QAAQ,KAAK,IAAI,MAAM;AAAA;AAAA,QACvB,WAAW,SAAS;AAAA,QACpB,MAAM;AAAA,MACR,CAAC;AAED,cAAQ;AAAA,QACN,WAAY;AACV,eAAK,SAAS;AAGd,cAAI,KAAK,WAAW,KAAK,UAAU,KAAK,OAAO,SAAS,GAAG;AACzD,iBAAK,UAAU;AAEf,iBAAK,KAAK,OAAO;AAAA,UACnB;AAAA,QACF,EAAE,KAAK,IAAI;AAAA,MACb;AAAA,IACF;AAEA,gBAAY,UAAU,QAAQ,SAAU,MAAM,UAAU;AACtD,UAAI,CAAC,KAAK,UAAU;AAClB,aAAK,KAAK,SAAS,IAAI,MAAM,qBAAqB,CAAC;AACnD,eAAO;AAAA,MACT;AAEA,UAAI;AACJ,UAAI,OAAO,SAAS,IAAI,GAAG;AACzB,qBAAa;AAAA,MACf,OAAO;AACL,qBAAa,OAAO,KAAK,MAAM,YAAY,KAAK,SAAS;AAAA,MAC3D;AAEA,WAAK,SAAS,KAAK,UAAU;AAC7B,WAAK,aAAa,WAAW;AAE7B,WAAK,SAAS;AAGd,UAAI,KAAK,UAAU,KAAK,OAAO,WAAW,GAAG;AAC3C,aAAK,UAAU;AAAA,MACjB;AAEA,aAAO,KAAK,YAAY,CAAC,KAAK;AAAA,IAChC;AAEA,gBAAY,UAAU,MAAM,SAAU,MAAM,UAAU;AACpD,UAAI,MAAM;AACR,aAAK,MAAM,MAAM,QAAQ;AAAA,MAC3B;AAEA,WAAK,WAAW;AAGhB,UAAI,CAAC,KAAK,UAAU;AAClB;AAAA,MACF;AAGA,UAAI,KAAK,SAAS,WAAW,GAAG;AAC9B,aAAK,KAAK;AAAA,MACZ,OAAO;AACL,aAAK,SAAS,KAAK,IAAI;AACvB,aAAK,SAAS;AAAA,MAChB;AAAA,IACF;AAEA,gBAAY,UAAU,cAAc,YAAY,UAAU;AAE1D,gBAAY,UAAU,OAAO,WAAY;AACvC,UAAI,KAAK,OAAO,SAAS,GAAG;AAC1B,aAAK,KAAK,SAAS,IAAI,MAAM,yBAAyB,CAAC;AAAA,MACzD;AAEA,WAAK,QAAQ;AAAA,IACf;AAEA,gBAAY,UAAU,UAAU,WAAY;AAC1C,UAAI,CAAC,KAAK,UAAU;AAClB;AAAA,MACF;AAEA,WAAK,WAAW;AAChB,WAAK,SAAS;AACd,WAAK,WAAW;AAEhB,WAAK,KAAK,OAAO;AAAA,IACnB;AAEA,gBAAY,UAAU,2BAA2B,SAAU,MAAM;AAE/D,WAAK,OAAO,MAAM;AAGlB,UAAI,aAAa,KAAK,SAAS,CAAC;AAGhC,UAAI,WAAW,SAAS,KAAK,QAAQ;AACnC,aAAK,aAAa,KAAK;AACvB,aAAK,SAAS,CAAC,IAAI,WAAW,MAAM,KAAK,MAAM;AAE/C,aAAK,KAAK,KAAK,MAAM,WAAW,MAAM,GAAG,KAAK,MAAM,CAAC;AAAA,MACvD,OAAO;AAEL,aAAK,aAAa,WAAW;AAC7B,aAAK,SAAS,MAAM;AAEpB,aAAK,KAAK,KAAK,MAAM,UAAU;AAAA,MACjC;AAAA,IACF;AAEA,gBAAY,UAAU,eAAe,SAAU,MAAM;AACnD,WAAK,OAAO,MAAM;AAElB,UAAI,MAAM;AACV,UAAI,QAAQ;AACZ,UAAI,OAAO,OAAO,MAAM,KAAK,MAAM;AAGnC,aAAO,MAAM,KAAK,QAAQ;AACxB,YAAI,MAAM,KAAK,SAAS,OAAO;AAC/B,YAAI,MAAM,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,GAAG;AAEhD,YAAI,KAAK,MAAM,KAAK,GAAG,GAAG;AAC1B,eAAO;AAGP,YAAI,QAAQ,IAAI,QAAQ;AACtB,eAAK,SAAS,EAAE,KAAK,IAAI,IAAI,MAAM,GAAG;AAAA,QACxC;AAAA,MACF;AAGA,UAAI,QAAQ,GAAG;AACb,aAAK,SAAS,OAAO,GAAG,KAAK;AAAA,MAC/B;AAEA,WAAK,aAAa,KAAK;AAEvB,WAAK,KAAK,KAAK,MAAM,IAAI;AAAA,IAC3B;AAEA,gBAAY,UAAU,WAAW,WAAY;AAC3C,UAAI;AAEF,eAAO,KAAK,YAAY,KAAK,KAAK,UAAU,KAAK,OAAO,SAAS,GAAG;AAClE,cAAI,OAAO,KAAK,OAAO,CAAC;AAGxB,cAAI,KAAK,WAAW;AAClB,iBAAK,yBAAyB,IAAI;AAAA,UACpC,WAAW,KAAK,aAAa,KAAK,QAAQ;AAGxC,iBAAK,aAAa,IAAI;AAAA,UACxB,OAAO;AAGL;AAAA,UACF;AAAA,QACF;AAEA,YAAI,KAAK,YAAY,CAAC,KAAK,UAAU;AACnC,eAAK,KAAK;AAAA,QACZ;AAAA,MACF,SAAS,IAAI;AACX,aAAK,KAAK,SAAS,EAAE;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;;;AC5LA;AAAA;AAAA;AAaA,QAAI,cAAc;AAAA,MAChB;AAAA;AAAA,QAEE,GAAG,CAAC,CAAC;AAAA,QACL,GAAG,CAAC,CAAC;AAAA,MACP;AAAA,MACA;AAAA;AAAA,QAEE,GAAG,CAAC,CAAC;AAAA,QACL,GAAG,CAAC,CAAC;AAAA,MACP;AAAA,MACA;AAAA;AAAA,QAEE,GAAG,CAAC,GAAG,CAAC;AAAA,QACR,GAAG,CAAC,CAAC;AAAA,MACP;AAAA,MACA;AAAA;AAAA,QAEE,GAAG,CAAC,GAAG,CAAC;AAAA,QACR,GAAG,CAAC,GAAG,CAAC;AAAA,MACV;AAAA,MACA;AAAA;AAAA,QAEE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,QACd,GAAG,CAAC,GAAG,CAAC;AAAA,MACV;AAAA,MACA;AAAA;AAAA,QAEE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,QACd,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,MAChB;AAAA,MACA;AAAA;AAAA,QAEE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,QAC1B,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,MAChB;AAAA,IACF;AAEA,YAAQ,iBAAiB,SAAU,OAAO,QAAQ;AAChD,UAAI,SAAS,CAAC;AACd,UAAI,YAAY,QAAQ;AACxB,UAAI,YAAY,SAAS;AACzB,UAAI,YAAY,QAAQ,aAAa;AACrC,UAAI,YAAY,SAAS,aAAa;AACtC,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,YAAI,OAAO,YAAY,CAAC;AACxB,YAAI,YAAY,WAAW,KAAK,EAAE;AAClC,YAAI,aAAa,WAAW,KAAK,EAAE;AACnC,iBAAS,IAAI,GAAG,IAAI,KAAK,EAAE,QAAQ,KAAK;AACtC,cAAI,KAAK,EAAE,CAAC,IAAI,WAAW;AACzB;AAAA,UACF,OAAO;AACL;AAAA,UACF;AAAA,QACF;AACA,iBAAS,IAAI,GAAG,IAAI,KAAK,EAAE,QAAQ,KAAK;AACtC,cAAI,KAAK,EAAE,CAAC,IAAI,WAAW;AACzB;AAAA,UACF,OAAO;AACL;AAAA,UACF;AAAA,QACF;AACA,YAAI,YAAY,KAAK,aAAa,GAAG;AACnC,iBAAO,KAAK,EAAE,OAAO,WAAW,QAAQ,YAAY,OAAO,EAAE,CAAC;AAAA,QAChE;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,YAAQ,uBAAuB,SAAU,OAAO;AAC9C,aAAO,SAAU,GAAG,GAAG,MAAM;AAC3B,YAAI,iBAAiB,IAAI,YAAY,IAAI,EAAE,EAAE;AAC7C,YAAI,UACA,IAAI,kBAAkB,YAAY,IAAI,EAAE,EAAE,SAAU,IACtD,YAAY,IAAI,EAAE,EAAE,cAAc;AACpC,YAAI,iBAAiB,IAAI,YAAY,IAAI,EAAE,EAAE;AAC7C,YAAI,UACA,IAAI,kBAAkB,YAAY,IAAI,EAAE,EAAE,SAAU,IACtD,YAAY,IAAI,EAAE,EAAE,cAAc;AACpC,eAAO,SAAS,IAAI,SAAS,QAAQ;AAAA,MACvC;AAAA,IACF;AAAA;AAAA;;;AC9FA;AAAA;AAAA;AAEA,WAAO,UAAU,SAAS,eAAe,MAAM,OAAO,QAAQ;AAC5D,UAAI,QAAQ,OAAO,QAAQ;AAC3B,UAAI,QAAQ,KAAK,IAAI,QAAQ,IAAI;AACjC,UAAI,SAAS,KAAK,IAAI,QAAQ,KAAK;AACnC,UAAI,UAAU,KAAK,IAAI,QAAQ,MAAM;AAErC,UAAI,SAAS,UAAU,SAAS,SAAS;AACvC,eAAO;AAAA,MACT;AACA,UAAI,UAAU,SAAS;AACrB,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACfA;AAAA;AAAA;AAEA,QAAI,iBAAiB;AACrB,QAAI,iBAAiB;AAErB,aAAS,aAAa,OAAO,KAAK,OAAO;AACvC,UAAI,YAAY,QAAQ;AACxB,UAAI,UAAU,GAAG;AACf,oBAAY,KAAK,KAAK,aAAa,IAAI,MAAM;AAAA,MAC/C;AACA,aAAO;AAAA,IACT;AAEA,QAAI,SAAU,OAAO,UAAU,SAAU,YAAY,cAAc;AACjE,UAAI,QAAQ,WAAW;AACvB,UAAI,SAAS,WAAW;AACxB,UAAI,YAAY,WAAW;AAC3B,UAAI,MAAM,WAAW;AACrB,UAAI,QAAQ,WAAW;AAEvB,WAAK,OAAO,aAAa;AACzB,WAAK,QAAQ,aAAa;AAC1B,WAAK,WAAW,aAAa;AAE7B,WAAK,cAAc;AACnB,WAAK,UAAU,CAAC;AAChB,UAAI,WAAW;AACb,YAAI,SAAS,eAAe,eAAe,OAAO,MAAM;AACxD,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,eAAK,QAAQ,KAAK;AAAA,YAChB,WAAW,aAAa,OAAO,CAAC,EAAE,OAAO,KAAK,KAAK;AAAA,YACnD,QAAQ,OAAO,CAAC,EAAE;AAAA,YAClB,WAAW;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF,OAAO;AACL,aAAK,QAAQ,KAAK;AAAA,UAChB,WAAW,aAAa,OAAO,KAAK,KAAK;AAAA,UACzC;AAAA,UACA,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AAMA,UAAI,UAAU,GAAG;AACf,aAAK,eAAe;AAAA,MACtB,WAAW,UAAU,IAAI;AACvB,aAAK,eAAe,MAAM;AAAA,MAC5B,OAAO;AACL,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAEA,WAAO,UAAU,QAAQ,WAAY;AACnC,WAAK;AAAA,QACH,KAAK,QAAQ,KAAK,WAAW,EAAE,YAAY;AAAA,QAC3C,KAAK,mBAAmB,KAAK,IAAI;AAAA,MACnC;AAAA,IACF;AAEA,WAAO,UAAU,iBAAiB,SAChC,SACA,gBACA,WACA;AACA,UAAI,cAAc,KAAK;AACvB,UAAI,cAAc,cAAc;AAEhC,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAI,UAAU,QAAQ,IAAI,CAAC;AAC3B,YAAI,SAAS,IAAI,cAAc,eAAe,IAAI,WAAW,IAAI;AACjE,uBAAe,CAAC,IAAI,UAAU;AAAA,MAChC;AAAA,IACF;AAEA,WAAO,UAAU,iBAAiB,SAChC,SACA,gBACA,WACA;AACA,UAAI,WAAW,KAAK;AAEpB,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAI,UAAU,QAAQ,IAAI,CAAC;AAC3B,YAAI,OAAO,WAAW,SAAS,CAAC,IAAI;AACpC,uBAAe,CAAC,IAAI,UAAU;AAAA,MAChC;AAAA,IACF;AAEA,WAAO,UAAU,iBAAiB,SAChC,SACA,gBACA,WACA;AACA,UAAI,cAAc,KAAK;AACvB,UAAI,cAAc,cAAc;AAChC,UAAI,WAAW,KAAK;AAEpB,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAI,UAAU,QAAQ,IAAI,CAAC;AAC3B,YAAI,OAAO,WAAW,SAAS,CAAC,IAAI;AACpC,YAAI,SAAS,IAAI,cAAc,eAAe,IAAI,WAAW,IAAI;AACjE,YAAI,QAAQ,KAAK,OAAO,SAAS,QAAQ,CAAC;AAC1C,uBAAe,CAAC,IAAI,UAAU;AAAA,MAChC;AAAA,IACF;AAEA,WAAO,UAAU,iBAAiB,SAChC,SACA,gBACA,WACA;AACA,UAAI,cAAc,KAAK;AACvB,UAAI,cAAc,cAAc;AAChC,UAAI,WAAW,KAAK;AAEpB,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAI,UAAU,QAAQ,IAAI,CAAC;AAC3B,YAAI,OAAO,WAAW,SAAS,CAAC,IAAI;AACpC,YAAI,SAAS,IAAI,cAAc,eAAe,IAAI,WAAW,IAAI;AACjE,YAAI,WAAW,IAAI,eAAe,WAAW,SAAS,IAAI,WAAW,IAAI;AACzE,YAAI,QAAQ,eAAe,QAAQ,MAAM,QAAQ;AACjD,uBAAe,CAAC,IAAI,UAAU;AAAA,MAChC;AAAA,IACF;AAEA,WAAO,UAAU,qBAAqB,SAAU,SAAS;AACvD,UAAIC,UAAS,QAAQ,CAAC;AACtB,UAAI;AACJ,UAAI,eAAe,KAAK,QAAQ,KAAK,WAAW;AAChD,UAAI,YAAY,aAAa;AAE7B,UAAIA,YAAW,GAAG;AAChB,yBAAiB,QAAQ,MAAM,GAAG,YAAY,CAAC;AAAA,MACjD,OAAO;AACL,yBAAiB,OAAO,MAAM,SAAS;AAEvC,gBAAQA,SAAQ;AAAA,UACd,KAAK;AACH,iBAAK,eAAe,SAAS,gBAAgB,SAAS;AACtD;AAAA,UACF,KAAK;AACH,iBAAK,eAAe,SAAS,gBAAgB,SAAS;AACtD;AAAA,UACF,KAAK;AACH,iBAAK,eAAe,SAAS,gBAAgB,SAAS;AACtD;AAAA,UACF,KAAK;AACH,iBAAK,eAAe,SAAS,gBAAgB,SAAS;AACtD;AAAA,UACF;AACE,kBAAM,IAAI,MAAM,gCAAgCA,OAAM;AAAA,QAC1D;AAAA,MACF;AAEA,WAAK,MAAM,cAAc;AAEzB,mBAAa;AACb,UAAI,aAAa,aAAa,aAAa,QAAQ;AACjD,aAAK,YAAY;AACjB,aAAK;AACL,uBAAe,KAAK,QAAQ,KAAK,WAAW;AAAA,MAC9C,OAAO;AACL,aAAK,YAAY;AAAA,MACnB;AAEA,UAAI,cAAc;AAEhB,aAAK,KAAK,aAAa,YAAY,GAAG,KAAK,mBAAmB,KAAK,IAAI,CAAC;AAAA,MAC1E,OAAO;AACL,aAAK,YAAY;AACjB,aAAK,SAAS;AAAA,MAChB;AAAA,IACF;AAAA;AAAA;;;AChLA;AAAA;AAAA;AAEA,QAAIC,QAAO,UAAQ,MAAM;AACzB,QAAI,cAAc;AAClB,QAAI,SAAS;AAEb,QAAI,cAAe,OAAO,UAAU,SAAU,YAAY;AACxD,kBAAY,KAAK,IAAI;AAErB,UAAI,UAAU,CAAC;AACf,UAAI,OAAO;AACX,WAAK,UAAU,IAAI,OAAO,YAAY;AAAA,QACpC,MAAM,KAAK,KAAK,KAAK,IAAI;AAAA,QACzB,OAAO,SAAU,QAAQ;AACvB,kBAAQ,KAAK,MAAM;AAAA,QACrB;AAAA,QACA,UAAU,WAAY;AACpB,eAAK,KAAK,YAAY,OAAO,OAAO,OAAO,CAAC;AAAA,QAC9C;AAAA,MACF,CAAC;AAED,WAAK,QAAQ,MAAM;AAAA,IACrB;AACA,IAAAA,MAAK,SAAS,aAAa,WAAW;AAAA;AAAA;;;ACvBtC,IAAAC,qBAAA;AAAA;AAAA;AAEA,WAAO,UAAU;AAAA,MACf,eAAe,CAAC,KAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAI;AAAA,MAE9D,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA;AAAA,MACX,WAAW;AAAA;AAAA;AAAA,MAGX,qBAAqB;AAAA,MACrB,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,iBAAiB;AAAA;AAAA;AAAA,MAGjB,yBAAyB;AAAA,MACzB,uBAAuB;AAAA,MAEvB,sBAAsB;AAAA,QACpB,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MAEA,gBAAgB;AAAA,IAClB;AAAA;AAAA;;;AC/BA;AAAA;AAAA;AAEA,QAAIC,YAAW,CAAC;AAEhB,KAAC,WAAY;AACX,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,YAAI,aAAa;AACjB,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAI,aAAa,GAAG;AAClB,yBAAa,aAAc,eAAe;AAAA,UAC5C,OAAO;AACL,yBAAa,eAAe;AAAA,UAC9B;AAAA,QACF;AACA,QAAAA,UAAS,CAAC,IAAI;AAAA,MAChB;AAAA,IACF,GAAG;AAEH,QAAI,gBAAiB,OAAO,UAAU,WAAY;AAChD,WAAK,OAAO;AAAA,IACd;AAEA,kBAAc,UAAU,QAAQ,SAAU,MAAM;AAC9C,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,aAAK,OAAOA,WAAU,KAAK,OAAO,KAAK,CAAC,KAAK,GAAI,IAAK,KAAK,SAAS;AAAA,MACtE;AACA,aAAO;AAAA,IACT;AAEA,kBAAc,UAAU,QAAQ,WAAY;AAC1C,aAAO,KAAK,OAAO;AAAA,IACrB;AAEA,kBAAc,QAAQ,SAAU,KAAK;AACnC,UAAI,MAAM;AACV,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,cAAMA,WAAU,MAAM,IAAI,CAAC,KAAK,GAAI,IAAK,QAAQ;AAAA,MACnD;AACA,aAAO,MAAM;AAAA,IACf;AAAA;AAAA;;;ACvCA;AAAA;AAAA;AAEA,QAAIC,aAAY;AAChB,QAAI,gBAAgB;AAEpB,QAAIC,UAAU,OAAO,UAAU,SAAU,SAAS,cAAc;AAC9D,WAAK,WAAW;AAChB,cAAQ,WAAW,QAAQ,aAAa;AAExC,WAAK,WAAW;AAChB,WAAK,WAAW;AAChB,WAAK,0BAA0B;AAG/B,WAAK,WAAW,CAAC;AACjB,WAAK,aAAa;AAElB,WAAK,UAAU,CAAC;AAChB,WAAK,QAAQD,WAAU,SAAS,IAAI,KAAK,YAAY,KAAK,IAAI;AAC9D,WAAK,QAAQA,WAAU,SAAS,IAAI,KAAK,YAAY,KAAK,IAAI;AAC9D,WAAK,QAAQA,WAAU,SAAS,IAAI,KAAK,YAAY,KAAK,IAAI;AAC9D,WAAK,QAAQA,WAAU,SAAS,IAAI,KAAK,YAAY,KAAK,IAAI;AAC9D,WAAK,QAAQA,WAAU,SAAS,IAAI,KAAK,YAAY,KAAK,IAAI;AAC9D,WAAK,QAAQA,WAAU,SAAS,IAAI,KAAK,YAAY,KAAK,IAAI;AAE9D,WAAK,OAAO,aAAa;AACzB,WAAK,QAAQ,aAAa;AAC1B,WAAK,WAAW,aAAa;AAC7B,WAAK,QAAQ,aAAa;AAC1B,WAAK,aAAa,aAAa;AAC/B,WAAK,UAAU,aAAa;AAC5B,WAAK,SAAS,aAAa;AAC3B,WAAK,cAAc,aAAa;AAChC,WAAK,WAAW,aAAa;AAC7B,WAAK,qBAAqB,aAAa;AACvC,WAAK,kBAAkB,aAAa,mBAAmB,WAAY;AAAA,MAAC;AAAA,IACtE;AAEA,IAAAC,QAAO,UAAU,QAAQ,WAAY;AACnC,WAAK,KAAKD,WAAU,cAAc,QAAQ,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAAA,IAC3E;AAEA,IAAAC,QAAO,UAAU,kBAAkB,SAAU,MAAM;AACjD,UAAI,YAAYD,WAAU;AAE1B,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,YAAI,KAAK,CAAC,MAAM,UAAU,CAAC,GAAG;AAC5B,eAAK,MAAM,IAAI,MAAM,wBAAwB,CAAC;AAC9C;AAAA,QACF;AAAA,MACF;AACA,WAAK,KAAK,GAAG,KAAK,iBAAiB,KAAK,IAAI,CAAC;AAAA,IAC/C;AAEA,IAAAC,QAAO,UAAU,mBAAmB,SAAU,MAAM;AAElD,UAAI,SAAS,KAAK,aAAa,CAAC;AAGhC,UAAI,OAAO,KAAK,aAAa,CAAC;AAC9B,UAAI,OAAO;AACX,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAQ,OAAO,aAAa,KAAK,CAAC,CAAC;AAAA,MACrC;AAKA,UAAI,YAAY,QAAQ,KAAK,CAAC,IAAI,EAAI;AAItC,UAAI,CAAC,KAAK,YAAY,SAASD,WAAU,WAAW;AAClD,aAAK,MAAM,IAAI,MAAM,4BAA4B,CAAC;AAClD;AAAA,MACF;AAEA,WAAK,OAAO,IAAI,cAAc;AAC9B,WAAK,KAAK,MAAM,OAAO,KAAK,IAAI,CAAC;AAEjC,UAAI,KAAK,QAAQ,IAAI,GAAG;AACtB,eAAO,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAA,MAClC;AAEA,UAAI,CAAC,WAAW;AACd,aAAK,MAAM,IAAI,MAAM,qCAAqC,IAAI,CAAC;AAC/D;AAAA,MACF;AAEA,WAAK,KAAK,SAAS,GAAG,KAAK,WAAW,KAAK,IAAI,CAAC;AAAA,IAClD;AAEA,IAAAC,QAAO,UAAU,aAAa,WAAoB;AAChD,WAAK,KAAK,GAAG,KAAK,iBAAiB,KAAK,IAAI,CAAC;AAAA,IAC/C;AAEA,IAAAA,QAAO,UAAU,kBAAkB,WAAY;AAC7C,WAAK,KAAK,GAAG,KAAK,eAAe,KAAK,IAAI,CAAC;AAAA,IAC7C;AAEA,IAAAA,QAAO,UAAU,iBAAiB,SAAU,MAAM;AAChD,UAAI,UAAU,KAAK,YAAY,CAAC;AAChC,UAAI,UAAU,KAAK,KAAK,MAAM;AAG9B,UAAI,KAAK,SAAS,YAAY,YAAY,SAAS;AACjD,aAAK,MAAM,IAAI,MAAM,iBAAiB,UAAU,QAAQ,OAAO,CAAC;AAChE;AAAA,MACF;AAEA,UAAI,CAAC,KAAK,UAAU;AAClB,aAAK,KAAK,GAAG,KAAK,iBAAiB,KAAK,IAAI,CAAC;AAAA,MAC/C;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU,cAAc,SAAU,QAAQ;AAC/C,WAAK,KAAK,QAAQ,KAAK,WAAW,KAAK,IAAI,CAAC;AAAA,IAC9C;AACA,IAAAA,QAAO,UAAU,aAAa,SAAU,MAAM;AAC5C,WAAK,KAAK,MAAM,IAAI;AAEpB,UAAI,QAAQ,KAAK,aAAa,CAAC;AAC/B,UAAI,SAAS,KAAK,aAAa,CAAC;AAChC,UAAI,QAAQ,KAAK,CAAC;AAClB,UAAI,YAAY,KAAK,CAAC;AACtB,UAAI,QAAQ,KAAK,EAAE;AACnB,UAAIC,UAAS,KAAK,EAAE;AACpB,UAAI,YAAY,KAAK,EAAE;AAOvB,UACE,UAAU,KACV,UAAU,KACV,UAAU,KACV,UAAU,KACV,UAAU,IACV;AACA,aAAK,MAAM,IAAI,MAAM,2BAA2B,KAAK,CAAC;AACtD;AAAA,MACF;AACA,UAAI,EAAE,aAAaF,WAAU,uBAAuB;AAClD,aAAK,MAAM,IAAI,MAAM,wBAAwB,CAAC;AAC9C;AAAA,MACF;AACA,UAAI,UAAU,GAAG;AACf,aAAK,MAAM,IAAI,MAAM,gCAAgC,CAAC;AACtD;AAAA,MACF;AACA,UAAIE,YAAW,GAAG;AAChB,aAAK,MAAM,IAAI,MAAM,2BAA2B,CAAC;AACjD;AAAA,MACF;AACA,UAAI,cAAc,KAAK,cAAc,GAAG;AACtC,aAAK,MAAM,IAAI,MAAM,8BAA8B,CAAC;AACpD;AAAA,MACF;AAEA,WAAK,aAAa;AAElB,UAAI,MAAMF,WAAU,qBAAqB,KAAK,UAAU;AAExD,WAAK,WAAW;AAEhB,WAAK,SAAS;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,QAAQ,SAAS;AAAA,QAC5B,SAAS,QAAQ,YAAYA,WAAU,iBAAiB;AAAA,QACxD,OAAO,QAAQ,YAAYA,WAAU,eAAe;AAAA,QACpD,OAAO,QAAQ,YAAYA,WAAU,eAAe;AAAA,QACpD;AAAA,QACA;AAAA,MACF,CAAC;AAED,WAAK,gBAAgB;AAAA,IACvB;AAEA,IAAAC,QAAO,UAAU,cAAc,SAAU,QAAQ;AAC/C,WAAK,KAAK,QAAQ,KAAK,WAAW,KAAK,IAAI,CAAC;AAAA,IAC9C;AACA,IAAAA,QAAO,UAAU,aAAa,SAAU,MAAM;AAC5C,WAAK,KAAK,MAAM,IAAI;AAEpB,UAAI,UAAU,KAAK,MAAM,KAAK,SAAS,CAAC;AAGxC,eAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,aAAK,SAAS,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,GAAI,CAAC;AAAA,MAC1E;AAEA,WAAK,QAAQ,KAAK,QAAQ;AAE1B,WAAK,gBAAgB;AAAA,IACvB;AAEA,IAAAA,QAAO,UAAU,cAAc,SAAU,QAAQ;AAC/C,WAAK,mBAAmB;AACxB,WAAK,KAAK,QAAQ,KAAK,WAAW,KAAK,IAAI,CAAC;AAAA,IAC9C;AACA,IAAAA,QAAO,UAAU,aAAa,SAAU,MAAM;AAC5C,WAAK,KAAK,MAAM,IAAI;AAGpB,UAAI,KAAK,eAAeD,WAAU,yBAAyB;AACzD,YAAI,KAAK,SAAS,WAAW,GAAG;AAC9B,eAAK,MAAM,IAAI,MAAM,0CAA0C,CAAC;AAChE;AAAA,QACF;AACA,YAAI,KAAK,SAAS,KAAK,SAAS,QAAQ;AACtC,eAAK,MAAM,IAAI,MAAM,2CAA2C,CAAC;AACjE;AAAA,QACF;AACA,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,eAAK,SAAS,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;AAAA,QAC9B;AACA,aAAK,QAAQ,KAAK,QAAQ;AAAA,MAC5B;AAIA,UAAI,KAAK,eAAeA,WAAU,qBAAqB;AAErD,aAAK,WAAW,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC;AAAA,MACxC;AACA,UAAI,KAAK,eAAeA,WAAU,iBAAiB;AACjD,aAAK,WAAW;AAAA,UACd,KAAK,aAAa,CAAC;AAAA,UACnB,KAAK,aAAa,CAAC;AAAA,UACnB,KAAK,aAAa,CAAC;AAAA,QACrB,CAAC;AAAA,MACH;AAEA,WAAK,gBAAgB;AAAA,IACvB;AAEA,IAAAC,QAAO,UAAU,cAAc,SAAU,QAAQ;AAC/C,WAAK,KAAK,QAAQ,KAAK,WAAW,KAAK,IAAI,CAAC;AAAA,IAC9C;AACA,IAAAA,QAAO,UAAU,aAAa,SAAU,MAAM;AAC5C,WAAK,KAAK,MAAM,IAAI;AACpB,WAAK,MAAM,KAAK,aAAa,CAAC,IAAID,WAAU,cAAc;AAE1D,WAAK,gBAAgB;AAAA,IACvB;AAEA,IAAAC,QAAO,UAAU,cAAc,SAAU,QAAQ;AAC/C,UAAI,CAAC,KAAK,yBAAyB;AACjC,aAAK,0BAA0B;AAC/B,aAAK,gBAAgB;AAAA,MACvB;AACA,WAAK,KAAK,CAAC,QAAQ,KAAK,WAAW,KAAK,MAAM,MAAM,CAAC;AAAA,IACvD;AACA,IAAAA,QAAO,UAAU,aAAa,SAAU,QAAQ,MAAM;AACpD,WAAK,KAAK,MAAM,IAAI;AAEpB,UACE,KAAK,eAAeD,WAAU,2BAC9B,KAAK,SAAS,WAAW,GACzB;AACA,cAAM,IAAI,MAAM,4BAA4B;AAAA,MAC9C;AAEA,WAAK,YAAY,IAAI;AACrB,UAAI,iBAAiB,SAAS,KAAK;AAEnC,UAAI,iBAAiB,GAAG;AACtB,aAAK,YAAY,cAAc;AAAA,MACjC,OAAO;AACL,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AAEA,IAAAC,QAAO,UAAU,cAAc,SAAU,QAAQ;AAC/C,WAAK,KAAK,QAAQ,KAAK,WAAW,KAAK,IAAI,CAAC;AAAA,IAC9C;AACA,IAAAA,QAAO,UAAU,aAAa,SAAU,MAAM;AAC5C,WAAK,KAAK,MAAM,IAAI;AAEpB,WAAK,WAAW;AAChB,WAAK,gBAAgB;AAErB,UAAI,KAAK,UAAU;AACjB,aAAK,SAAS;AAAA,MAChB;AAAA,IACF;AAAA;AAAA;;;ACjSA;AAAA;AAAA;AAEA,QAAI,iBAAiB;AAErB,QAAI,iBAAiB;AAAA;AAAA,MAEnB,WAAY;AAAA,MAAC;AAAA;AAAA;AAAA,MAIb,SAAU,QAAQ,MAAM,OAAO,QAAQ;AACrC,YAAI,WAAW,KAAK,QAAQ;AAC1B,gBAAM,IAAI,MAAM,iBAAiB;AAAA,QACnC;AAEA,YAAI,QAAQ,KAAK,MAAM;AACvB,eAAO,KAAK,IAAI;AAChB,eAAO,QAAQ,CAAC,IAAI;AACpB,eAAO,QAAQ,CAAC,IAAI;AACpB,eAAO,QAAQ,CAAC,IAAI;AAAA,MACtB;AAAA;AAAA;AAAA,MAIA,SAAU,QAAQ,MAAM,OAAO,QAAQ;AACrC,YAAI,SAAS,KAAK,KAAK,QAAQ;AAC7B,gBAAM,IAAI,MAAM,iBAAiB;AAAA,QACnC;AAEA,YAAI,QAAQ,KAAK,MAAM;AACvB,eAAO,KAAK,IAAI;AAChB,eAAO,QAAQ,CAAC,IAAI;AACpB,eAAO,QAAQ,CAAC,IAAI;AACpB,eAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC;AAAA,MACrC;AAAA;AAAA;AAAA,MAIA,SAAU,QAAQ,MAAM,OAAO,QAAQ;AACrC,YAAI,SAAS,KAAK,KAAK,QAAQ;AAC7B,gBAAM,IAAI,MAAM,iBAAiB;AAAA,QACnC;AAEA,eAAO,KAAK,IAAI,KAAK,MAAM;AAC3B,eAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC;AACnC,eAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC;AACnC,eAAO,QAAQ,CAAC,IAAI;AAAA,MACtB;AAAA;AAAA;AAAA,MAIA,SAAU,QAAQ,MAAM,OAAO,QAAQ;AACrC,YAAI,SAAS,KAAK,KAAK,QAAQ;AAC7B,gBAAM,IAAI,MAAM,iBAAiB;AAAA,QACnC;AAEA,eAAO,KAAK,IAAI,KAAK,MAAM;AAC3B,eAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC;AACnC,eAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC;AACnC,eAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC;AAAA,MACrC;AAAA,IACF;AAEA,QAAI,uBAAuB;AAAA;AAAA,MAEzB,WAAY;AAAA,MAAC;AAAA;AAAA;AAAA,MAIb,SAAU,QAAQ,WAAW,OAAO,QAAQ;AAC1C,YAAI,QAAQ,UAAU,CAAC;AACvB,eAAO,KAAK,IAAI;AAChB,eAAO,QAAQ,CAAC,IAAI;AACpB,eAAO,QAAQ,CAAC,IAAI;AACpB,eAAO,QAAQ,CAAC,IAAI;AAAA,MACtB;AAAA;AAAA;AAAA,MAIA,SAAU,QAAQ,WAAW,OAAO;AAClC,YAAI,QAAQ,UAAU,CAAC;AACvB,eAAO,KAAK,IAAI;AAChB,eAAO,QAAQ,CAAC,IAAI;AACpB,eAAO,QAAQ,CAAC,IAAI;AACpB,eAAO,QAAQ,CAAC,IAAI,UAAU,CAAC;AAAA,MACjC;AAAA;AAAA;AAAA,MAIA,SAAU,QAAQ,WAAW,OAAO,QAAQ;AAC1C,eAAO,KAAK,IAAI,UAAU,CAAC;AAC3B,eAAO,QAAQ,CAAC,IAAI,UAAU,CAAC;AAC/B,eAAO,QAAQ,CAAC,IAAI,UAAU,CAAC;AAC/B,eAAO,QAAQ,CAAC,IAAI;AAAA,MACtB;AAAA;AAAA;AAAA,MAIA,SAAU,QAAQ,WAAW,OAAO;AAClC,eAAO,KAAK,IAAI,UAAU,CAAC;AAC3B,eAAO,QAAQ,CAAC,IAAI,UAAU,CAAC;AAC/B,eAAO,QAAQ,CAAC,IAAI,UAAU,CAAC;AAC/B,eAAO,QAAQ,CAAC,IAAI,UAAU,CAAC;AAAA,MACjC;AAAA,IACF;AAEA,aAAS,aAAa,MAAM,OAAO;AACjC,UAAI,WAAW,CAAC;AAChB,UAAI,IAAI;AAER,eAAS,QAAQ;AACf,YAAI,MAAM,KAAK,QAAQ;AACrB,gBAAM,IAAI,MAAM,iBAAiB;AAAA,QACnC;AACA,YAAI,OAAO,KAAK,CAAC;AACjB;AACA,YAAI,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO;AACrD,gBAAQ,OAAO;AAAA,UACb;AACE,kBAAM,IAAI,MAAM,oBAAoB;AAAA,UACtC,KAAK;AACH,oBAAQ,KAAK,CAAC;AACd;AACA,qBAAS,MAAM,QAAQ,KAAK,KAAK;AACjC;AAAA,UACF,KAAK;AACH,oBAAQ,OAAO;AACf,oBAAQ,QAAQ;AAChB,qBAAS,KAAK,OAAO,KAAK;AAC1B;AAAA,UACF,KAAK;AACH,oBAAQ,OAAO;AACf,oBAAS,QAAQ,IAAK;AACtB,oBAAS,QAAQ,IAAK;AACtB,oBAAS,QAAQ,IAAK;AACtB,qBAAS,KAAK,OAAO,OAAO,OAAO,KAAK;AACxC;AAAA,UACF,KAAK;AACH,oBAAQ,OAAO;AACf,oBAAS,QAAQ,IAAK;AACtB,oBAAS,QAAQ,IAAK;AACtB,oBAAS,QAAQ,IAAK;AACtB,oBAAS,QAAQ,IAAK;AACtB,oBAAS,QAAQ,IAAK;AACtB,oBAAS,QAAQ,IAAK;AACtB,oBAAS,QAAQ,IAAK;AACtB,qBAAS,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AACpE;AAAA,QACJ;AAAA,MACF;AAEA,aAAO;AAAA,QACL,KAAK,SAAU,OAAO;AACpB,iBAAO,SAAS,SAAS,OAAO;AAC9B,kBAAM;AAAA,UACR;AACA,cAAI,WAAW,SAAS,MAAM,GAAG,KAAK;AACtC,qBAAW,SAAS,MAAM,KAAK;AAC/B,iBAAO;AAAA,QACT;AAAA,QACA,gBAAgB,WAAY;AAC1B,mBAAS,SAAS;AAAA,QACpB;AAAA,QACA,KAAK,WAAY;AACf,cAAI,MAAM,KAAK,QAAQ;AACrB,kBAAM,IAAI,MAAM,kBAAkB;AAAA,UACpC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,aAAS,aAAa,OAAO,QAAQ,UAAU,KAAK,MAAM,QAAQ;AAEhE,UAAI,aAAa,MAAM;AACvB,UAAI,cAAc,MAAM;AACxB,UAAI,YAAY,MAAM;AACtB,eAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,iBAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,cAAI,QAAQ,SAAS,GAAG,GAAG,SAAS;AACpC,yBAAe,GAAG,EAAE,QAAQ,MAAM,OAAO,MAAM;AAC/C,oBAAU;AAAA,QACZ;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,aAAS,kBAAkB,OAAO,QAAQ,UAAU,KAAK,MAAM,QAAQ;AAErE,UAAI,aAAa,MAAM;AACvB,UAAI,cAAc,MAAM;AACxB,UAAI,YAAY,MAAM;AACtB,eAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,iBAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,cAAI,YAAY,KAAK,IAAI,GAAG;AAC5B,cAAI,QAAQ,SAAS,GAAG,GAAG,SAAS;AACpC,+BAAqB,GAAG,EAAE,QAAQ,WAAW,OAAO,MAAM;AAAA,QAC5D;AACA,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAEA,YAAQ,eAAe,SAAU,MAAM,YAAY;AACjD,UAAI,QAAQ,WAAW;AACvB,UAAI,SAAS,WAAW;AACxB,UAAI,QAAQ,WAAW;AACvB,UAAI,MAAM,WAAW;AACrB,UAAI,YAAY,WAAW;AAC3B,UAAI;AAEJ,UAAI,UAAU,GAAG;AACf,eAAO,aAAa,MAAM,KAAK;AAAA,MACjC;AACA,UAAI;AACJ,UAAI,SAAS,GAAG;AACd,iBAAS,OAAO,MAAM,QAAQ,SAAS,CAAC;AAAA,MAC1C,OAAO;AACL,iBAAS,IAAI,YAAY,QAAQ,SAAS,CAAC;AAAA,MAC7C;AACA,UAAI,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI;AAClC,UAAI,SAAS;AACb,UAAI;AACJ,UAAI;AAEJ,UAAI,WAAW;AACb,iBAAS,eAAe,eAAe,OAAO,MAAM;AACpD,mBAAW,eAAe,qBAAqB,OAAO,MAAM;AAAA,MAC9D,OAAO;AACL,YAAI,qBAAqB;AACzB,mBAAW,WAAY;AACrB,cAAI,WAAW;AACf,gCAAsB;AACtB,iBAAO;AAAA,QACT;AACA,iBAAS,CAAC,EAAE,OAAc,OAAe,CAAC;AAAA,MAC5C;AAEA,eAAS,aAAa,GAAG,aAAa,OAAO,QAAQ,cAAc;AACjE,YAAI,UAAU,GAAG;AACf,mBAAS;AAAA,YACP,OAAO,UAAU;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF,OAAO;AACL;AAAA,YACE,OAAO,UAAU;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,UAAI,UAAU,GAAG;AACf,YAAI,WAAW,KAAK,QAAQ;AAC1B,gBAAM,IAAI,MAAM,kBAAkB;AAAA,QACpC;AAAA,MACF,OAAO;AACL,aAAK,IAAI;AAAA,MACX;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AC1QA;AAAA;AAAA;AAEA,aAAS,UAAU,QAAQ,SAAS,OAAO,QAAQ,SAAS;AAC1D,UAAI,QAAQ;AAEZ,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,iBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,cAAI,QAAQ,QAAQ,OAAO,KAAK,CAAC;AAEjC,cAAI,CAAC,OAAO;AACV,kBAAM,IAAI,MAAM,WAAW,OAAO,KAAK,IAAI,iBAAiB;AAAA,UAC9D;AAEA,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,oBAAQ,QAAQ,CAAC,IAAI,MAAM,CAAC;AAAA,UAC9B;AACA,mBAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,aAAS,wBAAwB,QAAQ,SAAS,OAAO,QAAQ,YAAY;AAC3E,UAAI,QAAQ;AACZ,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,iBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,cAAI,YAAY;AAEhB,cAAI,WAAW,WAAW,GAAG;AAC3B,gBAAI,WAAW,CAAC,MAAM,OAAO,KAAK,GAAG;AACnC,0BAAY;AAAA,YACd;AAAA,UACF,WACE,WAAW,CAAC,MAAM,OAAO,KAAK,KAC9B,WAAW,CAAC,MAAM,OAAO,QAAQ,CAAC,KAClC,WAAW,CAAC,MAAM,OAAO,QAAQ,CAAC,GAClC;AACA,wBAAY;AAAA,UACd;AACA,cAAI,WAAW;AACb,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,sBAAQ,QAAQ,CAAC,IAAI;AAAA,YACvB;AAAA,UACF;AACA,mBAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,aAAS,WAAW,QAAQ,SAAS,OAAO,QAAQ,OAAO;AACzD,UAAI,eAAe;AACnB,UAAI,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI;AACvC,UAAI,QAAQ;AAEZ,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,iBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,oBAAQ,QAAQ,CAAC,IAAI,KAAK;AAAA,cACvB,OAAO,QAAQ,CAAC,IAAI,eAAgB,cAAc;AAAA,YACrD;AAAA,UACF;AACA,mBAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,WAAO,UAAU,SAAU,QAAQ,WAAW,cAAc,OAAO;AACjE,UAAI,QAAQ,UAAU;AACtB,UAAI,QAAQ,UAAU;AACtB,UAAI,SAAS,UAAU;AACvB,UAAI,YAAY,UAAU;AAC1B,UAAI,aAAa,UAAU;AAC3B,UAAI,UAAU,UAAU;AAExB,UAAI,UAAU;AAEd,UAAI,cAAc,GAAG;AAEnB,kBAAU,QAAQ,SAAS,OAAO,QAAQ,OAAO;AAAA,MACnD,OAAO;AACL,YAAI,YAAY;AACd,kCAAwB,QAAQ,SAAS,OAAO,QAAQ,UAAU;AAAA,QACpE;AAEA,YAAI,UAAU,KAAK,CAAC,aAAa;AAE/B,cAAI,UAAU,IAAI;AAChB,sBAAU,OAAO,MAAM,QAAQ,SAAS,CAAC;AAAA,UAC3C;AACA,qBAAW,QAAQ,SAAS,OAAO,QAAQ,KAAK;AAAA,QAClD;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA;AAAA;;;AC5FA;AAAA;AAAA;AAEA,QAAIE,QAAO,UAAQ,MAAM;AACzB,QAAIC,QAAO,UAAQ,MAAM;AACzB,QAAI,cAAc;AAClB,QAAI,cAAc;AAClB,QAAIC,UAAS;AACb,QAAI,YAAY;AAChB,QAAI,mBAAmB;AAEvB,QAAI,cAAe,OAAO,UAAU,SAAU,SAAS;AACrD,kBAAY,KAAK,IAAI;AAErB,WAAK,UAAU,IAAIA,QAAO,SAAS;AAAA,QACjC,MAAM,KAAK,KAAK,KAAK,IAAI;AAAA,QACzB,OAAO,KAAK,aAAa,KAAK,IAAI;AAAA,QAClC,UAAU,KAAK,gBAAgB,KAAK,IAAI;AAAA,QACxC,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO;AAAA,QACnC,SAAS,KAAK,eAAe,KAAK,IAAI;AAAA,QACtC,YAAY,KAAK,kBAAkB,KAAK,IAAI;AAAA,QAC5C,UAAU,KAAK,UAAU,KAAK,IAAI;AAAA,QAClC,aAAa,KAAK,aAAa,KAAK,IAAI;AAAA,QACxC,oBAAoB,KAAK,oBAAoB,KAAK,IAAI;AAAA,QACtD,iBAAiB,KAAK,iBAAiB,KAAK,IAAI;AAAA,MAClD,CAAC;AACD,WAAK,WAAW;AAChB,WAAK,WAAW;AAEhB,WAAK,QAAQ,MAAM;AAAA,IACrB;AACA,IAAAF,MAAK,SAAS,aAAa,WAAW;AAEtC,gBAAY,UAAU,eAAe,SAAUG,MAAK;AAClD,WAAK,KAAK,SAASA,IAAG;AAEtB,WAAK,WAAW;AAEhB,WAAK,QAAQ;AAEb,UAAI,KAAK,YAAY,KAAK,SAAS,SAAS;AAC1C,aAAK,SAAS,QAAQ;AAAA,MACxB;AAEA,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ,QAAQ;AAIrB,aAAK,QAAQ,GAAG,SAAS,WAAY;AAAA,QAAC,CAAC;AAAA,MACzC;AAEA,WAAK,SAAS;AAAA,IAChB;AAEA,gBAAY,UAAU,eAAe,SAAU,MAAM;AACnD,UAAI,CAAC,KAAK,UAAU;AAClB,YAAI,KAAK,YAAY,WAAW;AAC9B,eAAK,WAAWF,MAAK,cAAc;AAEnC,eAAK,SAAS,GAAG,SAAS,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACvD,eAAK,QAAQ,GAAG,YAAY,KAAK,UAAU,KAAK,IAAI,CAAC;AAErD,eAAK,SAAS,KAAK,KAAK,OAAO;AAAA,QACjC,OAAO;AACL,cAAI,WACA,KAAK,YAAY,QACjB,KAAK,YAAY,MACjB,KAAK,YAAY,QACjB,KACA,KACF;AACF,cAAI,YAAY,UAAU,KAAK,YAAY;AAC3C,cAAI,YAAY,KAAK,IAAI,WAAWA,MAAK,WAAW;AAEpD,eAAK,WAAWA,MAAK,cAAc,EAAE,UAAqB,CAAC;AAC3D,cAAI,gBAAgB;AAEpB,cAAI,YAAY,KAAK,KAAK,KAAK,MAAM,OAAO;AAC5C,eAAK,SAAS,GAAG,SAAS,SAAUE,MAAK;AACvC,gBAAI,CAAC,eAAe;AAClB;AAAA,YACF;AAEA,sBAAUA,IAAG;AAAA,UACf,CAAC;AACD,eAAK,QAAQ,GAAG,YAAY,KAAK,UAAU,KAAK,IAAI,CAAC;AAErD,cAAI,cAAc,KAAK,QAAQ,MAAM,KAAK,KAAK,OAAO;AACtD,eAAK,SAAS,GAAG,QAAQ,SAAU,OAAO;AACxC,gBAAI,CAAC,eAAe;AAClB;AAAA,YACF;AAEA,gBAAI,MAAM,SAAS,eAAe;AAChC,sBAAQ,MAAM,MAAM,GAAG,aAAa;AAAA,YACtC;AAEA,6BAAiB,MAAM;AAEvB,wBAAY,KAAK;AAAA,UACnB,CAAC;AAED,eAAK,SAAS,GAAG,OAAO,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,CAAC;AAAA,QAC7D;AAAA,MACF;AACA,WAAK,SAAS,MAAM,IAAI;AAAA,IAC1B;AAEA,gBAAY,UAAU,kBAAkB,SAAU,UAAU;AAC1D,WAAK,YAAY;AACjB,WAAK,cAAc,OAAO,OAAO,QAAQ;AAEzC,WAAK,UAAU,IAAI,YAAY,KAAK,WAAW;AAAA,IACjD;AAEA,gBAAY,UAAU,oBAAoB,SAAU,YAAY;AAC9D,WAAK,YAAY,aAAa;AAAA,IAChC;AAEA,gBAAY,UAAU,iBAAiB,SAAU,SAAS;AACxD,WAAK,YAAY,UAAU;AAAA,IAC7B;AAEA,gBAAY,UAAU,sBAAsB,WAAY;AACtD,WAAK,UAAU,QAAQ;AAAA,IACzB;AAEA,gBAAY,UAAU,mBAAmB,WAAY;AAGnD,WAAK,KAAK,YAAY,KAAK,SAAS;AAAA,IACtC;AAEA,gBAAY,UAAU,YAAY,WAAY;AAC5C,UAAI,KAAK,QAAQ;AACf;AAAA,MACF;AAEA,UAAI,CAAC,KAAK,UAAU;AAClB,aAAK,KAAK,SAAS,kBAAkB;AAAA,MACvC,OAAO;AAEL,aAAK,SAAS,IAAI;AAAA,MACpB;AAAA,IACF;AAEA,gBAAY,UAAU,YAAY,SAAU,cAAc;AACxD,UAAI,KAAK,QAAQ;AACf;AAAA,MACF;AAEA,UAAI;AAEJ,UAAI;AACF,YAAI,aAAa,UAAU,aAAa,cAAc,KAAK,WAAW;AAEtE,+BAAuB;AAAA,UACrB;AAAA,UACA,KAAK;AAAA,UACL,KAAK,SAAS;AAAA,QAChB;AACA,qBAAa;AAAA,MACf,SAAS,IAAI;AACX,aAAK,aAAa,EAAE;AACpB;AAAA,MACF;AAEA,WAAK,KAAK,UAAU,oBAAoB;AAAA,IAC1C;AAAA;AAAA;;;ACxKA;AAAA;AAAA;AAEA,QAAIC,aAAY;AAEhB,WAAO,UAAU,SAAU,QAAQ,OAAO,QAAQ,SAAS;AACzD,UAAI,cACF,CAACA,WAAU,uBAAuBA,WAAU,eAAe,EAAE;AAAA,QAC3D,QAAQ;AAAA,MACV,MAAM;AACR,UAAI,QAAQ,cAAc,QAAQ,gBAAgB;AAChD,YAAI,aAAa,WAAY;AAC3B,cAAI,SAAS,IAAI,YAAY,CAAC;AAC9B,cAAI,SAAS,MAAM,EAAE;AAAA,YAAS;AAAA,YAAG;AAAA,YAAK;AAAA;AAAA,UAAuB;AAE7D,iBAAO,IAAI,WAAW,MAAM,EAAE,CAAC,MAAM;AAAA,QACvC,GAAG;AAEH,YAAI,QAAQ,aAAa,KAAM,QAAQ,aAAa,MAAM,WAAY;AACpE,iBAAO;AAAA,QACT;AAAA,MACF;AAGA,UAAI,OAAO,QAAQ,aAAa,KAAK,SAAS,IAAI,YAAY,OAAO,MAAM;AAE3E,UAAI,WAAW;AACf,UAAI,QAAQA,WAAU,qBAAqB,QAAQ,cAAc;AACjE,UAAI,UAAU,KAAK,CAAC,QAAQ,eAAe;AACzC,gBAAQ;AAAA,MACV;AACA,UAAI,SAASA,WAAU,qBAAqB,QAAQ,SAAS;AAC7D,UAAI,QAAQ,aAAa,IAAI;AAC3B,mBAAW;AACX,kBAAU;AAAA,MACZ;AACA,UAAI,UAAU,OAAO,MAAM,QAAQ,SAAS,MAAM;AAElD,UAAI,UAAU;AACd,UAAI,WAAW;AAEf,UAAI,UAAU,QAAQ,WAAW,CAAC;AAClC,UAAI,QAAQ,QAAQ,QAAW;AAC7B,gBAAQ,MAAM;AAAA,MAChB;AACA,UAAI,QAAQ,UAAU,QAAW;AAC/B,gBAAQ,QAAQ;AAAA,MAClB;AACA,UAAI,QAAQ,SAAS,QAAW;AAC9B,gBAAQ,OAAO;AAAA,MACjB;AAEA,eAAS,UAAU;AACjB,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI,QAAQ;AACZ,gBAAQ,QAAQ,gBAAgB;AAAA,UAC9B,KAAKA,WAAU;AACb,oBAAQ,KAAK,UAAU,CAAC;AACxB,kBAAM,KAAK,OAAO;AAClB,oBAAQ,KAAK,UAAU,CAAC;AACxB,mBAAO,KAAK,UAAU,CAAC;AACvB;AAAA,UACF,KAAKA,WAAU;AACb,kBAAM,KAAK,OAAO;AAClB,oBAAQ,KAAK,UAAU,CAAC;AACxB,mBAAO,KAAK,UAAU,CAAC;AACvB;AAAA,UACF,KAAKA,WAAU;AACb,oBAAQ,KAAK,UAAU,CAAC;AACxB,kBAAM,KAAK,OAAO;AAClB,oBAAQ;AACR,mBAAO;AACP;AAAA,UACF,KAAKA,WAAU;AACb,kBAAM,KAAK,OAAO;AAClB,oBAAQ;AACR,mBAAO;AACP;AAAA,UACF;AACE,kBAAM,IAAI;AAAA,cACR,sBACE,QAAQ,iBACR;AAAA,YACJ;AAAA,QACJ;AAEA,YAAI,QAAQ,eAAe;AACzB,cAAI,CAAC,aAAa;AAChB,qBAAS;AACT,kBAAM,KAAK;AAAA,cACT,KAAK,IAAI,KAAK,OAAO,IAAI,SAAS,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC;AAAA,cAC/D;AAAA,YACF;AACA,oBAAQ,KAAK;AAAA,cACX,KAAK,IAAI,KAAK,OAAO,IAAI,SAAS,QAAQ,QAAQ,QAAQ,KAAK,GAAG,CAAC;AAAA,cACnE;AAAA,YACF;AACA,mBAAO,KAAK;AAAA,cACV,KAAK,IAAI,KAAK,OAAO,IAAI,SAAS,QAAQ,OAAO,QAAQ,IAAI,GAAG,CAAC;AAAA,cACjE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,eAAO,EAAE,KAAU,OAAc,MAAY,MAAa;AAAA,MAC5D;AAEA,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,iBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,cAAI,OAAO,QAAQ,MAAM,OAAO;AAEhC,kBAAQ,QAAQ,WAAW;AAAA,YACzB,KAAKA,WAAU;AAAA,YACf,KAAKA,WAAU;AACb,kBAAI,QAAQ,aAAa,GAAG;AAC1B,wBAAQ,QAAQ,IAAI,KAAK;AACzB,wBAAQ,WAAW,CAAC,IAAI,KAAK;AAC7B,wBAAQ,WAAW,CAAC,IAAI,KAAK;AAC7B,oBAAI,aAAa;AACf,0BAAQ,WAAW,CAAC,IAAI,KAAK;AAAA,gBAC/B;AAAA,cACF,OAAO;AACL,wBAAQ,cAAc,KAAK,KAAK,QAAQ;AACxC,wBAAQ,cAAc,KAAK,OAAO,WAAW,CAAC;AAC9C,wBAAQ,cAAc,KAAK,MAAM,WAAW,CAAC;AAC7C,oBAAI,aAAa;AACf,0BAAQ,cAAc,KAAK,OAAO,WAAW,CAAC;AAAA,gBAChD;AAAA,cACF;AACA;AAAA,YACF,KAAKA,WAAU;AAAA,YACf,KAAKA,WAAU,qBAAqB;AAElC,kBAAI,aAAa,KAAK,MAAM,KAAK,QAAQ,KAAK,QAAQ;AACtD,kBAAI,QAAQ,aAAa,GAAG;AAC1B,wBAAQ,QAAQ,IAAI;AACpB,oBAAI,aAAa;AACf,0BAAQ,WAAW,CAAC,IAAI,KAAK;AAAA,gBAC/B;AAAA,cACF,OAAO;AACL,wBAAQ,cAAc,WAAW,QAAQ;AACzC,oBAAI,aAAa;AACf,0BAAQ,cAAc,KAAK,OAAO,WAAW,CAAC;AAAA,gBAChD;AAAA,cACF;AACA;AAAA,YACF;AAAA,YACA;AACE,oBAAM,IAAI,MAAM,6BAA6B,QAAQ,SAAS;AAAA,UAClE;AAEA,qBAAW;AACX,sBAAY;AAAA,QACd;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AC7JA;AAAA;AAAA;AAEA,QAAI,iBAAiB;AAErB,aAAS,WAAW,QAAQ,OAAO,WAAW,SAAS,QAAQ;AAC7D,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,gBAAQ,SAAS,CAAC,IAAI,OAAO,QAAQ,CAAC;AAAA,MACxC;AAAA,IACF;AAEA,aAAS,cAAc,QAAQ,OAAO,WAAW;AAC/C,UAAI,MAAM;AACV,UAAI,SAAS,QAAQ;AAErB,eAAS,IAAI,OAAO,IAAI,QAAQ,KAAK;AACnC,eAAO,KAAK,IAAI,OAAO,CAAC,CAAC;AAAA,MAC3B;AACA,aAAO;AAAA,IACT;AAEA,aAAS,UAAU,QAAQ,OAAO,WAAW,SAAS,QAAQ,KAAK;AACjE,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAI,OAAO,KAAK,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI;AAChD,YAAI,MAAM,OAAO,QAAQ,CAAC,IAAI;AAE9B,gBAAQ,SAAS,CAAC,IAAI;AAAA,MACxB;AAAA,IACF;AAEA,aAAS,aAAa,QAAQ,OAAO,WAAW,KAAK;AACnD,UAAI,MAAM;AACV,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAI,OAAO,KAAK,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI;AAChD,YAAI,MAAM,OAAO,QAAQ,CAAC,IAAI;AAE9B,eAAO,KAAK,IAAI,GAAG;AAAA,MACrB;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,SAAS,QAAQ,OAAO,WAAW,SAAS,QAAQ;AAC3D,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAI,KAAK,QAAQ,IAAI,OAAO,QAAQ,IAAI,SAAS,IAAI;AACrD,YAAI,MAAM,OAAO,QAAQ,CAAC,IAAI;AAE9B,gBAAQ,SAAS,CAAC,IAAI;AAAA,MACxB;AAAA,IACF;AAEA,aAAS,YAAY,QAAQ,OAAO,WAAW;AAC7C,UAAI,MAAM;AACV,UAAI,SAAS,QAAQ;AACrB,eAAS,IAAI,OAAO,IAAI,QAAQ,KAAK;AACnC,YAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,SAAS,IAAI;AAC7C,YAAI,MAAM,OAAO,CAAC,IAAI;AAEtB,eAAO,KAAK,IAAI,GAAG;AAAA,MACrB;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,UAAU,QAAQ,OAAO,WAAW,SAAS,QAAQ,KAAK;AACjE,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAI,OAAO,KAAK,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI;AAChD,YAAI,KAAK,QAAQ,IAAI,OAAO,QAAQ,IAAI,SAAS,IAAI;AACrD,YAAI,MAAM,OAAO,QAAQ,CAAC,KAAM,OAAO,MAAO;AAE9C,gBAAQ,SAAS,CAAC,IAAI;AAAA,MACxB;AAAA,IACF;AAEA,aAAS,aAAa,QAAQ,OAAO,WAAW,KAAK;AACnD,UAAI,MAAM;AACV,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAI,OAAO,KAAK,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI;AAChD,YAAI,KAAK,QAAQ,IAAI,OAAO,QAAQ,IAAI,SAAS,IAAI;AACrD,YAAI,MAAM,OAAO,QAAQ,CAAC,KAAM,OAAO,MAAO;AAE9C,eAAO,KAAK,IAAI,GAAG;AAAA,MACrB;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,YAAY,QAAQ,OAAO,WAAW,SAAS,QAAQ,KAAK;AACnE,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAI,OAAO,KAAK,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI;AAChD,YAAI,KAAK,QAAQ,IAAI,OAAO,QAAQ,IAAI,SAAS,IAAI;AACrD,YAAI,SACF,QAAQ,KAAK,KAAK,MAAM,OAAO,QAAQ,KAAK,YAAY,IAAI,IAAI;AAClE,YAAI,MAAM,OAAO,QAAQ,CAAC,IAAI,eAAe,MAAM,IAAI,MAAM;AAE7D,gBAAQ,SAAS,CAAC,IAAI;AAAA,MACxB;AAAA,IACF;AAEA,aAAS,eAAe,QAAQ,OAAO,WAAW,KAAK;AACrD,UAAI,MAAM;AACV,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAI,OAAO,KAAK,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI;AAChD,YAAI,KAAK,QAAQ,IAAI,OAAO,QAAQ,IAAI,SAAS,IAAI;AACrD,YAAI,SACF,QAAQ,KAAK,KAAK,MAAM,OAAO,QAAQ,KAAK,YAAY,IAAI,IAAI;AAClE,YAAI,MAAM,OAAO,QAAQ,CAAC,IAAI,eAAe,MAAM,IAAI,MAAM;AAE7D,eAAO,KAAK,IAAI,GAAG;AAAA,MACrB;AAEA,aAAO;AAAA,IACT;AAEA,QAAI,UAAU;AAAA,MACZ,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAEA,QAAI,aAAa;AAAA,MACf,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAEA,WAAO,UAAU,SAAU,QAAQ,OAAO,QAAQ,SAAS,KAAK;AAC9D,UAAI;AACJ,UAAI,EAAE,gBAAgB,YAAY,QAAQ,eAAe,IAAI;AAC3D,sBAAc,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,MAC9B,WAAW,OAAO,QAAQ,eAAe,UAAU;AACjD,sBAAc,CAAC,QAAQ,UAAU;AAAA,MACnC,OAAO;AACL,cAAM,IAAI,MAAM,2BAA2B;AAAA,MAC7C;AAEA,UAAI,QAAQ,aAAa,IAAI;AAC3B,eAAO;AAAA,MACT;AACA,UAAI,YAAY,QAAQ;AACxB,UAAI,SAAS;AACb,UAAI,QAAQ;AACZ,UAAI,UAAU,OAAO,OAAO,YAAY,KAAK,MAAM;AAEnD,UAAI,MAAM,YAAY,CAAC;AAEvB,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,YAAI,YAAY,SAAS,GAAG;AAE1B,cAAI,MAAM;AAEV,mBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,gBAAI,MAAM,WAAW,YAAY,CAAC,CAAC,EAAE,QAAQ,OAAO,WAAW,GAAG;AAClE,gBAAI,MAAM,KAAK;AACb,oBAAM,YAAY,CAAC;AACnB,oBAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,gBAAQ,MAAM,IAAI;AAClB;AACA,gBAAQ,GAAG,EAAE,QAAQ,OAAO,WAAW,SAAS,QAAQ,GAAG;AAC3D,kBAAU;AACV,iBAAS;AAAA,MACX;AACA,aAAO;AAAA,IACT;AAAA;AAAA;;;AC1KA;AAAA;AAAA;AAEA,QAAIC,aAAY;AAChB,QAAI,YAAY;AAChB,QAAI,YAAY;AAChB,QAAIC,UAAS;AACb,QAAIC,QAAO,UAAQ,MAAM;AAEzB,QAAI,SAAU,OAAO,UAAU,SAAU,SAAS;AAChD,WAAK,WAAW;AAEhB,cAAQ,mBAAmB,QAAQ,oBAAoB,KAAK;AAC5D,cAAQ,eACN,QAAQ,gBAAgB,OAAO,QAAQ,eAAe;AACxD,cAAQ,kBACN,QAAQ,mBAAmB,OAAO,QAAQ,kBAAkB;AAC9D,cAAQ,gBACN,QAAQ,iBAAiB,OAAO,QAAQ,gBAAgB;AAC1D,cAAQ,iBAAiB,QAAQ,kBAAkBA,MAAK;AACxD,cAAQ,WAAW,QAAQ,YAAY;AAEvC,cAAQ,YACN,OAAO,QAAQ,cAAc,WACzB,QAAQ,YACRF,WAAU;AAChB,cAAQ,iBACN,OAAO,QAAQ,mBAAmB,WAC9B,QAAQ,iBACRA,WAAU;AAEhB,UACE;AAAA,QACEA,WAAU;AAAA,QACVA,WAAU;AAAA,QACVA,WAAU;AAAA,QACVA,WAAU;AAAA,MACZ,EAAE,QAAQ,QAAQ,SAAS,MAAM,IACjC;AACA,cAAM,IAAI;AAAA,UACR,uBAAuB,QAAQ,YAAY;AAAA,QAC7C;AAAA,MACF;AACA,UACE;AAAA,QACEA,WAAU;AAAA,QACVA,WAAU;AAAA,QACVA,WAAU;AAAA,QACVA,WAAU;AAAA,MACZ,EAAE,QAAQ,QAAQ,cAAc,MAAM,IACtC;AACA,cAAM,IAAI;AAAA,UACR,6BACE,QAAQ,iBACR;AAAA,QACJ;AAAA,MACF;AACA,UAAI,QAAQ,aAAa,KAAK,QAAQ,aAAa,IAAI;AACrD,cAAM,IAAI;AAAA,UACR,sBAAsB,QAAQ,WAAW;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAEA,WAAO,UAAU,oBAAoB,WAAY;AAC/C,aAAO;AAAA,QACL,WAAW,KAAK,SAAS;AAAA,QACzB,OAAO,KAAK,SAAS;AAAA,QACrB,UAAU,KAAK,SAAS;AAAA,MAC1B;AAAA,IACF;AAEA,WAAO,UAAU,gBAAgB,WAAY;AAC3C,aAAO,KAAK,SAAS,eAAe,KAAK,kBAAkB,CAAC;AAAA,IAC9D;AAEA,WAAO,UAAU,aAAa,SAAU,MAAM,OAAO,QAAQ;AAE3D,UAAI,aAAa,UAAU,MAAM,OAAO,QAAQ,KAAK,QAAQ;AAG7D,UAAI,MAAMA,WAAU,qBAAqB,KAAK,SAAS,SAAS;AAChE,UAAI,eAAeC,QAAO,YAAY,OAAO,QAAQ,KAAK,UAAU,GAAG;AACvE,aAAO;AAAA,IACT;AAEA,WAAO,UAAU,aAAa,SAAU,MAAM,MAAM;AAClD,UAAI,MAAM,OAAO,KAAK,SAAS;AAC/B,UAAI,MAAM,OAAO,MAAM,MAAM,EAAE;AAE/B,UAAI,cAAc,KAAK,CAAC;AACxB,UAAI,cAAc,MAAM,CAAC;AAEzB,UAAI,MAAM;AACR,aAAK,KAAK,KAAK,CAAC;AAAA,MAClB;AAEA,UAAI;AAAA,QACF,UAAU,MAAM,IAAI,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC;AAAA,QAC5C,IAAI,SAAS;AAAA,MACf;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU,WAAW,SAAU,OAAO;AAC3C,UAAI,MAAM,OAAO,MAAM,CAAC;AACxB,UAAI,cAAc,KAAK,MAAM,QAAQD,WAAU,cAAc,GAAG,CAAC;AACjE,aAAO,KAAK,WAAWA,WAAU,WAAW,GAAG;AAAA,IACjD;AAEA,WAAO,UAAU,WAAW,SAAU,OAAO,QAAQ;AACnD,UAAI,MAAM,OAAO,MAAM,EAAE;AACzB,UAAI,cAAc,OAAO,CAAC;AAC1B,UAAI,cAAc,QAAQ,CAAC;AAC3B,UAAI,CAAC,IAAI,KAAK,SAAS;AACvB,UAAI,CAAC,IAAI,KAAK,SAAS;AACvB,UAAI,EAAE,IAAI;AACV,UAAI,EAAE,IAAI;AACV,UAAI,EAAE,IAAI;AAEV,aAAO,KAAK,WAAWA,WAAU,WAAW,GAAG;AAAA,IACjD;AAEA,WAAO,UAAU,WAAW,SAAU,MAAM;AAC1C,aAAO,KAAK,WAAWA,WAAU,WAAW,IAAI;AAAA,IAClD;AAEA,WAAO,UAAU,WAAW,WAAY;AACtC,aAAO,KAAK,WAAWA,WAAU,WAAW,IAAI;AAAA,IAClD;AAAA;AAAA;;;AChIA;AAAA;AAAA;AAEA,QAAIG,QAAO,UAAQ,MAAM;AACzB,QAAI,SAAS,UAAQ,QAAQ;AAC7B,QAAIC,aAAY;AAChB,QAAI,SAAS;AAEb,QAAI,cAAe,OAAO,UAAU,SAAU,KAAK;AACjD,aAAO,KAAK,IAAI;AAEhB,UAAI,UAAU,OAAO,CAAC;AAEtB,WAAK,UAAU,IAAI,OAAO,OAAO;AACjC,WAAK,WAAW,KAAK,QAAQ,cAAc;AAE3C,WAAK,WAAW;AAAA,IAClB;AACA,IAAAD,MAAK,SAAS,aAAa,MAAM;AAEjC,gBAAY,UAAU,OAAO,SAAU,MAAM,OAAO,QAAQ,OAAO;AAEjE,WAAK,KAAK,QAAQ,OAAO,KAAKC,WAAU,aAAa,CAAC;AACtD,WAAK,KAAK,QAAQ,KAAK,QAAQ,SAAS,OAAO,MAAM,CAAC;AAEtD,UAAI,OAAO;AACT,aAAK,KAAK,QAAQ,KAAK,QAAQ,SAAS,KAAK,CAAC;AAAA,MAChD;AAEA,UAAI,eAAe,KAAK,QAAQ,WAAW,MAAM,OAAO,MAAM;AAG9D,WAAK,SAAS,GAAG,SAAS,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEvD,WAAK,SAAS;AAAA,QACZ;AAAA,QACA,SAAU,gBAAgB;AACxB,eAAK,KAAK,QAAQ,KAAK,QAAQ,SAAS,cAAc,CAAC;AAAA,QACzD,EAAE,KAAK,IAAI;AAAA,MACb;AAEA,WAAK,SAAS;AAAA,QACZ;AAAA,QACA,WAAY;AACV,eAAK,KAAK,QAAQ,KAAK,QAAQ,SAAS,CAAC;AACzC,eAAK,KAAK,KAAK;AAAA,QACjB,EAAE,KAAK,IAAI;AAAA,MACb;AAEA,WAAK,SAAS,IAAI,YAAY;AAAA,IAChC;AAAA;AAAA;;;ACjDA;AAAA;AAAA;AAEA,QAAIC,UAAS,UAAQ,QAAQ,EAAE;AAC/B,QAAIC,QAAO,UAAQ,MAAM;AACzB,QAAIC,QAAO,UAAQ,MAAM;AAEzB,QAAI,aAAa,UAAQ,QAAQ,EAAE;AAEnC,aAASC,SAAQ,MAAM;AACrB,UAAI,EAAE,gBAAgBA,WAAU;AAC9B,eAAO,IAAIA,SAAQ,IAAI;AAAA,MACzB;AAEA,UAAI,QAAQ,KAAK,YAAYF,MAAK,aAAa;AAC7C,aAAK,YAAYA,MAAK;AAAA,MACxB;AAEA,MAAAA,MAAK,QAAQ,KAAK,MAAM,IAAI;AAG5B,WAAK,UAAU,KAAK,YAAY,SAAY,KAAK,aAAa,KAAK;AACnE,WAAK,UAAU,KAAK,WAAW,KAAK;AAEpC,UAAI,QAAQ,KAAK,aAAa,MAAM;AAClC,aAAK,aAAa,KAAK;AAAA,MACzB;AAAA,IACF;AAEA,aAAS,cAAc,MAAM;AAC3B,aAAO,IAAIE,SAAQ,IAAI;AAAA,IACzB;AAEA,aAAS,OAAO,QAAQ,UAAU;AAChC,UAAI,UAAU;AACZ,gBAAQ,SAAS,QAAQ;AAAA,MAC3B;AAGA,UAAI,CAAC,OAAO,SAAS;AACnB;AAAA,MACF;AAEA,aAAO,QAAQ,MAAM;AACrB,aAAO,UAAU;AAAA,IACnB;AAEA,IAAAA,SAAQ,UAAU,gBAAgB,SAAU,OAAO,WAAW,SAAS;AACrE,UAAI,OAAO,YAAY,YAAY;AACjC,eAAOF,MAAK,QAAQ,cAAc,KAAK,MAAM,OAAO,WAAW,OAAO;AAAA,MACxE;AAEA,UAAIG,QAAO;AAEX,UAAI,gBAAgB,SAAS,MAAM;AACnC,UAAI,iBAAiB,KAAK,aAAa,KAAK;AAC5C,UAAI,gBAAgB,KAAK;AACzB,UAAI,QAAQ;AAEZ,UAAI,UAAU,CAAC;AACf,UAAI,QAAQ;AAEZ,UAAIC;AACJ,WAAK,GAAG,SAAS,SAAUC,MAAK;AAC9B,QAAAD,SAAQC;AAAA,MACV,CAAC;AAED,eAAS,YAAY,cAAc,eAAe;AAChD,YAAIF,MAAK,WAAW;AAClB;AAAA,QACF;AAEA,YAAI,OAAO,iBAAiB;AAC5B,QAAAJ,QAAO,QAAQ,GAAG,yBAAyB;AAE3C,YAAI,OAAO,GAAG;AACZ,cAAI,MAAMI,MAAK,QAAQ,MAAMA,MAAK,SAASA,MAAK,UAAU,IAAI;AAC9D,UAAAA,MAAK,WAAW;AAEhB,cAAI,IAAI,SAAS,eAAe;AAC9B,kBAAM,IAAI,MAAM,GAAG,aAAa;AAAA,UAClC;AAEA,kBAAQ,KAAK,GAAG;AAChB,mBAAS,IAAI;AACb,2BAAiB,IAAI;AAErB,cAAI,kBAAkB,GAAG;AACvB,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,YAAI,kBAAkB,KAAKA,MAAK,WAAWA,MAAK,YAAY;AAC1D,2BAAiBA,MAAK;AACtB,UAAAA,MAAK,UAAU;AACf,UAAAA,MAAK,UAAU,OAAO,YAAYA,MAAK,UAAU;AAAA,QACnD;AAEA,YAAI,kBAAkB,GAAG;AACvB,mBAAS,gBAAgB;AACzB,0BAAgB;AAEhB,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAEA,MAAAJ,QAAO,KAAK,SAAS,qBAAqB;AAC1C,UAAI;AACJ,SAAG;AACD,cAAM,KAAK,QAAQ;AAAA,UACjB;AAAA,UACA;AAAA;AAAA,UACA;AAAA;AAAA,UACA;AAAA;AAAA,UACA,KAAK;AAAA;AAAA,UACL,KAAK;AAAA;AAAA,UACL;AAAA,QACF;AAEA,cAAM,OAAO,KAAK;AAAA,MACpB,SAAS,CAAC,KAAK,aAAa,YAAY,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAEtD,UAAI,KAAK,WAAW;AAClB,cAAMK;AAAA,MACR;AAEA,UAAI,SAAS,YAAY;AACvB,eAAO,IAAI;AACX,cAAM,IAAI;AAAA,UACR,2DACE,WAAW,SAAS,EAAE,IACtB;AAAA,QACJ;AAAA,MACF;AAEA,UAAI,MAAM,OAAO,OAAO,SAAS,KAAK;AACtC,aAAO,IAAI;AAEX,aAAO;AAAA,IACT;AAEA,IAAAH,MAAK,SAASC,UAASF,MAAK,OAAO;AAEnC,aAAS,eAAe,QAAQ,QAAQ;AACtC,UAAI,OAAO,WAAW,UAAU;AAC9B,iBAAS,OAAO,KAAK,MAAM;AAAA,MAC7B;AACA,UAAI,EAAE,kBAAkB,SAAS;AAC/B,cAAM,IAAI,UAAU,wBAAwB;AAAA,MAC9C;AAEA,UAAI,YAAY,OAAO;AACvB,UAAI,aAAa,MAAM;AACrB,oBAAYA,MAAK;AAAA,MACnB;AAEA,aAAO,OAAO,cAAc,QAAQ,SAAS;AAAA,IAC/C;AAEA,aAAS,YAAY,QAAQ,MAAM;AACjC,aAAO,eAAe,IAAIE,SAAQ,IAAI,GAAG,MAAM;AAAA,IACjD;AAEA,WAAO,UAAU,UAAU;AAC3B,YAAQ,UAAUA;AAClB,YAAQ,gBAAgB;AACxB,YAAQ,cAAc;AAAA;AAAA;;;ACvKtB;AAAA;AAAA;AAEA,QAAI,aAAc,OAAO,UAAU,SAAU,QAAQ;AACnD,WAAK,UAAU;AACf,WAAK,SAAS,CAAC;AAAA,IACjB;AAEA,eAAW,UAAU,OAAO,SAAU,QAAQ,UAAU;AACtD,WAAK,OAAO,KAAK;AAAA,QACf,QAAQ,KAAK,IAAI,MAAM;AAAA;AAAA,QACvB,WAAW,SAAS;AAAA,QACpB,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAEA,eAAW,UAAU,UAAU,WAAY;AAEzC,aAAO,KAAK,OAAO,SAAS,KAAK,KAAK,QAAQ,QAAQ;AACpD,YAAI,OAAO,KAAK,OAAO,CAAC;AAExB,YACE,KAAK,QAAQ,WACZ,KAAK,QAAQ,UAAU,KAAK,UAAU,KAAK,YAC5C;AAEA,eAAK,OAAO,MAAM;AAElB,cAAI,MAAM,KAAK;AAEf,eAAK,UAAU,IAAI,MAAM,KAAK,MAAM;AAEpC,eAAK,KAAK,KAAK,MAAM,IAAI,MAAM,GAAG,KAAK,MAAM,CAAC;AAAA,QAChD,OAAO;AACL;AAAA,QACF;AAAA,MACF;AAEA,UAAI,KAAK,OAAO,SAAS,GAAG;AAC1B,cAAM,IAAI,MAAM,wDAAwD;AAAA,MAC1E;AAEA,UAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,cAAM,IAAI,MAAM,uCAAuC;AAAA,MACzD;AAAA,IACF;AAAA;AAAA;;;AC5CA;AAAA;AAAA;AAEA,QAAI,aAAa;AACjB,QAAI,SAAS;AAEb,YAAQ,UAAU,SAAU,UAAU,YAAY;AAChD,UAAI,aAAa,CAAC;AAClB,UAAI,SAAS,IAAI,WAAW,QAAQ;AACpC,UAAII,UAAS,IAAI,OAAO,YAAY;AAAA,QAClC,MAAM,OAAO,KAAK,KAAK,MAAM;AAAA,QAC7B,OAAO,SAAU,YAAY;AAC3B,qBAAW,KAAK,UAAU;AAAA,QAC5B;AAAA,QACA,UAAU,WAAY;AAAA,QAAC;AAAA,MACzB,CAAC;AAED,MAAAA,QAAO,MAAM;AACb,aAAO,QAAQ;AAEf,aAAO,OAAO,OAAO,UAAU;AAAA,IACjC;AAAA;AAAA;;;ACpBA;AAAA;AAAA;AAEA,QAAI,cAAc;AAClB,QAAIC,QAAO,UAAQ,MAAM;AACzB,QAAI,cAAc;AAClB,QAAI,CAACA,MAAK,aAAa;AACrB,oBAAc;AAAA,IAChB;AACA,QAAI,aAAa;AACjB,QAAI,aAAa;AACjB,QAAIC,UAAS;AACb,QAAI,YAAY;AAChB,QAAI,mBAAmB;AAEvB,WAAO,UAAU,SAAU,QAAQ,SAAS;AAC1C,UAAI,CAAC,aAAa;AAChB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,UAAIC;AACJ,eAAS,YAAY,OAAO;AAC1B,QAAAA,OAAM;AAAA,MACR;AAEA,UAAI;AACJ,eAAS,eAAe,YAAY;AAClC,mBAAW;AAAA,MACb;AAEA,eAAS,iBAAiB,YAAY;AACpC,iBAAS,aAAa;AAAA,MACxB;AAEA,eAAS,cAAc,SAAS;AAC9B,iBAAS,UAAU;AAAA,MACrB;AAEA,eAAS,2BAA2B;AAClC,iBAAS,QAAQ;AAAA,MACnB;AAEA,UAAI;AACJ,eAAS,YAAY,SAAS;AAC5B,gBAAQ;AAAA,MACV;AAEA,UAAI,kBAAkB,CAAC;AACvB,eAAS,kBAAkBC,eAAc;AACvC,wBAAgB,KAAKA,aAAY;AAAA,MACnC;AAEA,UAAI,SAAS,IAAI,WAAW,MAAM;AAElC,UAAI,SAAS,IAAIF,QAAO,SAAS;AAAA,QAC/B,MAAM,OAAO,KAAK,KAAK,MAAM;AAAA,QAC7B,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,oBAAoB;AAAA,MACtB,CAAC;AAED,aAAO,MAAM;AACb,aAAO,QAAQ;AAEf,UAAIC,MAAK;AACP,cAAMA;AAAA,MACR;AAGA,UAAI,cAAc,OAAO,OAAO,eAAe;AAC/C,sBAAgB,SAAS;AAEzB,UAAI;AACJ,UAAI,SAAS,WAAW;AACtB,uBAAeF,MAAK,YAAY,WAAW;AAAA,MAC7C,OAAO;AACL,YAAI,WACA,SAAS,QAAQ,SAAS,MAAM,SAAS,QAAQ,KAAM,KAAK;AAChE,YAAI,YAAY,UAAU,SAAS;AACnC,uBAAe,YAAY,aAAa;AAAA,UACtC,WAAW;AAAA,UACX,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AACA,oBAAc;AAEd,UAAI,CAAC,gBAAgB,CAAC,aAAa,QAAQ;AACzC,cAAM,IAAI,MAAM,yCAAyC;AAAA,MAC3D;AAEA,UAAI,iBAAiB,WAAW,QAAQ,cAAc,QAAQ;AAC9D,oBAAc;AAEd,UAAI,aAAa,UAAU,aAAa,gBAAgB,QAAQ;AAChE,uBAAiB;AAEjB,UAAI,uBAAuB;AAAA,QACzB;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAEA,eAAS,OAAO;AAChB,eAAS,QAAQ,SAAS;AAE1B,aAAO;AAAA,IACT;AAAA;AAAA;;;AC/GA;AAAA;AAAA;AAEA,QAAI,cAAc;AAClB,QAAII,QAAO,UAAQ,MAAM;AACzB,QAAI,CAACA,MAAK,aAAa;AACrB,oBAAc;AAAA,IAChB;AACA,QAAIC,aAAY;AAChB,QAAI,SAAS;AAEb,WAAO,UAAU,SAAU,UAAU,KAAK;AACxC,UAAI,CAAC,aAAa;AAChB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,UAAI,UAAU,OAAO,CAAC;AAEtB,UAAI,SAAS,IAAI,OAAO,OAAO;AAE/B,UAAI,SAAS,CAAC;AAGd,aAAO,KAAK,OAAO,KAAKA,WAAU,aAAa,CAAC;AAGhD,aAAO,KAAK,OAAO,SAAS,SAAS,OAAO,SAAS,MAAM,CAAC;AAE5D,UAAI,SAAS,OAAO;AAClB,eAAO,KAAK,OAAO,SAAS,SAAS,KAAK,CAAC;AAAA,MAC7C;AAEA,UAAI,eAAe,OAAO;AAAA,QACxB,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAGA,UAAI,iBAAiBD,MAAK;AAAA,QACxB;AAAA,QACA,OAAO,kBAAkB;AAAA,MAC3B;AACA,qBAAe;AAEf,UAAI,CAAC,kBAAkB,CAAC,eAAe,QAAQ;AAC7C,cAAM,IAAI,MAAM,4CAA4C;AAAA,MAC9D;AACA,aAAO,KAAK,OAAO,SAAS,cAAc,CAAC;AAG3C,aAAO,KAAK,OAAO,SAAS,CAAC;AAE7B,aAAO,OAAO,OAAO,MAAM;AAAA,IAC7B;AAAA;AAAA;;;ACvDA;AAAA;AAAA;AAEA,QAAIE,SAAQ;AACZ,QAAI,OAAO;AAEX,YAAQ,OAAO,SAAU,QAAQ,SAAS;AACxC,aAAOA,OAAM,QAAQ,WAAW,CAAC,CAAC;AAAA,IACpC;AAEA,YAAQ,QAAQ,SAAU,KAAK,SAAS;AACtC,aAAO,KAAK,KAAK,OAAO;AAAA,IAC1B;AAAA;AAAA;;;ACXA;AAAA;AAAA;AAEA,QAAIC,QAAO,UAAQ,MAAM;AACzB,QAAI,SAAS,UAAQ,QAAQ;AAC7B,QAAIC,UAAS;AACb,QAAI,SAAS;AACb,QAAI,UAAU;AAEd,QAAIC,OAAO,QAAQ,MAAM,SAAU,SAAS;AAC1C,aAAO,KAAK,IAAI;AAEhB,gBAAU,WAAW,CAAC;AAGtB,WAAK,QAAQ,QAAQ,QAAQ;AAC7B,WAAK,SAAS,QAAQ,SAAS;AAE/B,WAAK,OACH,KAAK,QAAQ,KAAK,KAAK,SAAS,IAC5B,OAAO,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IACzC;AAEN,UAAI,QAAQ,QAAQ,KAAK,MAAM;AAC7B,aAAK,KAAK,KAAK,CAAC;AAAA,MAClB;AAEA,WAAK,QAAQ;AACb,WAAK,WAAW,KAAK,WAAW;AAEhC,WAAK,UAAU,IAAID,QAAO,OAAO;AAEjC,WAAK,QAAQ,GAAG,SAAS,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACtD,WAAK,QAAQ,GAAG,SAAS,KAAK,aAAa,KAAK,IAAI,CAAC;AACrD,WAAK,QAAQ,GAAG,YAAY,KAAK,UAAU,KAAK,IAAI,CAAC;AACrD,WAAK,QAAQ,GAAG,SAAS,KAAK,OAAO,KAAK,IAAI,CAAC;AAC/C,WAAK,QAAQ;AAAA,QACX;AAAA,QACA,SAAU,MAAM;AACd,eAAK,OAAO;AACZ,eAAK,KAAK,UAAU,IAAI;AAAA,QAC1B,EAAE,KAAK,IAAI;AAAA,MACb;AAEA,WAAK,UAAU,IAAI,OAAO,OAAO;AACjC,WAAK,QAAQ,GAAG,QAAQ,KAAK,KAAK,KAAK,MAAM,MAAM,CAAC;AACpD,WAAK,QAAQ,GAAG,OAAO,KAAK,KAAK,KAAK,MAAM,KAAK,CAAC;AAClD,WAAK,QAAQ,GAAG,SAAS,KAAK,aAAa,KAAK,IAAI,CAAC;AACrD,WAAK,QAAQ,GAAG,SAAS,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAAA,IACxD;AACA,IAAAD,MAAK,SAASE,MAAK,MAAM;AAEzB,IAAAA,KAAI,OAAO;AAEX,IAAAA,KAAI,UAAU,OAAO,WAAY;AAC/B,UAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,KAAK,QAAQ;AACnC,aAAK,KAAK,SAAS,kBAAkB;AACrC,eAAO;AAAA,MACT;AAEA,cAAQ;AAAA,QACN,WAAY;AACV,eAAK,QAAQ,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,KAAK,KAAK;AAAA,QAClE,EAAE,KAAK,IAAI;AAAA,MACb;AAEA,aAAO;AAAA,IACT;AAEA,IAAAA,KAAI,UAAU,QAAQ,SAAU,MAAM,UAAU;AAC9C,UAAI,UAAU;AACZ,YAAI,UAAU;AAEd,mBAAW,SAAU,YAAY;AAC/B,eAAK,eAAe,SAAS,OAAO;AAEpC,eAAK,OAAO;AACZ,mBAAS,MAAM,IAAI;AAAA,QACrB,EAAE,KAAK,IAAI;AAEX,kBAAU,SAAUC,MAAK;AACvB,eAAK,eAAe,UAAU,QAAQ;AAEtC,mBAASA,MAAK,IAAI;AAAA,QACpB,EAAE,KAAK,IAAI;AAEX,aAAK,KAAK,UAAU,QAAQ;AAC5B,aAAK,KAAK,SAAS,OAAO;AAAA,MAC5B;AAEA,WAAK,IAAI,IAAI;AACb,aAAO;AAAA,IACT;AAEA,IAAAD,KAAI,UAAU,QAAQ,SAAU,MAAM;AACpC,WAAK,QAAQ,MAAM,IAAI;AACvB,aAAO;AAAA,IACT;AAEA,IAAAA,KAAI,UAAU,MAAM,SAAU,MAAM;AAClC,WAAK,QAAQ,IAAI,IAAI;AAAA,IACvB;AAEA,IAAAA,KAAI,UAAU,YAAY,SAAU,UAAU;AAC5C,WAAK,QAAQ,SAAS;AACtB,WAAK,SAAS,SAAS;AAEvB,WAAK,KAAK,YAAY,QAAQ;AAAA,IAChC;AAEA,IAAAA,KAAI,UAAU,SAAS,SAAU,OAAO;AACtC,WAAK,QAAQ;AAAA,IACf;AAEA,IAAAA,KAAI,UAAU,eAAe,WAAY;AACvC,UAAI,CAAC,KAAK,QAAQ,YAAY,CAAC,KAAK,QAAQ,UAAU;AACpD,aAAK,KAAK,OAAO;AAAA,MACnB;AAAA,IACF;AAEA,IAAAA,KAAI,SAAS,SAAU,KAAK,KAAK,MAAM,MAAM,OAAO,QAAQ,QAAQ,QAAQ;AAI1E,cAAQ;AACR,cAAQ;AACR,eAAS;AACT,gBAAU;AACV,gBAAU;AACV,gBAAU;AAGV,UACE,OAAO,IAAI,SACX,OAAO,IAAI,UACX,OAAO,QAAQ,IAAI,SACnB,OAAO,SAAS,IAAI,QACpB;AACA,cAAM,IAAI,MAAM,8BAA8B;AAAA,MAChD;AAEA,UACE,SAAS,IAAI,SACb,SAAS,IAAI,UACb,SAAS,QAAQ,IAAI,SACrB,SAAS,SAAS,IAAI,QACtB;AACA,cAAM,IAAI,MAAM,8BAA8B;AAAA,MAChD;AAEA,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,YAAI,KAAK;AAAA,UACP,IAAI;AAAA,WACF,SAAS,KAAK,IAAI,QAAQ,UAAW;AAAA,WACrC,OAAO,KAAK,IAAI,QAAQ,QAAS;AAAA,WACjC,OAAO,KAAK,IAAI,QAAQ,OAAO,SAAU;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAEA,IAAAA,KAAI,UAAU,SAAS,SACrB,KACA,MACA,MACA,OACA,QACA,QACA,QACA;AAGA,MAAAA,KAAI,OAAO,MAAM,KAAK,MAAM,MAAM,OAAO,QAAQ,QAAQ,MAAM;AAC/D,aAAO;AAAA,IACT;AAEA,IAAAA,KAAI,cAAc,SAAU,KAAK;AAC/B,UAAI,IAAI,OAAO;AACb,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,mBAAS,IAAI,GAAG,IAAI,IAAI,OAAO,KAAK;AAClC,gBAAI,MAAO,IAAI,QAAQ,IAAI,KAAM;AAEjC,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAI,SAAS,IAAI,KAAK,MAAM,CAAC,IAAI;AACjC,uBAAS,KAAK,IAAI,QAAQ,IAAI,MAAM,IAAI,KAAK;AAC7C,kBAAI,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,SAAS,GAAG;AAAA,YAC7C;AAAA,UACF;AAAA,QACF;AACA,YAAI,QAAQ;AAAA,MACd;AAAA,IACF;AAEA,IAAAA,KAAI,UAAU,cAAc,WAAY;AACtC,MAAAA,KAAI,YAAY,IAAI;AAAA,IACtB;AAAA;AAAA;;;AC7JA,YAAYE,WAAU;AApCtB,IAmCA,cASqB;AA5CrB;AAAA;AAAA;AAmCA,mBAAoB;AAEpB;AAOA,IAAqB,iBAArB,MAAoC;AAAA;AAAA,MAElC,OAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaf,OAAO,UAAU,MAA6C;AAC5D,YAAI;AACF,gBAAM,MAAM,iBAAI,KAAK,KAAK,OAAO,KAAK,IAAI,CAAC;AAC3C,iBAAO;AAAA,YACL,OAAO,IAAI;AAAA,YACX,QAAQ,IAAI;AAAA,YACZ,QAAQ,IAAI,WAAW,IAAI,IAAI;AAAA,UACjC;AAAA,QACF,SAAS,GAAG;AACV,cAAI,MAAM,6BAA6B,CAAC,EAAE;AAC1C,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,aAAa,eAAe,MAAsD;AAChF,eAAO,KAAK,UAAU,IAAI;AAAA,MAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,OAAO,YAAY,QAAoB,OAAe,QAAwC;AAC5F,YAAI;AACF,gBAAM,MAAM,IAAI,iBAAI,EAAE,OAAO,OAAO,CAAC;AACrC,cAAI,OAAO,OAAO,KAAK,MAAM;AAC7B,gBAAM,SAAS,iBAAI,KAAK,MAAM,GAAG;AACjC,iBAAO,IAAI,WAAW,MAAM;AAAA,QAC9B,SAAS,GAAG;AACV,cAAI,MAAM,8BAA8B,CAAC,EAAE;AAE3C,iBAAO,KAAK,kBAAkB,QAAQ,OAAO,MAAM;AAAA,QACrD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,OAAO,kBAAkB,QAAoB,OAAe,QAAwC;AAClG,YAAI;AAEF,gBAAM,YAAY,IAAI,WAAW,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAGlE,gBAAM,OAAO,IAAI,WAAW,EAAE;AAC9B,gBAAM,WAAW,IAAI,SAAS,KAAK,MAAM;AACzC,mBAAS,UAAU,GAAG,OAAO,KAAK;AAClC,mBAAS,UAAU,GAAG,QAAQ,KAAK;AACnC,eAAK,CAAC,IAAI;AACV,eAAK,CAAC,IAAI;AACV,eAAK,EAAE,IAAI;AACX,eAAK,EAAE,IAAI;AACX,eAAK,EAAE,IAAI;AAEX,gBAAM,YAAY,KAAK,eAAe,QAAQ,IAAI;AAGlD,gBAAM,UAAU,IAAI,WAAW,UAAU,IAAI,QAAQ,EAAE;AACvD,mBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,oBAAQ,KAAK,IAAI,QAAQ,EAAE,IAAI;AAC/B,qBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,oBAAM,UAAU,IAAI,QAAQ,KAAK;AACjC,oBAAM,SAAS,KAAK,IAAI,QAAQ,KAAK,IAAI,IAAI;AAC7C,sBAAQ,MAAM,IAAI,OAAO,MAAM;AAC/B,sBAAQ,SAAS,CAAC,IAAI,OAAO,SAAS,CAAC;AACvC,sBAAQ,SAAS,CAAC,IAAI,OAAO,SAAS,CAAC;AACvC,sBAAQ,SAAS,CAAC,IAAI,OAAO,SAAS,CAAC;AAAA,YACzC;AAAA,UACF;AAEA,gBAAM,aAAkB,kBAAY,SAAS,EAAE,OAAO,EAAE,CAAC;AACzD,gBAAM,YAAY,KAAK,eAAe,QAAQ,IAAI,WAAW,UAAU,CAAC;AAGxE,gBAAM,YAAY,KAAK,eAAe,QAAQ,IAAI,WAAW,CAAC,CAAC;AAG/D,gBAAM,cAAc,UAAU,SAAS,UAAU,SAAS,UAAU,SAAS,UAAU;AACvF,gBAAM,MAAM,IAAI,WAAW,WAAW;AACtC,cAAI,SAAS;AACb,cAAI,IAAI,WAAW,MAAM;AACzB,oBAAU,UAAU;AACpB,cAAI,IAAI,WAAW,MAAM;AACzB,oBAAU,UAAU;AACpB,cAAI,IAAI,WAAW,MAAM;AACzB,oBAAU,UAAU;AACpB,cAAI,IAAI,WAAW,MAAM;AAEzB,iBAAO;AAAA,QACT,SAAS,GAAG;AACV,cAAI,MAAM,+BAA+B,CAAC,EAAE;AAC5C,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,aAAa,iBAAiB,QAAoB,OAAe,QAAiD;AAChH,eAAO,KAAK,YAAY,QAAQ,OAAO,MAAM;AAAA,MAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,OAAe,eAAe,MAAc,MAA8B;AACxE,cAAM,SAAS,KAAK;AACpB,cAAM,QAAQ,IAAI,WAAW,IAAI,IAAI,SAAS,CAAC;AAC/C,cAAM,OAAO,IAAI,SAAS,MAAM,MAAM;AAGtC,aAAK,UAAU,GAAG,QAAQ,KAAK;AAG/B,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAM,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;AAAA,QAClC;AAGA,cAAM,IAAI,MAAM,CAAC;AAGjB,cAAM,MAAM,KAAK,MAAM,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC;AACpD,aAAK,UAAU,IAAI,QAAQ,KAAK,KAAK;AAErC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAKA,OAAe,MAAM,MAA0B;AAC7C,YAAI,MAAM;AACV,cAAM,QAAQ,KAAK,cAAc;AAEjC,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,gBAAM,OAAO,MAAM,KAAK,CAAC,KAAK,GAAI,IAAK,QAAQ;AAAA,QACjD;AAEA,gBAAQ,MAAM,gBAAgB;AAAA,MAChC;AAAA;AAAA;AAAA;AAAA,MAKA,OAAe,gBAA6B;AAC1C,YAAI,KAAK,aAAa;AACpB,iBAAO,KAAK;AAAA,QACd;AAEA,cAAM,QAAQ,IAAI,YAAY,GAAG;AACjC,iBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,cAAI,IAAI;AACR,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAI,IAAI,IAAI,aAAc,MAAM,IAAK,MAAM;AAAA,UAC7C;AACA,gBAAM,CAAC,IAAI;AAAA,QACb;AAEA,aAAK,cAAc;AACnB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaA,OAAO,UAAU,MAAkB,UAA0B;AAC3D,eAAO,QAAQ,QAAQ,WAAW,OAAO,KAAK,IAAI,EAAE,SAAS,QAAQ,CAAC;AAAA,MACxE;AAAA,IACF;AAAA;AAAA;;;ACxQA,YAAY,QAAQ;AACpB,YAAYC,WAAU;AACtB,YAAYC,aAAY;AALxB,IA0Ba,cAuFQ;AAjHrB;AAAA;AAAA;AAMA;AACA;AAEA;AACA;AAEA;AAcO,IAAM,eAAoC,oBAAI,IAAI;AAAA;AAAA,MAEvD;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA;AAAA,MAGA;AAAA;AAAA,IACF,CAAC;AAED,IAAqB,iBAArB,MAAqB,gBAA0C;AAAA,MAC7D,mBAAmB;AAAA,MAEnB,kBAAsC;AAAA,MAEtC,OAAO,sBAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjD,WAAW,qBAAyC;AAClD,YAAI,gBAAe,wBAAwB,QAAW;AACpD,iBAAO,gBAAe;AAAA,QACxB;AAEA,YAAI;AAEF,gBAAM,cAAc,UAAQ,QAAQ,yCAAyC;AAC7E,0BAAe,sBAA2B,cAAQ,WAAW;AAAA,QAC/D,QAAQ;AACN,0BAAe,sBAAsB;AAAA,QACvC;AAEA,eAAO,gBAAe,uBAAuB;AAAA,MAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,WAAW,wBAA4C;AACrD,eAAO,QAAQ,IAAI;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,WAAW,6BAAsC;AAC/C,cAAM,QAAQ,QAAQ,IAAI;AAC1B,eAAO,OAAO,YAAY,MAAM;AAAA,MAClC;AAAA,MAEA,IAAI,iBAAiB;AACnB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,eAAe,YAAgC;AACjD,aAAK,kBAAkB;AAAA,MACzB;AAAA,MAEA,IAAI,WAAW;AACb,gBAAW,YAAS,GAAG;AAAA,UACrB,KAAK;AACH;AAAA,UACF,KAAK;AACH;AAAA,UACF,KAAK;AACH;AAAA,UACF;AACE;AAAA,QACJ;AAAA,MACF;AAAA,MAEA,IAAI,kBAAkB;AACpB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,mBAAmB,SAAiB;AAClC,aAAK,mBAAmB;AAAA,MAC1B;AAAA,MAEA,IAAI,eAAe;AACjB,eAAU,WAAQ;AAAA,MACpB;AAAA,MAEA,IAAI,mBAAmB;AACrB,YAAI,KAAK,8BAA+B;AACtC,iBACE,KAAK,eACL,YAAY,0BACZ,YACA,YAAY,0BACZ,UACA,YAAY;AAAA,QAEhB,OAAO;AACL,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAAA,MAEA,IAAI,qBAAqB;AACvB,YAAI,KAAK,8BAA+B;AACtC,iBACE,KAAK,eACL,YAAY,0BACZ,YACA,YAAY,0BACZ,YACA,YAAY;AAAA,QAEhB,OAAO;AACL,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAAA,MAEA,IAAI,4BAA4B;AAC9B,YAAI,KAAK,8BAA+B;AACtC,iBACE,KAAK,eACL,YAAY,0BACZ,YACA,YAAY,0BACZ,YACA,YAAY,0BACZ,sBACA,YAAY,0BACZ,SACA,YAAY;AAAA,QAEhB,OAAO;AACL,iBAAO,MAAM,YAAY;AAAA,QAC3B;AAAA,MACF;AAAA,MAEA,IAAI,4BAA4B;AAC9B,YAAI,KAAK,8BAA+B;AACtC,iBACE,KAAK,eACL,YAAY,0BACZ,YACA,YAAY,0BACZ,YACA,YAAY,0BACZ,8BACA,YAAY,0BACZ,SACA,YAAY;AAAA,QAEhB,OAAO;AACL,iBAAO,MAAM,YAAY;AAAA,QAC3B;AAAA,MACF;AAAA,MAEA,IAAI,gBAAgB;AAClB,eACE,KAAK,eACL,YAAY,0BACZ,YACA,YAAY,0BACZ,YACA,YAAY,0BACZ,sBACA,YAAY,0BACZ,UACA,YAAY,0BACZ,WACA,YAAY,0BACZ,UACA,YAAY,0BACZ,eACA,YAAY;AAAA,MAEhB;AAAA,MAEA,IAAI,uBAAuB;AACzB,eACE,KAAK,eACL,YAAY,0BACZ,YACA,YAAY,0BACZ,YACA,YAAY,0BACZ,8BACA,YAAY,0BACZ,UACA,YAAY,0BACZ,WACA,YAAY,0BACZ,UACA,YAAY,0BACZ,eACA,YAAY;AAAA,MAEhB;AAAA,MAEA,IAAI,mBAAmB;AACrB,eACE,KAAK,mBACL,aACA,YAAY,0BACZ,yCACA,YAAY,0BACZ,eACA,YAAY,0BACZ,UACA,YAAY,0BACZ,eACA,YAAY;AAAA,MAEhB;AAAA,MAEA,IAAI,0BAA0B;AAC5B,eACE,KAAK,mBACL,aACA,YAAY,0BACZ,iDACA,YAAY,0BACZ,eACA,YAAY,0BACZ,UACA,YAAY,0BACZ,eACA,YAAY;AAAA,MAEhB;AAAA,MAEA,IAAI,kBAAkB;AAEpB,cAAM,UAAU,gBAAe;AAC/B,YAAI,SAAS;AACX,iBAAO,YAAY,wBAAwB,OAAO,IAAI,SAAS,YAAY;AAAA,QAC7E;AAEA,YAAID,SAAO,KAAK;AAEhB,YAAI,KAAK,8BAA+B;AACtC,UAAAA,SACE,YAAY,wBAAwBA,MAAI,IACxC,KAAK,mBACL,UACA,YAAY;AAAA,QAChB,OAAO;AAEL,UAAAA,SACE,YAAY,wBAAwBA,MAAI,IACxC,MACA,KAAK,mBACL,YAAY,0BACZ,SACA,YAAY;AAAA,QAChB;AAEA,eAAOA;AAAA,MACT;AAAA,MAEA,IAAI,iBAAiB;AAEnB,cAAM,UAAU,gBAAe;AAC/B,YAAI,SAAS;AACX,iBAAO,YAAY,wBAAwB,OAAO,IAAI,QAAQ,YAAY;AAAA,QAC5E;AAEA,YAAIA,SAAO,KAAK;AAEhB,YAAI,KAAK,8BAA+B;AACtC,UAAAA,SACE,YAAY,wBAAwBA,MAAI,IACxC,KAAK,mBACL,SACA,YAAY;AAAA,QAChB,OAAO;AAEL,UAAAA,SACE,YAAY,wBAAwBA,MAAI,IACxC,MACA,KAAK,mBACL,YAAY,0BACZ,QACA,YAAY;AAAA,QAChB;AAEA,eAAOA;AAAA,MACT;AAAA,MAEA,IAAI,oBAAoB;AAEtB,cAAM,UAAU,gBAAe;AAC/B,YAAI,SAAS;AACX,iBAAO,YAAY,wBAAwB,OAAO,IAAI,WAAW,YAAY;AAAA,QAC/E;AAEA,YAAIA,SAAO,KAAK;AAEhB,YAAI,KAAK,8BAA+B;AACtC,UAAAA,SACE,YAAY,wBAAwBA,MAAI,IACxC,KAAK,mBACL,YACA,YAAY;AAAA,QAChB,OAAO;AAEL,UAAAA,SACE,YAAY,wBAAwBA,MAAI,IACxC,MACA,KAAK,mBACL,YAAY,0BACZ,WACA,YAAY;AAAA,QAChB;AAEA,eAAOA;AAAA,MACT;AAAA,MAEA,IAAI,oBAAoB;AAEtB,cAAM,UAAU,gBAAe;AAC/B,YAAI,SAAS;AACX,iBAAO,YAAY,wBAAwB,OAAO,IAAI,WAAW,YAAY;AAAA,QAC/E;AAEA,YAAIA,SAAO,KAAK;AAEhB,YAAI,KAAK,8BAA+B;AACtC,UAAAA,SACE,YAAY,wBAAwBA,MAAI,IACxC,KAAK,mBACL,YACA,YAAY;AAAA,QAChB,OAAO;AAEL,UAAAA,SACE,YAAY,wBAAwBA,MAAI,IACxC,MACA,KAAK,mBACL,YAAY,0BACZ,WACA,YAAY;AAAA,QAChB;AAEA,eAAOA;AAAA,MACT;AAAA,MAEA,IAAI,cAAc;AAChB,YAAIA,SAAO,KAAK;AAEhB,QAAAA,SAAO,YAAY,wBAAwBA,MAAI,IAAI,YAAY,YAAY;AAE3E,eAAOA;AAAA,MACT;AAAA,MAEA,IAAI,oBAAoB;AACtB,YAAIA,SAAO,KAAK;AAEhB,QAAAA,SAAO,YAAY,wBAAwBA,MAAI,IAAI,kBAAkB,YAAY;AAEjF,eAAOA;AAAA,MACT;AAAA,MAEA,IAAI,gBAAgB;AAClB,YAAIA,SAAO,KAAK;AAEhB,QAAAA,SAAO,YAAY,wBAAwBA,MAAI,IAAI,cAAc,YAAY;AAE7E,eAAOA;AAAA,MACT;AAAA,MAEA,IAAI,eAAe;AACjB,YAAIA,SAAO,KAAK;AAEhB,QAAAA,SAAO,YAAY,wBAAwBA,MAAI,IAAI,aAAa,YAAY;AAE5E,eAAOA;AAAA,MACT;AAAA,MAEA,2BAA2B,OAAe;AAGxC,cAAM,YAAY;AAClB,cAAM,QAAQ,YAAa,YAAY;AACvC,YAAI;AACJ,WAAG;AACD,wBAAc,IAAI,YAAmB,oBAAY,CAAC,EAAE,MAAM,EAAE,CAAC;AAAA,QAC/D,SAAS,eAAe;AACxB,eAAO,cAAc;AAAA,MACvB;AAAA,MAEA,eAAuB;AACrB,eAAO,WAAO;AAAA,MAChB;AAAA,MAEA,mBAAmBA,QAAc;AAE/B,YAAIA,OAAK,QAAQ,IAAI,KAAK,KAAKA,OAAK,QAAQ,MAAM,KAAK,KAAKA,OAAK,QAAQ,IAAI,KAAK,GAAG;AACnF,gBAAM,IAAI,MAAM,oCAAoCA,MAAI;AAAA,QAC1D;AAEA,YAAIA,OAAK,YAAY,GAAG,KAAK,GAAG;AAC9B,gBAAM,IAAI,MAAM,iCAAiCA,MAAI;AAAA,QACvD;AAEA,cAAM,QAAQ,KAAK,UAAUA,QAAM,IAAI,IAAI,KAAK,UAAUA,QAAM,GAAG;AAEnE,YAAI,QAAQ,GAAG;AACb,gBAAM,IAAI,MAAM,4BAA4BA,MAAI;AAAA,QAClD;AAAA,MACF;AAAA,MAEA,UAAU,QAAgB,MAAc;AACtC,YAAI,QAAQ;AAEZ,YAAI,QAAQ,OAAO,QAAQ,IAAI;AAE/B,eAAO,SAAS,GAAG;AACjB;AAEA,kBAAQ,OAAO,QAAQ,MAAM,QAAQ,KAAK,MAAM;AAAA,QAClD;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,sBAAsB,aAAqB;AACzC,YAAI,CAAC,YAAY,WAAW,GAAG,GAAG;AAChC,wBAAc,MAAM;AAAA,QACtB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,oBAAoB,aAAqB;AACvC,YAAI,CAAC,YAAY,SAAS,GAAG,GAAG;AAC9B,yBAAe;AAAA,QACjB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,0BAA0B,aAAqB;AAC7C,YAAI,CAAC,YAAY,WAAW,IAAI,GAAG;AACjC,wBAAc,OAAO;AAAA,QACvB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,wBAAwB,aAAqB;AAC3C,YAAI,CAAC,YAAY,SAAS,IAAI,GAAG;AAC/B,yBAAe;AAAA,QACjB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,YAAY,cAAsB;AAEhC,cAAM,UAAU,gBAAe;AAC/B,YAAI,SAAS;AACX,cAAI,aAAa,WAAW,aAAa,KAAK,aAAa,WAAW,eAAe,GAAG;AACtF,kBAAM,UAAU,aAAa,UAAU,cAAc,MAAM;AAC3D,mBAAY,WAAK,SAAS,SAAS,OAAO;AAAA,UAC5C;AACA,gBAAM,gBAAgB,aAAa,WAAW,WAAW,IACrD,cACA,aAAa,WAAW,UAAU,IAChC,aACA,aAAa,WAAW,aAAa,IACnC,gBACA;AACR,cAAI,eAAe;AACjB,kBAAM,UAAU,aAAa,UAAU,cAAc,MAAM;AAC3D,mBAAY,WAAK,SAAS,WAAW,OAAO;AAAA,UAC9C;AAAA,QACF;AAEA,YAAI;AAEJ,YAAI,KAAK,iBAAiB;AAIxB,qBAAgB,cAAQ,QAAQ,IAAI,GAAG,KAAK,eAAe;AAC3D,qBAAW,YAAY,wBAAwB,QAAQ;AAAA,QACzD,OAAO;AAEL,qBAAW;AAEX,gBAAM,YAAY,KAAK;AAAA,YACrB,SAAS,YAAY,MAAM,SAAS,SAAS,CAAC;AAAA,YAC9C,SAAS,YAAY,KAAK,SAAS,SAAS,CAAC;AAAA,UAC/C;AAEA,cAAI,aAAa,GAAG;AAClB,uBAAW,SAAS,UAAU,GAAG,YAAY,CAAC;AAAA,UAChD;AAAA,QACF;AAEA,YAAI,KAAK,8BAA+B;AACtC,sBAAY,aAAa,QAAQ,OAAO,IAAI;AAAA,QAC9C,OAAO;AACL,sBAAY,aAAa,QAAQ,OAAO,YAAY,uBAAuB;AAAA,QAC7E;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,cAAcA,QAA+B;AAC3C,cAAM,WAAW,KAAK,YAAYA,MAAI;AAEtC,eAAO,IAAI,YAAY,UAAU,EAAE;AAAA,MACrC;AAAA,MAEA,MAAM,aAAaA,QAAsC;AACvD,cAAME,OAAK,UAAQ,IAAI;AAEvB,cAAM,WAAW,KAAK,YAAYF,MAAI;AAEtC,YAAI;AACF,cAAI,CAACE,KAAG,WAAW,QAAQ,GAAG;AAC5B,mBAAO;AAAA,UACT;AAEA,gBAAM,UAAUA,KAAG,aAAa,QAAQ;AAExC,cAAI,CAAC,SAAS;AACZ,mBAAO;AAAA,UACT;AAEA,gBAAM,WAAW,KAAK,MAAM,OAAO;AAEnC,iBAAO;AAAA,QACT,SAAS,GAAQ;AAGf,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,MAAM,kBAAkB,oBAA2D;AAEjF,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,OAAO,gBAAgB,MAAc,OAAe,aAA+B;AACjF,cAAMC,OAAM,UAAQ,KAAK;AAEzB,eAAO,IAAI,QAAQ,CAACC,aAAY;AAC9B,gBAAM,SAASD,KAAI,aAAa;AAEhC,iBAAO,KAAK,SAAS,CAACE,SAA+B;AACnD,gBAAIA,KAAI,SAAS,cAAc;AAC7B,cAAAD,SAAQ,KAAK;AAAA,YACf,OAAO;AAEL,cAAAA,SAAQ,KAAK;AAAA,YACf;AAAA,UACF,CAAC;AAED,iBAAO,KAAK,aAAa,MAAM;AAC7B,mBAAO,MAAM;AACb,YAAAA,SAAQ,IAAI;AAAA,UACd,CAAC;AAED,iBAAO,OAAO,MAAM,IAAI;AAAA,QAC1B,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,aAAa,kBACX,WACA,SACA,OAAe,aACc;AAE7B,cAAM,QAAkB,CAAC;AACzB,iBAAS,OAAO,WAAW,QAAQ,SAAS,QAAQ;AAClD,cAAI,CAAC,aAAa,IAAI,IAAI,GAAG;AAC3B,kBAAM,KAAK,IAAI;AAAA,UACjB;AAAA,QACF;AAGA,iBAAS,IAAI,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK;AACzC,gBAAM,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE;AAC5C,WAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,QAC5C;AAGA,mBAAW,QAAQ,OAAO;AACxB,gBAAM,YAAY,MAAM,gBAAe,gBAAgB,MAAM,IAAI;AACjE,cAAI,WAAW;AACb,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,OAAO,kBAAkB,WAAmB,SAAyB;AAEnE,cAAM,YAAsB,CAAC;AAC7B,iBAAS,OAAO,WAAW,QAAQ,SAAS,QAAQ;AAClD,cAAI,CAAC,aAAa,IAAI,IAAI,GAAG;AAC3B,sBAAU,KAAK,IAAI;AAAA,UACrB;AAAA,QACF;AAEA,YAAI,UAAU,WAAW,GAAG;AAG1B,cAAI,WAAW,oCAAoC,SAAS,IAAI,OAAO,WAAW,SAAS,EAAE;AAC7F,iBAAO;AAAA,QACT;AAEA,eAAO,UAAU,KAAK,MAAM,KAAK,OAAO,IAAI,UAAU,MAAM,CAAC;AAAA,MAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,aAAa,4BAA4B,SAMtC;AAED,YAAO,YAAS,MAAM,SAAS;AAC7B,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,OAAO;AAAA,UACT;AAAA,QACF;AAGA,cAAMF,OAAK,MAAM,OAAO,IAAI;AAC5B,YAAI,CAACA,KAAG,WAAW,OAAO,GAAG;AAC3B,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,OAAO,mBAAmB,OAAO;AAAA,UACnC;AAAA,QACF;AAEA,YAAI;AACF,gBAAM,EAAE,SAAS,IAAI,MAAM,OAAO,eAAe;AACjD,gBAAM,EAAE,YAAY,eAAe,IAAI,MAAM,OAAO,IAAI;AAuBxD,cAAI,sBAAsB,KAAK,OAAO,GAAG;AACvC,mBAAO;AAAA,cACL,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,YACT;AAAA,UACF;AAEA,gBAAM,WAAW;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,EAAE,KAAK,IAAI;AAGX,gBAAM,UAAU,OAAO,KAAK,UAAU,SAAS,EAAE,SAAS,QAAQ;AAIlE,gBAAM,aAAuB,CAAC;AAC9B,gBAAM,YAAY;AAClB,cAAI,eAAe,SAAS,GAAG;AAC7B,uBAAW,KAAK,SAAS;AAAA,UAC3B;AACA,qBAAW,KAAK,YAAY,gBAAgB;AAE5C,gBAAM,gBAAgB,CAAC,UACrB,IAAI,QAAQ,CAACE,UAAS,WAAW;AAC/B;AAAA,cACE;AAAA,cACA,CAAC,cAAc,mBAAmB,mBAAmB,OAAO;AAAA,cAC5D;AAAA,gBACE,SAAS;AAAA;AAAA;AAAA,gBAGT,KAAK,EAAE,GAAG,QAAQ,KAAK,qBAAqB,QAAQ;AAAA,cACtD;AAAA,cACA,CAACE,QAAO,QAAQ,WAAW;AACzB,oBAAIA,QAAO;AACT,yBAAO,IAAI,MAAM,GAAG,KAAK,YAAYA,OAAM,OAAO,EAAE,CAAC;AACrD;AAAA,gBACF;AACA,sBAAM,UAAU,OAAO,KAAK;AAC5B,oBAAI,CAAC,SAAS;AACZ,yBAAO,IAAI,MAAM,GAAG,KAAK,yBAAyB,SAAS,OAAO,OAAO,UAAU,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC;AAClG;AAAA,gBACF;AACA,gBAAAF,SAAQ,OAAO;AAAA,cACjB;AAAA,YACF;AAAA,UACF,CAAC;AAGH,cAAI;AACJ,cAAI;AACJ,qBAAW,SAAS,YAAY;AAC9B,gBAAI;AACF,yBAAW,MAAM,cAAc,KAAK;AACpC;AAAA,YACF,SAASC,MAAK;AACZ,0BAAYA,gBAAe,QAAQA,OAAM,IAAI,MAAM,OAAOA,IAAG,CAAC;AAAA,YAChE;AAAA,UACF;AAEA,cAAI,CAAC,UAAU;AACb,mBAAO;AAAA,cACL,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO,yIAAyI,WAAW,OAAO;AAAA,YACpK;AAAA,UACF;AAEA,gBAAM,SAAS,KAAK,MAAM,QAAQ;AAMlC,gBAAME,WAAU,OAAO,WAAW;AAClC,gBAAM,gBAAgB,OAAO,iBAAiB;AAC9C,gBAAM,WAAW,OAAO,YAAY;AAIpC,gBAAM,oBACJA,aACC,aAAa,2BACZ,aAAa,YACZ,kBAAkB,WAChB,cAAc,SAAS,uBAAuB,KAAK,cAAc,SAAS,QAAQ;AAEzF,iBAAO;AAAA,YACL,SAAAA;AAAA,YACA,QAAQA,WAAU,UAAU,OAAO;AAAA,YACnC,QAAQ;AAAA,YACR;AAAA,YACA,OAAOA,WAAU,SAAY,qBAAqB,OAAO,MAAM;AAAA,UACjE;AAAA,QACF,SAASF,MAAK;AACZ,gBAAM,eAAeA,gBAAe,QAAQA,KAAI,UAAU,OAAOA,IAAG;AACpE,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,OAAO,+BAA+B,YAAY;AAAA,UACpD;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,UAAU,MAAqF;AAC7F,eAAO,eAAe,UAAU,IAAI;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,YAAY,QAAoB,OAAe,QAAwC;AACrF,eAAO,eAAe,YAAY,QAAQ,OAAO,MAAM;AAAA,MACzD;AAAA,IACF;AAAA;AAAA;;;ACx6BA,IAQqB;AARrB;AAAA;AAAA;AAGA;AACA;AAEA;AAEA,IAAqB,aAArB,MAAgC;AAAA,MAC9B,YAA8D,CAAC;AAAA,MAE/D,QAAQ,kBAA8B,kBAA2B;AAC/D,cAAM,gBAAkE,CAAC;AAEzE,mBAAW,gBAAgB,KAAK,WAAW;AACzC,cAAI,cAAc;AAElB,cAAI,kBAAkB;AACpB,0BAAc,iBAAiB,iBAAiB,iBAAiB,YAAY,YAAY,CAAC;AAAA,UAC5F;AAEA,wBAAc,WAAW,IAAI,KAAK,UAAU,YAAY;AAAA,QAC1D;AAEA,mBAAW,gBAAgB,iBAAiB,WAAW;AACrD,gBAAM,cAAc,iBAAiB,UAAU,YAAY;AAE3D,cAAI,aAAa;AACf,gBAAI,cAAc;AAElB,gBAAI,kBAAkB;AACpB,4BAAc,iBAAiB,iBAAiB,iBAAiB,YAAY,YAAY,CAAC;AAAA,YAC5F;AAEA,kBAAM,iBAAiB,cAAc,WAAW;AAChD,gBAAI,mBAAmB,QAAW;AAChC,kBAAI,eAAe,SAAS,YAAY,MAAM;AAC5C,8BAAc,WAAW,IAAI;AAAA,cAC/B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,cAAM,UAAU,IAAI,cAAc;AAElC,mBAAW,gBAAgB,eAAe;AACxC,gBAAM,KAAK,cAAc,YAAY;AAErC,cAAI,IAAI;AACN,oBAAQ,gBAAgB,KAAK;AAAA,cAC3B;AAAA,cACA,MAAM;AAAA,YACR,CAAC;AAAA,UACH;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,OAAO,QAAiB;AAC5B,cAAM,gBAAkE,CAAC;AAEzE,cAAM,KAAK,gBAAgB,QAAQ,aAAa;AAEhD,aAAK,YAAY;AAAA,MACnB;AAAA,MAEA,MAAc,gBAAgB,QAAiB,WAA6D;AAC1G,YAAI,CAAC,OAAO,UAAU;AACpB,gBAAM,OAAO,KAAK;AAAA,QACpB;AAEA,mBAAW,YAAY,OAAO,OAAO;AACnC,gBAAM,OAAO,OAAO,MAAM,QAAQ;AAElC,cAAI,MAAM;AACR,sBAAU,KAAK,mBAAmB,IAAI,EAAE,MAAM,KAAK,UAAU,KAAK,QAAQ,SAAS,GAAG;AAAA,UACxF;AAAA,QACF;AAEA,mBAAW,cAAc,OAAO,SAAS;AACvC,gBAAM,cAAc,OAAO,QAAQ,UAAU;AAE7C,cAAI,eAAe,CAAC,YAAY,aAAa;AAC3C,kBAAM,KAAK,gBAAgB,aAAa,SAAS;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxFA,IAGAG,qBAgBqB;AAnBrB;AAAA;AAAA;AAGA,IAAAA,sBAAwC;AACxC;AAeA,IAAqB,2BAArB,MAA8C;AAAA,MACpC,UAAkB,OAAO,MAAM,CAAC;AAAA,MAChC,kBAA0B;AAAA,MAE1B,aAAa,IAAI,oCAAmD;AAAA,MACpE,WAAW,IAAI,oCAAiD;AAAA,MAExE,IAAW,YAAuD;AAChE,eAAO,KAAK,WAAW,QAAQ;AAAA,MACjC;AAAA,MAEA,IAAW,UAAmD;AAC5D,eAAO,KAAK,SAAS,QAAQ;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA,MAKO,MAAM,MAAoB;AAE/B,aAAK,UAAU,OAAO,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC;AAGjD,eAAO,KAAK,eAAe,GAAG;AAAA,QAE9B;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMQ,iBAA0B;AAEhC,YAAI,KAAK,kBAAkB,GAAG;AAE5B,cAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,mBAAO;AAAA,UACT;AAGA,gBAAM,YAAY,KAAK,QAAQ,SAAS,GAAG,CAAC,EAAE,SAAS,OAAO;AAC9D,gBAAM,UAAU,KAAK,QAAQ,CAAC;AAE9B,cAAI,YAAY,IAAM;AAEpB,iBAAK,SAAS,SAAS,MAAM,IAAI,MAAM,gDAAgD,OAAO,EAAE,CAAC;AAEjG,iBAAK,UAAU,KAAK,QAAQ,SAAS,CAAC;AACtC,mBAAO;AAAA,UACT;AAEA,eAAK,kBAAkB,SAAS,WAAW,EAAE;AAE7C,cAAI,MAAM,KAAK,eAAe,KAAK,KAAK,kBAAkB,GAAG;AAC3D,iBAAK,SAAS,SAAS,MAAM,IAAI,MAAM,yBAAyB,SAAS,EAAE,CAAC;AAC5E,iBAAK,kBAAkB;AACvB,iBAAK,UAAU,KAAK,QAAQ,SAAS,CAAC;AACtC,mBAAO;AAAA,UACT;AAGA,eAAK,UAAU,KAAK,QAAQ,SAAS,CAAC;AAAA,QACxC;AAGA,YAAI,KAAK,QAAQ,SAAS,KAAK,iBAAiB;AAC9C,iBAAO;AAAA,QACT;AAGA,cAAM,eAAe,KAAK,QAAQ,SAAS,GAAG,KAAK,eAAe;AAClE,aAAK,UAAU,KAAK,QAAQ,SAAS,KAAK,eAAe;AAGzD,cAAM,UAAU,aAAa,SAAS,MAAM,EAAE,KAAK;AAEnD,YAAI;AACF,gBAAM,UAAU,KAAK,MAAM,OAAO;AAElC,gBAAM,UAAW,SAAiB,QAAQ;AAC1C,gBAAM,YAAa,SAAiB,OAAO,QAAQ;AACnD,gBAAM,UAAU,QAAQ,SAAS,MAAM,QAAQ,UAAU,GAAG,GAAG,IAAI,QAAQ;AAC3E,cAAI;AAAA,YACF,0BAA0B,OAAO,GAAG,YAAY,MAAM,YAAY,EAAE,KAAK,QAAQ,MAAM,YAAY,OAAO;AAAA,UAC5G;AACA,eAAK,WAAW,SAAS,MAAM,OAAO;AAAA,QACxC,SAAS,GAAG;AACV,cAAI,QAAQ,mCAAmC,CAAC,EAAE;AAClD,eAAK,SAAS,SAAS,MAAM,IAAI,MAAM,iCAAiC,CAAC,EAAE,CAAC;AAAA,QAC9E;AAGA,aAAK,kBAAkB;AAEvB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAKO,QAAc;AACnB,aAAK,UAAU,OAAO,MAAM,CAAC;AAC7B,aAAK,kBAAkB;AAAA,MACzB;AAAA,IACF;AAAA;AAAA;;;AC5HA;AAAA;AAAA;AAAA;AAAA;;;AC4CA,SAAS,wBAAgC;AA5CzC,IA6CAC,qBAuBM,2BACA,0BACA,uBACA,+BAQe;AA/ErB;AAAA;AAAA;AA6CA,IAAAA,sBAAwC;AACxC;AACA;AACA;AAoBA,IAAM,4BAA4B;AAClC,IAAM,2BAA2B;AACjC,IAAM,wBAAwB;AAC9B,IAAM,gCAAgC;AAQtC,IAAqB,uBAArB,MAA0C;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAgB;AAAA,MAChB,QAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAA6B,CAAC;AAAA,MAC9B,gBAA6C;AAAA,QACnD,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,QAClB,8BAA8B;AAAA,MAChC;AAAA,MACQ,gBAAwB;AAAA,MACxB;AAAA,MACA;AAAA;AAAA,MAGA,wBAAgC;AAAA,MAChC,gBAAwB;AAAA,MACxB,qBAA8B;AAAA,MAC9B;AAAA,MAEA,mBAAmB,oBAAI,IAA4B;AAAA,MACnD,cAAc;AAAA;AAAA,MAGd,eAAe,IAAI,oCAAyD;AAAA,MAC5E,kBAAkB,IAAI,oCAA8C;AAAA,MACpE,WAAW,IAAI,oCAA4E;AAAA,MAC3F,aAAa,IAAI,oCAAqD;AAAA,MACtE,YAAY,IAAI,oCAAoD;AAAA,MACpE,WAAW,IAAI,oCAAmD;AAAA,MAClE,WAAW,IAAI,oCAA6C;AAAA,MAC5D,cAAc,IAAI,oCAAsD;AAAA,MACxE,qBAAqB,IAAI,oCAA6D;AAAA,MAE9F,IAAW,cAA+D;AACxE,eAAO,KAAK,aAAa,QAAQ;AAAA,MACnC;AAAA,MAEA,IAAW,iBAAuD;AAChE,eAAO,KAAK,gBAAgB,QAAQ;AAAA,MACtC;AAAA,MAEA,IAAW,UAA8E;AACvF,eAAO,KAAK,SAAS,QAAQ;AAAA,MAC/B;AAAA,MAEA,IAAW,YAAyD;AAClE,eAAO,KAAK,WAAW,QAAQ;AAAA,MACjC;AAAA,MAEA,IAAW,WAAuD;AAChE,eAAO,KAAK,UAAU,QAAQ;AAAA,MAChC;AAAA,MAEA,IAAW,UAAqD;AAC9D,eAAO,KAAK,SAAS,QAAQ;AAAA,MAC/B;AAAA,MAEA,IAAW,UAA+C;AACxD,eAAO,KAAK,SAAS,QAAQ;AAAA,MAC/B;AAAA,MAEA,IAAW,aAA2D;AACpE,eAAO,KAAK,YAAY,QAAQ;AAAA,MAClC;AAAA,MAEA,IAAW,oBAAyE;AAClF,eAAO,KAAK,mBAAmB,QAAQ;AAAA,MACzC;AAAA,MAEA,IAAW,QAA8B;AACvC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,cAAuB;AAChC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,cAAiC;AAC1C,eAAO;AAAA,UACL,OAAO,KAAK;AAAA,UACZ,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,UACX,iBAAiB,KAAK;AAAA,UACtB,kBAAkB,KAAK;AAAA,UACvB,SAAS,KAAK;AAAA,UACd,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA,QACrB;AAAA,MACF;AAAA,MAEA,cAAc;AACZ,aAAK,UAAU,IAAI,yBAAyB;AAE5C,aAAK,QAAQ,UAAU,UAAU,CAAC,GAAG,YAAY;AAC/C,eAAK,eAAe,OAAgC;AAAA,QACtD,CAAC;AAED,aAAK,QAAQ,QAAQ,UAAU,CAAC,GAAGC,WAAU;AAC3C,cAAI,MAAM,+BAA+BA,OAAM,OAAO,EAAE;AACxD,eAAK,SAAS,SAAS,MAAMA,MAAK;AAAA,QACpC,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAa,QAAQ,OAAe,aAAa,OAAe,OAAO,UAAkC;AACvG,YAAI,KAAK,0CAA6C,KAAK,0CAA4C;AACrG,gBAAM,IAAI,MAAM,iCAAiC;AAAA,QACnD;AAEA,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,YAAY;AACjB,aAAK;AACL,aAAK,gBAAgB;AAErB,YAAI;AACJ,YAAI;AAGJ,YAAI,MAAM,2CAA2C,IAAI,IAAI,IAAI,SAAS,yBAAyB,eAAe;AAClH,iBAAS,UAAU,GAAG,UAAU,2BAA2B,WAAW;AACpE,gBAAM,SAAS,UAAU,IAAI,2BAA2B,KAAK,IAAI,GAAG,UAAU,CAAC,IAAI;AACnF,cAAI,SAAS,GAAG;AACd,gBAAI,MAAM,mBAAmB,MAAM,oBAAoB;AACvD,kBAAM,IAAI,QAAQ,CAACC,aAAY,WAAWA,UAAS,MAAM,CAAC;AAAA,UAC5D;AAEA,cAAI,MAAM,8BAA8B,UAAU,CAAC,IAAI,yBAAyB,OAAO,IAAI,IAAI,IAAI,KAAK;AAExG,cAAI;AACF,qBAAS,MAAM,IAAI,QAAgB,CAACA,UAAS,WAAW;AACtD,oBAAM,SAAS,iBAAiB,EAAE,MAAM,KAAK,CAAC;AAG9C,oBAAM,UAAU,WAAW,MAAM;AAC/B,uBAAO,QAAQ;AACf,uBAAO,IAAI,MAAM,4BAA4B,qBAAqB,IAAI,CAAC;AAAA,cACzE,GAAG,qBAAqB;AAExB,qBAAO,GAAG,WAAW,MAAM;AACzB,6BAAa,OAAO;AACpB,uBAAO,mBAAmB;AAC1B,gBAAAA,SAAQ,MAAM;AAAA,cAChB,CAAC;AAED,qBAAO,GAAG,SAAS,MAAM;AACvB,6BAAa,OAAO;AACpB,uBAAO,IAAI,MAAM,mBAAmB,CAAC;AAAA,cACvC,CAAC;AAED,qBAAO,GAAG,SAAS,CAACC,SAAQ;AAC1B,6BAAa,OAAO;AACpB,uBAAOA,IAAG;AAAA,cACZ,CAAC;AAAA,YACH,CAAC;AACD;AAAA,UACF,SAAS,GAAQ;AACf,wBAAY;AACZ,gBAAI,MAAM,8BAA8B,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE;AAAA,UAC5E;AAAA,QACF;AAEA,YAAI,CAAC,QAAQ;AACX,eAAK;AACL,eAAK,gBAAgB,wBAAwB,IAAI,IAAI,IAAI,UAAU,yBAAyB,cAAc,WAAW,WAAW,eAAe;AAC/I,cAAI,QAAQ,8BAA8B,WAAW,WAAW,eAAe,EAAE;AACjF,gBAAM,IAAI,MAAM,KAAK,aAAa;AAAA,QACpC;AAEA,YAAI,MAAM,4CAA4C,IAAI,IAAI,IAAI,EAAE;AAEpE,aAAK,UAAU;AACf,aAAK,QAAQ,MAAM;AACnB,aAAK,wBAAwB,KAAK,IAAI;AACtC,aAAK,gBAAgB;AAGrB,eAAO,aAAa,MAAM,GAAK;AAG/B,eAAO,GAAG,QAAQ,CAAC,SAAS;AAC1B,eAAK,wBAAwB,KAAK,IAAI;AACtC,eAAK;AACL,cAAI,QAAQ,iCAAiC,KAAK,MAAM,4BAA4B,KAAK,aAAa,GAAG;AACzG,eAAK,QAAQ,MAAM,IAAI;AAAA,QACzB,CAAC;AAED,eAAO,GAAG,SAAS,CAAC,MAAM;AACxB,cAAI,QAAQ,qCAAqC,EAAE,OAAO,EAAE;AAC5D,eAAK,kBAAkB,iBAAiB,EAAE,OAAO,EAAE;AAAA,QACrD,CAAC;AAED,eAAO,GAAG,SAAS,MAAM;AACvB,cAAI,MAAM,kCAAkC;AAC5C,eAAK,kBAAkB,eAAe;AAAA,QACxC,CAAC;AAED,eAAO,GAAG,OAAO,MAAM;AACrB,cAAI,MAAM,gEAAgE;AAAA,QAC5E,CAAC;AAED,eAAO,GAAG,WAAW,MAAM;AACzB,cAAI,MAAM,oCAAoC;AAAA,QAChD,CAAC;AAED,eAAO,GAAG,SAAS,MAAM;AACvB,cAAI,QAAQ,yDAAyD;AAAA,QACvE,CAAC;AAGD,aAAK,uBAAuB,YAAY,MAAM;AAC5C,cAAI,KAAK,wCAA2C;AAClD,kBAAM,WAAW,KAAK,IAAI,IAAI,KAAK;AACnC,kBAAM,cAAc,KAAK,UACrB,YAAY,KAAK,QAAQ,QAAQ,cAAc,KAAK,QAAQ,QAAQ,eAAe,KAAK,QAAQ,SAAS,KACzG;AACJ,gBAAI;AAAA,cACF,qDAAqD,QAAQ,OAAO,KAAK,aAAa,mBAAmB,WAAW;AAAA,YACtH;AAIA,gBAAI,WAAW,OAAS,KAAK,iBAAiB,KAAK,CAAC,KAAK,oBAAoB;AAC3E,mBAAK,qBAAqB;AAC1B,kBAAI;AAAA,gBACF,wDAAwD,QAAQ;AAAA,cAClE;AAAA,YACF;AAAA,UACF;AAAA,QACF,GAAG,GAAI;AAIP,cAAM,mBAAmB,WAAW,MAAM;AACxC,cAAI,KAAK,0CAA4C;AACnD,gBAAI;AAAA,cACF,4CAA4C,6BAA6B;AAAA,YAC3E;AACA,iBAAK,kBAAkB,wDAAwD;AAAA,UACjF;AAAA,QACF,GAAG,6BAA6B;AAGhC,aAAK,sBAAsB;AAI3B,YAAI,MAAM,iEAAiE,6BAA6B,QAAQ;AAAA,MAClH;AAAA;AAAA,MAGQ;AAAA;AAAA;AAAA;AAAA,MAKD,aAAmB;AACxB,YAAI,KAAK,SAAS;AAChB,eAAK,QAAQ,QAAQ;AACrB,eAAK,UAAU;AAAA,QACjB;AACA,aAAK,kBAAkB,6BAA6B;AAAA,MACtD;AAAA;AAAA;AAAA;AAAA,MAKO,YAAY,SAAiB,gBAAoD,aAAmB;AACzG,YAAI,CAAC,KAAK,aAAa;AACrB,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AAEA,YAAI,KAAK,oDAA4D;AACnE,eAAK,aAAa;AAAA,YAChB,MAAM;AAAA,YACN;AAAA,YACA,gBAAgB;AAAA,UAClB,CAAC;AAAA,QACH,OAAO;AACL,eAAK,aAAa;AAAA,YAChB,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,cACA,gBAAgB;AAAA,YAClB;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKO,SAAe;AACpB,aAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA,MAKO,QAAc;AACnB,aAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAAA,MACrC;AAAA;AAAA;AAAA;AAAA,MAKO,gBAAsB;AAC3B,YAAI,CAAC,KAAK,cAAc,kBAAkB;AACxC,gBAAM,IAAI,MAAM,kDAAkD;AAAA,QACpE;AAEA,aAAK,aAAa;AAAA,UAChB,MAAM;AAAA,UACN,UAAU;AAAA,YACR,oBAAoB,KAAK;AAAA,UAC3B;AAAA,QACF,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA,MAKO,aAAa,cAA4B;AAC9C,YAAI,CAAC,KAAK,cAAc,kBAAkB;AACxC,gBAAM,IAAI,MAAM,kDAAkD;AAAA,QACpE;AAEA,aAAK,aAAa;AAAA,UAChB,MAAM;AAAA,UACN,UAAU;AAAA,YACR,eAAe;AAAA,YACf,oBAAoB,KAAK;AAAA,UAC3B;AAAA,QACF,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA,MAKQ,aAAa,UAAyB;AAC5C,YAAI,CAAC,KAAK,SAAS;AACjB,cAAI,QAAQ,kDAAkD,KAAK,UAAU,QAAQ,EAAE,UAAU,GAAG,GAAG,CAAC,EAAE;AAC1G;AAAA,QACF;AAEA,cAAM,OAAO,KAAK,UAAU,QAAQ;AACpC,YAAI,QAAQ,0BAA0B,KAAK,MAAM,YAAY,KAAK,UAAU,GAAG,GAAG,CAAC,EAAE;AACrF,cAAM,aAAa,OAAO,KAAK,IAAI;AAGnC,cAAM,gBAAgB,WAAW,aAAa;AAC9C,YAAI,YAAY,aAAa,cAAc,SAAS,EAAE,IAAI;AAC1D,oBAAY,UAAU,UAAU,UAAU,SAAS,CAAC;AAEpD,cAAM,eAAe,OAAO,KAAK,SAAS;AAC1C,cAAM,UAAU,OAAO,KAAK,IAAI;AAChC,cAAM,SAAS,OAAO,OAAO,CAAC,cAAc,YAAY,OAAO,CAAC;AAEhE,aAAK,QAAQ,MAAM,MAAM;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA,MAKQ,eAAe,UAAuC;AAC5D,YAAI,QAAQ,0CAA0C,SAAS,IAAI,EAAE;AACrE,YAAI,SAAS,SAAS,SAAS;AAC7B,gBAAM,gBAAgB;AACtB,gBAAM,YAAa,cAAc,OAAe,QAAQ;AACxD,cAAI,QAAQ,6BAA6B,SAAS,EAAE;AACpD,eAAK,aAAa,cAAc,KAAiD;AAAA,QACnF,WAAW,SAAS,SAAS,YAAY;AACvC,cAAI,QAAQ,uCAAwC,SAAoC,OAAO,EAAE;AACjG,eAAK,gBAAgB,QAAkC;AAAA,QACzD,WAAW,SAAS,SAAS,YAAY;AACvC,cAAI,QAAQ,qEAAqE;AAEjF,eAAK,qBAAqB,QAAqC;AAAA,QACjE,OAAO;AACL,cAAI;AAAA,YACF,uCAAuC,SAAS,IAAI,qBAAqB,KAAK,UAAU,QAAQ,EAAE,UAAU,GAAG,GAAG,CAAC;AAAA,UACrH;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKQ,aAAa,OAAuD;AAC1E,gBAAQ,MAAM,MAAM;AAAA,UAClB,KAAK;AACH,gBAAI,QAAQ,sCAAsC;AAClD,iBAAK,qBAAqB,KAAkC;AAC5D;AAAA,UAEF,KAAK;AACH,iBAAK,iBAAiB,KAA8B;AACpD;AAAA,UAEF,KAAK;AACH,gBAAI,QAAQ,qCAAqC;AACjD,iBAAK,WAAW,SAAS,MAAM,KAAiC;AAChE;AAAA,UAEF,KAAK;AACH,gBAAI,QAAQ,oCAAoC;AAChD,iBAAK,UAAU,SAAS,MAAM,KAAgC;AAC9D;AAAA,UAEF,KAAK;AACH,iBAAK,SAAS,SAAS,MAAM,KAA+B;AAC5D;AAAA,UAEF,KAAK;AACH,gBAAI,QAAQ,uBAAuB,MAAM,OAAO,EAAE;AAClD;AAAA,UAEF,KAAK;AACH,gBAAI,QAAQ,2BAA2B;AACvC,iBAAK,mBAAmB,SAAS,MAAM,KAAyC;AAChF;AAAA,UAEF;AACE,gBAAI,QAAQ,6BAA6B,MAAM,IAAI,EAAE;AAAA,QACzD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKQ,qBAAqB,OAA6B;AACxD,YAAI,MAAM,iDAAiD,MAAM,OAAO,aAAa,MAAM,SAAS,UAAU,CAAC,EAAE;AACjH,YAAI,QAAQ,iCAAiC,MAAM,OAAO,kBAAkB,KAAK,sBAAsB,EAAE;AACzG,YAAI,QAAQ,0BAA0B,KAAK,UAAU,MAAM,OAAO,CAAC,EAAE;AACrE,YAAI,QAAQ,oCAAoC,MAAM,gBAAgB,EAAE;AAExE,aAAK,mBAAmB,KAAK,IAAI,MAAM,SAAS,KAAK,sBAAsB;AAC3E,aAAK,WAAW,MAAM,WAAW,CAAC;AAGlC,aAAK,gBAAgB;AAAA,UACnB,kBAAkB,KAAK;AAAA,UACvB,kBAAkB,KAAK;AAAA,UACvB,8BAA8B,KAAK;AAAA,QACrC;AAIA,YAAI,CAAC,KAAK,qBAAqB,KAAK,SAAS,SAAS,GAAG;AACvD,eAAK,oBAAoB,KAAK,SAAS,CAAC,EAAE;AAC1C,cAAI,MAAM,uCAAuC,KAAK,SAAS,CAAC,EAAE,IAAI,KAAK,KAAK,iBAAiB,GAAG;AAAA,QACtG;AAGA,YAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,cAAI;AAAA,YACF,oCAAoC,KAAK,SAAS,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,EAAE,WAAW,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,UACzG;AAAA,QACF,OAAO;AACL,cAAI,QAAQ,gEAAgE;AAAA,QAC9E;AAGA,cAAM,WAAmC;AAAA,UACvC,MAAM;AAAA,UACN,SAAS,KAAK;AAAA,UACd,oBAAoB,KAAK;AAAA,UACzB,UAAU,KAAK;AAAA,QACjB;AACA,YAAI;AAAA,UACF,oDAAoD,KAAK,gBAAgB,YAAY,KAAK,iBAAiB,iBAAiB,CAAC,CAAC,KAAK,SAAS;AAAA,QAC9I;AACA,aAAK,aAAa,QAAQ;AAG1B,YAAI,KAAK,qBAAqB;AAC5B,uBAAa,KAAK,mBAAmB;AACrC,eAAK,sBAAsB;AAAA,QAC7B;AAIA,cAAM,gBAAgB,EAAE,MAAM,SAAS;AACvC,YAAI,MAAM,4DAA4D;AACtE,aAAK,aAAa,aAAa;AAG/B,aAAK;AACL,YAAI,QAAQ,6CAA6C,KAAK,gBAAgB,GAAG;AAEjF,aAAK,YAAY,SAAS,MAAM,KAAK;AACrC,aAAK,aAAa,SAAS,MAAM,KAAK,WAAW;AAAA,MACnD;AAAA;AAAA;AAAA;AAAA,MAKQ,iBAAiB,OAAyB;AAChD,aAAK,gBAAgB,MAAM;AAC3B,YAAI,QAAQ,2CAA2C,MAAM,IAAI,sBAAsB,MAAM,OAAO,UAAU,CAAC,EAAE;AAGjH,cAAM,YAAyB,CAAC;AAChC,aAAK,cAAc,MAAM,OAAO,MAAM,MAAM,SAAS;AAErD,YAAI;AAAA,UACF,4CAA4C,MAAM,IAAI,KAAK,UAAU,MAAM,oCAAoC,KAAK,SAAS,KAAK;AAAA,QACpI;AACA,aAAK,SAAS,SAAS,MAAM,EAAE,MAAM,MAAM,MAAM,OAAO,UAAU,CAAC;AAAA,MACrE;AAAA;AAAA;AAAA;AAAA,MAKQ,cAAc,OAAyB,MAAc,QAAqB,QAA0B;AAC1G,mBAAW,QAAQ,OAAO;AACxB,gBAAM,SAAS,KAAK,KAAK,YAAY;AAErC,gBAAM,WAAsB;AAAA,YAC1B,MAAM,KAAK;AAAA,YACX,IAAI;AAAA,YACJ,SAAS,SAAS,GAAG,OAAO,OAAO,IAAI,MAAM,KAAK;AAAA,YAClD,aAAa,QAAQ,QAAQ;AAAA,YAC7B,WAAW,QAAQ,MAAM;AAAA,YACzB,gBAAgB,QAAQ,WAAW;AAAA,YACnC,QAAQ,KAAK,UAAU,CAAC;AAAA,YACxB,wBAAwB,CAAC;AAAA,YACzB,kBAAkB,KAAK;AAAA,YACvB;AAAA,UACF;AAGA,cAAI,KAAK,oBAAoB,KAAK,UAAU;AAC1C,uBAAW,SAAS,KAAK,UAAU;AACjC,kBAAI,MAAM,UAAU,MAAM,OAAO,SAAS,GAAG;AAC3C,oBAAI,OAAO,MAAM,OAAO,CAAC,MAAM,YAAY,MAAM,OAAO,CAAC,EAAE,SAAS,GAAG;AACrE,2BAAS,uBAAuB,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,CAAC,CAAW,CAAC;AAAA,gBAC9E,WAAW,OAAO,MAAM,OAAO,CAAC,MAAM,UAAU;AAC9C,wBAAM,eAAe,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AACzD,2BAAS,uBAAuB,KAAK,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC;AAAA,gBACpE;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,iBAAO,KAAK,QAAQ;AAGpB,cAAI,CAAC,KAAK,oBAAoB,KAAK,UAAU;AAC3C,iBAAK,cAAc,KAAK,UAAU,MAAM,QAAQ,QAAQ;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKQ,gBAAgB,UAAwC;AAC9D,cAAM,UAAU,KAAK,iBAAiB,IAAI,SAAS,WAAW;AAC9D,YAAI,SAAS;AACX,eAAK,iBAAiB,OAAO,SAAS,WAAW;AAEjD,cAAI,SAAS,SAAS;AACpB,oBAAQ,QAAQ,SAAS,IAAI;AAAA,UAC/B,OAAO;AACL,oBAAQ,OAAO,IAAI,MAAM,SAAS,WAAW,WAAW,QAAQ,OAAO,SAAS,CAAC;AAAA,UACnF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKQ,kBAAkB,QAAsB;AAC9C,cAAM,eAAe,KAAK;AAC1B,cAAM,gBAAgB,KAAK;AAC3B,aAAK;AACL,aAAK,gBAAgB;AAGrB,YAAI,KAAK,qBAAqB;AAC5B,uBAAa,KAAK,mBAAmB;AACrC,eAAK,sBAAsB;AAAA,QAC7B;AAGA,YAAI,KAAK,sBAAsB;AAC7B,wBAAc,KAAK,oBAAoB;AACvC,eAAK,uBAAuB;AAAA,QAC9B;AAEA,aAAK,UAAU;AACf,aAAK;AACL,aAAK,WAAW,CAAC;AACjB,aAAK,gBAAgB;AAAA,UACnB,kBAAkB;AAAA,UAClB,kBAAkB;AAAA,UAClB,8BAA8B;AAAA,QAChC;AAGA,mBAAW,CAAC,KAAK,OAAO,KAAK,KAAK,kBAAkB;AAClD,kBAAQ,OAAO,IAAI,MAAM,iBAAiB,MAAM,EAAE,CAAC;AAAA,QACrD;AACA,aAAK,iBAAiB,MAAM;AAE5B,YAAI,gBAAgB,eAAe;AACjC,cAAI,QAAQ,8BAA8B,MAAM,EAAE;AAClD,eAAK,gBAAgB,SAAS,MAAM,MAAM;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC7rBA,IAyPa,kBAKA,gBAKA;AAnQb;AAAA;AAAA;AAyPO,IAAM,mBAAmB;AAKzB,IAAM,iBAAiB;AAKvB,IAAM,kBAAkB;AAAA;AAAA;;;ACnQ/B;AAAA;AAAA;AAAA,+BAAAC;AAAA,EAAA;AAAA;AAAA;AA+OA,SAAS,aAA2B;AAUpC,YAAYC,SAAQ;AACpB,YAAYC,SAAQ;AAWpB,SAAS,gBAAAC,eAAc,eAAAC,oBAAmB;AArQ1C,IA4OA,iBAIAC,qBAgCYL,wBAcA,6BAWC,+BAGP,+BAEA,uBAEe;AAhTrB;AAAA;AAAA;AA4OA,sBAAwD;AAIxD,IAAAK,sBAAgC;AAChC;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAGA;AAGA;AACA;AACA;AAEA;AAEO,IAAKL,yBAAL,kBAAKA,2BAAL;AACL,MAAAA,8CAAA,aAAU,KAAV;AACA,MAAAA,8CAAA,eAAY,KAAZ;AACA,MAAAA,8CAAA,eAAY,KAAZ;AACA,MAAAA,8CAAA,cAAW,KAAX;AACA,MAAAA,8CAAA,aAAU,KAAV;AALU,aAAAA;AAAA,iCAAA;AAcL,IAAK,8BAAL,kBAAKM,iCAAL;AACL,MAAAA,0DAAA,UAAO,KAAP;AACA,MAAAA,0DAAA,iCAA8B,KAA9B;AACA,MAAAA,0DAAA,kCAA+B,KAA/B;AACA,MAAAA,0DAAA,mCAAgC,KAAhC;AACA,MAAAA,0DAAA,mBAAgB,KAAhB;AACA,MAAAA,0DAAA,kBAAe,KAAf;AACA,MAAAA,0DAAA,kBAAe,KAAf;AACA,MAAAA,0DAAA,iBAAc,KAAd;AARU,aAAAA;AAAA,OAAA;AAWL,IAAM,gCAAgC;AAG7C,IAAM,gCAAgC;AAEtC,IAAM,wBAAwB;AAE9B,IAAqB,kBAArB,MAAqB,iBAAgB;AAAA,MACnC,mBAA6B,CAAC;AAAA,MAC9B,qBAA+B,CAAC;AAAA,MAChC,2BAAsC,CAAC;AAAA;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA,uBAA4F,oBAAI,IAAI;AAAA,MACpG,UAAiB,CAAC;AAAA,MAClB,qBAA6B,CAAC;AAAA,MAC9B,gBAA6C;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAgC;AAAA,MAChC;AAAA,MACA,oBAAoB;AAAA,MACpB;AAAA,MACA,UAAkB;AAAA,MAClB;AAAA,MACA,yBAAkC;AAAA,MAClC;AAAA,MACA,iBAAsC;AAAA,MACtC,UAAiC;AAAA;AAAA,MAGjC;AAAA;AAAA;AAAA,MAGA,kBAA2B;AAAA;AAAA;AAAA,MAG3B,2BAAoC;AAAA;AAAA;AAAA,MAGpC,6BAAsC;AAAA;AAAA;AAAA,MAGtC,sBAA+B;AAAA;AAAA;AAAA;AAAA,MAI/B,oCAA6C;AAAA;AAAA;AAAA,MAG7C,mBAA4B;AAAA;AAAA,MAG5B,cAAuB;AAAA;AAAA;AAAA;AAAA,MAKvB;AAAA;AAAA,MAGA;AAAA,MAEA,cAA4B,CAAC;AAAA,MAE7B;AAAA,MACA;AAAA,MAEA,IAAW,SAAS;AAClB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,OAAO,QAAQ;AACxB,aAAK,UAAU;AAAA,MACjB;AAAA,MAEA,IAAW,OAAO;AAChB,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,IAAW,YAAoB;AAC7B,cAAM,WAAW,KAAK,SAAS;AAC/B,eAAO,WAAW;AAAA,MACpB;AAAA,MAEA,IAAW,aAAa;AACtB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,KAAK,SAAS;AACvB,aAAK,QAAQ;AAAA,MACf;AAAA,MAEA,IAAW,aAAsB;AAC/B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,WAAW,OAAgB;AACpC,aAAK,cAAc;AAAA,MACrB;AAAA,MAEA,IAAW,qBAAqB;AAC9B,YAAI,CAAC,KAAK,sBAAsB;AAC9B,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,qBAAqB;AAAA,MACnC;AAAA,MAEA,IAAW,sBAAsB;AAC/B,YAAI,CAAC,KAAK,uBAAuB;AAC/B,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,sBAAsB;AAAA,MACpC;AAAA,MAEA,IAAW,sBAAsB;AAC/B,YAAI,CAAC,KAAK,uBAAuB;AAC/B,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,sBAAsB;AAAA,MACpC;AAAA;AAAA;AAAA;AAAA,MAKA,IAAW,uBAAgD;AACzD,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAKA,IAAW,sBAA+C;AACxD,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAKA,IAAW,uBAAgD;AACzD,eAAO,KAAK;AAAA,MACd;AAAA,MAEA;AAAA,MACA;AAAA,MAEA,cAAsB;AAAA,MAEtB,kBAAkB,IAAI,oCAAgD;AAAA,MACtE,mBAAmB,IAAI,oCAAyC;AAAA,MAChE,qBAAqB,IAAI,oCAAyC;AAAA,MAClE,iBAAiB,IAAI,oCAAyC;AAAA,MAC9D,oBAAoB,IAAI,oCAAyC;AAAA,MACjE,oBAAoB,IAAI,oCAAyC;AAAA,MACjE,mBAAmB,IAAI,oCAAyC;AAAA,MAChE,qBAAqB,IAAI,oCAAyC;AAAA,MAElE,qBAAqB,IAAI,oCAAyC;AAAA,MAClE,wBAAwB,IAAI,oCAAyC;AAAA,MAErE,iBAAiB,IAAI,oCAAyC;AAAA,MAC9D,gBAAgB,IAAI,oCAAyC;AAAA,MAC7D,mBAAmB,IAAI,oCAAyC;AAAA;AAAA,MAGhE,oBAAoB,IAAI,oCAAoD;AAAA,MAC5E,uBAAuB,IAAI,oCAAyC;AAAA,MACpE,gBAAgB,IAAI,oCAAuE;AAAA,MAC3F,iBAAiB,IAAI,oCAAyC;AAAA,MAC9D,kBAAkB,IAAI,oCAAuC;AAAA,MAC7D,qBAAqB,IAAI,oCAAwD;AAAA,MAEjF,aAAwC,CAAC;AAAA,MAEzC,YACE,MACA,KACA,KACA,YACA,4BACA;AACA,aAAK,OAAO;AACZ,aAAK,aAAa;AAClB,aAAK,8BAA8B;AACnC,aAAK,OAAO;AACZ,aAAK,OAAO;AAEZ,aAAK,SAAS,IAAI,oBAAoB;AACtC,aAAK,OAAO,oBAAoB;AAChC,aAAK,OAAO,eAAe;AAE3B,aAAK,aAAa,IAAI,wBAAwB;AAE9C,aAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,aAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACrD,aAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,aAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,aAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,aAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAAA,MACjE;AAAA,MAEA,IAAI,mBAAmB;AACrB,eACE,YAAY,wBAAwB,KAAK,UAAU,IACnD,WACA,YAAY,0BACZ,iBACA,YAAY;AAAA,MAEhB;AAAA,MAEO,YAAY,mBAA0B;AAC3C,iBAAS,IAAI,GAAG,IAAI,kBAAkB,QAAQ,KAAK;AACjD,gBAAM,SAAS,kBAAkB,CAAC;AAClC,gBAAM,WAAW,OAAO;AAExB,cAAI,CAAC,YAAY,CAAC,KAAK,WAAW,QAAQ,GAAG;AAC3C,gBAAI,UAAU;AACZ,mBAAK,WAAW,QAAQ,IAAI;AAAA,YAC9B;AAEA,iBAAK,mBAAmB,SAAS,MAAM,MAAM;AAC7C,iBAAK,QAAQ,KAAK,MAAM;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAW,WAAW;AACpB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,SAAS,aAAa;AAC/B,aAAK,YAAY;AAAA,MACnB;AAAA,MAEA,IAAW,SAAS;AAClB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,mBAAmB;AAC5B,eAAO,KAAK,kBAAkB,QAAQ;AAAA,MACxC;AAAA,MAEA,IAAW,mBAAmB;AAC5B,eAAO,KAAK,kBAAkB,QAAQ;AAAA,MACxC;AAAA,MAEA,IAAW,kBAAkB;AAC3B,eAAO,KAAK,iBAAiB,QAAQ;AAAA,MACvC;AAAA,MAEA,IAAW,oBAAoB;AAC7B,eAAO,KAAK,mBAAmB,QAAQ;AAAA,MACzC;AAAA,MAEA,IAAW,iBAAiB;AAC1B,eAAO,KAAK,gBAAgB,QAAQ;AAAA,MACtC;AAAA,MAEA,IAAW,oBAAoB;AAC7B,eAAO,KAAK,mBAAmB,QAAQ;AAAA,MACzC;AAAA,MAEA,IAAW,gBAAgB;AACzB,eAAO,KAAK,eAAe,QAAQ;AAAA,MACrC;AAAA,MAEA,IAAW,kBAAkB;AAC3B,eAAO,KAAK,iBAAiB,QAAQ;AAAA,MACvC;AAAA,MAEA,IAAW,gBAAgB;AACzB,eAAO,KAAK,eAAe,QAAQ;AAAA,MACrC;AAAA,MAEA,IAAW,eAAe;AACxB,eAAO,KAAK,cAAc,QAAQ;AAAA,MACpC;AAAA,MAEA,IAAW,kBAAkB;AAC3B,eAAO,KAAK,iBAAiB,QAAQ;AAAA,MACvC;AAAA,MAEA,IAAW,oBAAoB;AAC7B,eAAO,KAAK,mBAAmB,QAAQ;AAAA,MACzC;AAAA,MAEA,IAAW,uBAAuB;AAChC,eAAO,KAAK,sBAAsB,QAAQ;AAAA,MAC5C;AAAA,MAEA,IAAW,mBAAmB;AAC5B,eAAO,KAAK,kBAAkB,QAAQ;AAAA,MACxC;AAAA,MAEA,IAAW,sBAAsB;AAC/B,eAAO,KAAK,qBAAqB,QAAQ;AAAA,MAC3C;AAAA,MAEA,IAAW,eAAe;AACxB,eAAO,KAAK,cAAc,QAAQ;AAAA,MACpC;AAAA,MAEA,IAAW,gBAAgB;AACzB,eAAO,KAAK,eAAe,QAAQ;AAAA,MACrC;AAAA,MAEA,IAAW,iBAAiB;AAC1B,eAAO,KAAK,gBAAgB,QAAQ;AAAA,MACtC;AAAA,MAEA,IAAW,oBAAoB;AAC7B,eAAO,KAAK,mBAAmB,QAAQ;AAAA,MACzC;AAAA,MAEA,IAAW,cAAc;AACvB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,kBAAkB;AAC3B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,gBAAgB,OAAgB;AACzC,aAAK,kBAAkB;AAAA,MACzB;AAAA,MAEA,IAAW,2BAA2B;AACpC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAW,yBAAyB,OAAgB;AAClD,aAAK,2BAA2B;AAAA,MAClC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAW,iBAAqC;AAC9C,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAW,eAAe,SAA6B;AACrD,aAAK,kBAAkB;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA,MAKA,IAAW,mBAA8C;AACvD,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,qBAAqB,OAAe,MAAc;AAChD,cAAM,SAAS,UAAU,WAAW,MAAM,KAAK,CAAC;AAEhD,aAAK,WAAW,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,MACtC;AAAA,MAEA,MAAM,aAAa,WAA2B,WAAmC;AAC/E,YAAI,CAAC,WAAW;AACd,sBAAY;AAAA,QACd;AAEA,cAAM,aAAa,KAAK,UAAU,SAAS;AAE3C,cAAM,KAAK,WAAW,oBAAoB,YAAY,SAAS;AAAA,MACjE;AAAA,MAEA,MAAM,mBAAmB;AACvB,YAAI,YAAY;AAEhB,eACE,KAAK,WAAW,mBAChB,KAAK,WAAW,mBAChB,YAAY,+BACZ;AACA,gBAAM,UAAU,MAAM,CAAC;AACvB;AAAA,QACF;AAEA,YAAI,aAAa,+BAA+B;AAC9C,cAAI,QAAQ,wCAAwC;AAAA,QACtD;AAAA,MACF;AAAA,MAEA,MAAM,oBAAoB,SAAiB,SAAkB,WAAiD;AAC5G,YAAI,QAAQ,sBAAsB,OAAO;AACzC,YAAI,mBAAmB,KAAK,YAAY;AACxC,cAAM,KAAK,cAAc,OAAO;AAGhC,cAAM,WAAW,YAAY,KAAK,KAAK,YAAY,CAAC,IAAI;AACxD,YAAI,YAAY;AAEhB,YAAI,SAAS;AACX,cAAI,iBAAiB;AACrB,iBAAO,iBAAiB,KAAK,YAAY,UAAU;AACjD,kBAAM,UAAU,MAAM,CAAC;AAEvB,qBAAS,IAAI,kBAAkB,IAAI,KAAK,YAAY,QAAQ,KAAK;AAC/D,kBAAI,KAAK,YAAY,CAAC,EAAE,QAAQ,QAAQ,OAAO,KAAK,GAAG;AACrD,iCAAiB;AAAA,cACnB;AAAA,YACF;AAEA;AAAA,UACF;AAEA,cAAI,kBAAkB,GAAG;AACvB,gBAAI,SAAS,KAAK,YAAY,cAAc,EAAE;AAC9C,gBAAI,QAAQ,2BAA2B,UAAU,eAAe,MAAM;AAEtE,mBAAO;AAAA,UACT;AAAA,QACF,OAAO;AACL,iBAAO,oBAAoB,KAAK,YAAY,UAAU,YAAY,UAAU;AAC1E,kBAAM,UAAU,MAAM,CAAC;AACvB;AAAA,UACF;AAEA,cAAI,KAAK,YAAY,SAAS,kBAAkB;AAC9C,gBAAI,SAAS,KAAK,YAAY,gBAAgB,EAAE;AAChD,gBAAI,QAAQ,2BAA2B,UAAU,eAAe,MAAM;AAEtE,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,WAAW,SAAiB,WAAoB,YAAqC;AACzF,YAAI,CAAC,WAAW;AACd,sBAAY;AAAA,QACd;AAEA,cAAM,aAAa,KAAK,iBAAiB;AAEzC,aAAK,iBAAiB,UAAU,IAAI;AACpC,aAAK,mBAAmB,UAAU,IAAI;AACtC,aAAK,yBAAyB,UAAU,IAAI,eAAe;AAE3D,YAAI,eAAe,KAAK,mBAAmB;AACzC,gBAAM,KAAK,mBAAmB;AAAA,QAChC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,mBAAmB,SAAiB,WAAmC;AAC3E,eAAO,KAAK,WAAW,SAAS,WAAW,IAAI;AAAA,MACjD;AAAA,MAEA,MAAM,cAAc,aAAqB;AACvC,YAAI,KAAK,iBAAiB,MAAM;AAC9B,cAAI,QAAQ,iDAAiD,cAAc,IAAI;AAC/E;AAAA,QACF;AAGA,sBAAc,kBAAkB,gBAAgB,WAAW;AAE3D,YAAI,CAAC,kBAAkB,cAAc,WAAW,GAAG;AACjD,cAAI,QAAQ,iCAAiC,WAAW;AACxD;AAAA,QACF;AAEA,kBAAM,6BAAY,KAAK,cAAc,cAAc,IAAI;AAAA,MACzD;AAAA,MAEA,MAAM,sBAAsB;AAC1B,YAAI,CAAC,KAAK,uBAAuB;AAC/B,eAAK,wBAAwB,IAAI;AAAA,YAC/B,YAAY,wBAAwB,KAAK,UAAU,IAAI;AAAA,YACvD;AAAA,UACF;AAEA,gBAAM,KAAK,sBAAsB,WAAW,aAAa;AAAA,QAC3D;AAEA,YAAI,CAAC,KAAK,uBAAuB;AAC/B,eAAK,wBAAwB,IAAI;AAAA,YAC/B,YAAY,wBAAwB,KAAK,UAAU,IAAI;AAAA,YACvD;AAAA,UACF;AAEA,gBAAM,KAAK,sBAAsB,WAAW,aAAa;AAAA,QAC3D;AAEA,YAAI,CAAC,KAAK,sBAAsB;AAC9B,eAAK,uBAAuB,IAAI,YAAY,KAAK,kBAAkB,EAAE;AAErE,gBAAM,KAAK,qBAAqB,WAAW,aAAa;AAAA,QAC1D;AAAA,MACF;AAAA,MAEA,MAAM,2BAA2B;AAG/B,YAAI,KAAK,mBAAmB,KAAK,KAAK,sBAAsB,KAAK,sBAAsB;AACrF,iBAAO,MAAM,KAAK,oBAAoB;AAAA,QACxC;AAGA,cAAM,mCAAsC,eAAW,KAAK,4BAA4B,QAAQ;AAEhG,YAAI,CAAC,kCAAkC;AACrC,iBAAO;AAAA,QACT;AAEA,cAAM,UAAa,gBAAY,KAAK,4BAA4B,QAAQ;AAExE,YAAI;AACJ,YAAI,kBAAkB,IAAI,KAAK,GAAG,GAAG,CAAC;AAEtC,cAAM,SAAS,MAAM,KAAK,KAAK,aAAa;AAAA,UAC1C,2BAA2B,KAAK,4BAA4B,WAAW;AAAA,QACzE;AAEA,mBAAW,UAAU,SAAS;AAC5B,cAAI,OAAO,WAAW,OAAO,KAAK,OAAO,WAAW,IAAI;AACtD,kBAAM,UAAU,OAAO,UAAU,CAAC;AAElC,gBAAI,UAAU,UAAU,OAAO,GAAG;AAChC,oBAAM,WACJ,YAAY,wBAAwB,KAAK,4BAA4B,QAAQ,IAC7E,SACA,YAAY;AAEd,oBAAM,gBAAgB,WAAW;AAEjC,oBAAM,kBAAqB,eAAW,aAAa;AAEnD,oBAAM,YAAY,UAAU,eAAe,OAAO;AAElD,kBAAI,mBAAmB,UAAU,QAAQ,IAAI,gBAAgB,QAAQ,GAAG;AACtE,kCAAkB;AAClB,kCAAkB;AAAA,cACpB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,iBAAiB;AACnB,gBAAM,wBAAwB,KAAK,4BAA4B,QAAQ,eAAe;AAEtF,cAAI,yBAAyB,KAAK,sBAAsB;AACtD,kBAAM,KAAK,KAAK,aAAa,mBAAmB,sBAAsB,sBAAsB,OAAO,GAAG;AAEtG,kBAAO,sBAAqC,gBAAgB,KAAK,qBAAqB,UAAU;AAEhG,kBAAM,KAAK,KAAK,aAAa;AAAA,cAC3B;AAAA,cACA,gCAAgC,sBAAsB,OAAO;AAAA,YAC/D;AAEA,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,cAAM,KAAK,KAAK,aAAa,qBAAqB,QAAQ,gCAAgC;AAC1F,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAKA,MAAc,sBAAwC;AACpD,YAAI,CAAC,KAAK,mBAAmB,CAAC,KAAK,KAAK,sBAAsB,CAAC,KAAK,sBAAsB;AACxF,gBAAM,IAAI,MAAM,gEAAgE;AAAA,QAClF;AAEA,cAAM,QAAQ,KAAK,KAAK,mBAAmB,SAAS,KAAK,eAAe;AACxE,YAAI,CAAC,OAAO;AACV,cAAI,QAAQ,kCAAkC,KAAK,eAAe,EAAE;AACpE,iBAAO;AAAA,QACT;AAEA,cAAM,MAAM,YAAY;AAExB,YAAI,MAAM,QAAQ,WAAW,GAAG;AAC9B,cAAI,QAAQ,8BAA8B,KAAK,eAAe,EAAE;AAChE,iBAAO;AAAA,QACT;AAGA,cAAM,eAAe,MAAM,QAAQ,MAAM,QAAQ,SAAS,CAAC;AAE3D,cAAM,SAAS,MAAM,KAAK,KAAK,aAAa;AAAA,UAC1C,4BAA4B,MAAM,YAAY,MAAM,KAAK,eAAe;AAAA,QAC1E;AAEA,YAAI;AAEF,gBAAM,KAAK,KAAK,mBAAmB;AAAA,YACjC,KAAK;AAAA,YACL,aAAa;AAAA,YACb,KAAK,qBAAqB,WAAW;AAAA,UACvC;AAEA,gBAAM,KAAK,KAAK,aAAa,qBAAqB,QAAQ,8BAA8B,MAAM,YAAY,GAAG;AAE7G,iBAAO;AAAA,QACT,SAASC,QAAY;AACnB,cAAI,MAAM,oCAAoCA,OAAM,OAAO,EAAE;AAC7D,gBAAM,KAAK,KAAK,aAAa,qBAAqB,QAAQ,4BAA4BA,OAAM,OAAO,EAAE;AACrG,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,MAAM,mBAAmB,SAAkB,WAAoC;AAC7E,YAAI,WAAW,iBAAiB,UAAU,cAAc,mBAAmB;AACzE,mBAAS,IAAI,GAAG,IAAI,UAAU,cAAc,kBAAkB,QAAQ,KAAK;AACzE,kBAAM,aAAa,UAAU,cAAc,kBAAkB,CAAC;AAE9D,oBAAQ,uBAAuB,UAAU;AAEzC,gBAAI,WAAW,uBAAuB,SAAS,GAAG;AAChD,sBAAQ,qCAAqC;AAAA,YAC/C;AAEA,gBAAI,WAAW,uBAAuB,SAAS,GAAG;AAChD,sBAAQ,qBAAqB;AAAA,YAC/B;AAAA,UACF;AAAA,QACF;AAEA,YAAI,aAAa,UAAU,eAAe;AAExC,cACE,UAAU,cAAc,4BAA4B,UACpD,UAAU,cAAc,wBAAwB,UAAU,GAC1D;AAEA,oBAAQ,mBAAmB,WAAW,aAAa;AAAA,UACrD;AAAA,QACF;AAEA,cAAM,QAAQ,KAAK;AAAA,MACrB;AAAA,MAEA,MAAM,mBAAmBC,QAA6C;AACpE,YAAI,CAAI,eAAWA,MAAI,GAAG;AACxB,iBAAO;AAAA,QACT;AAEA,cAAM,UAAU,MAAM,YAAY,eAAeA,MAAI;AAErD,YACE,mBAAmB,aAClBA,OAAK,SAAS,SAAS,KACtBA,OAAK,SAAS,UAAU,KACxBA,OAAK,SAAS,UAAU,KACxBA,OAAK,SAAS,MAAM,KACpBA,OAAK,SAAS,YAAY,IAC5B;AACA,gBAAM,KAAK,MAAM,WAAW,aAAa,OAAO;AAEhD,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,YAAY,WAAoC;AACpD,cAAM,qBAAqB,IAAI,YAAY,KAAK,kBAAkB,EAAE;AAEpE,cAAM,kBAAkB,WAAW,eAAe;AAElD,YAAI,iBAAiB;AACnB,cAAI,SAAS,MAAM,YAAY,2BAA2B,eAAe;AAEzE,cAAI,QAAQ;AACV,kBAAM,iBAAiB,aAAa,QAAQ,mBAAmB,YAAY,OAAO,OAAO,KAAK;AAAA,UAChG;AAAA,QACF;AAEA,cAAM,UAAU,IAAI,QAAQ;AAC5B,gBAAQ,SAAS,mBAAmB;AAEpC,cAAM,QAAQ,cAAc,KAAK;AAEjC,cAAM,KAAK,mBAAmB,SAAS,SAAS;AAAA,MAClD;AAAA,MAEA,MAAM,sBAAsB,WAAoC;AAC9D,YAAI,WAAW,uBAAuB;AACpC,cAAI,SAAS,MAAM,YAAY,2BAA2B,UAAU,qBAAqB;AAEzF,cAAI,QAAQ;AACV,kBAAM,KAAK,OAAO,QAAQ,OAAO,KAAK;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,yBAAkC,OAA0C;AAC5F,YAAI,UAAU,QAAW;AACvB,kBAAQ;AAAA,YACN,eAAe,KAAK,KAAK,aAAa;AAAA,YACtC;AAAA,YACA,QAAQ,KAAK,KAAK;AAAA,UACpB;AAAA,QACF;AAEA,YACE,KAAK,YAAY,qBACjB,KAAK,YAAY,mBACjB,KAAK,YAAY,kBACjB;AACA,cAAI,yBAAyB;AAC3B,kBAAM,KAAK,WAAW;AAAA,UACxB,OAAO;AACL;AAAA,UACF;AAAA,QACF;AAEA,YAAI,WAAW,KAAK;AAEpB,aAAK,kBAAkB,SAAS,MAAM,EAAE;AACxC,aAAK,UAAU;AAEf,cAAM,KAAK,IAAI,YAAY,UAAU,EAAE;AACvC,YAAI,MAAM,eAAe,sCAAyC;AAChE,eAAK,kBAAkBJ,aAAY,KAAK,iBAAiB,IAAM;AAAA,QACjE,WAAW,MAAM,eAAe,sCAAyC;AACvE,eAAK,kBAAkBA,aAAY,KAAK,iBAAiB,GAAM;AAAA,QACjE;AAEA,YAAI,KAAK,YAAY,GAAG;AACtB,gBAAM,KAAK,oBAAoB;AAE/B,eAAK,WAAW,eAAe,GAAG;AAClC,eAAK,WAAW,YAAY;AAC5B,eAAK,WAAW,wBAAwB;AAExC,cAAI,KAAK,OAAO;AACd,iBAAK,WAAW,aAAa,KAAK;AAAA,UACpC;AAEA,cAAI,SAAS,MAAM,eAAe;AAChC,iBAAK,WAAW,uBAAuB,MAAM,aAAa;AAG1D,gBAAI,MAAM,cAAc,mBAAmB,QAAW;AACpD,mBAAK,kBAAkB,MAAM,cAAc;AAAA,YAC7C;AACA,gBAAI,MAAM,cAAc,4BAA4B,QAAW;AAC7D,mBAAK,2BAA2B,MAAM,cAAc;AAAA,YACtD;AACA,gBAAI,MAAM,cAAc,aAAa,QAAW;AAC9C,mBAAK,cAAc,MAAM,cAAc;AAAA,YACzC;AAAA,UACF;AAEA,gBAAM,KAAK,WAAW,UAAU;AAEhC,gBAAM,eAAe,GAAG,WAAW,aAAa,QAAQ;AACxD,gBAAM,aAAa,aAAa;AAEhC,eAAK,OAAO,qBAAqB;AAEjC,eAAK,OAAO,WAAW;AAAA,QACzB;AAGA,mBAAW,YAAY,wBAAwB,QAAQ;AAEvD,aAAK,KAAK,UAAU,mBAAmB,QAAQ;AAG/C,cAAM,iBAAoB,aAAS,MAAM,UAAU,uBAAuB;AAC1E,cAAM,WAAW,WAAW;AAG5B,YAAI,CAAI,eAAW,QAAQ,GAAG;AAC5B,gBAAM,WAAW,kCAAkC,QAAQ;AAC3D,cAAI,KAAK,QAAQ;AACjB,eAAK,UAAU;AACf,eAAK,eAAe,SAAS,MAAM,QAAQ;AAC3C;AAAA,QACF;AAGA,YAAO,aAAS,MAAM,WAAW,CAAC,OAAO,+BAA+B;AACtE,cAAI,QAAQ,oCAAoC,WAAW,KAAK;AAEhE,gBAAM,YAAY,MAAM,eAAe,4BAA4B,QAAQ;AAE3E,cAAI,CAAC,UAAU,SAAS;AACtB,kBAAM,WACJ,6CAA6C,QAAQ,aAC1C,UAAU,MAAM,KAAK,UAAU,SAAS,EAAE;AAAA;AAAA;AAGvD,gBAAI,KAAK,QAAQ;AACjB,iBAAK,UAAU;AACf,iBAAK,eAAe,SAAS,MAAM,QAAQ;AAC3C;AAAA,UACF;AAEA,cAAI,CAAC,UAAU,mBAAmB;AAChC,kBAAM,WACJ,mCAAmC,QAAQ,oDAChC,UAAU,UAAU,SAAS;AAAA;AAAA;AAG1C,gBAAI,KAAK,QAAQ;AACjB,iBAAK,UAAU;AACf,iBAAK,eAAe,SAAS,MAAM,QAAQ;AAC3C;AAAA,UACF;AAEA,cAAI,QAAQ,uBAAuB,UAAU,MAAM,EAAE;AAAA,QACvD,WAAW,OAAO,+BAA+B;AAC/C,cAAI,QAAQ,gFAAgF;AAAA,QAC9F;AAEA,YAAI,QAAQ,0BAA0B,QAAQ;AAG9C,aAAK,oBAAoB,QAAQ;AAGjC,cAAM,eAA0D;AAAA,UAC9D,KAAK;AAAA,QACP;AACA,YAAO,aAAS,MAAM,SAAS;AAC7B,uBAAa,MAAM;AAAA,YACjB,GAAG,QAAQ;AAAA,YACX,iBAAiB;AAAA,UACnB;AAAA,QACF;AAEA,cAAM,OAAiB,CAAC;AACxB,YAAI,KAAK,aAAa;AACpB,eAAK,KAAK,aAAa;AAAA,QACzB;AAEA,cAAM,eAAe,MAAM,UAAU,MAAM,YAAY;AACvD,aAAK,UAAU;AAEf,qBAAa,GAAG,SAAS,KAAK,WAAW;AAEzC,aAAK,eAAe,aAAa;AACjC,aAAK,iBAAiB;AAGtB,YAAI,aAAa,KAAK;AACpB,eAAK,cAAc,UAAU,aAAa,GAAG;AAAA,QAC/C;AAEA,aAAK,aAAa,aAAa,MAAM;AACrC,aAAK,aAAa,aAAa,MAAM;AAErC,YAAI;AAAA,UACF,aACE,KAAK,OACL,WACA,WACA,gBACC,KAAK,cAAc,mBAAmB,MACvC,eACA,KAAK,UACL;AAAA,QACJ;AAAA,MACF;AAAA,MAEA,MAAM,qBAAqB;AACzB,YAAI,KAAK,oBAAoB,KAAK,iBAAiB,QAAQ;AACzD,eAAK;AAEL,gBAAM,cAAc,KAAK,oBAAoB;AAE7C,gBAAM,cAAc,KAAK,iBAAiB,WAAW;AACrD,gBAAM,aAAa,KAAK,yBAAyB,WAAW;AAG5D,cAAI,CAAC,YAAY;AACf,gBAAI,QAAQ,aAAa,KAAK,oBAAoB,WAAW,WAAW;AAAA,UAC1E;AAEA,gBAAM,KAAK,cAAc,WAAW;AAEpC,gBAAM,KAAK,mBAAmB;AAAA,QAChC;AAAA,MACF;AAAA,MAEA,MAAM,kBAAkB;AACtB,YACE,KAAK,kBAAkB,gBACvB,KAAK,kBAAkB,qBACvB;AACA,eAAK,gBAAgB;AAIrB,cAAI,KAAK,qBAAqB;AAC5B,YAAAD,cAAa,KAAK,mBAAmB;AAAA,UACvC;AACA,eAAK,sBAAsB,WAAW,YAAY;AAChD,gBACE,KAAK,kBAAkB,gBACvB,KAAK,kBAAkB,qBACvB;AACA,kBAAI,MAAM,yDAAyD;AACnE,mBAAK,gBAAgB;AACrB,oBAAM,KAAK,WAAW,aAAa;AAAA,YACrC;AAAA,UACF,GAAG,GAAK;AAER,gBAAM,KAAK,WAAW,WAAW;AAAA,QACnC;AAAA,MACF;AAAA,MAEA,MAAM,SAAS,gBAAyB;AAGtC,YAAI,KAAK,mBAAmB,KAAK,KAAK,sBAAsB,KAAK,sBAAsB;AACrF,gBAAM,KAAK,gBAAgB,cAAc;AACzC;AAAA,QACF;AAGA,cAAM,YAAY,UAAU,UAAU,WAAW,oBAAI,KAAK,CAAC;AAE3D,cAAM,eAAe,KAAK,4BAA4B,aAAa,SAAS;AAE5E,cAAM,aAAa,aAAa;AAEhC,cAAM,gBAAoC,CAAC;AAE3C,YAAI,gBAAgB;AAClB,gBAAM,QAAQ,eAAe,MAAM,IAAI;AAEvC,mBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,kBAAM,WAAW,MAAM,CAAC,EAAE,MAAM,GAAG;AAEnC,gBAAI,SAAS,WAAW,GAAG;AACzB,kBAAI,OAAO;AACX,kBAAIK,SAAO,SAAS,CAAC;AAErB,oBAAM,aAAaA,OAAK,QAAQ,GAAG;AAEnC,kBAAI,aAAa,GAAG;AAClB,gBAAAA,SAAOA,OAAK,UAAU,aAAa,CAAC;AAAA,cACtC;AAEA,kBAAI;AACF,uBAAO,SAAS,SAAS,CAAC,CAAC;AAAA,cAC7B,SAAS,GAAG;AACV,oBAAI,QAAQ,uCAAuC,CAAC;AAAA,cACtD;AAEA,kBAAI,SAAS,UAAa,aAAa,GAAG;AACxC,8BAAc,KAAK,EAAE,MAAMA,QAAM,KAAW,CAAC;AAAA,cAC/C;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,KAAK,sBAAsB;AAC7B,cAAI;AAAA,YACF,0BAA0B,KAAK,qBAAqB,WAAW,WAAW,WAAW,aAAa,WAAW;AAAA,UAC/G;AAEA,gBAAO,KAAK,qBAAqB,WAA0B;AAAA,YACzD,aAAa;AAAA,YACb;AAAA,YACA,mBAAmB;AAAA,YACnB,KAAK,KAAK;AAAA,YACV,iBAAiB;AAAA,cACf,iBAAiB;AAAA,gBACf,KAAK,4BAA4B,OAAO,iBAAiB,0BAA0B;AAAA,cACrF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,eAAe;AACjB,gBAAO,aAA4B,cAAc,WAAW,aAAa;AAAA,QAC3E;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAc,gBAAgB,gBAAyB;AACrD,YAAI,CAAC,KAAK,mBAAmB,CAAC,KAAK,KAAK,sBAAsB,CAAC,KAAK,sBAAsB;AACxF,gBAAM,IAAI,MAAM,+DAA+D;AAAA,QACjF;AAGA,cAAM,gBAAoC,CAAC;AAE3C,YAAI,gBAAgB;AAClB,gBAAM,QAAQ,eAAe,MAAM,IAAI;AAEvC,mBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,kBAAM,WAAW,MAAM,CAAC,EAAE,MAAM,GAAG;AAEnC,gBAAI,SAAS,WAAW,GAAG;AACzB,kBAAI,OAAO;AACX,kBAAIA,SAAO,SAAS,CAAC;AAErB,oBAAM,aAAaA,OAAK,QAAQ,GAAG;AAEnC,kBAAI,aAAa,GAAG;AAClB,gBAAAA,SAAOA,OAAK,UAAU,aAAa,CAAC;AAAA,cACtC;AAEA,kBAAI;AACF,uBAAO,SAAS,SAAS,CAAC,CAAC;AAAA,cAC7B,SAAS,GAAG;AACV,oBAAI,QAAQ,uCAAuC,CAAC;AAAA,cACtD;AAEA,kBAAI,SAAS,UAAa,aAAa,GAAG;AACxC,8BAAc,KAAK,EAAE,MAAMA,QAAM,KAAW,CAAC;AAAA,cAC/C;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,QAAQ,qCAAqC,KAAK,eAAe,EAAE;AAGvE,cAAM,aACJ,mBAAmB;AAIrB,cAAM,SAAS,MAAM,KAAK,KAAK,mBAAmB;AAAA,UAChD,KAAK;AAAA,UACL,KAAK,qBAAqB,WAAW;AAAA,UACrC;AAAA,YACE;AAAA,YACA,qBAAqB,cAAc,SAAS,IAAI,gBAAgB;AAAA,YAChE,OAAO,2CAA0C,2BAA2B;AAAA,UAC9E;AAAA,QACF;AAEA,aAAK,oBAAoB;AAEzB,YAAI,OAAO,OAAO;AAChB,cAAI;AAAA,YACF,4BAA4B,OAAO,MAAM,QAAQ,mBAAmB,OAAO,MAAM,iBAAiB,mBAC7F,OAAO,MAAM,UAAU,mBAAmB,OAAO,MAAM,UAAU;AAAA,UACxE;AAAA,QACF,OAAO;AACL,cAAI,QAAQ,4BAA4B,OAAO,UAAU,YAAY,QAAQ,EAAE;AAAA,QACjF;AAAA,MACF;AAAA,MAEA,MAAM,aAAa;AACjB,YAAI,KAAK,mBAAmB,MAAM;AAChC,cAAI,QAAQ,sBAAsB,KAAK,OAAO,MAAM;AACpD,eAAK,kBAAkB,SAAS,MAAM,MAAM;AAE5C,gBAAM,OAAO,KAAK;AAClB,gBAAM,KAAK,cAAc,MAAM;AAG/B,gBAAM,iBAAiB,WAAW,MAAM;AACtC,gBAAI,KAAK,mBAAmB,QAAQ,KAAK,KAAK;AAC5C,kBAAI,MAAM,WAAW,KAAK,IAAI,0DAA0D,KAAK,GAAG,EAAE;AAClG,kBAAI;AACF,wBAAQ,KAAK,KAAK,KAAK,SAAS;AAAA,cAClC,QAAQ;AAAA,cAER;AAAA,YACF;AAAA,UACF,GAAG,GAAK;AAGR,eAAK,KAAK,QAAQ,MAAML,cAAa,cAAc,CAAC;AAAA,QACtD;AAAA,MACF;AAAA,MAEA,OAAwB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhC,oBAAoB,UAAwB;AAClD,cAAM,cAAc,WAAW,iBAAgB;AAE/C,YAAI;AACF,cAAI,CAAI,eAAW,WAAW,GAAG;AAC/B;AAAA,UACF;AAEA,gBAAM,SAAY,iBAAa,aAAa,MAAM,EAAE,KAAK;AACzD,gBAAM,MAAM,SAAS,QAAQ,EAAE;AAE/B,cAAI,CAAC,OAAO,MAAM,GAAG,GAAG;AACtB,iBAAK,eAAe,QAAQ;AAC5B;AAAA,UACF;AAGA,cAAI,KAAK,kBAAkB,KAAK,eAAe,QAAQ,KAAK;AAC1D;AAAA,UACF;AAGA,cAAI;AACF,oBAAQ,KAAK,KAAK,CAAC;AAAA,UACrB,QAAQ;AAEN,iBAAK,eAAe,QAAQ;AAC5B;AAAA,UACF;AAIA,cAAO,aAAS,MAAM,SAAS;AAC7B,gBAAI;AACF,oBAAM,OAAU,iBAAa,SAAS,GAAG,SAAS,MAAM,EAAE,KAAK;AAC/D,kBAAI,SAAS,kBAAkB;AAC7B,oBAAI,MAAM,OAAO,GAAG,YAAY,IAAI,yDAAoD;AACxF,qBAAK,eAAe,QAAQ;AAC5B;AAAA,cACF;AAAA,YACF,QAAQ;AAEN,mBAAK,eAAe,QAAQ;AAC5B;AAAA,YACF;AAAA,UACF;AAEA,cAAI,MAAM,6CAA6C,GAAG,aAAa,QAAQ,EAAE;AACjF,cAAI;AACF,oBAAQ,KAAK,KAAK,SAAS;AAAA,UAC7B,QAAQ;AAAA,UAER;AAEA,eAAK,eAAe,QAAQ;AAAA,QAC9B,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,MAEQ,cAAc,UAAkB,KAAmB;AACzD,YAAI;AACF,UAAG,kBAAc,WAAW,iBAAgB,eAAe,IAAI,SAAS,GAAG,MAAM;AAAA,QACnF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,MAEQ,eAAe,UAAwB;AAC7C,YAAI;AACF,gBAAM,cAAc,WAAW,iBAAgB;AAC/C,cAAO,eAAW,WAAW,GAAG;AAC9B,YAAG,eAAW,WAAW;AAAA,UAC3B;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,MAEA,MAAc,cAAc;AAC1B,YAAI,KAAK,gBAAgB;AACvB,eAAK,KAAK,aAAa,mBAAmB,iCAAiC;AAE3E,eAAK,mBAAmB,KAAK,oBAAI,KAAK,CAAC;AAEvC,gBAAM,eAAe,KAAK;AAE1B,eAAK,iBAAiB;AAEtB,gBAAM,KAAK,mBAAmB;AAK9B,gBAAM,eAAe,KAAK,gBAAgB,GAAK;AAE/C,cAAI,eAAe,GAAG;AAEpB,kBAAM,YAAY,KAAK,IAAI,MAAO,KAAK,IAAI,GAAG,YAAY,GAAG,IAAK;AAElE,iBAAK,KAAK,aAAa;AAAA,cACrB,wBAAwB,YAAY,GAAI,oBAAoB,YAAY;AAAA,YAC1E;AAEA,gBAAI,iBAAiB,iBAA+B;AAClD,oBAAM,UAAU,MAAM,SAAS;AAC/B,oBAAM,KAAK,YAAY,MAAM,MAAS;AAAA,YACxC;AAAA,UACF,OAAO;AACL,iBAAK,KAAK,aAAa;AAAA,cACrB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEQ,gBAAgB,cAAsB;AAC5C,cAAM,MAAM,oBAAI,KAAK;AAErB,YAAI,UAAU;AAEd,iBAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,QAAQ,KAAK;AACvD,cAAI,IAAI,QAAQ,IAAI,KAAK,mBAAmB,CAAC,EAAE,QAAQ,IAAI,cAAc;AACvE;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,qBAAqB;AACzB,YAAI,KAAK,mBAAmB,MAAM;AAChC,gBAAM,OAAO,KAAK;AAElB,eAAK,iBAAiB;AAEtB,oBAAM,wBAAO,IAAI;AAEjB,gBAAM,KAAK,mBAAmB;AAAA,QAChC;AAAA,MACF;AAAA,MAEA,MAAM,qBAAqB;AACzB,YAAI,KAAK,iBAAiB;AACxB,UAAAA,cAAa,KAAK,eAAe;AACjC,eAAK,kBAAkB;AAAA,QACzB;AAGA,YAAI,KAAK,qBAAqB;AAC5B,UAAAA,cAAa,KAAK,mBAAmB;AACrC,eAAK,sBAAsB;AAAA,QAC7B;AAGA,aAAK,0BAA0B;AAG/B,aAAK,sBAAsB;AAG3B,aAAK,eAAe,YAAY,wBAAwB,KAAK,UAAU,CAAC;AAExE,cAAM,KAAK,SAAS;AAEpB,aAAK,iBAAiB,SAAS,MAAM,MAAM;AAC3C,aAAK,UAAU;AACf,YAAI,QAAQ,aAAa,KAAK,OAAO,YAAY;AAAA,MACnD;AAAA,MAEA,MAAM,OAAO,YAAqB,SAAkB,cAAwB;AAC1E,cAAM,iBAAiB,KAAK;AAC5B,YAAI,kBAAkB;AACtB,YAAI,eAAe;AACnB,YAAI,aAAa;AAGjB,YAAI,UAAU,+BAA+B,WAAW,WAAW,MAAM;AACzE,cAAM,KAAK,KAAK,cAAc,mBAAmB,wBAAwB;AAEzE,cAAM,WAAW,KAAK,IAAI;AAG1B,YAAI,WAAW,QAAQ,OAAO,GAAG;AAC/B,uBAAa,WAAW,QAAQ,OAAO;AAEvC,gBAAM,WAAW,KAAK,IAAI;AAAA,QAC5B,WAAW,WAAW,QAAQ,KAAK,GAAG;AACpC,uBAAa,WAAW,QAAQ,KAAK;AAErC,gBAAM,WAAW,KAAK,IAAI;AAAA,QAC5B,WAAW,WAAW,QAAQ,MAAM,GAAG;AACrC,uBAAa,WAAW,QAAQ,MAAM;AAEtC,gBAAM,WAAW,KAAK,IAAI;AAAA,QAC5B;AAEA,YAAI,CAAC,KAAK,KAAK,cAAc;AAC3B,cAAI,KAAK,gEAAgE;AACzE;AAAA,QACF;AAUA,YAAI,WAAW,KAAK,cAAc,KAAK,iBAAiB;AAExD,YAAI,mBAAmB,iBAA+B;AACpD,qBAAW;AAAA,QACb;AAEA,YAAI,UAAU;AACZ,cAAI,QAAQ,yDAAyD,KAAK,cAAc,GAAG;AAAA,QAC7F;AAEA,YAAI,QAAQ,qBAAqB,WAAW,WAAW,GAAG;AAE1D,YAAI,aAAa,IAAIM,SAAQ,KAAK,KAAK,cAAc,UAAU,IAAI;AACnE,mBAAW,iBAAiB,UAAU;AACtC,cAAM,WAAW,2BAA2B;AAG5C,YAAI,WAAW,iBAAiB;AAC9B,uBAAa,WAAW;AAExB,uBAAa,IAAIA,SAAQ,KAAK,KAAK,cAAc,UAAU,IAAI;AAC/D,qBAAW,iBAAiB,UAAU;AAEtC,gBAAM,WAAW,2BAA2B;AAAA,QAC9C;AAEA,YAAI,uCAAuC;AAC3C,YAAI,uCAAuC;AAE3C,YAAI,UAAU;AACZ,cAAI,KAAK,uBAAuB;AAC9B,mDAAuC,IAAI,WAAW;AACtD,kBAAM,qCAAqC,OAAO,KAAK,sBAAsB,UAAU;AAAA,UACzF;AACA,cAAI,KAAK,uBAAuB;AAC9B,mDAAuC,IAAI,WAAW;AACtD,kBAAM,qCAAqC,OAAO,KAAK,sBAAsB,UAAU;AAAA,UACzF;AAAA,QACF;AAEA,aAAK,UAAU;AAEf,cAAM,KAAK,oBAAoB;AAK/B,YAAI,CAAC,SAAS;AACZ,cAAI,KAAK,uBAAuB;AAC9B,gBAAI,QAAQ,wDAAwD;AACpE,kBAAM,KAAK,sBAAsB,WAAW,wBAAwB;AACpE,kBAAM,KAAK,sBAAsB,WAAW,aAAa;AAAA,UAC3D;AAEA,cAAI,KAAK,uBAAuB;AAC9B,gBAAI,QAAQ,wDAAwD;AACpE,kBAAM,KAAK,sBAAsB,WAAW,wBAAwB;AACpE,kBAAM,KAAK,sBAAsB,WAAW,aAAa;AAAA,UAC3D;AAMA,cAAI,KAAK,sBAAsB;AAC7B,kBAAM,cAAc,WAAW;AAC/B,kBAAM,gBAAgB,IAAI,QAAQ;AAClC,0BAAc,SAAS,KAAK,qBAAqB;AAEjD,kBAAM,cAAc,cAAc,KAAK;AAEvC,kBAAM,aAAa,cAAc,gBAAgB,WAAW;AAG5D,gBACE,cAAc,sBACd,cAAc,mBAAmB,SAAS,KAC1C,CAAC,YACD;AACA,kBAAI,QAAQ,8DAAyD;AACrE,oBAAM,KAAK,qBAAqB,WAAW,wBAAwB;AACnE,oBAAM,KAAK,qBAAqB,WAAW,aAAa;AAAA,YAC1D;AAAA,UACF;AAAA,QACF;AAEA,YAAI,KAAK,yBAAyB,KAAK,sBAAsB;AAC3D,cAAI,aAAa;AAEjB,gBAAM,WAAW,MAAM,WAAW,6BAA6B;AAE/D,cAAI,aAAa,MAAM;AACrB,yBAAa,iBAAiB,uBAAuB,QAAQ;AAC7D,gBAAI,QAAQ,2CAA2C,aAAa,GAAG;AAEvE,kBAAM,4BAA4B,KAAK,sBAAsB,WAAW,aAAa,UAAU;AAE/F,kBAAM,0BAA0B,aAAa;AAU7C,+BAAmB,MAAM,iBAAiB;AAAA,cACxC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAEA,cAAI,WAAW,QAAQ,4BAA4B,GAAG;AACpD,kBAAM,kBAAkB,WAAW,QAAQ,4BAA4B;AAEvE,gBAAI;AAAA,cACF,4CACE,gBAAgB,WAChB,WACA,KAAK,sBAAsB,WAAW,WACtC;AAAA,YACJ;AACA,+BAAmB,MAAM,iBAAiB;AAAA,cACxC;AAAA,cACA,KAAK,sBAAsB;AAAA,cAC3B;AAAA,cACA;AAAA,cACA;AAAA,cACA,aAAa,CAAC,UAAU,IAAI;AAAA,YAC9B;AAAA,UACF;AAEA,cAAI,WAAW,QAAQ,gBAAgB,GAAG;AACxC,kBAAM,kBAAkB,WAAW,QAAQ,gBAAgB;AAU3D,+BAAmB,MAAM,iBAAiB;AAAA,cACxC;AAAA,cACA,KAAK,sBAAsB;AAAA,cAC3B;AAAA,cACA;AAAA,cACA;AAAA,cACA,aAAa,CAAC,UAAU,IAAI;AAAA,YAC9B;AAAA,UACF;AAUA,gBAAM,KAAK,sBAAsB,WAAW,QAAQ;AAAA,QACtD;AAEA,YAAI,KAAK,yBAAyB,KAAK,sBAAsB;AAC3D,cAAI,aAAa;AAEjB,gBAAM,WAAW,MAAM,WAAW,6BAA6B;AAE/D,cAAI,aAAa,MAAM;AACrB,yBAAa,iBAAiB,uBAAuB,QAAQ;AAE7D,kBAAM,4BAA4B,KAAK,sBAAsB,WAAW,aAAa,UAAU;AAE/F,kBAAM,0BAA0B,aAAa;AAU7C,+BAAmB,MAAM,iBAAiB;AAAA,cACxC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAEA,cAAI,WAAW,QAAQ,4BAA4B,GAAG;AACpD,kBAAM,kBAAkB,WAAW,QAAQ,4BAA4B;AAEvE,gBAAI;AAAA,cACF,4CACE,gBAAgB,WAChB,WACA,KAAK,sBAAsB,WAAW,WACtC;AAAA,YACJ;AACA,+BAAmB,MAAM,iBAAiB;AAAA,cACxC;AAAA,cACA,KAAK,sBAAsB;AAAA,cAC3B;AAAA,cACA;AAAA,cACA;AAAA,cACA,aAAa,CAAC,UAAU,IAAI;AAAA,YAC9B;AAAA,UACF;AAEA,cAAI,WAAW,QAAQ,gBAAgB,GAAG;AACxC,kBAAM,kBAAkB,WAAW,QAAQ,gBAAgB;AAU3D,+BAAmB,MAAM,iBAAiB;AAAA,cACxC;AAAA,cACA,KAAK,sBAAsB;AAAA,cAC3B;AAAA,cACA;AAAA,cACA;AAAA,cACA,aAAa,CAAC,UAAU,IAAI;AAAA,YAC9B;AAAA,UACF;AAUA,gBAAM,KAAK,sBAAsB,WAAW,QAAQ;AAAA,QACtD;AAEA,YAAI,KAAK,sBAAsB;AAC7B,gBAAM,cAAc,MAAM,WAAW,sBAAsB;AAE3D,cAAI,gBAAgB,MAAM;AACxB,gBAAI,CAAC,YAAY,UAAU;AACzB,oBAAM,YAAY,KAAK;AAAA,YACzB;AAEA,gBAAI,YAAY,YAAY,GAAG;AAE7B,iCAAmB,MAAM,iBAAiB;AAAA,gBACxC;AAAA,gBACA,KAAK,qBAAqB;AAAA,gBAC1B;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AACA,2BAAa;AACb,mBAAK,qBAAqB,WAAW,QAAQ;AAAA,YAC/C;AAAA,UACF;AAAA,QACF;AAEA,YAAI,6BAA6B;AAEjC,YAAI,YAAY,KAAK,yBAAyB,wCAAwC,KAAK,cAAc,GAAG;AAC1G,uCAA6B,IAAI,WAAW;AAC5C,gBAAM,2BAA2B,OAAO,KAAK,sBAAsB,UAAU;AAE7E,cAAI,4BAA4B;AAC9B,kBAAM,UAAU,qCAAqC,QAAQ,4BAA4B,IAAI;AAC7F,4BAAgB,QAAQ,gBAAgB;AAExC,gBAAI,QAAQ,gBAAgB,SAAS,KAAK,QAAQ,kBAAkB,SAAS,GAAG;AAC9E,kBAAI;AAAA,gBACF,qCACE,QAAQ,gBAAgB,SACxB;AAAA,cACJ;AACA,yBAAW;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAEA,YAAI,6BAA6B;AAEjC,YAAI,YAAY,KAAK,yBAAyB,wCAAwC,KAAK,cAAc,GAAG;AAC1G,uCAA6B,IAAI,WAAW;AAC5C,gBAAM,2BAA2B,OAAO,KAAK,sBAAsB,UAAU;AAE7E,cAAI,4BAA4B;AAC9B,kBAAM,UAAU,qCAAqC,QAAQ,4BAA4B,IAAI;AAC7F,4BAAgB,QAAQ,gBAAgB;AAExC,gBAAI,CAAC,mBAAmB,yBAAyB,OAAO,GAAG;AACzD,kBAAI;AAAA,gBACF,gDACE,QAAQ,gBAAgB,SACxB;AAAA,cACJ;AACA,yBAAW;AAAA,YACb,OAAO;AACL,kBAAI;AAAA,gBACF,iDACE,QAAQ,gBAAgB,SACxB;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAIA,YAAI,KAAK,wBAAwB,CAAC,YAAY;AAC5C,gBAAM,YAAY,MAAM,WAAW,UAAU;AAC7C,gBAAM,UAAU,IAAI,QAAQ;AAE5B,kBAAQ,SAAS,KAAK,qBAAqB;AAE3C,gBAAM,QAAQ,cAAc,KAAK;AAKjC,cAAI,CAAC,SAAS;AACZ,oBAAQ,qBAAqB,CAAC;AAC9B,oBAAQ,qBAAqB,CAAC;AAC9B,oBAAQ,2BAA2B,EAAE,OAAO,CAAC,EAAE;AAC/C,oBAAQ,2BAA2B,EAAE,OAAO,CAAC,EAAE;AAAA,UACjD;AAEA,cAAI,YACF,QAAQ;AAAA,YACN,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,UACb,KACA,QAAQ;AAAA,YACN,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,UACb;AAEF,cAAI,CAAC,SAAS;AACZ,wBAAY;AAAA,UACd;AAEA,cAAI,WAAW;AACb,gBAAI,CAAC,QAAQ,oBAAoB;AAC/B,sBAAQ,qBAAqB;AAE7B,0BAAY;AAAA,YACd;AAAA,UACF;AAEA,cAAI,WAAW;AACb,gBAAI,QAAQ,oDAAoD;AAChE,kBAAM,QAAQ,KAAK;AAAA,UACrB;AAAA,QACF;AAEA,YAAI,CAAC,YAAY,mBAAmB,iBAA+B;AACjE,cAAI,mBAAmB,iBAA+B;AACpD,gBAAI,QAAQ,kCAAkC;AAC9C,kBAAM,KAAK,KAAK,cAAc,mBAAmB,qCAAqC;AAAA,UACxF,WAAW,UAAU;AACnB,gBAAI,QAAQ,yDAAyD;AACrE,kBAAM,KAAK,KAAK,cAAc,mBAAmB,0CAA0C;AAAA,UAC7F,OAAO;AACL,gBAAI,QAAQ,iDAAiD,iBAAiB,GAAG;AACjF,kBAAM,KAAK,KAAK,cAAc,mBAAmB,qCAAqC;AAAA,UACxF;AAEA,cAAI,mBAAmB,iBAA+B;AACpD,iBAAK,UAAU;AACf,kBAAM,KAAK,WAAW;AAAA,UACxB;AAEA,gBAAM,KAAK,YAAY,MAAM,MAAS;AACtC,eAAK;AAGL,gBAAM,KAAK,iBAAiB;AAE5B,cAAI,KAAK,WAAW,iBAA+B;AACjD,gBAAI,UAAU,kDAAkD;AAChE,kBAAM,KAAK,KAAK,cAAc,mBAAmB,wCAAwC;AAAA,UAC3F,OAAO;AACL,gBAAI,QAAQ,mEAAmE,KAAK,SAAS,GAAG;AAChG,kBAAM,KAAK,KAAK,cAAc,mBAAmB,yCAAyC;AAAA,UAC5F;AAAA,QACF,WAAW,iBAAiB,GAAG;AAC7B,eAAK,UAAU;AACf,cAAI,UAAU,wBAAwB;AACtC,gBAAM,KAAK,KAAK,cAAc,mBAAmB,oCAAoC;AACrF,gBAAM,KAAK,WAAW,8BAA8B;AACpD,eAAK,mBAAmB,SAAS,MAAM,QAAQ;AAAA,QACjD,OAAO;AACL,eAAK,UAAU;AAEf,cAAI;AAAA,YACF,eAAe,0CAA0C,KAAK,OAAO,WAAU,oBAAI,KAAK,GAAE,SAAS;AAAA,UACrG;AACA,gBAAM,KAAK,KAAK,cAAc,mBAAmB,mBAAmB,eAAe,WAAW;AAC9F,gBAAM,KAAK,WAAW,QAAQ;AAC9B,gBAAM,KAAK,WAAW,8BAA8B;AACpD,cAAI,UAAU,0CAA0C;AACxD,gBAAM,KAAK,KAAK,cAAc,mBAAmB,0CAA0C;AAC3F,eAAK,mBAAmB,SAAS,MAAM,QAAQ;AAAA,QACjD;AAAA,MACF;AAAA,MAEA,MAAM,aAAa,UAAoB;AACrC,YAAIC,SAAO,oBAAI,KAAK,GAAE,QAAQ;AAE9B,yBAAiB,YAAQ,oCAAmB,QAAQ,GAAG;AACrD,cAAI,SAAS,UAAa,KAAK,UAAU,GAAG;AAC1C,gBAAI,SAAS,KAAK,QAAQ,QAAQ,EAAE;AACpC,qBAAS,OAAO,QAAQ,QAAQ,EAAE,EAAE,KAAK;AAEzC,gBAAI,OAAO,KAAK;AAEhB,gBAAI,CAAC,MAAM;AACT,qBAAO;AAAA,YACT;AAEA,kBAAM,KAAK,IAAI,cAAc,MAAM;AAKnC,gBAAI,GAAG,6CAA0D;AAC/D,kBAAI,QAAQ,KAAK,OAAO,MAAM,OAAO,OAAO,MAAM;AAAA,YACpD;AAEA,gBAAI,GAAG,qCAAkD;AACvD,mBAAK;AAKL,kBAAI,KAAK,mBAAmB,KAAK,0BAA0B;AACzD,oBAAI,KAAK,mCAAmC;AAC1C,sBAAI,MAAM,mFAAmF;AAC7F,uBAAK,sBAAsB;AAAA,gBAC7B,OAAO;AAEL,wBAAM,KAAK;AACX,wBAAM,YAAY,KAAK;AACvB,6BAAW,iBAAkB;AAC3B,wBAAI,MAAM,2CAA2C,SAAS,cAAc;AAC5E,uBAAG,6BAA6B;AAChC,0BAAM,GAAG,WAAW,0BAA0B,SAAS,EAAE;AACzD,wBAAI,MAAM,oEAAoE;AAI9E,+BAAW,WAAY;AACrB,0BAAI,GAAG,8BAA8B,GAAG,0BAA0B;AAChE,2BAAG,6BAA6B;AAChC,2BAAG,sBAAsB;AACzB,4BAAI,GAAG,mCAAmC;AACxC,8BAAI,MAAM,qFAAqF;AAAA,wBACjG,OAAO;AACL,8BAAI,MAAM,mFAAmF;AAC7F,6BAAG,mBAAmB;AAAA,wBACxB;AAAA,sBACF;AAAA,oBACF,GAAG,GAAK;AAAA,kBACV,GAAG,GAAI;AAAA,gBACT;AAAA,cACF;AAEA,mBAAK,UAAU;AACf,mBAAK,oBAAoB,MAAM;AAAA,YACjC,WAAW,GAAG,yCAAsD;AAElE,kBAAI,KAAK,4BAA4B;AACnC,qBAAK,6BAA6B;AAClC,qBAAK,sBAAsB;AAE3B,oBAAI,KAAK,0BAA0B;AAEjC,sBAAI,KAAK,qCAAqC,CAAC,KAAK,kBAAkB;AAEpE,wBAAI,MAAM,kFAAkF;AAAA,kBAC9F,OAAO;AAEL,wBAAI,MAAM,wDAAwD;AAClE,yBAAK,mBAAmB;AAAA,kBAC1B;AAAA,gBACF,OAAO;AACL,sBAAI,MAAM,mFAAmF;AAAA,gBAC/F;AAAA,cACF;AAAA,YACF,WAAW,GAAG,qCAAkD;AAC9D,oBAAM,KAAK,mBAAmB;AAAA,YAChC,WAAW,GAAG,uCAAoD;AAChE,oBAAM,aAAa,KAAK,oBAAoB,MAAM;AAClD,oBAAM,OAAO,KAAK,sBAAsB,MAAM;AAE9C,kBAAI,QAAQ,aAAa,aAAa,cAAc;AAGpD,mBAAK,mBAAmB;AAGxB,kBACE,KAAK,mBACL,KAAK,4BACL,CAAC,KAAK,gBACN,KAAK,mCACL;AACA,oBAAI,MAAM,2FAA2F;AACrG,sBAAM,KAAK;AACX,sBAAM,YAAY,KAAK;AAGvB,2BAAW,iBAAkB;AAC3B,sBAAI,MAAM,2CAA2C,SAAS,iCAAiC;AAC/F,qBAAG,6BAA6B;AAChC,wBAAM,GAAG,WAAW,0BAA0B,SAAS,EAAE;AACzD,sBAAI,MAAM,oEAAoE;AAG9E,6BAAW,WAAY;AACrB,wBAAI,GAAG,8BAA8B,GAAG,0BAA0B;AAChE,yBAAG,6BAA6B;AAChC,yBAAG,sBAAsB;AACzB,0BAAI,MAAM,+EAA+E;AACzF,yBAAG,mBAAmB;AAAA,oBACxB;AAAA,kBACF,GAAG,GAAK;AAAA,gBACV,GAAG,GAAI;AAAA,cACT;AAEA,kBAAI,cAAc,MAAM;AACtB,sBAAM,IAAI,IAAI,OAAO;AAErB,kBAAE,KAAK,kBAAkB,mBAAmB,UAAU;AACtD,kBAAE,OAAO;AAET,qBAAK,sBAAsB,CAAC;AAAA,cAC9B;AAAA,YACF,WAAW,GAAG,0CAAuD;AACnE,oBAAM,aAAa,KAAK,oBAAoB,MAAM;AAClD,oBAAM,OAAO,KAAK,sBAAsB,MAAM;AAE9C,kBAAI,QAAQ,aAAa,aAAa,iBAAiB;AAEvD,kBAAI,cAAc,MAAM;AACtB,sBAAM,IAAI,IAAI,OAAO;AAErB,kBAAE,KAAK,kBAAkB,mBAAmB,UAAU;AACtD,kBAAE,OAAO;AAET,qBAAK,yBAAyB,CAAC;AAAA,cACjC;AAAA,YACF,WACE,GAAG,sCACH,KAAK,kBAAkB,qCACvB;AACA,mBAAK,gBAAgB;AACrB,mBAAK,WAAW,YAAY;AAAA,YAC9B,WACE,GAAG,qCACH,KAAK,kBAAkB,sCACvB;AACA,mBAAK,gBAAgB;AAAA,YACvB,WACE,GAAG,wCACH,KAAK,kBAAkB,uCACvB;AACA,mBAAK,gBAAgB;AACrB,oBAAM,KAAK,SAAS,MAAM;AAC1B,mBAAK,gBAAgB;AACrB,mBAAK,WAAW,aAAa;AAAA,YAC/B,WACE,GAAG,wCACH,KAAK,kBAAkB,sBACvB;AACA,mBAAK,gBAAgB;AAErB,kBAAI,KAAK,qBAAqB;AAC5B,gBAAAP,cAAa,KAAK,mBAAmB;AACrC,qBAAK,sBAAsB;AAAA,cAC7B;AAAA,YACF,WAAW,GAAG,sCAAmD;AAC/D,kBAAI,WAAW,KAAK,kBAAkB,MAAM;AAC5C,kBAAI,aAAa,QAAW;AAC1B,2BAAW;AAAA,cACb;AAEA,mBAAK,eAAe,SAAS,MAAM,QAAQ;AAAA,YAC7C,WAAW,GAAG,sCAAmD;AAC/D,kBAAI,WAAW,KAAK,kBAAkB,MAAM;AAC5C,kBAAI,aAAa,QAAW;AAC1B,2BAAW;AAAA,cACb;AAEA,mBAAK,cAAc,SAAS,MAAM,QAAQ;AAAA,YAC5C,WAAW,GAAG,sCAAmD;AAC/D,kBAAI,WAAW,KAAK,kBAAkB,MAAM;AAC5C,kBAAI,aAAa,QAAW;AAC1B,2BAAW;AAAA,cACb;AAEA,mBAAK,iBAAiB,SAAS,MAAM,QAAQ;AAAA,YAC/C;AAEA,iBAAK,cAAc;AACnB,gBAAI,KAAK,YAAY,SAAS,KAAO;AACnC,mBAAK,YAAY,OAAO,GAAG,GAAI;AAAA,YACjC;AACA,iBAAK,YAAY,KAAK;AAAA,cACpB,SAAS;AAAA,cACT,UAAUO;AAAA,cACV,YAAY,GAAG;AAAA,YACjB,CAAC;AACD,YAAAA;AAEA,iBAAK,gBAAgB,SAAS,MAAM,EAAE;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,MAEA,oBAAoB,MAAc;AAChC,YAAI,QAAQ,iCAAiC,IAAI;AAEjD,YAAI,KAAK,UAAU;AACjB,gBAAM,KAAK;AAEX,qBAAW,iBAAkB;AAC3B,gBAAI,QAAQ,sBAAsB,GAAG,QAAQ;AAC7C,kBAAM,GAAG,cAAc,kBAAkB,GAAG,QAAQ;AAAA,UACtD,GAAG,GAAI;AAAA,QACT;AAGA,aAAK,2BAA2B;AAMhC,aAAK,iBAAiB,SAAS,MAAM,IAAI;AAAA,MAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,qBAAqB;AACzB,YAAI,KAAK,cAAc;AACrB,cAAI,MAAM,mEAAmE;AAC7E;AAAA,QACF;AAEA,cAAM,OAAO,KAAK;AAClB,YAAI,MAAM,2EAA2E,IAAI,KAAK;AAK9F,aAAK,eAAe,IAAI,qBAAqB;AAG7C,aAAK,aAAa,YAAY,UAAU,CAAC,QAAQ,gBAAgB;AAC/D,cAAI,MAAM,6CAA6C,YAAY,eAAe,EAAE;AACpF,eAAK,kBAAkB,SAAS,MAAM,WAAW;AAAA,QACnD,CAAC;AAED,aAAK,aAAa,eAAe,UAAU,CAAC,QAAQ,WAAW;AAC7D,cAAI,MAAM,sCAAsC,MAAM,EAAE;AACxD,eAAK,qBAAqB,SAAS,MAAM,MAAM;AAAA,QACjD,CAAC;AAED,aAAK,aAAa,QAAQ,UAAU,CAAC,QAAQ,cAAc;AACzD,cAAI,QAAQ,gDAAgD,UAAU,IAAI,WAAW,UAAU,MAAM,MAAM,EAAE;AAC7G,eAAK,cAAc,SAAS,MAAM,SAAS;AAAA,QAC7C,CAAC;AAED,aAAK,aAAa,UAAU,UAAU,CAAC,QAAQ,iBAAiB;AAC9D,cAAI,QAAQ,oCAAoC,aAAa,MAAM,EAAE;AACrE,eAAK,eAAe,SAAS,MAAM,aAAa,MAAM;AAAA,QACxD,CAAC;AAED,aAAK,aAAa,kBAAkB,UAAU,CAAC,QAAQ,iBAAiB;AACtE,cAAI,QAAQ,sCAAsC,aAAa,iBAAiB,EAAE;AAClF,eAAK,mBAAmB,SAAS,MAAM,YAAY;AAAA,QACrD,CAAC;AAED,aAAK,aAAa,QAAQ,UAAU,CAAC,QAAQH,WAAU;AACrD,cAAI,MAAM,uBAAuBA,MAAK,EAAE;AAAA,QAC1C,CAAC;AAED,YAAI;AACF,cAAI,MAAM,0DAA0D,KAAK,SAAS,MAAM;AACxF,gBAAM,KAAK,aAAa,QAAQ,aAAa,KAAK,SAAS;AAC3D,cAAI,MAAM,6DAA6D;AAAA,QACzE,SAAS,GAAG;AACV,cAAI,QAAQ,iDAAiD,CAAC,EAAE;AAChE,eAAK,eAAe;AAAA,QACtB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,wBAAwB;AACtB,YAAI,KAAK,cAAc;AACrB,eAAK,aAAa,WAAW;AAC7B,eAAK,eAAe;AAAA,QACtB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,6BAA6B;AAC3B,YAAI,KAAK,6BAA6B;AACpC;AAAA,QACF;AAEA,YAAI,QAAQ,kCAAkC;AAE9C,cAAM,SAAS,YAAY;AACzB,cAAI,KAAK,YAAY,iBAA+B;AAClD;AAAA,UACF;AAEA,cAAI;AAGF,kBAAM,iBAAiB,KAAK,YAAY;AACxC,kBAAM,KAAK,mBAAmB,gBAAgB;AAG9C,kBAAM,UAAU,MAAM,GAAG;AAGzB,gBAAI,YAAsB,CAAC;AAC3B,gBAAI,aAAa;AACjB,gBAAI,eAAe;AAEnB,qBAAS,IAAI,gBAAgB,IAAI,KAAK,YAAY,QAAQ,KAAK;AAC7D,oBAAM,OAAO,KAAK,YAAY,CAAC,EAAE;AAGjC,kBAAI,KAAK,SAAS,cAAc,GAAG;AACjC,6BAAa;AAEb,sBAAM,YAAY,KAAK,QAAQ,cAAc;AAC7C,sBAAM,YAAY,KAAK,UAAU,YAAY,eAAe,MAAM,EAAE,KAAK;AACzE,oBAAI,WAAW;AACb,4BAAU,KAAK,SAAS;AACxB,mCAAiB,UAAU,MAAM,KAAK,KAAK,CAAC,GAAG;AAC/C,mCAAiB,UAAU,MAAM,KAAK,KAAK,CAAC,GAAG;AAAA,gBACjD;AACA;AAAA,cACF;AAEA,kBAAI,YAAY;AAEd,oBAAI,YAAY;AAChB,oBAAI,UAAU,MAAM,sBAAsB,GAAG;AAE3C;AAAA,gBACF;AAEA,0BAAU,KAAK,SAAS;AACxB,iCAAiB,UAAU,MAAM,KAAK,KAAK,CAAC,GAAG;AAC/C,iCAAiB,UAAU,MAAM,KAAK,KAAK,CAAC,GAAG;AAG/C,oBAAI,iBAAiB,KAAK,UAAU,SAAS,GAAG;AAC9C;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAEA,gBAAI,UAAU,SAAS,GAAG;AACxB,oBAAM,UAAU,UAAU,KAAK,EAAE;AACjC,kBAAI,QAAQ,qBAAqB,QAAQ,UAAU,GAAG,GAAG,IAAI,KAAK;AAElE,kBAAI,QAAQ,WAAW,GAAG,GAAG;AAC3B,sBAAM,UAAU,KAAK,MAAM,OAAO;AAQlC,oBAAI,QAAQ,YAAY,QAAQ,SAAS,2BAA2B;AAEpE,2BAAW,UAAU,SAAS;AAC5B,sBAAI,OAAO,YAAY,OAAO,UAAU;AACtC,0BAAM,WAAW,OAAO;AACxB,0BAAM,UAAU,KAAK,qBAAqB,IAAI,QAAQ;AACtD,0BAAM,SAAS,OAAO;AACtB,0BAAM,YAAY,OAAO,aAAa;AAGtC,wBAAI,iBAAiB,CAAC;AACtB,wBAAI,SAAS;AACX,4BAAM,KAAK,OAAO,IAAI,QAAQ;AAC9B,4BAAM,KAAK,OAAO,IAAI,QAAQ;AAC9B,4BAAM,KAAK,OAAO,IAAI,QAAQ;AAC9B,4BAAM,WAAW,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AACtD,uCAAiB,YAAY,yBAAyB,cAAc,QAAQ;AAAA,oBAC9E;AAEA,wBAAI,gBAAgB;AAClB,2BAAK,qBAAqB,IAAI,UAAU,EAAE,GAAG,QAAQ,UAAU,CAAC;AAGhE,4BAAM,aAAa,KAAK,oBAAoB,QAAQ,KAAK;AAEzD,0BAAI,QAAQ,4CAA4C,aAAa,SAAS,KAAK,UAAU,MAAM,CAAC;AAGpG,4BAAM,cAAc;AAAA,wBAClB,SAAS,QAAQ,KAAK,IAAI,CAAC,IAAI,QAAQ;AAAA,wBACvC,QAAQ;AAAA,0BACN,WAAW;AAAA,0BACX,SAAS;AAAA,0BACT,SAAS;AAAA,wBACX;AAAA,wBACA,MAAM;AAAA,0BACJ,cAAc;AAAA,0BACd,iBAAiB,UACb,KAAK;AAAA,6BACF,OAAO,IAAI,QAAQ,MAAM,KAAK,OAAO,IAAI,QAAQ,MAAM,KAAK,OAAO,IAAI,QAAQ,MAAM;AAAA,0BACxF,IACA;AAAA,0BACJ,UAAU;AAAA,0BACV,QAAQ;AAAA,4BACN,OAAO;AAAA,4BACP;AAAA,4BACA,IAAI,OAAO,MAAM;AAAA,4BACjB,MAAM;AAAA,4BACN,UAAU;AAAA,4BACV,MAAM;AAAA,4BACN,SAAS;AAAA,4BACT,MAAM,OAAO,QAAQ;AAAA,0BACvB;AAAA,0BACA,cAAc;AAAA,wBAChB;AAAA,sBACF;AAEA,2BAAK,mBAAmB,SAAS,MAAM,WAAW;AAAA,oBACpD;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF,SAAS,GAAG;AAEV,gBAAI,QAAQ,iCAAiC,CAAC;AAAA,UAChD;AAAA,QACF;AAGA,mBAAW,QAAQ,GAAI;AACvB,aAAK,8BAA8BH,aAAY,QAAQ,6BAA6B;AAAA,MACtF;AAAA;AAAA;AAAA;AAAA,MAKA,4BAA4B;AAC1B,YAAI,KAAK,6BAA6B;AACpC,wBAAc,KAAK,2BAA2B;AAC9C,eAAK,8BAA8B;AAAA,QACrC;AACA,aAAK,qBAAqB,MAAM;AAAA,MAClC;AAAA;AAAA;AAAA;AAAA,MAKA,oBAAoB,UAAsC;AAIxD,eAAO;AAAA,MACT;AAAA,MAEA,sBAAsB,QAAgB;AACpC,YAAI,KAAK,SAAS;AAChB,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC5C,kBAAM,KAAK,KAAK,QAAQ,CAAC;AACzB,kBAAM,KAAK;AAEX,gBAAI,OAAO,OAAO,IAAI;AACpB,yBAAW,iBAAkB;AAC3B,sBAAM,GAAG,cAAc,QAAQ,OAAO,EAAE;AAAA,cAC1C,GAAG,GAAI;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAEA,aAAK,mBAAmB,SAAS,MAAM,MAAM;AAAA,MAC/C;AAAA,MAEA,yBAAyB,QAAgB;AACvC,aAAK,sBAAsB,SAAS,MAAM,MAAM;AAAA,MAClD;AAAA,MAEA,kBAAkB,MAAc;AAC9B,cAAM,aAAa,KAAK,QAAQ,GAAG;AAEnC,YAAI,aAAa,GAAG;AAClB,iBAAO;AAAA,QACT;AAEA,YAAI,YAAY,KAAK,QAAQ,KAAK,aAAa,CAAC;AAEhD,YAAI,YAAY,GAAG;AACjB,sBAAY,KAAK;AAAA,QACnB;AAEA,eAAO,KAAK,UAAU,aAAa,GAAG,SAAS;AAAA,MACjD;AAAA,MAEA,oBAAoB,MAAc;AAChC,cAAM,cAAc,KAAK,QAAQ,SAAS;AAE1C,YAAI,cAAc,GAAG;AACnB,iBAAO;AAAA,QACT;AAEA,cAAM,YAAY,KAAK,QAAQ,KAAK,WAAW;AAE/C,YAAI,YAAY,GAAG;AACjB,iBAAO;AAAA,QACT;AAEA,cAAM,YAAY,KAAK,QAAQ,KAAK,SAAS;AAC7C,YAAI,YAAY,GAAG;AACjB,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,UAAU,YAAY,GAAG,SAAS;AAAA,MAChD;AAAA,MAEA,sBAAsB,MAAc;AAClC,cAAM,YAAY,KAAK,QAAQ,MAAM;AAErC,YAAI,YAAY,GAAG;AACjB,iBAAO;AAAA,QACT;AAEA,cAAM,YAAY,KAAK,QAAQ,KAAK,SAAS;AAE7C,YAAI,YAAY,GAAG;AACjB,iBAAO;AAAA,QACT;AAEA,YAAI,YAAY,KAAK,QAAQ,KAAK,SAAS;AAC3C,YAAI,YAAY,GAAG;AACjB,sBAAY,KAAK;AAAA,QACnB;AAEA,eAAO,KAAK,UAAU,YAAY,GAAG,SAAS;AAAA,MAChD;AAAA,MAEA,MAAM,aAAa,UAAoB;AACrC,yBAAiB,YAAQ,oCAAmB,QAAQ,GAAG;AACrD,cAAI,SAAS,UAAa,KAAK,UAAU,GAAG;AAC1C,gBAAI,SAAS,KAAK,QAAQ,QAAQ,EAAE;AACpC,qBAAS,OAAO,QAAQ,QAAQ,EAAE;AAElC,iBAAK,eAAe,SAAS,MAAM,MAAM;AAEzC,gBAAI,QAAQ,mBAAmB,MAAM;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AChjFA,IAAAO,qBAAA;AAAA;AAAA;AAEA,QAAM,eAAe,CAAC,cAAc,eAAe,WAAW;AAC9D,QAAM,UAAU,OAAO,SAAS;AAEhC,QAAI,QAAS,cAAa,KAAK,MAAM;AAErC,WAAO,UAAU;AAAA,MACf;AAAA,MACA,cAAc,OAAO,MAAM,CAAC;AAAA,MAC5B,MAAM;AAAA,MACN;AAAA,MACA,sBAAsB,uBAAO,wBAAwB;AAAA,MACrD,WAAW,uBAAO,WAAW;AAAA,MAC7B,aAAa,uBAAO,aAAa;AAAA,MACjC,YAAY,uBAAO,WAAW;AAAA,MAC9B,MAAM,MAAM;AAAA,MAAC;AAAA,IACf;AAAA;AAAA;;;ACjBA;AAAA;AAAA;AAEA,QAAM,EAAE,aAAa,IAAI;AAEzB,QAAM,aAAa,OAAO,OAAO,OAAO;AAUxC,aAAS,OAAO,MAAM,aAAa;AACjC,UAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,UAAI,KAAK,WAAW,EAAG,QAAO,KAAK,CAAC;AAEpC,YAAM,SAAS,OAAO,YAAY,WAAW;AAC7C,UAAI,SAAS;AAEb,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAM,MAAM,KAAK,CAAC;AAClB,eAAO,IAAI,KAAK,MAAM;AACtB,kBAAU,IAAI;AAAA,MAChB;AAEA,UAAI,SAAS,aAAa;AACxB,eAAO,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,MAAM;AAAA,MAChE;AAEA,aAAO;AAAA,IACT;AAYA,aAAS,MAAM,QAAQ,MAAM,QAAQ,QAAQ,QAAQ;AACnD,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,eAAO,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;AAAA,MAC7C;AAAA,IACF;AASA,aAAS,QAAQ,QAAQ,MAAM;AAC7B,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,eAAO,CAAC,KAAK,KAAK,IAAI,CAAC;AAAA,MACzB;AAAA,IACF;AASA,aAAS,cAAc,KAAK;AAC1B,UAAI,IAAI,WAAW,IAAI,OAAO,YAAY;AACxC,eAAO,IAAI;AAAA,MACb;AAEA,aAAO,IAAI,OAAO,MAAM,IAAI,YAAY,IAAI,aAAa,IAAI,MAAM;AAAA,IACrE;AAUA,aAAS,SAAS,MAAM;AACtB,eAAS,WAAW;AAEpB,UAAI,OAAO,SAAS,IAAI,EAAG,QAAO;AAElC,UAAI;AAEJ,UAAI,gBAAgB,aAAa;AAC/B,cAAM,IAAI,WAAW,IAAI;AAAA,MAC3B,WAAW,YAAY,OAAO,IAAI,GAAG;AACnC,cAAM,IAAI,WAAW,KAAK,QAAQ,KAAK,YAAY,KAAK,UAAU;AAAA,MACpE,OAAO;AACL,cAAM,OAAO,KAAK,IAAI;AACtB,iBAAS,WAAW;AAAA,MACtB;AAEA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA,MACf;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAGA,QAAI,CAAC,QAAQ,IAAI,mBAAmB;AAClC,UAAI;AACF,cAAM,aAAa,UAAQ,YAAY;AAEvC,eAAO,QAAQ,OAAO,SAAU,QAAQ,MAAM,QAAQ,QAAQ,QAAQ;AACpE,cAAI,SAAS,GAAI,OAAM,QAAQ,MAAM,QAAQ,QAAQ,MAAM;AAAA,cACtD,YAAW,KAAK,QAAQ,MAAM,QAAQ,QAAQ,MAAM;AAAA,QAC3D;AAEA,eAAO,QAAQ,SAAS,SAAU,QAAQ,MAAM;AAC9C,cAAI,OAAO,SAAS,GAAI,SAAQ,QAAQ,IAAI;AAAA,cACvC,YAAW,OAAO,QAAQ,IAAI;AAAA,QACrC;AAAA,MACF,SAAS,GAAG;AAAA,MAEZ;AAAA,IACF;AAAA;AAAA;;;AClIA;AAAA;AAAA;AAEA,QAAM,QAAQ,uBAAO,OAAO;AAC5B,QAAM,OAAO,uBAAO,MAAM;AAM1B,QAAM,UAAN,MAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,YAAY,aAAa;AACvB,aAAK,KAAK,IAAI,MAAM;AAClB,eAAK;AACL,eAAK,IAAI,EAAE;AAAA,QACb;AACA,aAAK,cAAc,eAAe;AAClC,aAAK,OAAO,CAAC;AACb,aAAK,UAAU;AAAA,MACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,IAAI,KAAK;AACP,aAAK,KAAK,KAAK,GAAG;AAClB,aAAK,IAAI,EAAE;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,CAAC,IAAI,IAAI;AACP,YAAI,KAAK,YAAY,KAAK,YAAa;AAEvC,YAAI,KAAK,KAAK,QAAQ;AACpB,gBAAM,MAAM,KAAK,KAAK,MAAM;AAE5B,eAAK;AACL,cAAI,KAAK,KAAK,CAAC;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACtDjB;AAAA;AAAA;AAEA,QAAMC,QAAO,UAAQ,MAAM;AAE3B,QAAM,aAAa;AACnB,QAAM,UAAU;AAChB,QAAM,EAAE,YAAY,IAAI;AAExB,QAAM,aAAa,OAAO,OAAO,OAAO;AACxC,QAAM,UAAU,OAAO,KAAK,CAAC,GAAM,GAAM,KAAM,GAAI,CAAC;AACpD,QAAM,qBAAqB,uBAAO,oBAAoB;AACtD,QAAM,eAAe,uBAAO,cAAc;AAC1C,QAAM,YAAY,uBAAO,UAAU;AACnC,QAAM,WAAW,uBAAO,SAAS;AACjC,QAAM,SAAS,uBAAO,OAAO;AAS7B,QAAI;AAKJ,QAAM,oBAAN,MAAwB;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,MAyBtB,YAAY,SAAS,UAAU,YAAY;AACzC,aAAK,cAAc,aAAa;AAChC,aAAK,WAAW,WAAW,CAAC;AAC5B,aAAK,aACH,KAAK,SAAS,cAAc,SAAY,KAAK,SAAS,YAAY;AACpE,aAAK,YAAY,CAAC,CAAC;AACnB,aAAK,WAAW;AAChB,aAAK,WAAW;AAEhB,aAAK,SAAS;AAEd,YAAI,CAAC,aAAa;AAChB,gBAAM,cACJ,KAAK,SAAS,qBAAqB,SAC/B,KAAK,SAAS,mBACd;AACN,wBAAc,IAAI,QAAQ,WAAW;AAAA,QACvC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,gBAAgB;AACzB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,QAAQ;AACN,cAAM,SAAS,CAAC;AAEhB,YAAI,KAAK,SAAS,yBAAyB;AACzC,iBAAO,6BAA6B;AAAA,QACtC;AACA,YAAI,KAAK,SAAS,yBAAyB;AACzC,iBAAO,6BAA6B;AAAA,QACtC;AACA,YAAI,KAAK,SAAS,qBAAqB;AACrC,iBAAO,yBAAyB,KAAK,SAAS;AAAA,QAChD;AACA,YAAI,KAAK,SAAS,qBAAqB;AACrC,iBAAO,yBAAyB,KAAK,SAAS;AAAA,QAChD,WAAW,KAAK,SAAS,uBAAuB,MAAM;AACpD,iBAAO,yBAAyB;AAAA,QAClC;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,OAAO,gBAAgB;AACrB,yBAAiB,KAAK,gBAAgB,cAAc;AAEpD,aAAK,SAAS,KAAK,YACf,KAAK,eAAe,cAAc,IAClC,KAAK,eAAe,cAAc;AAEtC,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,UAAU;AACR,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS,MAAM;AACpB,eAAK,WAAW;AAAA,QAClB;AAEA,YAAI,KAAK,UAAU;AACjB,gBAAM,WAAW,KAAK,SAAS,SAAS;AAExC,eAAK,SAAS,MAAM;AACpB,eAAK,WAAW;AAEhB,cAAI,UAAU;AACZ;AAAA,cACE,IAAI;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAe,QAAQ;AACrB,cAAM,OAAO,KAAK;AAClB,cAAM,WAAW,OAAO,KAAK,CAAC,WAAW;AACvC,cACG,KAAK,4BAA4B,SAChC,OAAO,8BACR,OAAO,2BACL,KAAK,wBAAwB,SAC3B,OAAO,KAAK,wBAAwB,YACnC,KAAK,sBAAsB,OAAO,2BACvC,OAAO,KAAK,wBAAwB,YACnC,CAAC,OAAO,wBACV;AACA,mBAAO;AAAA,UACT;AAEA,iBAAO;AAAA,QACT,CAAC;AAED,YAAI,CAAC,UAAU;AACb,gBAAM,IAAI,MAAM,8CAA8C;AAAA,QAChE;AAEA,YAAI,KAAK,yBAAyB;AAChC,mBAAS,6BAA6B;AAAA,QACxC;AACA,YAAI,KAAK,yBAAyB;AAChC,mBAAS,6BAA6B;AAAA,QACxC;AACA,YAAI,OAAO,KAAK,wBAAwB,UAAU;AAChD,mBAAS,yBAAyB,KAAK;AAAA,QACzC;AACA,YAAI,OAAO,KAAK,wBAAwB,UAAU;AAChD,mBAAS,yBAAyB,KAAK;AAAA,QACzC,WACE,SAAS,2BAA2B,QACpC,KAAK,wBAAwB,OAC7B;AACA,iBAAO,SAAS;AAAA,QAClB;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAe,UAAU;AACvB,cAAM,SAAS,SAAS,CAAC;AAEzB,YACE,KAAK,SAAS,4BAA4B,SAC1C,OAAO,4BACP;AACA,gBAAM,IAAI,MAAM,mDAAmD;AAAA,QACrE;AAEA,YAAI,CAAC,OAAO,wBAAwB;AAClC,cAAI,OAAO,KAAK,SAAS,wBAAwB,UAAU;AACzD,mBAAO,yBAAyB,KAAK,SAAS;AAAA,UAChD;AAAA,QACF,WACE,KAAK,SAAS,wBAAwB,SACrC,OAAO,KAAK,SAAS,wBAAwB,YAC5C,OAAO,yBAAyB,KAAK,SAAS,qBAChD;AACA,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,gBAAgB,gBAAgB;AAC9B,uBAAe,QAAQ,CAAC,WAAW;AACjC,iBAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,QAAQ;AACnC,gBAAI,QAAQ,OAAO,GAAG;AAEtB,gBAAI,MAAM,SAAS,GAAG;AACpB,oBAAM,IAAI,MAAM,cAAc,GAAG,iCAAiC;AAAA,YACpE;AAEA,oBAAQ,MAAM,CAAC;AAEf,gBAAI,QAAQ,0BAA0B;AACpC,kBAAI,UAAU,MAAM;AAClB,sBAAM,MAAM,CAAC;AACb,oBAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,KAAK,MAAM,IAAI;AACjD,wBAAM,IAAI;AAAA,oBACR,gCAAgC,GAAG,MAAM,KAAK;AAAA,kBAChD;AAAA,gBACF;AACA,wBAAQ;AAAA,cACV,WAAW,CAAC,KAAK,WAAW;AAC1B,sBAAM,IAAI;AAAA,kBACR,gCAAgC,GAAG,MAAM,KAAK;AAAA,gBAChD;AAAA,cACF;AAAA,YACF,WAAW,QAAQ,0BAA0B;AAC3C,oBAAM,MAAM,CAAC;AACb,kBAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,KAAK,MAAM,IAAI;AACjD,sBAAM,IAAI;AAAA,kBACR,gCAAgC,GAAG,MAAM,KAAK;AAAA,gBAChD;AAAA,cACF;AACA,sBAAQ;AAAA,YACV,WACE,QAAQ,gCACR,QAAQ,8BACR;AACA,kBAAI,UAAU,MAAM;AAClB,sBAAM,IAAI;AAAA,kBACR,gCAAgC,GAAG,MAAM,KAAK;AAAA,gBAChD;AAAA,cACF;AAAA,YACF,OAAO;AACL,oBAAM,IAAI,MAAM,sBAAsB,GAAG,GAAG;AAAA,YAC9C;AAEA,mBAAO,GAAG,IAAI;AAAA,UAChB,CAAC;AAAA,QACH,CAAC;AAED,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,WAAW,MAAM,KAAK,UAAU;AAC9B,oBAAY,IAAI,CAAC,SAAS;AACxB,eAAK,YAAY,MAAM,KAAK,CAACC,MAAK,WAAW;AAC3C,iBAAK;AACL,qBAASA,MAAK,MAAM;AAAA,UACtB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,SAAS,MAAM,KAAK,UAAU;AAC5B,oBAAY,IAAI,CAAC,SAAS;AACxB,eAAK,UAAU,MAAM,KAAK,CAACA,MAAK,WAAW;AACzC,iBAAK;AACL,qBAASA,MAAK,MAAM;AAAA,UACtB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,YAAY,MAAM,KAAK,UAAU;AAC/B,cAAMC,YAAW,KAAK,YAAY,WAAW;AAE7C,YAAI,CAAC,KAAK,UAAU;AAClB,gBAAM,MAAM,GAAGA,SAAQ;AACvB,gBAAM,aACJ,OAAO,KAAK,OAAO,GAAG,MAAM,WACxBF,MAAK,uBACL,KAAK,OAAO,GAAG;AAErB,eAAK,WAAWA,MAAK,iBAAiB;AAAA,YACpC,GAAG,KAAK,SAAS;AAAA,YACjB;AAAA,UACF,CAAC;AACD,eAAK,SAAS,kBAAkB,IAAI;AACpC,eAAK,SAAS,YAAY,IAAI;AAC9B,eAAK,SAAS,QAAQ,IAAI,CAAC;AAC3B,eAAK,SAAS,GAAG,SAAS,cAAc;AACxC,eAAK,SAAS,GAAG,QAAQ,aAAa;AAAA,QACxC;AAEA,aAAK,SAAS,SAAS,IAAI;AAE3B,aAAK,SAAS,MAAM,IAAI;AACxB,YAAI,IAAK,MAAK,SAAS,MAAM,OAAO;AAEpC,aAAK,SAAS,MAAM,MAAM;AACxB,gBAAMC,OAAM,KAAK,SAAS,MAAM;AAEhC,cAAIA,MAAK;AACP,iBAAK,SAAS,MAAM;AACpB,iBAAK,WAAW;AAChB,qBAASA,IAAG;AACZ;AAAA,UACF;AAEA,gBAAME,QAAO,WAAW;AAAA,YACtB,KAAK,SAAS,QAAQ;AAAA,YACtB,KAAK,SAAS,YAAY;AAAA,UAC5B;AAEA,cAAI,KAAK,SAAS,eAAe,YAAY;AAC3C,iBAAK,SAAS,MAAM;AACpB,iBAAK,WAAW;AAAA,UAClB,OAAO;AACL,iBAAK,SAAS,YAAY,IAAI;AAC9B,iBAAK,SAAS,QAAQ,IAAI,CAAC;AAE3B,gBAAI,OAAO,KAAK,OAAO,GAAGD,SAAQ,sBAAsB,GAAG;AACzD,mBAAK,SAAS,MAAM;AAAA,YACtB;AAAA,UACF;AAEA,mBAAS,MAAMC,KAAI;AAAA,QACrB,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,UAAU,MAAM,KAAK,UAAU;AAC7B,cAAMD,YAAW,KAAK,YAAY,WAAW;AAE7C,YAAI,CAAC,KAAK,UAAU;AAClB,gBAAM,MAAM,GAAGA,SAAQ;AACvB,gBAAM,aACJ,OAAO,KAAK,OAAO,GAAG,MAAM,WACxBF,MAAK,uBACL,KAAK,OAAO,GAAG;AAErB,eAAK,WAAWA,MAAK,iBAAiB;AAAA,YACpC,GAAG,KAAK,SAAS;AAAA,YACjB;AAAA,UACF,CAAC;AAED,eAAK,SAAS,YAAY,IAAI;AAC9B,eAAK,SAAS,QAAQ,IAAI,CAAC;AAE3B,eAAK,SAAS,GAAG,QAAQ,aAAa;AAAA,QACxC;AAEA,aAAK,SAAS,SAAS,IAAI;AAE3B,aAAK,SAAS,MAAM,IAAI;AACxB,aAAK,SAAS,MAAMA,MAAK,cAAc,MAAM;AAC3C,cAAI,CAAC,KAAK,UAAU;AAIlB;AAAA,UACF;AAEA,cAAIG,QAAO,WAAW;AAAA,YACpB,KAAK,SAAS,QAAQ;AAAA,YACtB,KAAK,SAAS,YAAY;AAAA,UAC5B;AAEA,cAAI,KAAK;AACP,YAAAA,QAAO,IAAI,WAAWA,MAAK,QAAQA,MAAK,YAAYA,MAAK,SAAS,CAAC;AAAA,UACrE;AAMA,eAAK,SAAS,SAAS,IAAI;AAE3B,eAAK,SAAS,YAAY,IAAI;AAC9B,eAAK,SAAS,QAAQ,IAAI,CAAC;AAE3B,cAAI,OAAO,KAAK,OAAO,GAAGD,SAAQ,sBAAsB,GAAG;AACzD,iBAAK,SAAS,MAAM;AAAA,UACtB;AAEA,mBAAS,MAAMC,KAAI;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,UAAU;AAQjB,aAAS,cAAc,OAAO;AAC5B,WAAK,QAAQ,EAAE,KAAK,KAAK;AACzB,WAAK,YAAY,KAAK,MAAM;AAAA,IAC9B;AAQA,aAAS,cAAc,OAAO;AAC5B,WAAK,YAAY,KAAK,MAAM;AAE5B,UACE,KAAK,kBAAkB,EAAE,cAAc,KACvC,KAAK,YAAY,KAAK,KAAK,kBAAkB,EAAE,aAC/C;AACA,aAAK,QAAQ,EAAE,KAAK,KAAK;AACzB;AAAA,MACF;AAEA,WAAK,MAAM,IAAI,IAAI,WAAW,2BAA2B;AACzD,WAAK,MAAM,EAAE,OAAO;AACpB,WAAK,MAAM,EAAE,WAAW,IAAI;AAC5B,WAAK,eAAe,QAAQ,aAAa;AASzC,WAAK,MAAM;AAAA,IACb;AAQA,aAAS,eAAeF,MAAK;AAK3B,WAAK,kBAAkB,EAAE,WAAW;AAEpC,UAAI,KAAK,MAAM,GAAG;AAChB,aAAK,SAAS,EAAE,KAAK,MAAM,CAAC;AAC5B;AAAA,MACF;AAEA,MAAAA,KAAI,WAAW,IAAI;AACnB,WAAK,SAAS,EAAEA,IAAG;AAAA,IACrB;AAAA;AAAA;;;AC/gBA;AAAA;AAAA;AAEA,QAAM,EAAE,OAAO,IAAI,UAAQ,QAAQ;AAEnC,QAAM,EAAE,QAAQ,IAAI;AAcpB,QAAM,aAAa;AAAA,MACjB;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;A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",
  "names": ["fs", "os", "fs", "object", "define", "path", "fs", "platform", "array", "error", "app", "resolve", "open", "parse", "coerce", "self", "err", "useColors", "util", "stream", "useColors", "fd", "fs", "net", "path", "spawn", "app", "check", "CreatorToolsEditorViewMode", "CreatorToolsEditPreference", "MinecraftTrack", "MinecraftFlavor", "DedicatedServerMode", "MinecraftGameConnectionMode", "WindowState", "ThemePreference", "RemoteServerAccessLevel", "error", "number", "string", "array", "object", "string", "partial", "toString", "object", "isObject", "isFunction", "isString", "object", "isNaN", "number", "require_implementation", "concatty", "slicy", "bind", "Empty", "bind", "bind", "bind", "undefined", "doEval", "bind", "stringToPath", "string", "number", "getBaseIntrinsic", "hasPropertyDescriptors", "define", "bind", "isArray", "stableStringify", "get", "stringify", "out", "resolve", "url", "date", "err", "object", "handler", "handler", "handler", "handler", "EventDispatcher", "require_dist", "url", "resolve", "import_ste_events", "LogItem", "number", "err", "require_isarray", "toString", "Buffer", "isArray", "isBoolean", "isNumber", "isString", "isUndefined", "isRegExp", "isObject", "isDate", "isFunction", "inherits", "util", "Buffer", "util", "join", "err", "self", "require_node", "util", "Buffer", "stream", "object", "err", "keys", "util", "Readable", "self", "err", "require_safe_buffer", "Buffer", "Buffer", "self", "Readable", "isArray", "Buffer", "util", "stream", "err", "self", "n", "util", "err", "err2", "stream", "util", "e", "isArray", "require_lib", "Promise", "resolve", "reject", "self", "error", "all", "i", "global", "undefined", "setImmediate", "base64", "e", "array", "transform", "path", "self", "isBlob", "resolve", "self", "_utf8len", "string2buf", "i", "utf8border", "buf2string", "Readable", "self", "base64", "resolve", "err", "self", "self", "makeTable", "crcTable", "crc32", "isArray", "crc32", "crc32", "_has", "Z_FIXED", "Z_BINARY", "Z_TEXT", "Z_UNKNOWN", "zero", "STORED_BLOCK", "STATIC_TREES", "DYN_TREES", "MIN_MATCH", "MAX_MATCH", "LENGTH_CODES", "LITERALS", "L_CODES", "D_CODES", "BL_CODES", "HEAP_SIZE", "MAX_BITS", "Buf_size", "MAX_BL_BITS", "END_BLOCK", "REP_3_6", "REPZ_3_10", "REPZ_11_138", "extra_lbits", "extra_dbits", "extra_blbits", "bl_order", "DIST_CODE_LEN", "static_ltree", "static_dtree", "_dist_code", "_length_code", "base_length", "base_dist", "StaticTreeDesc", "static_l_desc", "static_d_desc", "static_bl_desc", "TreeDesc", "d_code", "put_short", "send_bits", "send_code", "bi_reverse", "bi_flush", "gen_bitlen", "gen_codes", "tr_static_init", "init_block", "bi_windup", "copy_block", "smaller", "pqdownheap", "compress_block", "build_tree", "scan_tree", "send_tree", "build_bl_tree", "send_all_trees", "rank", "detect_data_type", "static_init_done", "_tr_init", "_tr_stored_block", "_tr_align", "_tr_flush_block", "_tr_tally", "adler32", "require_crc32", "makeTable", "crcTable", "crc32", "trees", "adler32", "crc32", "Z_NO_FLUSH", "Z_PARTIAL_FLUSH", "Z_FULL_FLUSH", "Z_FINISH", "Z_BLOCK", "Z_OK", "Z_STREAM_END", "Z_STREAM_ERROR", "Z_DATA_ERROR", "Z_BUF_ERROR", "Z_DEFAULT_COMPRESSION", "Z_FILTERED", "Z_HUFFMAN_ONLY", "Z_RLE", "Z_FIXED", "Z_DEFAULT_STRATEGY", "Z_UNKNOWN", "Z_DEFLATED", "MAX_MEM_LEVEL", "MAX_WBITS", "DEF_MEM_LEVEL", "LENGTH_CODES", "LITERALS", "L_CODES", "D_CODES", "BL_CODES", "HEAP_SIZE", "MAX_BITS", "MIN_MATCH", "MAX_MATCH", "MIN_LOOKAHEAD", "PRESET_DICT", "INIT_STATE", "EXTRA_STATE", "NAME_STATE", "COMMENT_STATE", "HCRC_STATE", "BUSY_STATE", "FINISH_STATE", "BS_NEED_MORE", "BS_BLOCK_DONE", "BS_FINISH_STARTED", "BS_FINISH_DONE", "OS_CODE", "err", "rank", "zero", "flush_pending", "flush_block_only", "put_byte", "putShortMSB", "read_buf", "longest_match", "fill_window", "deflate_stored", "deflate_fast", "deflate_slow", "deflate_rle", "deflate_huff", "Config", "configuration_table", "lm_init", "DeflateState", "deflateResetKeep", "deflateReset", "deflateSetHeader", "deflateInit2", "deflateInit", "deflate", "deflateEnd", "deflateSetDictionary", "STR_APPLY_UIA_OK", "_utf8len", "buf2binstring", "ZStream", "require_deflate", "strings", "ZStream", "toString", "Z_NO_FLUSH", "Z_FINISH", "Z_OK", "Z_STREAM_END", "Z_SYNC_FLUSH", "Z_DEFAULT_COMPRESSION", "Z_DEFAULT_STRATEGY", "Z_DEFLATED", "Deflate", "_mode", "deflate", "deflateRaw", "gzip", "BAD", "TYPE", "inflate_fast", "MAXBITS", "ENOUGH_LENS", "ENOUGH_DISTS", "CODES", "LENS", "DISTS", "lbase", "lext", "dbase", "dext", "inflate_table", "adler32", "crc32", "inflate_fast", "inflate_table", "CODES", "LENS", "DISTS", "Z_FINISH", "Z_BLOCK", "Z_TREES", "Z_OK", "Z_STREAM_END", "Z_NEED_DICT", "Z_STREAM_ERROR", "Z_DATA_ERROR", "Z_MEM_ERROR", "Z_BUF_ERROR", "Z_DEFLATED", "HEAD", "FLAGS", "TIME", "OS", "EXLEN", "EXTRA", "NAME", "COMMENT", "HCRC", "DICTID", "DICT", "TYPE", "TYPEDO", "STORED", "COPY_", "COPY", "TABLE", "LENLENS", "CODELENS", "LEN_", "LEN", "LENEXT", "DIST", "DISTEXT", "MATCH", "LIT", "CHECK", "LENGTH", "DONE", "BAD", "MEM", "SYNC", "ENOUGH_LENS", "ENOUGH_DISTS", "MAX_WBITS", "DEF_WBITS", "zswap32", "InflateState", "inflateResetKeep", "inflateReset", "inflateReset2", "inflateInit2", "inflateInit", "virgin", "lenfix", "distfix", "fixedtables", "updatewindow", "inflate", "inflateEnd", "inflateGetHeader", "inflateSetDictionary", "GZheader", "require_inflate", "strings", "ZStream", "GZheader", "toString", "Inflate", "_mode", "inflate", "inflateRaw", "assign", "deflate", "inflate", "constants", "self", "crc32", "platform", "date", "record", "self", "e", "date", "stream", "self", "defaults", "object", "path", "isRegExp", "file", "resolve", "data", "require_lib", "JSZip", "EXTRA", "isArray", "crypto", "Buffer", "buffer", "isString", "blocks", "buffer8", "exports", "factory", "module", "exports", "parse", "parseModule", "parseScript", "tokenize", "CommentHandler", "getQualifiedElementName", "JSXParser", "object", "Regex", "JSXClosingElement", "JSXElement", "JSXEmptyExpression", "JSXExpressionContainer", "JSXIdentifier", "JSXMemberExpression", "JSXAttribute", "JSXNamespacedName", "JSXOpeningElement", "JSXSpreadAttribute", "JSXText", "ArrayExpression", "ArrayPattern", "ArrowFunctionExpression", "AssignmentExpression", "AssignmentPattern", "AsyncArrowFunctionExpression", "AsyncFunctionDeclaration", "AsyncFunctionExpression", "AwaitExpression", "BinaryExpression", "BlockStatement", "BreakStatement", "CallExpression", "CatchClause", "ClassBody", "ClassDeclaration", "ClassExpression", "ComputedMemberExpression", "ConditionalExpression", "test", "ContinueStatement", "DebuggerStatement", "Directive", "DoWhileStatement", "EmptyStatement", "ExportAllDeclaration", "ExportDefaultDeclaration", "ExportNamedDeclaration", "ExportSpecifier", "ExpressionStatement", "ForInStatement", "ForOfStatement", "ForStatement", "FunctionDeclaration", "FunctionExpression", "Identifier", "IfStatement", "ImportDeclaration", "ImportDefaultSpecifier", "ImportNamespaceSpecifier", "ImportSpecifier", "LabeledStatement", "Literal", "MetaProperty", "MethodDefinition", "Module", "NewExpression", "ObjectExpression", "ObjectPattern", "Property", "RegexLiteral", "pattern", "RestElement", "ReturnStatement", "Script", "SequenceExpression", "SpreadElement", "StaticMemberExpression", "Super", "SwitchCase", "SwitchStatement", "TaggedTemplateExpression", "TemplateElement", "TemplateLiteral", "ThisExpression", "ThrowStatement", "TryStatement", "handler", "UnaryExpression", "UpdateExpression", "VariableDeclaration", "VariableDeclarator", "WhileStatement", "WithStatement", "YieldExpression", "ArrowParameterPlaceHolder", "Parser", "isAsync", "assert", "ErrorHandler", "error", "hexValue", "octalValue", "Scanner", "self", "Reader", "check", "Tokenizer", "config", "require_src", "array", "require_common", "isObject", "isArray", "isString", "isNumber", "isFunction", "define", "array", "assign", "isArray", "array", "i", "CommentArray", "require_parse", "CommentArray", "define", "tokenize", "transform", "error", "array", "isObject", "parse", "require_stringify", "isArray", "isObject", "isFunction", "isNumber", "isString", "escape", "string", "join", "stringify", "toString", "require_src", "parse", "tokenize", "stringify", "CommentArray", "assign", "import_ste_events", "currentObj", "import_ste_events", "path", "import_ste_events", "path", "parentFolder", "path", "JSZip", "File", "File", "path", "keepStartCensorStrategy", "keepEndCensorStrategy", "asteriskCensorStrategy", "fixedCharCensorStrategy", "grawlixCensorStrategy", "randomCharFromSetCensorStrategy", "fixedPhraseCensorStrategy", "compareMatchByPositionAndId", "TextCensor", "assignIncrementingIds", "pattern", "DataSet", "PhraseBuilder", "pattern", "SyntaxKind", "pattern", "RegExpMatcher", "ParserError", "Parser", "pattern", "strings", "parseRawPattern", "factory", "collapseDuplicatesTransformer", "remapCharactersTransformer", "resolveConfusablesTransformer", "resolveLeetSpeakTransformer", "toAsciiLowerCaseTransformer", "skipNonAlphabeticTransformer", "require_dist", "exports", "mod", "pattern", "path", "version", "pattern", "process", "base64", "import_ste_events", "import_ste_events", "prototype", "filter", "hasOwnProperty", "define", "error", "config", "request", "util", "util", "stream", "self", "err", "extname", "charset", "path", "extension", "isAsync", "err", "iterator", "error", "iterator", "error", "iterator", "error", "iterator", "require_shams", "toStringTag", "object", "util", "path", "http", "https", "parseUrl", "fs", "crypto", "FormData", "append", "err", "request", "defaults", "error", "FormData", "path", "build", "toString", "encode", "url", "crypto", "init_utils", "init_utils", "path", "path", "isFormData", "isFileList", "transitional", "filter", "self", "prototype", "config", "transform", "config", "request", "resolve", "validateStatus", "url", "url", "hostname", "require_ms", "parse", "require_common", "coerce", "self", "extend", "require_browser", "error", "os", "version", "stream", "require_node", "util", "error", "useColors", "require_src", "require_debug", "error", "url", "URL", "http", "https", "assert", "isFunction", "error", "noop", "self", "isString", "isBuffer", "request", "parseUrl", "exports", "spread", "url", "err", "stream", "err", "DEFAULT_PORTS", "hostname", "url", "util", "stream", "base64", "followRedirects", "session", "resolve", "config", "hostname", "err", "data", "auth", "path", "handleRequestError", "transitional", "origin", "url", "path", "config", "merge", "config", "auth", "config", "resolve", "request", "err", "transitional", "aborted", "err", "signal", "stream", "iterator", "done", "err", "isFunction", "ReadableStream", "TextEncoder", "Request", "Response", "config", "url", "request", "resolve", "err", "fetch", "config", "adapter", "config", "adapter", "version", "validators", "config", "err", "transitional", "error", "url", "resolve", "config", "request", "err", "Axios", "AxiosError", "CanceledError", "isCancel", "CancelToken", "VERSION", "all", "isAxiosError", "spread", "toFormData", "AxiosHeaders", "HttpStatusCode", "getAdapter", "mergeConfig", "init_axios", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "G", "k", "decodeTgaCodec", "resolve", "base64", "import_ste_events", "Exifr", "import_ste_events", "path", "bytes", "AttributeComponent", "import_ste_events", "AttributeComponent", "import_ste_events", "import_ste_events", "import_ste_events", "int", "version", "i", "state", "import_ste_events", "mod", "version", "import_ste_events", "mod", "version", "path", "import_ste_events", "import_ste_events", "import_ste_events", "version", "import_ste_events", "import_ste_events", "import_ste_events", "parse", "__defProp", "__export", "all", "object", "isAsync", "bigint", "optional", "test", "pattern", "handler", "error", "check", "open", "config", "AnnotationCategory", "all", "path", "item", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "path", "import_ste_events", "mod", "import_ste_events", "import_ste_events", "config", "import_ste_events", "version", "i", "import_ste_events", "path", "obj", "key", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "path", "import_ste_events", "import_ste_events", "version", "import_ste_events", "path", "md5", "error", "error", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "path", "import_ste_events", "path", "gen", "resolve", "PackInfoGeneratorTest", "TopicTestIdBase", "sep", "isDefined", "record", "isArray", "isObject", "cleanFieldId", "DataFormIssueType", "path", "pattern", "cacheKey", "init_axios", "GameType", "Generator", "Difficulty", "PlayerPermissionsLevel", "build", "toString", "assign", "constants", "rank", "resolve", "i", "i", "import_ste_events", "CHUNK_X_SIZE", "CHUNK_Z_SIZE", "path", "handler", "version", "resolve", "keyValue", "xPlane", "WorldItemInfoGeneratorTest", "blockTypeComponents", "itemTypeComponents", "session", "value", "registry", "all", "partial", "error", "partial", "path", "pattern", "registry", "required", "init_axios", "path", "path", "path", "init_axios", "resolve", "path", "init_axios", "resolve", "import_ste_events", "url", "err", "error", "resolve", "request", "path", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__hasOwnProp", "__export", "all", "__copyProps", "mod", "build", "node_default", "initialize", "transform", "version", "isRequest", "clone", "object", "define", "platform", "path3", "error", "request", "err", "transform2", "fs3", "messages", "request2", "resolve", "error2", "origin", "resolve2", "filter", "fs", "os", "path", "crypto", "path2", "fs2", "os2", "resolve", "build", "path", "FolderDeploy", "Project", "error", "base64", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "config", "pattern", "rng", "rng", "config", "err", "config", "pattern", "rng", "transform", "pattern", "parseHex", "custom", "config", "spread", "partial", "ProjectExporter", "messages", "ContentGenerator", "ContentWriter", "error", "error", "error", "error", "Project", "error", "all", "error", "error", "error", "path", "import_ste_events", "WorldDataInfoGeneratorTest", "err", "import_ste_events", "path", "cached", "PackSizeInfoGeneratorTest", "path", "cached", "totalTextureMemoryByTier", "nonVanillaTextureMemoryByTier", "ver", "AnimationResourceInfoGeneratorTest", "path", "ItemTypeInfo", "TopicTestIdBase", "error", "MCFunctionInfoGeneratorTest", "Exifr", "error", "exifrModule", "test", "test", "util", "assertIs", "assertNever", "object", "joinValues", "array", "objectUtil", "util", "issue", "error", "issue", "util", "issue", "path", "errorUtil", "errorMap", "version", "base64", "util", "check", "r", "path", "error", "err", "transform", "_ZodString", "parsedType", "ctx", "result", "issue", "issues", "elements", "processed", "preprocess", "ZodFirstPartyTypeKind", "util", "SoundsDefinitionInfoGeneratorTest", "issue", "ScriptInfoGeneratorTest", "version", "test", "test", "require_validate", "factory", "exports", "validate", "schema", "path", "value", "j", "instance", "error", "transforms", "transform", "error", "error", "import_json_schema", "init_axios", "err", "import_json_schema", "JsonSchemaErrorBase", "NotCurrentFormatVersionBase", "init_axios", "err", "error", "error", "Tests", "error", "toCamelCase", "Tests", "Tests", "error", "settings", "version", "CheckResourcePackDependenciesGeneratorTest", "error", "error", "cached", "config", "import_ste_events", "import_ste_events", "error", "import_ste_events", "import_ste_events", "import_ste_events", "test", "import_ste_events", "test", "import_ste_events", "wtm", "import_ste_events", "import_ste_events", "import_ste_events", "path", "mod", "defaults", "mod", "path", "err", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "handler", "firstDot", "url", "filePaths", "ProjectItemRelations", "path", "extension", "content", "config", "path", "import_ste_events", "import_ste_events", "path", "pattern", "transform", "cacheKey", "cached", "err", "path", "uuid", "import_ste_events", "version", "init_axios", "path", "url", "version", "Project", "resolve", "import_ste_events", "import_ste_events", "path", "import_ste_events", "path", "variantKeys", "resolve", "import_ste_events", "path", "import_ste_events", "Project", "err", "path", "resolve", "i", "mod", "folder", "fileName", "file", "name", "method", "hook", "error", "hook", "bind", "object", "isPlainObject", "defaults", "merge", "url", "parseUrl", "literal", "parse", "VERSION", "NullObject", "parse", "safeParse", "isPlainObject", "fetch", "error", "url", "noop", "err", "withDefaults", "VERSION", "defaults_default", "init_dist_bundle", "withDefaults", "newRequest", "VERSION", "init_dist_bundle", "request", "endpoint", "init_dist_bundle", "VERSION", "noop", "init_dist_src", "init_dist_bundle", "VERSION", "defaults", "hook", "auth", "VERSION", "init_version", "request", "path", "error", "init_dist_src", "init_version", "VERSION", "iterator", "url", "error", "iterator2", "VERSION", "init_dist_bundle", "VERSION", "init_version", "defaults", "options", "endpoint", "url", "init_dist_src", "init_version", "VERSION", "VERSION", "init_version", "Octokit", "init_dist_src", "init_dist_bundle", "init_version", "VERSION", "init_dist_src", "Octokit", "import_ste_events", "date", "import_ste_events", "init_axios", "resolve", "Project", "error", "url", "import_ste_events", "path", "import_ste_events", "PackageType", "path", "Project", "import_ste_events", "path", "path", "newFullPath", "result", "path", "import_ste_events", "CreatorTools", "init_axios", "url", "resolve", "firstPipe", "content", "Project", "path", "localStorage", "project", "define", "module", "exports", "o", "e", "n", "global", "Promise", "self", "error", "resolve", "all", "i", "key", "toString", "length", "idb", "err", "base64", "forage", "iterator", "value", "keys", "db", "toString$1", "t", "reject", "sameValue", "includes", "array", "isArray", "extend", "LocalForage", "config", "configureMissingMethods", "methodNotImplementedFactory", "promise", "setDriverSupport", "supportedDrivers", "createInstance", "localforage", "err", "import_localforage", "localforage", "import_localforage", "localforage", "import_ste_events", "CreatorTools", "path", "path", "resolve", "fs", "crypto", "path", "file", "path", "fs", "import_ste_events", "err", "isFile", "resolve", "err", "chunksToLinesAsync", "streamWrite", "stream", "onExit", "config", "crypto", "crypto", "util", "filter", "util", "require_constants", "crcTable", "constants", "Parser", "filter", "util", "zlib", "Parser", "err", "constants", "constants", "filter", "zlib", "util", "constants", "assert", "zlib", "util", "Inflate", "self", "error", "err", "filter", "zlib", "Parser", "err", "inflatedData", "zlib", "constants", "parse", "util", "Parser", "PNG", "err", "zlib", "path", "crypto", "fs", "net", "resolve", "err", "error", "isValid", "import_ste_events", "import_ste_events", "error", "resolve", "err", "DedicatedServerStatus", "fs", "os", "clearTimeout", "setInterval", "import_ste_events", "DedicatedServerBackupStatus", "error", "path", "Project", "time", "require_constants", "zlib", "err", "endpoint", "data", "isBlob", "Receiver", "error", "err", "isBlob", "Sender", "merge", "err", "handler", "error", "parse", "EventEmitter", "https", "http", "net", "randomBytes", "createHash", "Readable", "URL", "Receiver", "Sender", "isBlob", "parse", "WebSocket", "err", "handler", "request", "key", "stream", "require_stream", "WebSocket", "stream", "err", "createWebSocketStream", "error", "open", "parse", "protocol", "EventEmitter", "http", "createHash", "WebSocket", "WebSocketServer", "version", "err", "stringify", "UsedValueState", "constants", "error", "self", "mergeValues", "Type", "isNumber", "error", "err", "self", "DataType", "pattern", "validate", "_a", "self", "normalize", "self", "ValidationError", "append", "assign", "ValidationError", "validate", "resolve", "require_utils", "ipv6", "path", "esc", "path", "http", "https", "normalize", "parse", "resolve", "Ajv", "cacheKey", "self", "error", "error", "error", "error", "error", "error", "error", "error", "error", "error", "error", "error", "error", "error", "error", "error", "error", "error", "self", "DiscrError", "error", "required", "Ajv", "validate", "date", "TIME", "time", "error", "self", "fs", "DedicatedServerMode", "GameType", "Generator", "Difficulty", "PlayerPermissionsLevel", "DedicatedServerStatus", "partial", "resolve", "error", "path", "app", "BrowserWindow", "ChildProcess", "fs", "platform", "import_ste_events", "init_axios", "fs", "os", "fs", "import_ste_events", "http", "https", "fs", "import_stream", "WebSocket", "crypto", "NEVER", "initializer", "assert", "extend", "floatSafeRemainder", "getParsedType", "isObject", "isPlainObject", "merge", "omit", "array", "object", "path", "Class", "config", "error", "issue", "parse", "safeParse", "version", "time", "timeRegex", "origin", "inst", "floatSafeRemainder", "inst", "origin", "pattern", "version", "version", "checks", "isAborted", "result", "safeParse", "_", "url", "inst", "base64", "isValidJWT", "result", "isObject", "allowsEval", "r", "results", "left", "right", "mergeValues", "isPlainObject", "isPlainObject", "result", "output", "pattern", "result", "result", "left", "r", "origin", "issue", "en_default", "Class", "Class", "_emoji", "Class", "Class", "Class", "_null", "Class", "Class", "pattern", "Class", "Class", "pattern", "id", "schema", "params", "gen", "parse", "safeParse", "safeParse", "result", "safeParseAsync", "error", "def", "iso_exports", "date", "datetime", "duration", "time", "datetime", "date", "time", "duration", "initializer", "issue", "issues", "ZodError", "parse", "parseAsync", "safeParse", "safeParseAsync", "ZodType", "def", "parse", "safeParse", "parseAsync", "safeParseAsync", "check", "ZodString", "_emoji", "datetime", "date", "time", "duration", "string", "ZodNumber", "ZodType", "number", "ZodBoolean", "ZodType", "boolean", "ZodNull", "ZodType", "_null", "ZodUnknown", "ZodType", "ZodNever", "ZodArray", "ZodType", "ZodObject", "ZodType", "ZodOptional", "object", "ZodObject", "ZodUnion", "ZodType", "ZodDiscriminatedUnion", "ZodIntersection", "ZodRecord", "ZodType", "ZodEnum", "ZodType", "ZodLiteral", "ZodType", "ZodType", "issue", "output", "ZodOptional", "ZodNullable", "ZodDefault", "ZodType", "ZodCatch", "ZodType", "ZodType", "ZodReadonly", "ZodType", "custom", "issue", "en_default", "custom", "string", "number", "_null", "object", "ErrorCode", "object", "number", "string", "string", "object", "boolean", "object", "number", "string", "_null", "iso_exports", "boolean", "object", "string", "request", "number", "boolean", "check", "check", "parsedType", "emojiRegex", "check", "literal", "pattern", "object", "types", "x", "base", "check", "required", "name", "schema", "safeParse", "request", "error", "handler", "task", "resolve", "safeParse", "jsonrpcNotification", "messages", "isPlainObject", "Ajv", "_addFormats", "request", "request", "handler", "safeParse", "error", "McpZodTypeKind", "name", "value", "encoded", "values", "pattern", "config", "handler", "request", "error", "safeParseAsync", "handler", "resolve", "prompt", "config", "process", "process", "error", "resolve", "Readable", "crypto", "RequestError", "url", "error", "url2", "stream", "err", "resolve", "error", "messages", "resolve", "stream", "handler", "crypto", "time", "fs", "crypto", "config", "context", "path", "Project", "path", "path", "fs", "path", "resolve", "error", "onExit", "createLogger", "path", "fs", "err", "createLogger", "error", "Project", "SoundDefinitionSchema", "filter", "config", "error", "resolve", "fs", "base64", "config", "error", "zlib", "import_ste_events", "import_ste_events", "serverCommand", "import_pngjs", "fs", "path", "config", "parentDir", "error", "DedicatedServerStatus", "base64", "resolve", "Project", "err", "resolve", "config", "fs", "error", "WebSocketServer", "request", "url", "err", "userAgent", "path", "origin", "auth", "Project", "world", "registry", "messages", "fs", "date", "targetStorage", "fs", "error", "version", "platform", "path", "resolve", "import_ste_events", "http", "fs", "WebSocketServer", "fs", "path", "fs", "path", "app", "err", "BrowserWindow", "app", "spawn", "error", "squirrel", "url", "open"]
}
